@bundle-stats/ui 4.22.3 → 4.23.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 (395) hide show
  1. package/lib/app/app.js +4 -0
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +14 -5
  4. package/lib/app/header/header.module.css +1 -3
  5. package/lib/components/asset-name/asset-name.js +8 -7
  6. package/lib/components/asset-name/asset-name.js.map +1 -1
  7. package/lib/components/asset-name/asset-name.module.css +11 -10
  8. package/lib/components/bundle-assets/bundle-assets.js +4 -2
  9. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  10. package/lib/components/bundle-assets/bundle-assets.module.css +0 -12
  11. package/lib/components/bundle-assets/index.js +2 -1
  12. package/lib/components/bundle-assets/index.js.map +1 -1
  13. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +4 -2
  14. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  15. package/lib/components/bundle-modules/bundle-modules.js +5 -3
  16. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  17. package/lib/components/bundle-modules/bundle-modules.module.css +2 -16
  18. package/lib/components/bundle-modules/index.js +2 -1
  19. package/lib/components/bundle-modules/index.js.map +1 -1
  20. package/lib/components/bundle-packages/bundle-packages.js +5 -3
  21. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  22. package/lib/components/bundle-packages/bundle-packages.module.css +18 -22
  23. package/lib/components/delta/delta.js +3 -13
  24. package/lib/components/delta/delta.js.map +1 -1
  25. package/lib/components/delta/delta.module.css +13 -12
  26. package/lib/components/delta/index.js.map +1 -1
  27. package/lib/components/entry-info/entry-info.js +4 -2
  28. package/lib/components/entry-info/entry-info.js.map +1 -1
  29. package/lib/components/entry-info/entry-info.module.css +7 -2
  30. package/lib/components/index.js +3 -1
  31. package/lib/components/index.js.map +1 -1
  32. package/lib/components/insight-icon/insight-icon.module.css +6 -6
  33. package/lib/components/job-name/job-name.js +1 -2
  34. package/lib/components/job-name/job-name.js.map +1 -1
  35. package/lib/components/jobs-header/jobs-header.js +1 -1
  36. package/lib/components/jobs-header/jobs-header.js.map +1 -1
  37. package/lib/components/jobs-header/jobs-header.module.css +0 -1
  38. package/lib/components/metric-change-legend/index.js +18 -0
  39. package/lib/components/metric-change-legend/index.js.map +1 -0
  40. package/lib/components/metric-change-legend/metric-change-legend.js +91 -0
  41. package/lib/components/metric-change-legend/metric-change-legend.js.map +1 -0
  42. package/lib/components/metric-change-legend/metric-change-legend.module.css +80 -0
  43. package/lib/components/metric-run-info/metric-run-info.js +24 -8
  44. package/lib/components/metric-run-info/metric-run-info.js.map +1 -1
  45. package/lib/components/metrics-display-selector/metrics-display-selector.js +7 -9
  46. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  47. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +0 -27
  48. package/lib/components/metrics-table/metrics-table.js +31 -20
  49. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  50. package/lib/components/metrics-table/metrics-table.module.css +4 -12
  51. package/lib/components/metrics-table-header/metrics-table-header.js +6 -6
  52. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -1
  53. package/lib/components/metrics-table-header/metrics-table-header.module.css +8 -12
  54. package/lib/components/metrics-table-options/metrics-table-options.js +4 -5
  55. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  56. package/lib/components/metrics-table-row-count/index.js +18 -0
  57. package/lib/components/metrics-table-row-count/index.js.map +1 -0
  58. package/lib/components/metrics-table-row-count/metrics-table-row-count.js +17 -0
  59. package/lib/components/metrics-table-row-count/metrics-table-row-count.js.map +1 -0
  60. package/lib/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  61. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  62. package/lib/components/metrics-table-title/metrics-table-title.js.map +1 -1
  63. package/lib/components/metrics-treemap/metrics-treemap.constants.js +3 -1
  64. package/lib/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  65. package/lib/components/metrics-treemap/metrics-treemap.js +46 -113
  66. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  67. package/lib/components/metrics-treemap/metrics-treemap.module.css +3 -274
  68. package/lib/components/metrics-treemap/metrics-treemap.utils.js +81 -16
  69. package/lib/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  70. package/lib/components/metrics-treemap/tile/index.js +18 -0
  71. package/lib/components/metrics-treemap/tile/index.js.map +1 -0
  72. package/lib/components/metrics-treemap/tile/tile.js +79 -0
  73. package/lib/components/metrics-treemap/tile/tile.js.map +1 -0
  74. package/lib/components/metrics-treemap/tile/tile.module.css +145 -0
  75. package/lib/components/metrics-treemap/tile-group/index.js +18 -0
  76. package/lib/components/metrics-treemap/tile-group/index.js.map +1 -0
  77. package/lib/components/metrics-treemap/tile-group/tile-group.js +75 -0
  78. package/lib/components/metrics-treemap/tile-group/tile-group.js.map +1 -0
  79. package/lib/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  80. package/lib/components/metrics-treemap/tile-group-title/index.js +18 -0
  81. package/lib/components/metrics-treemap/tile-group-title/index.js.map +1 -0
  82. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.js +24 -0
  83. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.js.map +1 -0
  84. package/lib/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  85. package/lib/components/run-info/run-info.js +26 -14
  86. package/lib/components/run-info/run-info.js.map +1 -1
  87. package/lib/components/run-info/run-info.module.css +35 -26
  88. package/lib/components/sort-button/sort-button.module.css +0 -2
  89. package/lib/components/summary/summary.js +10 -10
  90. package/lib/components/summary/summary.js.map +1 -1
  91. package/lib/components/summary/summary.module.css +60 -14
  92. package/lib/constants.js +13 -1
  93. package/lib/constants.js.map +1 -1
  94. package/lib/css/default.css +7 -4
  95. package/lib/css/variables.css +84 -60
  96. package/lib/layout/flex-stack/flex-stack.js +2 -2
  97. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  98. package/lib/layout/flex-stack/flex-stack.module.css +65 -10
  99. package/lib/query-state.js +6 -3
  100. package/lib/query-state.js.map +1 -1
  101. package/lib/ui/button/button.js +3 -2
  102. package/lib/ui/button/button.js.map +1 -1
  103. package/lib/ui/button/button.module.css +38 -27
  104. package/lib/ui/control-group/control-group.js +1 -1
  105. package/lib/ui/control-group/control-group.js.map +1 -1
  106. package/lib/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  107. package/lib/ui/dialog/dialog.js +7 -3
  108. package/lib/ui/dialog/dialog.js.map +1 -1
  109. package/lib/ui/dialog/dialog.module.css +27 -0
  110. package/lib/ui/dropdown/dropdown.js +13 -4
  111. package/lib/ui/dropdown/dropdown.js.map +1 -1
  112. package/lib/ui/dropdown/dropdown.module.css +60 -7
  113. package/lib/ui/filters/filters.js +28 -16
  114. package/lib/ui/filters/filters.js.map +1 -1
  115. package/lib/ui/filters/filters.module.css +3 -19
  116. package/lib/ui/hover-card/hover-card.js +7 -1
  117. package/lib/ui/hover-card/hover-card.js.map +1 -1
  118. package/lib/ui/hover-card/hover-card.module.css +18 -5
  119. package/lib/ui/input/input.module.css +2 -2
  120. package/lib/ui/table/table.module.css +12 -6
  121. package/lib/ui/tabs/tabs.module.css +13 -9
  122. package/lib/ui/tag/tag.module.css +0 -2
  123. package/lib/ui/textarea/textarea.module.css +2 -2
  124. package/lib/ui/toolbar/toolbar.js +2 -1
  125. package/lib/ui/toolbar/toolbar.js.map +1 -1
  126. package/lib/ui/toolbar/toolbar.module.css +0 -6
  127. package/lib/ui/tooltip/tooltip.js +6 -1
  128. package/lib/ui/tooltip/tooltip.js.map +1 -1
  129. package/lib/ui/tooltip/tooltip.module.css +12 -1
  130. package/lib/utils/index.js +1 -0
  131. package/lib/utils/index.js.map +1 -1
  132. package/lib/utils/portal.js +10 -0
  133. package/lib/utils/portal.js.map +1 -0
  134. package/lib-esm/app/app.js +5 -1
  135. package/lib-esm/app/app.js.map +1 -1
  136. package/lib-esm/app/app.module.css +14 -5
  137. package/lib-esm/app/header/header.module.css +1 -3
  138. package/lib-esm/components/asset-name/asset-name.js +8 -7
  139. package/lib-esm/components/asset-name/asset-name.js.map +1 -1
  140. package/lib-esm/components/asset-name/asset-name.module.css +11 -10
  141. package/lib-esm/components/bundle-assets/bundle-assets.js +4 -2
  142. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  143. package/lib-esm/components/bundle-assets/bundle-assets.module.css +0 -12
  144. package/lib-esm/components/bundle-assets/index.js +2 -1
  145. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  146. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +4 -2
  147. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  148. package/lib-esm/components/bundle-modules/bundle-modules.js +5 -3
  149. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  150. package/lib-esm/components/bundle-modules/bundle-modules.module.css +2 -16
  151. package/lib-esm/components/bundle-modules/index.js +2 -1
  152. package/lib-esm/components/bundle-modules/index.js.map +1 -1
  153. package/lib-esm/components/bundle-packages/bundle-packages.js +5 -3
  154. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  155. package/lib-esm/components/bundle-packages/bundle-packages.module.css +18 -22
  156. package/lib-esm/components/delta/delta.js +3 -13
  157. package/lib-esm/components/delta/delta.js.map +1 -1
  158. package/lib-esm/components/delta/delta.module.css +13 -12
  159. package/lib-esm/components/delta/index.js.map +1 -1
  160. package/lib-esm/components/entry-info/entry-info.js +4 -2
  161. package/lib-esm/components/entry-info/entry-info.js.map +1 -1
  162. package/lib-esm/components/entry-info/entry-info.module.css +7 -2
  163. package/lib-esm/components/index.js +1 -0
  164. package/lib-esm/components/index.js.map +1 -1
  165. package/lib-esm/components/insight-icon/insight-icon.module.css +6 -6
  166. package/lib-esm/components/job-name/job-name.js +1 -2
  167. package/lib-esm/components/job-name/job-name.js.map +1 -1
  168. package/lib-esm/components/jobs-header/jobs-header.js +1 -1
  169. package/lib-esm/components/jobs-header/jobs-header.js.map +1 -1
  170. package/lib-esm/components/jobs-header/jobs-header.module.css +0 -1
  171. package/lib-esm/components/metric-change-legend/index.js +2 -0
  172. package/lib-esm/components/metric-change-legend/index.js.map +1 -0
  173. package/lib-esm/components/metric-change-legend/metric-change-legend.js +84 -0
  174. package/lib-esm/components/metric-change-legend/metric-change-legend.js.map +1 -0
  175. package/lib-esm/components/metric-change-legend/metric-change-legend.module.css +80 -0
  176. package/lib-esm/components/metric-run-info/metric-run-info.js +24 -8
  177. package/lib-esm/components/metric-run-info/metric-run-info.js.map +1 -1
  178. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +7 -9
  179. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  180. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +0 -27
  181. package/lib-esm/components/metrics-table/metrics-table.js +32 -20
  182. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  183. package/lib-esm/components/metrics-table/metrics-table.module.css +4 -12
  184. package/lib-esm/components/metrics-table-header/metrics-table-header.js +6 -6
  185. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -1
  186. package/lib-esm/components/metrics-table-header/metrics-table-header.module.css +8 -12
  187. package/lib-esm/components/metrics-table-options/metrics-table-options.js +5 -6
  188. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  189. package/lib-esm/components/metrics-table-row-count/index.js +2 -0
  190. package/lib-esm/components/metrics-table-row-count/index.js.map +1 -0
  191. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.js +10 -0
  192. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.js.map +1 -0
  193. package/lib-esm/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  194. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  195. package/lib-esm/components/metrics-table-title/metrics-table-title.js.map +1 -1
  196. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js +2 -0
  197. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  198. package/lib-esm/components/metrics-treemap/metrics-treemap.js +52 -120
  199. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  200. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +3 -274
  201. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js +80 -18
  202. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  203. package/lib-esm/components/metrics-treemap/tile/index.js +2 -0
  204. package/lib-esm/components/metrics-treemap/tile/index.js.map +1 -0
  205. package/lib-esm/components/metrics-treemap/tile/tile.js +40 -0
  206. package/lib-esm/components/metrics-treemap/tile/tile.js.map +1 -0
  207. package/lib-esm/components/metrics-treemap/tile/tile.module.css +145 -0
  208. package/lib-esm/components/metrics-treemap/tile-group/index.js +2 -0
  209. package/lib-esm/components/metrics-treemap/tile-group/index.js.map +1 -0
  210. package/lib-esm/components/metrics-treemap/tile-group/tile-group.js +35 -0
  211. package/lib-esm/components/metrics-treemap/tile-group/tile-group.js.map +1 -0
  212. package/lib-esm/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  213. package/lib-esm/components/metrics-treemap/tile-group-title/index.js +2 -0
  214. package/lib-esm/components/metrics-treemap/tile-group-title/index.js.map +1 -0
  215. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.js +17 -0
  216. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.js.map +1 -0
  217. package/lib-esm/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  218. package/lib-esm/components/run-info/run-info.js +26 -14
  219. package/lib-esm/components/run-info/run-info.js.map +1 -1
  220. package/lib-esm/components/run-info/run-info.module.css +35 -26
  221. package/lib-esm/components/sort-button/sort-button.module.css +0 -2
  222. package/lib-esm/components/summary/summary.js +11 -11
  223. package/lib-esm/components/summary/summary.js.map +1 -1
  224. package/lib-esm/components/summary/summary.module.css +60 -14
  225. package/lib-esm/constants.js +12 -0
  226. package/lib-esm/constants.js.map +1 -1
  227. package/lib-esm/css/default.css +7 -4
  228. package/lib-esm/css/variables.css +84 -60
  229. package/lib-esm/layout/flex-stack/flex-stack.js +3 -2
  230. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  231. package/lib-esm/layout/flex-stack/flex-stack.module.css +65 -10
  232. package/lib-esm/query-state.js +7 -4
  233. package/lib-esm/query-state.js.map +1 -1
  234. package/lib-esm/ui/button/button.js +3 -2
  235. package/lib-esm/ui/button/button.js.map +1 -1
  236. package/lib-esm/ui/button/button.module.css +38 -27
  237. package/lib-esm/ui/control-group/control-group.js +1 -1
  238. package/lib-esm/ui/control-group/control-group.js.map +1 -1
  239. package/lib-esm/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  240. package/lib-esm/ui/dialog/dialog.js +7 -3
  241. package/lib-esm/ui/dialog/dialog.js.map +1 -1
  242. package/lib-esm/ui/dialog/dialog.module.css +27 -0
  243. package/lib-esm/ui/dropdown/dropdown.js +11 -3
  244. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  245. package/lib-esm/ui/dropdown/dropdown.module.css +60 -7
  246. package/lib-esm/ui/filters/filters.js +29 -17
  247. package/lib-esm/ui/filters/filters.js.map +1 -1
  248. package/lib-esm/ui/filters/filters.module.css +3 -19
  249. package/lib-esm/ui/hover-card/hover-card.js +7 -1
  250. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  251. package/lib-esm/ui/hover-card/hover-card.module.css +18 -5
  252. package/lib-esm/ui/input/input.module.css +2 -2
  253. package/lib-esm/ui/table/table.module.css +12 -6
  254. package/lib-esm/ui/tabs/tabs.module.css +13 -9
  255. package/lib-esm/ui/tag/tag.module.css +0 -2
  256. package/lib-esm/ui/textarea/textarea.module.css +2 -2
  257. package/lib-esm/ui/toolbar/toolbar.js +2 -1
  258. package/lib-esm/ui/toolbar/toolbar.js.map +1 -1
  259. package/lib-esm/ui/toolbar/toolbar.module.css +0 -6
  260. package/lib-esm/ui/tooltip/tooltip.js +6 -1
  261. package/lib-esm/ui/tooltip/tooltip.js.map +1 -1
  262. package/lib-esm/ui/tooltip/tooltip.module.css +12 -1
  263. package/lib-esm/utils/index.js +1 -0
  264. package/lib-esm/utils/index.js.map +1 -1
  265. package/lib-esm/utils/portal.js +6 -0
  266. package/lib-esm/utils/portal.js.map +1 -0
  267. package/package.json +18 -18
  268. package/src/app/app.jsx +7 -1
  269. package/src/app/app.module.css +14 -5
  270. package/src/app/header/header.module.css +1 -3
  271. package/src/components/asset-name/asset-name.module.css +11 -10
  272. package/src/components/asset-name/asset-name.tsx +17 -14
  273. package/src/components/bundle-assets/bundle-assets.module.css +0 -12
  274. package/src/components/bundle-assets/bundle-assets.tsx +8 -1
  275. package/src/components/bundle-assets/index.tsx +3 -1
  276. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +6 -4
  277. package/src/components/bundle-modules/bundle-modules.module.css +2 -16
  278. package/src/components/bundle-modules/bundle-modules.tsx +10 -3
  279. package/src/components/bundle-modules/index.tsx +3 -1
  280. package/src/components/bundle-packages/bundle-packages.jsx +14 -3
  281. package/src/components/bundle-packages/bundle-packages.module.css +18 -22
  282. package/src/components/delta/delta.module.css +13 -12
  283. package/src/components/delta/delta.tsx +32 -0
  284. package/src/components/entry-info/entry-info.module.css +7 -2
  285. package/src/components/entry-info/entry-info.tsx +9 -3
  286. package/src/components/index.ts +3 -0
  287. package/src/components/insight-icon/insight-icon.module.css +6 -6
  288. package/src/components/job-name/job-name.jsx +2 -3
  289. package/src/components/jobs-header/jobs-header.module.css +0 -1
  290. package/src/components/jobs-header/jobs-header.tsx +2 -2
  291. package/src/components/metric-change-legend/index.ts +1 -0
  292. package/src/components/metric-change-legend/metric-change-legend.module.css +80 -0
  293. package/src/components/metric-change-legend/metric-change-legend.stories.tsx +13 -0
  294. package/src/components/metric-change-legend/metric-change-legend.tsx +148 -0
  295. package/src/components/metric-run-info/metric-run-info.stories.tsx +9 -0
  296. package/src/components/metric-run-info/metric-run-info.tsx +39 -17
  297. package/src/components/metrics-display-selector/metrics-display-selector.module.css +0 -27
  298. package/src/components/metrics-display-selector/metrics-display-selector.tsx +25 -37
  299. package/src/components/metrics-table/metrics-table.module.css +4 -12
  300. package/src/components/metrics-table/metrics-table.tsx +70 -39
  301. package/src/components/metrics-table-header/metrics-table-header.module.css +8 -12
  302. package/src/components/metrics-table-header/metrics-table-header.tsx +5 -6
  303. package/src/components/metrics-table-options/metrics-table-options.tsx +13 -14
  304. package/src/components/metrics-table-row-count/index.ts +1 -0
  305. package/src/components/metrics-table-row-count/metrics-table-row-count.module.css +5 -0
  306. package/src/components/metrics-table-row-count/metrics-table-row-count.tsx +21 -0
  307. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  308. package/src/components/metrics-treemap/metrics-treemap.constants.ts +9 -0
  309. package/src/components/metrics-treemap/metrics-treemap.module.css +3 -274
  310. package/src/components/metrics-treemap/metrics-treemap.stories.utils.ts +46 -0
  311. package/src/components/metrics-treemap/metrics-treemap.tsx +123 -428
  312. package/src/components/metrics-treemap/metrics-treemap.utils.ts +161 -27
  313. package/src/components/metrics-treemap/tile/index.ts +1 -0
  314. package/src/components/metrics-treemap/tile/tile.module.css +145 -0
  315. package/src/components/metrics-treemap/tile/tile.stories.tsx +139 -0
  316. package/src/components/metrics-treemap/tile/tile.tsx +121 -0
  317. package/src/components/metrics-treemap/tile-group/index.ts +1 -0
  318. package/src/components/metrics-treemap/tile-group/tile-group.module.css +57 -0
  319. package/src/components/metrics-treemap/tile-group/tile-group.stories.tsx +163 -0
  320. package/src/components/metrics-treemap/tile-group/tile-group.tsx +177 -0
  321. package/src/components/metrics-treemap/tile-group-title/index.ts +1 -0
  322. package/src/components/metrics-treemap/tile-group-title/tile-group-title.module.css +48 -0
  323. package/src/components/metrics-treemap/tile-group-title/tile-group-title.stories.tsx +88 -0
  324. package/src/components/metrics-treemap/tile-group-title/tile-group-title.tsx +51 -0
  325. package/src/components/run-info/run-info.module.css +35 -26
  326. package/src/components/run-info/run-info.stories.tsx +16 -10
  327. package/src/components/run-info/run-info.tsx +132 -73
  328. package/src/components/sort-button/sort-button.module.css +0 -2
  329. package/src/components/summary/summary.module.css +60 -14
  330. package/src/components/summary/summary.tsx +50 -52
  331. package/src/constants.ts +13 -0
  332. package/src/css/default.css +7 -4
  333. package/src/css/variables.css +84 -60
  334. package/src/layout/flex-stack/flex-stack.module.css +65 -10
  335. package/src/layout/flex-stack/flex-stack.stories.tsx +68 -9
  336. package/src/layout/flex-stack/flex-stack.tsx +24 -4
  337. package/src/query-state.tsx +9 -4
  338. package/src/ui/button/button.module.css +38 -27
  339. package/src/ui/button/button.stories.tsx +1 -1
  340. package/src/ui/button/button.tsx +3 -1
  341. package/src/ui/control-group/control-group.tsx +1 -1
  342. package/src/ui/copy-to-clipboard/copy-to-clipboard.module.css +2 -2
  343. package/src/ui/dialog/dialog.module.css +27 -0
  344. package/src/ui/dialog/dialog.stories.tsx +8 -0
  345. package/src/ui/dialog/dialog.tsx +16 -2
  346. package/src/ui/dropdown/dropdown.module.css +60 -7
  347. package/src/ui/dropdown/dropdown.stories.tsx +6 -0
  348. package/src/ui/dropdown/dropdown.tsx +17 -2
  349. package/src/ui/filters/filters.module.css +3 -19
  350. package/src/ui/filters/filters.tsx +131 -67
  351. package/src/ui/hover-card/hover-card.module.css +18 -5
  352. package/src/ui/hover-card/hover-card.tsx +7 -1
  353. package/src/ui/input/input.module.css +2 -2
  354. package/src/ui/table/table.module.css +12 -6
  355. package/src/ui/tabs/tabs.module.css +13 -9
  356. package/src/ui/tag/tag.module.css +0 -2
  357. package/src/ui/textarea/textarea.module.css +2 -2
  358. package/src/ui/toolbar/toolbar.jsx +4 -1
  359. package/src/ui/toolbar/toolbar.module.css +0 -6
  360. package/src/ui/tooltip/tooltip.module.css +12 -1
  361. package/src/ui/tooltip/tooltip.tsx +6 -1
  362. package/src/utils/index.ts +1 -0
  363. package/src/utils/portal.ts +9 -0
  364. package/types/components/delta/delta.d.ts +7 -21
  365. package/types/components/delta/index.d.ts +1 -1
  366. package/types/components/index.d.ts +3 -0
  367. package/types/components/metric-change-legend/index.d.ts +1 -0
  368. package/types/components/metric-change-legend/metric-change-legend.d.ts +4 -0
  369. package/types/components/metric-run-info/metric-run-info.d.ts +3 -6
  370. package/types/components/metrics-table/metrics-table.d.ts +2 -1
  371. package/types/components/metrics-table-row-count/index.d.ts +1 -0
  372. package/types/components/metrics-table-row-count/metrics-table-row-count.d.ts +7 -0
  373. package/types/components/metrics-treemap/metrics-treemap.constants.d.ts +2 -0
  374. package/types/components/metrics-treemap/metrics-treemap.utils.d.ts +16 -5
  375. package/types/components/metrics-treemap/tile/index.d.ts +1 -0
  376. package/types/components/metrics-treemap/tile/tile.d.ts +11 -0
  377. package/types/components/metrics-treemap/tile-group/index.d.ts +1 -0
  378. package/types/components/metrics-treemap/tile-group/tile-group.d.ts +20 -0
  379. package/types/components/metrics-treemap/tile-group-title/index.d.ts +1 -0
  380. package/types/components/metrics-treemap/tile-group-title/tile-group-title.d.ts +12 -0
  381. package/types/components/run-info/run-info.d.ts +16 -7
  382. package/types/constants.d.ts +12 -0
  383. package/types/layout/flex-stack/flex-stack.d.ts +6 -2
  384. package/types/ui/button/button.d.ts +1 -0
  385. package/types/ui/dialog/dialog.d.ts +3 -2
  386. package/types/ui/dropdown/dropdown.d.ts +4 -1
  387. package/types/ui/filters/filters.d.ts +2 -1
  388. package/types/utils/index.d.ts +1 -0
  389. package/types/utils/portal.d.ts +1 -0
  390. package/vitest.config.ts +4 -0
  391. package/lib/components/metrics-table-options/metrics-table-options.module.css +0 -15
  392. package/lib-esm/components/metrics-table-options/metrics-table-options.module.css +0 -15
  393. package/src/components/delta/delta.jsx +0 -22
  394. package/src/components/metrics-table-options/metrics-table-options.module.css +0 -15
  395. /package/src/components/delta/{index.js → index.ts} +0 -0
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import cx from 'classnames';
3
+ import type { MetricRunInfoDeltaType } from '@bundle-stats/utils';
4
+
5
+ import css from './delta.module.css';
6
+
7
+ export interface DeltaProps {
8
+ /**
9
+ * Formatted delta value
10
+ */
11
+ displayValue: string;
12
+ /**
13
+ * Delta type - drives the color scale
14
+ */
15
+ deltaType: MetricRunInfoDeltaType;
16
+ /**
17
+ * Inverted variant - render the delta type as background color
18
+ */
19
+ inverted?: boolean;
20
+ }
21
+
22
+ export const Delta = (props: DeltaProps & React.ComponentProps<'span'>) => {
23
+ const { className = '', displayValue, deltaType, inverted = false, ...restProps } = props;
24
+
25
+ const rootClassName = cx(css.root, className, inverted && css.inverted, css[deltaType]);
26
+
27
+ return (
28
+ <span className={rootClassName} {...restProps}>
29
+ {displayValue}
30
+ </span>
31
+ );
32
+ };
@@ -1,3 +1,8 @@
1
+ /** place overlays triggered from inside the entry info above the panel, under the header */
2
+ .portal {
3
+ --layer-overlay: calc(var(--layer-xhigh) + 2);
4
+ }
5
+
1
6
  .root {
2
7
  position: fixed;
3
8
  right: 0;
@@ -5,7 +10,8 @@
5
10
  bottom: 0;
6
11
  width: 100vw;
7
12
  max-width: var(--entry-info-width);
8
- z-index: var(--layer-high);
13
+ /** above the sticky tabs */
14
+ z-index: calc(var(--layer-xhigh) + 1);
9
15
  background: var(--color-background);
10
16
  box-shadow: var(--shadow-layer-high);
11
17
  }
@@ -107,7 +113,6 @@
107
113
  line-height: var(--line-height-heading);
108
114
  border-radius: var(--radius-small);
109
115
  background: var(--color-highlight);
110
- transition: var(--transition-out);
111
116
 
112
117
  text-decoration: none;
113
118
  text-transform: none;
@@ -12,6 +12,7 @@ import { FileName } from '../../ui/file-name';
12
12
  import { Button } from '../../ui/button';
13
13
  import { Icon } from '../../ui/icon';
14
14
  import { Table } from '../../ui/table';
15
+ import { getCreatePortalElement } from '../../utils/portal';
15
16
  import { RunInfo } from '../run-info';
16
17
  import * as I18N from './entry-info.i18n';
17
18
  import css from './entry-info.module.css';
@@ -50,6 +51,11 @@ const EntryInfoMeta = ({
50
51
  </div>
51
52
  );
52
53
 
54
+ /**
55
+ * Raise the z-index of the overlays nested inside the entry info
56
+ */
57
+ const createPortalElement = getCreatePortalElement(css.portal);
58
+
53
59
  function defaultRenderRunInfo(item: ReportMetricRow) {
54
60
  const baselineRun = item.runs.length > 1 ? item.runs?.[item.runs.length - 1] : null;
55
61
 
@@ -63,8 +69,8 @@ function defaultRenderRunInfo(item: ReportMetricRow) {
63
69
  return (
64
70
  <RunInfo
65
71
  current={metricRunInfo.displayValue}
66
- delta={metricRunInfo.displayDeltaPercentage}
67
- deltaPercentage={metricRunInfo.displayDelta}
72
+ delta={metricRunInfo.displayDelta}
73
+ deltaPercentage={metricRunInfo.displayDeltaPercentage}
68
74
  deltaType={metricRunInfo.deltaType}
69
75
  baseline={baselineRun?.displayValue || '0B'}
70
76
  size="large"
@@ -108,7 +114,7 @@ export const EntryInfo = (props: EntryInfoProps & React.ComponentProps<'div'>) =
108
114
  } = props;
109
115
 
110
116
  return (
111
- <Portal className={cx(css.root, className)}>
117
+ <Portal portalElement={createPortalElement} className={cx(css.root, className)}>
112
118
  <Box padding="medium" as="header" className={css.header}>
113
119
  <Stack space="small">
114
120
  <FlexStack space="xxxsmall" alignItems="center" as="h3" className={css.label}>
@@ -5,12 +5,15 @@ export { BundlePackages } from './bundle-packages';
5
5
  export { BundleModules } from './bundle-modules';
6
6
  export { ComponentLink } from './component-link';
7
7
  export { Delta } from './delta';
8
+ export type { DeltaProps } from './delta';
8
9
  export { InsightIcon } from './insight-icon';
9
10
  export { Insights } from './insights';
10
11
  export { JobName } from './job-name';
11
12
  export { JobsHeader } from './jobs-header';
12
13
  export { LighthouseTable } from './lighthouse-table';
13
14
  export { Metric } from './metric';
15
+ export { MetricChangeLegend } from './metric-change-legend';
16
+ export type { MetricChangeLegendProps } from './metric-change-legend';
14
17
  export { MetricRunInfo } from './metric-run-info';
15
18
  export type { MetricRunInfoProps } from './metric-run-info';
16
19
  export { MetricsTable } from './metrics-table';
@@ -1,20 +1,20 @@
1
1
  .root {
2
- width: calc(var(--space-small) + 6px);
3
- height: calc(var(--space-small) + 6px);
4
- padding: 3px;
2
+ width: calc(var(--space-small) + var(--space-xxsmall));
3
+ height: calc(var(--space-small) + var(--space-xxsmall));
4
+ padding: var(--space-xxxsmall);
5
5
  border-radius: 50%;
6
6
  background: var(--color-highlight);
7
7
  }
8
8
 
9
9
  .error {
10
- background: var(--color-red-50);
10
+ background: var(--color-highlight-danger);
11
11
  color: var(--color-danger);
12
12
  }
13
13
 
14
14
  .warning {
15
15
  padding-top: 1px;
16
- background: var(--color-yellow-100);
17
- color: var(--color-yellow-900);
16
+ background: var(--color-highlight-warning);
17
+ color: var(--color-warning);
18
18
  }
19
19
 
20
20
  .info {
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- import { Tooltip } from '../../ui/tooltip';
5
4
  import css from './job-name.module.css';
6
5
 
7
6
  export const JobName = ({
@@ -11,9 +10,9 @@ export const JobName = ({
11
10
  children,
12
11
  ...restProps
13
12
  }) => (
14
- <Tooltip className={css.root} as={Component} title={title} {...restProps}>
13
+ <Component className={css.root} title={title} {...restProps}>
15
14
  {children || `Job #${internalBuildNumber}`}
16
- </Tooltip>
15
+ </Component>
17
16
  );
18
17
 
19
18
  JobName.defaultProps = {
@@ -1,7 +1,6 @@
1
1
  .root {
2
2
  padding: var(--space-small) 0;
3
3
  width: 100%;
4
- display: flex;
5
4
  }
6
5
 
7
6
  .item {
@@ -76,7 +76,7 @@ export const JobsHeader = (props: JobsHeaderProps & React.ComponentProps<'header
76
76
  const rootClassName = cx(css.root, className);
77
77
 
78
78
  return (
79
- <header className={rootClassName}>
79
+ <FlexStack as="header" className={rootClassName}>
80
80
  {jobs?.map((job, index) => (
81
81
  <Item
82
82
  key={job.internalBuildNumber || index}
@@ -84,6 +84,6 @@ export const JobsHeader = (props: JobsHeaderProps & React.ComponentProps<'header
84
84
  tag={index === 0 ? I18N.CURRENT : I18N.BASELINE}
85
85
  />
86
86
  ))}
87
- </header>
87
+ </FlexStack>
88
88
  );
89
89
  };
@@ -0,0 +1 @@
1
+ export * from './metric-change-legend';
@@ -0,0 +1,80 @@
1
+ .root {
2
+ font-size: var(--size-small);
3
+ }
4
+
5
+ .itemVariants {
6
+ flex: 0 0 auto;
7
+ min-width: 0;
8
+ }
9
+
10
+ .itemLabel {
11
+ flex: 1 1 auto;
12
+ min-width: 0;
13
+ white-space: nowrap;
14
+ }
15
+
16
+ .itemAnchor {
17
+ color: var(--color-text-light);
18
+ }
19
+
20
+ .itemAnchor:hover {
21
+ color: var(--color-text);
22
+ }
23
+
24
+ .variants {
25
+ display: flex;
26
+ gap: 1px;
27
+ overflow: hidden;
28
+ border-radius: var(--radius-xsmall);
29
+ }
30
+
31
+ .infoPreviewCell {
32
+ width: 1%;
33
+ white-space: nowrap;
34
+ }
35
+
36
+ .infoDescriptionCell {
37
+ padding-left: 0 !important;
38
+ }
39
+
40
+ .variant {
41
+ width: var(--space-xxsmall);
42
+ height: var(--space-xxsmall);
43
+ }
44
+
45
+ .large .variant {
46
+ width: var(--space-small);
47
+ height: var(--space-small);
48
+ }
49
+
50
+ .bar-improvement .variant-low {
51
+ background: var(--color-green-light);
52
+ }
53
+
54
+ .bar-improvement .variant-medium {
55
+ background: var(--color-green);
56
+ }
57
+
58
+ .bar-improvement .variant-high {
59
+ background: var(--color-green-dark);
60
+ }
61
+
62
+ .bar-regression .variant-low {
63
+ background: var(--color-red-light);
64
+ }
65
+
66
+ .bar-regression .variant-medium {
67
+ background: var(--color-red);
68
+ }
69
+
70
+ .bar-regression .variant-high {
71
+ background: var(--color-red-dark);
72
+ }
73
+
74
+ .bar-neutral .variant-medium {
75
+ background: var(--color-info);
76
+ }
77
+
78
+ .bar-no-change .variant-medium {
79
+ background: var(--color-gray-ultra-light);
80
+ }
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { MetricChangeLegend } from '.';
4
+
5
+ const meta = {
6
+ title: 'Components/MetricChangeLegend',
7
+ component: MetricChangeLegend,
8
+ } satisfies Meta<typeof MetricChangeLegend>;
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+
13
+ export const Default: Story = {};
@@ -0,0 +1,148 @@
1
+ import React, { ReactNode } from 'react';
2
+ import cx from 'classnames';
3
+
4
+ import { FlexStack } from '../../layout/flex-stack';
5
+ import { Stack } from '../../layout/stack';
6
+ import { HoverCard } from '../../ui/hover-card';
7
+ import { Table } from '../../ui/table';
8
+ import css from './metric-change-legend.module.css';
9
+ import { Separator } from '../../layout';
10
+
11
+ type ChangeKind = 'improvement' | 'regression' | 'neutral' | 'no-change';
12
+ type ChangeKindVariant = 'low' | 'medium' | 'high';
13
+
14
+ type BarProps = {
15
+ className?: string;
16
+ kind: ChangeKind;
17
+ variants: ChangeKindVariant[];
18
+ size?: 'medium' | 'large';
19
+ };
20
+
21
+ const Variants = (props: BarProps) => {
22
+ const { className, kind, variants, size = 'medium' } = props;
23
+
24
+ return (
25
+ <span className={cx(css.variants, css[`bar-${kind}`], css[size], className)}>
26
+ {variants.map((variant) => (
27
+ <span key={variant} className={cx(css.variant, css[`variant-${variant}`])} />
28
+ ))}
29
+ </span>
30
+ );
31
+ };
32
+
33
+ type ChangeMagnitudeInfoProps = {
34
+ kind: 'improvement' | 'regression';
35
+ impact: string;
36
+ };
37
+
38
+ const ChangeMagnitudeInfo = (props: ChangeMagnitudeInfoProps) => {
39
+ const { kind, impact } = props;
40
+
41
+ return (
42
+ <Stack space="small">
43
+ <p>
44
+ Changes flagged as <strong>{kind}s</strong> have a {impact} impact on user performance.
45
+ </p>
46
+ <p>
47
+ The report shows different intensity colors depending on the magnitude of the percentage
48
+ change.
49
+ </p>
50
+ <Stack space="xxsmall">
51
+ <Separator />
52
+ <FlexStack alignItems="center" space="xxsmall">
53
+ <Variants kind={kind} variants={['low']} size="large" />
54
+ Change is smaller or equal than <strong>5%</strong>
55
+ </FlexStack>
56
+ <Separator />
57
+ <FlexStack alignItems="center" space="xxsmall">
58
+ <Variants kind={kind} variants={['medium']} size="large" />
59
+ Change is smaller or equal than <strong>50%</strong>
60
+ </FlexStack>
61
+ <Separator />
62
+ <FlexStack alignItems="center" space="xxsmall">
63
+ <Variants kind={kind} variants={['high']} size="large" />
64
+ Change is larger than <strong>50%</strong>
65
+ </FlexStack>
66
+ </Stack>
67
+ </Stack>
68
+ );
69
+ };
70
+
71
+ const ImprovementInfo = () => <ChangeMagnitudeInfo kind="improvement" impact="positive" />;
72
+ const RegressionInfo = () => <ChangeMagnitudeInfo kind="regression" impact="negative" />;
73
+
74
+ const NeutralInfo = () => (
75
+ <Stack space="small">
76
+ <p>
77
+ <strong>Neutral</strong> changes do not have a clear positive or negative impact on user
78
+ performance.
79
+ </p>
80
+ </Stack>
81
+ );
82
+
83
+ const NoChangeInfo = () => (
84
+ <Stack space="small">
85
+ <p>
86
+ The metric value is <strong>unchanged</strong> between the compared builds.
87
+ </p>
88
+ </Stack>
89
+ );
90
+
91
+ type ChangeConfig = {
92
+ id: ChangeKind;
93
+ label: string;
94
+ variants: ChangeKindVariant[];
95
+ info: ReactNode;
96
+ };
97
+
98
+ const ITEMS: ChangeConfig[] = [
99
+ {
100
+ id: 'improvement',
101
+ label: 'Improvement',
102
+ variants: ['low', 'medium', 'high'],
103
+ info: <ImprovementInfo />,
104
+ },
105
+ {
106
+ id: 'regression',
107
+ label: 'Regression',
108
+ variants: ['low', 'medium', 'high'],
109
+ info: <RegressionInfo />,
110
+ },
111
+ {
112
+ id: 'neutral',
113
+ label: 'Neutral',
114
+ variants: ['medium'],
115
+ info: <NeutralInfo />,
116
+ },
117
+ {
118
+ id: 'no-change',
119
+ label: 'No change',
120
+ variants: ['medium'],
121
+ info: <NoChangeInfo />,
122
+ },
123
+ ];
124
+
125
+ export interface MetricChangeLegendProps extends React.ComponentProps<'div'> {}
126
+
127
+ export const MetricChangeLegend = (props: MetricChangeLegendProps) => {
128
+ const { className, ...restProps } = props;
129
+
130
+ return (
131
+ <FlexStack inline space="small" className={cx(css.root, className)} {...restProps}>
132
+ {ITEMS.map(({ id, variants, label, info }) => (
133
+ <HoverCard
134
+ key={id}
135
+ anchorClassName={css.itemAnchor}
136
+ label={
137
+ <FlexStack inline alignItems="center" space="xxsmall" className={css.item}>
138
+ <Variants kind={id} variants={variants} className={css.itemVariants} />
139
+ <span className={css.itemLabel}>{label}</span>
140
+ </FlexStack>
141
+ }
142
+ >
143
+ {info}
144
+ </HoverCard>
145
+ ))}
146
+ </FlexStack>
147
+ );
148
+ };
@@ -28,6 +28,15 @@ export const NoBaseline: Story = {
28
28
  },
29
29
  };
30
30
 
31
+ export const ShowDeltaAbsoluteValue: Story = {
32
+ args: {
33
+ metricId: 'webpack.totalSizeByTypeALL',
34
+ current: 120 * 1024,
35
+ baseline: 100 * 1024,
36
+ showDeltaAbsoluteValue: true,
37
+ },
38
+ };
39
+
31
40
  export const NoDelta: Story = {
32
41
  args: {
33
42
  ...NoBaseline.args,
@@ -1,5 +1,5 @@
1
1
  import React, { type MouseEvent, useCallback, useMemo, ElementType } from 'react';
2
- import { getGlobalMetricType, getMetricRunInfo } from '@bundle-stats/utils';
2
+ import { getGlobalMetricType, getMetricRunInfo, MetricTypes } from '@bundle-stats/utils';
3
3
  import { Focusable } from 'ariakit/focusable';
4
4
 
5
5
  import { Stack } from '../../layout/stack';
@@ -8,11 +8,11 @@ import { Icon } from '../../ui/icon';
8
8
  import { RunInfo, RunInfoProps } from '../run-info';
9
9
  import css from './metric-run-info.module.css';
10
10
 
11
- interface MetricInfoProps {
11
+ type MetricInfoProps = {
12
12
  title: string;
13
13
  description?: string;
14
14
  url?: string;
15
- }
15
+ };
16
16
 
17
17
  const MetricHoverCard = ({ title, description, url }: MetricInfoProps) => {
18
18
  // The component parent can be rendered inside a link or a button
@@ -50,17 +50,19 @@ const MetricHoverCard = ({ title, description, url }: MetricInfoProps) => {
50
50
  );
51
51
  };
52
52
 
53
- export interface MetricRunInfoProps {
53
+ export type MetricRunInfoProps = {
54
54
  metricId: string;
55
55
  current: number;
56
56
  baseline?: number;
57
- showDelta?: boolean;
58
57
  showMetricDescription?: boolean;
59
- showBaseline?: boolean;
60
58
  titleWrapper?: ElementType;
61
- size?: RunInfoProps['size'];
62
- loading?: RunInfoProps['loading'];
63
- }
59
+ /**
60
+ * Show the delta absolute value alongside the percentage value.
61
+ * Only applies when `showDelta` is `true`.
62
+ * @default false
63
+ */
64
+ showDeltaAbsoluteValue?: boolean;
65
+ } & Pick<RunInfoProps, 'showDelta' | 'showBaseline' | 'size' | 'loading'>;
64
66
 
65
67
  export const MetricRunInfo = (props: MetricRunInfoProps & React.ComponentProps<'div'>) => {
66
68
  const {
@@ -70,6 +72,7 @@ export const MetricRunInfo = (props: MetricRunInfoProps & React.ComponentProps<'
70
72
  showDelta = true,
71
73
  showMetricDescription = true,
72
74
  showBaseline = true,
75
+ showDeltaAbsoluteValue = false,
73
76
  titleWrapper: CustomTitleWrapper = React.Fragment,
74
77
  ...restProps
75
78
  } = props;
@@ -92,16 +95,38 @@ export const MetricRunInfo = (props: MetricRunInfoProps & React.ComponentProps<'
92
95
  [CustomTitleWrapper, metric.label],
93
96
  );
94
97
 
98
+ const baselineProps = useMemo(() => {
99
+ if (showBaseline) {
100
+ return {
101
+ showBaseline,
102
+ baseline: metric.formatter(baseline),
103
+ };
104
+ }
105
+
106
+ return { showBaseline };
107
+ }, [showBaseline, baseline]);
108
+
95
109
  const deltaProps = useMemo(() => {
96
- if (!showDelta || metric.skipDelta || !('delta' in metricRunInfo)) {
97
- return {};
110
+ if (!showDelta || metric.skipDelta) {
111
+ return {
112
+ showDelta: false,
113
+ };
114
+ }
115
+
116
+ // If the delta data is missing, do not render the dats
117
+ if (!('delta' in metricRunInfo)) {
118
+ return {
119
+ showDelta: false,
120
+ };
98
121
  }
99
122
 
100
123
  return {
101
- delta: metricRunInfo.displayDeltaPercentage,
124
+ showDelta: true,
102
125
  deltaType: metricRunInfo.deltaType,
126
+ deltaPercentage: metricRunInfo.displayDeltaPercentage,
127
+ ...(showDeltaAbsoluteValue && { delta: metricRunInfo.displayDelta }),
103
128
  };
104
- }, [metricRunInfo]);
129
+ }, [metric, metricRunInfo, showDelta, showDeltaAbsoluteValue]);
105
130
 
106
131
  return (
107
132
  <RunInfo
@@ -109,10 +134,7 @@ export const MetricRunInfo = (props: MetricRunInfoProps & React.ComponentProps<'
109
134
  titleHoverCard={titleHoverCard}
110
135
  enhance
111
136
  current={metricRunInfo.displayValue}
112
- showBaseline={showBaseline}
113
- {...(showBaseline && {
114
- baseline: metric.formatter(baseline),
115
- })}
137
+ {...baselineProps}
116
138
  {...deltaProps}
117
139
  {...restProps}
118
140
  />
@@ -1,40 +1,13 @@
1
1
  .dropdownGroup {
2
2
  border: 1px solid var(--color-outline);
3
- transition: var(--transition-out);
4
3
  }
5
4
 
6
5
  .dropdownGroupButton {
7
6
  padding: calc(var(--space-xxsmall) - 1px);
8
7
  }
9
8
 
10
- .dropdownGroupAnchor {
11
- border: none;
12
- border-radius: 0;
13
- position: relative;
14
- }
15
-
16
- .dropdownGroupAnchor::before {
17
- content: '';
18
- display: block;
19
- width: 1px;
20
- background: var(--color-outline-dark);
21
- position: absolute;
22
- left: 0;
23
- top: var(--space-xxxsmall);
24
- bottom: var(--space-xxxsmall);
25
- }
26
-
27
- .dropdownGroupAnchor:hover,
28
- .dropdownGroupAnchor:focus,
29
- .dropdownGroupAnchor:active {
30
- border-color: var(--color-outline);
31
- box-shadow: none;
32
- background: none;
33
- }
34
-
35
9
  .dropdownGroup:hover {
36
10
  border-color: var(--color-outline-dark);
37
- transition: var(--transition-in);
38
11
  }
39
12
 
40
13
  .itemActive {
@@ -90,44 +90,32 @@ export const MetricsDisplaySelector = (
90
90
  );
91
91
 
92
92
  return (
93
- <FlexStack className={itemClassName} key={displayType}>
94
- <Button
95
- size="small"
96
- glyph={displayProps.glyph}
97
- onClick={() => onSelect(displayType)}
98
- className={css.dropdownGroupButton}
99
- >
100
- {displayProps.label}
101
- </Button>
102
- <Dropdown
103
- glyph={Icon.ICONS.CHEVRON_DOWN}
104
- placement="bottom-end"
105
- shift={-1}
106
- className={css.dropdownGroupAnchor}
107
- >
108
- {displayGroupsData.map((displayGroupData) => {
109
- const isGroupActive = isActive && displayGroupData.value === groupBy;
93
+ <Dropdown
94
+ label={displayProps.label}
95
+ glyph={displayProps.glyph}
96
+ placement="bottom-end"
97
+ shift={-1}
98
+ className={itemClassName}
99
+ key={displayType}
100
+ >
101
+ {displayGroupsData.map((displayGroupData) => {
102
+ const isGroupActive = isActive && displayGroupData.value === groupBy;
110
103
 
111
- return (
112
- <DropdownItem
113
- onClick={() => onSelect(displayType, displayGroupData.value)}
114
- isActive={isGroupActive}
115
- className={cx(css.dropdownItem, isGroupActive && css.dropdownItemActive)}
116
- key={displayGroupData.value}
117
- >
118
- <FlexStack space="xxxsmall" alignItems="center">
119
- <Icon
120
- glyph={Icon.ICONS.CHECK}
121
- size="small"
122
- className={css.dropdownItemIcon}
123
- />
124
- <span>{displayGroupData.label}</span>
125
- </FlexStack>
126
- </DropdownItem>
127
- );
128
- })}
129
- </Dropdown>
130
- </FlexStack>
104
+ return (
105
+ <DropdownItem
106
+ onClick={() => onSelect(displayType, displayGroupData.value)}
107
+ isActive={isGroupActive}
108
+ className={cx(css.dropdownItem, isGroupActive && css.dropdownItemActive)}
109
+ key={displayGroupData.value}
110
+ >
111
+ <FlexStack space="xxxsmall" alignItems="center">
112
+ <Icon glyph={Icon.ICONS.CHECK} size="small" className={css.dropdownItemIcon} />
113
+ <span>{displayGroupData.label}</span>
114
+ </FlexStack>
115
+ </DropdownItem>
116
+ );
117
+ })}
118
+ </Dropdown>
131
119
  );
132
120
  })}
133
121
  </ControlGroup>