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> | |
| ); | |
| } | |