feat: new theme color
This commit is contained in:
parent
7f46e07368
commit
2583f7299a
@ -17,19 +17,20 @@
|
|||||||
--color-text-2: rgba(235, 235, 245, 0.6);
|
--color-text-2: rgba(235, 235, 245, 0.6);
|
||||||
--color-text-3: rgba(235, 235, 245, 0.38);
|
--color-text-3: rgba(235, 235, 245, 0.38);
|
||||||
|
|
||||||
--color-background: #1e1e1e;
|
--color-background: #181818;
|
||||||
--color-background-soft: var(--color-black-soft);
|
--color-background-soft: var(--color-black-soft);
|
||||||
--color-background-mute: var(--color-black-mute);
|
--color-background-mute: var(--color-black-mute);
|
||||||
|
|
||||||
--color-text: var(--color-text-1);
|
--color-text: var(--color-text-1);
|
||||||
--color-icon: #ffffff99;
|
--color-icon: #ffffff99;
|
||||||
--color-icon-white: #ffffff;
|
--color-icon-white: #ffffff;
|
||||||
|
--color-border: #ffffff20;
|
||||||
|
|
||||||
--navbar-height: 45px;
|
--navbar-height: 42px;
|
||||||
--sidebar-width: 68px;
|
--sidebar-width: 68px;
|
||||||
--agents-width: 250px;
|
--agents-width: 250px;
|
||||||
--topic-list-width: var(--agents-width);
|
--topic-list-width: var(--agents-width);
|
||||||
--settings-width: 280px;
|
--settings-width: var(--agents-width);
|
||||||
--status-bar-height: 40px;
|
--status-bar-height: 40px;
|
||||||
--input-bar-height: 120px;
|
--input-bar-height: 120px;
|
||||||
}
|
}
|
||||||
|
|||||||
66
src/renderer/src/components/Popups/AgentSettingPopup.tsx
Normal file
66
src/renderer/src/components/Popups/AgentSettingPopup.tsx
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import { Input, Modal } from 'antd'
|
||||||
|
import { useState } from 'react'
|
||||||
|
import { TopView } from '../TopView'
|
||||||
|
import { Box } from '../Layout'
|
||||||
|
import { Agent } from '@renderer/types'
|
||||||
|
|
||||||
|
interface AgentSettingPopupShowParams {
|
||||||
|
agent: Agent
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Props extends AgentSettingPopupShowParams {
|
||||||
|
resolve: (agent: Agent) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const AgentSettingPopupContainer: React.FC<Props> = ({ agent, resolve }) => {
|
||||||
|
const [name, setName] = useState(agent.name)
|
||||||
|
const [description, setDescription] = useState(agent.description)
|
||||||
|
const [open, setOpen] = useState(true)
|
||||||
|
|
||||||
|
const onOk = () => {
|
||||||
|
setOpen(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCancel = () => {
|
||||||
|
setOpen(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
const onClose = () => {
|
||||||
|
resolve({ ...agent, name, description })
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal title={agent.name} open={open} onOk={onOk} onCancel={handleCancel} afterClose={onClose}>
|
||||||
|
<Box mb={8}>Agent name</Box>
|
||||||
|
<Input placeholder="Agent Name" value={name} onChange={(e) => setName(e.target.value)} allowClear autoFocus />
|
||||||
|
<Box mb={8}>Description</Box>
|
||||||
|
<Input
|
||||||
|
placeholder="Agent Description"
|
||||||
|
value={description}
|
||||||
|
onChange={(e) => setDescription(e.target.value)}
|
||||||
|
allowClear
|
||||||
|
autoFocus
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class AgentSettingPopup {
|
||||||
|
static topviewId = 0
|
||||||
|
static hide() {
|
||||||
|
TopView.hide(this.topviewId)
|
||||||
|
}
|
||||||
|
static show(props: AgentSettingPopupShowParams) {
|
||||||
|
return new Promise<Agent>((resolve) => {
|
||||||
|
this.topviewId = TopView.show(
|
||||||
|
<AgentSettingPopupContainer
|
||||||
|
{...props}
|
||||||
|
resolve={(v) => {
|
||||||
|
resolve(v)
|
||||||
|
this.hide()
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,14 +25,14 @@ const NavbarContainer = styled.div`
|
|||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
min-height: var(--navbar-height);
|
min-height: var(--navbar-height);
|
||||||
max-height: var(--navbar-height);
|
max-height: var(--navbar-height);
|
||||||
background-color: #111;
|
border-bottom: 0.5px solid var(--color-border);
|
||||||
border-bottom: 0.5px solid #ffffff20;
|
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
|
background-color: #1f1f1f;
|
||||||
`
|
`
|
||||||
|
|
||||||
const NavbarLeftContainer = styled.div`
|
const NavbarLeftContainer = styled.div`
|
||||||
min-width: var(--agents-width);
|
min-width: var(--agents-width);
|
||||||
border-right: 1px solid #ffffff20;
|
border-right: 1px solid var(--color-border);
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@ -47,7 +47,7 @@ const NavbarCenterContainer = styled.div`
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--color-text-1);
|
color: var(--color-text-1);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-right: 1px solid #ffffff20;
|
border-right: 1px solid var(--color-border);
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|||||||
@ -45,10 +45,11 @@ const Container = styled.div`
|
|||||||
padding: 16px 0;
|
padding: 16px 0;
|
||||||
min-width: var(--sidebar-width);
|
min-width: var(--sidebar-width);
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
background: #262626;
|
|
||||||
padding-top: 40px;
|
padding-top: 40px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
-webkit-app-region: drag !important;
|
-webkit-app-region: drag !important;
|
||||||
|
background-color: #1f1f1f;
|
||||||
|
border-right: 0.5px solid var(--color-border);
|
||||||
`
|
`
|
||||||
|
|
||||||
const Avatar = styled.div``
|
const Avatar = styled.div``
|
||||||
|
|||||||
@ -13,7 +13,7 @@ const Statusbar: FC = () => {
|
|||||||
|
|
||||||
const Container = styled.div`
|
const Container = styled.div`
|
||||||
min-height: var(--status-bar-height);
|
min-height: var(--status-bar-height);
|
||||||
border-top: 1px solid #ffffff20;
|
border-top: 1px solid var(--color-border);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
@ -5,5 +5,5 @@ export const AntdThemeConfig: ThemeConfig = {
|
|||||||
colorPrimary: '#00b96b',
|
colorPrimary: '#00b96b',
|
||||||
borderRadius: 5
|
borderRadius: 5
|
||||||
},
|
},
|
||||||
algorithm: [theme.darkAlgorithm, theme.compactAlgorithm]
|
algorithm: [theme.darkAlgorithm]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { Agent } from '@renderer/types'
|
|||||||
import { Dropdown, MenuProps } from 'antd'
|
import { Dropdown, MenuProps } from 'antd'
|
||||||
import { EllipsisOutlined } from '@ant-design/icons'
|
import { EllipsisOutlined } from '@ant-design/icons'
|
||||||
import { last } from 'lodash'
|
import { last } from 'lodash'
|
||||||
|
import AgentSettingPopup from '@renderer/components/Popups/AgentSettingPopup'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
activeAgent: Agent
|
activeAgent: Agent
|
||||||
@ -26,15 +27,22 @@ const Agents: FC<Props> = ({ activeAgent, onActive }) => {
|
|||||||
const items: MenuProps['items'] = [
|
const items: MenuProps['items'] = [
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: 'edit'
|
key: 'edit',
|
||||||
|
async onClick() {
|
||||||
|
if (targetAgent.current) {
|
||||||
|
const _agent = await AgentSettingPopup.show({ agent: targetAgent.current })
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Favorite',
|
label: 'Favorite',
|
||||||
key: 'favorite'
|
key: 'favorite'
|
||||||
},
|
},
|
||||||
|
{ type: 'divider' },
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: 'delete',
|
key: 'delete',
|
||||||
|
danger: true,
|
||||||
onClick: () => targetAgent.current && onDelete(targetAgent.current)
|
onClick: () => targetAgent.current && onDelete(targetAgent.current)
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -69,7 +77,7 @@ const Container = styled.div`
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-width: var(--agents-width);
|
min-width: var(--agents-width);
|
||||||
max-width: var(--agents-width);
|
max-width: var(--agents-width);
|
||||||
border-right: 0.5px solid #ffffff20;
|
border-right: 0.5px solid var(--color-border);
|
||||||
height: calc(100vh - var(--navbar-height));
|
height: calc(100vh - var(--navbar-height));
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
|
|||||||
@ -88,7 +88,7 @@ const Container = styled.div`
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: var(--input-bar-height);
|
height: var(--input-bar-height);
|
||||||
border-top: 0.5px solid #ffffff20;
|
border-top: 0.5px solid var(--color-border);
|
||||||
padding: 5px 15px;
|
padding: 5px 15px;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|||||||
@ -26,9 +26,11 @@ const TopicList: FC<Props> = ({ agent, activeTopic, setActiveTopic }) => {
|
|||||||
async onClick() {
|
async onClick() {
|
||||||
if (currentTopic.current) {
|
if (currentTopic.current) {
|
||||||
const messages = await getTopicMessages(currentTopic.current.id)
|
const messages = await getTopicMessages(currentTopic.current.id)
|
||||||
const summaryText = await fetchConversationSummary({ messages })
|
if (messages.length >= 2) {
|
||||||
if (summaryText) {
|
const summaryText = await fetchConversationSummary({ messages })
|
||||||
updateTopic({ ...currentTopic.current, name: summaryText })
|
if (summaryText) {
|
||||||
|
updateTopic({ ...currentTopic.current, name: summaryText })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +91,7 @@ const TopicList: FC<Props> = ({ agent, activeTopic, setActiveTopic }) => {
|
|||||||
const Container = styled.div`
|
const Container = styled.div`
|
||||||
width: var(--topic-list-width);
|
width: var(--topic-list-width);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border-left: 0.5px solid #ffffff20;
|
border-left: 0.5px solid var(--color-border);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
&.collapsed {
|
&.collapsed {
|
||||||
width: 0;
|
width: 0;
|
||||||
|
|||||||
@ -66,7 +66,7 @@ const SettingMenus = styled.ul`
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-width: var(--agents-width);
|
min-width: var(--agents-width);
|
||||||
border-right: 1px solid #ffffff20;
|
border-right: 1px solid var(--color-border);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
`
|
`
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ const SettingContent = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
border-right: 1px solid #ffffff20;
|
border-right: 1px solid var(--color-border);
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user