refactor(Messages): enhance message rendering and navigation exclusions

- Updated styles for message content and group containers to improve layout.
- Added new selectors to exclude additional elements from navigation.
- Implemented conditional rendering for mentions in message content.
- Simplified token display logic in message tokens component.
This commit is contained in:
kangfenmao 2025-05-29 14:55:05 +08:00
parent 1a4dbd1843
commit 49ede72406
5 changed files with 33 additions and 29 deletions

View File

@ -147,11 +147,16 @@ ul {
background-color: var(--color-white-soft);
}
}
.group-grid-container.horizontal,
.group-grid-container.grid {
.message-content-container-assistant {
padding: 0;
}
}
.group-message-wrapper {
background-color: var(--color-background);
.message-content-container {
width: 100%;
border: 1px solid var(--color-background-mute);
}
}
.group-menu-bar {
@ -170,6 +175,7 @@ span.highlight {
background-color: var(--color-background-highlight);
color: var(--color-highlight);
}
span.highlight.selected {
background-color: var(--color-background-highlight-accent);
}

View File

@ -18,7 +18,7 @@ import styled from 'styled-components'
import ChatFlowHistory from './ChatFlowHistory'
// Exclude some areas from the navigation
const EXCLUDED_SELECTORS = ['.MessageFooter', '.code-toolbar', '.ant-collapse-header']
const EXCLUDED_SELECTORS = ['.MessageFooter', '.code-toolbar', '.ant-collapse-header', '.group-menu-bar', '.code-block']
interface ChatNavigationProps {
containerId: string

View File

@ -1,6 +1,7 @@
import { getModelUniqId } from '@renderer/services/ModelService'
import type { Message } from '@renderer/types/newMessage'
import { Flex } from 'antd'
import { isEmpty } from 'lodash'
import React from 'react'
import styled from 'styled-components'
@ -12,9 +13,11 @@ interface Props {
const MessageContent: React.FC<Props> = ({ message }) => {
return (
<>
<Flex gap="8px" wrap style={{ marginBottom: 10 }}>
{message.mentions?.map((model) => <MentionTag key={getModelUniqId(model)}>{'@' + model.name}</MentionTag>)}
</Flex>
{!isEmpty(message.mentions) && (
<Flex gap="8px" wrap style={{ marginBottom: 10 }}>
{message.mentions?.map((model) => <MentionTag key={getModelUniqId(model)}>{'@' + model.name}</MentionTag>)}
</Flex>
)}
<MessageBlockRenderer blocks={message.blocks} message={message} />
</>
)

View File

@ -204,8 +204,7 @@ const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElem
</MessageWrapper>
}
trigger={gridPopoverTrigger}
styles={{ root: { maxWidth: '60vw', minWidth: '550px', overflowY: 'auto', zIndex: 1000 } }}
getPopupContainer={(triggerNode) => triggerNode.parentNode as HTMLElement}>
styles={{ root: { maxWidth: '60vw', minWidth: '550px', overflowY: 'auto', zIndex: 1000 } }}>
<div style={{ cursor: 'pointer' }}>{messageContent}</div>
</Popover>
)

View File

@ -1,6 +1,7 @@
// import { useRuntime } from '@renderer/hooks/useRuntime'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import type { Message } from '@renderer/types/newMessage'
import { Popover } from 'antd'
import { t } from 'i18next'
import styled from 'styled-components'
@ -40,15 +41,24 @@ const MessgeTokens: React.FC<MessageTokensProps> = ({ message }) => {
})
}
const tokensInfo = (
<span className="tokens">
Tokens:
<span>{message?.usage?.total_tokens}</span>
<span>{message?.usage?.prompt_tokens}</span>
<span>{message?.usage?.completion_tokens}</span>
</span>
)
return (
<MessageMetadata className={`message-tokens ${hasMetrics ? 'has-metrics' : ''}`} onClick={locateMessage}>
<span className="metrics">{metrixs}</span>
<span className="tokens">
Tokens:
<span>{message?.usage?.total_tokens}</span>
<span>{message?.usage?.prompt_tokens}</span>
<span>{message?.usage?.completion_tokens}</span>
</span>
<MessageMetadata className="message-tokens" onClick={locateMessage}>
{hasMetrics ? (
<Popover content={metrixs} placement="top" trigger="hover" styles={{ root: { fontSize: 11 } }}>
{tokensInfo}
</Popover>
) : (
tokensInfo
)}
</MessageMetadata>
)
}
@ -64,10 +74,6 @@ const MessageMetadata = styled.div`
cursor: pointer;
text-align: right;
.metrics {
display: none;
}
.tokens {
display: block;
@ -75,16 +81,6 @@ const MessageMetadata = styled.div`
padding: 0 2px;
}
}
&.has-metrics:hover {
.metrics {
display: block;
}
.tokens {
display: none;
}
}
`
export default MessgeTokens