akhaliq's picture
akhaliq HF Staff
new UI
b42dfef
raw
history blame
1.62 kB
'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<any>(null);
// Map our language names to Monaco language IDs
const getMonacoLanguage = (lang: string): string => {
const languageMap: Record<string, string> = {
'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 (
<div className="h-full overflow-hidden">
<Editor
height="100%"
language={getMonacoLanguage(language)}
value={code}
onChange={(value) => 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}
/>
</div>
);
}