Spaces:
Sleeping
Sleeping
File size: 1,247 Bytes
c6a10da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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; |