diff --git a/src/renderer/src/components/ApiModelLabel.tsx b/src/renderer/src/components/ApiModelLabel.tsx deleted file mode 100644 index 3e36083a69..0000000000 --- a/src/renderer/src/components/ApiModelLabel.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Avatar, cn } from '@heroui/react' -import { getModelLogoById } from '@renderer/config/models' -import type { ApiModel } from '@renderer/types' -import React from 'react' - -import Ellipsis from './Ellipsis' - -export interface ModelLabelProps extends Omit, 'children'> { - model?: ApiModel - classNames?: { - container?: string - avatar?: string - modelName?: string - divider?: string - providerName?: string - } -} - -export const ApiModelLabel: React.FC = ({ model, className, classNames, ...props }) => { - return ( -
- - {model?.name} - | - {model?.provider_name} -
- ) -} diff --git a/src/renderer/src/components/Buttons/ActionIconButton.tsx b/src/renderer/src/components/Buttons/ActionIconButton.tsx index 9f5c98abf0..bf3a6d288d 100644 --- a/src/renderer/src/components/Buttons/ActionIconButton.tsx +++ b/src/renderer/src/components/Buttons/ActionIconButton.tsx @@ -1,4 +1,4 @@ -import { cn } from '@heroui/react' +import { cn } from '@renderer/utils' import type { ButtonProps } from 'antd' import { Button } from 'antd' import React, { memo } from 'react' diff --git a/src/renderer/src/components/HorizontalScrollContainer/index.tsx b/src/renderer/src/components/HorizontalScrollContainer/index.tsx index fdc890d2e2..ec9f7a1043 100644 --- a/src/renderer/src/components/HorizontalScrollContainer/index.tsx +++ b/src/renderer/src/components/HorizontalScrollContainer/index.tsx @@ -1,5 +1,5 @@ -import { cn } from '@heroui/react' import Scrollbar from '@renderer/components/Scrollbar' +import { cn } from '@renderer/utils' import { ChevronRight } from 'lucide-react' import { useEffect, useRef, useState } from 'react' import styled from 'styled-components' diff --git a/src/renderer/src/components/Popups/AddAssistantOrAgentPopup.tsx b/src/renderer/src/components/Popups/AddAssistantOrAgentPopup.tsx index 4094b3f3d1..6dc265b0df 100644 --- a/src/renderer/src/components/Popups/AddAssistantOrAgentPopup.tsx +++ b/src/renderer/src/components/Popups/AddAssistantOrAgentPopup.tsx @@ -1,5 +1,5 @@ -import { cn } from '@heroui/react' import { TopView } from '@renderer/components/TopView' +import { cn } from '@renderer/utils' import { Modal } from 'antd' import { Bot, MessageSquare } from 'lucide-react' import { useState } from 'react' diff --git a/src/renderer/src/components/Popups/agent/SessionModal.tsx b/src/renderer/src/components/Popups/agent/SessionModal.tsx index 368c943a1c..34d5997787 100644 --- a/src/renderer/src/components/Popups/agent/SessionModal.tsx +++ b/src/renderer/src/components/Popups/agent/SessionModal.tsx @@ -1,6 +1,5 @@ import { Button, - cn, Form, Input, Modal, @@ -25,6 +24,7 @@ import type { Tool, UpdateSessionForm } from '@renderer/types' +import { cn } from '@renderer/utils' import type { FormEvent, ReactNode } from 'react' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/components/agent/AllowedToolsSelect.tsx b/src/renderer/src/components/agent/AllowedToolsSelect.tsx index 0ca6320b45..1a7caec416 100644 --- a/src/renderer/src/components/agent/AllowedToolsSelect.tsx +++ b/src/renderer/src/components/agent/AllowedToolsSelect.tsx @@ -1,6 +1,7 @@ import type { SelectedItems, SelectProps } from '@heroui/react' -import { Chip, cn, Select, SelectItem } from '@heroui/react' +import { Chip, Select, SelectItem } from '@heroui/react' import type { Tool } from '@renderer/types' +import { cn } from '@renderer/utils' import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/useUserTheme.ts b/src/renderer/src/hooks/useUserTheme.ts index 5958026e70..d3b5a6a4c4 100644 --- a/src/renderer/src/hooks/useUserTheme.ts +++ b/src/renderer/src/hooks/useUserTheme.ts @@ -12,19 +12,7 @@ export default function useUserTheme() { const colorPrimary = Color(theme.colorPrimary) document.body.style.setProperty('--color-primary', colorPrimary.toString()) - // overwrite hero UI primary color. document.body.style.setProperty('--primary', colorPrimary.toString()) - document.body.style.setProperty('--heroui-primary', colorPrimary.toString()) - document.body.style.setProperty('--heroui-primary-900', colorPrimary.lighten(0.5).toString()) - document.body.style.setProperty('--heroui-primary-800', colorPrimary.lighten(0.4).toString()) - document.body.style.setProperty('--heroui-primary-700', colorPrimary.lighten(0.3).toString()) - document.body.style.setProperty('--heroui-primary-600', colorPrimary.lighten(0.2).toString()) - document.body.style.setProperty('--heroui-primary-500', colorPrimary.lighten(0.1).toString()) - document.body.style.setProperty('--heroui-primary-400', colorPrimary.toString()) - document.body.style.setProperty('--heroui-primary-300', colorPrimary.darken(0.1).toString()) - document.body.style.setProperty('--heroui-primary-200', colorPrimary.darken(0.2).toString()) - document.body.style.setProperty('--heroui-primary-100', colorPrimary.darken(0.3).toString()) - document.body.style.setProperty('--heroui-primary-50', colorPrimary.darken(0.4).toString()) document.body.style.setProperty('--color-primary-soft', colorPrimary.alpha(0.6).toString()) document.body.style.setProperty('--color-primary-mute', colorPrimary.alpha(0.3).toString()) diff --git a/src/renderer/src/pages/home/Chat.tsx b/src/renderer/src/pages/home/Chat.tsx index 8a02918656..1e81c39835 100644 --- a/src/renderer/src/pages/home/Chat.tsx +++ b/src/renderer/src/pages/home/Chat.tsx @@ -1,4 +1,3 @@ -import { Alert } from '@heroui/react' import { loggerService } from '@logger' import type { ContentSearchRef } from '@renderer/components/ContentSearch' import { ContentSearch } from '@renderer/components/ContentSearch' @@ -17,7 +16,7 @@ import { useTimer } from '@renderer/hooks/useTimer' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import type { Assistant, Topic } from '@renderer/types' import { classNames } from '@renderer/utils' -import { Flex } from 'antd' +import { Alert, Flex } from 'antd' import { debounce } from 'lodash' import { AnimatePresence, motion } from 'motion/react' import type { FC } from 'react' @@ -170,11 +169,7 @@ const Chat: FC = (props) => { return () =>
Active Session ID is invalid.
} if (!apiServer.enabled) { - return () => ( -
- -
- ) + return () => } return () => }, [activeAgentId, activeSessionId, apiServer.enabled, t]) @@ -191,22 +186,14 @@ const Chat: FC = (props) => { // TODO: more info const AgentInvalid = useCallback(() => { - return ( -
-
- -
-
- ) + return }, []) // TODO: more info const SessionInvalid = useCallback(() => { return (
-
- -
+
) }, []) diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index dcf4760047..798559f8d9 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -1,4 +1,3 @@ -import { cn } from '@heroui/react' import { loggerService } from '@logger' import HorizontalScrollContainer from '@renderer/components/HorizontalScrollContainer' import Scrollbar from '@renderer/components/Scrollbar' @@ -15,7 +14,7 @@ import { getModelUniqId } from '@renderer/services/ModelService' import { estimateMessageUsage } from '@renderer/services/TokenService' import type { Assistant, Topic } from '@renderer/types' import type { Message, MessageBlock } from '@renderer/types/newMessage' -import { classNames } from '@renderer/utils' +import { classNames, cn } from '@renderer/utils' import { isMessageProcessing } from '@renderer/utils/messageUtils/is' import { Divider } from 'antd' import type { Dispatch, FC, SetStateAction } from 'react' diff --git a/src/renderer/src/pages/home/Tabs/SessionSettingsTab.tsx b/src/renderer/src/pages/home/Tabs/SessionSettingsTab.tsx index 346c3abb1d..b138caaf80 100644 --- a/src/renderer/src/pages/home/Tabs/SessionSettingsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/SessionSettingsTab.tsx @@ -1,9 +1,10 @@ -import { Button, Divider } from '@heroui/react' import type { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' +import { SettingDivider } from '@renderer/pages/settings' import { SessionSettingsPopup } from '@renderer/pages/settings/AgentSettings' import AdvancedSettings from '@renderer/pages/settings/AgentSettings/AdvancedSettings' import EssentialSettings from '@renderer/pages/settings/AgentSettings/EssentialSettings' import type { GetAgentSessionResponse } from '@renderer/types' +import { Button } from 'antd' import type { FC } from 'react' import { useTranslation } from 'react-i18next' @@ -31,9 +32,10 @@ const SessionSettingsTab: FC = ({ session, update }) => { return (
+ - -
diff --git a/src/renderer/src/pages/home/Tabs/SessionsTab.tsx b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx index 6241893c31..3fd3881d9c 100644 --- a/src/renderer/src/pages/home/Tabs/SessionsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx @@ -1,6 +1,7 @@ -import { Alert, cn } from '@heroui/react' import { useRuntime } from '@renderer/hooks/useRuntime' import { useSettings } from '@renderer/hooks/useSettings' +import { cn } from '@renderer/utils' +import { Alert } from 'antd' import { AnimatePresence, motion } from 'framer-motion' import type { FC } from 'react' import { memo } from 'react' @@ -17,19 +18,11 @@ const SessionsTab: FC = () => { const { apiServer } = useSettings() if (!apiServer.enabled) { - return ( -
- -
- ) + return } if (!activeAgentId) { - return ( -
- -
- ) + return } return ( diff --git a/src/renderer/src/pages/home/Tabs/components/AddButton.tsx b/src/renderer/src/pages/home/Tabs/components/AddButton.tsx index 62feecd226..a9a72af993 100644 --- a/src/renderer/src/pages/home/Tabs/components/AddButton.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AddButton.tsx @@ -1,5 +1,6 @@ import type { ButtonProps } from '@heroui/react' -import { Button, cn } from '@heroui/react' +import { Button } from '@heroui/react' +import { cn } from '@renderer/utils' import { PlusIcon } from 'lucide-react' import type { FC } from 'react' diff --git a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx index 59eafaa457..165ed63bd3 100644 --- a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx @@ -1,4 +1,3 @@ -import { cn, Tooltip } from '@heroui/react' import { DeleteIcon, EditIcon } from '@renderer/components/Icons' import { useSessions } from '@renderer/hooks/agents/useSessions' import { useSettings } from '@renderer/hooks/useSettings' @@ -7,6 +6,8 @@ import { AgentLabel } from '@renderer/pages/settings/AgentSettings/shared' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import type { AgentEntity } from '@renderer/types' import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' +import { cn } from '@renderer/utils' +import { Tooltip } from 'antd' import { Bot } from 'lucide-react' import type { FC } from 'react' import { memo, useCallback } from 'react' @@ -118,7 +119,7 @@ export const MenuButton: React.FC> = ({ cla export const BotIcon: React.FC> = ({ ...props }) => { const { t } = useTranslation() return ( - + diff --git a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx index e18c3da9a8..b37f95781c 100644 --- a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx @@ -1,4 +1,3 @@ -import { cn } from '@heroui/react' import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' import EmojiIcon from '@renderer/components/EmojiIcon' import { CopyIcon, DeleteIcon, EditIcon } from '@renderer/components/Icons' @@ -12,7 +11,7 @@ import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { useAppDispatch } from '@renderer/store' import { setActiveTopicOrSessionAction } from '@renderer/store/runtime' import type { Assistant, AssistantsSortType } from '@renderer/types' -import { getLeadingEmoji, uuid } from '@renderer/utils' +import { cn, getLeadingEmoji, uuid } from '@renderer/utils' import { hasTopicPendingRequests } from '@renderer/utils/queue' import type { MenuProps } from 'antd' import { Dropdown } from 'antd' diff --git a/src/renderer/src/pages/home/Tabs/components/TagGroup.tsx b/src/renderer/src/pages/home/Tabs/components/TagGroup.tsx index a5d1f3ef33..b7bca164f9 100644 --- a/src/renderer/src/pages/home/Tabs/components/TagGroup.tsx +++ b/src/renderer/src/pages/home/Tabs/components/TagGroup.tsx @@ -1,5 +1,5 @@ import { DownOutlined, RightOutlined } from '@ant-design/icons' -import { cn } from '@heroui/react' +import { cn } from '@renderer/utils' import { Tooltip } from 'antd' import type { FC, ReactNode } from 'react' diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx index 3b9e057d80..eb8880f654 100644 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ b/src/renderer/src/pages/home/Tabs/index.tsx @@ -1,4 +1,4 @@ -import { Alert, Skeleton } from '@heroui/react' +import { Skeleton } from '@heroui/react' import AddAssistantPopup from '@renderer/components/Popups/AddAssistantPopup' import { useActiveSession } from '@renderer/hooks/agents/useActiveSession' import { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' @@ -12,6 +12,7 @@ import { setActiveAgentId, setActiveTopicOrSessionAction } from '@renderer/store import type { Assistant, Topic } from '@renderer/types' import type { Tab } from '@renderer/types/chat' import { classNames, getErrorMessage, uuid } from '@renderer/utils' +import { Alert } from 'antd' import type { FC } from 'react' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -170,12 +171,13 @@ const HomeTabs: FC = ({ )} - {tab === 'settings' && isSessionView && sessionError && ( + {tab === 'settings' && (
)} diff --git a/src/renderer/src/pages/home/components/SelectAgentBaseModelButton.tsx b/src/renderer/src/pages/home/components/SelectAgentBaseModelButton.tsx index 1d46335e1b..e6ee09fcee 100644 --- a/src/renderer/src/pages/home/components/SelectAgentBaseModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectAgentBaseModelButton.tsx @@ -1,4 +1,3 @@ -import { Button } from '@heroui/react' import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' import { SelectApiModelPopup } from '@renderer/components/Popups/SelectModelPopup' import { agentModelFilter } from '@renderer/config/models' @@ -8,6 +7,7 @@ import type { AgentBaseWithId, ApiModel } from '@renderer/types' import { isAgentEntity } from '@renderer/types' import { getModelFilterByAgentType } from '@renderer/utils/agentSession' import { apiModelAdapter } from '@renderer/utils/model' +import { Button } from 'antd' import { ChevronsUpDown } from 'lucide-react' import type { FC } from 'react' import { useTranslation } from 'react-i18next' @@ -37,11 +37,11 @@ const SelectAgentBaseModelButton: FC = ({ agentBase: agent, onSelect, isD return ( + icon={} + className="text-default-500 hover:text-default-900" + /> + icon={} + className="text-default-500 hover:text-default-900" + />
+ icon={} + className="text-default-500 hover:text-default-900" + />
) } diff --git a/src/renderer/src/pages/settings/AgentSettings/EssentialSettings.tsx b/src/renderer/src/pages/settings/AgentSettings/EssentialSettings.tsx index 97dd111a8a..846912dc64 100644 --- a/src/renderer/src/pages/settings/AgentSettings/EssentialSettings.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/EssentialSettings.tsx @@ -1,10 +1,10 @@ -import { Avatar } from '@heroui/react' import { getAgentTypeAvatar } from '@renderer/config/agent' import type { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' import type { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' import { getAgentTypeLabel } from '@renderer/i18n/label' import type { GetAgentResponse, GetAgentSessionResponse } from '@renderer/types' import { isAgentEntity } from '@renderer/types' +import { Avatar } from 'antd' import type { FC } from 'react' import { useTranslation } from 'react-i18next' @@ -42,7 +42,7 @@ const EssentialSettings: FC = ({ agentBase, update, show {t('agent.type.label')}
- + {(agentBase?.name ?? agentBase?.type) ? getAgentTypeLabel(agentBase.type) : ''}
diff --git a/src/renderer/src/pages/settings/AgentSettings/shared.tsx b/src/renderer/src/pages/settings/AgentSettings/shared.tsx index 3549c59d47..4a74c61a8b 100644 --- a/src/renderer/src/pages/settings/AgentSettings/shared.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/shared.tsx @@ -1,7 +1,7 @@ -import { cn } from '@heroui/react' import EmojiIcon from '@renderer/components/EmojiIcon' import { getAgentTypeLabel } from '@renderer/i18n/label' import type { AgentEntity, AgentSessionEntity } from '@renderer/types' +import { cn } from '@renderer/utils' import { Menu, Modal } from 'antd' import type { ReactNode } from 'react' import React from 'react' diff --git a/src/renderer/src/ui/context-menu.tsx b/src/renderer/src/ui/context-menu.tsx index 28864847af..7fdd27c38f 100644 --- a/src/renderer/src/ui/context-menu.tsx +++ b/src/renderer/src/ui/context-menu.tsx @@ -3,7 +3,7 @@ import * as React from 'react' import * as ContextMenuPrimitive from '@radix-ui/react-context-menu' import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react' -import { cn } from '@heroui/react' +import { cn } from '@renderer/utils' function ContextMenu({ ...props }: React.ComponentProps) { return diff --git a/src/renderer/src/utils/style.ts b/src/renderer/src/utils/style.ts index 7e6d52be70..d125752bcd 100644 --- a/src/renderer/src/utils/style.ts +++ b/src/renderer/src/utils/style.ts @@ -1,5 +1,7 @@ import type { HexColor } from '@renderer/types' import { isHexColor } from '@renderer/types' +import { clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' type ClassValue = string | number | boolean | undefined | null | ClassDictionary | ClassArray @@ -202,3 +204,7 @@ export function getForegroundColor(backgroundColor: HexColor): HexColor { // ` // return acc // }, {} as MediaQueries) + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +}