diff --git a/src/renderer/src/assets/styles/ant.scss b/src/renderer/src/assets/styles/ant.scss
index f311510c0c..38baefa569 100644
--- a/src/renderer/src/assets/styles/ant.scss
+++ b/src/renderer/src/assets/styles/ant.scss
@@ -203,6 +203,20 @@
overflow-x: hidden;
}
+.ant-dropdown-menu {
+ max-height: 40vh;
+ overflow-y: auto;
+ border: 0.5px solid var(--color-border);
+ border-radius: 16px;
+
+ .ant-dropdown-menu-item {
+ padding: 5px;
+ }
+}
+.ant-dropdown-arrow + .ant-dropdown-menu {
+ border: none;
+}
+
.ant-collapse {
border: 1px solid var(--color-border);
.ant-color-picker & {
diff --git a/src/renderer/src/components/Selector.tsx b/src/renderer/src/components/Selector.tsx
index 44b30bb7fc..fa7ac35359 100644
--- a/src/renderer/src/components/Selector.tsx
+++ b/src/renderer/src/components/Selector.tsx
@@ -102,6 +102,7 @@ const SelectorStyle = createGlobalStyle`
.ant-dropdown-menu {
max-height: 40vh;
overflow-y: auto;
+ border: 0.5px solid var(--color-border);
}
`
diff --git a/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx b/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx
index 0d22988787..5e1813a6bb 100644
--- a/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx
+++ b/src/renderer/src/pages/home/MainSidebar/MainSidebar.tsx
@@ -1,23 +1,27 @@
import EmojiAvatar from '@renderer/components/Avatar/EmojiAvatar'
import UserPopup from '@renderer/components/Popups/UserPopup'
-import { UserAvatar } from '@renderer/config/env'
+import { AppLogo, UserAvatar } from '@renderer/config/env'
import { useTheme } from '@renderer/context/ThemeProvider'
import { useAssistants } from '@renderer/hooks/useAssistant'
import useAvatar from '@renderer/hooks/useAvatar'
import { useChat } from '@renderer/hooks/useChat'
+import { useMinappPopup } from '@renderer/hooks/useMinappPopup'
import { useSettings } from '@renderer/hooks/useSettings'
import { useShortcut } from '@renderer/hooks/useShortcuts'
import { useShowAssistants } from '@renderer/hooks/useStore'
+import i18n from '@renderer/i18n'
import AssistantItem from '@renderer/pages/home/Tabs/components/AssistantItem'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import { ThemeMode } from '@renderer/types'
import { isEmoji } from '@renderer/utils'
-import { Avatar, Tooltip } from 'antd'
+import { Avatar, Dropdown } from 'antd'
import { AnimatePresence, motion } from 'framer-motion'
import {
Blocks,
ChevronDown,
ChevronRight,
+ CircleHelp,
+ EllipsisVertical,
FileSearch,
Folder,
Languages,
@@ -59,7 +63,7 @@ const MainSidebar: FC = () => {
const avatar = useAvatar()
const { userName, defaultPaintingProvider } = useSettings()
const { t } = useTranslation()
- const { theme } = useTheme()
+ const { theme, settedTheme, toggleTheme } = useTheme()
const [isAppMenuExpanded, setIsAppMenuExpanded] = useState(false)
const { showAssistants, toggleShowAssistants } = useShowAssistants()
@@ -69,6 +73,8 @@ const MainSidebar: FC = () => {
const { activeAssistant, activeTopic, setActiveAssistant, setActiveTopic } = useChat()
const { showTopics } = useSettings()
+ const { openMinapp } = useMinappPopup()
+
useShortcut('toggle_show_assistants', toggleShowAssistants)
useShortcut('toggle_show_topics', () => EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR))
@@ -129,6 +135,17 @@ const MainSidebar: FC = () => {
const isRoutes = (path: string): boolean => pathname.startsWith(path)
+ const docsId = 'cherrystudio-docs'
+ const onOpenDocs = () => {
+ const isChinese = i18n.language.startsWith('zh')
+ openMinapp({
+ id: docsId,
+ name: t('docs.title'),
+ url: isChinese ? 'https://docs.cherry-ai.com/' : 'https://docs.cherry-ai.com/cherry-studio-wen-dang/en-us',
+ logo: AppLogo
+ })
+ }
+
return (
{
)}
{userName && {userName}}
-
- navigate('/settings/provider')} className="settings-icon">
-
+
+ {
+ e.stopPropagation()
+ toggleTheme()
+ }}>
+ {t('settings.theme.title')}: {t(`settings.theme.${settedTheme}`)}
+
+ ),
+ icon: ThemeIcon()
+ },
+ {
+ key: 'about',
+ label: t('docs.title'),
+ icon: ,
+ onClick: onOpenDocs
+ },
+ {
+ key: 'settings',
+ label: t('settings.title'),
+ icon: ,
+ onClick: () => navigate('/settings/provider')
+ }
+ ]
+ }}>
+
+
-
+
)
}
-export const ThemeIcon = () => {
- const { t } = useTranslation()
- const { theme, settedTheme, toggleTheme } = useTheme()
+const ThemeIcon = () => {
+ const { settedTheme } = useTheme()
- const onChageTheme = (e: React.MouseEvent) => {
- e.stopPropagation()
- toggleTheme()
- }
-
- return (
-
-
- {settedTheme === ThemeMode.dark ? (
-
- ) : settedTheme === ThemeMode.light ? (
-
- ) : (
-
- )}
-
-
+ return settedTheme === ThemeMode.dark ? (
+
+ ) : settedTheme === ThemeMode.light ? (
+
+ ) : (
+
)
}