Files
vulcan/vweb/src/forge_editor.jsx
T

32 lines
1.0 KiB
React
Raw Normal View History

2024-04-28 00:02:24 -05:00
import './snippet_emulator.css'
2024-04-30 21:13:23 -05:00
import React, {useEffect, useRef} from 'react'
2024-04-28 01:39:29 -05:00
import {basicSetup, EditorView} from 'codemirror'
2024-04-30 21:13:23 -05:00
import {keymap} from '@codemirror/view'
import {indentWithTab} from '@codemirror/commands'
import {StreamLanguage} from '@codemirror/language'
2024-04-28 01:39:29 -05:00
import {gruvboxDark} from 'cm6-theme-gruvbox-dark'
2024-04-30 21:13:23 -05:00
import ForgeHighlighter from './forge_highlighter'
2024-04-28 00:02:24 -05:00
export default function ForgeEditor({ src, updateSrc }) {
2024-04-28 01:39:29 -05:00
const editor = useRef(null)
const container = useRef(null)
useEffect(() => {
2024-04-30 21:13:23 -05:00
editor.current = new EditorView({
doc: src,
extensions: [
basicSetup,
keymap.of([indentWithTab]),
gruvboxDark,
EditorView.updateListener.of((update) => {
updateSrc(update.state.doc.text.join('\n'))
}),
StreamLanguage.define(ForgeHighlighter)
],
parent: container.current
})
}, [])
2024-04-28 01:39:29 -05:00
return <div className='editor' ref={container}/>
2024-04-28 00:02:24 -05:00
}