@rsdoctor/components 1.3.13-beta.0 → 1.3.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"components/Charts/TreeMap.mjs","sources":["../../../src/components/Charts/TreeMap.tsx"],"sourcesContent":["import React, { useEffect, useState, memo, useMemo, useCallback } from 'react';\nimport EChartsReactCore from 'echarts-for-react/esm/core';\nimport * as echarts from 'echarts/core';\nimport { TreemapChart } from 'echarts/charts';\nimport { TooltipComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { BUNDLE_ANALYZER_COLORS, COLOR_GROUPS } from './constants';\nimport { Checkbox, Radio, Input } from 'antd';\nimport {\n LeftOutlined,\n RightOutlined,\n SearchOutlined,\n FullscreenOutlined,\n FullscreenExitOutlined,\n} from '@ant-design/icons';\nimport { formatSize } from 'src/utils';\nimport { SDK } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport Styles from './treemap.module.scss';\n\necharts.use([TreemapChart, TooltipComponent, CanvasRenderer]);\n\nexport type TreeNode = {\n name: string;\n value?: number;\n children?: TreeNode[];\n path?: string;\n sourceSize?: number;\n bundledSize?: number;\n gzipSize?: number;\n};\n\nexport type SizeType = 'stat' | 'parsed' | 'gzip' | 'value';\n\ninterface TreeMapProps {\n treeData: TreeNode[];\n sizeType: SizeType;\n style?: React.CSSProperties;\n onChartClick?: (params: any) => void;\n highlightNodeId?: number;\n centerNodeId?: number;\n rootPath?: string;\n}\n\nfunction hashString(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) + hash + str.charCodeAt(i);\n }\n return hash >>> 0;\n}\n\nfunction getLevelOption() {\n return [\n {\n itemStyle: {\n gapWidth: 3,\n borderColor: '#eee',\n },\n upperLabel: {\n show: false,\n },\n },\n {\n itemStyle: {\n borderWidth: 5,\n gapWidth: 2,\n },\n },\n {\n colorSaturation: [0.3, 0.9],\n itemStyle: {\n borderWidth: 5,\n gapWidth: 2,\n borderColorSaturation: 0.6,\n borderColor: '#eee',\n },\n },\n ];\n}\n\nconst TreeMapInner: React.FC<TreeMapProps & { forwardedRef?: React.Ref<any> }> =\n memo(\n ({\n treeData,\n sizeType,\n style,\n onChartClick,\n forwardedRef,\n highlightNodeId,\n centerNodeId,\n rootPath,\n }) => {\n const [option, setOption] = useState<any>(null);\n const chartRef = React.useRef<any>(null);\n const chartDataRef = React.useRef<any[]>([]);\n\n useEffect(() => {\n if (forwardedRef && chartRef.current) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(chartRef.current);\n } else {\n (forwardedRef as React.MutableRefObject<any>).current =\n chartRef.current;\n }\n }\n }, [forwardedRef, chartRef.current]);\n useEffect(() => {\n if (!treeData) return;\n function convert(\n node: TreeNode,\n colorGroup: keyof typeof BUNDLE_ANALYZER_COLORS,\n level = 0,\n ): any {\n const groupColors = BUNDLE_ANALYZER_COLORS[colorGroup];\n const _level = level;\n const children = node.children?.map((c) =>\n convert(c, colorGroup, _level + 1),\n );\n\n let val = 0;\n if (sizeType === 'stat') val = node.sourceSize || 0;\n else if (sizeType === 'parsed') val = node.bundledSize || 0;\n else if (sizeType === 'gzip') val = node.gzipSize || 0;\n else if (sizeType === 'value') val = node.value || 0;\n\n if (!val && node.value) val = node.value;\n\n const nodeId = node.path\n ? hashString(node.path)\n : hashString(node.name || '');\n const isHighlighted = highlightNodeId === nodeId;\n console.log(\n (level % groupColors.length) - 1,\n groupColors,\n colorGroup,\n );\n const result: any = {\n id: nodeId,\n name: node.name,\n value: val,\n path: node.path || node.name,\n sourceSize: node.sourceSize ?? (sizeType === 'stat' ? val : 0),\n bundledSize: node.bundledSize ?? (sizeType === 'parsed' ? val : 0),\n gzipSize: node.gzipSize ?? (sizeType === 'gzip' ? val : 0),\n itemStyle: {\n borderWidth: isHighlighted ? 4 : 1,\n gapWidth: 2,\n color: isHighlighted\n ? '#fff5f5'\n : groupColors[(level % groupColors.length) - 1],\n borderColor: isHighlighted\n ? '#ff4d4f'\n : groupColors[(level % groupColors.length) - 1],\n borderColorSaturation: isHighlighted ? 1 : 0.5,\n },\n };\n\n if (children && children.length > 0) {\n result.children = children;\n }\n\n if (isHighlighted) {\n result.emphasis = {\n itemStyle: {\n borderColor: '#ff4d4f',\n borderWidth: 4,\n color: '#fff5f5',\n },\n };\n }\n\n return result;\n }\n\n const data = treeData\n .map((item, index) => {\n const group = COLOR_GROUPS[index % COLOR_GROUPS.length];\n return convert(item, group, 1);\n })\n .filter(\n (item) =>\n item.value > 0 || (item.children && item.children.length > 0),\n );\n\n chartDataRef.current = data;\n\n setOption({\n title: {\n text: 'Rsdoctor TreeMap',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n color: 'rgba(0, 0, 0, 0.8)',\n },\n },\n tooltip: {\n padding: 10,\n backgroundColor: '#fff',\n borderColor: '#eee',\n borderWidth: 1,\n textStyle: {\n color: 'rgba(0, 0, 0, 0.8)',\n },\n confine: true,\n extraCssText: 'max-width: 450px; word-wrap: break-word;',\n position: function (\n pos: any,\n _params: any,\n _dom: any,\n _rect: any,\n size: any,\n ) {\n var obj = { top: pos[1] + 10 };\n if (pos[0] < size.viewSize[0] / 2) {\n (obj as any).left = pos[0] + 10;\n } else {\n (obj as any).right = size.viewSize[0] - pos[0] + 10;\n }\n return obj;\n },\n formatter: function (info: any) {\n const node = info.data || {};\n const name = node.name;\n let path = node.path || name;\n\n // Remove root path prefix if rootPath is provided\n if (rootPath && path) {\n const normalizedRoot = rootPath\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedPath = path.replace(/\\\\/g, '/');\n if (normalizedPath.startsWith(normalizedRoot + '/')) {\n path = normalizedPath.slice(normalizedRoot.length + 1);\n } else if (normalizedPath === normalizedRoot) {\n path = '';\n }\n }\n\n const sourceSize = node.sourceSize || node.value;\n const bundledSize = node.bundledSize;\n const gzipSize = node.gzipSize;\n\n function makeRow(label: string, value: string, color: string) {\n return `<div class=\"${Styles['tooltip-row']}\">\n <span class=\"${Styles['tooltip-label']}\" style=\"color: ${color};\">${label}</span>\n <span style=\"color: ${color};\">${value}</span>\n </div>`;\n }\n\n const rows = [];\n if (sourceSize !== undefined) {\n rows.push(\n makeRow('Stat size', formatSize(sourceSize), '#52c41a'),\n ); // Green\n }\n if (bundledSize !== undefined) {\n rows.push(\n makeRow('Parsed size', formatSize(bundledSize), '#fadb14'),\n ); // Yellow\n }\n if (gzipSize !== undefined) {\n rows.push(\n makeRow('Gzipped size', formatSize(gzipSize), '#1677ff'),\n ); // Blue\n }\n\n return `\n <div style=\"font-family: sans-serif; font-size: 12px; line-height: 1.5;\">\n <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);\">${echarts.format.encodeHTML(path)}</div>\n ${rows.join('')}\n </div>\n `;\n },\n },\n series: [\n {\n type: 'treemap',\n label: {\n show: true,\n formatter: '{b}',\n fontSize: 12,\n color: '#000',\n position: 'inside',\n fontWeight: 'normal',\n textBorderColor: '#fff',\n textBorderWidth: 2,\n padding: [4, 8, 4, 8],\n },\n upperLabel: {\n show: true,\n height: 30,\n color: '#000',\n fontSize: 12,\n fontWeight: 'normal',\n padding: [0, 0, 0, 4],\n },\n itemStyle: {\n borderColor: '#fff',\n },\n levels: getLevelOption(),\n data: data,\n breadcrumb: {\n show: true,\n left: 'center',\n top: 'bottom',\n height: 22,\n emptyItemWidth: 25,\n itemStyle: {\n color: '#999',\n borderColor: 'transparent',\n borderWidth: 0,\n borderRadius: 0,\n },\n emphasis: {\n itemStyle: {\n color: '#333',\n },\n },\n textStyle: {\n fontFamily: 'sans-serif',\n fontSize: 12,\n color: '#666',\n },\n },\n roam: true,\n nodeClick: false,\n zoomToNodeRatio: 0.5,\n animationDurationUpdate: 500,\n width: '100%',\n height: '100%',\n top: 40,\n bottom: 30,\n left: 0,\n right: 0,\n },\n ],\n });\n }, [treeData, sizeType, highlightNodeId, rootPath]);\n\n useEffect(() => {\n if (centerNodeId && chartRef.current && option) {\n const chartInstance = chartRef.current.getEchartsInstance();\n if (chartInstance) {\n const findNodeInfo = (\n data: any[],\n targetId: number,\n path: string[] = [],\n ): { name: string; path: string[] } | null => {\n for (const item of data) {\n const currentPath = [...path, item.name];\n if (item.id === targetId) {\n return { name: item.name, path: currentPath };\n }\n if (item.children) {\n const found = findNodeInfo(\n item.children,\n targetId,\n currentPath,\n );\n if (found) return found;\n }\n }\n return null;\n };\n\n setTimeout(() => {\n const nodeInfo = findNodeInfo(chartDataRef.current, centerNodeId);\n if (!nodeInfo) return;\n\n try {\n chartInstance.dispatchAction({\n type: 'highlight',\n seriesIndex: 0,\n name: nodeInfo.name,\n });\n } catch (e) {}\n\n const zoomStrategies: Array<() => void> = [\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n targetNodeId: String(centerNodeId),\n }),\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeInfo.name,\n }),\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeInfo.path.join('/'),\n }),\n () =>\n nodeInfo.path.length > 0 &&\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeInfo.path[nodeInfo.path.length - 1],\n }),\n ];\n\n for (const strategy of zoomStrategies) {\n try {\n strategy();\n return;\n } catch (e) {\n console.error(\n 'Failed to zoom to node with id:',\n centerNodeId,\n e,\n );\n }\n }\n\n console.warn('Failed to zoom to node with id:', centerNodeId);\n }, 200);\n }\n }\n }, [centerNodeId, option]);\n\n return option ? (\n <div className={Styles['chart-container']} style={style}>\n <EChartsReactCore\n ref={chartRef}\n option={option}\n echarts={echarts}\n onEvents={{\n click: (params: any) => {\n if (chartRef.current) {\n const instance = chartRef.current.getEchartsInstance();\n if (instance && params?.data?.id) {\n instance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n targetNodeId: String(params.data.id),\n });\n }\n }\n onChartClick?.(params);\n },\n }}\n style={{\n width: '100%',\n height: '100%',\n }}\n />\n </div>\n ) : null;\n },\n );\n\nexport const TreeMap = React.forwardRef<any, TreeMapProps>((props, ref) => (\n <TreeMapInner {...props} forwardedRef={ref} />\n));\n\nexport const AssetTreemapWithFilter: React.FC<{\n treeData: TreeNode[];\n onChartClick?: (params: any) => void;\n bundledSize?: boolean;\n}> = ({ treeData, onChartClick, bundledSize = true }) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetProjectInfo}>\n {(projectInfo) => {\n return (\n <AssetTreemapWithFilterInner\n treeData={treeData}\n onChartClick={onChartClick}\n bundledSize={bundledSize}\n rootPath={projectInfo.root}\n />\n );\n }}\n </ServerAPIProvider>\n );\n};\n\nconst AssetTreemapWithFilterInner: React.FC<{\n treeData: TreeNode[];\n onChartClick?: (params: any) => void;\n bundledSize?: boolean;\n rootPath: string;\n}> = ({ treeData, onChartClick, bundledSize = true, rootPath }) => {\n const assetNames = useMemo(\n () => treeData.map((item) => item.name),\n [treeData],\n );\n\n const [checkedAssets, setCheckedAssets] = useState<string[]>(assetNames);\n const [collapsed, setCollapsed] = useState(false);\n const [sizeType, setSizeType] = useState<SizeType>(\n bundledSize ? 'parsed' : 'stat',\n );\n const [searchQuery, setSearchQuery] = useState('');\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [highlightNodeId, setHighlightNodeId] = useState<number | undefined>();\n const [centerNodeId, setCenterNodeId] = useState<number | undefined>();\n\n const chartRef = React.useRef<any>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const enterFullscreen = useCallback(() => {\n if (containerRef.current) {\n containerRef.current\n .requestFullscreen()\n .then(() => setIsFullscreen(true))\n .catch((err) => console.error('Failed to enter fullscreen:', err));\n }\n }, []);\n\n const exitFullscreen = useCallback(() => {\n document\n .exitFullscreen()\n .then(() => setIsFullscreen(false))\n .catch((err) => console.error('Failed to exit fullscreen:', err));\n }, []);\n\n const toggleFullscreen = useCallback(() => {\n if (isFullscreen) {\n exitFullscreen();\n } else {\n enterFullscreen();\n }\n }, [isFullscreen, enterFullscreen, exitFullscreen]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange);\n };\n }, []);\n\n const searchResults = useMemo(() => {\n if (!searchQuery.trim()) return [];\n\n const regex = new RegExp(searchQuery, 'i');\n const results: Array<{ path: string; nodeId: number }> = [];\n\n const collectMatchingPaths = (node: TreeNode) => {\n if (node.path && regex.test(node.path)) {\n const nodeId = hashString(node.path);\n results.push({ path: node.path, nodeId });\n }\n if (node.children) {\n node.children.forEach(collectMatchingPaths);\n }\n };\n\n treeData.forEach(collectMatchingPaths);\n return results;\n }, [treeData, searchQuery]);\n\n const filteredTreeData = useMemo(() => {\n let filtered = treeData.filter((item) => checkedAssets.includes(item.name));\n\n return filtered;\n }, [treeData, checkedAssets]);\n\n const handleSearchResultClick = useCallback((nodeId: number) => {\n setHighlightNodeId(nodeId);\n setCenterNodeId(nodeId);\n }, []);\n\n const removeRootPath = useCallback(\n (filepath: string): string => {\n if (!rootPath || !filepath) return filepath;\n const normalizedRoot = rootPath.replace(/\\\\/g, '/').replace(/\\/$/, '');\n const normalizedPath = filepath.replace(/\\\\/g, '/');\n\n if (normalizedPath.startsWith(normalizedRoot + '/')) {\n return normalizedPath.slice(normalizedRoot.length + 1);\n } else if (normalizedPath === normalizedRoot) {\n return '';\n }\n return filepath;\n },\n [rootPath],\n );\n\n const getSize = useCallback((node: TreeNode, type?: SizeType) => {\n if (type === 'stat') return node.sourceSize || 0;\n if (type === 'parsed') return node.bundledSize || 0;\n if (type === 'gzip') return node.gzipSize || 0;\n if (type === 'value') return node.value || 0;\n if (node.value) return node.value;\n return 0;\n }, []);\n\n const calculateNodeTotalSize = useCallback(\n (node: TreeNode, type: SizeType): number => {\n let size = getSize(node, type);\n\n if (node.children && node.children.length > 0) {\n const childrenSize = node.children.reduce(\n (sum, child) => sum + calculateNodeTotalSize(child, type),\n 0,\n );\n if (size === 0 || (!node.path && childrenSize > 0)) {\n size = childrenSize;\n }\n }\n\n return size;\n },\n [getSize],\n );\n\n const getChunkSize = useCallback(\n (name: string, type?: SizeType) => {\n const node = treeData.find((n) => n.name === name);\n if (!node) return 0;\n const sizeTypeToUse = type || sizeType;\n return calculateNodeTotalSize(node, sizeTypeToUse);\n },\n [treeData, sizeType, calculateNodeTotalSize],\n );\n\n return (\n <div className={Styles.treemap} ref={containerRef}>\n <button\n className={Styles['fullscreen-button']}\n onClick={toggleFullscreen}\n title={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n >\n {isFullscreen ? <FullscreenExitOutlined /> : <FullscreenOutlined />}\n </button>\n\n <div className={`${Styles.sidebar} ${collapsed ? Styles.collapsed : ''}`}>\n <div\n className={`${Styles['sidebar-toggle']} ${collapsed ? Styles.collapsed : ''}`}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <RightOutlined /> : <LeftOutlined />}\n </div>\n <div className={Styles['sidebar-content']}>\n <div>\n <h4>Treemap sizes</h4>\n <Radio.Group\n value={sizeType}\n onChange={(e) => setSizeType(e.target.value)}\n size=\"small\"\n buttonStyle=\"solid\"\n >\n <Radio.Button value=\"stat\">Stat</Radio.Button>\n <Radio.Button value=\"parsed\">Parsed</Radio.Button>\n <Radio.Button value=\"gzip\">Gzipped</Radio.Button>\n </Radio.Group>\n </div>\n\n <div>\n <h4>Search modules</h4>\n <Input\n placeholder=\"Enter regexp\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setHighlightNodeId(undefined);\n setCenterNodeId(undefined);\n }}\n suffix={<SearchOutlined style={{ color: '#ccc' }} />}\n allowClear\n size=\"small\"\n />\n {searchQuery.trim() && searchResults.length > 0 && (\n <div className={Styles['search-results']}>\n <div className={Styles['search-results-header']}>\n Found {searchResults.length} file\n {searchResults.length > 1 ? 's' : ''}\n </div>\n <div className={Styles['search-results-list']}>\n {searchResults.map((result, index) => {\n const displayPath = removeRootPath(result.path);\n return (\n <div\n key={index}\n className={Styles['search-result-item']}\n onClick={() => handleSearchResultClick(result.nodeId)}\n title={result.path}\n >\n {displayPath || result.path}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {searchQuery.trim() && searchResults.length === 0 && (\n <div className={Styles['search-results-empty']}>\n No files found matching \"{searchQuery}\"\n </div>\n )}\n </div>\n\n <div>\n <h4>Show chunks</h4>\n <Checkbox\n indeterminate={\n checkedAssets.length > 0 &&\n checkedAssets.length < assetNames.length\n }\n checked={checkedAssets.length === assetNames.length}\n onChange={(e) =>\n setCheckedAssets(e.target.checked ? assetNames : [])\n }\n className={Styles['all-none-checkbox']}\n >\n All\n </Checkbox>\n <div className={Styles['chunk-list']}>\n {assetNames.map((name) => (\n <div key={name} className={Styles['chunk-item']}>\n <Checkbox\n checked={checkedAssets.includes(name)}\n onChange={(e) => {\n if (e.target.checked) {\n setCheckedAssets([...checkedAssets, name]);\n } else {\n setCheckedAssets(\n checkedAssets.filter((a) => a !== name),\n );\n }\n }}\n >\n <span title={name}>{name}</span>\n </Checkbox>\n <span className={Styles['size-tag']}>\n {formatSize(getChunkSize(name, 'value'))}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n <div className={Styles['chart-wrapper']}>\n <TreeMap\n ref={chartRef}\n treeData={filteredTreeData}\n sizeType={sizeType}\n onChartClick={onChartClick}\n highlightNodeId={highlightNodeId}\n centerNodeId={centerNodeId}\n rootPath={rootPath}\n style={{ width: '100%', height: '100%' }}\n />\n </div>\n </div>\n );\n};\n"],"names":["echarts","TreemapChart","TooltipComponent","CanvasRenderer","hashString","str","hash","i","getLevelOption","TreeMapInner","memo","treeData","sizeType","style","onChartClick","forwardedRef","highlightNodeId","centerNodeId","rootPath","option","setOption","useState","chartRef","React","chartDataRef","useEffect","convert","node","colorGroup","level","groupColors","BUNDLE_ANALYZER_COLORS","_level","children","c","val","nodeId","isHighlighted","console","result","data","item","index","group","COLOR_GROUPS","pos","_params","_dom","_rect","size","obj","info","name","path","normalizedRoot","normalizedPath","sourceSize","bundledSize","gzipSize","makeRow","label","value","color","Styles","rows","undefined","formatSize","chartInstance","findNodeInfo","targetId","currentPath","found","setTimeout","nodeInfo","e","zoomStrategies","String","strategy","EChartsReactCore","params","instance","TreeMap","props","ref","AssetTreemapWithFilter","ServerAPIProvider","SDK","projectInfo","AssetTreemapWithFilterInner","assetNames","useMemo","checkedAssets","setCheckedAssets","collapsed","setCollapsed","setSizeType","searchQuery","setSearchQuery","isFullscreen","setIsFullscreen","setHighlightNodeId","setCenterNodeId","containerRef","enterFullscreen","useCallback","err","exitFullscreen","document","toggleFullscreen","handleFullscreenChange","searchResults","regex","RegExp","results","collectMatchingPaths","filteredTreeData","filtered","handleSearchResultClick","removeRootPath","filepath","getSize","type","calculateNodeTotalSize","childrenSize","sum","child","getChunkSize","n","sizeTypeToUse","FullscreenExitOutlined","FullscreenOutlined","RightOutlined","LeftOutlined","Radio","Input","SearchOutlined","displayPath","Checkbox","a"],"mappings":"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"}
1
+ {"version":3,"file":"components/Charts/TreeMap.mjs","sources":["../../../src/components/Charts/TreeMap.tsx"],"sourcesContent":["import React, { useEffect, useState, memo, useMemo, useCallback } from 'react';\nimport EChartsReactCore from 'echarts-for-react/esm/core';\nimport * as echarts from 'echarts/core';\nimport { TreemapChart, type TreemapSeriesOption } from 'echarts/charts';\nimport {\n TooltipComponent,\n TitleComponent,\n type TooltipComponentOption,\n type TitleComponentOption,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { Checkbox, Radio, Input } from 'antd';\nimport {\n LeftOutlined,\n RightOutlined,\n SearchOutlined,\n FullscreenOutlined,\n FullscreenExitOutlined,\n} from '@ant-design/icons';\nimport type { ComposeOption, EChartsType } from 'echarts/core';\nimport { formatSize } from 'src/utils';\nimport { SDK } from '@rsdoctor/types';\nimport { ServerAPIProvider } from 'src/components/Manifest';\nimport { ModuleAnalyzeComponent } from '../../pages/ModuleAnalyze';\nimport Styles from './treemap.module.scss';\nimport { TREE_COLORS } from './constants';\nimport type {\n CallbackDataParams,\n ECElementEvent,\n} from 'echarts/types/dist/shared';\n\ntype TreeMapOption = ComposeOption<\n TreemapSeriesOption | TooltipComponentOption | TitleComponentOption\n>;\n\ntype TreemapDataNode = NonNullable<TreemapSeriesOption['data']>[number] & {\n path?: string;\n sourceSize?: number;\n bundledSize?: number;\n gzipSize?: number;\n moduleId?: string | number;\n};\n\necharts.use([TreemapChart, TooltipComponent, TitleComponent, CanvasRenderer]);\n\nexport type TreeNode = {\n name: string;\n value?: number;\n children?: TreeNode[];\n path?: string;\n sourceSize?: number;\n bundledSize?: number;\n gzipSize?: number;\n id?: string | number;\n};\n\nexport type SizeType = 'stat' | 'parsed' | 'gzip' | 'value';\n\ninterface TreeMapProps {\n treeData: TreeNode[];\n sizeType: SizeType;\n style?: React.CSSProperties;\n onChartClick?: (params: ECElementEvent) => void;\n highlightNodeId?: number;\n centerNodeId?: number;\n rootPath?: string;\n}\n\nfunction hashString(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) + hash + str.charCodeAt(i);\n }\n return hash >>> 0;\n}\n\nfunction blendWithWhite(hex: string, ratio: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n\n const blendedR = Math.round(r * ratio + 255 * (1 - ratio));\n const blendedG = Math.round(g * ratio + 255 * (1 - ratio));\n const blendedB = Math.round(b * ratio + 255 * (1 - ratio));\n\n return `#${blendedR.toString(16).padStart(2, '0')}${blendedG.toString(16).padStart(2, '0')}${blendedB.toString(16).padStart(2, '0')}`;\n}\n\nfunction getLuminance(hex: string): number {\n const r = parseInt(hex.slice(1, 3), 16) / 255;\n const g = parseInt(hex.slice(3, 5), 16) / 255;\n const b = parseInt(hex.slice(5, 7), 16) / 255;\n\n const [rs, gs, bs] = [r, g, b].map((val) => {\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n });\n\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n}\n\nfunction isDarkColor(hex: string): boolean {\n return getLuminance(hex) < 0.4;\n}\n\nfunction getLevelOption() {\n return [\n {\n itemStyle: {\n borderWidth: 0,\n gapWidth: 2,\n },\n },\n {\n itemStyle: {\n borderColorAlpha: [1, 0.3],\n borderWidth: 5,\n gapWidth: 1,\n },\n upperLabel: {\n show: true,\n color: '#ffffff',\n fontSize: 14,\n height: 30,\n },\n emphasis: {\n itemStyle: {\n borderColor: '#ccc',\n },\n },\n },\n ];\n}\n\nconst TreeMapInner: React.FC<\n TreeMapProps & { forwardedRef?: React.Ref<EChartsReactCore> }\n> = memo(\n ({\n treeData,\n sizeType,\n style,\n onChartClick,\n forwardedRef,\n highlightNodeId,\n centerNodeId,\n rootPath,\n }) => {\n const [option, setOption] = useState<TreeMapOption | null>(null);\n const chartRef = React.useRef<EChartsReactCore | null>(null);\n const chartDataRef = React.useRef<TreemapDataNode[]>([]);\n\n useEffect(() => {\n if (forwardedRef && chartRef.current) {\n if (typeof forwardedRef === 'function') {\n forwardedRef(chartRef.current);\n } else {\n (\n forwardedRef as React.MutableRefObject<EChartsReactCore | null>\n ).current = chartRef.current;\n }\n }\n }, [forwardedRef, chartRef.current]);\n useEffect(() => {\n if (!treeData) return;\n function convert(\n node: TreeNode,\n index = 0,\n level = 0,\n parentColor?: string,\n siblingIndex = 0,\n siblingCount = 1,\n ): TreemapDataNode {\n const baseColor =\n parentColor || TREE_COLORS[index % TREE_COLORS.length];\n\n const children = node.children?.map((c, childIndex) =>\n convert(\n c,\n index,\n level + 1,\n baseColor,\n childIndex,\n node.children?.length || 0,\n ),\n );\n\n let val = 0;\n if (sizeType === 'stat') val = node.sourceSize || 0;\n else if (sizeType === 'parsed') val = node.bundledSize || 0;\n else if (sizeType === 'gzip') val = node.gzipSize || 0;\n else if (sizeType === 'value') val = node.value || 0;\n\n if (!val && node.value) val = node.value;\n\n const nodeId = node.path\n ? hashString(node.path)\n : hashString(node.name || '');\n const isHighlighted = highlightNodeId === nodeId;\n\n const baseColorRatio = level === 0 ? 1 : Math.max(0.2, 1 - level * 0.2);\n const baseBorderRatio =\n level === 0 ? 1 : Math.max(0.3, 1 - level * 0.25);\n\n const siblingGradientRange = 0.15;\n const siblingRatio =\n siblingCount > 1\n ? 1 - (siblingIndex / (siblingCount - 1)) * siblingGradientRange\n : 1;\n\n const colorRatio = baseColorRatio * siblingRatio;\n const borderRatio = baseBorderRatio * siblingRatio;\n\n const nodeColor = isHighlighted\n ? '#fff5f5'\n : level === 0\n ? blendWithWhite(baseColor, 0.8)\n : blendWithWhite(baseColor, colorRatio);\n\n const nodeBorderColor = isHighlighted\n ? '#ff4d4f'\n : level === 0\n ? baseColor\n : blendWithWhite(baseColor, borderRatio);\n\n const isDark = isDarkColor(nodeColor);\n const textColor = isDark ? '#ffffff' : '#000000';\n const textBorderColor = isDark\n ? 'rgba(255, 255, 255, 0.2)'\n : 'rgba(0, 0, 0, 0.1)';\n\n const result: TreemapDataNode = {\n id: nodeId,\n name: node.name,\n value: val,\n path: node.path || node.name,\n sourceSize:\n node.sourceSize ?? (sizeType === 'stat' ? val : undefined),\n bundledSize:\n node.bundledSize ?? (sizeType === 'parsed' ? val : undefined),\n gzipSize: node.gzipSize ?? (sizeType === 'gzip' ? val : undefined),\n moduleId: node.id,\n itemStyle: {\n borderWidth: isHighlighted ? 4 : 1,\n color: nodeColor,\n borderColor: nodeBorderColor,\n ...(level === 0 && { gapWidth: 2 }),\n },\n label: {\n show: true,\n color: textColor,\n textBorderColor: textBorderColor,\n textBorderWidth: 1,\n },\n upperLabel:\n level === 0\n ? undefined\n : {\n show: true,\n color: textColor,\n },\n };\n\n if (children && children.length > 0) {\n result.children = children;\n }\n\n if (isHighlighted) {\n result.emphasis = {\n itemStyle: {\n borderColor: '#ff4d4f',\n borderWidth: 4,\n color: '#fff5f5',\n },\n };\n }\n\n return result;\n }\n\n const data = treeData\n .map((item, index) =>\n convert(item, index, 0, undefined, index, treeData.length),\n )\n .filter(\n (item) =>\n (typeof item.value === 'number' ? item.value > 0 : false) ||\n (item.children && item.children.length > 0),\n );\n\n chartDataRef.current = data;\n\n setOption({\n color: TREE_COLORS,\n title: {\n text: 'Rsdoctor TreeMap',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n color: 'rgba(0, 0, 0, 0.8)',\n },\n },\n tooltip: {\n padding: 10,\n backgroundColor: '#fff',\n borderColor: '#eee',\n borderWidth: 1,\n textStyle: {\n color: 'rgba(0, 0, 0, 0.8)',\n },\n confine: true,\n extraCssText: 'max-width: 450px; word-wrap: break-word;',\n position: function (pos, _params, _dom, _rect, size) {\n const obj: { top: number; left?: number; right?: number } = {\n top: pos[1] + 10,\n };\n if (pos[0] < size.viewSize[0] / 2) {\n obj.left = pos[0] + 10;\n } else {\n obj.right = size.viewSize[0] - pos[0] + 10;\n }\n return obj;\n } as TooltipComponentOption['position'],\n formatter: function (\n info: CallbackDataParams & { data?: TreemapDataNode },\n ) {\n const node = info.data || {};\n let path =\n typeof node.path === 'string'\n ? node.path\n : typeof node.name === 'string'\n ? node.name\n : String(node.name ?? '');\n\n if (rootPath && path) {\n const normalizedRoot = rootPath\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedPath = path.replace(/\\\\/g, '/');\n if (normalizedPath.startsWith(normalizedRoot + '/')) {\n path = normalizedPath.slice(normalizedRoot.length + 1);\n } else if (normalizedPath === normalizedRoot) {\n path = '';\n }\n }\n\n const sourceSize =\n typeof node.sourceSize === 'number' && node.sourceSize > 0\n ? node.sourceSize\n : typeof node.value === 'number' &&\n node.value > 0 &&\n sizeType === 'stat'\n ? node.value\n : undefined;\n const bundledSize =\n typeof node.bundledSize === 'number' && node.bundledSize > 0\n ? node.bundledSize\n : undefined;\n const gzipSize =\n typeof node.gzipSize === 'number' && node.gzipSize > 0\n ? node.gzipSize\n : undefined;\n\n function makeRow(label: string, value: string, color: string) {\n return `<div class=\"${Styles['tooltip-row']}\">\n <span class=\"${Styles['tooltip-label']}\" style=\"color: ${color};\">${label}</span>\n <span style=\"color: ${color};\">${value}</span>\n </div>`;\n }\n\n const rows = [];\n if (sourceSize !== undefined && sourceSize > 0) {\n rows.push(\n makeRow('Stat size', formatSize(sourceSize), '#52c41a'),\n );\n }\n if (bundledSize !== undefined && bundledSize > 0) {\n rows.push(\n makeRow('Parsed size', formatSize(bundledSize), '#d96420'),\n );\n }\n if (gzipSize !== undefined && gzipSize > 0) {\n rows.push(\n makeRow('Gzipped size', formatSize(gzipSize), '#1677ff'),\n );\n }\n\n return `\n <div style=\"font-family: sans-serif; font-size: 12px; line-height: 1.5;\">\n <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);\">${echarts.format.encodeHTML(path)}</div>\n ${rows.join('')}\n </div>\n `;\n },\n } as TooltipComponentOption,\n series: [\n {\n type: 'treemap',\n label: {\n show: true,\n formatter: '{b}',\n fontSize: 12,\n position: 'inside',\n fontWeight: 'normal',\n textBorderWidth: 1,\n padding: [4, 8, 4, 8],\n },\n upperLabel: {\n show: true,\n height: 30,\n fontSize: 12,\n fontWeight: 'normal',\n padding: [0, 0, 0, 4],\n },\n levels: getLevelOption(),\n data: data,\n breadcrumb: {\n show: true,\n left: 'center',\n top: 'bottom',\n height: 22,\n emptyItemWidth: 25,\n itemStyle: {\n color: '#999',\n borderColor: 'transparent',\n borderWidth: 0,\n borderRadius: 0,\n },\n emphasis: {\n itemStyle: {\n color: '#333',\n },\n },\n textStyle: {\n fontFamily: 'sans-serif',\n fontSize: 12,\n color: '#666',\n },\n },\n roam: true,\n nodeClick: false,\n zoomToNodeRatio: 0.5,\n animationDurationUpdate: 500,\n width: '100%',\n height: '100%',\n top: 40,\n bottom: 30,\n left: 0,\n right: 0,\n zoomLimit: {\n min: 0.5,\n max: 5,\n },\n } as TreemapSeriesOption,\n ],\n });\n }, [treeData, sizeType, highlightNodeId, rootPath]);\n\n useEffect(() => {\n if (centerNodeId && chartRef.current && option) {\n const chartInstance =\n chartRef.current.getEchartsInstance() as unknown as EChartsType;\n if (chartInstance) {\n const findNodeInfo = (\n data: TreemapDataNode[],\n targetId: number,\n path: string[] = [],\n ): { name: string; path: string[] } | null => {\n for (const item of data) {\n const itemName =\n typeof item.name === 'string'\n ? item.name\n : String(item.name ?? '');\n const currentPath = [...path, itemName];\n if (item.id === targetId) {\n return { name: itemName, path: currentPath };\n }\n if (item.children) {\n const found = findNodeInfo(\n item.children,\n targetId,\n currentPath,\n );\n if (found) return found;\n }\n }\n return null;\n };\n\n setTimeout(() => {\n const nodeInfo = findNodeInfo(chartDataRef.current, centerNodeId);\n if (!nodeInfo) return;\n const nodeName = nodeInfo.name;\n\n try {\n chartInstance.dispatchAction({\n type: 'highlight',\n seriesIndex: 0,\n name: nodeName,\n });\n } catch (e) {\n console.error('Failed to highlight node with name:', nodeName, e);\n }\n\n const zoomStrategies: Array<() => void> = [\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n targetNodeId: String(centerNodeId),\n }),\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeName,\n }),\n () =>\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeInfo.path.join('/'),\n }),\n () =>\n nodeInfo.path.length > 0 &&\n chartInstance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n name: nodeInfo.path[nodeInfo.path.length - 1],\n }),\n ];\n\n for (const strategy of zoomStrategies) {\n try {\n strategy();\n return;\n } catch (e) {\n console.error(\n 'Failed to zoom to node with id:',\n centerNodeId,\n e,\n );\n }\n }\n\n console.warn('Failed to zoom to node with id:', centerNodeId);\n }, 200);\n }\n }\n }, [centerNodeId, option]);\n\n useEffect(() => {\n if (!chartRef.current || !option) return;\n\n const chartInstance =\n chartRef.current.getEchartsInstance() as unknown as EChartsType;\n if (!chartInstance) return;\n\n const handleDblClick = () => {\n try {\n chartInstance.dispatchAction({\n type: 'treemapRootToNode',\n seriesIndex: 0,\n });\n } catch (e) {}\n };\n\n chartInstance.on('dblclick', handleDblClick);\n\n return () => {\n chartInstance.off('dblclick', handleDblClick);\n };\n }, [option]);\n\n return option ? (\n <div className={Styles['chart-container']} style={style}>\n <EChartsReactCore\n ref={chartRef}\n option={option}\n echarts={echarts}\n onEvents={{\n click: (params: ECElementEvent) => {\n if (chartRef.current) {\n const instance =\n chartRef.current.getEchartsInstance() as unknown as EChartsType;\n const data = params?.data as TreemapDataNode | undefined;\n if (instance && data?.id !== undefined) {\n instance.dispatchAction({\n type: 'treemapZoomToNode',\n seriesIndex: 0,\n targetNodeId: String(data.id),\n });\n }\n }\n onChartClick?.(params);\n },\n }}\n style={{\n width: '100%',\n height: '100%',\n }}\n />\n </div>\n ) : null;\n },\n);\n\nexport const TreeMap = React.forwardRef<EChartsReactCore, TreeMapProps>(\n (props, ref) => <TreeMapInner {...props} forwardedRef={ref} />,\n);\n\nexport const AssetTreemapWithFilter: React.FC<{\n treeData: TreeNode[];\n onChartClick?: (params: ECElementEvent) => void;\n bundledSize?: boolean;\n}> = ({ treeData, onChartClick, bundledSize = true }) => {\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetProjectInfo}>\n {(projectInfo) => {\n return (\n <AssetTreemapWithFilterInner\n treeData={treeData}\n onChartClick={onChartClick}\n bundledSize={bundledSize}\n rootPath={projectInfo.root}\n />\n );\n }}\n </ServerAPIProvider>\n );\n};\n\nconst AssetTreemapWithFilterInner: React.FC<{\n treeData: TreeNode[];\n onChartClick?: (params: ECElementEvent) => void;\n bundledSize?: boolean;\n rootPath: string;\n}> = ({ treeData, onChartClick, bundledSize = true, rootPath }) => {\n const assetNames = useMemo(\n () => treeData.map((item) => item.name),\n [treeData],\n );\n\n const [checkedAssets, setCheckedAssets] = useState<string[]>(assetNames);\n const [collapsed, setCollapsed] = useState(false);\n const [sizeType, setSizeType] = useState<SizeType>(\n bundledSize ? 'parsed' : 'stat',\n );\n const [searchQuery, setSearchQuery] = useState('');\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [highlightNodeId, setHighlightNodeId] = useState<number | undefined>();\n const [centerNodeId, setCenterNodeId] = useState<number | undefined>();\n const [moduleId, setModuleId] = useState<string | number>('');\n const [showAnalyze, setShowAnalyze] = useState(false);\n const [chunkSearchQuery, setChunkSearchQuery] = useState('');\n\n const chartRef = React.useRef<EChartsReactCore>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const handleChartClick = useCallback(\n (params: ECElementEvent) => {\n onChartClick?.(params);\n const data = params.data as TreemapDataNode | undefined;\n const moduleId = data?.moduleId;\n if (moduleId !== undefined) {\n setModuleId(moduleId);\n setShowAnalyze(true);\n }\n },\n [onChartClick],\n );\n\n const enterFullscreen = useCallback(() => {\n if (containerRef.current) {\n const el = containerRef.current as HTMLElement & {\n webkitRequestFullscreen?: () => void;\n mozRequestFullScreen?: () => void;\n msRequestFullscreen?: () => void;\n };\n if (el.requestFullscreen) {\n el.requestFullscreen()\n .then(() => setIsFullscreen(true))\n .catch((err: unknown) =>\n console.error('Failed to enter fullscreen:', err),\n );\n } else if (el.webkitRequestFullscreen) {\n try {\n el.webkitRequestFullscreen();\n setIsFullscreen(true);\n } catch (err) {\n console.error('Failed to enter fullscreen (webkit):', err);\n }\n } else if (el.mozRequestFullScreen) {\n try {\n el.mozRequestFullScreen();\n setIsFullscreen(true);\n } catch (err) {\n console.error('Failed to enter fullscreen (moz):', err);\n }\n } else if (el.msRequestFullscreen) {\n try {\n el.msRequestFullscreen();\n setIsFullscreen(true);\n } catch (err) {\n console.error('Failed to enter fullscreen (ms):', err);\n }\n } else {\n console.error('Fullscreen API is not supported in this browser.');\n }\n }\n }, []);\n\n const exitFullscreen = useCallback(() => {\n document\n .exitFullscreen()\n .then(() => setIsFullscreen(false))\n .catch((err) => console.error('Failed to exit fullscreen:', err));\n }, []);\n\n const toggleFullscreen = useCallback(() => {\n if (isFullscreen) {\n exitFullscreen();\n } else {\n enterFullscreen();\n }\n }, [isFullscreen, enterFullscreen, exitFullscreen]);\n\n useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange);\n };\n }, []);\n\n const filteredTreeData = useMemo(() => {\n let filtered = treeData.filter((item) => checkedAssets.includes(item.name));\n\n if (chunkSearchQuery.trim()) {\n const searchLower = chunkSearchQuery.toLowerCase();\n filtered = filtered.filter((item) =>\n item.name.toLowerCase().includes(searchLower),\n );\n }\n\n return filtered;\n }, [treeData, checkedAssets, chunkSearchQuery]);\n\n const searchResults = useMemo(() => {\n if (!searchQuery.trim()) return [];\n\n const regex = new RegExp(searchQuery, 'i');\n const results: Array<{ path: string; nodeId: number }> = [];\n\n const collectMatchingPaths = (node: TreeNode) => {\n if (node.path && regex.test(node.path)) {\n const nodeId = hashString(node.path);\n results.push({ path: node.path, nodeId });\n }\n if (node.children) {\n node.children.forEach(collectMatchingPaths);\n }\n };\n\n filteredTreeData.forEach(collectMatchingPaths);\n return results;\n }, [filteredTreeData, searchQuery]);\n\n const handleSearchResultClick = useCallback((nodeId: number) => {\n setHighlightNodeId(nodeId);\n setCenterNodeId(nodeId);\n }, []);\n\n const removeRootPath = useCallback(\n (filepath: string): string => {\n if (!rootPath || !filepath) return filepath;\n const normalizedRoot = rootPath.replace(/\\\\/g, '/').replace(/\\/$/, '');\n const normalizedPath = filepath.replace(/\\\\/g, '/');\n\n if (normalizedPath.startsWith(normalizedRoot + '/')) {\n return normalizedPath.slice(normalizedRoot.length + 1);\n } else if (normalizedPath === normalizedRoot) {\n return '';\n }\n return filepath;\n },\n [rootPath],\n );\n\n const getSize = useCallback((node: TreeNode, type?: SizeType) => {\n if (type === 'stat') return node.sourceSize || 0;\n if (type === 'parsed') return node.bundledSize || 0;\n if (type === 'gzip') return node.gzipSize || 0;\n if (type === 'value') return node.value || 0;\n if (node.value) return node.value;\n return 0;\n }, []);\n\n const calculateNodeTotalSize = useCallback(\n (node: TreeNode, type: SizeType): number => {\n let size = getSize(node, type);\n\n if (node.children && node.children.length > 0) {\n const childrenSize = node.children.reduce(\n (sum, child) => sum + calculateNodeTotalSize(child, type),\n 0,\n );\n if (size === 0 || (!node.path && childrenSize > 0)) {\n size = childrenSize;\n }\n }\n\n return size;\n },\n [getSize],\n );\n\n const getChunkSize = useCallback(\n (name: string, type?: SizeType) => {\n const node = treeData.find((n) => n.name === name);\n if (!node) return 0;\n const sizeTypeToUse = type || sizeType;\n return calculateNodeTotalSize(node, sizeTypeToUse);\n },\n [treeData, sizeType, calculateNodeTotalSize],\n );\n\n return (\n <div className={Styles.treemap} ref={containerRef}>\n <button\n className={Styles['fullscreen-button']}\n onClick={toggleFullscreen}\n title={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n >\n {isFullscreen ? <FullscreenExitOutlined /> : <FullscreenOutlined />}\n </button>\n\n <div className={`${Styles.sidebar} ${collapsed ? Styles.collapsed : ''}`}>\n <div\n className={`${Styles['sidebar-toggle']} ${collapsed ? Styles.collapsed : ''}`}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <RightOutlined /> : <LeftOutlined />}\n </div>\n <div className={Styles['sidebar-content']}>\n <div>\n <h4>Treemap sizes</h4>\n <Radio.Group\n value={sizeType}\n onChange={(e) => setSizeType(e.target.value)}\n size=\"small\"\n buttonStyle=\"solid\"\n >\n <Radio.Button value=\"stat\">Stat</Radio.Button>\n <Radio.Button value=\"parsed\">Parsed</Radio.Button>\n <Radio.Button value=\"gzip\">Gzipped</Radio.Button>\n </Radio.Group>\n </div>\n\n <div>\n <h4>Show chunks</h4>\n <Input\n placeholder=\"Search chunks\"\n value={chunkSearchQuery}\n onChange={(e) => setChunkSearchQuery(e.target.value)}\n suffix={<SearchOutlined style={{ color: '#ccc' }} />}\n allowClear\n size=\"small\"\n style={{ marginBottom: 8 }}\n />\n <Checkbox\n indeterminate={\n checkedAssets.length > 0 &&\n checkedAssets.length < assetNames.length\n }\n checked={checkedAssets.length === assetNames.length}\n onChange={(e) =>\n setCheckedAssets(e.target.checked ? assetNames : [])\n }\n className={Styles['all-none-checkbox']}\n >\n All\n </Checkbox>\n <div className={Styles['chunk-list']}>\n {assetNames\n .filter((name) =>\n name.toLowerCase().includes(chunkSearchQuery.toLowerCase()),\n )\n .map((name) => (\n <div key={name} className={Styles['chunk-item']}>\n <Checkbox\n checked={checkedAssets.includes(name)}\n onChange={(e) => {\n if (e.target.checked) {\n setCheckedAssets([...checkedAssets, name]);\n } else {\n setCheckedAssets(\n checkedAssets.filter((a) => a !== name),\n );\n }\n }}\n >\n <span title={name}>{name}</span>\n </Checkbox>\n <span className={Styles['size-tag']}>\n {formatSize(getChunkSize(name, 'value'))}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h4>Search modules</h4>\n <Input\n placeholder=\"Enter regexp\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setHighlightNodeId(undefined);\n setCenterNodeId(undefined);\n }}\n suffix={<SearchOutlined style={{ color: '#ccc' }} />}\n allowClear\n size=\"small\"\n />\n {searchQuery.trim() && searchResults.length > 0 && (\n <div className={Styles['search-results']}>\n <div className={Styles['search-results-header']}>\n Found {searchResults.length} file\n {searchResults.length > 1 ? 's' : ''}\n </div>\n <div className={Styles['search-results-list']}>\n {searchResults.map((result, index) => {\n const displayPath = removeRootPath(result.path);\n return (\n <div\n key={index}\n className={Styles['search-result-item']}\n onClick={() => handleSearchResultClick(result.nodeId)}\n title={result.path}\n >\n {displayPath || result.path}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {searchQuery.trim() && searchResults.length === 0 && (\n <div className={Styles['search-results-empty']}>\n No files found matching \"{searchQuery}\"\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className={Styles['chart-wrapper']}>\n <TreeMap\n ref={chartRef}\n treeData={filteredTreeData}\n sizeType={sizeType}\n onChartClick={handleChartClick}\n highlightNodeId={highlightNodeId}\n centerNodeId={centerNodeId}\n rootPath={rootPath}\n style={{ width: '100%', height: '100%' }}\n />\n {moduleId ? (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetAllModuleGraph}\n body={{}}\n >\n {(modules) => (\n <ModuleAnalyzeComponent\n cwd={rootPath}\n moduleId={moduleId}\n modules={modules}\n show={showAnalyze}\n setShow={setShowAnalyze}\n />\n )}\n </ServerAPIProvider>\n ) : null}\n </div>\n </div>\n );\n};\n"],"names":["echarts","TreemapChart","TooltipComponent","TitleComponent","CanvasRenderer","hashString","str","hash","i","blendWithWhite","hex","ratio","r","parseInt","g","b","blendedR","Math","blendedG","blendedB","getLuminance","rs","gs","bs","val","isDarkColor","getLevelOption","TreeMapInner","memo","treeData","sizeType","style","onChartClick","forwardedRef","highlightNodeId","centerNodeId","rootPath","option","setOption","useState","chartRef","React","chartDataRef","useEffect","convert","node","index","level","parentColor","siblingIndex","siblingCount","baseColor","TREE_COLORS","children","c","childIndex","nodeId","isHighlighted","baseColorRatio","baseBorderRatio","siblingGradientRange","siblingRatio","colorRatio","borderRatio","nodeColor","nodeBorderColor","isDark","textColor","textBorderColor","result","undefined","data","item","pos","_params","_dom","_rect","size","obj","info","path","String","normalizedRoot","normalizedPath","sourceSize","bundledSize","gzipSize","makeRow","label","value","color","Styles","rows","formatSize","chartInstance","findNodeInfo","targetId","itemName","currentPath","found","setTimeout","nodeInfo","nodeName","e","console","zoomStrategies","strategy","handleDblClick","EChartsReactCore","params","instance","TreeMap","props","ref","AssetTreemapWithFilter","ServerAPIProvider","SDK","projectInfo","AssetTreemapWithFilterInner","assetNames","useMemo","checkedAssets","setCheckedAssets","collapsed","setCollapsed","setSizeType","searchQuery","setSearchQuery","isFullscreen","setIsFullscreen","setHighlightNodeId","setCenterNodeId","moduleId","setModuleId","showAnalyze","setShowAnalyze","chunkSearchQuery","setChunkSearchQuery","containerRef","handleChartClick","useCallback","enterFullscreen","el","err","exitFullscreen","document","toggleFullscreen","handleFullscreenChange","filteredTreeData","filtered","searchLower","searchResults","regex","RegExp","results","collectMatchingPaths","handleSearchResultClick","removeRootPath","filepath","getSize","type","calculateNodeTotalSize","childrenSize","sum","child","getChunkSize","name","n","sizeTypeToUse","FullscreenExitOutlined","FullscreenOutlined","RightOutlined","LeftOutlined","Radio","Input","SearchOutlined","Checkbox","a","displayPath","modules","ModuleAnalyzeComponent"],"mappings":"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"}
@@ -7,14 +7,4 @@ export declare enum ChartTypes {
7
7
  Loader = 4,
8
8
  Normal = 5
9
9
  }
10
- export declare const BUNDLE_ANALYZER_COLORS: {
11
- readonly orange: readonly [string, string, string, string, string, string];
12
- readonly purple: readonly [string, string, string, string, string, string];
13
- readonly cyan: readonly [string, string, string, string, string, string];
14
- readonly green: readonly [string, string, string, string, string, string];
15
- readonly blue: readonly [string, string, string, string, string, string];
16
- readonly yellow: readonly [string, string, string, string, string, string];
17
- };
18
- type ColorGroup = keyof typeof BUNDLE_ANALYZER_COLORS;
19
- export declare const COLOR_GROUPS: ColorGroup[];
20
- export {};
10
+ export declare const TREE_COLORS: string[];
@@ -36,70 +36,19 @@ var constants_ChartTypes = /*#__PURE__*/ function(ChartTypes) {
36
36
  ChartTypes[ChartTypes["Normal"] = 5] = "Normal";
37
37
  return ChartTypes;
38
38
  }({});
39
- const BUNDLE_ANALYZER_COLORS = {
40
- orange: [
41
- hexToRgba('#faad14', 0.85),
42
- hexToRgba('#ffc53d', 0.6),
43
- hexToRgba('#ffd666', 0.55),
44
- hexToRgba('#ffe58f', 0.55),
45
- hexToRgba('#fff1b8', 0.55),
46
- hexToRgba('#fffbe6', 0.5)
47
- ],
48
- purple: [
49
- hexToRgba('#722ed1', 0.85),
50
- hexToRgba('#9254de', 0.7),
51
- hexToRgba('#b37feb', 0.65),
52
- hexToRgba('#d3adf7', 0.65),
53
- hexToRgba('#efdbff', 0.65),
54
- hexToRgba('#f9f0ff', 0.65)
55
- ],
56
- cyan: [
57
- hexToRgba('#36cfc9', 0.85),
58
- hexToRgba('#5cdbd3', 0.7),
59
- hexToRgba('#87e8de', 0.65),
60
- hexToRgba('#b5f5ec', 0.65),
61
- hexToRgba('#e6fffb', 0.65),
62
- hexToRgba('#e6fffb', 0.5)
63
- ],
64
- green: [
65
- hexToRgba('#a0d911', 0.85),
66
- hexToRgba('#bae637', 0.7),
67
- hexToRgba('#d3f261', 0.65),
68
- hexToRgba('#eaff8f', 0.65),
69
- hexToRgba('#f4ffb8', 0.65),
70
- hexToRgba('#fcffe6', 0.5)
71
- ],
72
- blue: [
73
- hexToRgba('#2f54eb', 0.85),
74
- hexToRgba('#597ef7', 0.7),
75
- hexToRgba('#85a5ff', 0.65),
76
- hexToRgba('#adc6ff', 0.65),
77
- hexToRgba('#d6e4ff', 0.65),
78
- hexToRgba('#f0f5ff', 0.5)
79
- ],
80
- yellow: [
81
- hexToRgba('#fadb14', 0.85),
82
- hexToRgba('#ffec3d', 0.7),
83
- hexToRgba('#fff566', 0.65),
84
- hexToRgba('#fffb8f', 0.65),
85
- hexToRgba('#ffffb8', 0.65),
86
- hexToRgba('#feffe6', 0.65)
87
- ]
88
- };
89
- function hexToRgba(hex, alpha = 0.65) {
90
- const r = parseInt(hex.slice(1, 3), 16);
91
- const g = parseInt(hex.slice(3, 5), 16);
92
- const b = parseInt(hex.slice(5, 7), 16);
93
- return `rgba(${r}, ${g}, ${b}, ${alpha})`;
94
- }
95
- const COLOR_GROUPS = [
96
- 'cyan',
97
- 'blue',
98
- 'orange',
99
- 'green',
100
- 'yellow',
101
- 'purple'
39
+ const TREE_COLORS = [
40
+ '#6F3FE1',
41
+ '#5781FD',
42
+ '#4DB1CB',
43
+ '#3EBD7C',
44
+ '#F7A925',
45
+ '#bda29a',
46
+ '#ca8622',
47
+ '#749f83',
48
+ '#6e7074',
49
+ '#546570',
50
+ '#c4ccd3'
102
51
  ];
103
- export { BUNDLE_ANALYZER_COLORS, COLOR_GROUPS, constants_ChartTypes as ChartTypes, PALETTE_COLORS };
52
+ export { constants_ChartTypes as ChartTypes, PALETTE_COLORS, TREE_COLORS };
104
53
 
105
54
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/Charts/constants.mjs","sources":["../../../src/components/Charts/constants.ts"],"sourcesContent":["export const PALETTE_COLORS = [\n '#F2793D',\n '#F28B24',\n '#F2A200',\n '#F5CC00',\n '#F5E000',\n '#A3D900',\n '#66CC00',\n '#0AC419',\n '#0AC496',\n '#0AC7D1',\n '#00A8E0',\n '#1471F5',\n '#4060FF',\n '#7559FF',\n '#884DFF',\n '#A526FF',\n '#BA39E5',\n '#C700D9',\n '#D900B5',\n '#E50099',\n '#E52E6B',\n '#F24957',\n '#30B2F2',\n '#00BF70',\n '#5959FF',\n '#9F40FF',\n '#528BFF',\n];\n\nexport enum ChartTypes {\n Bootstrap,\n Compile,\n Done,\n Minify,\n Loader,\n Normal,\n}\n\nexport const BUNDLE_ANALYZER_COLORS = {\n orange: [\n hexToRgba('#faad14', 0.85), // gold-6\n hexToRgba('#ffc53d', 0.6), // gold-5\n hexToRgba('#ffd666', 0.55), // gold-4\n hexToRgba('#ffe58f', 0.55), // gold-3\n hexToRgba('#fff1b8', 0.55), // gold-2\n hexToRgba('#fffbe6', 0.5), // gold-1\n ],\n purple: [\n hexToRgba('#722ed1', 0.85), // purple-6\n hexToRgba('#9254de', 0.7), // purple-5\n hexToRgba('#b37feb', 0.65), // purple-4\n hexToRgba('#d3adf7', 0.65), // purple-3\n hexToRgba('#efdbff', 0.65), // purple-2\n hexToRgba('#f9f0ff', 0.65), // purple-1\n ],\n cyan: [\n hexToRgba('#36cfc9', 0.85), // cyan-5\n hexToRgba('#5cdbd3', 0.7), // cyan-4\n hexToRgba('#87e8de', 0.65), // cyan-3\n hexToRgba('#b5f5ec', 0.65), // cyan-2\n hexToRgba('#e6fffb', 0.65), // cyan-1\n hexToRgba('#e6fffb', 0.5), // cyan-0\n ],\n green: [\n hexToRgba('#a0d911', 0.85), // lime-6\n hexToRgba('#bae637', 0.7), // lime-5\n hexToRgba('#d3f261', 0.65), // lime-4\n hexToRgba('#eaff8f', 0.65), // lime-3\n hexToRgba('#f4ffb8', 0.65), // lime-2\n hexToRgba('#fcffe6', 0.5), // lime-1\n ],\n blue: [\n hexToRgba('#2f54eb', 0.85), // geekblue-6\n hexToRgba('#597ef7', 0.7), // geekblue-5\n hexToRgba('#85a5ff', 0.65), // geekblue-4\n hexToRgba('#adc6ff', 0.65), // geekblue-3\n hexToRgba('#d6e4ff', 0.65), // geekblue-2\n hexToRgba('#f0f5ff', 0.5), // geekblue-1\n ],\n yellow: [\n hexToRgba('#fadb14', 0.85), // yellow-6\n hexToRgba('#ffec3d', 0.7), // yellow-5\n hexToRgba('#fff566', 0.65), // yellow-4\n hexToRgba('#fffb8f', 0.65), // yellow-3\n hexToRgba('#ffffb8', 0.65), // yellow-2\n hexToRgba('#feffe6', 0.65), // yellow-1\n ],\n} as const;\n\nfunction hexToRgba(hex: string, alpha = 0.65) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\ntype ColorGroup = keyof typeof BUNDLE_ANALYZER_COLORS;\nexport const COLOR_GROUPS: ColorGroup[] = [\n 'cyan',\n 'blue',\n 'orange',\n 'green',\n 'yellow',\n 'purple',\n];\n"],"names":["PALETTE_COLORS","ChartTypes","BUNDLE_ANALYZER_COLORS","hexToRgba","hex","alpha","r","parseInt","g","b","COLOR_GROUPS"],"mappings":"AAAO,MAAMA,iBAAiB;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,IAAKC,uBAAUA,WAAAA,GAAAA,SAAVA,UAAU;;;;;;;WAAVA;;AASL,MAAMC,yBAAyB;IACpC,QAAQ;QACNC,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;IACD,QAAQ;QACNA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;IACD,MAAM;QACJA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;IACD,OAAO;QACLA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;IACD,MAAM;QACJA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;IACD,QAAQ;QACNA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;QACrBA,UAAU,WAAW;KACtB;AACH;AAEA,SAASA,UAAUC,GAAW,EAAEC,QAAQ,IAAI;IAC1C,MAAMC,IAAIC,SAASH,IAAI,KAAK,CAAC,GAAG,IAAI;IACpC,MAAMI,IAAID,SAASH,IAAI,KAAK,CAAC,GAAG,IAAI;IACpC,MAAMK,IAAIF,SAASH,IAAI,KAAK,CAAC,GAAG,IAAI;IACpC,OAAO,CAAC,KAAK,EAAEE,EAAE,EAAE,EAAEE,EAAE,EAAE,EAAEC,EAAE,EAAE,EAAEJ,MAAM,CAAC,CAAC;AAC3C;AAGO,MAAMK,eAA6B;IACxC;IACA;IACA;IACA;IACA;IACA;CACD"}
1
+ {"version":3,"file":"components/Charts/constants.mjs","sources":["../../../src/components/Charts/constants.ts"],"sourcesContent":["export const PALETTE_COLORS = [\n '#F2793D',\n '#F28B24',\n '#F2A200',\n '#F5CC00',\n '#F5E000',\n '#A3D900',\n '#66CC00',\n '#0AC419',\n '#0AC496',\n '#0AC7D1',\n '#00A8E0',\n '#1471F5',\n '#4060FF',\n '#7559FF',\n '#884DFF',\n '#A526FF',\n '#BA39E5',\n '#C700D9',\n '#D900B5',\n '#E50099',\n '#E52E6B',\n '#F24957',\n '#30B2F2',\n '#00BF70',\n '#5959FF',\n '#9F40FF',\n '#528BFF',\n];\n\nexport enum ChartTypes {\n Bootstrap,\n Compile,\n Done,\n Minify,\n Loader,\n Normal,\n}\n\nexport const TREE_COLORS = [\n '#6F3FE1',\n '#5781FD',\n '#4DB1CB',\n '#3EBD7C',\n '#F7A925',\n '#bda29a',\n '#ca8622',\n '#749f83',\n '#6e7074',\n '#546570',\n '#c4ccd3',\n];\n"],"names":["PALETTE_COLORS","ChartTypes","TREE_COLORS"],"mappings":"AAAO,MAAMA,iBAAiB;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,IAAKC,uBAAUA,WAAAA,GAAAA,SAAVA,UAAU;;;;;;;WAAVA;;AASL,MAAMC,cAAc;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from "./components/index.mjs";
2
2
  export * from "./utils/index.mjs";
3
- import * as __WEBPACK_EXTERNAL_MODULE__constants_mjs_225410ff__ from "./constants.mjs";
4
- export { __WEBPACK_EXTERNAL_MODULE__constants_mjs_225410ff__ as Constants };
3
+ import * as __rspack_external__constants_mjs_225410ff from "./constants.mjs";
4
+ export { __rspack_external__constants_mjs_225410ff as Constants };
@@ -1,23 +1,39 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { MinusCircleOutlined, PlusCircleOutlined, RightSquareOutlined } from "@ant-design/icons";
3
3
  import { Popover, Space, Typography } from "antd";
4
- import { useCallback } from "react";
4
+ import { useCallback, useEffect, useRef } from "react";
5
5
  import react_hyper_tree, { useTreeState } from "react-hyper-tree";
6
6
  import { ModuleGraphListContext } from "../../BundleSize/config.mjs";
7
7
  import "./fileTreeCom.css";
8
8
  import { getFileCom } from "../../../components/FileTree/index.mjs";
9
9
  const prefix = 'file-tree-com';
10
10
  const FileTree = (props)=>{
11
- const { treeData, needJumpto = false, defaultOpened = false, defaultOpenFather = 0 } = props;
11
+ const { treeData, needJumpto = false, defaultOpenFather = 0 } = props;
12
12
  const { required, handlers } = useTreeState({
13
13
  id: `${prefix}-tree`,
14
14
  data: treeData || [],
15
- defaultOpened,
15
+ defaultOpened: false,
16
16
  multipleSelect: false,
17
17
  refreshAsyncNodes: true
18
18
  });
19
+ const expandedNodes = useRef(new Set());
20
+ useEffect(()=>{
21
+ expandedNodes.current.clear();
22
+ }, [
23
+ treeData
24
+ ]);
19
25
  const renderNode = useCallback(({ node, onToggle })=>{
20
- defaultOpenFather && node.data.level < defaultOpenFather && node.setOpened(true);
26
+ if ('object' != typeof node.data || null === node.data || Array.isArray(node.data)) return null;
27
+ const hasChildren = 'function' == typeof node.data.getChildren || Array.isArray(node.data.children) && node.data.children.length > 0;
28
+ if (defaultOpenFather > 0 && 'number' == typeof node.data.level && node.data.level < defaultOpenFather && hasChildren) {
29
+ const nodeId = node.id;
30
+ if (!expandedNodes.current.has(nodeId)) {
31
+ expandedNodes.current.add(nodeId);
32
+ requestAnimationFrame(()=>{
33
+ handlers.setOpen(nodeId, true);
34
+ });
35
+ }
36
+ }
21
37
  const Icon = getFileCom(node.data.name);
22
38
  return /*#__PURE__*/ jsx("div", {
23
39
  className: `${prefix}-titles-box`,
@@ -33,15 +49,18 @@ const FileTree = (props)=>{
33
49
  onClick: onToggle,
34
50
  children: /*#__PURE__*/ jsxs(Space, {
35
51
  children: [
36
- !node.options.opened && node.data.children?.length ? /*#__PURE__*/ jsx(PlusCircleOutlined, {
37
- style: {
38
- color: 'lightblue'
39
- }
40
- }) : /*#__PURE__*/ jsx(MinusCircleOutlined, {
41
- style: {
42
- color: 'lightblue'
43
- }
44
- }),
52
+ (()=>{
53
+ const hasChildren = 'function' == typeof node.data.getChildren || Array.isArray(node.data.children) && node.data.children.length > 0;
54
+ return !node.options.opened && hasChildren ? /*#__PURE__*/ jsx(PlusCircleOutlined, {
55
+ style: {
56
+ color: 'lightblue'
57
+ }
58
+ }) : /*#__PURE__*/ jsx(MinusCircleOutlined, {
59
+ style: {
60
+ color: 'lightblue'
61
+ }
62
+ });
63
+ })(),
45
64
  Icon,
46
65
  /*#__PURE__*/ jsx(Popover, {
47
66
  content: /*#__PURE__*/ jsx(Fragment, {
@@ -78,7 +97,11 @@ const FileTree = (props)=>{
78
97
  })
79
98
  })
80
99
  }, node.data.name);
81
- }, []);
100
+ }, [
101
+ handlers,
102
+ defaultOpenFather,
103
+ needJumpto
104
+ ]);
82
105
  return /*#__PURE__*/ jsx(Fragment, {
83
106
  children: /*#__PURE__*/ jsx(react_hyper_tree, {
84
107
  ...required,
@@ -1 +1 @@
1
- {"version":3,"file":"pages/ModuleAnalyze/components/fileTreeCom.mjs","sources":["../../../../src/pages/ModuleAnalyze/components/fileTreeCom.tsx"],"sourcesContent":["import {\n MinusCircleOutlined,\n PlusCircleOutlined,\n RightSquareOutlined,\n} from '@ant-design/icons';\nimport { Popover, Space, Typography } from 'antd';\nimport React, { useCallback } from 'react';\nimport Tree, { DefaultNodeProps, useTreeState } from 'react-hyper-tree';\n\nimport { ModuleGraphListContext } from '../../BundleSize/config';\nimport { NewTreeNodeType } from '../utils/hooks';\nimport './fileTreeCom.scss';\nimport { getFileCom } from 'src/components/FileTree';\n\nconst prefix = 'file-tree-com';\n\ntype FileTreeProps = {\n treeData: NewTreeNodeType[];\n needCode?: boolean;\n needShowAllTree?: boolean;\n needJumpto?: boolean;\n defaultOpened?: boolean;\n defaultOpenFather?: number;\n cwd: string;\n selectedChunk?: string;\n};\n\nexport const FileTree: React.FC<FileTreeProps> = (props) => {\n const {\n treeData,\n needJumpto = false,\n defaultOpened = false,\n defaultOpenFather = 0,\n } = props;\n\n const { required, handlers } = useTreeState({\n id: `${prefix}-tree`,\n data: treeData || [],\n defaultOpened,\n multipleSelect: false,\n refreshAsyncNodes: true,\n });\n\n const renderNode = useCallback(({ node, onToggle }: DefaultNodeProps) => {\n defaultOpenFather &&\n node.data.level < defaultOpenFather &&\n node.setOpened(true);\n const Icon = getFileCom(node.data.name);\n\n return (\n <div className={`${prefix}-titles-box`} key={node.data.name}>\n <div className={`${prefix}-titles`}>\n <Space direction=\"vertical\">\n <div className={`${prefix}-node-title`}>\n <Space>\n <div onClick={onToggle}>\n <Space>\n {!node.options.opened && node.data.children?.length ? (\n <PlusCircleOutlined style={{ color: 'lightblue' }} />\n ) : (\n <MinusCircleOutlined style={{ color: 'lightblue' }} />\n )}\n {Icon}\n <Popover\n key={`${node.data.name}popover`}\n content={\n <>\n {node.data.__RESOURCEPATH__ ? (\n <Typography.Text\n key={`${node.data.name}-popover-path`}\n code\n >\n {node.data.__RESOURCEPATH__}\n </Typography.Text>\n ) : (\n <></>\n )}\n </>\n }\n title=\"INFO\"\n trigger=\"hover\"\n >\n <Typography.Text>{node.data.name}</Typography.Text>\n </Popover>\n </Space>\n </div>\n <Space>\n {needJumpto && (\n <ModuleGraphListContext.Consumer>\n {({ moduleJumpList, setModuleJumpList }) => {\n return (\n <RightSquareOutlined\n onClick={() => {\n const _list = [...moduleJumpList];\n _list.push(+node.id);\n setModuleJumpList(_list);\n }}\n />\n );\n }}\n </ModuleGraphListContext.Consumer>\n )}\n </Space>\n </Space>\n </div>\n </Space>\n </div>\n </div>\n );\n }, []);\n\n return (\n <>\n <Tree\n {...required}\n {...handlers}\n horizontalLineStyles={{\n stroke: '#c4c4c4',\n strokeWidth: 2,\n strokeDasharray: '1 1',\n }}\n verticalLineStyles={{\n stroke: '#c4c4c4',\n strokeWidth: 2,\n strokeDasharray: '1 1',\n }}\n draggable={false}\n depthGap={14}\n gapMode={'padding'}\n disableLines={false}\n disableTransitions={true}\n disableHorizontalLines={false}\n disableVerticalLines={false}\n verticalLineTopOffset={0}\n verticalLineOffset={5}\n renderNode={renderNode}\n />\n </>\n );\n};\n"],"names":["prefix","FileTree","props","treeData","needJumpto","defaultOpened","defaultOpenFather","required","handlers","useTreeState","renderNode","useCallback","node","onToggle","Icon","getFileCom","Space","PlusCircleOutlined","MinusCircleOutlined","Popover","Typography","ModuleGraphListContext","moduleJumpList","setModuleJumpList","RightSquareOutlined","_list","Tree"],"mappings":";;;;;;;;AAcA,MAAMA,SAAS;AAaR,MAAMC,WAAoC,CAACC;IAChD,MAAM,EACJC,QAAQ,EACRC,aAAa,KAAK,EAClBC,gBAAgB,KAAK,EACrBC,oBAAoB,CAAC,EACtB,GAAGJ;IAEJ,MAAM,EAAEK,QAAQ,EAAEC,QAAQ,EAAE,GAAGC,aAAa;QAC1C,IAAI,GAAGT,OAAO,KAAK,CAAC;QACpB,MAAMG,YAAY,EAAE;QACpBE;QACA,gBAAgB;QAChB,mBAAmB;IACrB;IAEA,MAAMK,aAAaC,YAAY,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAoB;QAClEP,qBACEM,KAAK,IAAI,CAAC,KAAK,GAAGN,qBAClBM,KAAK,SAAS,CAAC;QACjB,MAAME,OAAOC,WAAWH,KAAK,IAAI,CAAC,IAAI;QAEtC,OAAO,WAAP,GACE,IAAC;YAAI,WAAW,GAAGZ,OAAO,WAAW,CAAC;sBACpC,kBAAC;gBAAI,WAAW,GAAGA,OAAO,OAAO,CAAC;0BAChC,kBAACgB,OAAKA;oBAAC,WAAU;8BACf,kBAAC;wBAAI,WAAW,GAAGhB,OAAO,WAAW,CAAC;kCACpC,mBAACgB,OAAKA;;8CACJ,IAAC;oCAAI,SAASH;8CACZ,mBAACG,OAAKA;;4CACH,CAACJ,KAAK,OAAO,CAAC,MAAM,IAAIA,KAAK,IAAI,CAAC,QAAQ,EAAE,SAAS,WAAT,GAC3C,IAACK,oBAAkBA;gDAAC,OAAO;oDAAE,OAAO;gDAAY;+DAEhD,IAACC,qBAAmBA;gDAAC,OAAO;oDAAE,OAAO;gDAAY;;4CAElDJ;0DACD,IAACK,SAAOA;gDAEN,uBACE;8DACGP,KAAK,IAAI,CAAC,gBAAgB,GAAG,WAAH,GACzB,IAACQ,WAAW,IAAI;wDAEd,MAAI;kEAEHR,KAAK,IAAI,CAAC,gBAAgB;uDAHtB,GAAGA,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAMvC;;gDAIN,OAAM;gDACN,SAAQ;0DAER,kBAACQ,WAAW,IAAI;8DAAER,KAAK,IAAI,CAAC,IAAI;;+CAlB3B,GAAGA,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;8CAsBrC,IAACI,OAAKA;8CACHZ,cAAc,WAAdA,GACC,IAACiB,uBAAuB,QAAQ;kDAC7B,CAAC,EAAEC,cAAc,EAAEC,iBAAiB,EAAE,GAC9B,WAAP,GACE,IAACC,qBAAmBA;gDAClB,SAAS;oDACP,MAAMC,QAAQ;2DAAIH;qDAAe;oDACjCG,MAAM,IAAI,CAAC,CAACb,KAAK,EAAE;oDACnBW,kBAAkBE;gDACpB;;;;;;;;;WA9CuBb,KAAK,IAAI,CAAC,IAAI;IA2D/D,GAAG,EAAE;IAEL,OAAO,WAAP,GACE;kBACE,kBAACc,kBAAIA;YACF,GAAGnB,QAAQ;YACX,GAAGC,QAAQ;YACZ,sBAAsB;gBACpB,QAAQ;gBACR,aAAa;gBACb,iBAAiB;YACnB;YACA,oBAAoB;gBAClB,QAAQ;gBACR,aAAa;gBACb,iBAAiB;YACnB;YACA,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,oBAAoB;YACpB,wBAAwB;YACxB,sBAAsB;YACtB,uBAAuB;YACvB,oBAAoB;YACpB,YAAYE;;;AAIpB"}
1
+ {"version":3,"file":"pages/ModuleAnalyze/components/fileTreeCom.mjs","sources":["../../../../src/pages/ModuleAnalyze/components/fileTreeCom.tsx"],"sourcesContent":["import {\n MinusCircleOutlined,\n PlusCircleOutlined,\n RightSquareOutlined,\n} from '@ant-design/icons';\nimport { Popover, Space, Typography } from 'antd';\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport Tree, { DefaultNodeProps, useTreeState } from 'react-hyper-tree';\n\nimport { ModuleGraphListContext } from '../../BundleSize/config';\nimport { NewTreeNodeType } from '../utils/hooks';\nimport './fileTreeCom.scss';\nimport { getFileCom } from 'src/components/FileTree';\n\nconst prefix = 'file-tree-com';\n\ntype FileTreeProps = {\n treeData: NewTreeNodeType[];\n needCode?: boolean;\n needShowAllTree?: boolean;\n needJumpto?: boolean;\n defaultOpened?: boolean;\n defaultOpenFather?: number;\n cwd: string;\n selectedChunk?: string;\n};\n\nexport const FileTree: React.FC<FileTreeProps> = (props) => {\n const { treeData, needJumpto = false, defaultOpenFather = 0 } = props;\n\n const { required, handlers } = useTreeState({\n id: `${prefix}-tree`,\n data: treeData || [],\n defaultOpened: false,\n multipleSelect: false,\n refreshAsyncNodes: true,\n });\n\n const expandedNodes = useRef<Set<string | number>>(new Set());\n\n useEffect(() => {\n expandedNodes.current.clear();\n }, [treeData]);\n\n const renderNode = useCallback(\n ({ node, onToggle }: DefaultNodeProps) => {\n if (\n typeof node.data !== 'object' ||\n node.data === null ||\n Array.isArray(node.data)\n ) {\n return null;\n }\n\n const hasChildren =\n typeof node.data.getChildren === 'function' ||\n (Array.isArray(node.data.children) && node.data.children.length > 0);\n\n if (\n defaultOpenFather > 0 &&\n typeof node.data.level === 'number' &&\n node.data.level < defaultOpenFather &&\n hasChildren\n ) {\n const nodeId = node.id;\n if (!expandedNodes.current.has(nodeId)) {\n expandedNodes.current.add(nodeId);\n requestAnimationFrame(() => {\n handlers.setOpen(nodeId, true);\n });\n }\n }\n\n const Icon = getFileCom(node.data.name);\n\n return (\n <div className={`${prefix}-titles-box`} key={node.data.name}>\n <div className={`${prefix}-titles`}>\n <Space direction=\"vertical\">\n <div className={`${prefix}-node-title`}>\n <Space>\n <div onClick={onToggle}>\n <Space>\n {(() => {\n const hasChildren =\n typeof node.data.getChildren === 'function' ||\n (Array.isArray(node.data.children) &&\n node.data.children.length > 0);\n return !node.options.opened && hasChildren ? (\n <PlusCircleOutlined style={{ color: 'lightblue' }} />\n ) : (\n <MinusCircleOutlined style={{ color: 'lightblue' }} />\n );\n })()}\n {Icon}\n <Popover\n key={`${node.data.name}popover`}\n content={\n <>\n {node.data.__RESOURCEPATH__ ? (\n <Typography.Text\n key={`${node.data.name}-popover-path`}\n code\n >\n {node.data.__RESOURCEPATH__}\n </Typography.Text>\n ) : (\n <></>\n )}\n </>\n }\n title=\"INFO\"\n trigger=\"hover\"\n >\n <Typography.Text>{node.data.name}</Typography.Text>\n </Popover>\n </Space>\n </div>\n <Space>\n {needJumpto && (\n <ModuleGraphListContext.Consumer>\n {({ moduleJumpList, setModuleJumpList }) => {\n return (\n <RightSquareOutlined\n onClick={() => {\n const _list = [...moduleJumpList];\n _list.push(+node.id);\n setModuleJumpList(_list);\n }}\n />\n );\n }}\n </ModuleGraphListContext.Consumer>\n )}\n </Space>\n </Space>\n </div>\n </Space>\n </div>\n </div>\n );\n },\n [handlers, defaultOpenFather, needJumpto],\n );\n\n return (\n <>\n <Tree\n {...required}\n {...handlers}\n horizontalLineStyles={{\n stroke: '#c4c4c4',\n strokeWidth: 2,\n strokeDasharray: '1 1',\n }}\n verticalLineStyles={{\n stroke: '#c4c4c4',\n strokeWidth: 2,\n strokeDasharray: '1 1',\n }}\n draggable={false}\n depthGap={14}\n gapMode={'padding'}\n disableLines={false}\n disableTransitions={true}\n disableHorizontalLines={false}\n disableVerticalLines={false}\n verticalLineTopOffset={0}\n verticalLineOffset={5}\n renderNode={renderNode}\n />\n </>\n );\n};\n"],"names":["prefix","FileTree","props","treeData","needJumpto","defaultOpenFather","required","handlers","useTreeState","expandedNodes","useRef","Set","useEffect","renderNode","useCallback","node","onToggle","Array","hasChildren","nodeId","requestAnimationFrame","Icon","getFileCom","Space","PlusCircleOutlined","MinusCircleOutlined","Popover","Typography","ModuleGraphListContext","moduleJumpList","setModuleJumpList","RightSquareOutlined","_list","Tree"],"mappings":";;;;;;;;AAcA,MAAMA,SAAS;AAaR,MAAMC,WAAoC,CAACC;IAChD,MAAM,EAAEC,QAAQ,EAAEC,aAAa,KAAK,EAAEC,oBAAoB,CAAC,EAAE,GAAGH;IAEhE,MAAM,EAAEI,QAAQ,EAAEC,QAAQ,EAAE,GAAGC,aAAa;QAC1C,IAAI,GAAGR,OAAO,KAAK,CAAC;QACpB,MAAMG,YAAY,EAAE;QACpB,eAAe;QACf,gBAAgB;QAChB,mBAAmB;IACrB;IAEA,MAAMM,gBAAgBC,OAA6B,IAAIC;IAEvDC,UAAU;QACRH,cAAc,OAAO,CAAC,KAAK;IAC7B,GAAG;QAACN;KAAS;IAEb,MAAMU,aAAaC,YACjB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAoB;QACnC,IACE,AAAqB,YAArB,OAAOD,KAAK,IAAI,IAChBA,AAAc,SAAdA,KAAK,IAAI,IACTE,MAAM,OAAO,CAACF,KAAK,IAAI,GAEvB,OAAO;QAGT,MAAMG,cACJ,AAAiC,cAAjC,OAAOH,KAAK,IAAI,CAAC,WAAW,IAC3BE,MAAM,OAAO,CAACF,KAAK,IAAI,CAAC,QAAQ,KAAKA,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG;QAEpE,IACEV,oBAAoB,KACpB,AAA2B,YAA3B,OAAOU,KAAK,IAAI,CAAC,KAAK,IACtBA,KAAK,IAAI,CAAC,KAAK,GAAGV,qBAClBa,aACA;YACA,MAAMC,SAASJ,KAAK,EAAE;YACtB,IAAI,CAACN,cAAc,OAAO,CAAC,GAAG,CAACU,SAAS;gBACtCV,cAAc,OAAO,CAAC,GAAG,CAACU;gBAC1BC,sBAAsB;oBACpBb,SAAS,OAAO,CAACY,QAAQ;gBAC3B;YACF;QACF;QAEA,MAAME,OAAOC,WAAWP,KAAK,IAAI,CAAC,IAAI;QAEtC,OAAO,WAAP,GACE,IAAC;YAAI,WAAW,GAAGf,OAAO,WAAW,CAAC;sBACpC,kBAAC;gBAAI,WAAW,GAAGA,OAAO,OAAO,CAAC;0BAChC,kBAACuB,OAAKA;oBAAC,WAAU;8BACf,kBAAC;wBAAI,WAAW,GAAGvB,OAAO,WAAW,CAAC;kCACpC,mBAACuB,OAAKA;;8CACJ,IAAC;oCAAI,SAASP;8CACZ,mBAACO,OAAKA;;4CACD;gDACD,MAAML,cACJ,AAAiC,cAAjC,OAAOH,KAAK,IAAI,CAAC,WAAW,IAC3BE,MAAM,OAAO,CAACF,KAAK,IAAI,CAAC,QAAQ,KAC/BA,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG;gDAChC,OAAO,CAACA,KAAK,OAAO,CAAC,MAAM,IAAIG,cAAc,WAAdA,GAC7B,IAACM,oBAAkBA;oDAAC,OAAO;wDAAE,OAAO;oDAAY;mEAEhD,IAACC,qBAAmBA;oDAAC,OAAO;wDAAE,OAAO;oDAAY;;4CAErD;4CACCJ;0DACD,IAACK,SAAOA;gDAEN,uBACE;8DACGX,KAAK,IAAI,CAAC,gBAAgB,GAAG,WAAH,GACzB,IAACY,WAAW,IAAI;wDAEd,MAAI;kEAEHZ,KAAK,IAAI,CAAC,gBAAgB;uDAHtB,GAAGA,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAMvC;;gDAIN,OAAM;gDACN,SAAQ;0DAER,kBAACY,WAAW,IAAI;8DAAEZ,KAAK,IAAI,CAAC,IAAI;;+CAlB3B,GAAGA,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;8CAsBrC,IAACQ,OAAKA;8CACHnB,cAAc,WAAdA,GACC,IAACwB,uBAAuB,QAAQ;kDAC7B,CAAC,EAAEC,cAAc,EAAEC,iBAAiB,EAAE,GAC9B,WAAP,GACE,IAACC,qBAAmBA;gDAClB,SAAS;oDACP,MAAMC,QAAQ;2DAAIH;qDAAe;oDACjCG,MAAM,IAAI,CAAC,CAACjB,KAAK,EAAE;oDACnBe,kBAAkBE;gDACpB;;;;;;;;;WApDuBjB,KAAK,IAAI,CAAC,IAAI;IAiE/D,GACA;QAACR;QAAUF;QAAmBD;KAAW;IAG3C,OAAO,WAAP,GACE;kBACE,kBAAC6B,kBAAIA;YACF,GAAG3B,QAAQ;YACX,GAAGC,QAAQ;YACZ,sBAAsB;gBACpB,QAAQ;gBACR,aAAa;gBACb,iBAAiB;YACnB;YACA,oBAAoB;gBAClB,QAAQ;gBACR,aAAa;gBACb,iBAAiB;YACnB;YACA,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,oBAAoB;YACpB,wBAAwB;YACxB,sBAAsB;YACtB,uBAAuB;YACvB,oBAAoB;YACpB,YAAYM;;;AAIpB"}
@@ -1,5 +1,8 @@
1
1
  import { SDK } from '@rsdoctor/types';
2
2
  import React from 'react';
3
+ export declare const BailoutReasonCard: React.FC<{
4
+ reasons?: string[];
5
+ }>;
3
6
  export declare const ModuleFilesTree: React.FC<{
4
7
  modules: SDK.ModuleData[];
5
8
  dependencies: SDK.DependencyData[];