diff --git a/packages/ui/src/components/interactive/Selector/index.tsx b/packages/ui/src/components/base/Selector/index.tsx
similarity index 100%
rename from packages/ui/src/components/interactive/Selector/index.tsx
rename to packages/ui/src/components/base/Selector/index.tsx
diff --git a/packages/ui/src/components/base/Switch/index.tsx b/packages/ui/src/components/base/Switch/index.tsx
index b3fdf7b989..51d9721603 100644
--- a/packages/ui/src/components/base/Switch/index.tsx
+++ b/packages/ui/src/components/base/Switch/index.tsx
@@ -1,5 +1,5 @@
import type { SwitchProps } from '@heroui/react'
-import { Spinner, Switch } from '@heroui/react'
+import { cn, Spinner, Switch } from '@heroui/react'
// Enhanced Switch component with loading state support
interface CustomSwitchProps extends SwitchProps {
@@ -21,7 +21,34 @@ const CustomizedSwitch = ({ isLoading, children, ref, thumbIcon, ...props }: Cus
)
}
+const DescriptionSwitch = ({ children, ...props }: CustomSwitchProps) => {
+ return (
+
+ {children}
+
+ )
+}
+
CustomizedSwitch.displayName = 'Switch'
-export { CustomizedSwitch as Switch }
+export { DescriptionSwitch, CustomizedSwitch as Switch }
export type { CustomSwitchProps as SwitchProps }
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts
index 8add0fbfd1..9999c43ec7 100644
--- a/packages/ui/src/components/index.ts
+++ b/packages/ui/src/components/index.ts
@@ -11,7 +11,7 @@ export { default as IndicatorLight } from './base/IndicatorLight'
export { default as Spinner } from './base/Spinner'
export type { StatusTagProps, StatusType } from './base/StatusTag'
export { ErrorTag, InfoTag, StatusTag, SuccessTag, WarnTag } from './base/StatusTag'
-export { Switch } from './base/Switch'
+export { DescriptionSwitch, Switch } from './base/Switch'
export { default as TextBadge } from './base/TextBadge'
export { getToastUtilities, type ToastUtilities } from './base/Toast'
@@ -50,6 +50,7 @@ export { default as SvgSpinners180Ring } from './icons/SvgSpinners180Ring'
export { default as ToolsCallingIcon } from './icons/ToolsCallingIcon'
// Interactive Components
+export { default as Selector } from './base/Selector'
export {
default as CodeEditor,
type CodeEditorHandles,
@@ -64,9 +65,7 @@ export type { EditableNumberProps } from './interactive/EditableNumber'
export { default as EditableNumber } from './interactive/EditableNumber'
export { default as HelpTooltip } from './interactive/HelpTooltip'
export { default as ImageToolButton } from './interactive/ImageToolButton'
-export { default as InfoPopover } from './interactive/InfoPopover'
export { default as InfoTooltip } from './interactive/InfoTooltip'
-export { default as Selector } from './interactive/Selector'
export { Sortable } from './interactive/Sortable'
export { default as WarnTooltip } from './interactive/WarnTooltip'
diff --git a/packages/ui/src/components/interactive/InfoPopover/index.tsx b/packages/ui/src/components/interactive/InfoPopover/index.tsx
deleted file mode 100644
index 13ead1dd04..0000000000
--- a/packages/ui/src/components/interactive/InfoPopover/index.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-// Original path: src/renderer/src/components/InfoPopover.tsx
-import type { PopoverProps } from 'antd'
-import { Popover } from 'antd'
-import { Info } from 'lucide-react'
-
-type InheritedPopoverProps = Omit
-
-interface InfoPopoverProps extends InheritedPopoverProps {
- iconColor?: string
- iconSize?: string | number
- iconStyle?: React.CSSProperties
-}
-
-const InfoPopover = ({ iconColor = 'var(--color-text-3)', iconSize = 14, iconStyle, ...rest }: InfoPopoverProps) => {
- return (
-
-
-
- )
-}
-
-export default InfoPopover
diff --git a/packages/ui/stories/components/interactive/Selector.stories.tsx b/packages/ui/stories/components/interactive/Selector.stories.tsx
index 2c737a911d..49f4d8f4c4 100644
--- a/packages/ui/stories/components/interactive/Selector.stories.tsx
+++ b/packages/ui/stories/components/interactive/Selector.stories.tsx
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from '@storybook/react'
import { useState } from 'react'
-import Selector from '../../../src/components/interactive/Selector'
+import Selector from '../../../src/components/base/Selector'
const meta: Meta = {
title: 'Interactive/Selector',
diff --git a/src/renderer/src/components/TooltipIcons/HelpTooltip.tsx b/src/renderer/src/components/TooltipIcons/HelpTooltip.tsx
index d0de56dbe6..910dc4741f 100644
--- a/src/renderer/src/components/TooltipIcons/HelpTooltip.tsx
+++ b/src/renderer/src/components/TooltipIcons/HelpTooltip.tsx
@@ -13,7 +13,14 @@ interface HelpTooltipProps extends InheritedTooltipProps {
const HelpTooltip = ({ iconColor = 'var(--color-text-2)', iconSize = 14, iconStyle, ...rest }: HelpTooltipProps) => {
return (
-
+
)
}
diff --git a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx
index c8d0862797..efeb69c92c 100644
--- a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx
+++ b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx
@@ -1,5 +1,4 @@
-import { RowFlex, Selector, Switch } from '@cherrystudio/ui'
-import { Button } from '@cherrystudio/ui'
+import { Button, DescriptionSwitch, RowFlex, Selector } from '@cherrystudio/ui'
import { useMultiplePreferences, usePreference } from '@data/hooks/usePreference'
import EditableNumber from '@renderer/components/EditableNumber'
import Scrollbar from '@renderer/components/Scrollbar'
@@ -184,19 +183,23 @@ const SettingsTab: FC = (props) => {
}>
-
+ {/*
{t('chat.settings.temperature.label')}
-
- */}
+ {
setEnableTemperature(enabled)
onUpdateAssistantSettings({ enableTemperature: enabled })
- }}
- />
+ }}>
+
+ {t('chat.settings.temperature.label')}
+
+
+
{enableTemperature ? (
@@ -234,25 +237,19 @@ const SettingsTab: FC = (props) => {
- {t('models.stream_output')}
- {
setStreamOutput(checked)
onUpdateAssistantSettings({ streamOutput: checked })
- }}
- />
+ }}>
+ {t('models.stream_output')}
+
-
-
- {t('chat.settings.max_tokens.label')}
-
-
-
- {
@@ -268,8 +265,12 @@ const SettingsTab: FC = (props) => {
}
setEnableMaxTokens(enabled)
onUpdateAssistantSettings({ enableMaxTokens: enabled })
- }}
- />
+ }}>
+
+ {t('chat.settings.max_tokens.label')}
+
+
+
{enableMaxTokens && (
@@ -302,30 +303,38 @@ const SettingsTab: FC = (props) => {
- {t('settings.messages.prompt')}
-
+
+ {t('settings.messages.prompt')}
+
- {t('settings.messages.use_serif_font')}
- {t('settings.messages.use_serif_font')} */}
+ setMessageFont(checked ? 'serif' : 'system')}
- />
+ onValueChange={(checked) => setMessageFont(checked ? 'serif' : 'system')}>
+ {t('settings.messages.use_serif_font')}
+
-
+ {/*
{t('chat.settings.thought_auto_collapse.label')}
-
-
+ */}
+
+
+ {t('chat.settings.thought_auto_collapse.label')}
+
+
+
- {t('settings.messages.show_message_outline')}
-
+
+ {t('settings.messages.show_message_outline')}
+
@@ -414,11 +423,16 @@ const SettingsTab: FC = (props) => {
-
+ {/*
{t('settings.math.single_dollar.label')}
-
-
+ */}
+
+
+ {t('settings.math.single_dollar.label')}
+
+
+
@@ -440,23 +454,32 @@ const SettingsTab: FC = (props) => {
-
+ {/*
{t('chat.settings.code_fancy_block.label')}
-
-
+ */}
+
+
+ {t('chat.settings.code_fancy_block.label')}
+
+
+
-
+ {/*
{t('chat.settings.code_execution.title')}
-
- */}
+ setCodeExecution({ enabled: checked })}
- />
+ onValueChange={(checked) => setCodeExecution({ enabled: checked })}>
+
+ {t('chat.settings.code_execution.title')}
+
+
+
{codeExecution.enabled && (
<>
@@ -480,75 +503,90 @@ const SettingsTab: FC = (props) => {
)}
- {t('chat.settings.code_editor.title')}
- {t('chat.settings.code_editor.title')} */}
+ setCodeEditor({ enabled: checked })}
- />
+ onValueChange={(checked) => setCodeEditor({ enabled: checked })}>
+ {t('chat.settings.code_editor.title')}
+
{codeEditor.enabled && (
<>
- {t('chat.settings.code_editor.highlight_active_line')}
-
+ {t('chat.settings.code_editor.highlight_active_line')}
+
+ */}
+ setCodeEditor({ highlightActiveLine: checked })}
- />
+ onValueChange={(checked) => setCodeEditor({ highlightActiveLine: checked })}>
+
+ {t('chat.settings.code_editor.highlight_active_line')}
+
+
+
- {t('chat.settings.code_editor.fold_gutter')}
- {t('chat.settings.code_editor.fold_gutter')} */}
+ setCodeEditor({ foldGutter: checked })}
- />
+ onValueChange={(checked) => setCodeEditor({ foldGutter: checked })}>
+ {t('chat.settings.code_editor.fold_gutter')}
+
- {t('chat.settings.code_editor.autocompletion')}
- {t('chat.settings.code_editor.autocompletion')} */}
+ setCodeEditor({ autocompletion: checked })}
- />
+ onValueChange={(checked) => setCodeEditor({ autocompletion: checked })}>
+ {t('chat.settings.code_editor.autocompletion')}
+
- {t('chat.settings.code_editor.keymap')}
- {t('chat.settings.code_editor.keymap')} */}
+ setCodeEditor({ keymap: checked })}
- />
+ onValueChange={(checked) => setCodeEditor({ keymap: checked })}>
+ {t('chat.settings.code_editor.keymap')}
+
>
)}
- {t('chat.settings.show_line_numbers')}
-
+
+ {t('chat.settings.show_line_numbers')}
+
- {t('chat.settings.code_collapsible')}
-
+
+ {t('chat.settings.code_collapsible')}
+
- {t('chat.settings.code_wrappable')}
-
+
+ {t('chat.settings.code_wrappable')}
+
-
- {t('chat.settings.code_image_tools.label')}
-
-
-
+
+
+ {t('chat.settings.code_image_tools.label')}
+
+
+
@@ -556,13 +594,18 @@ const SettingsTab: FC = (props) => {
- {t('settings.messages.input.show_estimated_tokens')}
-
+
+ {t('settings.messages.input.show_estimated_tokens')}
+
- {t('settings.messages.input.paste_long_text_as_file')}
-
+
+ {t('settings.messages.input.paste_long_text_as_file')}
+
{pasteLongTextAsFile && (
<>
@@ -583,41 +626,55 @@ const SettingsTab: FC = (props) => {
)}
- {t('settings.messages.markdown_rendering_input_message')}
-
+ onValueChange={setRenderInputMessageAsMarkdown}>
+ {t('settings.messages.markdown_rendering_input_message')}
+
{!(language || navigator.language).startsWith('en') && (
<>
- {t('settings.input.auto_translate_with_space')}
-
+
+ {t('settings.input.auto_translate_with_space')}
+
>
)}
- {t('settings.input.show_translate_confirm')}
-
+
+ {t('settings.input.show_translate_confirm')}
+
- {t('settings.messages.input.enable_quick_triggers')}
-
+
+ {t('settings.messages.input.enable_quick_triggers')}
+
- {t('settings.messages.input.confirm_delete_message')}
-
+
+ {t('settings.messages.input.confirm_delete_message')}
+
- {t('settings.messages.input.confirm_regenerate_message')}
-
+
+ {t('settings.messages.input.confirm_regenerate_message')}
+
diff --git a/src/renderer/src/pages/settings/ProviderSettings/ModelList/ModelListGroup.tsx b/src/renderer/src/pages/settings/ProviderSettings/ModelList/ModelListGroup.tsx
index 0bde50f114..fa4ac0cfcc 100644
--- a/src/renderer/src/pages/settings/ProviderSettings/ModelList/ModelListGroup.tsx
+++ b/src/renderer/src/pages/settings/ProviderSettings/ModelList/ModelListGroup.tsx
@@ -60,7 +60,8 @@ const ModelListGroup: React.FC = ({
onSelectionChange: handleCollapseChange
}}
accordionItemProps={{
- startContent: (
+ disableIndicatorAnimation: true,
+ indicator: (