import { useEffect, useState } from "react" import { motion } from "framer-motion" import { Copy, Check } from "lucide-react" import { Button } from "@/components/ui/button" import Prism from "prismjs" import "prismjs/themes/prism-tomorrow.css" import "prismjs/components/prism-javascript" import "prismjs/components/prism-typescript" import "prismjs/components/prism-python" import "prismjs/components/prism-jsx" import "prismjs/components/prism-tsx" import "prismjs/components/prism-json" import "prismjs/components/prism-bash" import "prismjs/components/prism-markup" import "prismjs/components/prism-css" interface CodeSnippetProps { filename?: string language?: string code: string delay?: number className?: string showLineNumbers?: boolean copyable?: boolean } const LANGUAGE_MAP: Record = { js: "javascript", javascript: "javascript", ts: "typescript", typescript: "typescript", py: "python", python: "python", jsx: "jsx", tsx: "tsx", json: "json", bash: "bash", sh: "bash", html: "markup", css: "css", sql: "sql", go: "go", rust: "rust", java: "java", }; export function CodeSnippet({ filename = "example.js", language = "javascript", code, delay = 0.5, className = "", showLineNumbers = false, copyable = true, }: CodeSnippetProps) { const [copied, setCopied] = useState(false); const prismLanguage = LANGUAGE_MAP[language.toLowerCase()] || language; useEffect(() => { // Highlight code whenever component mounts or code changes Prism.highlightAll(); }, [code, language]); const handleCopy = async () => { try { await navigator.clipboard.writeText(code); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error("Failed to copy:", err); } }; const displayLanguage = language.toUpperCase(); return ( {/* Header */}
{filename}
{copyable && ( )}
{/* Code Area */}
          
            {code}
          
        
); }