@rsdoctor/components 1.5.18 → 1.6.1

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 (148) hide show
  1. package/dist/components/Alert/ecma-version-check_module.css +1 -1
  2. package/dist/components/Alert/ecma-version-check_module.css.map +1 -1
  3. package/dist/components/Alerts/bundle-alert.mjs +12 -8
  4. package/dist/components/Alerts/bundle-alert.mjs.map +1 -1
  5. package/dist/components/Alerts/bundle.mjs +3 -4
  6. package/dist/components/Alerts/bundle.mjs.map +1 -1
  7. package/dist/components/Alerts/collapse-cjs-require.mjs +6 -14
  8. package/dist/components/Alerts/collapse-cjs-require.mjs.map +1 -1
  9. package/dist/components/Alerts/collapse-cross-chunks.mjs +3 -8
  10. package/dist/components/Alerts/collapse-cross-chunks.mjs.map +1 -1
  11. package/dist/components/Alerts/collapse-esm-cjs.mjs +6 -10
  12. package/dist/components/Alerts/collapse-esm-cjs.mjs.map +1 -1
  13. package/dist/components/Alerts/collapse-module-mixed-chunks.mjs +5 -12
  14. package/dist/components/Alerts/collapse-module-mixed-chunks.mjs.map +1 -1
  15. package/dist/components/Alerts/collapse-side-effects-only-imports.mjs +5 -12
  16. package/dist/components/Alerts/collapse-side-effects-only-imports.mjs.map +1 -1
  17. package/dist/components/Alerts/collapse.mjs +3 -10
  18. package/dist/components/Alerts/collapse.mjs.map +1 -1
  19. package/dist/components/Alerts/collapse_module.css +1 -1
  20. package/dist/components/Alerts/collapse_module.css.map +1 -1
  21. package/dist/components/Alerts/index.module.mjs +7 -0
  22. package/dist/components/Alerts/index.module.mjs.map +1 -0
  23. package/dist/components/Alerts/index_module.css +9 -0
  24. package/dist/components/Alerts/index_module.css.map +1 -0
  25. package/dist/components/Alerts/list.mjs +0 -3
  26. package/dist/components/Alerts/list.mjs.map +1 -1
  27. package/dist/components/Card/size.d.ts +1 -0
  28. package/dist/components/Card/size.mjs +29 -7
  29. package/dist/components/Card/size.mjs.map +1 -1
  30. package/dist/components/Card/size.module.mjs +1 -0
  31. package/dist/components/Card/size.module.mjs.map +1 -1
  32. package/dist/components/Card/size_module.css +5 -2
  33. package/dist/components/Card/size_module.css.map +1 -1
  34. package/dist/components/Charts/TimelineCharts/index.mjs +118 -94
  35. package/dist/components/Charts/TimelineCharts/index.mjs.map +1 -1
  36. package/dist/components/Charts/TreeMap.d.ts +2 -1
  37. package/dist/components/Charts/TreeMap.mjs +111 -126
  38. package/dist/components/Charts/TreeMap.mjs.map +1 -1
  39. package/dist/components/Charts/constants.d.ts +1 -0
  40. package/dist/components/Charts/constants.mjs +11 -1
  41. package/dist/components/Charts/constants.mjs.map +1 -1
  42. package/dist/components/Charts/index.mjs +3 -1
  43. package/dist/components/Charts/index.mjs.map +1 -1
  44. package/dist/components/Charts/loader.css +1 -1
  45. package/dist/components/Charts/loader.css.map +1 -1
  46. package/dist/components/Charts/treeMapSize.d.ts +10 -0
  47. package/dist/components/Charts/treeMapSize.mjs +17 -0
  48. package/dist/components/Charts/treeMapSize.mjs.map +1 -0
  49. package/dist/components/Charts/treeMapSize.test.d.ts +1 -0
  50. package/dist/components/Charts/treeMapSize.test.mjs +44 -0
  51. package/dist/components/Charts/treeMapSize.test.mjs.map +1 -0
  52. package/dist/components/Charts/treemap_module.css +6 -5
  53. package/dist/components/Charts/treemap_module.css.map +1 -1
  54. package/dist/components/FileTree/index.css +0 -1
  55. package/dist/components/FileTree/index.css.map +1 -1
  56. package/dist/components/FileTree/index.mjs +3 -4
  57. package/dist/components/FileTree/index.mjs.map +1 -1
  58. package/dist/components/Keyword/style_module.css +0 -1
  59. package/dist/components/Keyword/style_module.css.map +1 -1
  60. package/dist/components/Layout/header.mjs +38 -16
  61. package/dist/components/Layout/header.mjs.map +1 -1
  62. package/dist/components/Layout/header.module.mjs +5 -2
  63. package/dist/components/Layout/header.module.mjs.map +1 -1
  64. package/dist/components/Layout/header_module.css +69 -21
  65. package/dist/components/Layout/header_module.css.map +1 -1
  66. package/dist/components/Layout/index.mjs +34 -8
  67. package/dist/components/Layout/index.mjs.map +1 -1
  68. package/dist/components/Layout/menus.mjs +9 -6
  69. package/dist/components/Layout/menus.mjs.map +1 -1
  70. package/dist/components/Layout/rsdoctor-title-logo-dark.mjs +2 -0
  71. package/dist/components/Loader/Analysis/files.mjs +16 -17
  72. package/dist/components/Loader/Analysis/files.mjs.map +1 -1
  73. package/dist/components/Loader/Analysis/style_module.css +13 -14
  74. package/dist/components/Loader/Analysis/style_module.css.map +1 -1
  75. package/dist/components/Loader/executions.mjs +5 -13
  76. package/dist/components/Loader/executions.mjs.map +1 -1
  77. package/dist/components/Overall/DataSummary.d.ts +1 -1
  78. package/dist/components/Overall/DataSummary.mjs +21 -20
  79. package/dist/components/Overall/DataSummary.mjs.map +1 -1
  80. package/dist/components/Overall/DataSummary.module.mjs +1 -12
  81. package/dist/components/Overall/DataSummary.module.mjs.map +1 -1
  82. package/dist/components/Overall/DataSummary_module.css +13 -73
  83. package/dist/components/Overall/DataSummary_module.css.map +1 -1
  84. package/dist/components/Overall/bundle.mjs +2 -3
  85. package/dist/components/Overall/bundle.mjs.map +1 -1
  86. package/dist/components/Overall/bundle.module.mjs +1 -0
  87. package/dist/components/Overall/bundle.module.mjs.map +1 -1
  88. package/dist/components/Overall/bundle_module.css +12 -4
  89. package/dist/components/Overall/bundle_module.css.map +1 -1
  90. package/dist/components/Overall/list_module.css +18 -2
  91. package/dist/components/Overall/list_module.css.map +1 -1
  92. package/dist/components/Overall/overview_module.css +13 -6
  93. package/dist/components/Overall/overview_module.css.map +1 -1
  94. package/dist/components/Overall/project.mjs +1 -1
  95. package/dist/components/Overall/project.mjs.map +1 -1
  96. package/dist/components/Overall/project_module.css +8 -0
  97. package/dist/components/Overall/project_module.css.map +1 -1
  98. package/dist/components/base/CodeViewer/index.d.ts +1 -1
  99. package/dist/components/base/CodeViewer/index.mjs +5 -3
  100. package/dist/components/base/CodeViewer/index.mjs.map +1 -1
  101. package/dist/components/base/CodeViewer/interface.d.ts +1 -2
  102. package/dist/components/base/DiffViewer/index.d.ts +1 -1
  103. package/dist/components/base/DiffViewer/index.mjs +4 -1
  104. package/dist/components/base/DiffViewer/index.mjs.map +1 -1
  105. package/dist/components/base/DiffViewer/interface.d.ts +1 -2
  106. package/dist/pages/BundleSize/components/asset_module.css +7 -5
  107. package/dist/pages/BundleSize/components/asset_module.css.map +1 -1
  108. package/dist/pages/BundleSize/components/card_module.css +9 -3
  109. package/dist/pages/BundleSize/components/card_module.css.map +1 -1
  110. package/dist/pages/BundleSize/components/cards.mjs +5 -6
  111. package/dist/pages/BundleSize/components/cards.mjs.map +1 -1
  112. package/dist/pages/BundleSize/components/index.mjs +11 -8
  113. package/dist/pages/BundleSize/components/index.mjs.map +1 -1
  114. package/dist/pages/BundleSize/components/index.module.mjs +1 -6
  115. package/dist/pages/BundleSize/components/index.module.mjs.map +1 -1
  116. package/dist/pages/BundleSize/components/index_module.css +0 -37
  117. package/dist/pages/BundleSize/components/index_module.css.map +1 -1
  118. package/dist/pages/BundleSize/components/search-modal.mjs +5 -5
  119. package/dist/pages/BundleSize/components/search-modal.mjs.map +1 -1
  120. package/dist/pages/BundleSize/components/search-modal.module.mjs +10 -0
  121. package/dist/pages/BundleSize/components/search-modal.module.mjs.map +1 -0
  122. package/dist/pages/BundleSize/components/search-modal_module.css +39 -0
  123. package/dist/pages/BundleSize/components/search-modal_module.css.map +1 -0
  124. package/dist/pages/BundleSize/components/tree-graph.mjs +4 -4
  125. package/dist/pages/BundleSize/components/tree-graph.mjs.map +1 -1
  126. package/dist/pages/ModuleAnalyze/components/fileTreeCom.css +6 -2
  127. package/dist/pages/ModuleAnalyze/components/fileTreeCom.css.map +1 -1
  128. package/dist/pages/ModuleAnalyze/index.css +4 -6
  129. package/dist/pages/ModuleAnalyze/index.css.map +1 -1
  130. package/dist/pages/ModuleAnalyze/index.mjs +3 -4
  131. package/dist/pages/ModuleAnalyze/index.mjs.map +1 -1
  132. package/dist/pages/Overall/index.mjs +5 -13
  133. package/dist/pages/Overall/index.mjs.map +1 -1
  134. package/dist/pages/Overall/index.module.mjs +3 -0
  135. package/dist/pages/Overall/index.module.mjs.map +1 -1
  136. package/dist/pages/Overall/index_module.css +35 -2
  137. package/dist/pages/Overall/index_module.css.map +1 -1
  138. package/dist/pages/Overall/responsiveLayout.mjs +3 -3
  139. package/dist/pages/Overall/responsiveLayout.mjs.map +1 -1
  140. package/dist/pages/WebpackLoaders/Analysis/index.mjs +3 -3
  141. package/dist/pages/WebpackLoaders/Analysis/index.mjs.map +1 -1
  142. package/dist/pages/WebpackLoaders/Overall/index.mjs +1 -1
  143. package/dist/pages/WebpackLoaders/Overall/index.mjs.map +1 -1
  144. package/dist/static/image/rsdoctor-title-logo-dark.png +0 -0
  145. package/dist/utils/hooks.d.ts +1 -0
  146. package/dist/utils/hooks.mjs +6 -1
  147. package/dist/utils/hooks.mjs.map +1 -1
  148. package/package.json +4 -4
@@ -7,13 +7,14 @@ import { TitleComponent, TooltipComponent } from "echarts/components";
7
7
  import { CanvasRenderer } from "echarts/renderers";
8
8
  import { Alert, Checkbox, Input, Radio } from "antd";
9
9
  import { FullscreenExitOutlined, FullscreenOutlined, LeftOutlined, RightOutlined, SearchOutlined } from "@ant-design/icons";
10
- import { formatSize } from "../../utils/index.mjs";
10
+ import { formatSize, useThemeToken } from "../../utils/index.mjs";
11
11
  import { SDK } from "@rsdoctor/types";
12
12
  import { ServerAPIProvider } from "../Manifest/index.mjs";
13
13
  import { ModuleAnalyzeComponent } from "../../pages/ModuleAnalyze/index.mjs";
14
14
  import treemap_module from "./treemap.module.mjs";
15
15
  import { TREE_COLORS } from "./constants.mjs";
16
16
  import { isJavaScriptAsset } from "../../utils/assets.mjs";
17
+ import { calculateTreeNodeTotalSize, calculateTreeNodesTotalSize } from "./treeMapSize.mjs";
17
18
  __rspack_external_echarts_core_d2845954.use([
18
19
  TreemapChart,
19
20
  TooltipComponent,
@@ -48,13 +49,13 @@ function getLuminance(hex) {
48
49
  function isDarkColor(hex) {
49
50
  return getLuminance(hex) < 0.4;
50
51
  }
51
- function getLevelOption() {
52
+ function getLevelOption(gapColor) {
52
53
  return [
53
54
  {
54
55
  itemStyle: {
55
56
  borderWidth: 0,
56
57
  gapWidth: 4,
57
- gapColor: '#ffffff'
58
+ gapColor
58
59
  }
59
60
  },
60
61
  {
@@ -65,7 +66,7 @@ function getLevelOption() {
65
66
  ],
66
67
  borderWidth: 5,
67
68
  gapWidth: 4,
68
- gapColor: '#ffffff'
69
+ gapColor
69
70
  },
70
71
  upperLabel: {
71
72
  show: true,
@@ -76,11 +77,12 @@ function getLevelOption() {
76
77
  }
77
78
  ];
78
79
  }
79
- const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, highlightNodeId, centerNodeId, rootPath })=>{
80
+ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, onChartClick, highlightNodeId, centerNodeId, rootPath })=>{
80
81
  const [option, setOption] = useState(null);
81
82
  const chartRef = react.useRef(null);
82
83
  const chartDataRef = react.useRef([]);
83
84
  const clickTimeoutRef = react.useRef(null);
85
+ const themeToken = useThemeToken();
84
86
  useEffect(()=>{
85
87
  if (!treeData) return;
86
88
  function convert(node, index = 0, level = 0, parentColor, siblingIndex = 0, siblingCount = 1, chunkPath) {
@@ -153,15 +155,16 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
153
155
  }
154
156
  const data = treeData.map((item, index)=>convert(item, index, 0, void 0, index, treeData.length, void 0)).filter((item)=>('number' == typeof item.value ? item.value > 0 : false) || item.children && item.children.length > 0);
155
157
  chartDataRef.current = data;
158
+ const textColor = themeToken.colorText;
156
159
  setOption({
157
160
  color: TREE_COLORS,
158
161
  tooltip: {
159
162
  padding: 10,
160
- backgroundColor: '#fff',
161
- borderColor: '#eee',
163
+ backgroundColor: themeToken.colorBgElevated,
164
+ borderColor: themeToken.colorBorder,
162
165
  borderWidth: 1,
163
166
  textStyle: {
164
- color: 'rgba(0, 0, 0, 0.8)'
167
+ color: textColor
165
168
  },
166
169
  confine: true,
167
170
  extraCssText: 'max-width: 450px; word-wrap: break-word;',
@@ -192,12 +195,12 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
192
195
  </div>`;
193
196
  }
194
197
  const rows = [];
195
- if (void 0 !== sourceSize && sourceSize > 0) rows.push(makeRow('Stat size', formatSize(sourceSize), '#52c41a'));
196
- if (void 0 !== bundledSize && bundledSize > 0) rows.push(makeRow('Parsed size', formatSize(bundledSize), '#d96420'));
197
- if (void 0 !== gzipSize && gzipSize > 0) rows.push(makeRow('Gzipped size', formatSize(gzipSize), '#1677ff'));
198
+ if (void 0 !== sourceSize && sourceSize > 0) rows.push(makeRow('Stat size', formatSize(sourceSize), '#43c6d9'));
199
+ if (void 0 !== bundledSize && bundledSize > 0) rows.push(makeRow('Parsed size', formatSize(bundledSize), '#5b8ff9'));
200
+ if (void 0 !== gzipSize && gzipSize > 0) rows.push(makeRow('Gzipped size', formatSize(gzipSize), '#f2b84b'));
198
201
  return `
199
202
  <div style="font-family: sans-serif; font-size: 12px; line-height: 1.5;">
200
- <div style="margin-bottom: 6px; max-width: 400px; word-wrap: break-word; overflow-wrap: break-word; word-break: break-all; white-space: normal; color: rgba(0, 0, 0, 0.8);">${__rspack_external_echarts_core_d2845954.format.encodeHTML(path)}</div>
203
+ <div style="margin-bottom: 6px; max-width: 400px; word-wrap: break-word; overflow-wrap: break-word; word-break: break-all; white-space: normal; color: ${textColor};">${__rspack_external_echarts_core_d2845954.format.encodeHTML(path)}</div>
201
204
  ${rows.join('')}
202
205
  </div>
203
206
  `;
@@ -206,9 +209,6 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
206
209
  series: [
207
210
  {
208
211
  type: 'treemap',
209
- itemStyle: {
210
- gapColor: '#ffffff'
211
- },
212
212
  label: {
213
213
  show: true,
214
214
  formatter: '{b}',
@@ -235,7 +235,7 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
235
235
  4
236
236
  ]
237
237
  },
238
- levels: getLevelOption(),
238
+ levels: getLevelOption(themeToken.colorBgContainer),
239
239
  data: data,
240
240
  breadcrumb: {
241
241
  show: true,
@@ -247,17 +247,17 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
247
247
  color: '#999',
248
248
  borderColor: 'transparent',
249
249
  borderWidth: 0,
250
- borderRadius: 0
250
+ borderRadius: 0,
251
+ textStyle: {
252
+ fontFamily: 'sans-serif',
253
+ fontSize: 12,
254
+ color: 'white'
255
+ }
251
256
  },
252
257
  emphasis: {
253
258
  itemStyle: {
254
259
  color: '#333'
255
260
  }
256
- },
257
- textStyle: {
258
- fontFamily: 'sans-serif',
259
- fontSize: 12,
260
- color: '#666'
261
261
  }
262
262
  },
263
263
  roam: true,
@@ -270,7 +270,7 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
270
270
  bottom: 30,
271
271
  left: 0,
272
272
  right: 0,
273
- zoomLimit: {
273
+ scaleLimit: {
274
274
  min: 0.5,
275
275
  max: 5
276
276
  }
@@ -281,7 +281,8 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
281
281
  treeData,
282
282
  sizeType,
283
283
  highlightNodeId,
284
- rootPath
284
+ rootPath,
285
+ themeToken
285
286
  ]);
286
287
  useEffect(()=>{
287
288
  if (centerNodeId && chartRef.current && option) {
@@ -359,7 +360,6 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
359
360
  }, []);
360
361
  return option ? /*#__PURE__*/ jsxs("div", {
361
362
  className: treemap_module["chart-container"],
362
- style: style,
363
363
  children: [
364
364
  /*#__PURE__*/ jsx(Alert, {
365
365
  message: "If parsed size lacks detailed module information, you can enable sourceMap when RSDOCTOR = true. This is because Rsdoctor relies on SourceMap to obtain Parsed Size. Rspack provides SourceMap information to Rsdoctor by default without affecting the build output.",
@@ -369,37 +369,42 @@ const TreeMap = /*#__PURE__*/ memo(({ treeData, sizeType, style, onChartClick, h
369
369
  marginBottom: 0
370
370
  }
371
371
  }),
372
- /*#__PURE__*/ jsx(core, {
373
- ref: chartRef,
374
- option: option,
375
- echarts: __rspack_external_echarts_core_d2845954,
376
- onEvents: {
377
- click: (params)=>{
378
- if (clickTimeoutRef.current) window.clearTimeout(clickTimeoutRef.current);
379
- clickTimeoutRef.current = window.setTimeout(()=>{
380
- if (chartRef.current) {
381
- const instance = chartRef.current.getEchartsInstance();
382
- const data = params?.data;
383
- if (instance && data?.id !== void 0) instance.dispatchAction({
384
- type: 'treemapZoomToNode',
385
- seriesIndex: 0,
386
- targetNodeId: String(data.id)
387
- });
372
+ /*#__PURE__*/ jsx("div", {
373
+ style: {
374
+ flex: 1
375
+ },
376
+ children: /*#__PURE__*/ jsx(core, {
377
+ ref: chartRef,
378
+ option: option,
379
+ echarts: __rspack_external_echarts_core_d2845954,
380
+ onEvents: {
381
+ click: (params)=>{
382
+ if (clickTimeoutRef.current) window.clearTimeout(clickTimeoutRef.current);
383
+ clickTimeoutRef.current = window.setTimeout(()=>{
384
+ if (chartRef.current) {
385
+ const instance = chartRef.current.getEchartsInstance();
386
+ const data = params?.data;
387
+ if (instance && data?.id !== void 0) instance.dispatchAction({
388
+ type: 'treemapZoomToNode',
389
+ seriesIndex: 0,
390
+ targetNodeId: String(data.id)
391
+ });
392
+ }
393
+ }, 180);
394
+ },
395
+ dblclick: (params)=>{
396
+ if (clickTimeoutRef.current) {
397
+ window.clearTimeout(clickTimeoutRef.current);
398
+ clickTimeoutRef.current = null;
388
399
  }
389
- }, 180);
390
- },
391
- dblclick: (params)=>{
392
- if (clickTimeoutRef.current) {
393
- window.clearTimeout(clickTimeoutRef.current);
394
- clickTimeoutRef.current = null;
400
+ onChartClick?.(params);
395
401
  }
396
- onChartClick?.(params);
402
+ },
403
+ style: {
404
+ width: '100%',
405
+ height: '100%'
397
406
  }
398
- },
399
- style: {
400
- width: '100%',
401
- height: '100%'
402
- }
407
+ })
403
408
  })
404
409
  ]
405
410
  }) : null;
@@ -459,42 +464,37 @@ const AssetTreemapWithFilterInner = ({ treeData, onChartClick, bundledSize = tru
459
464
  }, [
460
465
  onChartClick
461
466
  ]);
462
- const enterFullscreen = useCallback(()=>{
463
- if (containerRef.current) {
464
- const el = containerRef.current;
465
- if (el.requestFullscreen) el.requestFullscreen().then(()=>setIsFullscreen(true)).catch((err)=>console.error('Failed to enter fullscreen:', err));
466
- else if (el.webkitRequestFullscreen) try {
467
- el.webkitRequestFullscreen();
468
- setIsFullscreen(true);
469
- } catch (err) {
470
- console.error('Failed to enter fullscreen (webkit):', err);
471
- }
472
- else if (el.mozRequestFullScreen) try {
473
- el.mozRequestFullScreen();
474
- setIsFullscreen(true);
475
- } catch (err) {
476
- console.error('Failed to enter fullscreen (moz):', err);
477
- }
478
- else if (el.msRequestFullscreen) try {
479
- el.msRequestFullscreen();
480
- setIsFullscreen(true);
481
- } catch (err) {
482
- console.error('Failed to enter fullscreen (ms):', err);
483
- }
484
- else console.error('Fullscreen API is not supported in this browser.');
467
+ const enterFullscreen = ()=>{
468
+ if (!containerRef.current) return;
469
+ const el = containerRef.current;
470
+ if (el.requestFullscreen) el.requestFullscreen().then(()=>setIsFullscreen(true)).catch((err)=>console.error('Failed to enter fullscreen:', err));
471
+ else if (el.webkitRequestFullscreen) try {
472
+ el.webkitRequestFullscreen();
473
+ setIsFullscreen(true);
474
+ } catch (err) {
475
+ console.error('Failed to enter fullscreen (webkit):', err);
485
476
  }
486
- }, []);
487
- const exitFullscreen = useCallback(()=>{
477
+ else if (el.mozRequestFullScreen) try {
478
+ el.mozRequestFullScreen();
479
+ setIsFullscreen(true);
480
+ } catch (err) {
481
+ console.error('Failed to enter fullscreen (moz):', err);
482
+ }
483
+ else if (el.msRequestFullscreen) try {
484
+ el.msRequestFullscreen();
485
+ setIsFullscreen(true);
486
+ } catch (err) {
487
+ console.error('Failed to enter fullscreen (ms):', err);
488
+ }
489
+ else console.error('Fullscreen API is not supported in this browser.');
490
+ };
491
+ const exitFullscreen = ()=>{
488
492
  document.exitFullscreen().then(()=>setIsFullscreen(false)).catch((err)=>console.error('Failed to exit fullscreen:', err));
489
- }, []);
490
- const toggleFullscreen = useCallback(()=>{
493
+ };
494
+ const toggleFullscreen = ()=>{
491
495
  if (isFullscreen) exitFullscreen();
492
496
  else enterFullscreen();
493
- }, [
494
- isFullscreen,
495
- enterFullscreen,
496
- exitFullscreen
497
- ]);
497
+ };
498
498
  useEffect(()=>{
499
499
  const handleFullscreenChange = ()=>{
500
500
  setIsFullscreen(!!document.fullscreenElement);
@@ -539,47 +539,27 @@ const AssetTreemapWithFilterInner = ({ treeData, onChartClick, bundledSize = tru
539
539
  filteredTreeData,
540
540
  searchQuery
541
541
  ]);
542
- const handleSearchResultClick = useCallback((nodeId)=>{
542
+ const handleSearchResultClick = (nodeId)=>{
543
543
  setHighlightNodeId(nodeId);
544
544
  setCenterNodeId(nodeId);
545
- }, []);
546
- const removeRootPath = useCallback((filepath)=>{
545
+ };
546
+ const removeRootPath = (filepath)=>{
547
547
  if (!rootPath || !filepath) return filepath;
548
548
  const normalizedRoot = rootPath.replace(/\\/g, '/').replace(/\/$/, '');
549
549
  const normalizedPath = filepath.replace(/\\/g, '/');
550
550
  if (normalizedPath.startsWith(normalizedRoot + '/')) return normalizedPath.slice(normalizedRoot.length + 1);
551
551
  if (normalizedPath === normalizedRoot) return '';
552
552
  return filepath;
553
- }, [
554
- rootPath
555
- ]);
556
- const getSize = useCallback((node, type)=>{
557
- if ('stat' === type) return node.sourceSize || 0;
558
- if ('parsed' === type) return node.bundledSize || 0;
559
- if ('gzip' === type) return node.gzipSize || 0;
560
- if ('value' === type) return node.value || 0;
561
- if (node.value) return node.value;
562
- return 0;
563
- }, []);
564
- const calculateNodeTotalSize = useCallback((node, type)=>{
565
- let size = getSize(node, type);
566
- if (node.children && node.children.length > 0) {
567
- const childrenSize = node.children.reduce((sum, child)=>sum + calculateNodeTotalSize(child, type), 0);
568
- if (0 === size || !node.path && childrenSize > 0) size = childrenSize;
569
- }
570
- return size;
571
- }, [
572
- getSize
573
- ]);
574
- const getChunkSize = useCallback((name, type)=>{
553
+ };
554
+ const getChunkSize = (name, type)=>{
575
555
  const node = treeData.find((n)=>n.name === name);
576
556
  if (!node) return 0;
577
557
  const sizeTypeToUse = type || sizeType;
578
- return calculateNodeTotalSize(node, sizeTypeToUse);
579
- }, [
580
- treeData,
581
- sizeType,
582
- calculateNodeTotalSize
558
+ return calculateTreeNodeTotalSize(node, sizeTypeToUse);
559
+ };
560
+ const allAssetsSize = useMemo(()=>calculateTreeNodesTotalSize(filteredTreeData, sizeType), [
561
+ filteredTreeData,
562
+ sizeType
583
563
  ]);
584
564
  return /*#__PURE__*/ jsxs("div", {
585
565
  className: treemap_module.treemap,
@@ -650,12 +630,21 @@ const AssetTreemapWithFilterInner = ({ treeData, onChartClick, bundledSize = tru
650
630
  marginBottom: 8
651
631
  }
652
632
  }),
653
- /*#__PURE__*/ jsx(Checkbox, {
654
- indeterminate: checkedAssets.length > 0 && checkedAssets.length < visibleAssetNames.length,
655
- checked: visibleAssetNames.length > 0 && checkedAssets.length === visibleAssetNames.length,
656
- onChange: (e)=>setCheckedAssets(e.target.checked ? visibleAssetNames : []),
657
- className: treemap_module["all-none-checkbox"],
658
- children: "All"
633
+ /*#__PURE__*/ jsxs("div", {
634
+ className: treemap_module["chunk-item"],
635
+ children: [
636
+ /*#__PURE__*/ jsx(Checkbox, {
637
+ indeterminate: checkedAssets.length > 0 && checkedAssets.length < visibleAssetNames.length,
638
+ checked: visibleAssetNames.length > 0 && checkedAssets.length === visibleAssetNames.length,
639
+ onChange: (e)=>setCheckedAssets(e.target.checked ? visibleAssetNames : []),
640
+ className: treemap_module["all-none-checkbox"],
641
+ children: "All"
642
+ }),
643
+ /*#__PURE__*/ jsx("span", {
644
+ className: treemap_module["size-tag"],
645
+ children: formatSize(allAssetsSize)
646
+ })
647
+ ]
659
648
  }),
660
649
  /*#__PURE__*/ jsx(Checkbox, {
661
650
  checked: showOnlyJavaScriptAssets,
@@ -770,11 +759,7 @@ const AssetTreemapWithFilterInner = ({ treeData, onChartClick, bundledSize = tru
770
759
  onChartClick: handleChartClick,
771
760
  highlightNodeId: highlightNodeId,
772
761
  centerNodeId: centerNodeId,
773
- rootPath: rootPath,
774
- style: {
775
- width: '100%',
776
- height: '100%'
777
- }
762
+ rootPath: rootPath
778
763
  }),
779
764
  moduleId ? /*#__PURE__*/ jsx(ServerAPIProvider, {
780
765
  api: SDK.ServerAPI.API.GetAllModuleGraph,