@rsdoctor/components 1.5.13 → 1.5.14

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 (37) hide show
  1. package/dist/components/Charts/TreeMap.mjs +1 -2
  2. package/dist/components/Charts/TreeMap.mjs.map +1 -1
  3. package/dist/components/Layout/header.d.ts +0 -1
  4. package/dist/components/Layout/header.mjs +14 -53
  5. package/dist/components/Layout/header.mjs.map +1 -1
  6. package/dist/components/Layout/header.module.mjs +15 -0
  7. package/dist/components/Layout/header.module.mjs.map +1 -0
  8. package/dist/components/Layout/header_module.css +88 -0
  9. package/dist/components/Layout/header_module.css.map +1 -0
  10. package/dist/components/Layout/index.mjs +10 -8
  11. package/dist/components/Layout/index.mjs.map +1 -1
  12. package/dist/components/Layout/index.module.mjs +7 -0
  13. package/dist/components/Layout/index.module.mjs.map +1 -0
  14. package/dist/components/Layout/index_module.css +11 -0
  15. package/dist/components/Layout/index_module.css.map +1 -0
  16. package/dist/pages/BundleSize/components/asset.mjs +5 -3
  17. package/dist/pages/BundleSize/components/asset.mjs.map +1 -1
  18. package/dist/pages/BundleSize/components/asset_module.css +15 -7
  19. package/dist/pages/BundleSize/components/asset_module.css.map +1 -1
  20. package/dist/pages/BundleSize/components/index.d.ts +1 -1
  21. package/dist/pages/BundleSize/components/index.mjs +223 -556
  22. package/dist/pages/BundleSize/components/index.mjs.map +1 -1
  23. package/dist/pages/BundleSize/components/index.module.mjs +10 -0
  24. package/dist/pages/BundleSize/components/index.module.mjs.map +1 -1
  25. package/dist/pages/BundleSize/components/index_module.css +49 -0
  26. package/dist/pages/BundleSize/components/index_module.css.map +1 -1
  27. package/dist/pages/BundleSize/components/tree-graph.d.ts +7 -0
  28. package/dist/pages/BundleSize/components/tree-graph.mjs +366 -0
  29. package/dist/pages/BundleSize/components/tree-graph.mjs.map +1 -0
  30. package/dist/pages/BundleSize/index.mjs +1 -11
  31. package/dist/pages/BundleSize/index.mjs.map +1 -1
  32. package/dist/utils/hooks.d.ts +3 -1
  33. package/dist/utils/hooks.mjs +33 -2
  34. package/dist/utils/hooks.mjs.map +1 -1
  35. package/package.json +4 -4
  36. package/dist/components/Layout/header.css +0 -28
  37. package/dist/components/Layout/header.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"components/Layout/index.mjs","sources":["../../../src/components/Layout/index.tsx"],"sourcesContent":["import { PropsWithChildren, useContext, useEffect, useState } from 'react';\nimport { FloatButton, Layout as L } from 'antd';\nimport { Language, MAIN_BG, Size } from '../../constants';\nimport { Header } from './header';\nimport {\n useLocale,\n useI18n,\n getFirstVisitFromStorage,\n setFirstVisitToStorage,\n getLanguage,\n useUrlQuery,\n getEnableRoutesFromUrlQuery,\n} from '../../utils';\nimport { Progress } from './progress';\nimport { ConfigContext } from '../../config';\nimport { SDK } from '@rsdoctor/types';\nimport { ServerAPIProvider } from '../Manifest';\nimport { ProjectInfoContext } from './project-info-context';\n\nexport interface LayoutProps {\n children: React.JSX.Element;\n}\n\nconst TitleUpdater: React.FC<{\n name?: string;\n}> = ({ name }) => {\n useEffect(() => {\n if (name) {\n document.title = `Rsdoctor - ${name}`;\n } else {\n document.title = 'Rsdoctor';\n }\n }, [name]);\n\n return null;\n};\n\nexport const Layout = (\n props: PropsWithChildren<LayoutProps>,\n): React.JSX.Element => {\n const locale = useLocale();\n const { i18n } = useI18n();\n const { children } = props;\n const query = useUrlQuery();\n const [enableRoutes, setEnableRoutes] = useState<string[] | undefined>(\n () => getEnableRoutesFromUrlQuery() || undefined,\n );\n\n useEffect(() => {\n let currentLocale = locale;\n // Check if the user is visiting the site for the first time\n const visited = getFirstVisitFromStorage();\n if (!visited) {\n setFirstVisitToStorage('1');\n const targetLang = window.navigator.language.split('-')[0];\n const userLang = getLanguage(targetLang);\n\n if (Object.values(Language).includes(userLang)) {\n currentLocale = userLang;\n }\n }\n\n if (i18n.language !== currentLocale) {\n i18n.changeLanguage(currentLocale);\n }\n }, [locale]);\n\n // Listen for enableRoutes changes in URL query parameters\n useEffect(() => {\n const newEnableRoutes = getEnableRoutesFromUrlQuery();\n setEnableRoutes(newEnableRoutes || undefined);\n }, [query]);\n\n const ctx = useContext(ConfigContext);\n\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetProjectInfo}\n showSkeleton={false}\n >\n {(project) => (\n <ProjectInfoContext.Provider value={{ project }}>\n <L>\n <TitleUpdater name={project?.name} />\n {!ctx.embedded ? <Header enableRoutes={enableRoutes} /> : null}\n <Progress />\n <L.Content\n style={{\n height: '100%',\n minHeight: '100vh',\n padding: Size.BasePadding,\n marginTop: !ctx.embedded ? Size.NavBarHeight : 0,\n background: MAIN_BG,\n }}\n >\n {children}\n <FloatButton.BackTop />\n </L.Content>\n </L>\n </ProjectInfoContext.Provider>\n )}\n </ServerAPIProvider>\n );\n};\n"],"names":["TitleUpdater","name","useEffect","document","Layout","props","locale","useLocale","i18n","useI18n","children","query","useUrlQuery","enableRoutes","setEnableRoutes","useState","getEnableRoutesFromUrlQuery","undefined","currentLocale","visited","getFirstVisitFromStorage","setFirstVisitToStorage","targetLang","window","userLang","getLanguage","Object","Language","newEnableRoutes","ctx","useContext","ConfigContext","ServerAPIProvider","SDK","project","ProjectInfoContext","L","Header","Progress","Size","MAIN_BG","FloatButton"],"mappings":";;;;;;;;;;;AAuBA,MAAMA,eAED,CAAC,EAAEC,IAAI,EAAE;IACZC,UAAU;QACR,IAAID,MACFE,SAAS,KAAK,GAAG,CAAC,WAAW,EAAEF,MAAM;aAErCE,SAAS,KAAK,GAAG;IAErB,GAAG;QAACF;KAAK;IAET,OAAO;AACT;AAEO,MAAMG,gBAAS,CACpBC;IAEA,MAAMC,SAASC;IACf,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IACrB,MAAMM,QAAQC;IACd,MAAM,CAACC,cAAcC,gBAAgB,GAAGC,SACtC,IAAMC,iCAAiCC;IAGzCf,UAAU;QACR,IAAIgB,gBAAgBZ;QAEpB,MAAMa,UAAUC;QAChB,IAAI,CAACD,SAAS;YACZE,uBAAuB;YACvB,MAAMC,aAAaC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC1D,MAAMC,WAAWC,YAAYH;YAE7B,IAAII,OAAO,MAAM,CAACC,UAAU,QAAQ,CAACH,WACnCN,gBAAgBM;QAEpB;QAEA,IAAIhB,KAAK,QAAQ,KAAKU,eACpBV,KAAK,cAAc,CAACU;IAExB,GAAG;QAACZ;KAAO;IAGXJ,UAAU;QACR,MAAM0B,kBAAkBZ;QACxBF,gBAAgBc,mBAAmBX;IACrC,GAAG;QAACN;KAAM;IAEV,MAAMkB,MAAMC,WAAWC;IAEvB,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc;QACrC,cAAc;kBAEb,CAACC,UAAAA,WAAAA,GACA,IAACC,mBAAmB,QAAQ;gBAAC,OAAO;oBAAED;gBAAQ;0BAC5C,mBAACE,QAACA;;sCACA,IAACpC,cAAYA;4BAAC,MAAMkC,SAAS;;wBAC3BL,IAAI,QAAQ,GAA4C,OAAzC,WAAH,GAAG,IAACQ,QAAMA;4BAAC,cAAcxB;;sCACvC,IAACyB,UAAQA,CAAAA;sCACT,KAACF,OAAAA,OAAS;4BACR,OAAO;gCACL,QAAQ;gCACR,WAAW;gCACX,SAASG,KAAK,WAAW;gCACzB,WAAW,AAACV,IAAI,QAAQ,GAAuB,IAApBU,KAAK,YAAY;gCAC5C,YAAYC;4BACd;;gCAEC9B;8CACD,IAAC+B,YAAY,OAAO;;;;;;;AAOlC"}
1
+ {"version":3,"file":"components/Layout/index.mjs","sources":["../../../src/components/Layout/index.tsx"],"sourcesContent":["import { PropsWithChildren, useContext, useEffect, useState } from 'react';\nimport { FloatButton, Layout as L } from 'antd';\nimport { Language, MAIN_BG, Size } from '../../constants';\nimport { Header } from './header';\nimport {\n useLocale,\n useI18n,\n getFirstVisitFromStorage,\n setFirstVisitToStorage,\n getLanguage,\n useUrlQuery,\n getEnableRoutesFromUrlQuery,\n} from '../../utils';\nimport { Progress } from './progress';\nimport { ConfigContext } from '../../config';\nimport { SDK } from '@rsdoctor/types';\nimport { ServerAPIProvider } from '../Manifest';\nimport { ProjectInfoContext } from './project-info-context';\nimport styles from './index.module.scss';\n\nexport interface LayoutProps {\n children: React.JSX.Element;\n}\n\nconst TitleUpdater: React.FC<{\n name?: string;\n}> = ({ name }) => {\n useEffect(() => {\n if (name) {\n document.title = `Rsdoctor - ${name}`;\n } else {\n document.title = 'Rsdoctor';\n }\n }, [name]);\n\n return null;\n};\n\nexport const Layout = (\n props: PropsWithChildren<LayoutProps>,\n): React.JSX.Element => {\n const locale = useLocale();\n const { i18n } = useI18n();\n const { children } = props;\n const query = useUrlQuery();\n const [enableRoutes, setEnableRoutes] = useState<string[] | undefined>(\n () => getEnableRoutesFromUrlQuery() || undefined,\n );\n\n useEffect(() => {\n let currentLocale = locale;\n // Check if the user is visiting the site for the first time\n const visited = getFirstVisitFromStorage();\n if (!visited) {\n setFirstVisitToStorage('1');\n const targetLang = window.navigator.language.split('-')[0];\n const userLang = getLanguage(targetLang);\n\n if (Object.values(Language).includes(userLang)) {\n currentLocale = userLang;\n }\n }\n\n if (i18n.language !== currentLocale) {\n i18n.changeLanguage(currentLocale);\n }\n }, [locale]);\n\n // Listen for enableRoutes changes in URL query parameters\n useEffect(() => {\n const newEnableRoutes = getEnableRoutesFromUrlQuery();\n setEnableRoutes(newEnableRoutes || undefined);\n }, [query]);\n\n const ctx = useContext(ConfigContext);\n const showHeader = !ctx.embedded;\n\n const globalCssVars = {\n '--spacing-base': Size.BasePadding + 'px',\n '--layout-nav-height': showHeader ? Size.NavBarHeight + 'px' : '0px',\n '--color-bg-main': MAIN_BG,\n } as React.CSSProperties;\n\n return (\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetProjectInfo}\n showSkeleton={false}\n >\n {(project) => (\n <ProjectInfoContext.Provider value={{ project }}>\n <L style={globalCssVars}>\n <TitleUpdater name={project?.name} />\n {showHeader && <Header enableRoutes={enableRoutes} />}\n <Progress />\n <L.Content className={styles.content}>\n {children}\n <FloatButton.BackTop />\n </L.Content>\n </L>\n </ProjectInfoContext.Provider>\n )}\n </ServerAPIProvider>\n );\n};\n"],"names":["TitleUpdater","name","useEffect","document","Layout","props","locale","useLocale","i18n","useI18n","children","query","useUrlQuery","enableRoutes","setEnableRoutes","useState","getEnableRoutesFromUrlQuery","undefined","currentLocale","visited","getFirstVisitFromStorage","setFirstVisitToStorage","targetLang","window","userLang","getLanguage","Object","Language","newEnableRoutes","ctx","useContext","ConfigContext","showHeader","globalCssVars","Size","MAIN_BG","ServerAPIProvider","SDK","project","ProjectInfoContext","L","Header","Progress","styles","FloatButton"],"mappings":";;;;;;;;;;;;AAwBA,MAAMA,eAED,CAAC,EAAEC,IAAI,EAAE;IACZC,UAAU;QACR,IAAID,MACFE,SAAS,KAAK,GAAG,CAAC,WAAW,EAAEF,MAAM;aAErCE,SAAS,KAAK,GAAG;IAErB,GAAG;QAACF;KAAK;IAET,OAAO;AACT;AAEO,MAAMG,gBAAS,CACpBC;IAEA,MAAMC,SAASC;IACf,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IACrB,MAAMM,QAAQC;IACd,MAAM,CAACC,cAAcC,gBAAgB,GAAGC,SACtC,IAAMC,iCAAiCC;IAGzCf,UAAU;QACR,IAAIgB,gBAAgBZ;QAEpB,MAAMa,UAAUC;QAChB,IAAI,CAACD,SAAS;YACZE,uBAAuB;YACvB,MAAMC,aAAaC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC1D,MAAMC,WAAWC,YAAYH;YAE7B,IAAII,OAAO,MAAM,CAACC,UAAU,QAAQ,CAACH,WACnCN,gBAAgBM;QAEpB;QAEA,IAAIhB,KAAK,QAAQ,KAAKU,eACpBV,KAAK,cAAc,CAACU;IAExB,GAAG;QAACZ;KAAO;IAGXJ,UAAU;QACR,MAAM0B,kBAAkBZ;QACxBF,gBAAgBc,mBAAmBX;IACrC,GAAG;QAACN;KAAM;IAEV,MAAMkB,MAAMC,WAAWC;IACvB,MAAMC,aAAa,CAACH,IAAI,QAAQ;IAEhC,MAAMI,gBAAgB;QACpB,kBAAkBC,KAAK,WAAW,GAAG;QACrC,uBAAuBF,aAAaE,KAAK,YAAY,GAAG,OAAO;QAC/D,mBAAmBC;IACrB;IAEA,OAAO,WAAP,GACE,IAACC,mBAAiBA;QAChB,KAAKC,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc;QACrC,cAAc;kBAEb,CAACC,UAAAA,WAAAA,GACA,IAACC,mBAAmB,QAAQ;gBAAC,OAAO;oBAAED;gBAAQ;0BAC5C,mBAACE,QAACA;oBAAC,OAAOP;;sCACR,IAACjC,cAAYA;4BAAC,MAAMsC,SAAS;;wBAC5BN,cAAc,WAAdA,GAAc,IAACS,QAAMA;4BAAC,cAAc5B;;sCACrC,IAAC6B,UAAQA,CAAAA;sCACT,KAACF,OAAAA,OAAS;4BAAC,WAAWG,aAAAA,OAAc;;gCACjCjC;8CACD,IAACkC,YAAY,OAAO;;;;;;;AAOlC"}
@@ -0,0 +1,7 @@
1
+ import "./index_module.css";
2
+ const index_module = {
3
+ content: "content-LBJ07l"
4
+ };
5
+ export default index_module;
6
+
7
+ //# sourceMappingURL=index.module.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components/Layout/index.module.mjs","sources":["../../../src/components/Layout/index.module.scss"],"sourcesContent":["// extracted by LIB_CSS_EXTRACT_LOADER\nimport \"./index_module.css\"\nexport default {\"content\":\"content-LBJ07l\"};"],"names":[],"mappings":";AAEA,qBAAe;IAAC,SAAU;AAAgB"}
@@ -0,0 +1,11 @@
1
+ .content-LBJ07l {
2
+ min-height: calc(100dvh - var(--layout-nav-height));
3
+ padding: var(--spacing-base);
4
+ margin-top: var(--layout-nav-height);
5
+ background: var(--color-bg-main, initial);
6
+ flex-direction: column;
7
+ display: flex;
8
+ }
9
+
10
+
11
+ /*# sourceMappingURL=index_module.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://./src/components/Layout/index.module.scss"],"names":[],"mappings":"AAAA;EACE,mDAAmD;EACnD,4BAA4B;EAC5B,oCAAoC;EACpC,yCAAyC;EACzC,sBAAsB;EACtB,aAAa;AACf","sourcesContent":[".content{display:flex;flex-direction:column;min-height:calc(100dvh - var(--layout-nav-height));padding:var(--spacing-base);margin-top:var(--layout-nav-height);background:var(--color-bg-main, initial)}"],"sourceRoot":""}
@@ -433,9 +433,9 @@ const AssetDetail = ({ asset, chunks: includeChunks, modules: includeModules, mo
433
433
  children: /*#__PURE__*/ jsxs(Card, {
434
434
  className: asset_module.bundle,
435
435
  title: `Modules of "${asset.path}"`,
436
- style: {
436
+ style: height ? {
437
437
  '--body-min-height': height + 'px'
438
- },
438
+ } : void 0,
439
439
  classNames: {
440
440
  body: asset_module.bundleBody
441
441
  },
@@ -495,6 +495,7 @@ const AssetDetailTree = /*#__PURE__*/ memo(({ filteredModules, includeModules, d
495
495
  const ITEM_HEIGHT = 30;
496
496
  const PERMANENT_PERF_MODE = false;
497
497
  const DISABLE_PERF_MODE_SCROLL_DELAY = 150;
498
+ const ENABLE_ANIMATIONS = false;
498
499
  const [performanceMode, setPerformanceMode] = useState(PERMANENT_PERF_MODE);
499
500
  const [bundleTreeRef, { height: bundleTreeHeight, width: bundleTreeWidth }] = useElementSize();
500
501
  const onScroll = useMemo(()=>{
@@ -594,7 +595,8 @@ const AssetDetailTree = /*#__PURE__*/ memo(({ filteredModules, includeModules, d
594
595
  defaultExpandedKeys: defaultExpandedModulesKeys?.length ? defaultExpandedModulesKeys : 1 === treeData.length ? [
595
596
  treeData[0].key
596
597
  ] : [],
597
- treeData: treeData
598
+ treeData: treeData,
599
+ motion: ENABLE_ANIMATIONS ? void 0 : false
598
600
  }, `tree_${moduleKeyword}_${defaultExpandAll}_${assetPath}`) : /*#__PURE__*/ jsx(Empty, {
599
601
  description: /*#__PURE__*/ jsx(Typography.Text, {
600
602
  strong: true,
@@ -1 +1 @@
1
- {"version":3,"file":"pages/BundleSize/components/asset.mjs","sources":["../../../../src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n CodepenCircleOutlined,\n ColumnHeightOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Divider,\n Empty,\n Popover as BasePopover,\n Space,\n Tag,\n type TagProps,\n type TooltipProps,\n type PopoverProps,\n Tooltip as BaseTooltip,\n Tree,\n Typography,\n} from 'antd';\nimport { DataNode as AntdDataNode } from 'antd/es/tree';\nimport { debounce, omitBy, sumBy } from 'es-toolkit/compat';\nimport { dirname, relative } from 'path';\nimport React, {\n useEffect,\n useMemo,\n useState,\n memo,\n useCallback,\n use,\n createContext,\n} from 'react';\nimport { CodeViewer } from 'src/components/base';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { ServerAPIProvider } from '../../../components/Manifest';\nimport { TextDrawer } from '../../../components/TextDrawer';\nimport { Size } from '../../../constants';\nimport {\n DataNode,\n createFileStructures,\n formatSize,\n isJsDataUrl,\n useElementSize,\n useI18n,\n} from '../../../utils';\nimport { ModuleAnalyzeComponent } from '../../ModuleAnalyze';\nimport { ModuleGraphListContext } from '../config';\nimport styles from './asset.module.scss';\nimport { ModuleData } from '@rsdoctor/graph';\nimport { ErrorBoundary } from 'react-error-boundary';\n\nconst { DirectoryTree } = Tree;\n\nconst TAB_MAP = {\n source: 'source code',\n transformed: 'Transformed Code (After compile)',\n parsedSource: 'Bundled Code (After bundle and tree-shaking)',\n};\n\n// antd's tooltip/popover component often throws 185 error when rendered inside a virtual list.\n// this is used as a reset mechanism for the error boundary.\n// also these tooltips are a real performance killer\n// and they can be easily turned off by wrapping the problematic subtree in DisablePopups\nconst POPUPS_ENABLED_BY_DEFAULT = true;\nconst PopupContext = createContext({ enabled: POPUPS_ENABLED_BY_DEFAULT });\nconst DisablePopups = ({ children }: { children: any }) => (\n <PopupContext.Provider value={{ enabled: false }}>\n {children}\n </PopupContext.Provider>\n);\nconst usePopupsEnabled = (): boolean => use(PopupContext)?.enabled ?? true;\nconst Tooltip = (props: TooltipProps) => {\n const enabled = usePopupsEnabled();\n if (enabled) return <BaseTooltip {...props} />;\n else return props.children ?? null;\n};\nconst Popover = (props: PopoverProps) => {\n const enabled = usePopupsEnabled();\n if (enabled) return <BasePopover {...props} />;\n else return props.children ?? null;\n};\n\nconst EmptyCodeItem = () => (\n <Empty\n description={`Do not have the module code.\n (1) If you use the brief mode, there will not have any codes to show.\n (2) If you use lite mode, there will not have source codes.`}\n />\n);\n\nexport const ModuleCodeViewer: React.FC<{ data: SDK.ModuleData }> = ({\n data,\n}) => {\n const [tab, setTab] = useState('');\n const { t } = useI18n();\n\n const TAB_LAB_MAP: Record<string, string> = {\n source: 'Source Code',\n transformed: `Transformed Code(${t('After Compile')})`,\n parsedSource: `Bundled Code(${t('After Bundled')})`,\n };\n if (!data) return null;\n\n const { path } = data;\n\n return (\n <TextDrawer\n text=\"\"\n buttonProps={{\n size: 'small',\n icon: (\n <Popover content=\"Open the Codes Box\">\n <CodepenCircleOutlined />\n </Popover>\n ),\n type: 'default',\n }}\n buttonStyle={{ padding: `0 4px` }}\n drawerProps={{\n destroyOnClose: true,\n title: `Code of \"${path}\"`,\n }}\n >\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: data.id }}\n >\n {(source) => {\n return (\n <>\n {!source['source'] &&\n !source['parsedSource'] &&\n !source['transformed'] ? (\n <EmptyCodeItem />\n ) : (\n <Card\n className=\"code-size-card\"\n style={{ width: '100%' }}\n tabList={Object.keys(omitBy(source, (s) => !s))\n .map((k) => ({ tab: k }))\n .map((e) => ({\n ...e,\n tab: TAB_LAB_MAP[e.tab],\n key: e.tab,\n }))}\n defaultActiveTabKey={\n source['parsedSource'] ? 'parsedSource' : 'source'\n }\n onTabChange={(v) => setTab(v)}\n tabBarExtraContent={\n <Popover\n placement=\"bottom\"\n title={\n <Typography.Title level={5}>Explain</Typography.Title>\n }\n content={\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: 30,\n }}\n >\n <div>\n <Typography.Text strong>Source: </Typography.Text>\n <Typography.Text>\n {TAB_MAP.source}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Transformed:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.transformed}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Bundled Source:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.parsedSource}\n </Typography.Text>\n </div>\n <br />\n <Typography.Text strong>{'More'}</Typography.Text>\n <Typography.Text>\n {t('CodeModeExplain')}\n </Typography.Text>\n </div>\n </>\n }\n trigger={'hover'}\n >\n <a href=\"#\">Explain</a>\n </Popover>\n }\n styles={{ body: { padding: 0, overflow: 'hidden' } }}\n >\n {source['parsedSource'] ||\n source['source'] ||\n source['transformed'] ? (\n <CodeViewer\n isEmbed\n code={\n tab\n ? source[tab as keyof SDK.ModuleSource]\n : source['parsedSource']\n ? source['parsedSource']\n : source['source']\n }\n filePath={path}\n />\n ) : (\n <EmptyCodeItem />\n )}\n </Card>\n )}\n </>\n );\n }}\n </ServerAPIProvider>\n </TextDrawer>\n );\n};\n\nexport const ModuleGraphViewer: React.FC<{\n id: number | string;\n show: boolean;\n setShow: (_show: boolean) => void;\n cwd: string;\n}> = ({ id, show, setShow, cwd }) => {\n if (!id) return null;\n\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetAllModuleGraph} body={{}}>\n {(modules) => (\n <ModuleAnalyzeComponent\n cwd={cwd}\n moduleId={id}\n modules={modules}\n show={show}\n setShow={setShow}\n />\n )}\n </ServerAPIProvider>\n );\n};\n\nconst inlinedResourcePathKey = '__RESOURCEPATH__';\n\nexport function getChildrenModule(node: DataNode, mods: string[]) {\n if (node.children) {\n node.children.forEach((n: DataNode) => {\n if (n.isLeaf) {\n mods.push(n[inlinedResourcePathKey]);\n } else {\n getChildrenModule(n, mods);\n }\n });\n }\n\n return mods;\n}\n\nexport const ModulesStatistics: React.FC<{\n modules: SDK.ModuleData[];\n chunks: SDK.ChunkData[];\n filteredModules: SDK.ModuleData[];\n}> = memo(({ modules, chunks, filteredModules }) => {\n const { sourceSize, parsedSize, filteredParsedSize, filteredSourceSize } =\n useMemo(() => {\n return {\n sourceSize: sumBy(modules, (e) => e.size.sourceSize),\n parsedSize: sumBy(modules, (e) => e.size.parsedSize),\n filteredSourceSize: sumBy(filteredModules, (e) => e.size.sourceSize),\n filteredParsedSize: sumBy(filteredModules, (e) => e.size.parsedSize),\n };\n }, [modules, filteredModules]);\n\n return (\n <Space>\n <Tooltip\n title={`total modules count is ${modules.length}, the filtered modules count is ${filteredModules.length}`}\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules: {filteredModules.length} / {modules.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules bundled size: {formatSize(parsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules source size: {formatSize(sourceSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules bundled size: {formatSize(filteredParsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules source size: {formatSize(filteredSourceSize)}\n </Typography.Text>\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules Size:\n {filteredParsedSize === parsedSize\n ? formatSize(parsedSize)\n : `${formatSize(filteredParsedSize)} / ${formatSize(parsedSize)}`}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n this asset includes {chunks.length} chunks:\n </Typography.Text>\n {chunks.map((e) => (\n <Bdg label=\"chunk\" value={e.name} key={e.name} />\n ))}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Chunks: {chunks.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </Space>\n );\n});\n\nconst defaultTagStyle: React.CSSProperties = {\n margin: 'none',\n marginInlineEnd: 0,\n};\nconst AbstractTag = ({\n color,\n tooltipTitle,\n style = defaultTagStyle,\n children,\n}: {\n color: TagProps['color'];\n children: string;\n tooltipTitle: string;\n style?: React.CSSProperties | null;\n}) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n {tooltipTitle}\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={color} style={style || undefined}>\n {children}\n </Tag>\n </Tooltip>\n );\n};\nconst ConcatenatedTag = ({ moduleCount }: { moduleCount: number }) => {\n return (\n <AbstractTag\n color=\"blue\"\n tooltipTitle={`This is a concatenated container module that includes ${moduleCount} modules`}\n >\n concatenated container\n </AbstractTag>\n );\n};\nconst TotalBundledSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"geekblue\"\n tooltipTitle=\"The total output size of all the files in this folder. If you enabled minification, this value shows the minified size.\"\n >\n {`bundled size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst BundledSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"geekblue\"\n style={null}\n tooltipTitle=\"The final output size of this file. If you enabled minification, this value shows the minified size.\"\n >\n {`bundled size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst GzippedSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"orange\"\n style={null}\n tooltipTitle=\"The compressed file size that users actually download, as most web servers use gzip compression.\"\n >\n {`gzipped: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst TotalSourceSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n tooltipTitle=\"The total original size of all the files in this folder, before any transformations and minification.\"\n color=\"cyan\"\n >{`source size: ${formatSize(size)}`}</AbstractTag>\n );\n};\nconst SourceSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"cyan\"\n style={null}\n tooltipTitle=\"The original size of this file, before any transformations and minification.\"\n >\n {`source size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\n\nexport const AssetDetail: React.FC<{\n asset: SDK.AssetData;\n chunks: SDK.ChunkData[];\n modules: SDK.ModuleData[];\n moduleSizeLimit?: number;\n height?: number;\n root: string;\n}> = ({\n asset,\n chunks: includeChunks,\n modules: includeModules,\n moduleSizeLimit,\n height,\n root,\n}) => {\n const [moduleKeyword, setModuleKeyword] = useState('');\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [moduleJumpList, setModuleJumpList] = useState([] as number[]);\n const [showModuleGraphViewer, setShowModuleGraphViewer] = useState(false);\n const filteredModules = useMemo(() => {\n let res = includeModules.slice();\n if (moduleKeyword) {\n const regexp = new RegExp(moduleKeyword, 'i');\n res = res.filter((e) => regexp.test(e.path));\n }\n\n if (moduleSizeLimit) {\n res = res.filter((e) => e.size.parsedSize >= moduleSizeLimit);\n }\n\n return res;\n }, [includeModules, moduleKeyword, moduleSizeLimit]);\n\n const onSearch = (value: string) => setModuleKeyword(value);\n const openModuleGraphViewer = useCallback((modId: number[]) => {\n setShowModuleGraphViewer(true);\n setModuleJumpList(modId);\n }, []);\n\n useEffect(() => {\n setModuleKeyword('');\n setDefaultExpandAll(false);\n }, [asset]);\n\n useEffect(() => {\n setDefaultExpandAll(false);\n }, [moduleKeyword]);\n\n return (\n <ModuleGraphListContext.Provider\n value={{ moduleJumpList, setModuleJumpList }}\n >\n <Card\n className={styles.bundle}\n title={`Modules of \"${asset.path}\"`}\n style={\n {\n '--body-min-height': height + 'px',\n } as React.CSSProperties\n }\n classNames={{\n body: styles.bundleBody,\n }}\n size=\"small\"\n >\n {includeModules.length ? (\n <>\n <div>\n <ModulesStatistics\n modules={includeModules}\n chunks={includeChunks}\n filteredModules={filteredModules}\n />\n </div>\n <div>\n <Space>\n <KeywordInput\n placeholder=\"search module by keyword\"\n onChange={onSearch}\n key={asset.path}\n />\n <Button\n onClick={() => setDefaultExpandAll(true)}\n size=\"small\"\n icon={<ColumnHeightOutlined />}\n />\n </Space>\n </div>\n <AssetDetailTree\n assetPath={asset.path}\n includeModules={includeModules}\n filteredModules={filteredModules}\n defaultExpandAll={defaultExpandAll}\n moduleKeyword={moduleKeyword}\n openModuleGraphViewer={openModuleGraphViewer}\n />\n </>\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${asset.path}\" doesn't have any modules`}</Typography.Text>\n }\n />\n )}\n <ModuleGraphViewer\n id={\n moduleJumpList?.length\n ? moduleJumpList[moduleJumpList.length - 1]\n : ''\n }\n show={showModuleGraphViewer}\n setShow={setShowModuleGraphViewer}\n cwd={root}\n />\n </Card>\n </ModuleGraphListContext.Provider>\n );\n};\n\nlet defaultExpandedModulesKeys: React.Key[] = [];\nconst AssetDetailTree = memo(\n ({\n filteredModules,\n includeModules,\n defaultExpandAll,\n moduleKeyword,\n openModuleGraphViewer,\n assetPath,\n }: {\n filteredModules: SDK.ModuleData[];\n includeModules: SDK.ModuleData[];\n defaultExpandAll: boolean;\n moduleKeyword: string;\n openModuleGraphViewer: (moduleId: number[]) => void;\n assetPath: string;\n }) => {\n const ITEM_HEIGHT = 30;\n const PERMANENT_PERF_MODE = false;\n const DISABLE_PERF_MODE_SCROLL_DELAY = 150;\n\n // disable all the tooltips and popovers inside the tree?\n const [performanceMode, setPerformanceMode] = useState(PERMANENT_PERF_MODE);\n const [\n bundleTreeRef,\n { height: bundleTreeHeight, width: bundleTreeWidth },\n ] = useElementSize();\n\n const onScroll = useMemo(() => {\n if (PERMANENT_PERF_MODE) return undefined;\n const disablePerformanceMode = debounce(() => {\n setPerformanceMode(false);\n }, DISABLE_PERF_MODE_SCROLL_DELAY);\n const onScroll = () => {\n setPerformanceMode(true);\n disablePerformanceMode();\n };\n return onScroll;\n }, []);\n\n const treeData = useMemo(() => {\n // Normalize paths for comparison - convert backslashes to forward slashes\n const normalizePath = (path: string) => path.replace(/\\\\/g, '/');\n\n const filteredModulesMap: Map<string, ModuleData> = new Map();\n const files: string[] = [];\n for (const mod of filteredModules) {\n if (mod.path) {\n filteredModulesMap.set(normalizePath(mod.path), mod);\n files.push(mod.path);\n }\n }\n const includeModulesMap: Map<string, ModuleData> = new Map();\n for (const mod of includeModules) {\n if (mod.path) {\n includeModulesMap.set(normalizePath(mod.path), mod);\n }\n }\n\n const onFileEntryClick = (modId: number) =>\n openModuleGraphViewer([modId]);\n\n const treeData = createFileStructures({\n files,\n inlinedResourcePathKey,\n fileTitle(file, basename) {\n const mod = filteredModulesMap.get(normalizePath(file));\n\n if (!mod) return basename;\n\n return (\n <AssetDetailTreeFileEntry\n mod={mod}\n basename={basename}\n includeModules={includeModules}\n onClick={onFileEntryClick}\n />\n );\n },\n dirTitle(dir, defaultTitle) {\n // all these calculations can be done directly in AssetDetailTreeDirEntry component\n // but in that case they'll run on every component render\n // and here it happens only once on dependencies change\n const paths = getChildrenModule(dir, []);\n\n if (!paths.length) return defaultTitle;\n\n const { parsedSize, sourceSize } = paths.reduce(\n (acc, path) => {\n const mod = includeModulesMap.get(normalizePath(path));\n if (mod) {\n acc.sourceSize += mod.size?.sourceSize || 0;\n acc.parsedSize += mod.size?.parsedSize || 0;\n }\n return acc;\n },\n { sourceSize: 0, parsedSize: 0 },\n );\n return (\n <AssetDetailTreeDirEntry\n title={defaultTitle}\n parsedSize={parsedSize}\n sourceSize={sourceSize}\n />\n );\n },\n page: 'bundle',\n });\n return treeData;\n }, [filteredModules, openModuleGraphViewer]);\n\n return (\n <PopupContext.Provider value={{ enabled: !performanceMode }}>\n <div\n className={styles.bundleTree}\n style={\n {\n marginTop: Size.BasePadding,\n '--item-height': ITEM_HEIGHT + 'px',\n } as React.CSSProperties\n }\n >\n <div className={styles.bundleTreeViewport}>\n <div className={styles.bundleTreeInnerViewport} ref={bundleTreeRef}>\n {bundleTreeHeight > 0 && (\n <>\n {filteredModules.length ? (\n <DirectoryTree\n onScroll={onScroll}\n key={`tree_${moduleKeyword}_${defaultExpandAll}_${assetPath}`}\n selectable={false}\n virtual\n itemHeight={ITEM_HEIGHT}\n height={bundleTreeHeight}\n style={\n bundleTreeWidth\n ? { width: bundleTreeWidth + 'px' }\n : undefined\n }\n defaultExpandAll={\n defaultExpandAll || filteredModules.length <= 20\n }\n onExpand={(expandedKeys) => {\n defaultExpandedModulesKeys = expandedKeys;\n }}\n defaultExpandParent\n // @ts-ignore\n defaultExpandedKeys={\n defaultExpandedModulesKeys?.length\n ? defaultExpandedModulesKeys\n : treeData.length === 1\n ? [treeData[0].key]\n : []\n }\n treeData={treeData as AntdDataNode[]}\n />\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${moduleKeyword}\" can't match any modules`}</Typography.Text>\n }\n />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </PopupContext.Provider>\n );\n },\n);\n\nconst AssetDetailTreeDirEntry = memo(\n ({\n title,\n parsedSize,\n sourceSize,\n }: {\n title: string;\n parsedSize: number;\n sourceSize: number;\n }) => {\n const render = () => {\n return (\n <div className={styles.bundleTreeEntryContent}>\n <Popover content={title}>\n <Typography.Text className={styles.bundleTreeEntryTitle}>\n {title}\n </Typography.Text>\n </Popover>\n <div className={styles.divider} />\n <Space>\n {parsedSize > 0 ? (\n <>\n <TotalBundledSizeTag size={parsedSize} />\n <TotalSourceSizeTag size={sourceSize} />\n </>\n ) : (\n <TotalSourceSizeTag size={sourceSize} />\n )}\n </Space>\n </div>\n );\n };\n const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n return (\n <div className={styles.bundleTreeEntry}>\n <ErrorBoundary fallbackRender={renderWithoutPopups}>\n {render()}\n </ErrorBoundary>\n </div>\n );\n },\n);\n\nconst AssetDetailTreeFileEntry = memo(\n ({\n mod,\n basename,\n includeModules,\n onClick,\n }: {\n mod: SDK.ModuleData;\n basename: string;\n includeModules: SDK.ModuleData[];\n onClick: (modId: number) => void;\n }) => {\n const isConcatenation = mod.kind === SDK.ModuleKind.Concatenation;\n const { parsedSize = 0, sourceSize = 0, gzipSize = 0 } = mod.size;\n\n const renderSize = () => {\n if (parsedSize !== 0) {\n const sourceSizeTag = <SourceSizeTag size={sourceSize} />;\n const bundledSizeTag = <BundledSizeTag size={parsedSize} />;\n if (typeof gzipSize === 'number') {\n return (\n <Popover placement=\"bottom\" content={sourceSizeTag}>\n <Space direction=\"horizontal\">\n {bundledSizeTag}\n <GzippedSizeTag size={gzipSize} />\n </Space>\n </Popover>\n );\n } else {\n return (\n <Space direction=\"horizontal\">\n {bundledSizeTag}\n {sourceSizeTag}\n </Space>\n );\n }\n } else if (sourceSize !== 0) {\n // fallback to display tag for source size\n return <SourceSizeTag size={sourceSize} />;\n } else {\n return null;\n }\n };\n const renderContainedOtherModules = () => {\n const containedOtherModules =\n !isConcatenation &&\n parsedSize === 0 &&\n includeModules.filter(\n (e) => e !== mod && e.modules && e.modules.indexOf(mod.id) > -1,\n );\n if (containedOtherModules && containedOtherModules.length) {\n return (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n This module is concatenated into another container module:\n </Typography.Text>\n {containedOtherModules.map(({ id, path }) => {\n if (isJsDataUrl(path)) {\n return (\n <Typography.Paragraph\n ellipsis={{ rows: 4 }}\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {path}\n </Typography.Paragraph>\n );\n }\n\n const p = relative(dirname(mod.path), path);\n if (p.startsWith('javascript;charset=utf-8;base64,')) {\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n }\n\n return (\n <Typography.Text key={id} style={{ color: 'inherit' }} code>\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n })}\n </Space>\n }\n >\n <Tag color=\"green\">concatenated</Tag>\n </Tooltip>\n );\n } else {\n return null;\n }\n };\n const render = () => {\n return (\n <div className={styles.bundleTreeEntryContent}>\n <Popover\n content={`Open the ${basename}’s module reasons tree.`}\n placement=\"bottom\"\n >\n <div\n className={styles.bundleTreeEntryTitleWrap}\n onClick={() => onClick(mod.id)}\n >\n <Popover content={basename}>\n <Typography.Text className={styles.bundleTreeEntryTitle}>\n {basename}\n </Typography.Text>\n </Popover>\n <div className={styles.divider} />\n </div>\n </Popover>\n <Space>\n {renderSize()}\n {isConcatenation && (\n <ConcatenatedTag moduleCount={mod.modules?.length || 0} />\n )}\n {renderContainedOtherModules()}\n <ModuleCodeViewer data={mod} />\n </Space>\n </div>\n );\n };\n const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n return (\n <div className={styles.bundleTreeEntry}>\n <ErrorBoundary fallbackRender={renderWithoutPopups}>\n {render()}\n </ErrorBoundary>\n </div>\n );\n },\n);\n"],"names":["DirectoryTree","Tree","TAB_MAP","POPUPS_ENABLED_BY_DEFAULT","PopupContext","createContext","DisablePopups","children","usePopupsEnabled","use","Tooltip","props","enabled","BaseTooltip","Popover","BasePopover","EmptyCodeItem","Empty","ModuleCodeViewer","data","tab","setTab","useState","t","useI18n","TAB_LAB_MAP","path","TextDrawer","CodepenCircleOutlined","ServerAPIProvider","SDK","source","Card","Object","omitBy","s","k","e","v","Typography","CodeViewer","ModuleGraphViewer","id","show","setShow","cwd","modules","ModuleAnalyzeComponent","inlinedResourcePathKey","getChildrenModule","node","mods","n","ModulesStatistics","memo","chunks","filteredModules","sourceSize","parsedSize","filteredParsedSize","filteredSourceSize","useMemo","sumBy","Space","InfoCircleOutlined","Divider","formatSize","Bdg","defaultTagStyle","AbstractTag","color","tooltipTitle","style","Tag","undefined","ConcatenatedTag","moduleCount","TotalBundledSizeTag","size","BundledSizeTag","GzippedSizeTag","TotalSourceSizeTag","SourceSizeTag","AssetDetail","asset","includeChunks","includeModules","moduleSizeLimit","height","root","moduleKeyword","setModuleKeyword","defaultExpandAll","setDefaultExpandAll","moduleJumpList","setModuleJumpList","showModuleGraphViewer","setShowModuleGraphViewer","res","regexp","RegExp","onSearch","value","openModuleGraphViewer","useCallback","modId","useEffect","ModuleGraphListContext","styles","KeywordInput","Button","ColumnHeightOutlined","AssetDetailTree","defaultExpandedModulesKeys","assetPath","ITEM_HEIGHT","PERMANENT_PERF_MODE","DISABLE_PERF_MODE_SCROLL_DELAY","performanceMode","setPerformanceMode","bundleTreeRef","bundleTreeHeight","bundleTreeWidth","useElementSize","onScroll","disablePerformanceMode","debounce","treeData","normalizePath","filteredModulesMap","Map","files","mod","includeModulesMap","onFileEntryClick","createFileStructures","file","basename","AssetDetailTreeFileEntry","dir","defaultTitle","paths","acc","AssetDetailTreeDirEntry","Size","expandedKeys","title","render","renderWithoutPopups","ErrorBoundary","onClick","isConcatenation","gzipSize","renderSize","sourceSizeTag","bundledSizeTag","renderContainedOtherModules","containedOtherModules","isJsDataUrl","p","relative","dirname"],"mappings":"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"}
1
+ {"version":3,"file":"pages/BundleSize/components/asset.mjs","sources":["../../../../src/pages/BundleSize/components/asset.tsx"],"sourcesContent":["import {\n CodepenCircleOutlined,\n ColumnHeightOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons';\nimport { SDK } from '@rsdoctor/types';\nimport {\n Button,\n Card,\n Divider,\n Empty,\n Popover as BasePopover,\n Space,\n Tag,\n type TagProps,\n type TooltipProps,\n type PopoverProps,\n Tooltip as BaseTooltip,\n Tree,\n Typography,\n} from 'antd';\nimport { DataNode as AntdDataNode } from 'antd/es/tree';\nimport { debounce, omitBy, sumBy } from 'es-toolkit/compat';\nimport { dirname, relative } from 'path';\nimport React, {\n useEffect,\n useMemo,\n useState,\n memo,\n useCallback,\n use,\n createContext,\n} from 'react';\nimport { CodeViewer } from 'src/components/base';\nimport { Badge as Bdg } from '../../../components/Badge';\nimport { KeywordInput } from '../../../components/Form/keyword';\nimport { ServerAPIProvider } from '../../../components/Manifest';\nimport { TextDrawer } from '../../../components/TextDrawer';\nimport { Size } from '../../../constants';\nimport {\n DataNode,\n createFileStructures,\n formatSize,\n isJsDataUrl,\n useElementSize,\n useI18n,\n} from '../../../utils';\nimport { ModuleAnalyzeComponent } from '../../ModuleAnalyze';\nimport { ModuleGraphListContext } from '../config';\nimport styles from './asset.module.scss';\nimport { ModuleData } from '@rsdoctor/graph';\nimport { ErrorBoundary } from 'react-error-boundary';\n\nconst { DirectoryTree } = Tree;\n\nconst TAB_MAP = {\n source: 'source code',\n transformed: 'Transformed Code (After compile)',\n parsedSource: 'Bundled Code (After bundle and tree-shaking)',\n};\n\n// antd's tooltip/popover component often throws 185 error when rendered inside a virtual list.\n// this is used as a reset mechanism for the error boundary.\n// also these tooltips are a real performance killer\n// and they can be easily turned off by wrapping the problematic subtree in DisablePopups\nconst POPUPS_ENABLED_BY_DEFAULT = true;\nconst PopupContext = createContext({ enabled: POPUPS_ENABLED_BY_DEFAULT });\nconst DisablePopups = ({ children }: { children: any }) => (\n <PopupContext.Provider value={{ enabled: false }}>\n {children}\n </PopupContext.Provider>\n);\nconst usePopupsEnabled = (): boolean => use(PopupContext)?.enabled ?? true;\nconst Tooltip = (props: TooltipProps) => {\n const enabled = usePopupsEnabled();\n if (enabled) return <BaseTooltip {...props} />;\n else return props.children ?? null;\n};\nconst Popover = (props: PopoverProps) => {\n const enabled = usePopupsEnabled();\n if (enabled) return <BasePopover {...props} />;\n else return props.children ?? null;\n};\n\nconst EmptyCodeItem = () => (\n <Empty\n description={`Do not have the module code.\n (1) If you use the brief mode, there will not have any codes to show.\n (2) If you use lite mode, there will not have source codes.`}\n />\n);\n\nexport const ModuleCodeViewer: React.FC<{ data: SDK.ModuleData }> = ({\n data,\n}) => {\n const [tab, setTab] = useState('');\n const { t } = useI18n();\n\n const TAB_LAB_MAP: Record<string, string> = {\n source: 'Source Code',\n transformed: `Transformed Code(${t('After Compile')})`,\n parsedSource: `Bundled Code(${t('After Bundled')})`,\n };\n if (!data) return null;\n\n const { path } = data;\n\n return (\n <TextDrawer\n text=\"\"\n buttonProps={{\n size: 'small',\n icon: (\n <Popover content=\"Open the Codes Box\">\n <CodepenCircleOutlined />\n </Popover>\n ),\n type: 'default',\n }}\n buttonStyle={{ padding: `0 4px` }}\n drawerProps={{\n destroyOnClose: true,\n title: `Code of \"${path}\"`,\n }}\n >\n <ServerAPIProvider\n api={SDK.ServerAPI.API.GetModuleCodeByModuleId}\n body={{ moduleId: data.id }}\n >\n {(source) => {\n return (\n <>\n {!source['source'] &&\n !source['parsedSource'] &&\n !source['transformed'] ? (\n <EmptyCodeItem />\n ) : (\n <Card\n className=\"code-size-card\"\n style={{ width: '100%' }}\n tabList={Object.keys(omitBy(source, (s) => !s))\n .map((k) => ({ tab: k }))\n .map((e) => ({\n ...e,\n tab: TAB_LAB_MAP[e.tab],\n key: e.tab,\n }))}\n defaultActiveTabKey={\n source['parsedSource'] ? 'parsedSource' : 'source'\n }\n onTabChange={(v) => setTab(v)}\n tabBarExtraContent={\n <Popover\n placement=\"bottom\"\n title={\n <Typography.Title level={5}>Explain</Typography.Title>\n }\n content={\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: 30,\n }}\n >\n <div>\n <Typography.Text strong>Source: </Typography.Text>\n <Typography.Text>\n {TAB_MAP.source}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Transformed:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.transformed}\n </Typography.Text>\n </div>\n <div>\n <Typography.Text strong>\n Bundled Source:\n </Typography.Text>\n <Typography.Text>\n {TAB_MAP.parsedSource}\n </Typography.Text>\n </div>\n <br />\n <Typography.Text strong>{'More'}</Typography.Text>\n <Typography.Text>\n {t('CodeModeExplain')}\n </Typography.Text>\n </div>\n </>\n }\n trigger={'hover'}\n >\n <a href=\"#\">Explain</a>\n </Popover>\n }\n styles={{ body: { padding: 0, overflow: 'hidden' } }}\n >\n {source['parsedSource'] ||\n source['source'] ||\n source['transformed'] ? (\n <CodeViewer\n isEmbed\n code={\n tab\n ? source[tab as keyof SDK.ModuleSource]\n : source['parsedSource']\n ? source['parsedSource']\n : source['source']\n }\n filePath={path}\n />\n ) : (\n <EmptyCodeItem />\n )}\n </Card>\n )}\n </>\n );\n }}\n </ServerAPIProvider>\n </TextDrawer>\n );\n};\n\nexport const ModuleGraphViewer: React.FC<{\n id: number | string;\n show: boolean;\n setShow: (_show: boolean) => void;\n cwd: string;\n}> = ({ id, show, setShow, cwd }) => {\n if (!id) return null;\n\n return (\n <ServerAPIProvider api={SDK.ServerAPI.API.GetAllModuleGraph} body={{}}>\n {(modules) => (\n <ModuleAnalyzeComponent\n cwd={cwd}\n moduleId={id}\n modules={modules}\n show={show}\n setShow={setShow}\n />\n )}\n </ServerAPIProvider>\n );\n};\n\nconst inlinedResourcePathKey = '__RESOURCEPATH__';\n\nexport function getChildrenModule(node: DataNode, mods: string[]) {\n if (node.children) {\n node.children.forEach((n: DataNode) => {\n if (n.isLeaf) {\n mods.push(n[inlinedResourcePathKey]);\n } else {\n getChildrenModule(n, mods);\n }\n });\n }\n\n return mods;\n}\n\nexport const ModulesStatistics: React.FC<{\n modules: SDK.ModuleData[];\n chunks: SDK.ChunkData[];\n filteredModules: SDK.ModuleData[];\n}> = memo(({ modules, chunks, filteredModules }) => {\n const { sourceSize, parsedSize, filteredParsedSize, filteredSourceSize } =\n useMemo(() => {\n return {\n sourceSize: sumBy(modules, (e) => e.size.sourceSize),\n parsedSize: sumBy(modules, (e) => e.size.parsedSize),\n filteredSourceSize: sumBy(filteredModules, (e) => e.size.sourceSize),\n filteredParsedSize: sumBy(filteredModules, (e) => e.size.parsedSize),\n };\n }, [modules, filteredModules]);\n\n return (\n <Space>\n <Tooltip\n title={`total modules count is ${modules.length}, the filtered modules count is ${filteredModules.length}`}\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules: {filteredModules.length} / {modules.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules bundled size: {formatSize(parsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Total modules source size: {formatSize(sourceSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules bundled size: {formatSize(filteredParsedSize)}\n </Typography.Text>\n <Typography.Text style={{ color: 'inherit' }}>\n Filtered modules source size: {formatSize(filteredSourceSize)}\n </Typography.Text>\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Modules Size:\n {filteredParsedSize === parsedSize\n ? formatSize(parsedSize)\n : `${formatSize(filteredParsedSize)} / ${formatSize(parsedSize)}`}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n this asset includes {chunks.length} chunks:\n </Typography.Text>\n {chunks.map((e) => (\n <Bdg label=\"chunk\" value={e.name} key={e.name} />\n ))}\n </Space>\n }\n >\n <Space>\n <Typography.Text\n type=\"secondary\"\n style={{ fontSize: 12, fontWeight: 400 }}\n >\n Chunks: {chunks.length}\n </Typography.Text>\n <InfoCircleOutlined />\n </Space>\n </Tooltip>\n </Space>\n );\n});\n\nconst defaultTagStyle: React.CSSProperties = {\n margin: 'none',\n marginInlineEnd: 0,\n};\nconst AbstractTag = ({\n color,\n tooltipTitle,\n style = defaultTagStyle,\n children,\n}: {\n color: TagProps['color'];\n children: string;\n tooltipTitle: string;\n style?: React.CSSProperties | null;\n}) => {\n return (\n <Tooltip\n title={\n <Space>\n <Typography.Text style={{ color: 'inherit' }}>\n {tooltipTitle}\n </Typography.Text>\n </Space>\n }\n >\n <Tag color={color} style={style || undefined}>\n {children}\n </Tag>\n </Tooltip>\n );\n};\nconst ConcatenatedTag = ({ moduleCount }: { moduleCount: number }) => {\n return (\n <AbstractTag\n color=\"blue\"\n tooltipTitle={`This is a concatenated container module that includes ${moduleCount} modules`}\n >\n concatenated container\n </AbstractTag>\n );\n};\nconst TotalBundledSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"geekblue\"\n tooltipTitle=\"The total output size of all the files in this folder. If you enabled minification, this value shows the minified size.\"\n >\n {`bundled size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst BundledSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"geekblue\"\n style={null}\n tooltipTitle=\"The final output size of this file. If you enabled minification, this value shows the minified size.\"\n >\n {`bundled size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst GzippedSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"orange\"\n style={null}\n tooltipTitle=\"The compressed file size that users actually download, as most web servers use gzip compression.\"\n >\n {`gzipped: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\nconst TotalSourceSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n tooltipTitle=\"The total original size of all the files in this folder, before any transformations and minification.\"\n color=\"cyan\"\n >{`source size: ${formatSize(size)}`}</AbstractTag>\n );\n};\nconst SourceSizeTag = ({ size }: { size: number }) => {\n return (\n <AbstractTag\n color=\"cyan\"\n style={null}\n tooltipTitle=\"The original size of this file, before any transformations and minification.\"\n >\n {`source size: ${formatSize(size)}`}\n </AbstractTag>\n );\n};\n\nexport const AssetDetail: React.FC<{\n asset: SDK.AssetData;\n chunks: SDK.ChunkData[];\n modules: SDK.ModuleData[];\n moduleSizeLimit?: number;\n height?: number;\n root: string;\n}> = ({\n asset,\n chunks: includeChunks,\n modules: includeModules,\n moduleSizeLimit,\n height,\n root,\n}) => {\n const [moduleKeyword, setModuleKeyword] = useState('');\n const [defaultExpandAll, setDefaultExpandAll] = useState(false);\n const [moduleJumpList, setModuleJumpList] = useState([] as number[]);\n const [showModuleGraphViewer, setShowModuleGraphViewer] = useState(false);\n const filteredModules = useMemo(() => {\n let res = includeModules.slice();\n if (moduleKeyword) {\n const regexp = new RegExp(moduleKeyword, 'i');\n res = res.filter((e) => regexp.test(e.path));\n }\n\n if (moduleSizeLimit) {\n res = res.filter((e) => e.size.parsedSize >= moduleSizeLimit);\n }\n\n return res;\n }, [includeModules, moduleKeyword, moduleSizeLimit]);\n\n const onSearch = (value: string) => setModuleKeyword(value);\n const openModuleGraphViewer = useCallback((modId: number[]) => {\n setShowModuleGraphViewer(true);\n setModuleJumpList(modId);\n }, []);\n\n useEffect(() => {\n setModuleKeyword('');\n setDefaultExpandAll(false);\n }, [asset]);\n\n useEffect(() => {\n setDefaultExpandAll(false);\n }, [moduleKeyword]);\n\n return (\n <ModuleGraphListContext.Provider\n value={{ moduleJumpList, setModuleJumpList }}\n >\n <Card\n className={styles.bundle}\n title={`Modules of \"${asset.path}\"`}\n style={\n height\n ? ({\n '--body-min-height': height + 'px',\n } as React.CSSProperties)\n : undefined\n }\n classNames={{\n body: styles.bundleBody,\n }}\n size=\"small\"\n >\n {includeModules.length ? (\n <>\n <div>\n <ModulesStatistics\n modules={includeModules}\n chunks={includeChunks}\n filteredModules={filteredModules}\n />\n </div>\n <div>\n <Space>\n <KeywordInput\n placeholder=\"search module by keyword\"\n onChange={onSearch}\n key={asset.path}\n />\n <Button\n onClick={() => setDefaultExpandAll(true)}\n size=\"small\"\n icon={<ColumnHeightOutlined />}\n />\n </Space>\n </div>\n <AssetDetailTree\n assetPath={asset.path}\n includeModules={includeModules}\n filteredModules={filteredModules}\n defaultExpandAll={defaultExpandAll}\n moduleKeyword={moduleKeyword}\n openModuleGraphViewer={openModuleGraphViewer}\n />\n </>\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${asset.path}\" doesn't have any modules`}</Typography.Text>\n }\n />\n )}\n <ModuleGraphViewer\n id={\n moduleJumpList?.length\n ? moduleJumpList[moduleJumpList.length - 1]\n : ''\n }\n show={showModuleGraphViewer}\n setShow={setShowModuleGraphViewer}\n cwd={root}\n />\n </Card>\n </ModuleGraphListContext.Provider>\n );\n};\n\nlet defaultExpandedModulesKeys: React.Key[] = [];\nconst AssetDetailTree = memo(\n ({\n filteredModules,\n includeModules,\n defaultExpandAll,\n moduleKeyword,\n openModuleGraphViewer,\n assetPath,\n }: {\n filteredModules: SDK.ModuleData[];\n includeModules: SDK.ModuleData[];\n defaultExpandAll: boolean;\n moduleKeyword: string;\n openModuleGraphViewer: (moduleId: number[]) => void;\n assetPath: string;\n }) => {\n const ITEM_HEIGHT = 30;\n const PERMANENT_PERF_MODE = false;\n const DISABLE_PERF_MODE_SCROLL_DELAY = 150;\n const ENABLE_ANIMATIONS = false;\n\n // disable all the tooltips and popovers inside the tree?\n const [performanceMode, setPerformanceMode] = useState(PERMANENT_PERF_MODE);\n const [\n bundleTreeRef,\n { height: bundleTreeHeight, width: bundleTreeWidth },\n ] = useElementSize();\n\n const onScroll = useMemo(() => {\n if (PERMANENT_PERF_MODE) return undefined;\n const disablePerformanceMode = debounce(() => {\n setPerformanceMode(false);\n }, DISABLE_PERF_MODE_SCROLL_DELAY);\n const onScroll = () => {\n setPerformanceMode(true);\n disablePerformanceMode();\n };\n return onScroll;\n }, []);\n\n const treeData = useMemo(() => {\n // Normalize paths for comparison - convert backslashes to forward slashes\n const normalizePath = (path: string) => path.replace(/\\\\/g, '/');\n\n const filteredModulesMap: Map<string, ModuleData> = new Map();\n const files: string[] = [];\n for (const mod of filteredModules) {\n if (mod.path) {\n filteredModulesMap.set(normalizePath(mod.path), mod);\n files.push(mod.path);\n }\n }\n const includeModulesMap: Map<string, ModuleData> = new Map();\n for (const mod of includeModules) {\n if (mod.path) {\n includeModulesMap.set(normalizePath(mod.path), mod);\n }\n }\n\n const onFileEntryClick = (modId: number) =>\n openModuleGraphViewer([modId]);\n\n const treeData = createFileStructures({\n files,\n inlinedResourcePathKey,\n fileTitle(file, basename) {\n const mod = filteredModulesMap.get(normalizePath(file));\n\n if (!mod) return basename;\n\n return (\n <AssetDetailTreeFileEntry\n mod={mod}\n basename={basename}\n includeModules={includeModules}\n onClick={onFileEntryClick}\n />\n );\n },\n dirTitle(dir, defaultTitle) {\n // all these calculations can be done directly in AssetDetailTreeDirEntry component\n // but in that case they'll run on every component render\n // and here it happens only once on dependencies change\n const paths = getChildrenModule(dir, []);\n\n if (!paths.length) return defaultTitle;\n\n const { parsedSize, sourceSize } = paths.reduce(\n (acc, path) => {\n const mod = includeModulesMap.get(normalizePath(path));\n if (mod) {\n acc.sourceSize += mod.size?.sourceSize || 0;\n acc.parsedSize += mod.size?.parsedSize || 0;\n }\n return acc;\n },\n { sourceSize: 0, parsedSize: 0 },\n );\n return (\n <AssetDetailTreeDirEntry\n title={defaultTitle}\n parsedSize={parsedSize}\n sourceSize={sourceSize}\n />\n );\n },\n page: 'bundle',\n });\n return treeData;\n }, [filteredModules, openModuleGraphViewer]);\n\n return (\n <PopupContext.Provider value={{ enabled: !performanceMode }}>\n <div\n className={styles.bundleTree}\n style={\n {\n marginTop: Size.BasePadding,\n '--item-height': ITEM_HEIGHT + 'px',\n } as React.CSSProperties\n }\n >\n <div className={styles.bundleTreeViewport}>\n <div className={styles.bundleTreeInnerViewport} ref={bundleTreeRef}>\n {bundleTreeHeight > 0 && (\n <>\n {filteredModules.length ? (\n <DirectoryTree\n onScroll={onScroll}\n key={`tree_${moduleKeyword}_${defaultExpandAll}_${assetPath}`}\n selectable={false}\n virtual\n itemHeight={ITEM_HEIGHT}\n height={bundleTreeHeight}\n style={\n bundleTreeWidth\n ? { width: bundleTreeWidth + 'px' }\n : undefined\n }\n defaultExpandAll={\n defaultExpandAll || filteredModules.length <= 20\n }\n onExpand={(expandedKeys) => {\n defaultExpandedModulesKeys = expandedKeys;\n }}\n defaultExpandParent\n // @ts-ignore\n defaultExpandedKeys={\n defaultExpandedModulesKeys?.length\n ? defaultExpandedModulesKeys\n : treeData.length === 1\n ? [treeData[0].key]\n : []\n }\n treeData={treeData as AntdDataNode[]}\n motion={ENABLE_ANIMATIONS ? undefined : false}\n />\n ) : (\n <Empty\n description={\n <Typography.Text\n strong\n >{`\"${moduleKeyword}\" can't match any modules`}</Typography.Text>\n }\n />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </PopupContext.Provider>\n );\n },\n);\n\nconst AssetDetailTreeDirEntry = memo(\n ({\n title,\n parsedSize,\n sourceSize,\n }: {\n title: string;\n parsedSize: number;\n sourceSize: number;\n }) => {\n const render = () => {\n return (\n <div className={styles.bundleTreeEntryContent}>\n <Popover content={title}>\n <Typography.Text className={styles.bundleTreeEntryTitle}>\n {title}\n </Typography.Text>\n </Popover>\n <div className={styles.divider} />\n <Space>\n {parsedSize > 0 ? (\n <>\n <TotalBundledSizeTag size={parsedSize} />\n <TotalSourceSizeTag size={sourceSize} />\n </>\n ) : (\n <TotalSourceSizeTag size={sourceSize} />\n )}\n </Space>\n </div>\n );\n };\n const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n return (\n <div className={styles.bundleTreeEntry}>\n <ErrorBoundary fallbackRender={renderWithoutPopups}>\n {render()}\n </ErrorBoundary>\n </div>\n );\n },\n);\n\nconst AssetDetailTreeFileEntry = memo(\n ({\n mod,\n basename,\n includeModules,\n onClick,\n }: {\n mod: SDK.ModuleData;\n basename: string;\n includeModules: SDK.ModuleData[];\n onClick: (modId: number) => void;\n }) => {\n const isConcatenation = mod.kind === SDK.ModuleKind.Concatenation;\n const { parsedSize = 0, sourceSize = 0, gzipSize = 0 } = mod.size;\n\n const renderSize = () => {\n if (parsedSize !== 0) {\n const sourceSizeTag = <SourceSizeTag size={sourceSize} />;\n const bundledSizeTag = <BundledSizeTag size={parsedSize} />;\n if (typeof gzipSize === 'number') {\n return (\n <Popover placement=\"bottom\" content={sourceSizeTag}>\n <Space direction=\"horizontal\">\n {bundledSizeTag}\n <GzippedSizeTag size={gzipSize} />\n </Space>\n </Popover>\n );\n } else {\n return (\n <Space direction=\"horizontal\">\n {bundledSizeTag}\n {sourceSizeTag}\n </Space>\n );\n }\n } else if (sourceSize !== 0) {\n // fallback to display tag for source size\n return <SourceSizeTag size={sourceSize} />;\n } else {\n return null;\n }\n };\n const renderContainedOtherModules = () => {\n const containedOtherModules =\n !isConcatenation &&\n parsedSize === 0 &&\n includeModules.filter(\n (e) => e !== mod && e.modules && e.modules.indexOf(mod.id) > -1,\n );\n if (containedOtherModules && containedOtherModules.length) {\n return (\n <Tooltip\n title={\n <Space direction=\"vertical\">\n <Typography.Text style={{ color: 'inherit' }}>\n This module is concatenated into another container module:\n </Typography.Text>\n {containedOtherModules.map(({ id, path }) => {\n if (isJsDataUrl(path)) {\n return (\n <Typography.Paragraph\n ellipsis={{ rows: 4 }}\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {path}\n </Typography.Paragraph>\n );\n }\n\n const p = relative(dirname(mod.path), path);\n if (p.startsWith('javascript;charset=utf-8;base64,')) {\n return (\n <Typography.Text\n key={id}\n style={{ color: 'inherit', maxWidth: '100%' }}\n code\n >\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n }\n\n return (\n <Typography.Text key={id} style={{ color: 'inherit' }} code>\n {p[0] === '.' ? p : `./${p}`}\n </Typography.Text>\n );\n })}\n </Space>\n }\n >\n <Tag color=\"green\">concatenated</Tag>\n </Tooltip>\n );\n } else {\n return null;\n }\n };\n const render = () => {\n return (\n <div className={styles.bundleTreeEntryContent}>\n <Popover\n content={`Open the ${basename}’s module reasons tree.`}\n placement=\"bottom\"\n >\n <div\n className={styles.bundleTreeEntryTitleWrap}\n onClick={() => onClick(mod.id)}\n >\n <Popover content={basename}>\n <Typography.Text className={styles.bundleTreeEntryTitle}>\n {basename}\n </Typography.Text>\n </Popover>\n <div className={styles.divider} />\n </div>\n </Popover>\n <Space>\n {renderSize()}\n {isConcatenation && (\n <ConcatenatedTag moduleCount={mod.modules?.length || 0} />\n )}\n {renderContainedOtherModules()}\n <ModuleCodeViewer data={mod} />\n </Space>\n </div>\n );\n };\n const renderWithoutPopups = () => <DisablePopups>{render()}</DisablePopups>;\n return (\n <div className={styles.bundleTreeEntry}>\n <ErrorBoundary fallbackRender={renderWithoutPopups}>\n {render()}\n </ErrorBoundary>\n </div>\n );\n },\n);\n"],"names":["DirectoryTree","Tree","TAB_MAP","POPUPS_ENABLED_BY_DEFAULT","PopupContext","createContext","DisablePopups","children","usePopupsEnabled","use","Tooltip","props","enabled","BaseTooltip","Popover","BasePopover","EmptyCodeItem","Empty","ModuleCodeViewer","data","tab","setTab","useState","t","useI18n","TAB_LAB_MAP","path","TextDrawer","CodepenCircleOutlined","ServerAPIProvider","SDK","source","Card","Object","omitBy","s","k","e","v","Typography","CodeViewer","ModuleGraphViewer","id","show","setShow","cwd","modules","ModuleAnalyzeComponent","inlinedResourcePathKey","getChildrenModule","node","mods","n","ModulesStatistics","memo","chunks","filteredModules","sourceSize","parsedSize","filteredParsedSize","filteredSourceSize","useMemo","sumBy","Space","InfoCircleOutlined","Divider","formatSize","Bdg","defaultTagStyle","AbstractTag","color","tooltipTitle","style","Tag","undefined","ConcatenatedTag","moduleCount","TotalBundledSizeTag","size","BundledSizeTag","GzippedSizeTag","TotalSourceSizeTag","SourceSizeTag","AssetDetail","asset","includeChunks","includeModules","moduleSizeLimit","height","root","moduleKeyword","setModuleKeyword","defaultExpandAll","setDefaultExpandAll","moduleJumpList","setModuleJumpList","showModuleGraphViewer","setShowModuleGraphViewer","res","regexp","RegExp","onSearch","value","openModuleGraphViewer","useCallback","modId","useEffect","ModuleGraphListContext","styles","KeywordInput","Button","ColumnHeightOutlined","AssetDetailTree","defaultExpandedModulesKeys","assetPath","ITEM_HEIGHT","PERMANENT_PERF_MODE","DISABLE_PERF_MODE_SCROLL_DELAY","ENABLE_ANIMATIONS","performanceMode","setPerformanceMode","bundleTreeRef","bundleTreeHeight","bundleTreeWidth","useElementSize","onScroll","disablePerformanceMode","debounce","treeData","normalizePath","filteredModulesMap","Map","files","mod","includeModulesMap","onFileEntryClick","createFileStructures","file","basename","AssetDetailTreeFileEntry","dir","defaultTitle","paths","acc","AssetDetailTreeDirEntry","Size","expandedKeys","title","render","renderWithoutPopups","ErrorBoundary","onClick","isConcatenation","gzipSize","renderSize","sourceSizeTag","bundledSizeTag","renderContainedOtherModules","containedOtherModules","isJsDataUrl","p","relative","dirname"],"mappings":"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"}
@@ -1,8 +1,3 @@
1
- .bundle-JPUVg_ {
2
- flex-direction: column;
3
- display: flex;
4
- }
5
-
6
1
  .bundle-JPUVg_ .rc-tree-node-content-wrapper {
7
2
  font-size: 14px;
8
3
  }
@@ -24,24 +19,37 @@
24
19
  }
25
20
 
26
21
  .bundleBody-vDRay7 {
27
- min-height: var(--body-min-height, 600px);
28
- flex-direction: column;
22
+ min-height: var(--body-min-height, initial);
29
23
  justify-content: flex-start;
24
+ }
25
+
26
+ .bundle-JPUVg_, .bundleBody-vDRay7 {
27
+ flex-direction: column;
28
+ flex: 1;
30
29
  display: flex;
31
30
  }
32
31
 
33
32
  .bundleTree-ym_nR5 {
33
+ --tree-min-height: 300px;
34
34
  --x-pad: 20px;
35
35
  --y-pad: 14px;
36
36
  --scrollbar-width: 10px;
37
37
  --x-pad-minus-scrollbar: calc(var(--x-pad) - var(--scrollbar-width));
38
+ min-height: var(--tree-min-height);
38
39
  padding: var(--y-pad) var(--x-pad-minus-scrollbar) var(--y-pad) var(--x-pad);
40
+ resize: vertical;
39
41
  border: 1px solid #ebedf1;
40
42
  border-radius: 8px;
41
43
  flex: 1;
42
44
  display: flex;
43
45
  }
44
46
 
47
+ @media (max-height: 900px) {
48
+ .bundleTree-ym_nR5 {
49
+ --tree-min-height: 450px;
50
+ }
51
+ }
52
+
45
53
  .bundleTreeViewport-JRXX4Y {
46
54
  flex: 1;
47
55
  position: relative;
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./src/pages/BundleSize/components/asset.module.scss"],"names":[],"mappings":"AAAA;EACE,sBAAsB;EACtB,aAAa;AACf;;AAH2C;EAMzC,eAAe;AACjB;;AAPwG;EAUtG,cAAc;AAChB;;AAXiJ;EAc/I,WAAW;AACb;;AAfkM;EAkBhM,iBAAiB;AACnB;;AAnBqP;EAsBnP,aAAa;AACf;;AAvBiT;EA0B/S,yCAAyC;EACzC,sBAAsB;EACtB,2BAA2B;EAC3B,aAAa;AACf;;AA9Boa;EAiCla,aAAa;EACb,aAAa;EACb,uBAAuB;EACvB,oEAAoE;EACpE,4EAA4E;EAC5E,yBAAyB;EACzB,kBAAkB;EAClB,OAAO;EACP,aAAa;AACf;;AA1CorB;EA6ClrB,OAAO;EACP,kBAAkB;AACpB;;AA/CiuB;EAkD/tB,kBAAkB;EAClB,QAAQ;AACV;;AApDoxB;EAuDlxB,gCAAgC;EAChC,aAAa;EACb,kBAAkB;AACpB;;AA1Do2B;EA6Dl2B,YAAY;EACZ,oBAAoB;AACtB;;AA/D46B;EAkE16B,WAAW;EACX,mBAAmB;EACnB,qDAAqD;EACrD,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAzEmkC;EA4EjkC,uBAAuB;EACvB,iBAAiB;EACjB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AAClB;;AAlFssC;EAqFpsC,OAAO;EACP,mBAAmB;EACnB,aAAa;EACb,gBAAgB;AAClB;;AAzFuxC;EA4FrxC,mCAAmC;EACnC,YAAY;EACZ,eAAe;EACf,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;AACV","sourcesContent":[".bundle{display:flex;flex-direction:column}.bundle :global .rc-tree-node-content-wrapper{font-size:14px}.bundle :global .file-icon{margin-left:0}.bundle :global .ant-tree-indent-unit{width:10px}.bundle :global .ant-tree-iconEle{margin-right:2px}.bundle :global .ant-tree-node-content-wrapper{display:flex}.bundleBody{display:flex;flex-direction:column;justify-content:flex-start;min-height:var(--body-min-height, 600px)}.bundleTree{--x-pad: 20px;--y-pad: 14px;--scrollbar-width: 10px;--x-pad-minus-scrollbar: calc(var(--x-pad) - var(--scrollbar-width));display:flex;flex:1;padding:var(--y-pad) var(--x-pad-minus-scrollbar) var(--y-pad) var(--x-pad);border:1px solid #ebedf1;border-radius:8px}.bundleTreeViewport{flex:1;position:relative}.bundleTreeInnerViewport{position:absolute;inset:0}.bundleTreeEntry{display:flex;position:relative;height:var(--item-height, 30px)}.bundleTreeEntry :global span.ant-tag{margin:none;margin-inline-end:0px}.bundleTreeEntryContent{position:absolute;left:0;top:0;width:100%;display:flex;align-items:center;padding-inline-end:var(--x-pad-minus-scrollbar, 0px)}.bundleTreeEntryTitle{text-overflow:ellipsis;overflow:hidden;text-wrap:nowrap;font-size:14px;font-weight:400;color:rgba(0,0,0,.85)}.bundleTreeEntryTitleWrap{display:flex;flex:1;align-items:center;overflow:hidden}.divider{position:relative;top:4px;height:1px;min-width:10px;flex-grow:1;margin:0 10px;border-bottom:1px dashed rgba(0,0,0,.12)}"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./src/pages/BundleSize/components/asset.module.scss"],"names":[],"mappings":"AAAA;EACE,eAAe;AACjB;;AAF6D;EAK3D,cAAc;AAChB;;AANsG;EASpG,WAAW;AACb;;AAVuJ;EAarJ,iBAAiB;AACnB;;AAd0M;EAiBxM,aAAa;AACf;;AAlBsQ;EAqBpQ,2CAA2C;EAC3C,2BAA2B;AAC7B;;AAvBwV;EA0BtV,sBAAsB;EACtB,OAAO;EACP,aAAa;AACf;;AA7BsZ;EAgCpZ,wBAAwB;EACxB,aAAa;EACb,aAAa;EACb,uBAAuB;EACvB,oEAAoE;EACpE,kCAAkC;EAClC,4EAA4E;EAC5E,gBAAgB;EAChB,yBAAyB;EACzB,kBAAkB;EAClB,OAAO;EACP,aAAa;AACf;;AA5CivB;EAA0B;IAgDvwB,wBAAwB;EAC1B;AACF;;AAlDizB;EAqD/yB,OAAO;EACP,kBAAkB;AACpB;;AAvD81B;EA0D51B,kBAAkB;EAClB,QAAQ;AACV;;AA5Di5B;EA+D/4B,gCAAgC;EAChC,aAAa;EACb,kBAAkB;AACpB;;AAlEi+B;EAqE/9B,YAAY;EACZ,oBAAoB;AACtB;;AAvEyiC;EA0EviC,WAAW;EACX,mBAAmB;EACnB,qDAAqD;EACrD,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAjFgsC;EAoF9rC,uBAAuB;EACvB,iBAAiB;EACjB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AAClB;;AA1Fm0C;EA6Fj0C,OAAO;EACP,mBAAmB;EACnB,aAAa;EACb,gBAAgB;AAClB;;AAjGo5C;EAoGl5C,mCAAmC;EACnC,YAAY;EACZ,eAAe;EACf,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;AACV","sourcesContent":[".bundle :global .rc-tree-node-content-wrapper{font-size:14px}.bundle :global .file-icon{margin-left:0}.bundle :global .ant-tree-indent-unit{width:10px}.bundle :global .ant-tree-iconEle{margin-right:2px}.bundle :global .ant-tree-node-content-wrapper{display:flex}.bundleBody{justify-content:flex-start;min-height:var(--body-min-height, initial)}.bundle,.bundleBody{display:flex;flex-direction:column;flex:1}.bundleTree{--tree-min-height: 300px;--x-pad: 20px;--y-pad: 14px;--scrollbar-width: 10px;--x-pad-minus-scrollbar: calc(var(--x-pad) - var(--scrollbar-width));display:flex;flex:1;min-height:var(--tree-min-height);padding:var(--y-pad) var(--x-pad-minus-scrollbar) var(--y-pad) var(--x-pad);border:1px solid #ebedf1;border-radius:8px;resize:vertical}@media(max-height: 900px){.bundleTree{--tree-min-height: 450px}}.bundleTreeViewport{flex:1;position:relative}.bundleTreeInnerViewport{position:absolute;inset:0}.bundleTreeEntry{display:flex;position:relative;height:var(--item-height, 30px)}.bundleTreeEntry :global span.ant-tag{margin:none;margin-inline-end:0px}.bundleTreeEntryContent{position:absolute;left:0;top:0;width:100%;display:flex;align-items:center;padding-inline-end:var(--x-pad-minus-scrollbar, 0px)}.bundleTreeEntryTitle{text-overflow:ellipsis;overflow:hidden;text-wrap:nowrap;font-size:14px;font-weight:400;color:rgba(0,0,0,.85)}.bundleTreeEntryTitleWrap{display:flex;flex:1;align-items:center;overflow:hidden}.divider{position:relative;top:4px;height:1px;min-width:10px;flex-grow:1;margin:0 10px;border-bottom:1px dashed rgba(0,0,0,.12)}"],"sourceRoot":""}
@@ -1,4 +1,4 @@
1
- import { Client, SDK } from '@rsdoctor/types';
1
+ import { type Client, SDK } from '@rsdoctor/types';
2
2
  import React from 'react';
3
3
  import './index.sass';
4
4
  interface WebpackModulesOverallProps {