'use client'; import { useState } from 'react'; import { useTheme } from 'next-themes'; import CodeMirror from '@uiw/react-codemirror'; import { vscodeDark, vscodeLight } from '@uiw/codemirror-theme-vscode'; import { EditorView } from '@codemirror/view'; import { IconCheck, IconCopy } from '@tabler/icons-react'; import { cn } from '@/lib/utils'; import { getCodeMirrorExtension } from '@/lib/languages'; type CodeBlockProps = { children: React.ReactNode; className?: string; }; const getLanguageExtension = (language?: string) => { if (!language) return undefined; const lang = language.replace('language-', '').toLowerCase(); return getCodeMirrorExtension(lang); }; export function CodeBlock({ children, className }: CodeBlockProps) { const [copied, setCopied] = useState(false); const { theme, systemTheme } = useTheme(); const effectiveTheme = theme === 'system' ? systemTheme : theme; const code = String(children).replace(/\n$/, ''); const languageExtension = getLanguageExtension(className); // Custom padding theme const paddingTheme = EditorView.theme({ '&': { padding: '2px 2px', }, }); const handleCopy = async () => { try { await navigator.clipboard.writeText(code); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error('Failed to copy:', err); } }; return (