Spaces:
Runtime error
Runtime error
import { StreamLanguage } from '@codemirror/language'; | |
import { go } from '@codemirror/legacy-modes/mode/go'; | |
import { tokyoNight } from '@uiw/codemirror-theme-tokyo-night'; | |
import CodeMirror from '@uiw/react-codemirror'; | |
import { FC, useEffect, useState } from 'react'; | |
interface Props { | |
code: string; | |
editable?: boolean; | |
onChange?: (value: string) => void; | |
} | |
export const CodeBlock: FC<Props> = ({ | |
code, | |
editable = false, | |
onChange = () => {}, | |
}) => { | |
const [copyText, setCopyText] = useState<string>('Copy'); | |
useEffect(() => { | |
const timeout = setTimeout(() => { | |
setCopyText('Copy'); | |
}, 2000); | |
return () => clearTimeout(timeout); | |
}, [copyText]); | |
return ( | |
<div className="relative"> | |
<button | |
className="absolute right-0 top-0 z-10 rounded bg-[#1A1B26] p-1 text-xs text-white hover:bg-[#2D2E3A] active:bg-[#2D2E3A]" | |
onClick={() => { | |
navigator.clipboard.writeText(code); | |
setCopyText('Copied!'); | |
}} | |
> | |
{copyText} | |
</button> | |
<CodeMirror | |
editable={editable} | |
value={code} | |
minHeight="500px" | |
extensions={[StreamLanguage.define(go)]} | |
theme={tokyoNight} | |
onChange={(value) => onChange(value)} | |
/> | |
</div> | |
); | |
}; | |