Implemented cryptomining, although its extremely bad optimized.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { useMemo } from 'react';
|
||||
import CodeBlock from './CodeBlock';
|
||||
|
||||
interface MessageContentProps {
|
||||
content: string;
|
||||
isLoading?: boolean;
|
||||
}
|
||||
|
||||
const MessageContent = ({ content, isLoading }: MessageContentProps) => {
|
||||
const parts = useMemo(() => {
|
||||
// Parse content for code blocks
|
||||
const codeBlockRegex = /```(\w*)\n?([\s\S]*?)```/g;
|
||||
const result: { type: 'text' | 'code'; content: string; language?: string }[] = [];
|
||||
|
||||
let lastIndex = 0;
|
||||
let match;
|
||||
|
||||
while ((match = codeBlockRegex.exec(content)) !== null) {
|
||||
// Add text before code block
|
||||
if (match.index > lastIndex) {
|
||||
const textBefore = content.slice(lastIndex, match.index);
|
||||
if (textBefore.trim()) {
|
||||
result.push({ type: 'text', content: textBefore });
|
||||
}
|
||||
}
|
||||
|
||||
// Add code block
|
||||
result.push({
|
||||
type: 'code',
|
||||
language: match[1] || 'text',
|
||||
content: match[2].trim(),
|
||||
});
|
||||
|
||||
lastIndex = match.index + match[0].length;
|
||||
}
|
||||
|
||||
// Add remaining text
|
||||
if (lastIndex < content.length) {
|
||||
const remaining = content.slice(lastIndex);
|
||||
if (remaining.trim()) {
|
||||
result.push({ type: 'text', content: remaining });
|
||||
}
|
||||
}
|
||||
|
||||
// If no code blocks found, return entire content as text
|
||||
if (result.length === 0 && content) {
|
||||
result.push({ type: 'text', content });
|
||||
}
|
||||
|
||||
return result;
|
||||
}, [content]);
|
||||
|
||||
return (
|
||||
<div className="font-pixel text-sm text-primary">
|
||||
{parts.map((part, index) => (
|
||||
<div key={index}>
|
||||
{part.type === 'code' ? (
|
||||
<CodeBlock code={part.content} language={part.language || 'text'} />
|
||||
) : (
|
||||
<p className="whitespace-pre-wrap break-words">{part.content}</p>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
{isLoading && content === '' && (
|
||||
<span className="animate-pulse">▊</span>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default MessageContent;
|
||||
Reference in New Issue
Block a user