UNPKG

@milkdown/plugin-trailing

Version:

The trailing plugin of [milkdown](https://milkdown.dev/).

56 lines (55 loc) 1.69 kB
import { PluginKey, Plugin } from "@milkdown/prose/state"; import { $ctx, $prose } from "@milkdown/utils"; const trailingConfig = $ctx( { shouldAppend: (lastNode) => { if (!lastNode) return false; if (["heading", "paragraph"].includes(lastNode.type.name)) return false; return true; }, getNode: (state) => state.schema.nodes.paragraph.create() }, "trailingConfig" ); trailingConfig.meta = { package: "@milkdown/plugin-trailing", displayName: "Ctx<trailingConfig>" }; const trailingPlugin = $prose((ctx) => { const trailingPluginKey = new PluginKey("MILKDOWN_TRAILING"); const { shouldAppend, getNode } = ctx.get(trailingConfig.key); const plugin = new Plugin({ key: trailingPluginKey, state: { init: (_, state) => { const lastNode = state.tr.doc.lastChild; return shouldAppend(lastNode, state); }, apply: (tr, value, _, state) => { if (!tr.docChanged) return value; const lastNode = tr.doc.lastChild; return shouldAppend(lastNode, state); } }, appendTransaction: (_, __, state) => { const { doc, tr } = state; const nodeType = getNode == null ? void 0 : getNode(state); const shouldInsertNodeAtEnd = plugin.getState(state); const endPosition = doc.content.size; if (!shouldInsertNodeAtEnd || !nodeType) return; return tr.insert(endPosition, nodeType); } }); return plugin; }); trailingPlugin.meta = { package: "@milkdown/plugin-trailing", displayName: "Prose<trailing>" }; const trailing = [trailingConfig, trailingPlugin]; export { trailing, trailingConfig, trailingPlugin }; //# sourceMappingURL=index.js.map