From 0e8c053cee18b24cb09f0a1755d438578d7a3ff0 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Mon, 14 Apr 2025 00:18:11 +0800 Subject: [PATCH] feat: enhance styling and icon consistency across components --- .../src/assets/images/providers/aihubmix.jpg | Bin 34470 -> 0 bytes .../src/assets/images/providers/aihubmix.webp | Bin 0 -> 8198 bytes src/renderer/src/assets/styles/ant.scss | 8 +++++ src/renderer/src/assets/styles/index.scss | 2 +- .../src/components/CustomCollapse.tsx | 2 +- src/renderer/src/components/EmojiIcon.tsx | 32 +++++++++++++++++ .../src/components/Icons/VisionIcon.tsx | 7 ++-- .../components/Popups/AddAssistantPopup.tsx | 12 +++---- src/renderer/src/components/app/Sidebar.tsx | 8 ++--- src/renderer/src/config/providers.ts | 2 +- src/renderer/src/context/AntdProvider.tsx | 7 ++-- src/renderer/src/i18n/locales/en-us.json | 2 +- .../src/pages/home/Inputbar/Inputbar.tsx | 2 +- .../home/Inputbar/KnowledgeBaseButton.tsx | 4 +-- .../src/pages/home/Messages/CitationsList.tsx | 2 +- .../src/pages/home/Messages/MessageTools.tsx | 2 +- .../src/pages/home/Messages/Prompt.tsx | 5 ++- .../src/pages/home/Tabs/AssistantItem.tsx | 33 ++---------------- src/renderer/src/pages/home/Tabs/index.tsx | 8 +++++ .../home/components/SelectModelButton.tsx | 4 +-- .../src/pages/knowledge/KnowledgeContent.tsx | 28 ++------------- .../settings/DataSettings/DataSettings.tsx | 12 +++---- .../settings/ProviderSettings/ModelList.tsx | 7 ++-- .../ProviderSettings/ProviderSetting.tsx | 9 ++--- src/renderer/src/services/AssistantService.ts | 2 +- 25 files changed, 93 insertions(+), 107 deletions(-) delete mode 100644 src/renderer/src/assets/images/providers/aihubmix.jpg create mode 100644 src/renderer/src/assets/images/providers/aihubmix.webp create mode 100644 src/renderer/src/components/EmojiIcon.tsx diff --git a/src/renderer/src/assets/images/providers/aihubmix.jpg b/src/renderer/src/assets/images/providers/aihubmix.jpg deleted file mode 100644 index ba96e631bd6ad9c48a248f00389f83a60f700ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34470 zcmbT6q&@SJt=?73)y|bD$=U?cO>pW@|r)3v~O1Z z;popH{@iB}nu6w$@I3du)Q7hE)C9jd3PR7hWYv}3eigwRd0(SH^0K0KiKs%yqx9!4 zX7uFG5D~Wj-$|c@N-UoyaUZ*F(`2vUE1Sf?^X1QF`PYN&4^PV8Xvco!Tqt&s8Gy)0 zjXyaBnFBw}{kQ{GA8896B$vB@1tSW^sSFBoBVeSBO2v4e{F$2Y#z6oVwWSWA!Up4X zVo~*K6lo$);p9p}lsmB|iYvo=^^o*nT=$y$5Rs_DsQkW9pI+PkJA>JTVx+4;Khu?m z1kUj3aXRLda4 z-x|hQQtHc}_KSNj_$0z2=MUqs*Fkz~y*8q_eBgJpye{k!Yt#REcmE{t%v-SQ(9In& z7efWhD}K?1+Wm%2=ZmS9!1ya1Fb%7+;L<%544dy`AgSYgNZu+{o__rpg>^MW9WIXI zAt7UNUHGsQY8aIW@B0QJ0Bm(hDnw(!5TXU(!D<#@X;JBgCXvuUf~sx3vOF2DtZOAZRVo*8(=XllC* zC?mw&Nw~0f-uf?VH8@u&$bf9Fxe!Nohjxk{Z?>pp91JCrnbnGRjp$0SKsXxMSM< zvjhelSs^@FJVJe%PaF$|RHGTnR cH;woP{gFD?a=z<^-^{b@9!XqqXP+V012q& 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 diff --git a/src/renderer/src/assets/images/providers/aihubmix.webp b/src/renderer/src/assets/images/providers/aihubmix.webp new file mode 100644 index 0000000000000000000000000000000000000000..6201815c2541c9d541deee034e7ddcafa8082262 GIT binary patch literal 8198 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 = ({ borderTopRightRadius: '8px' }, body: { - borderTop: '0.5px solid var(--color-border)' + borderTop: 'none' } } diff --git a/src/renderer/src/components/EmojiIcon.tsx b/src/renderer/src/components/EmojiIcon.tsx new file mode 100644 index 00000000..71804be8 --- /dev/null +++ b/src/renderer/src/components/EmojiIcon.tsx @@ -0,0 +1,32 @@ +import { getLeadingEmoji } from '@renderer/utils' +import styled from 'styled-components' + +const EmojiIcon = styled.div<{ $emoji: string }>` + width: 26px; + height: 26px; + border-radius: 13px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + font-size: 15px; + position: relative; + overflow: hidden; + margin-right: 3px; + &:before { + width: 100%; + height: 100%; + content: ${({ $emoji }) => `'${getLeadingEmoji($emoji || ' ')}'`}; + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 200%; + transform: scale(1.5); + filter: blur(5px); + opacity: 0.4; + } +` + +export default EmojiIcon diff --git a/src/renderer/src/components/Icons/VisionIcon.tsx b/src/renderer/src/components/Icons/VisionIcon.tsx index e95608d9..4ab4c408 100644 --- a/src/renderer/src/components/Icons/VisionIcon.tsx +++ b/src/renderer/src/components/Icons/VisionIcon.tsx @@ -1,5 +1,5 @@ -import { EyeOutlined } from '@ant-design/icons' import { Tooltip } from 'antd' +import { ImageIcon } from 'lucide-react' import React, { FC } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -10,7 +10,7 @@ const VisionIcon: FC, return ( - + ) @@ -22,9 +22,8 @@ const Container = styled.div` align-items: center; ` -const Icon = styled(EyeOutlined)` +const Icon = styled(ImageIcon)` color: var(--color-primary); - font-size: 15px; margin-right: 6px; ` diff --git a/src/renderer/src/components/Popups/AddAssistantPopup.tsx b/src/renderer/src/components/Popups/AddAssistantPopup.tsx index b091e832..77edaacb 100644 --- a/src/renderer/src/components/Popups/AddAssistantPopup.tsx +++ b/src/renderer/src/components/Popups/AddAssistantPopup.tsx @@ -13,6 +13,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' +import EmojiIcon from '../EmojiIcon' import { HStack } from '../Layout' import Scrollbar from '../Scrollbar' @@ -186,12 +187,9 @@ const PopupContainer: React.FC = ({ resolve }) => { onClick={() => onCreateAssistant(agent)} className={`agent-item ${agent.id === 'default' ? 'default' : ''} ${index === selectedIndex ? 'keyboard-selected' : ''}`} onMouseEnter={() => setSelectedIndex(index)}> - - {agent.emoji} {agent.name} + + {agent.emoji} + {agent.name} {agent.id === 'default' && {t('agents.tag.system')}} {agent.type === 'agent' && {t('agents.tag.agent')}} @@ -220,13 +218,11 @@ const AgentItem = styled.div` margin-bottom: 8px; cursor: pointer; overflow: hidden; - border: 1px solid transparent; &.default { background-color: var(--color-background-mute); } &.keyboard-selected { background-color: var(--color-background-mute); - border: 1px solid var(--color-primary); } .anticon { font-size: 16px; diff --git a/src/renderer/src/components/app/Sidebar.tsx b/src/renderer/src/components/app/Sidebar.tsx index 2093e484..198e49a4 100644 --- a/src/renderer/src/components/app/Sidebar.tsx +++ b/src/renderer/src/components/app/Sidebar.tsx @@ -12,15 +12,15 @@ import type { MenuProps } from 'antd' import { Avatar, Dropdown, Tooltip } from 'antd' import { CircleHelp, + FileSearch, Folder, Languages, LayoutGrid, - LibraryBig, MessageSquareQuote, Moon, Palette, Settings, - Sparkles, + Sparkle, Sun } from 'lucide-react' import { FC, useEffect } from 'react' @@ -131,11 +131,11 @@ const MainMenus: FC = () => { const iconMap = { assistants: , - agents: , + agents: , paintings: , translate: , minapp: , - knowledge: , + knowledge: , files: } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 54d9f9c4..f90de198 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -1,7 +1,7 @@ import ZhinaoProviderLogo from '@renderer/assets/images/models/360.png' import HunyuanProviderLogo from '@renderer/assets/images/models/hunyuan.png' import AzureProviderLogo from '@renderer/assets/images/models/microsoft.png' -import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg' +import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.webp' import AlayaNewProviderLogo from '@renderer/assets/images/providers/alayanew.webp' import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png' import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' diff --git a/src/renderer/src/context/AntdProvider.tsx b/src/renderer/src/context/AntdProvider.tsx index 93dcbf2c..094144d8 100644 --- a/src/renderer/src/context/AntdProvider.tsx +++ b/src/renderer/src/context/AntdProvider.tsx @@ -33,11 +33,10 @@ const AntdProvider: FC = ({ children }) => { boxShadowSecondary: 'none', defaultShadow: 'none', dangerShadow: 'none', - primaryShadow: 'none', - borderRadius: 20 + primaryShadow: 'none' }, - Select: { - borderRadius: 20 + Collapse: { + headerBg: 'transparent' } }, token: { diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 51c0c4e1..0088d842 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -33,7 +33,7 @@ }, "assistants": { "title": "Assistants", - "abbr": "Assistant", + "abbr": "Assistants", "settings.title": "Assistant Settings", "clear.content": "Clearing the topic will delete all topics and files in the assistant. Are you sure you want to continue?", "clear.title": "Clear topics", diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 00d6cb75..93d31e1a 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -932,7 +932,7 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic, topic }) = - + = ({ ref, selectedBases, onSelect, disabled return ( - + ) diff --git a/src/renderer/src/pages/home/Messages/CitationsList.tsx b/src/renderer/src/pages/home/Messages/CitationsList.tsx index 90926220..75f87ebe 100644 --- a/src/renderer/src/pages/home/Messages/CitationsList.tsx +++ b/src/renderer/src/pages/home/Messages/CitationsList.tsx @@ -34,7 +34,7 @@ const CitationsList: React.FC = ({ citations }) => { {citation.showFavicon && citation.url && ( )} - + {citation.title ? citation.title : {citation.hostname}} diff --git a/src/renderer/src/pages/home/Messages/MessageTools.tsx b/src/renderer/src/pages/home/Messages/MessageTools.tsx index dcc65c63..23cd0036 100644 --- a/src/renderer/src/pages/home/Messages/MessageTools.tsx +++ b/src/renderer/src/pages/home/Messages/MessageTools.tsx @@ -263,7 +263,7 @@ const ToolResponseContainer = styled.div` padding: 12px 16px; overflow: auto; max-height: 300px; - border-top: 1px solid var(--color-border); + border-top: none; position: relative; ` diff --git a/src/renderer/src/pages/home/Messages/Prompt.tsx b/src/renderer/src/pages/home/Messages/Prompt.tsx index 5a5c678a..4de68092 100644 --- a/src/renderer/src/pages/home/Messages/Prompt.tsx +++ b/src/renderer/src/pages/home/Messages/Prompt.tsx @@ -32,10 +32,9 @@ const Prompt: FC = ({ assistant, topic }) => { const Container = styled.div<{ $isDark: boolean }>` padding: 10px 20px; margin: 5px 20px 0 20px; - border-radius: 6px; + border-radius: 10px; cursor: pointer; - border: 0.5px solid var(--color-border); - background-color: ${({ $isDark }) => ($isDark ? 'var(--color-background-opacity)' : 'transparent')}; + border: 1px solid var(--color-border); ` const Text = styled.div` diff --git a/src/renderer/src/pages/home/Tabs/AssistantItem.tsx b/src/renderer/src/pages/home/Tabs/AssistantItem.tsx index 79eb7755..35d61e00 100644 --- a/src/renderer/src/pages/home/Tabs/AssistantItem.tsx +++ b/src/renderer/src/pages/home/Tabs/AssistantItem.tsx @@ -8,6 +8,7 @@ import { SortDescendingOutlined } from '@ant-design/icons' import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' +import EmojiIcon from '@renderer/components/EmojiIcon' import CopyIcon from '@renderer/components/Icons/CopyIcon' import { useAssistant } from '@renderer/hooks/useAssistant' import { useAssistants } from '@renderer/hooks/useAssistant' @@ -215,11 +216,11 @@ const AssistantItem: FC = ({ assistant, isActive, onSwitch, /> ) : ( assistantIconType === 'emoji' && ( - {assistant.emoji || assistantName.slice(0, 1)} - + ) )} {assistantName} @@ -270,34 +271,6 @@ const AssistantNameRow = styled.div` gap: 8px; ` -const AssistantEmoji = styled.div<{ $emoji: string }>` - width: 26px; - height: 26px; - border-radius: 13px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - font-size: 15px; - position: relative; - overflow: hidden; - margin-right: 3px; - &:before { - width: 100%; - height: 100%; - content: ${({ $emoji }) => `'${$emoji || ' '}'`}; - position: absolute; - inset: 0; - display: flex; - align-items: center; - justify-content: center; - font-size: 200%; - transform: scale(1.5); - filter: blur(5px); - opacity: 0.4; - } -` - const AssistantName = styled.div` font-size: 13px; ` diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx index 1da312a7..06ad4516 100644 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ b/src/renderer/src/pages/home/Tabs/index.tsx @@ -184,6 +184,9 @@ const Segmented = styled(AntSegmented)` font-size: 13px; height: 100%; } + .ant-segmented-item-label[aria-selected='true'] { + color: var(--color-text); + } .iconfont { font-size: 13px; margin-left: -2px; @@ -204,6 +207,11 @@ const Segmented = styled(AntSegmented)` border-radius: var(--list-item-border-radius); box-shadow: none; } + .ant-segmented-item-label, + .ant-segmented-item-icon { + display: flex; + align-items: center; + } /* These styles ensure the same appearance as before */ border-radius: 0; box-shadow: none; diff --git a/src/renderer/src/pages/home/components/SelectModelButton.tsx b/src/renderer/src/pages/home/components/SelectModelButton.tsx index 8c629a26..ce05c18e 100644 --- a/src/renderer/src/pages/home/components/SelectModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectModelButton.tsx @@ -1,5 +1,4 @@ import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' -import ModelTags from '@renderer/components/ModelTags' import SelectModelPopup from '@renderer/components/Popups/SelectModelPopup' import { isLocalAi } from '@renderer/config/env' import { useAssistant } from '@renderer/hooks/useAssistant' @@ -33,13 +32,12 @@ const SelectModelButton: FC = ({ assistant }) => { const providerName = getProviderName(model?.provider) return ( - + {model ? model.name : t('button.select_model')} {providerName ? '| ' + providerName : ''} - ) diff --git a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx index afe1b831..cf3711c4 100644 --- a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx +++ b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx @@ -13,7 +13,7 @@ import { formatFileSize } from '@renderer/utils' import { bookExts, documentExts, textExts, thirdPartyApplicationExts } from '@shared/config/constant' import { Alert, Button, Dropdown, Empty, message, Tag, Tooltip, Upload } from 'antd' import dayjs from 'dayjs' -import { ChevronsDown, ChevronsUp, Plus, Search, Settings2 } from 'lucide-react' +import { ChevronsDown, ChevronsUp, Plus, Settings2 } from 'lucide-react' import VirtualList from 'rc-virtual-list' import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -21,7 +21,6 @@ import styled from 'styled-components' import CustomCollapse from '../../components/CustomCollapse' import FileItem from '../files/FileItem' -import KnowledgeSearchPopup from './components/KnowledgeSearchPopup' import KnowledgeSettingsPopup from './components/KnowledgeSettingsPopup' import StatusIcon from './components/StatusIcon' @@ -58,7 +57,6 @@ const KnowledgeContent: FC = ({ selectedBase }) => { } = useKnowledge(selectedBase.id || '') const providerName = getProviderName(base?.model.provider || '') - const rerankModelProviderName = getProviderName(base?.rerankModel?.provider || '') const disabled = !base?.version || !providerName if (!base) { @@ -239,7 +237,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => {
- + {base.model.name}
@@ -248,30 +246,8 @@ const KnowledgeContent: FC = ({ selectedBase }) => { {t('models.dimensions', { dimensions: base.dimensions || 0 })} - {base.rerankModel && ( -
-
- -
- -
- - {base.rerankModel?.name} - -
-
-
- )} -