import React from 'react' import ReactMarkdown from 'react-markdown' import { ScrollArea } from '@/components/ui/scroll-area' import remarkGfm from 'remark-gfm' import { cn } from '@/utils/cn' export interface MarkdownPreviewProps { /** Markdown 文件的 URL */ url: string } export interface MarkdownContentProps { /** 直接传入 Markdown 字符串 */ content: string className?: string } /** * 内联 Markdown 渲染组件 - 接收字符串内容直接渲染 */ export function MarkdownContent({ content, className }: MarkdownContentProps) { return (
{content}
) } /** * Markdown 预览组件 - 接收 URL,fetch 内容后渲染 */ export function MarkdownPreview({ url }: MarkdownPreviewProps) { const [content, setContent] = React.useState('') const [loading, setLoading] = React.useState(true) React.useEffect(() => { if (!url) return setLoading(true) fetch(url) .then(res => res.text()) .then(text => setContent(text)) .catch(() => setContent('加载失败')) .finally(() => setLoading(false)) }, [url]) if (loading) { return (
加载中...
) } return (
{content}
) } export default MarkdownPreview