style(chat): 对话界面改为左右布局

This commit is contained in:
Teo 2024-10-31 15:20:15 +08:00 committed by 亢奋猫
parent b8c70a3061
commit 89dd35c98d
8 changed files with 45 additions and 21 deletions

View File

@ -34,6 +34,7 @@
--color-icon-white: #ffffff; --color-icon-white: #ffffff;
--color-border: #ffffff24; --color-border: #ffffff24;
--color-border-soft: #ffffff20; --color-border-soft: #ffffff20;
--color-border-mute: #ffffff11;
--color-error: #f44336; --color-error: #f44336;
--color-link: #1677ff; --color-link: #1677ff;
--color-code-background: #323232; --color-code-background: #323232;
@ -51,6 +52,10 @@
--assistants-width: 275px; --assistants-width: 275px;
--topic-list-width: 275px; --topic-list-width: 275px;
--settings-width: 250px; --settings-width: 250px;
--chat-background: #111111;
--chat-background-user: #28b561;
--chat-background-assistant: #2c2c2c;
} }
body[theme-mode='light'] { body[theme-mode='light'] {
@ -83,6 +88,7 @@ body[theme-mode='light'] {
--color-icon-white: #000000; --color-icon-white: #000000;
--color-border: #00000028; --color-border: #00000028;
--color-border-soft: #00000028; --color-border-soft: #00000028;
--color-border-mute: #00000011;
--color-error: #f44336; --color-error: #f44336;
--color-link: #1677ff; --color-link: #1677ff;
--color-code-background: #e3e3e3; --color-code-background: #e3e3e3;
@ -91,6 +97,10 @@ body[theme-mode='light'] {
--navbar-background-mac: rgba(255, 255, 255, 0.6); --navbar-background-mac: rgba(255, 255, 255, 0.6);
--navbar-background: rgba(255, 255, 255); --navbar-background: rgba(255, 255, 255);
--chat-background: #f3f3f3;
--chat-background-user: #95ec69;
--chat-background-assistant: #ffffff;
} }
*, *,
@ -156,7 +166,6 @@ body,
body[os='mac'] { body[os='mac'] {
#content-container { #content-container {
border-top-left-radius: 10px; border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
border-left: 0.5px solid var(--color-border); border-left: 0.5px solid var(--color-border);
box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.05);
} }

View File

@ -52,7 +52,7 @@ const Container = styled.div`
height: 100%; height: 100%;
flex: 1; flex: 1;
justify-content: space-between; justify-content: space-between;
background-color: var(--color-background); background-color: var(--chat-background);
` `
const Main = styled(Flex)` const Main = styled(Flex)`

View File

@ -35,8 +35,9 @@ const Container = styled.div`
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 10px; gap: 10px;
margin: 10px 20px; padding: 10px 20px;
margin-right: 0; background: var(--color-background);
border-top: 1px solid var(--color-border-mute);
` `
export default AttachmentPreview export default AttachmentPreview

View File

@ -299,7 +299,7 @@ const Inputbar: FC<Props> = ({ assistant, setActiveTopic }) => {
autoFocus autoFocus
contextMenu="true" contextMenu="true"
variant="borderless" variant="borderless"
rows={1} rows={2}
ref={textareaRef} ref={textareaRef}
style={{ fontSize }} style={{ fontSize }}
styles={{ textarea: TextareaStyle }} styles={{ textarea: TextareaStyle }}
@ -381,11 +381,10 @@ const TextareaStyle: CSSProperties = {
} }
const InputBarContainer = styled.div` const InputBarContainer = styled.div`
border: 1px solid var(--color-border-soft); border-top: 1px solid var(--color-border-mute);
transition: all 0.3s ease; transition: all 0.3s ease;
position: relative; position: relative;
margin: 0 20px 15px 20px; background: var(--color-background);
border-radius: 10px;
` `
const Textarea = styled(TextArea)` const Textarea = styled(TextArea)`

View File

@ -16,7 +16,7 @@ import styled from 'styled-components'
import MessageContent from './MessageContent' import MessageContent from './MessageContent'
import MessageHeader from './MessageHeader' import MessageHeader from './MessageHeader'
import MessageMenubar from './MessageMenubar' import MessageMenubar from './MessageMenubar'
import MessgeTokens from './MessageTokens' import MessageTokens from './MessageTokens'
interface Props { interface Props {
message: Message message: Message
@ -131,13 +131,23 @@ const MessageItem: FC<Props> = ({
} }
return ( return (
<MessageContainer key={message.id} className="message" ref={messageContainerRef}> <MessageContainer
key={message.id}
className="message"
ref={messageContainerRef}
style={{
alignItems: isAssistantMessage ? 'start' : 'end'
}}>
<MessageHeader message={message} assistant={assistant} model={model} /> <MessageHeader message={message} assistant={assistant} model={model} />
<MessageContentContainer style={{ fontFamily, fontSize }}> <MessageContentContainer
style={{
fontFamily,
fontSize,
background: isAssistantMessage ? 'var(--chat-background-assistant)' : 'var(--chat-background-user)'
}}>
<MessageContent message={message} model={model} /> <MessageContent message={message} model={model} />
{showMenubar && ( {showMenubar && (
<MessageFooter style={{ border: messageBorder, flexDirection: isLastMessage ? 'row-reverse' : undefined }}> <MessageFooter style={{ border: messageBorder }}>
<MessgeTokens message={message} isLastMessage={isLastMessage} />
<MessageMenubar <MessageMenubar
message={message} message={message}
model={model} model={model}
@ -148,6 +158,7 @@ const MessageItem: FC<Props> = ({
onEditMessage={onEditMessage} onEditMessage={onEditMessage}
onDeleteMessage={onDeleteMessage} onDeleteMessage={onDeleteMessage}
/> />
<MessageTokens message={message} isLastMessage={isLastMessage} />
</MessageFooter> </MessageFooter>
)} )}
</MessageContentContainer> </MessageContentContainer>
@ -179,12 +190,14 @@ const MessageContainer = styled.div`
` `
const MessageContentContainer = styled.div` const MessageContentContainer = styled.div`
max-width: 100%;
display: flex; display: flex;
flex: 1; flex: 1;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
margin-left: 46px; margin: 5px 0;
margin-top: 5px; border-radius: 8px;
padding: 10px 15px 0 15px;
` `
const MessageFooter = styled.div` const MessageFooter = styled.div`
@ -195,6 +208,7 @@ const MessageFooter = styled.div`
padding: 2px 0; padding: 2px 0;
margin-top: 2px; margin-top: 2px;
border-top: 0.5px dashed var(--color-border); border-top: 0.5px dashed var(--color-border);
gap: 20px;
` `
export default memo(MessageItem) export default memo(MessageItem)

View File

@ -47,7 +47,11 @@ const MessageHeader: FC<Props> = ({ assistant, model, message }) => {
return ( return (
<Container> <Container>
<AvatarWrapper> <AvatarWrapper
style={{
flexDirection: isAssistantMessage ? 'row' : 'row-reverse',
textAlign: isAssistantMessage ? 'left' : 'right'
}}>
{isAssistantMessage ? ( {isAssistantMessage ? (
<Avatar <Avatar
src={avatarSource} src={avatarSource}
@ -79,25 +83,23 @@ const MessageHeader: FC<Props> = ({ assistant, model, message }) => {
} }
const Container = styled.div` const Container = styled.div`
margin-right: 10px;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
padding-bottom: 4px; padding-bottom: 4px;
justify-content: space-between;
` `
const AvatarWrapper = styled.div` const AvatarWrapper = styled.div`
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
gap: 10px;
` `
const UserWrap = styled.div` const UserWrap = styled.div`
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
margin-left: 12px;
` `
const UserName = styled.div` const UserName = styled.div`

View File

@ -217,7 +217,6 @@ const Container = styled(Scrollbar)`
display: flex; display: flex;
flex-direction: column-reverse; flex-direction: column-reverse;
padding: 10px 0; padding: 10px 0;
background-color: var(--color-background);
padding-bottom: 20px; padding-bottom: 20px;
overflow-x: hidden; overflow-x: hidden;
` `

View File

@ -26,7 +26,7 @@ const Prompt: FC<Props> = ({ assistant }) => {
const Container = styled.div` const Container = styled.div`
padding: 10px 20px; padding: 10px 20px;
background-color: var(--color-background-soft); background-color: var(--chat-background-assistant);
margin-bottom: 20px; margin-bottom: 20px;
margin: 0 20px 0 20px; margin: 0 20px 0 20px;
border-radius: 6px; border-radius: 6px;