import { EditorState } from 'prosemirror-state'; import { type DirectEditorProps, EditorView } from 'prosemirror-view'; import { Schema, DOMParser } from 'prosemirror-model'; import { buildPlugins, type PluginOptions } from './plugins/index'; import { schemaNodes, schemaMarks } from './schema/index'; const schema = new Schema({ nodes: schemaNodes, marks: schemaMarks, }); export const createDocument = (content: string) => { const htmlString = `
${content}
`; const parser = new window.DOMParser(); const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild; return DOMParser.fromSchema(schema).parse(element as Element); }; export const initProsemirrorEditor = ( dom: Element, content: string, props: Omit, pluginOptions?: PluginOptions, ) => { return new EditorView(dom, { state: EditorState.create({ doc: createDocument(content), plugins: buildPlugins(schema, pluginOptions), }), ...props, }); };