Spaces:
Runtime error
Runtime error
"use client"; | |
import React from "react"; | |
import { CheckIcon, CopyIcon } from "@radix-ui/react-icons"; | |
import { useTheme } from "next-themes"; | |
import { CodeBlock, dracula, github } from "react-code-blocks"; | |
import { toast } from "sonner"; | |
import { Button } from "./ui/button"; | |
interface ButtonCodeblockProps { | |
code: string; | |
lang: string; | |
} | |
export default function CodeDisplayBlock({ code, lang }: ButtonCodeblockProps) { | |
const [isCopied, setisCopied] = React.useState(false); | |
const { theme } = useTheme(); | |
const copyToClipboard = () => { | |
navigator.clipboard.writeText(code); | |
setisCopied(true); | |
toast.success("Code copied to clipboard!"); | |
setTimeout(() => { | |
setisCopied(false); | |
}, 1500); | |
}; | |
return ( | |
<div className="relative my-4 overflow-scroll overflow-x-scroll flex flex-col text-start "> | |
<CodeBlock | |
customStyle={ | |
theme === "dark" | |
? { background: "#303033" } | |
: { background: "#fcfcfc" } | |
} | |
text={code} | |
language="tsx" | |
showLineNumbers={false} | |
theme={theme === "dark" ? dracula : github} | |
/> | |
<Button | |
onClick={copyToClipboard} | |
variant="ghost" | |
size="iconSm" | |
className="h-5 w-5 absolute top-2 right-2" | |
> | |
{isCopied ? ( | |
<CheckIcon className="w-4 h-4" /> | |
) : ( | |
<CopyIcon className="w-4 h-4" /> | |
)} | |
</Button> | |
</div> | |
); | |
} | |