import { faCopy } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { JSX, useLayoutEffect, useState } from "react"; import { type BundledLanguage, highlight } from "../../highlight"; type Props = { code: string; language: BundledLanguage; }; function Plaintext({ code }: { code: string }) { const lines = code.split("\n"); return (
      
        {lines.map((line, i) => (
          
            {line}
            {i < lines.length - 1 ? "\n" : ""}
          
        ))}
      
    
); } export default function CodeBlock({ code, language }: Props) { const [nodes, setNodes] = useState(null); const [showCopied, setShowCopied] = useState(false); useLayoutEffect(() => { highlight(code, language) .then(setNodes) .catch(() => setNodes(null)); }, [code, language]); const handleCopy = () => { navigator.clipboard.writeText(code).then(() => { setShowCopied(true); setTimeout(() => setShowCopied(false), 3000); }); }; return (
{code !== "" && ( )}
{nodes ?? } </div> </div> ); }