| 
					
				 | 
			
			
				@@ -8,8 +8,7 @@ import RemarkGfm from 'remark-gfm' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import RehypeRaw from 'rehype-raw' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import SyntaxHighlighter from 'react-syntax-highlighter' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { atelierHeathLight } from 'react-syntax-highlighter/dist/esm/styles/hljs' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import type { RefObject } from 'react' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { Component, memo, useEffect, useMemo, useRef, useState } from 'react' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Component, memo, useMemo, useRef, useState } from 'react' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import type { CodeComponent } from 'react-markdown/lib/ast-to-react' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn from '@/utils/classnames' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import CopyBtn from '@/app/components/base/copy-btn' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -77,29 +76,6 @@ export function PreCode(props: { children: any }) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// eslint-disable-next-line unused-imports/no-unused-vars 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const useLazyLoad = (ref: RefObject<Element>): boolean => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const [isIntersecting, setIntersecting] = useState<boolean>(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  useEffect(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const observer = new IntersectionObserver(([entry]) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (entry.isIntersecting) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setIntersecting(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        observer.disconnect() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (ref.current) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      observer.observe(ref.current) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      observer.disconnect() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }, [ref]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return isIntersecting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // **Add code block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // Avoid error #185 (Maximum update depth exceeded. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -123,7 +99,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return JSON.parse(String(children).replace(/\n$/, '')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      catch (error) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      catch (error) { } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return JSON.parse('{"title":{"text":"ECharts error - Wrong JSON format."}}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, [language, children]) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,7 +157,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <div className='text-[13px] text-gray-500 font-normal'>{languageShowName}</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <div style={{ display: 'flex' }}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {(['mermaid', 'svg']).includes(language!) && <SVGBtn isSVG={isSVG} setIsSVG={setIsSVG}/>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          {(['mermaid', 'svg']).includes(language!) && <SVGBtn isSVG={isSVG} setIsSVG={setIsSVG} />} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           <CopyBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             className='mr-1' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             value={String(children).replace(/\n$/, '')} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,7 +237,7 @@ export function Markdown(props: { content: string; className?: string }) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return (tree) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               const iterate = (node: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (node.type === 'element' && !node.properties?.src && node.properties?.ref && node.properties.ref.startsWith('{') && node.properties.ref.endsWith('}')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node.type === 'element' && node.properties?.ref) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   delete node.properties.ref 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (node.children) 
			 |