diff --git a/src/components/markdown/CodeBlock.tsx b/src/components/markdown/CodeBlock.tsx index 53911ef..73cbfe2 100644 --- a/src/components/markdown/CodeBlock.tsx +++ b/src/components/markdown/CodeBlock.tsx @@ -1,9 +1,10 @@ 'use client'; import { useEffect, useRef, useState, useMemo } from 'react'; -import { Copy, Check } from 'lucide-react'; +import { Copy, Check, Eye } from 'lucide-react'; import { cn } from '@/lib/utils'; import Prism from 'prismjs'; +import { HtmlPreviewModal } from '@/components/ui/HtmlPreviewModal'; import 'prismjs/components/prism-javascript'; import 'prismjs/components/prism-typescript'; import 'prismjs/components/prism-jsx'; @@ -52,10 +53,15 @@ export function CodeBlock({ className, }: CodeBlockProps) { const [copied, setCopied] = useState(false); + const [previewOpen, setPreviewOpen] = useState(false); // 规范化语言名称 const normalizedLanguage = languageAliases[language.toLowerCase()] || language.toLowerCase(); + // 判断是否支持 HTML 预览 + const isHtmlPreviewable = ['html', 'htm', 'markup'].includes(normalizedLanguage) || + ['html', 'htm'].includes(language.toLowerCase()); + // 使用 useMemo 缓存高亮后的 HTML,避免频繁重新高亮 const highlightedCode = useMemo(() => { const grammar = Prism.languages[normalizedLanguage]; @@ -78,27 +84,41 @@ export function CodeBlock({ const lines = code.split('\n'); return ( -