import { Button, IconCheck, IconCopy, IconFile, IconTerminal } from '@supabase/ui' import { useState } from 'react' import CopyToClipboard from 'react-copy-to-clipboard' import { Light as SyntaxHighlighter } from 'react-syntax-highlighter' import bash from 'react-syntax-highlighter/dist/cjs/languages/hljs/bash' import js from 'react-syntax-highlighter/dist/cjs/languages/hljs/javascript' import py from 'react-syntax-highlighter/dist/cjs/languages/hljs/python' import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql' import monokaiCustomTheme from './CodeBlock.utils' export interface CodeBlockProps { lang: 'js' | 'sql' | 'py' | 'bash' | 'ts' | 'tsx' startingLineNumber?: number hideCopy?: boolean showLineNumbers?: boolean className?: string children?: string size?: 'small' | 'medium' | 'large' } function CodeBlock(props: CodeBlockProps) { const [copied, setCopied] = useState(false) const firstLine = props.children ? props.children.split('\n')[0] : '' let filename = '' if (firstLine.includes('filename =')) { filename = firstLine.split('=')[1] } const content = props.children && filename ? props.children.replace(`${firstLine}\n\n`, '') : props.children const handleCopy = () => { setCopied(true) setTimeout(() => { setCopied(false) }, 1000) } let lang = props.lang ? props.lang : props.className ? props.className.replace('language-', '') : 'js' // force jsx to be js highlighted if (lang === 'jsx') lang = 'js' SyntaxHighlighter.registerLanguage('js', js) SyntaxHighlighter.registerLanguage('py', py) SyntaxHighlighter.registerLanguage('sql', sql) SyntaxHighlighter.registerLanguage('bash', bash) // const large = props.size === 'large' ? true : false const large = false return (