From 3dc4947e26df76aebb4ed68946406fbee87160ea Mon Sep 17 00:00:00 2001 From: Yuzhong Zhang <141388234+BetterAndBetterII@users.noreply.github.com> Date: Mon, 31 Mar 2025 21:11:28 +0800 Subject: [PATCH] optimize: Sticky CopyButton in CodeBlock (#4205) --- .../src/pages/home/Markdown/Artifacts.tsx | 1 + .../src/pages/home/Markdown/CodeBlock.tsx | 22 ++++++++++++++++--- .../src/pages/home/Markdown/Markdown.tsx | 3 ++- .../src/pages/home/Messages/Message.tsx | 2 +- .../src/pages/home/Messages/MessageGroup.tsx | 5 +++-- .../src/pages/home/Messages/Messages.tsx | 4 +++- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/renderer/src/pages/home/Markdown/Artifacts.tsx b/src/renderer/src/pages/home/Markdown/Artifacts.tsx index 09b8243d..746eb170 100644 --- a/src/renderer/src/pages/home/Markdown/Artifacts.tsx +++ b/src/renderer/src/pages/home/Markdown/Artifacts.tsx @@ -75,6 +75,7 @@ const Container = styled.div` display: flex; flex-direction: row; gap: 8px; + padding-bottom: 10px; ` export default Artifacts diff --git a/src/renderer/src/pages/home/Markdown/CodeBlock.tsx b/src/renderer/src/pages/home/Markdown/CodeBlock.tsx index 75ea868c..3f56633d 100644 --- a/src/renderer/src/pages/home/Markdown/CodeBlock.tsx +++ b/src/renderer/src/pages/home/Markdown/CodeBlock.tsx @@ -98,12 +98,20 @@ const CodeBlock: React.FC = ({ children, className }) => { )} {'<' + language.toUpperCase() + '>'} - + + + + {showDownloadButton && } {codeWrappable && setIsUnwrapped(!isUnwrapped)} />} - + ` .shiki { @@ -376,4 +386,10 @@ const DownloadWrapper = styled.div` } ` +const StickyWrapper = styled.div` + position: sticky; + top: 28px; + z-index: 10; +` + export default memo(CodeBlock) diff --git a/src/renderer/src/pages/home/Markdown/Markdown.tsx b/src/renderer/src/pages/home/Markdown/Markdown.tsx index 257b52c1..bf303935 100644 --- a/src/renderer/src/pages/home/Markdown/Markdown.tsx +++ b/src/renderer/src/pages/home/Markdown/Markdown.tsx @@ -64,7 +64,8 @@ const Markdown: FC = ({ message, citationsData }) => { return }, code: CodeBlock, - img: ImagePreview + img: ImagePreview, + pre: (props: any) =>
     } as Partial
 
     if (messageContent.includes('