@@ -9,12 +9,6 @@ import {
99import { Node , Schema } from "prosemirror-model" ;
1010// import "./blocknote.css";
1111import * as Y from "yjs" ;
12- import {
13- getBlock ,
14- getNextBlock ,
15- getParentBlock ,
16- getPrevBlock ,
17- } from "../api/blockManipulation/getBlock/getBlock.js" ;
1812import { insertBlocks } from "../api/blockManipulation/commands/insertBlocks/insertBlocks.js" ;
1913import {
2014 moveBlocksDown ,
@@ -29,15 +23,21 @@ import {
2923import { removeBlocks } from "../api/blockManipulation/commands/removeBlocks/removeBlocks.js" ;
3024import { replaceBlocks } from "../api/blockManipulation/commands/replaceBlocks/replaceBlocks.js" ;
3125import { updateBlock } from "../api/blockManipulation/commands/updateBlock/updateBlock.js" ;
32- import { insertContentAt } from "../api/blockManipulation/insertContentAt.js" ;
3326import {
34- getTextCursorPosition ,
35- setTextCursorPosition ,
36- } from "../api/blockManipulation/selections/textCursorPosition/textCursorPosition.js" ;
27+ getBlock ,
28+ getNextBlock ,
29+ getParentBlock ,
30+ getPrevBlock ,
31+ } from "../api/blockManipulation/getBlock/getBlock.js" ;
32+ import { insertContentAt } from "../api/blockManipulation/insertContentAt.js" ;
3733import {
3834 getSelection ,
3935 setSelection ,
4036} from "../api/blockManipulation/selections/selection.js" ;
37+ import {
38+ getTextCursorPosition ,
39+ setTextCursorPosition ,
40+ } from "../api/blockManipulation/selections/textCursorPosition/textCursorPosition.js" ;
4141import { createExternalHTMLExporter } from "../api/exporters/html/externalHTMLExporter.js" ;
4242import { blocksToMarkdown } from "../api/exporters/markdown/markdownExporter.js" ;
4343import { HTMLToBlocks } from "../api/parsers/html/parseHTML.js" ;
@@ -89,11 +89,15 @@ import { en } from "../i18n/locales/index.js";
8989
9090import { Plugin , Transaction } from "@tiptap/pm/state" ;
9191import { dropCursor } from "prosemirror-dropcursor" ;
92+ import { EditorView } from "prosemirror-view" ;
9293import { createInternalHTMLSerializer } from "../api/exporters/html/internalHTMLSerializer.js" ;
9394import { inlineContentToNodes } from "../api/nodeConversions/blockToNode.js" ;
9495import { nodeToBlock } from "../api/nodeConversions/nodeToBlock.js" ;
9596import "../style.css" ;
96- import { EditorView } from "prosemirror-view" ;
97+
98+ export type BlockNoteExtensionFactory = (
99+ editor : BlockNoteEditor < any , any , any >
100+ ) => BlockNoteExtension ;
97101
98102export type BlockNoteExtension =
99103 | AnyExtension
@@ -213,7 +217,7 @@ export type BlockNoteEditorOptions<
213217 /**
214218 * (experimental) add extra prosemirror plugins or tiptap extensions to the editor
215219 */
216- _extensions : Record < string , BlockNoteExtension > ;
220+ _extensions : Record < string , BlockNoteExtension | BlockNoteExtensionFactory > ;
217221
218222 trailingBlock ?: boolean ;
219223
@@ -449,6 +453,10 @@ export class BlockNoteEditor<
449453
450454 // add extensions from options
451455 Object . entries ( newOptions . _extensions || { } ) . forEach ( ( [ key , ext ] ) => {
456+ if ( typeof ext === "function" ) {
457+ // factory
458+ ext = ext ( this ) ;
459+ }
452460 this . extensions [ key ] = ext ;
453461 } ) ;
454462
0 commit comments