UNPKG

@rtdui/editor

Version:

React rich text editor based on tiptap

82 lines (78 loc) 2.28 kB
'use client'; 'use strict'; var core = require('@tiptap/core'); var katex = require('katex'); var prosemirrorState = require('prosemirror-state'); var prosemirrorView = require('prosemirror-view'); function getDecorations({ editor, doc, name, katexOptions, selection }) { const decorations = []; core.findChildren(doc, (node) => node.type.name === name).forEach((block) => { const from = block.pos + 1; const to = from + block.node.textContent.length; const mathText = block.node.textContent; if (selection.$anchor.pos < from || selection.$anchor.pos > to || !editor.isEditable) { const mathRender = document.createElement("div"); mathRender.classList.add("tiptap-math-render"); katex.render(mathText, mathRender, { displayMode: true, output: "html" }); const decoration = prosemirrorView.Decoration.widget(from, mathRender); decorations.push(decoration); const decoration2 = prosemirrorView.Decoration.inline(from, to, { nodeName: "pre", class: "titap-math-source hidden" }); decorations.push(decoration2); } else if (editor.isEditable) { const decoration2 = prosemirrorView.Decoration.inline(from, to, { nodeName: "pre", class: "titap-math-source" }); decorations.push(decoration2); } }); return prosemirrorView.DecorationSet.create(doc, decorations); } function KatexBlockPlugin({ editor, name, katexOptions }) { const katexBlockPlugin = new prosemirrorState.Plugin({ key: new prosemirrorState.PluginKey("mathKatexBlock"), state: { init: (_, { doc, selection }) => getDecorations({ editor, doc, name, katexOptions, selection }), apply: (transaction, decorationSet, oldState, newState) => { const { selection } = newState; return getDecorations({ editor, doc: transaction.doc, name, katexOptions, selection }); } }, props: { decorations(state) { return katexBlockPlugin.getState(state); } } }); return katexBlockPlugin; } exports.KatexBlockPlugin = KatexBlockPlugin; //# sourceMappingURL=math-katex-block-plugin.cjs.map