import { useEffect, useRef, useState } from "react"; import Prism from "prismjs"; import "prismjs/components/prism-typescript"; import "prismjs/components/prism-jsx"; import "prismjs/components/prism-tsx"; import "prismjs/components/prism-json"; import "prismjs/components/prism-bash"; import "prismjs/plugins/line-numbers/prism-line-numbers"; import "prismjs/plugins/line-numbers/prism-line-numbers.css"; import { CopyTextButton } from "../CopyTextButton"; import classNames from "classnames"; Prism.manual = true; type CodeBlockProps = { code: string; language?: "typescript" | "json" | "bash" | "tsx"; showCopyButton?: boolean; align?: "top" | "center"; maxHeight?: string; showLineNumbers?: boolean; className?: string; }; export default function CodeBlock({ code, language = "typescript", showCopyButton = true, align = "center", maxHeight, showLineNumbers = true, className, }: CodeBlockProps) { const codeRef = useRef(null); const [isCollapsed, setIsCollapsed] = useState( maxHeight === undefined ? false : true ); useEffect(() => { if (!codeRef.current) { return; } Prism.highlightAllUnder(codeRef.current); }, [code, language, codeRef]); return (
        {code}
      
{showCopyButton === true && ( )} {maxHeight && (
)}
); }