Spaces:
Paused
Paused
'use client' | |
import * as React from 'react' | |
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api' | |
import { createConfiguredEditor } from 'vscode/monaco' | |
import './setup' | |
import 'monaco-editor/esm/vs/language/typescript/monaco.contribution' | |
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({ | |
jsx: monaco.languages.typescript.JsxEmit.Preserve, | |
}) | |
export default function Editor({ defaultValue }: { defaultValue: string }) { | |
const ref = React.useRef<HTMLDivElement>(null) | |
React.useLayoutEffect(() => { | |
const model = monaco.editor.createModel( | |
defaultValue, | |
'typescript', | |
monaco.Uri.file('index.ts') | |
) | |
const editor = createConfiguredEditor(ref.current!, { | |
model, | |
automaticLayout: true, | |
}) | |
return () => { | |
model.dispose() | |
editor.dispose() | |
} | |
}, []) | |
return <div ref={ref} style={{ height: 200 }} /> | |
} | |