import React, { useEffect, useRef } from 'react'; import Prism from 'prismjs'; import { detectLanguage } from '../utils/languageDetect'; // Prism core styles and plugins import 'prismjs/themes/prism-tomorrow.css'; import 'prismjs/plugins/line-numbers/prism-line-numbers.css'; import 'prismjs/plugins/line-numbers/prism-line-numbers'; // Required languages import 'prismjs/components/prism-clike'; import 'prismjs/components/prism-markup-templating'; import 'prismjs/components/prism-python'; import 'prismjs/components/prism-javascript'; import 'prismjs/components/prism-typescript'; import 'prismjs/components/prism-java'; import 'prismjs/components/prism-c'; import 'prismjs/components/prism-cpp'; import 'prismjs/components/prism-bash'; import 'prismjs/components/prism-shell-session'; import 'prismjs/components/prism-sql'; import 'prismjs/components/prism-markup'; // HTML import 'prismjs/components/prism-css'; import 'prismjs/components/prism-go'; import 'prismjs/components/prism-php'; import 'prismjs/components/prism-ruby'; import 'prismjs/components/prism-kotlin'; import 'prismjs/components/prism-swift'; import 'prismjs/components/prism-rust'; import 'prismjs/components/prism-scala'; import 'prismjs/components/prism-dart'; export default function CodeBlock({ content }) { const codeRef = useRef(null); const lines = content.split('\n'); const firstLine = lines[0].trim(); const hasLang = /^[a-zA-Z]+$/.test(firstLine); const lang = hasLang ? firstLine.toLowerCase() : detectLanguage(content) || 'markdown'; const code = hasLang ? lines.slice(1).join('\n') : content; //const escapedCode = escapeHTML(code); useEffect(() => { if (codeRef.current) { Prism.highlightElement(codeRef.current); } }, [code, lang]); const handleCopy = () => { navigator.clipboard.writeText(code).then(() => { alert('Copied to clipboard!'); }); }; return (
{lang.toUpperCase()}
        
          {code}
        
      
); }