diff --git a/package.json b/package.json index cf369ee8..033004f1 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "release-beta": "release-it --preRelease=beta --preReleaseBase=1" }, "dependencies": { - "@ant-design/icons": "^6.0.0", "@headlessui/react": "^2.2.2", "@tauri-apps/api": "^2.5.0", "@tauri-apps/plugin-autostart": "~2.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5fe7499..6e1ddd5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@ant-design/icons': - specifier: ^6.0.0 - version: 6.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@headlessui/react': specifier: ^2.2.2 version: 2.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -239,23 +236,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@ant-design/colors@8.0.0': - resolution: {integrity: sha512-6YzkKCw30EI/E9kHOIXsQDHmMvTllT8STzjMb4K2qzit33RW2pqCJP0sk+hidBntXxE+Vz4n1+RvCTfBw6OErw==} - - '@ant-design/fast-color@3.0.0': - resolution: {integrity: sha512-eqvpP7xEDm2S7dUzl5srEQCBTXZMmY3ekf97zI+M2DHOYyKdJGH0qua0JACHTqbkRnD/KHFQP9J1uMJ/XWVzzA==} - engines: {node: '>=8.x'} - - '@ant-design/icons-svg@4.4.2': - resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - - '@ant-design/icons@6.0.0': - resolution: {integrity: sha512-o0aCCAlHc1o4CQcapAwWzHeaW2x9F49g7P3IDtvtNXgHowtRWYb7kiubt8sQPFvfVIVU/jLw2hzeSlNt0FU+Uw==} - engines: {node: '>=8'} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -1005,12 +985,6 @@ packages: resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} - '@rc-component/util@1.2.1': - resolution: {integrity: sha512-AUVu6jO+lWjQnUOOECwu8iR0EdElQgWW5NBv5vP/Uf9dWbAX3udhMutRlkVXjuac2E40ghkFy+ve00mc/3Fymg==} - peerDependencies: - react: '>=18.0.0' - react-dom: '>=18.0.0' - '@react-aria/focus@3.20.2': resolution: {integrity: sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==} peerDependencies: @@ -1679,9 +1653,6 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -3161,9 +3132,6 @@ packages: typescript: optional: true - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-markdown@9.1.0: resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} peerDependencies: @@ -3809,23 +3777,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@ant-design/colors@8.0.0': - dependencies: - '@ant-design/fast-color': 3.0.0 - - '@ant-design/fast-color@3.0.0': {} - - '@ant-design/icons-svg@4.4.2': {} - - '@ant-design/icons@6.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@ant-design/colors': 8.0.0 - '@ant-design/icons-svg': 4.4.2 - '@rc-component/util': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - classnames: 2.5.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.3.0 @@ -4468,12 +4419,6 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@rc-component/util@1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.3.1 - '@react-aria/focus@3.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/interactions': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -5132,8 +5077,6 @@ snapshots: ci-info@4.2.0: {} - classnames@2.5.1: {} - cli-boxes@3.0.0: {} cli-cursor@5.0.0: @@ -6881,8 +6824,6 @@ snapshots: react-dom: 18.3.1(react@18.3.1) typescript: 5.8.3 - react-is@18.3.1: {} - react-markdown@9.1.0(@types/react@18.3.21)(react@18.3.1): dependencies: '@types/hast': 3.0.4 diff --git a/src/components/Assistant/FileList.tsx b/src/components/Assistant/FileList.tsx index b89596ae..4be3c741 100644 --- a/src/components/Assistant/FileList.tsx +++ b/src/components/Assistant/FileList.tsx @@ -6,9 +6,9 @@ import { useTranslation } from "react-i18next"; import { useChatStore, UploadFile } from "@/stores/chatStore"; import { useConnectStore } from "@/stores/connectStore"; -import FileIcon from "../Common/Icons/FileIcon"; import platformAdapter from "@/utils/platformAdapter"; import Tooltip2 from "../Common/Tooltip2"; +import FileIcon from "../Common/Icons/FileIcon"; interface FileListProps { sessionId: string; @@ -87,6 +87,7 @@ const FileList = (props: FileListProps) => { const { id, name, + path, extname, size, uploaded, @@ -109,7 +110,7 @@ const FileList = (props: FileListProps) => { )} - +
diff --git a/src/components/Assistant/SessionFile.tsx b/src/components/Assistant/SessionFile.tsx index 6e3cfb0f..1e324622 100644 --- a/src/components/Assistant/SessionFile.tsx +++ b/src/components/Assistant/SessionFile.tsx @@ -6,10 +6,10 @@ import { useTranslation } from "react-i18next"; import { useConnectStore } from "@/stores/connectStore"; import Checkbox from "@/components/Common/Checkbox"; -import FileIcon from "@/components/Common/Icons/FileIcon"; import { AttachmentHit } from "@/types/commands"; import { useAppStore } from "@/stores/appStore"; import platformAdapter from "@/utils/platformAdapter"; +import FileIcon from "../Common/Icons/FileIcon"; interface SessionFileProps { sessionId: string; @@ -44,8 +44,6 @@ const SessionFile = (props: SessionFileProps) => { sessionId, }); - console.log("get_attachment response", response); - setUploadedFiles(response?.hits?.hits ?? []); } else { } @@ -138,16 +136,16 @@ const SessionFile = (props: SessionFileProps) => { key={id} className="flex items-center justify-between min-h-12 px-2 rounded-[4px] bg-[#ededed] dark:bg-[#202126]" > -
- +
+
{name}
- {icon} - + {icon && {icon}} + {filesize(size, { standard: "jedec", spacer: "" })}
diff --git a/src/components/Common/Icons/FileIcon.tsx b/src/components/Common/Icons/FileIcon.tsx new file mode 100644 index 00000000..d30baf06 --- /dev/null +++ b/src/components/Common/Icons/FileIcon.tsx @@ -0,0 +1,24 @@ +import platformAdapter from "@/utils/platformAdapter"; +import { FC, useEffect, useState } from "react"; +import FontIcon from "./FontIcon"; +import { twMerge } from "tailwind-merge"; + +interface FileIconProps { + path: string; + className?: string; +} + +const FileIcon: FC = (props) => { + const { path, className } = props; + const [iconName, setIconName] = useState(""); + + useEffect(() => { + platformAdapter + .invokeBackend("get_file_icon", { path }) + .then(setIconName); + }); + + return ; +}; + +export default FileIcon; diff --git a/src/components/Common/Icons/FileIcon/AudioIcon.tsx b/src/components/Common/Icons/FileIcon/AudioIcon.tsx deleted file mode 100644 index e94c954d..00000000 --- a/src/components/Common/Icons/FileIcon/AudioIcon.tsx +++ /dev/null @@ -1,21 +0,0 @@ -const AudioIcon = () => { - return ( - - audio - - - - - ); -}; - -export default AudioIcon; diff --git a/src/components/Common/Icons/FileIcon/VideoIcon.tsx b/src/components/Common/Icons/FileIcon/VideoIcon.tsx deleted file mode 100644 index b7924f4d..00000000 --- a/src/components/Common/Icons/FileIcon/VideoIcon.tsx +++ /dev/null @@ -1,21 +0,0 @@ -const VideoIcon = () => { - return ( - - video - - - - - ); -}; - -export default VideoIcon; diff --git a/src/components/Common/Icons/FileIcon/index.tsx b/src/components/Common/Icons/FileIcon/index.tsx deleted file mode 100644 index aa913bcf..00000000 --- a/src/components/Common/Icons/FileIcon/index.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import { - FileExcelFilled, - FileImageFilled, - FileMarkdownFilled, - FilePdfFilled, - FilePptFilled, - FileTextFilled, - FileWordFilled, - FileZipFilled, -} from "@ant-design/icons"; - -import AudioIcon from "./AudioIcon"; -import VideoIcon from "./VideoIcon"; -import { FC, useMemo } from "react"; -import clsx from "clsx"; - -interface FileIconProps { - extname: string; - className?: string; -} - -const FileIcon: FC = (props) => { - const { extname, className } = props; - - const presetFileIcons = [ - { - icon: , - color: "#22b35e", - extnames: ["xlsx", "xls", "csv", "xlsm", "xltx", "xltm", "xlsb"], - }, - { - icon: , - color: "#13c2c2", - extnames: [ - "png", - "jpg", - "jpeg", - "gif", - "bmp", - "webp", - "svg", - "ico", - "tiff", - "raw", - "heic", - "psd", - "ai", - ], - }, - { - icon: , - color: "#722ed1", - extnames: ["md", "mdx", "markdown", "mdown", "mkd", "mkdn"], - }, - { - icon: , - color: "#ff4d4f", - extnames: ["pdf", "xps", "oxps"], - }, - { - icon: , - color: "#d04423", - extnames: [ - "ppt", - "pptx", - "pps", - "ppsx", - "pot", - "potx", - "pptm", - "potm", - "ppsm", - ], - }, - { - icon: , - color: "#1677ff", - extnames: ["doc", "docx", "dot", "dotx", "docm", "dotm", "rtf", "odt"], - }, - { - icon: , - color: "#fab714", - extnames: [ - "zip", - "rar", - "7z", - "tar", - "gz", - "bz2", - "xz", - "tgz", - "iso", - "dmg", - ], - }, - { - icon: , - color: "#7b61ff", - extnames: [ - "mp4", - "avi", - "mov", - "wmv", - "flv", - "mkv", - "webm", - "m4v", - "mpeg", - "mpg", - "3gp", - "rmvb", - "ts", - ], - }, - { - icon: , - color: "#eb2f96", - extnames: [ - "mp3", - "wav", - "flac", - "ape", - "aac", - "ogg", - "wma", - "m4a", - "opus", - "ac3", - "mid", - "midi", - ], - }, - ]; - - const [icon, iconColor] = useMemo(() => { - for (const item of presetFileIcons) { - const { icon, color, extnames } = item; - - if (extnames.includes(extname)) { - return [icon, color]; - } - } - - return [, "#8c8c8c"]; - }, [extname]); - - return ( -
- {icon} -
- ); -}; - -export default FileIcon; diff --git a/src/components/Search/InputUpload.tsx b/src/components/Search/InputUpload.tsx index 7bc4323b..2d0e4613 100644 --- a/src/components/Search/InputUpload.tsx +++ b/src/components/Search/InputUpload.tsx @@ -59,7 +59,6 @@ const InputUpload: FC = (props) => { captureWindowScreenshot, openFileDialog, getFileMetadata, - getFileIcon, } = props; const { t, i18n } = useTranslation(); const { uploadFiles, setUploadFiles } = useChatStore(); @@ -105,7 +104,6 @@ const InputUpload: FC = (props) => { ...stat, id: nanoid(), path, - icon: await getFileIcon(path, 256), }); } diff --git a/src/stores/chatStore.ts b/src/stores/chatStore.ts index a2903ae9..dcb2c936 100644 --- a/src/stores/chatStore.ts +++ b/src/stores/chatStore.ts @@ -8,7 +8,6 @@ import { Metadata } from "tauri-plugin-fs-pro-api"; export interface UploadFile extends Metadata { id: string; path: string; - icon: string; uploaded?: boolean; attachmentId?: string; uploadFailed?: boolean;