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' | |
| import MonacoEditorCopilot from './copilot'; | |
| const config = [ | |
| { | |
| testName: 'example with dispose' | |
| }, | |
| ] | |
| 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, | |
| }) | |
| const initialValue = editor.getValue(); | |
| const encodedJs = encodeURIComponent(initialValue); | |
| const dataUri = "data:text/javascript;charset=utf-8," + encodedJs; | |
| import(dataUri); | |
| const dispose = MonacoEditorCopilot(editor, { testName: 'basic example'} as any); | |
| if (config[0]?.testName === 'example with dispose') { | |
| setTimeout(() => { | |
| dispose(); | |
| }, 1000); | |
| } | |
| return () => { | |
| model.dispose() | |
| editor.dispose() | |
| } | |
| }, []) | |
| return ( | |
| <> | |
| <div id="editor" ref={ref} style={{ height: "100vh" }} /> | |
| </> | |
| ) | |
| } | |