@bundle-stats/ui 4.22.3 → 4.23.0-beta.2

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 (198) hide show
  1. package/lib/app/app.js +3 -0
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +12 -2
  4. package/lib/chart-colors.json +58 -44
  5. package/lib/components/delta/delta.js +3 -13
  6. package/lib/components/delta/delta.js.map +1 -1
  7. package/lib/components/delta/delta.module.css +13 -12
  8. package/lib/components/delta/index.js.map +1 -1
  9. package/lib/components/entry-info/entry-info.js +1 -1
  10. package/lib/components/entry-info/entry-info.js.map +1 -1
  11. package/lib/components/entry-info/entry-info.module.css +1 -1
  12. package/lib/components/index.js +3 -1
  13. package/lib/components/index.js.map +1 -1
  14. package/lib/components/insight-icon/insight-icon.module.css +6 -6
  15. package/lib/components/job-name/job-name.js +1 -2
  16. package/lib/components/job-name/job-name.js.map +1 -1
  17. package/lib/components/metric-change-legend/index.js +18 -0
  18. package/lib/components/metric-change-legend/index.js.map +1 -0
  19. package/lib/components/metric-change-legend/metric-change-legend.js +91 -0
  20. package/lib/components/metric-change-legend/metric-change-legend.js.map +1 -0
  21. package/lib/components/metric-change-legend/metric-change-legend.module.css +80 -0
  22. package/lib/components/metric-run-info/metric-run-info.js +22 -7
  23. package/lib/components/metric-run-info/metric-run-info.js.map +1 -1
  24. package/lib/components/metrics-display-selector/metrics-display-selector.js +7 -9
  25. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  26. package/lib/components/metrics-display-selector/metrics-display-selector.module.css +0 -25
  27. package/lib/components/metrics-table-header/metrics-table-header.js +6 -6
  28. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -1
  29. package/lib/components/metrics-table-header/metrics-table-header.module.css +8 -12
  30. package/lib/components/metrics-table-options/metrics-table-options.js +2 -3
  31. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  32. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  33. package/lib/components/metrics-table-title/metrics-table-title.js.map +1 -1
  34. package/lib/components/metrics-treemap/metrics-treemap.constants.js +3 -1
  35. package/lib/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  36. package/lib/components/metrics-treemap/metrics-treemap.js +68 -57
  37. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  38. package/lib/components/metrics-treemap/metrics-treemap.module.css +9 -16
  39. package/lib/components/metrics-treemap/metrics-treemap.utils.js +72 -16
  40. package/lib/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  41. package/lib/components/run-info/run-info.js +26 -14
  42. package/lib/components/run-info/run-info.js.map +1 -1
  43. package/lib/components/run-info/run-info.module.css +35 -26
  44. package/lib/components/summary/summary.js +9 -10
  45. package/lib/components/summary/summary.js.map +1 -1
  46. package/lib/components/summary/summary.module.css +60 -10
  47. package/lib/constants.js +13 -1
  48. package/lib/constants.js.map +1 -1
  49. package/lib/css/variables.css +71 -58
  50. package/lib/ui/button/button.js +2 -2
  51. package/lib/ui/button/button.js.map +1 -1
  52. package/lib/ui/dialog/dialog.js +4 -2
  53. package/lib/ui/dialog/dialog.js.map +1 -1
  54. package/lib/ui/dialog/dialog.module.css +22 -0
  55. package/lib/ui/dropdown/dropdown.js +13 -4
  56. package/lib/ui/dropdown/dropdown.js.map +1 -1
  57. package/lib/ui/dropdown/dropdown.module.css +51 -6
  58. package/lib/ui/filters/filters.js +22 -11
  59. package/lib/ui/filters/filters.js.map +1 -1
  60. package/lib/ui/filters/filters.module.css +0 -14
  61. package/lib/ui/hover-card/hover-card.js +7 -1
  62. package/lib/ui/hover-card/hover-card.js.map +1 -1
  63. package/lib/ui/hover-card/hover-card.module.css +14 -0
  64. package/lib/ui/table/table.module.css +0 -1
  65. package/lib/ui/tooltip/tooltip.js +6 -1
  66. package/lib/ui/tooltip/tooltip.js.map +1 -1
  67. package/lib/ui/tooltip/tooltip.module.css +11 -0
  68. package/lib-esm/app/app.js +4 -1
  69. package/lib-esm/app/app.js.map +1 -1
  70. package/lib-esm/app/app.module.css +12 -2
  71. package/lib-esm/chart-colors.json +58 -44
  72. package/lib-esm/components/delta/delta.js +3 -13
  73. package/lib-esm/components/delta/delta.js.map +1 -1
  74. package/lib-esm/components/delta/delta.module.css +13 -12
  75. package/lib-esm/components/delta/index.js.map +1 -1
  76. package/lib-esm/components/entry-info/entry-info.js +1 -1
  77. package/lib-esm/components/entry-info/entry-info.js.map +1 -1
  78. package/lib-esm/components/entry-info/entry-info.module.css +1 -1
  79. package/lib-esm/components/index.js +1 -0
  80. package/lib-esm/components/index.js.map +1 -1
  81. package/lib-esm/components/insight-icon/insight-icon.module.css +6 -6
  82. package/lib-esm/components/job-name/job-name.js +1 -2
  83. package/lib-esm/components/job-name/job-name.js.map +1 -1
  84. package/lib-esm/components/metric-change-legend/index.js +2 -0
  85. package/lib-esm/components/metric-change-legend/index.js.map +1 -0
  86. package/lib-esm/components/metric-change-legend/metric-change-legend.js +84 -0
  87. package/lib-esm/components/metric-change-legend/metric-change-legend.js.map +1 -0
  88. package/lib-esm/components/metric-change-legend/metric-change-legend.module.css +80 -0
  89. package/lib-esm/components/metric-run-info/metric-run-info.js +22 -7
  90. package/lib-esm/components/metric-run-info/metric-run-info.js.map +1 -1
  91. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +7 -9
  92. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  93. package/lib-esm/components/metrics-display-selector/metrics-display-selector.module.css +0 -25
  94. package/lib-esm/components/metrics-table-header/metrics-table-header.js +6 -6
  95. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -1
  96. package/lib-esm/components/metrics-table-header/metrics-table-header.module.css +8 -12
  97. package/lib-esm/components/metrics-table-options/metrics-table-options.js +3 -4
  98. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  99. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  100. package/lib-esm/components/metrics-table-title/metrics-table-title.js.map +1 -1
  101. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js +2 -0
  102. package/lib-esm/components/metrics-treemap/metrics-treemap.constants.js.map +1 -1
  103. package/lib-esm/components/metrics-treemap/metrics-treemap.js +74 -63
  104. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  105. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +9 -16
  106. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js +71 -17
  107. package/lib-esm/components/metrics-treemap/metrics-treemap.utils.js.map +1 -1
  108. package/lib-esm/components/run-info/run-info.js +26 -14
  109. package/lib-esm/components/run-info/run-info.js.map +1 -1
  110. package/lib-esm/components/run-info/run-info.module.css +35 -26
  111. package/lib-esm/components/summary/summary.js +10 -11
  112. package/lib-esm/components/summary/summary.js.map +1 -1
  113. package/lib-esm/components/summary/summary.module.css +60 -10
  114. package/lib-esm/constants.js +12 -0
  115. package/lib-esm/constants.js.map +1 -1
  116. package/lib-esm/css/variables.css +71 -58
  117. package/lib-esm/ui/button/button.js +2 -2
  118. package/lib-esm/ui/button/button.js.map +1 -1
  119. package/lib-esm/ui/dialog/dialog.js +4 -2
  120. package/lib-esm/ui/dialog/dialog.js.map +1 -1
  121. package/lib-esm/ui/dialog/dialog.module.css +22 -0
  122. package/lib-esm/ui/dropdown/dropdown.js +11 -3
  123. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  124. package/lib-esm/ui/dropdown/dropdown.module.css +51 -6
  125. package/lib-esm/ui/filters/filters.js +23 -12
  126. package/lib-esm/ui/filters/filters.js.map +1 -1
  127. package/lib-esm/ui/filters/filters.module.css +0 -14
  128. package/lib-esm/ui/hover-card/hover-card.js +7 -1
  129. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  130. package/lib-esm/ui/hover-card/hover-card.module.css +14 -0
  131. package/lib-esm/ui/table/table.module.css +0 -1
  132. package/lib-esm/ui/tooltip/tooltip.js +6 -1
  133. package/lib-esm/ui/tooltip/tooltip.js.map +1 -1
  134. package/lib-esm/ui/tooltip/tooltip.module.css +11 -0
  135. package/package.json +16 -16
  136. package/src/app/app.jsx +6 -1
  137. package/src/app/app.module.css +12 -2
  138. package/src/chart-colors.json +58 -44
  139. package/src/components/delta/delta.module.css +13 -12
  140. package/src/components/delta/delta.tsx +32 -0
  141. package/src/components/entry-info/entry-info.module.css +1 -1
  142. package/src/components/entry-info/entry-info.tsx +2 -2
  143. package/src/components/index.ts +3 -0
  144. package/src/components/insight-icon/insight-icon.module.css +6 -6
  145. package/src/components/job-name/job-name.jsx +2 -3
  146. package/src/components/metric-change-legend/index.ts +1 -0
  147. package/src/components/metric-change-legend/metric-change-legend.module.css +80 -0
  148. package/src/components/metric-change-legend/metric-change-legend.stories.tsx +13 -0
  149. package/src/components/metric-change-legend/metric-change-legend.tsx +148 -0
  150. package/src/components/metric-run-info/metric-run-info.tsx +32 -17
  151. package/src/components/metrics-display-selector/metrics-display-selector.module.css +0 -25
  152. package/src/components/metrics-display-selector/metrics-display-selector.tsx +25 -37
  153. package/src/components/metrics-table-header/metrics-table-header.module.css +8 -12
  154. package/src/components/metrics-table-header/metrics-table-header.tsx +5 -6
  155. package/src/components/metrics-table-options/metrics-table-options.tsx +5 -6
  156. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  157. package/src/components/metrics-treemap/metrics-treemap.constants.ts +8 -0
  158. package/src/components/metrics-treemap/metrics-treemap.module.css +9 -16
  159. package/src/components/metrics-treemap/metrics-treemap.tsx +160 -135
  160. package/src/components/metrics-treemap/metrics-treemap.utils.ts +141 -27
  161. package/src/components/run-info/run-info.module.css +35 -26
  162. package/src/components/run-info/run-info.stories.tsx +16 -10
  163. package/src/components/run-info/run-info.tsx +132 -73
  164. package/src/components/summary/summary.module.css +60 -10
  165. package/src/components/summary/summary.tsx +47 -50
  166. package/src/constants.ts +13 -0
  167. package/src/css/variables.css +71 -58
  168. package/src/ui/button/button.tsx +2 -1
  169. package/src/ui/dialog/dialog.module.css +22 -0
  170. package/src/ui/dialog/dialog.tsx +9 -2
  171. package/src/ui/dropdown/dropdown.module.css +51 -6
  172. package/src/ui/dropdown/dropdown.tsx +17 -2
  173. package/src/ui/filters/filters.module.css +0 -14
  174. package/src/ui/filters/filters.tsx +111 -47
  175. package/src/ui/hover-card/hover-card.module.css +14 -0
  176. package/src/ui/hover-card/hover-card.tsx +7 -1
  177. package/src/ui/table/table.module.css +0 -1
  178. package/src/ui/tooltip/tooltip.module.css +11 -0
  179. package/src/ui/tooltip/tooltip.tsx +6 -1
  180. package/types/components/delta/delta.d.ts +7 -21
  181. package/types/components/delta/index.d.ts +1 -1
  182. package/types/components/index.d.ts +3 -0
  183. package/types/components/metric-change-legend/index.d.ts +1 -0
  184. package/types/components/metric-change-legend/metric-change-legend.d.ts +4 -0
  185. package/types/components/metric-run-info/metric-run-info.d.ts +3 -6
  186. package/types/components/metrics-treemap/metrics-treemap.constants.d.ts +2 -0
  187. package/types/components/metrics-treemap/metrics-treemap.utils.d.ts +11 -5
  188. package/types/components/run-info/run-info.d.ts +16 -7
  189. package/types/constants.d.ts +12 -0
  190. package/types/ui/dialog/dialog.d.ts +3 -2
  191. package/types/ui/dropdown/dropdown.d.ts +4 -1
  192. package/types/ui/filters/filters.d.ts +2 -1
  193. package/vitest.config.ts +4 -0
  194. package/lib/components/metrics-table-options/metrics-table-options.module.css +0 -15
  195. package/lib-esm/components/metrics-table-options/metrics-table-options.module.css +0 -15
  196. package/src/components/delta/delta.jsx +0 -22
  197. package/src/components/metrics-table-options/metrics-table-options.module.css +0 -15
  198. /package/src/components/delta/{index.js → index.ts} +0 -0
@@ -21,6 +21,17 @@
21
21
  text-align: center;
22
22
  filter: drop-shadow(var(--shadow-layer));
23
23
  will-change: filter;
24
+ opacity: 0;
25
+ transition: var(--transition-out);
26
+ }
27
+
28
+ .tooltip[data-enter] {
29
+ opacity: 1;
30
+ transition: var(--transition-in);
31
+ }
32
+
33
+ .tooltip[data-leave] {
34
+ pointer-events: none;
24
35
  }
25
36
 
26
37
  .arrow svg {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.22.3",
3
+ "version": "4.23.0-beta.2",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -38,18 +38,18 @@
38
38
  },
39
39
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/ui#readme",
40
40
  "devDependencies": {
41
- "@babel/preset-env": "8.0.2",
41
+ "@babel/preset-env": "8.0.6",
42
42
  "@babel/preset-react": "8.0.1",
43
43
  "@babel/preset-typescript": "8.0.1",
44
- "@storybook/addon-vitest": "10.5.10",
45
- "@storybook/react": "10.5.10",
46
- "@storybook/react-vite": "10.5.10",
44
+ "@storybook/addon-vitest": "10.6.0",
45
+ "@storybook/react": "10.6.0",
46
+ "@storybook/react-vite": "10.6.0",
47
47
  "@types/d3": "7.4.3",
48
48
  "@types/react": "18.3.13",
49
49
  "@types/react-router-dom": "5.3.3",
50
- "@vitejs/plugin-react": "6.1.0",
51
- "@vitest/browser": "4.1.11",
52
- "@vitest/browser-playwright": "4.1.11",
50
+ "@vitejs/plugin-react": "6.1.1",
51
+ "@vitest/browser": "5.0.1",
52
+ "@vitest/browser-playwright": "5.0.1",
53
53
  "babel-plugin-polyfill-corejs3": "1.0.0",
54
54
  "babel-plugin-require-context-hook": "1.0.0",
55
55
  "classnames": "2.5.1",
@@ -58,21 +58,21 @@
58
58
  "cross-env": "10.1.0",
59
59
  "hex-rgb": "5.0.0",
60
60
  "identity-obj-proxy": "3.0.0",
61
- "jest": "30.4.2",
61
+ "jest": "^30.5.0",
62
62
  "jest-date-mock": "1.0.10",
63
- "jest-environment-jsdom": "30.4.1",
63
+ "jest-environment-jsdom": "30.5.2",
64
64
  "lodash": "4.18.1",
65
- "playwright": "1.62.1",
65
+ "playwright": "1.63.0",
66
66
  "prop-types": "15.8.1",
67
67
  "react": "18.3.1",
68
68
  "react-dom": "18.3.1",
69
69
  "react-router-dom": "5.3.4",
70
70
  "rimraf": "6.1.3",
71
- "storybook": "10.5.10",
71
+ "storybook": "10.6.0",
72
72
  "typescript": "5.9.3",
73
- "vite": "8.2.2",
73
+ "vite": "8.3.0",
74
74
  "vite-plugin-svgr": "5.2.0",
75
- "vitest": "4.1.11"
75
+ "vitest": "5.0.1"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "classnames": "^2.0.0",
@@ -83,7 +83,7 @@
83
83
  "react-router-dom": "^5.0.0"
84
84
  },
85
85
  "dependencies": {
86
- "@bundle-stats/utils": "^4.22.3",
86
+ "@bundle-stats/utils": "^4.23.0-beta.2",
87
87
  "ariakit": "2.0.0-next.44",
88
88
  "d3": "7.9.0",
89
89
  "modern-css-reset": "1.4.0",
@@ -91,5 +91,5 @@
91
91
  "snarkdown": "2.0.0",
92
92
  "use-query-params": "2.2.2"
93
93
  },
94
- "gitHead": "40d689d101ffc69421f87e29fb7449b4f1ae8bff"
94
+ "gitHead": "ac5239f7f27f36b6a8f54fae820e5e66570de972"
95
95
  }
package/src/app/app.jsx CHANGED
@@ -10,7 +10,7 @@ import { BundleAssetsTotals } from '../components/bundle-assets-totals';
10
10
  import { BundleModules } from '../components/bundle-modules';
11
11
  import { BundlePackages } from '../components/bundle-packages';
12
12
  import { Insights } from '../components/insights';
13
- import { MetricsTableTitle } from '../components';
13
+ import { MetricChangeLegend, MetricsTableTitle } from '../components';
14
14
  import { Summary } from '../components/summary';
15
15
  import { Box } from '../layout/box';
16
16
  import { Footer } from '../layout/footer';
@@ -150,6 +150,11 @@ const AppComponent = ({ version, jobs }) => {
150
150
  return (
151
151
  <JobsProvider jobs={jobs}>
152
152
  <Layout jobs={jobs} version={version}>
153
+ <Container className={css.metricChangeLegendContainer}>
154
+ <div className={css.metricChangeLegendContainerInner}>
155
+ <MetricChangeLegend />
156
+ </div>
157
+ </Container>
153
158
  <Container className={css.summaryContainer}>
154
159
  <Summary
155
160
  data={jobs[0].summary}
@@ -17,11 +17,21 @@
17
17
  border-bottom: 1px solid var(--color-outline);
18
18
  }
19
19
 
20
- .summaryContainer {
20
+ .metricChangeLegendContainer {
21
21
  padding-top: var(--space-small);
22
22
  padding-bottom: var(--space-xxsmall);
23
23
  }
24
24
 
25
+ .metricChangeLegendContainerInner {
26
+ display: flex;
27
+ justify-content: flex-end;
28
+ }
29
+
30
+ .summaryContainer {
31
+ padding-top: var(--space-xxsmall);
32
+ padding-bottom: var(--space-xxsmall);
33
+ }
34
+
25
35
  .tabsContainer {
26
36
  border-bottom: 1px solid var(--color-outline);
27
37
  background: var(--color-light);
@@ -62,6 +72,6 @@
62
72
  .tabsContainer {
63
73
  position: sticky;
64
74
  top: var(--header-height);
65
- z-index: calc(var(--layer-high));
75
+ z-index: var(--layer);
66
76
  }
67
77
  }
@@ -1,45 +1,59 @@
1
1
  [
2
- "rgba(136,132,216,1)",
3
- "rgba(135,137,219,1)",
4
- "rgba(135,142,222,1)",
5
- "rgba(134,147,225,1)",
6
- "rgba(133,151,228,1)",
7
- "rgba(132,156,231,1)",
8
- "rgba(132,161,234,1)",
9
- "rgba(131,166,237,1)",
10
- "rgba(132,172,235,1)",
11
- "rgba(134,178,234,1)",
12
- "rgba(135,184,232,1)",
13
- "rgba(137,191,230,1)",
14
- "rgba(138,197,228,1)",
15
- "rgba(140,203,227,1)",
16
- "rgba(141,209,225,1)",
17
- "rgba(139,208,215,1)",
18
- "rgba(138,207,206,1)",
19
- "rgba(136,206,196,1)",
20
- "rgba(135,205,186,1)",
21
- "rgba(133,204,176,1)",
22
- "rgba(132,203,167,1)",
23
- "rgba(130,202,157,1)",
24
- "rgba(135,205,150,1)",
25
- "rgba(140,208,143,1)",
26
- "rgba(145,211,136,1)",
27
- "rgba(149,213,129,1)",
28
- "rgba(154,216,122,1)",
29
- "rgba(159,219,115,1)",
30
- "rgba(164,222,108,1)",
31
- "rgba(170,224,105,1)",
32
- "rgba(177,226,102,1)",
33
- "rgba(183,228,99,1)",
34
- "rgba(189,231,96,1)",
35
- "rgba(195,233,93,1)",
36
- "rgba(202,235,90,1)",
37
- "rgba(208,237,87,1)",
38
- "rgba(215,231,87,1)",
39
- "rgba(221,226,87,1)",
40
- "rgba(228,220,87,1)",
41
- "rgba(235,215,88,1)",
42
- "rgba(242,209,88,1)",
43
- "rgba(248,204,88,1)",
44
- "rgba(255,198,88,1)"
45
- ]
2
+ "rgba(0,85,172,1)",
3
+ "rgba(13,85,174,1)",
4
+ "rgba(26,85,175,1)",
5
+ "rgba(39,85,177,1)",
6
+ "rgba(52,85,178,1)",
7
+ "rgba(65,84,180,1)",
8
+ "rgba(78,84,181,1)",
9
+ "rgba(91,84,183,1)",
10
+ "rgba(104,84,184,1)",
11
+ "rgba(112,83,184,1)",
12
+ "rgba(119,82,183,1)",
13
+ "rgba(127,81,183,1)",
14
+ "rgba(134,80,183,1)",
15
+ "rgba(142,79,182,1)",
16
+ "rgba(149,78,182,1)",
17
+ "rgba(157,77,181,1)",
18
+ "rgba(164,76,181,1)",
19
+ "rgba(170,75,179,1)",
20
+ "rgba(176,74,177,1)",
21
+ "rgba(182,73,174,1)",
22
+ "rgba(189,72,172,1)",
23
+ "rgba(195,71,170,1)",
24
+ "rgba(201,70,168,1)",
25
+ "rgba(207,69,165,1)",
26
+ "rgba(213,68,163,1)",
27
+ "rgba(217,68,160,1)",
28
+ "rgba(222,69,156,1)",
29
+ "rgba(226,69,153,1)",
30
+ "rgba(231,69,149,1)",
31
+ "rgba(235,69,146,1)",
32
+ "rgba(239,70,142,1)",
33
+ "rgba(244,70,139,1)",
34
+ "rgba(248,70,135,1)",
35
+ "rgba(249,73,131,1)",
36
+ "rgba(250,76,127,1)",
37
+ "rgba(251,78,122,1)",
38
+ "rgba(252,81,118,1)",
39
+ "rgba(252,84,114,1)",
40
+ "rgba(253,87,110,1)",
41
+ "rgba(254,89,105,1)",
42
+ "rgba(255,92,101,1)",
43
+ "rgba(255,96,96,1)",
44
+ "rgba(255,101,91,1)",
45
+ "rgba(255,105,86,1)",
46
+ "rgba(255,110,82,1)",
47
+ "rgba(255,114,77,1)",
48
+ "rgba(255,118,72,1)",
49
+ "rgba(255,123,67,1)",
50
+ "rgba(255,127,62,1)",
51
+ "rgba(255,132,54,1)",
52
+ "rgba(255,137,47,1)",
53
+ "rgba(255,142,39,1)",
54
+ "rgba(255,147,31,1)",
55
+ "rgba(255,151,23,1)",
56
+ "rgba(255,156,16,1)",
57
+ "rgba(255,161,8,1)",
58
+ "rgba(255,166,0,1)"
59
+ ]
@@ -8,16 +8,16 @@
8
8
  color: var(--color-info);
9
9
  }
10
10
 
11
- .HIGH_NEGATIVE {
12
- color: var(--color-red-dark);
11
+ .LOW_NEGATIVE {
12
+ color: var(--color-red-light);
13
13
  }
14
14
 
15
15
  .NEGATIVE {
16
- color: var(--color-red-dark);
16
+ color: var(--color-red);
17
17
  }
18
18
 
19
- .LOW_NEGATIVE {
20
- color: var(--color-red-light);
19
+ .HIGH_NEGATIVE {
20
+ color: var(--color-red-dark);
21
21
  }
22
22
 
23
23
  .LOW_POSITIVE {
@@ -25,7 +25,7 @@
25
25
  }
26
26
 
27
27
  .POSITIVE {
28
- color: var(--color-green-dark);
28
+ color: var(--color-green);
29
29
  }
30
30
 
31
31
  .HIGH_POSITIVE {
@@ -43,24 +43,25 @@
43
43
  background: var(--color-info-light);
44
44
  }
45
45
 
46
- .inverted.HIGH_NEGATIVE {
47
- background: var(--color-red-dark);
46
+ .inverted.LOW_NEGATIVE {
47
+ background: var(--color-red-light);
48
48
  }
49
49
 
50
50
  .inverted.NEGATIVE {
51
- background: var(--color-red-dark);
51
+ background: var(--color-red);
52
52
  }
53
53
 
54
- .inverted.LOW_NEGATIVE {
55
- background: var(--color-red-light);
54
+ .inverted.HIGH_NEGATIVE {
55
+ background: var(--color-red-dark);
56
56
  }
57
57
 
58
+
58
59
  .inverted.LOW_POSITIVE {
59
60
  background: var(--color-green-light);
60
61
  }
61
62
 
62
63
  .inverted.POSITIVE {
63
- background: var(--color-green-dark);
64
+ background: var(--color-green);
64
65
  }
65
66
 
66
67
  .inverted.HIGH_POSITIVE {
@@ -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
+ };
@@ -5,7 +5,7 @@
5
5
  bottom: 0;
6
6
  width: 100vw;
7
7
  max-width: var(--entry-info-width);
8
- z-index: var(--layer-high);
8
+ z-index: calc(var(--layer));
9
9
  background: var(--color-background);
10
10
  box-shadow: var(--shadow-layer-high);
11
11
  }
@@ -63,8 +63,8 @@ function defaultRenderRunInfo(item: ReportMetricRow) {
63
63
  return (
64
64
  <RunInfo
65
65
  current={metricRunInfo.displayValue}
66
- delta={metricRunInfo.displayDeltaPercentage}
67
- deltaPercentage={metricRunInfo.displayDelta}
66
+ delta={metricRunInfo.displayDelta}
67
+ deltaPercentage={metricRunInfo.displayDeltaPercentage}
68
68
  deltaType={metricRunInfo.deltaType}
69
69
  baseline={baselineRun?.displayValue || '0B'}
70
70
  size="large"
@@ -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 = {
@@ -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 = {};