{"version":3,"file":"components/Card/size.mjs","sources":["../../../src/components/Card/size.tsx"],"sourcesContent":["import { Empty, Progress, Space, Tree } from 'antd';\nimport { sumBy } from 'es-toolkit/compat';\nimport React, { useMemo } from 'react';\nimport { RightOutlined } from '@ant-design/icons';\n\nimport { formatSize } from 'src/utils';\nimport { TextDrawer } from '../TextDrawer';\nimport { getFiles } from '../Overall';\nimport { ServerAPIProvider } from '../Manifest';\n\nimport { SDK, Client } from '@rsdoctor/types';\n\nimport styles from './size.module.scss';\n\nconst { DirectoryTree } = Tree;\nconst height = 100;\n\nexport interface SizeCardProps {\n  files: {\n    path: string;\n    size: number;\n    gzipSize?: number;\n  }[];\n  /**\n   * total size for origin files\n   */\n  total: number;\n  /**\n   * @default false\n   */\n  showProgress?: boolean;\n  tagBgColor: string;\n  type: string;\n}\nexport interface bgColorType {\n  bgColor: string;\n  tagBgColor: string;\n}\n\nexport const SizeCard: React.FC<SizeCardProps> = ({\n  files,\n  total,\n  showProgress = false,\n  type,\n}) => {\n  const fileType =\n    type.toLocaleLowerCase() as keyof Client.RsdoctorClientAssetsSummary;\n  const sum = useMemo(() => {\n    return sumBy(files, (e) => e.size);\n  }, [files]);\n  const gzipSum = useMemo(() => {\n    return sumBy(files, (e) => e.gzipSize ?? 0);\n  }, [files]);\n  const hasGzipSize = files.some((file) => file.gzipSize !== undefined);\n\n  return (\n    <ServerAPIProvider\n      api={SDK.ServerAPI.API.GetAssetsSummary}\n      body={{ withFileContent: false }}\n    >\n      {(res) => {\n        const type = fileType.includes('image') ? 'imgs' : fileType;\n        const { treeData } = getFiles(res[type].total);\n        return (\n          <Space style={{ height }} align=\"center\">\n            <Progress\n              type=\"circle\"\n              percent={+((sum / total) * 100).toFixed(2)}\n              strokeColor={{ '0%': '#108ee9', '100%': '#108ee9' }}\n              strokeWidth={12}\n              format={(percent) => (\n                <div className={styles.percentContainer}>\n                  <span style={{ marginTop: '10px' }}>{percent}%</span>\n                  <span className={styles.percentDescription}>\n                    total {type}\n                  </span>\n                </div>\n              )}\n            />\n            <div style={{ marginLeft: '10px' }}>\n              <div className={styles.sizeMetrics}>\n                <div className={styles.dataContainer}>\n                  <div className={styles.title}>Size</div>\n                  <div className={styles.description}>{formatSize(sum)}</div>\n                </div>\n                <div className={styles.dataContainer}>\n                  <div className={styles.title}>Gzipped</div>\n                  <div className={styles.description}>\n                    {hasGzipSize ? formatSize(gzipSum) : 'N/A'}\n                  </div>\n                </div>\n              </div>\n              <TextDrawer\n                buttonProps={{\n                  size: 'small',\n                }}\n                buttonStyle={{\n                  fontSize: 'inherit',\n                }}\n                drawerProps={{\n                  title: 'Files',\n                }}\n                text={\n                  <Space\n                    style={{ textAlign: showProgress ? 'left' : 'center' }}\n                    align=\"end\"\n                  >\n                    <Space direction=\"vertical\">\n                      <div className={styles.dataContainer}>\n                        <div className={styles.title}>\n                          <span style={{ marginRight: '5px' }}>Files</span>\n                          <RightOutlined />\n                        </div>\n                      </div>\n                    </Space>\n                  </Space>\n                }\n              >\n                {treeData.length ? (\n                  <DirectoryTree\n                    defaultExpandAll\n                    selectable={false}\n                    treeData={treeData}\n                    rootStyle={{\n                      minHeight: '800px',\n                      border: '1px solid rgba(235, 237, 241)',\n                    }}\n                  />\n                ) : (\n                  <div\n                    style={{\n                      position: 'relative',\n                      top: '50%',\n                      transform: 'translateY(-50%)',\n                    }}\n                  >\n                    <Empty style={{ height: '100%' }} />\n                  </div>\n                )}\n              </TextDrawer>\n              <div className={styles.description}>{files.length}</div>\n            </div>\n          </Space>\n        );\n      }}\n    </ServerAPIProvider>\n  );\n};\n"],"names":["DirectoryTree","Tree","height","SizeCard","files","total","showProgress","type","fileType","sum","useMemo","sumBy","e","gzipSum","hasGzipSize","file","undefined","ServerAPIProvider","SDK","res","treeData","getFiles","Space","Progress","percent","styles","formatSize","TextDrawer","RightOutlined","Empty"],"mappings":"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"}