From 03b922b8c305db33fe5f6d91649b1fea855e8b7e Mon Sep 17 00:00:00 2001 From: yousefed Date: Fri, 24 Jan 2025 10:33:30 +0100 Subject: [PATCH] add factory function for extensions --- packages/core/src/editor/BlockNoteEditor.ts | 32 +++++++++++++-------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/core/src/editor/BlockNoteEditor.ts b/packages/core/src/editor/BlockNoteEditor.ts index a7b78cdaba..e2ae4a7256 100644 --- a/packages/core/src/editor/BlockNoteEditor.ts +++ b/packages/core/src/editor/BlockNoteEditor.ts @@ -9,12 +9,6 @@ import { import { Node, Schema } from "prosemirror-model"; // import "./blocknote.css"; import * as Y from "yjs"; -import { - getBlock, - getNextBlock, - getParentBlock, - getPrevBlock, -} from "../api/blockManipulation/getBlock/getBlock.js"; import { insertBlocks } from "../api/blockManipulation/commands/insertBlocks/insertBlocks.js"; import { moveBlocksDown, @@ -29,15 +23,21 @@ import { import { removeBlocks } from "../api/blockManipulation/commands/removeBlocks/removeBlocks.js"; import { replaceBlocks } from "../api/blockManipulation/commands/replaceBlocks/replaceBlocks.js"; import { updateBlock } from "../api/blockManipulation/commands/updateBlock/updateBlock.js"; -import { insertContentAt } from "../api/blockManipulation/insertContentAt.js"; import { - getTextCursorPosition, - setTextCursorPosition, -} from "../api/blockManipulation/selections/textCursorPosition/textCursorPosition.js"; + getBlock, + getNextBlock, + getParentBlock, + getPrevBlock, +} from "../api/blockManipulation/getBlock/getBlock.js"; +import { insertContentAt } from "../api/blockManipulation/insertContentAt.js"; import { getSelection, setSelection, } from "../api/blockManipulation/selections/selection.js"; +import { + getTextCursorPosition, + setTextCursorPosition, +} from "../api/blockManipulation/selections/textCursorPosition/textCursorPosition.js"; import { createExternalHTMLExporter } from "../api/exporters/html/externalHTMLExporter.js"; import { blocksToMarkdown } from "../api/exporters/markdown/markdownExporter.js"; import { HTMLToBlocks } from "../api/parsers/html/parseHTML.js"; @@ -89,11 +89,15 @@ import { en } from "../i18n/locales/index.js"; import { Plugin, Transaction } from "@tiptap/pm/state"; import { dropCursor } from "prosemirror-dropcursor"; +import { EditorView } from "prosemirror-view"; import { createInternalHTMLSerializer } from "../api/exporters/html/internalHTMLSerializer.js"; import { inlineContentToNodes } from "../api/nodeConversions/blockToNode.js"; import { nodeToBlock } from "../api/nodeConversions/nodeToBlock.js"; import "../style.css"; -import { EditorView } from "prosemirror-view"; + +export type BlockNoteExtensionFactory = ( + editor: BlockNoteEditor +) => BlockNoteExtension; export type BlockNoteExtension = | AnyExtension @@ -213,7 +217,7 @@ export type BlockNoteEditorOptions< /** * (experimental) add extra prosemirror plugins or tiptap extensions to the editor */ - _extensions: Record; + _extensions: Record; trailingBlock?: boolean; @@ -449,6 +453,10 @@ export class BlockNoteEditor< // add extensions from options Object.entries(newOptions._extensions || {}).forEach(([key, ext]) => { + if (typeof ext === "function") { + // factory + ext = ext(this); + } this.extensions[key] = ext; });