style(chat): 对话界面改为左右布局
This commit is contained in:
parent
b8c70a3061
commit
89dd35c98d
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)`
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)`
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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`
|
||||||
|
|||||||
@ -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;
|
||||||
`
|
`
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user