'use client'; import { useEffect, useRef } from 'react'; import Editor from '@monaco-editor/react'; interface CodeEditorProps { code: string; language: string; onChange?: (value: string) => void; readOnly?: boolean; } export default function CodeEditor({ code, language, onChange, readOnly = false }: CodeEditorProps) { const editorRef = useRef(null); // Map our language names to Monaco language IDs const getMonacoLanguage = (lang: string): string => { const languageMap: Record = { 'html': 'html', 'gradio': 'python', 'streamlit': 'python', 'transformers.js': 'javascript', 'react': 'typescript', 'comfyui': 'json', }; return languageMap[lang] || 'plaintext'; }; const handleEditorDidMount = (editor: any) => { editorRef.current = editor; }; return (
onChange && onChange(value || '')} theme="vs-dark" options={{ readOnly, minimap: { enabled: true }, fontSize: 14, fontFamily: "'SF Mono', 'JetBrains Mono', 'Menlo', 'Monaco', 'Courier New', monospace", wordWrap: 'on', lineNumbers: 'on', scrollBeyondLastLine: false, automaticLayout: true, tabSize: 2, padding: { top: 16, bottom: 16 }, lineHeight: 22, letterSpacing: 0.5, }} onMount={handleEditorDidMount} />
); }