Spaces:
Running
Running
| import { useState } from 'react'; | |
| import { Check, Copy } from 'lucide-react'; | |
| import { cn } from '../lib/utils'; | |
| export default function CodeBlock({ code, language = 'bash' }) { | |
| const [copied, setCopied] = useState(false); | |
| const copy = () => { | |
| navigator.clipboard.writeText(code); | |
| setCopied(true); | |
| setTimeout(() => setCopied(false), 2000); | |
| }; | |
| return ( | |
| <div className="relative group rounded-xl overflow-hidden bg-slate-900 border border-slate-800"> | |
| <div className="absolute right-3 top-3 opacity-0 group-hover:opacity-100 transition-opacity"> | |
| <button | |
| onClick={copy} | |
| className="p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded-lg transition-colors" | |
| > | |
| {copied ? <Check className="w-4 h-4 text-green-500" /> : <Copy className="w-4 h-4" />} | |
| </button> | |
| </div> | |
| <pre className="p-4 overflow-x-auto text-sm font-mono text-slate-300 leading-relaxed"> | |
| <code>{code}</code> | |
| </pre> | |
| </div> | |
| ); | |
| } | |