import React, { useCallback, useMemo, useState } from 'react'; import { Check, Copy } from 'lucide-react'; import useRenderTracker from '../../../hooks/useRenderTracker'; import { copyTextToClipboard } from '../../../utils/clipboard'; import { highlightCode } from '../../../utils/highlightCode'; interface CodeBlockProps { content: string; language?: string; } const normalizeLanguage = (language?: string) => ( language?.trim() ? language.trim().toLowerCase() : 'text' ); const CodeBlock: React.FC = ({ content, language }) => { const [isCopied, setIsCopied] = useState(false); const normalizedLanguage = useMemo(() => normalizeLanguage(language), [language]); // Highlight synchronously via a static import. (A dynamic import was failing to // load its chunk inside the WordPress plugin's Shadow-DOM bundle, leaving code // unstyled; bundling it keeps highlighting working in both web and plugin.) const highlightedHtml = useMemo( () => highlightCode(content, normalizedLanguage), [content, normalizedLanguage], ); useRenderTracker('CodeBlock', { content, language: normalizedLanguage, }); const handleCopyClick = useCallback(async () => { const copied = await copyTextToClipboard(content); if (copied) { setIsCopied(true); setTimeout(() => setIsCopied(false), 3000); } else { console.error('Failed to copy text: unsupported environment'); } }, [content]); return (
{normalizedLanguage}
        
      
); }; export default React.memo(CodeBlock);