insiderNFT / src /components /CodeBlock.tsx
yonagush's picture
Create CodeBlock.tsx
c6a10da verified
import React from 'react';
import { Copy, Check } from 'lucide-react';
interface CodeBlockProps {
language: string;
code: string;
filename?: string;
}
const CodeBlock: React.FC<CodeBlockProps> = ({ language, code, filename }) => {
const [copied, setCopied] = React.useState(false);
const handleCopy = () => {
navigator.clipboard.writeText(code);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
return (
<div className="rounded-xl overflow-hidden bg-[#1e1e1e] border border-gray-700 my-4 shadow-lg">
{filename && (
<div className="flex justify-between items-center px-4 py-2 bg-[#252526] border-b border-gray-700">
<span className="text-xs text-gray-400 font-mono">{filename}</span>
<button
onClick={handleCopy}
className="text-gray-400 hover:text-white transition-colors"
>
{copied ? <Check size={14} className="text-green-400" /> : <Copy size={14} />}
</button>
</div>
)}
<div className="p-4 overflow-x-auto">
<pre className="font-mono text-sm leading-relaxed text-gray-300">
<code>{code}</code>
</pre>
</div>
</div>
);
};
export default CodeBlock;