diff --git a/src/renderer/src/assets/styles/markdown.scss b/src/renderer/src/assets/styles/markdown.scss index 1fbff5a20d..d04c7be13a 100644 --- a/src/renderer/src/assets/styles/markdown.scss +++ b/src/renderer/src/assets/styles/markdown.scss @@ -3,8 +3,6 @@ line-height: 1.6; user-select: text; word-break: break-word; - letter-spacing: 0.02em; - word-spacing: 0.05em; h1:first-child, h2:first-child, @@ -59,7 +57,7 @@ p { margin: 1.3em 0; white-space: pre-wrap; - line-height: 2; + line-height: 1.6; &:last-child { margin-bottom: 5px; @@ -87,7 +85,7 @@ li { margin-bottom: 0.5em; pre { - margin: 1.5em 0; + margin: 1.5em 0 !important; } &::marker { color: var(--color-text-3); @@ -201,6 +199,7 @@ img { max-width: 100%; height: auto; + margin: 10px 0; } a, diff --git a/src/renderer/src/components/CodeBlockView/HtmlArtifactsCard.tsx b/src/renderer/src/components/CodeBlockView/HtmlArtifactsCard.tsx index 76567dec6a..62822de13a 100644 --- a/src/renderer/src/components/CodeBlockView/HtmlArtifactsCard.tsx +++ b/src/renderer/src/components/CodeBlockView/HtmlArtifactsCard.tsx @@ -188,12 +188,6 @@ const HtmlArtifactsCard: FC = ({ html }) => { HTML - {isStreaming && ( - - - {t('html_artifacts.generating')} - - )} {isStreaming && !hasContent ? ( @@ -336,42 +330,16 @@ const TypeBadge = styled.div` display: inline-flex; align-items: center; gap: 4px; - padding: 4px 8px; + padding: 3px 6px; background: var(--color-background-mute); border: 1px solid var(--color-border); border-radius: 6px; - font-size: 11px; + font-size: 10px; font-weight: 500; color: var(--color-text-secondary); width: fit-content; ` -const StreamingIndicator = styled.div` - display: flex; - align-items: center; - gap: 8px; - padding: 8px 12px; - background: var(--color-status-warning); - border: 1px solid var(--color-status-warning); - border-radius: 8px; - color: var(--color-text); - font-size: 12px; - opacity: 0.9; - - [theme-mode='light'] & { - background: #fef3c7; - border-color: #fbbf24; - color: #92400e; - } -` - -const StreamingText = styled.div` - display: flex; - align-items: center; - gap: 4px; - font-weight: 500; -` - const Content = styled.div` padding: 0; background: var(--color-background); diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 6bc5623b75..07f2976a3e 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -955,7 +955,7 @@ const Container = styled.div` flex-direction: column; position: relative; z-index: 2; - padding: 0 20px 18px 20px; + padding: 0 24px 18px 24px; ` const InputBarContainer = styled.div` diff --git a/src/renderer/src/pages/home/Messages/Blocks/ThinkingBlock.tsx b/src/renderer/src/pages/home/Messages/Blocks/ThinkingBlock.tsx index fa422ea524..bbde2ac75d 100644 --- a/src/renderer/src/pages/home/Messages/Blocks/ThinkingBlock.tsx +++ b/src/renderer/src/pages/home/Messages/Blocks/ThinkingBlock.tsx @@ -151,6 +151,7 @@ const ThinkingTimeSeconds = memo( const CollapseContainer = styled(Collapse)` margin: 15px 0; + margin-top: 5px; ` const MessageTitleLabel = styled.div` diff --git a/src/renderer/src/pages/home/Messages/Blocks/__tests__/__snapshots__/ThinkingBlock.test.tsx.snap b/src/renderer/src/pages/home/Messages/Blocks/__tests__/__snapshots__/ThinkingBlock.test.tsx.snap index 805e7d2a90..101e6bb644 100644 --- a/src/renderer/src/pages/home/Messages/Blocks/__tests__/__snapshots__/ThinkingBlock.test.tsx.snap +++ b/src/renderer/src/pages/home/Messages/Blocks/__tests__/__snapshots__/ThinkingBlock.test.tsx.snap @@ -3,6 +3,7 @@ exports[`ThinkingBlock > basic rendering > should match snapshot 1`] = ` .c0 { margin: 15px 0; + margin-top: 5px; } .c1 { diff --git a/src/renderer/src/pages/home/Messages/CitationsList.tsx b/src/renderer/src/pages/home/Messages/CitationsList.tsx index ec51379784..4087a96fe3 100644 --- a/src/renderer/src/pages/home/Messages/CitationsList.tsx +++ b/src/renderer/src/pages/home/Messages/CitationsList.tsx @@ -188,7 +188,7 @@ const OpenButton = styled(Button)` display: flex; align-items: center; padding: 3px 8px; - margin: 8px 0; + margin-bottom: 8px; align-self: flex-start; font-size: 12px; background-color: var(--color-background-soft); diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index fbb80b6507..2579477942 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -127,8 +127,6 @@ const MessageItem: FC = ({ ) } - const showHeader = messageStyle === 'plain' || isAssistantMessage - return ( = ({ 'message-user': !isAssistantMessage })} ref={messageContainerRef}> - {showHeader && ( - - )} + {isEditing && ( = ({ {showMenubar && ( - + ` +const MessageFooter = styled.div<{ $isLastMessage: boolean; $messageStyle: 'plain' | 'bubble' }>` display: flex; - flex-direction: ${({ $isLastMessage }) => ($isLastMessage ? 'row-reverse' : 'row')}; + flex-direction: ${({ $isLastMessage, $messageStyle }) => + $isLastMessage && $messageStyle === 'plain' ? 'row-reverse' : 'row'}; align-items: center; justify-content: space-between; gap: 10px; margin-left: 46px; - margin-top: 2px; + margin-top: 8px; ` const NewContextMessage = styled.div` diff --git a/src/renderer/src/pages/home/Messages/MessageHeader.tsx b/src/renderer/src/pages/home/Messages/MessageHeader.tsx index d3f76232a9..a4e01851a4 100644 --- a/src/renderer/src/pages/home/Messages/MessageHeader.tsx +++ b/src/renderer/src/pages/home/Messages/MessageHeader.tsx @@ -57,6 +57,7 @@ const MessageHeader: FC = memo(({ assistant, model, message, topic }) => }, [message, model, t, userName]) const isAssistantMessage = message.role === 'assistant' + const isUserMessage = message.role === 'user' const showMinappIcon = sidebarIcons.visible.includes('minapp') const avatarName = useMemo(() => firstLetter(assistant?.name).toUpperCase(), [assistant?.name]) @@ -68,6 +69,12 @@ const MessageHeader: FC = memo(({ assistant, model, message, topic }) => // eslint-disable-next-line react-hooks/exhaustive-deps }, [model?.provider, showMinappIcon]) + const hideHeader = isBubbleStyle ? isUserMessage && !isMultiSelectMode : false + + if (hideHeader) { + return null + } + return ( {isAssistantMessage ? ( diff --git a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx index e0dc2a4bba..0f0c1f01b7 100644 --- a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx +++ b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx @@ -188,7 +188,7 @@ const MessageMenubar: FC = (props) => { { label: t('common.edit'), key: 'edit', - icon: , + icon: , onClick: onEdit } ] @@ -196,13 +196,13 @@ const MessageMenubar: FC = (props) => { { label: t('chat.message.new.branch'), key: 'new-branch', - icon: , + icon: , onClick: onNewBranch }, { label: t('chat.multiple.select'), key: 'multi-select', - icon: , + icon: , onClick: () => { toggleMultiSelectMode(true) } @@ -210,7 +210,7 @@ const MessageMenubar: FC = (props) => { { label: t('chat.save'), key: 'save', - icon: , + icon: , children: [ { label: t('chat.save.file.title'), @@ -232,7 +232,7 @@ const MessageMenubar: FC = (props) => { { label: t('chat.topics.export.title'), key: 'export', - icon: , + icon: , children: [ exportMenuOptions.plain_text && { label: t('chat.topics.copy.plain_text'), @@ -413,13 +413,14 @@ const MessageMenubar: FC = (props) => { }, [message]) const softHoverBg = isBubbleStyle && !isLastMessage - - const showMessageTokens = isBubbleStyle ? isAssistantMessage : true + const showMessageTokens = !isBubbleStyle + const isUserBubbleStyleMessage = isBubbleStyle && isUserMessage return ( <> {showMessageTokens && } - + {message.role === 'user' && ( = (props) => { )} - {!copied && } + {!copied && } {copied && } @@ -456,7 +457,7 @@ const MessageMenubar: FC = (props) => { open={showRegenerateTooltip} onOpenChange={setShowRegenerateTooltip}> - + @@ -464,7 +465,7 @@ const MessageMenubar: FC = (props) => { {isAssistantMessage && ( - + )} @@ -538,7 +539,7 @@ const MessageMenubar: FC = (props) => { className="message-action-button" onClick={(e) => e.stopPropagation()} $softHoverBg={softHoverBg}> - + @@ -549,7 +550,7 @@ const MessageMenubar: FC = (props) => { {message.useful ? ( ) : ( - + )} @@ -569,7 +570,7 @@ const MessageMenubar: FC = (props) => { mouseEnterDelay={1} open={showDeleteTooltip} onOpenChange={setShowDeleteTooltip}> - + @@ -597,7 +598,10 @@ const MenusBar = styled.div` justify-content: flex-end; align-items: center; gap: 8px; - margin-top: 5px; + + &.user-bubble-style { + margin-top: 5px; + } ` const ActionButton = styled.div<{ $softHoverBg?: boolean }>`