@bundle-stats/ui 4.13.0-beta.0 → 4.13.0-beta.11

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 (217) hide show
  1. package/lib/app/app.js +4 -8
  2. package/lib/app/app.js.map +1 -1
  3. package/lib/app/app.module.css +2 -2
  4. package/lib/components/bundle-assets/bundle-assets.js +12 -5
  5. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  6. package/lib/components/bundle-assets/bundle-assets.module.css +0 -5
  7. package/lib/components/bundle-assets/index.js +2 -2
  8. package/lib/components/bundle-assets/index.js.map +1 -1
  9. package/lib/components/bundle-assets-totals/bundle-assets-totals.js +22 -11
  10. package/lib/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  11. package/lib/components/bundle-modules/bundle-modules.js +22 -12
  12. package/lib/components/bundle-modules/bundle-modules.js.map +1 -1
  13. package/lib/components/bundle-modules/bundle-modules.module.css +0 -5
  14. package/lib/components/bundle-modules/index.js +2 -2
  15. package/lib/components/bundle-modules/index.js.map +1 -1
  16. package/lib/components/bundle-packages/bundle-packages.js +10 -3
  17. package/lib/components/bundle-packages/bundle-packages.js.map +1 -1
  18. package/lib/components/bundle-packages/bundle-packages.module.css +0 -5
  19. package/lib/components/bundle-packages/index.js +2 -2
  20. package/lib/components/bundle-packages/index.js.map +1 -1
  21. package/lib/components/index.js +1 -3
  22. package/lib/components/index.js.map +1 -1
  23. package/lib/components/jobs-header/jobs-header.module.css +0 -4
  24. package/lib/components/metrics-display-selector/metrics-display-selector.js +4 -10
  25. package/lib/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  26. package/lib/components/metrics-table/metrics-table.i18n.js +1 -6
  27. package/lib/components/metrics-table/metrics-table.i18n.js.map +1 -1
  28. package/lib/components/metrics-table/metrics-table.js +4 -37
  29. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  30. package/lib/components/metrics-table/metrics-table.module.css +1 -44
  31. package/lib/components/{total-size-type-title → metrics-table-header}/index.js +1 -1
  32. package/lib/components/metrics-table-header/index.js.map +1 -0
  33. package/lib/components/metrics-table-header/metrics-table-header.i18n.js +9 -0
  34. package/lib/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  35. package/lib/components/metrics-table-header/metrics-table-header.js +79 -0
  36. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -0
  37. package/lib/components/metrics-table-header/metrics-table-header.module.css +51 -0
  38. package/lib/components/metrics-table-options/metrics-table-options.js +2 -2
  39. package/lib/components/metrics-table-options/metrics-table-options.js.map +1 -1
  40. package/lib/components/metrics-table-title/metrics-table-title.js +1 -1
  41. package/lib/components/metrics-table-title/metrics-table-title.js.map +1 -1
  42. package/lib/components/metrics-table-title/metrics-table-title.module.css +4 -4
  43. package/lib/components/metrics-treemap/metrics-treemap.js +66 -51
  44. package/lib/components/metrics-treemap/metrics-treemap.js.map +1 -1
  45. package/lib/components/metrics-treemap/metrics-treemap.module.css +89 -56
  46. package/lib/components/sort-button/sort-button.module.css +1 -0
  47. package/lib/css/variables.css +14 -14
  48. package/lib/hooks/entry-info.js +12 -0
  49. package/lib/hooks/entry-info.js.map +1 -0
  50. package/lib/layout/flex-stack/flex-stack.js +3 -4
  51. package/lib/layout/flex-stack/flex-stack.js.map +1 -1
  52. package/lib/layout/flex-stack/flex-stack.module.css +19 -23
  53. package/lib/query-state.js +1 -1
  54. package/lib/query-state.js.map +1 -1
  55. package/lib/ui/button/button.js +5 -4
  56. package/lib/ui/button/button.js.map +1 -1
  57. package/lib/ui/button/button.module.css +55 -52
  58. package/lib/ui/dropdown/dropdown.js +10 -40
  59. package/lib/ui/dropdown/dropdown.js.map +1 -1
  60. package/lib/ui/dropdown/index.js.map +1 -1
  61. package/lib/ui/filters/filters.js +33 -35
  62. package/lib/ui/filters/filters.js.map +1 -1
  63. package/lib/ui/filters/filters.module.css +55 -67
  64. package/lib/ui/hover-card/hover-card.js +1 -1
  65. package/lib/ui/hover-card/hover-card.js.map +1 -1
  66. package/lib/ui/icon/icon.js +1 -1
  67. package/lib/ui/toolbar/toolbar.module.css +1 -3
  68. package/lib-esm/app/app.js +4 -8
  69. package/lib-esm/app/app.js.map +1 -1
  70. package/lib-esm/app/app.module.css +2 -2
  71. package/lib-esm/components/bundle-assets/bundle-assets.js +12 -5
  72. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  73. package/lib-esm/components/bundle-assets/bundle-assets.module.css +0 -5
  74. package/lib-esm/components/bundle-assets/index.js +3 -3
  75. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  76. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js +23 -12
  77. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.js.map +1 -1
  78. package/lib-esm/components/bundle-modules/bundle-modules.js +22 -12
  79. package/lib-esm/components/bundle-modules/bundle-modules.js.map +1 -1
  80. package/lib-esm/components/bundle-modules/bundle-modules.module.css +0 -5
  81. package/lib-esm/components/bundle-modules/index.js +2 -2
  82. package/lib-esm/components/bundle-modules/index.js.map +1 -1
  83. package/lib-esm/components/bundle-packages/bundle-packages.js +10 -3
  84. package/lib-esm/components/bundle-packages/bundle-packages.js.map +1 -1
  85. package/lib-esm/components/bundle-packages/bundle-packages.module.css +0 -5
  86. package/lib-esm/components/bundle-packages/index.js +3 -3
  87. package/lib-esm/components/bundle-packages/index.js.map +1 -1
  88. package/lib-esm/components/index.js +0 -1
  89. package/lib-esm/components/index.js.map +1 -1
  90. package/lib-esm/components/jobs-header/jobs-header.module.css +0 -4
  91. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js +4 -10
  92. package/lib-esm/components/metrics-display-selector/metrics-display-selector.js.map +1 -1
  93. package/lib-esm/components/metrics-table/metrics-table.i18n.js +0 -5
  94. package/lib-esm/components/metrics-table/metrics-table.i18n.js.map +1 -1
  95. package/lib-esm/components/metrics-table/metrics-table.js +4 -37
  96. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  97. package/lib-esm/components/metrics-table/metrics-table.module.css +1 -44
  98. package/lib-esm/components/metrics-table-header/index.js +2 -0
  99. package/lib-esm/components/metrics-table-header/index.js.map +1 -0
  100. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js +6 -0
  101. package/lib-esm/components/metrics-table-header/metrics-table-header.i18n.js.map +1 -0
  102. package/lib-esm/components/metrics-table-header/metrics-table-header.js +49 -0
  103. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -0
  104. package/lib-esm/components/metrics-table-header/metrics-table-header.module.css +51 -0
  105. package/lib-esm/components/metrics-table-options/metrics-table-options.js +3 -3
  106. package/lib-esm/components/metrics-table-options/metrics-table-options.js.map +1 -1
  107. package/lib-esm/components/metrics-table-title/metrics-table-title.js +1 -1
  108. package/lib-esm/components/metrics-table-title/metrics-table-title.js.map +1 -1
  109. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +4 -4
  110. package/lib-esm/components/metrics-treemap/metrics-treemap.js +69 -53
  111. package/lib-esm/components/metrics-treemap/metrics-treemap.js.map +1 -1
  112. package/lib-esm/components/metrics-treemap/metrics-treemap.module.css +89 -56
  113. package/lib-esm/components/sort-button/sort-button.module.css +1 -0
  114. package/lib-esm/css/variables.css +14 -14
  115. package/lib-esm/hooks/entry-info.js +8 -0
  116. package/lib-esm/hooks/entry-info.js.map +1 -0
  117. package/lib-esm/layout/flex-stack/flex-stack.js +3 -4
  118. package/lib-esm/layout/flex-stack/flex-stack.js.map +1 -1
  119. package/lib-esm/layout/flex-stack/flex-stack.module.css +19 -23
  120. package/lib-esm/query-state.js +1 -1
  121. package/lib-esm/query-state.js.map +1 -1
  122. package/lib-esm/ui/button/button.js +5 -4
  123. package/lib-esm/ui/button/button.js.map +1 -1
  124. package/lib-esm/ui/button/button.module.css +55 -52
  125. package/lib-esm/ui/dropdown/dropdown.js +8 -39
  126. package/lib-esm/ui/dropdown/dropdown.js.map +1 -1
  127. package/lib-esm/ui/dropdown/index.js.map +1 -1
  128. package/lib-esm/ui/filters/filters.js +34 -36
  129. package/lib-esm/ui/filters/filters.js.map +1 -1
  130. package/lib-esm/ui/filters/filters.module.css +55 -67
  131. package/lib-esm/ui/hover-card/hover-card.js +1 -1
  132. package/lib-esm/ui/hover-card/hover-card.js.map +1 -1
  133. package/lib-esm/ui/icon/icon.js +1 -1
  134. package/lib-esm/ui/toolbar/toolbar.module.css +1 -3
  135. package/package.json +8 -10
  136. package/src/app/app.jsx +4 -12
  137. package/src/app/app.module.css +2 -2
  138. package/src/components/bundle-assets/bundle-assets.jsx +24 -7
  139. package/src/components/bundle-assets/bundle-assets.module.css +0 -5
  140. package/src/components/bundle-assets/index.jsx +8 -3
  141. package/src/components/bundle-assets-totals/bundle-assets-totals.jsx +55 -24
  142. package/src/components/bundle-modules/bundle-modules.module.css +0 -5
  143. package/src/components/bundle-modules/bundle-modules.tsx +60 -42
  144. package/src/components/bundle-modules/index.tsx +2 -2
  145. package/src/components/bundle-packages/bundle-packages.jsx +19 -5
  146. package/src/components/bundle-packages/bundle-packages.module.css +0 -5
  147. package/src/components/bundle-packages/index.jsx +8 -3
  148. package/src/components/index.js +0 -1
  149. package/src/components/jobs-header/jobs-header.module.css +0 -4
  150. package/src/components/metrics-display-selector/metrics-display-selector.tsx +8 -12
  151. package/src/components/metrics-table/metrics-table.i18n.ts +0 -7
  152. package/src/components/metrics-table/metrics-table.module.css +1 -44
  153. package/src/components/metrics-table/metrics-table.tsx +17 -153
  154. package/src/components/metrics-table-header/index.ts +1 -0
  155. package/src/components/metrics-table-header/metrics-table-header.i18n.ts +6 -0
  156. package/src/components/metrics-table-header/metrics-table-header.module.css +51 -0
  157. package/src/components/metrics-table-header/metrics-table-header.tsx +172 -0
  158. package/src/components/metrics-table-options/metrics-table-options.jsx +4 -10
  159. package/src/components/metrics-table-title/metrics-table-title.jsx +1 -1
  160. package/src/components/metrics-table-title/metrics-table-title.module.css +4 -4
  161. package/src/components/metrics-treemap/metrics-treemap.module.css +89 -56
  162. package/src/components/metrics-treemap/metrics-treemap.tsx +151 -118
  163. package/src/components/sort-button/sort-button.module.css +1 -0
  164. package/src/css/variables.css +14 -14
  165. package/src/hooks/entry-info.ts +19 -0
  166. package/src/layout/flex-stack/flex-stack.module.css +19 -23
  167. package/src/layout/flex-stack/flex-stack.tsx +2 -8
  168. package/src/query-state.tsx +1 -1
  169. package/src/ui/button/button.module.css +55 -52
  170. package/src/ui/button/button.stories.tsx +16 -9
  171. package/src/ui/button/button.tsx +8 -7
  172. package/src/ui/dropdown/dropdown.stories.tsx +25 -0
  173. package/src/ui/dropdown/dropdown.tsx +66 -0
  174. package/src/ui/filters/filters.module.css +55 -67
  175. package/src/ui/filters/filters.stories.tsx +109 -0
  176. package/src/ui/filters/filters.tsx +128 -167
  177. package/src/ui/hover-card/hover-card.tsx +1 -1
  178. package/src/ui/icon/icon.tsx +1 -1
  179. package/src/ui/toolbar/toolbar.module.css +1 -3
  180. package/types/components/bundle-assets-totals/bundle-assets-totals.d.ts +5 -1
  181. package/types/components/index.d.ts +0 -1
  182. package/types/components/metrics-display-selector/metrics-display-selector.d.ts +2 -2
  183. package/types/components/metrics-table/metrics-table.d.ts +4 -10
  184. package/types/components/metrics-table/metrics-table.i18n.d.ts +0 -5
  185. package/types/components/metrics-table-header/index.d.ts +1 -0
  186. package/types/components/metrics-table-header/metrics-table-header.d.ts +15 -0
  187. package/types/components/metrics-table-header/metrics-table-header.i18n.d.ts +5 -0
  188. package/types/hooks/entry-info.d.ts +8 -0
  189. package/types/ui/dropdown/dropdown.d.ts +12 -47
  190. package/types/ui/dropdown/index.d.ts +1 -1
  191. package/types/ui/filters/filters.d.ts +2 -7
  192. package/types/ui/icon/icon.d.ts +2 -2
  193. package/lib/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  194. package/lib/components/total-size-type-title/index.js.map +0 -1
  195. package/lib/components/total-size-type-title/total-size-type-title.js +0 -32
  196. package/lib/components/total-size-type-title/total-size-type-title.js.map +0 -1
  197. package/lib/components/total-size-type-title/total-size-type-title.module.css +0 -14
  198. package/lib/hooks/show-entry.js +0 -13
  199. package/lib/hooks/show-entry.js.map +0 -1
  200. package/lib-esm/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  201. package/lib-esm/components/total-size-type-title/index.js +0 -2
  202. package/lib-esm/components/total-size-type-title/index.js.map +0 -1
  203. package/lib-esm/components/total-size-type-title/total-size-type-title.js +0 -25
  204. package/lib-esm/components/total-size-type-title/total-size-type-title.js.map +0 -1
  205. package/lib-esm/components/total-size-type-title/total-size-type-title.module.css +0 -14
  206. package/lib-esm/hooks/show-entry.js +0 -9
  207. package/lib-esm/hooks/show-entry.js.map +0 -1
  208. package/src/components/bundle-assets-totals/bundle-assets-totals.module.css +0 -7
  209. package/src/components/total-size-type-title/index.js +0 -1
  210. package/src/components/total-size-type-title/total-size-type-title.jsx +0 -41
  211. package/src/components/total-size-type-title/total-size-type-title.module.css +0 -14
  212. package/src/hooks/show-entry.ts +0 -17
  213. package/src/ui/dropdown/dropdown.jsx +0 -88
  214. package/types/components/total-size-type-title/index.d.ts +0 -1
  215. package/types/components/total-size-type-title/total-size-type-title.d.ts +0 -14
  216. package/types/hooks/show-entry.d.ts +0 -10
  217. /package/src/ui/dropdown/{index.js → index.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.13.0-beta.0",
3
+ "version": "4.13.0-beta.11",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -36,14 +36,14 @@
36
36
  },
37
37
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/ui#readme",
38
38
  "devDependencies": {
39
- "@babel/preset-env": "7.24.0",
40
- "@babel/preset-react": "7.23.3",
41
- "@babel/preset-typescript": "7.23.3",
39
+ "@babel/preset-env": "7.24.4",
40
+ "@babel/preset-react": "7.24.1",
41
+ "@babel/preset-typescript": "7.24.1",
42
42
  "@storybook/addon-essentials": "7.6.17",
43
43
  "@storybook/react": "7.6.17",
44
44
  "@storybook/react-webpack5": "7.6.17",
45
45
  "@types/d3": "7.4.3",
46
- "@types/react": "18.2.64",
46
+ "@types/react": "18.2.77",
47
47
  "@types/react-router-dom": "5.3.3",
48
48
  "babel-plugin-require-context-hook": "1.0.0",
49
49
  "classnames": "2.5.1",
@@ -52,7 +52,7 @@
52
52
  "hex-rgb": "5.0.0",
53
53
  "identity-obj-proxy": "3.0.0",
54
54
  "jest": "29.7.0",
55
- "jest-date-mock": "1.0.8",
55
+ "jest-date-mock": "1.0.9",
56
56
  "jest-environment-jsdom": "29.7.0",
57
57
  "lodash": "4.17.21",
58
58
  "prop-types": "15.8.1",
@@ -73,14 +73,12 @@
73
73
  "react-router-dom": "^5.0.0"
74
74
  },
75
75
  "dependencies": {
76
- "@bundle-stats/utils": "4.13.0-beta.0",
77
- "@floating-ui/react": "0.26.9",
78
- "@floating-ui/react-dom": "2.0.8",
76
+ "@bundle-stats/utils": "4.13.0-beta.11",
79
77
  "ariakit": "2.0.0-next.44",
80
78
  "d3": "^7.8.5",
81
79
  "modern-css-reset": "1.4.0",
82
80
  "react-use": "^17.5.0",
83
81
  "use-query-params": "2.2.1"
84
82
  },
85
- "gitHead": "f8197677d480f9b0b2112456526c821f49ed5a7d"
83
+ "gitHead": "e128789009e036ad306e3fb6095137b91b56111f"
86
84
  }
package/src/app/app.jsx CHANGED
@@ -97,9 +97,7 @@ const OverviewContent = () => {
97
97
  </Container>
98
98
  )}
99
99
  <Container>
100
- <Box outline>
101
- <BundleAssetsTotals jobs={jobs} />
102
- </Box>
100
+ <BundleAssetsTotals jobs={jobs} />
103
101
  </Container>
104
102
  </Stack>
105
103
  );
@@ -111,9 +109,7 @@ const AssetsContent = () => {
111
109
 
112
110
  return (
113
111
  <Container>
114
- <Box outline>
115
- <BundleAssets jobs={jobs} setState={bundleStatsSetState} {...bundleStatsState} />
116
- </Box>
112
+ <BundleAssets jobs={jobs} setState={bundleStatsSetState} {...bundleStatsState} />
117
113
  </Container>
118
114
  );
119
115
  };
@@ -126,9 +122,7 @@ const ModulesContent = () => {
126
122
 
127
123
  return (
128
124
  <Container>
129
- <Box outline>
130
- <BundleModules jobs={jobs} setState={bundleModulesSetState} {...bundleModulesState} />
131
- </Box>
125
+ <BundleModules jobs={jobs} setState={bundleModulesSetState} {...bundleModulesState} />
132
126
  </Container>
133
127
  );
134
128
  };
@@ -141,9 +135,7 @@ const PackagesContent = () => {
141
135
 
142
136
  return (
143
137
  <Container>
144
- <Box outline>
145
- <BundlePackages jobs={jobs} {...bundlePackagesState} setState={bundlePackagesSetState} />
146
- </Box>
138
+ <BundlePackages jobs={jobs} {...bundlePackagesState} setState={bundlePackagesSetState} />
147
139
  </Container>
148
140
  );
149
141
  };
@@ -18,8 +18,8 @@
18
18
  }
19
19
 
20
20
  .summaryContainer {
21
- padding-top: var(--space-medium);
22
- padding-bottom: var(--space-xsmall);
21
+ padding-top: var(--space-small);
22
+ padding-bottom: var(--space-xxsmall);
23
23
  }
24
24
 
25
25
  .tabsContainer {
@@ -15,12 +15,15 @@ import config from '../../config.json';
15
15
  import I18N from '../../i18n';
16
16
  import { MetricsDisplayType } from '../../constants';
17
17
  import { useMetricsDisplayType } from '../../hooks/metrics-display-type';
18
+ import { Box } from '../../layout/box';
18
19
  import { FlexStack } from '../../layout/flex-stack';
20
+ import { Stack } from '../../layout/stack';
19
21
  import { Icon } from '../../ui/icon';
20
22
  import { InputSearch } from '../../ui/input-search';
21
23
  import { FileName } from '../../ui/file-name';
22
24
  import { HoverCard } from '../../ui/hover-card';
23
25
  import { Tag } from '../../ui/tag';
26
+ import { Table } from '../../ui/table';
24
27
  import { Filters } from '../../ui/filters';
25
28
  import { EmptySet } from '../../ui/empty-set';
26
29
  import { Toolbar } from '../../ui/toolbar';
@@ -30,9 +33,10 @@ import { ComponentLink } from '../component-link';
30
33
  import { MetricsTable } from '../metrics-table';
31
34
  import { MetricsTableOptions } from '../metrics-table-options';
32
35
  import { MetricsTableTitle } from '../metrics-table-title';
33
- import { SEARCH_PLACEHOLDER } from './bundle-assets.i18n';
34
36
  import { MetricsDisplaySelector } from '../metrics-display-selector';
37
+ import { MetricsTableHeader } from '../metrics-table-header';
35
38
  import { MetricsTreemap } from '../metrics-treemap';
39
+ import { SEARCH_PLACEHOLDER } from './bundle-assets.i18n';
36
40
  import css from './bundle-assets.module.css';
37
41
 
38
42
  const RUN_TITLE_CURRENT = 'Current';
@@ -230,9 +234,8 @@ export const BundleAssets = (props) => {
230
234
 
231
235
  return (
232
236
  <>
233
- <section className={cx(css.root, className)}>
237
+ <Stack space="xsmall" as="section" className={cx(css.root, className)}>
234
238
  <Toolbar
235
- className={css.toolbar}
236
239
  renderActions={({ actionClassName }) => (
237
240
  <FlexStack space="xxsmall" className={cx(css.dropdown, actionClassName)}>
238
241
  <MetricsDisplaySelector onSelect={setDisplayType} value={displayType} />
@@ -258,7 +261,7 @@ export const BundleAssets = (props) => {
258
261
  />
259
262
  </FlexStack>
260
263
  </Toolbar>
261
- <main>
264
+ <Box outline as="main">
262
265
  {displayType === MetricsDisplayType.TABLE && (
263
266
  <MetricsTable
264
267
  runs={jobs}
@@ -272,10 +275,24 @@ export const BundleAssets = (props) => {
272
275
  />
273
276
  )}
274
277
  {displayType === MetricsDisplayType.TREEMAP && (
275
- <MetricsTreemap emptyMessage={emptyMessage} items={items} onItemClick={showEntryInfo} />
278
+ <>
279
+ <Table compact>
280
+ <MetricsTableHeader
281
+ metricTitle={metricsTableTitle}
282
+ showSum
283
+ jobs={jobs}
284
+ rows={items}
285
+ />
286
+ </Table>
287
+ <MetricsTreemap
288
+ emptyMessage={emptyMessage}
289
+ items={items}
290
+ onItemClick={showEntryInfo}
291
+ />
292
+ </>
276
293
  )}
277
- </main>
278
- </section>
294
+ </Box>
295
+ </Stack>
279
296
 
280
297
  {entryItem && (
281
298
  <AssetInfo
@@ -1,11 +1,6 @@
1
- .toolbar {
2
- border-bottom: 1px solid var(--color-outline);
3
- }
4
-
5
1
  .toolbarSearch {
6
2
  width: 100%;
7
3
  max-width: 240px;
8
- margin-right: -1px; /** collapse border */
9
4
  }
10
5
 
11
6
  .assetNameWrapper {
@@ -10,9 +10,14 @@ import {
10
10
  import { useRowsFilter } from '../../hooks/rows-filter';
11
11
  import { useRowsSort } from '../../hooks/rows-sort';
12
12
  import { useSearchParams } from '../../hooks/search-params';
13
- import { useShowEntry } from '../../hooks/show-entry';
13
+ import { useEntryInfo } from '../../hooks/entry-info';
14
14
  import { BundleAssets as BundleAssetsComponent } from './bundle-assets';
15
- import { addRowAssetFlags, addRowIsNotPredictive, getRowFilter, getCustomSort } from './bundle-assets.utils';
15
+ import {
16
+ addRowAssetFlags,
17
+ addRowIsNotPredictive,
18
+ getRowFilter,
19
+ getCustomSort,
20
+ } from './bundle-assets.utils';
16
21
 
17
22
  export const BundleAssets = (props) => {
18
23
  const { jobs, filters, search, setState, sortBy, direction, ...restProps } = props;
@@ -60,7 +65,7 @@ export const BundleAssets = (props) => {
60
65
  getCustomSort,
61
66
  });
62
67
 
63
- const { hideEntryInfo, showEntryInfo } = useShowEntry({ setState });
68
+ const [hideEntryInfo, showEntryInfo] = useEntryInfo({ setState });
64
69
 
65
70
  return (
66
71
  <BundleAssetsComponent
@@ -1,4 +1,4 @@
1
- import React, { useCallback } from 'react';
1
+ import React, { useCallback, useMemo } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { useHistory } from 'react-router-dom';
4
4
  import {
@@ -7,20 +7,26 @@ import {
7
7
  } from '@bundle-stats/utils';
8
8
  import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
9
9
 
10
+ import config from '../../config.json';
10
11
  import { ASSETS_SIZES_FILE_TYPE_MAP, SECTION_URLS, MetricsDisplayType } from '../../constants';
11
12
  import { useMetricsDisplayType } from '../../hooks/metrics-display-type';
13
+ import I18N from '../../i18n';
12
14
  import { Toolbar } from '../../ui/toolbar';
13
- import { MetricsTreemap } from '../metrics-treemap';
15
+ import { Table } from '../../ui/table';
16
+ import { Box } from '../../layout/box';
17
+ import { Stack } from '../../layout/stack';
14
18
  import { MetricsDisplaySelector } from '../metrics-display-selector';
15
- import { TotalSizeTypeTitle } from '../total-size-type-title';
16
19
  import { MetricsTable } from '../metrics-table';
20
+ import { MetricsTableTitle } from '../metrics-table-title';
21
+ import { MetricsTableHeader } from '../metrics-table-header';
22
+ import { MetricsTreemap } from '../metrics-treemap';
17
23
  import { ComponentLink } from '../component-link';
18
- import css from './bundle-assets-totals.module.css';
19
24
 
20
25
  export const BundleAssetsTotals = ({
21
26
  className,
22
27
  jobs,
23
28
  customComponentLink: CustomComponentLink,
29
+ onTreemapItemClick,
24
30
  ...restProps
25
31
  }) => {
26
32
  const [displayType, setDisplayType] = useMetricsDisplayType();
@@ -43,37 +49,56 @@ export const BundleAssetsTotals = ({
43
49
  (entryId) => {
44
50
  const fileType = ASSETS_SIZES_FILE_TYPE_MAP[entryId];
45
51
  const { section, params } = getBundleAssetsFileTypeComponentLink(fileType, '');
46
- const search = getComponentStateQueryString(params);
47
- const nextUrl = `${SECTION_URLS[section]}?${search}`;
52
+ const queryParams = getComponentStateQueryString(params);
48
53
 
54
+ const nextUrl = `${SECTION_URLS[section]}?${queryParams}`;
49
55
  history.push(nextUrl);
50
56
  },
51
57
  [history],
52
58
  );
53
59
 
60
+ const metricsTableTitle = useMemo(
61
+ () => (
62
+ <MetricsTableTitle
63
+ title={I18N.ASSET_TOTALS}
64
+ popoverInfo={I18N.ASSET_TOTALS_INFO}
65
+ popoverHref={config.documentation.assets}
66
+ />
67
+ ),
68
+ [],
69
+ );
70
+
54
71
  return (
55
- <div className={className}>
72
+ <Stack space="xsmall" as="section" className={className}>
56
73
  <Toolbar
57
- className={css.toolbar}
58
74
  renderActions={() => (
59
75
  <MetricsDisplaySelector onSelect={setDisplayType} value={displayType} />
60
76
  )}
61
- >
62
- <TotalSizeTypeTitle />
63
- </Toolbar>
64
- {displayType === MetricsDisplayType.TABLE && (
65
- <MetricsTable
66
- runs={jobs}
67
- items={items}
68
- renderRowHeader={renderRowHeader}
69
- showHeaderSum
70
- {...restProps}
71
- />
72
- )}
73
- {displayType === MetricsDisplayType.TREEMAP && (
74
- <MetricsTreemap items={items} onItemClick={handleMetricsTreemapItemClick} />
75
- )}
76
- </div>
77
+ />
78
+ <Box outline as="main">
79
+ {displayType === MetricsDisplayType.TABLE && (
80
+ <MetricsTable
81
+ title={metricsTableTitle}
82
+ runs={jobs}
83
+ items={items}
84
+ renderRowHeader={renderRowHeader}
85
+ showHeaderSum
86
+ {...restProps}
87
+ />
88
+ )}
89
+ {displayType === MetricsDisplayType.TREEMAP && (
90
+ <>
91
+ <Table compact>
92
+ <MetricsTableHeader metricTitle={metricsTableTitle} showSum jobs={jobs} rows={items} />
93
+ </Table>
94
+ <MetricsTreemap
95
+ items={items}
96
+ onItemClick={onTreemapItemClick || handleMetricsTreemapItemClick}
97
+ />
98
+ </>
99
+ )}
100
+ </Box>
101
+ </Stack>
77
102
  );
78
103
  };
79
104
 
@@ -81,6 +106,7 @@ BundleAssetsTotals.defaultProps = {
81
106
  className: '',
82
107
  jobs: [],
83
108
  customComponentLink: ComponentLink,
109
+ onTreemapItemClick: undefined,
84
110
  };
85
111
 
86
112
  BundleAssetsTotals.propTypes = {
@@ -91,4 +117,9 @@ BundleAssetsTotals.propTypes = {
91
117
  jobs: PropTypes.array, // eslint-disable-line react/forbid-prop-types
92
118
 
93
119
  customComponentLink: PropTypes.elementType,
120
+
121
+ /**
122
+ * Treemap item onClick
123
+ */
124
+ onTreemapItemClick: PropTypes.func,
94
125
  };
@@ -2,14 +2,9 @@
2
2
  color: var(--color-text-light);
3
3
  }
4
4
 
5
- .toolbar {
6
- border-bottom: 1px solid var(--color-outline);
7
- }
8
-
9
5
  .toolbarSearch {
10
6
  width: 100%;
11
7
  max-width: 240px;
12
- margin-right: -1px; /** collapse border */
13
8
  }
14
9
 
15
10
  .metricSelector {
@@ -5,19 +5,23 @@ import { SECTIONS, COMPONENT } from '@bundle-stats/utils';
5
5
  import { SortAction } from '../../types';
6
6
  import config from '../../config.json';
7
7
  import I18N from '../../i18n';
8
- import { Box } from '../../layout/box';
9
8
  import { MetricsDisplayType } from '../../constants';
9
+ import { Box } from '../../layout/box';
10
10
  import { FlexStack } from '../../layout/flex-stack';
11
+ import { Stack } from '../../layout/stack';
11
12
  import { Button } from '../../ui/button';
13
+ import { ControlGroup } from '../../ui/control-group';
12
14
  import { EmptySet } from '../../ui/empty-set';
13
15
  import { FileName } from '../../ui/file-name';
14
16
  import { Filters } from '../../ui/filters';
15
17
  import { InputSearch } from '../../ui/input-search';
16
18
  import { Tag } from '../../ui/tag';
19
+ import { Table } from '../../ui/table';
17
20
  import { Toolbar } from '../../ui/toolbar';
18
21
  import { Tooltip } from '../../ui/tooltip';
19
22
  import { ComponentLink } from '../component-link';
20
23
  import { MetricsTable } from '../metrics-table';
24
+ import { MetricsTableHeader } from '../metrics-table-header';
21
25
  import { MetricsTreemap } from '../metrics-treemap';
22
26
  import { MetricsTableOptions } from '../metrics-table-options';
23
27
  import { MetricsDisplaySelector } from '../metrics-display-selector';
@@ -44,7 +48,9 @@ const RowHeader = (props: RowHeaderProps) => {
44
48
  return (
45
49
  <CustomComponentLink
46
50
  section={SECTIONS.MODULES}
47
- params={{ [COMPONENT.BUNDLE_MODULES]: { filters, search, entryId: row.key, moduleMetric } }}
51
+ params={{
52
+ [COMPONENT.BUNDLE_MODULES]: { filters, search, entryId: row.key, metric: moduleMetric },
53
+ }}
48
54
  className={css.name}
49
55
  >
50
56
  {row.duplicated && (
@@ -140,7 +146,7 @@ export const BundleModules = (props: BundleModulesProps) => {
140
146
  customComponentLink={CustomComponentLink}
141
147
  />
142
148
  ),
143
- [jobs, chunks, CustomComponentLink, filters, search],
149
+ [jobs, chunks, CustomComponentLink, filters, search, moduleMetric],
144
150
  );
145
151
 
146
152
  const emptyMessage = useMemo(
@@ -165,7 +171,7 @@ export const BundleModules = (props: BundleModulesProps) => {
165
171
 
166
172
  return (
167
173
  <>
168
- <div className={rootClassName}>
174
+ <Stack space="xsmall" as="section" className={rootClassName}>
169
175
  <Toolbar
170
176
  className={css.toolbar}
171
177
  renderActions={({ actionClassName }) => (
@@ -192,45 +198,57 @@ export const BundleModules = (props: BundleModulesProps) => {
192
198
  />
193
199
  </FlexStack>
194
200
  </Toolbar>
195
- <Box padding={['xsmall', 'small']} className={css.metricSelector}>
196
- <FlexStack space="xxsmall" as="nav">
197
- <Button
198
- outline
199
- active={moduleMetric === ModuleMetric.SIZE}
200
- size="small"
201
- type="button"
202
- onClick={() => setModuleMetric(ModuleMetric.SIZE)}
203
- >
204
- <Tooltip title="Size (excluding duplicate modules)">Module size</Tooltip>
205
- </Button>
206
- <Button
207
- outline
208
- active={moduleMetric === ModuleMetric.TOTAL_SIZE}
209
- size="small"
210
- type="button"
211
- onClick={() => setModuleMetric(ModuleMetric.TOTAL_SIZE)}
212
- >
213
- <Tooltip title="Size (including duplicate modules)">Module total size</Tooltip>
214
- </Button>
215
- </FlexStack>
201
+ <Box outline as="main">
202
+ <Box padding={['xsmall', 'small']} className={css.metricSelector}>
203
+ <ControlGroup as="nav">
204
+ <Button
205
+ outline
206
+ active={moduleMetric === ModuleMetric.SIZE}
207
+ size="small"
208
+ type="button"
209
+ onClick={() => setModuleMetric(ModuleMetric.SIZE)}
210
+ >
211
+ <Tooltip title="Size (excluding duplicate modules)">Module size</Tooltip>
212
+ </Button>
213
+ <Button
214
+ outline
215
+ active={moduleMetric === ModuleMetric.TOTAL_SIZE}
216
+ size="small"
217
+ type="button"
218
+ onClick={() => setModuleMetric(ModuleMetric.TOTAL_SIZE)}
219
+ >
220
+ <Tooltip title="Size (including duplicate modules)">Module total size</Tooltip>
221
+ </Button>
222
+ </ControlGroup>
223
+ </Box>
224
+ {displayType === MetricsDisplayType.TABLE && (
225
+ <MetricsTable
226
+ className={css.table}
227
+ items={items}
228
+ runs={jobs}
229
+ renderRowHeader={renderRowHeader}
230
+ emptyMessage={emptyMessage}
231
+ showHeaderSum
232
+ title={metricsTableTitle}
233
+ sort={sort}
234
+ updateSort={updateSort}
235
+ />
236
+ )}
237
+ {displayType === MetricsDisplayType.TREEMAP && (
238
+ <>
239
+ <Table compact>
240
+ <MetricsTableHeader
241
+ metricTitle={metricsTableTitle}
242
+ showSum
243
+ jobs={jobs}
244
+ rows={items}
245
+ />
246
+ </Table>
247
+ <MetricsTreemap emptyMessage={emptyMessage} items={items} onItemClick={showEntryInfo} />
248
+ </>
249
+ )}
216
250
  </Box>
217
- {displayType === MetricsDisplayType.TABLE && (
218
- <MetricsTable
219
- className={css.table}
220
- items={items}
221
- runs={jobs}
222
- renderRowHeader={renderRowHeader}
223
- emptyMessage={emptyMessage}
224
- showHeaderSum
225
- title={metricsTableTitle}
226
- sort={sort}
227
- updateSort={updateSort}
228
- />
229
- )}
230
- {displayType === MetricsDisplayType.TREEMAP && (
231
- <MetricsTreemap emptyMessage={emptyMessage} items={items} onItemClick={showEntryInfo} />
232
- )}
233
- </div>
251
+ </Stack>
234
252
  {entryItem && (
235
253
  <ModuleInfo
236
254
  className={css.moduleInfo}
@@ -6,7 +6,7 @@ import type { SortAction } from '../../types';
6
6
  import { useRowsFilter } from '../../hooks/rows-filter';
7
7
  import { useRowsSort } from '../../hooks/rows-sort';
8
8
  import { useSearchParams } from '../../hooks/search-params';
9
- import { useShowEntry } from '../../hooks/show-entry';
9
+ import { useEntryInfo } from '../../hooks/entry-info';
10
10
  import { BundleModules as BaseComponent } from './bundle-modules';
11
11
  import {
12
12
  addRowFlags,
@@ -120,7 +120,7 @@ export const BundleModules = (props: BundleModulesProps) => {
120
120
  getCustomSort,
121
121
  });
122
122
 
123
- const { hideEntryInfo, showEntryInfo } = useShowEntry({ setState });
123
+ const [hideEntryInfo, showEntryInfo] = useEntryInfo({ setState });
124
124
 
125
125
  return (
126
126
  <BaseComponent
@@ -5,14 +5,18 @@ import { COMPONENT, PACKAGE_FILTERS, PACKAGES_SEPARATOR, SECTIONS } from '@bundl
5
5
 
6
6
  import config from '../../config.json';
7
7
  import I18N from '../../i18n';
8
+ import { Box } from '../../layout/box';
8
9
  import { FlexStack } from '../../layout/flex-stack';
10
+ import { Stack } from '../../layout/stack';
9
11
  import { InputSearch } from '../../ui/input-search';
10
12
  import { EmptySet } from '../../ui/empty-set';
11
13
  import { Filters } from '../../ui/filters';
12
14
  import { Tag } from '../../ui/tag';
15
+ import { Table } from '../../ui/table';
13
16
  import { Toolbar } from '../../ui/toolbar';
14
17
  import { ComponentLink } from '../component-link';
15
18
  import { MetricsTable } from '../metrics-table';
19
+ import { MetricsTableHeader } from '../metrics-table-header';
16
20
  import { MetricsTableOptions } from '../metrics-table-options';
17
21
  import { MetricsTableTitle } from '../metrics-table-title';
18
22
  import { PackageInfo } from '../package-info';
@@ -189,7 +193,7 @@ export const BundlePackages = (props) => {
189
193
 
190
194
  return (
191
195
  <>
192
- <section className={cx(css.root, className)}>
196
+ <Stack space="xsmall" as="section" className={cx(css.root, className)}>
193
197
  <Toolbar
194
198
  className={css.toolbar}
195
199
  renderActions={({ actionClassName }) => (
@@ -217,7 +221,7 @@ export const BundlePackages = (props) => {
217
221
  />
218
222
  </FlexStack>
219
223
  </Toolbar>
220
- <main>
224
+ <Box outline as="main">
221
225
  {displayType === MetricsDisplayType.TABLE && (
222
226
  <MetricsTable
223
227
  runs={jobs}
@@ -231,10 +235,20 @@ export const BundlePackages = (props) => {
231
235
  />
232
236
  )}
233
237
  {displayType === MetricsDisplayType.TREEMAP && (
234
- <MetricsTreemap emptyMessage={emptyMessage} items={items} onItemClick={showEntryInfo} />
238
+ <>
239
+ <Table compact>
240
+ <MetricsTableHeader
241
+ metricTitle={metricsTableTitle}
242
+ showSum
243
+ jobs={jobs}
244
+ rows={items}
245
+ />
246
+ </Table>
247
+ <MetricsTreemap emptyMessage={emptyMessage} items={items} onItemClick={showEntryInfo} />
248
+ </>
235
249
  )}
236
- </main>
237
- </section>
250
+ </Box>
251
+ </Stack>
238
252
  {entryItem && (
239
253
  <PackageInfo
240
254
  className={css.packageInfo}
@@ -2,14 +2,9 @@
2
2
  color: var(--color-text-light);
3
3
  }
4
4
 
5
- .toolbar {
6
- border-bottom: 1px solid var(--color-outline);
7
- }
8
-
9
5
  .toolbarSearch {
10
6
  width: 100%;
11
7
  max-width: 240px;
12
- margin-right: -1px; /** collapse border */
13
8
  }
14
9
 
15
10
  .hoverCard {
@@ -6,9 +6,14 @@ import * as webpack from '@bundle-stats/utils/lib-esm/webpack/compare';
6
6
  import { useRowsFilter } from '../../hooks/rows-filter';
7
7
  import { useRowsSort } from '../../hooks/rows-sort';
8
8
  import { useSearchParams } from '../../hooks/search-params';
9
- import { useShowEntry } from '../../hooks/show-entry';
9
+ import { useEntryInfo } from '../../hooks/entry-info';
10
10
  import { BundlePackages as BundlePackagesComponent } from './bundle-packages';
11
- import { getDuplicatePackages, getAddRowDuplicateFlag, getRowFilter, getCustomSort } from './bundle-packages.utils';
11
+ import {
12
+ getDuplicatePackages,
13
+ getAddRowDuplicateFlag,
14
+ getRowFilter,
15
+ getCustomSort,
16
+ } from './bundle-packages.utils';
12
17
 
13
18
  export const BundlePackages = (props) => {
14
19
  const { jobs, search, filters, setState, sortBy, direction, ...restProps } = props;
@@ -55,7 +60,7 @@ export const BundlePackages = (props) => {
55
60
  getCustomSort,
56
61
  });
57
62
 
58
- const { hideEntryInfo, showEntryInfo } = useShowEntry({ setState });
63
+ const [hideEntryInfo, showEntryInfo] = useEntryInfo({ setState });
59
64
 
60
65
  return (
61
66
  <BundlePackagesComponent
@@ -18,4 +18,3 @@ export { MetricsTableTitle } from './metrics-table-title';
18
18
  export { ModuleInfo } from './module-info';
19
19
  export { RunInfo, RunInfoProps } from './run-info';
20
20
  export { Summary } from './summary';
21
- export { TotalSizeTypeTitle } from './total-size-type-title';
@@ -24,10 +24,6 @@
24
24
  background: linear-gradient(90deg, transparent, var(--color-background));
25
25
  }
26
26
 
27
- .item + .item {
28
- margin-left: var(--space-small);
29
- }
30
-
31
27
  .item:first-child {
32
28
  border-left: 0;
33
29
  padding-left: 0;