Skip to content

Commit 2f7dd53

Browse files
authored
Merge pull request #27 from BeyteFlow/copilot/sub-pr-24-another-one
Add HTML sanitization and error handling to MarkdownPreview
2 parents ebcd52f + 0611bab commit 2f7dd53

3 files changed

Lines changed: 42 additions & 5 deletions

File tree

package-lock.json

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"react-dom": "19.2.4",
1919
"react-markdown": "^10.1.0",
2020
"rehype-raw": "^7.0.0",
21+
"rehype-sanitize": "^6.0.0",
2122
"remark-gfm": "^4.0.1"
2223
},
2324
"devDependencies": {

src/components/Generator/MarkdownPreview.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,23 @@
33
import React, { useState } from 'react';
44
import ReactMarkdown from 'react-markdown';
55
import remarkGfm from 'remark-gfm';
6-
import rehypeRaw from 'rehype-raw'; // Add this
6+
import rehypeRaw from 'rehype-raw';
7+
import rehypeSanitize from 'rehype-sanitize';
78
import { Copy, Check, FileCode, } from 'lucide-react';
89

910
export const MarkdownPreview = ({ content }: { content: string }) => {
1011
const [view, setView] = useState<'code' | 'preview'>('preview');
1112
const [copied, setCopied] = useState(false);
1213

1314
const handleCopy = async () => {
14-
await navigator.clipboard.writeText(content);
15-
setCopied(true);
16-
setTimeout(() => setCopied(false), 2000);
15+
try {
16+
await navigator.clipboard.writeText(content);
17+
setCopied(true);
18+
setTimeout(() => setCopied(false), 2000);
19+
} catch (error) {
20+
console.error('Failed to copy to clipboard:', error);
21+
setCopied(false);
22+
}
1723
};
1824

1925
if (!content) return null;
@@ -70,7 +76,7 @@ export const MarkdownPreview = ({ content }: { content: string }) => {
7076
<div className="preview-content">
7177
<ReactMarkdown
7278
remarkPlugins={[remarkGfm]}
73-
rehypePlugins={[rehypeRaw]}
79+
rehypePlugins={[rehypeRaw, rehypeSanitize]}
7480
>
7581
{content}
7682
</ReactMarkdown>

0 commit comments

Comments
 (0)