@blocknote/core 0.42.3 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BlockNoteExtension-BWw0r8Gy.cjs +2 -0
- package/dist/BlockNoteExtension-BWw0r8Gy.cjs.map +1 -0
- package/dist/BlockNoteExtension-C2X7LW-V.js +25 -0
- package/dist/BlockNoteExtension-C2X7LW-V.js.map +1 -0
- package/dist/BlockNoteSchema-B4gm-Qco.cjs +2 -0
- package/dist/BlockNoteSchema-B4gm-Qco.cjs.map +1 -0
- package/dist/BlockNoteSchema-C-l154WP.js +270 -0
- package/dist/BlockNoteSchema-C-l154WP.js.map +1 -0
- package/dist/EventEmitter-CLwfmbqG.cjs +2 -0
- package/dist/EventEmitter-CLwfmbqG.cjs.map +1 -0
- package/dist/EventEmitter-CjSwpTbz.js +27 -0
- package/dist/EventEmitter-CjSwpTbz.js.map +1 -0
- package/dist/ShowSelection-BW37oJ6h.cjs +2 -0
- package/dist/ShowSelection-BW37oJ6h.cjs.map +1 -0
- package/dist/ShowSelection-Dz-NEase.js +43 -0
- package/dist/ShowSelection-Dz-NEase.js.map +1 -0
- package/dist/TrailingNode-B_zPMWxw.js +2098 -0
- package/dist/TrailingNode-B_zPMWxw.js.map +1 -0
- package/dist/TrailingNode-CRHrgOnK.cjs +2 -0
- package/dist/TrailingNode-CRHrgOnK.cjs.map +1 -0
- package/dist/{blockToNode-DIfPWLH8.js → blockToNode-DBNbhwwC.js} +33 -33
- package/dist/blockToNode-DBNbhwwC.js.map +1 -0
- package/dist/blockToNode-w7H99R6p.cjs.map +1 -1
- package/dist/blocknote.cjs +4 -4
- package/dist/blocknote.cjs.map +1 -1
- package/dist/blocknote.js +2496 -5686
- package/dist/blocknote.js.map +1 -1
- package/dist/blocks.cjs +1 -1
- package/dist/blocks.js +71 -70
- package/dist/blocks.js.map +1 -1
- package/dist/comments.cjs +1 -1
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.js +451 -137
- package/dist/comments.js.map +1 -1
- package/dist/defaultBlocks-DLJ4Q1_J.cjs +6 -0
- package/dist/defaultBlocks-DLJ4Q1_J.cjs.map +1 -0
- package/dist/{BlockNoteSchema-Bi-eeHal.js → defaultBlocks-DgA_mtQV.js} +974 -1027
- package/dist/defaultBlocks-DgA_mtQV.js.map +1 -0
- package/dist/extensions.cjs +2 -0
- package/dist/extensions.cjs.map +1 -0
- package/dist/extensions.js +57 -0
- package/dist/extensions.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/webpack-stats.json +1 -1
- package/dist/yjs.js +1 -1
- package/package.json +9 -3
- package/src/api/nodeConversions/blockToNode.ts +1 -1
- package/src/api/nodeConversions/nodeToBlock.ts +1 -1
- package/src/blocks/Code/block.ts +4 -4
- package/src/blocks/Divider/block.ts +2 -2
- package/src/blocks/File/helpers/render/createAddFileButton.ts +7 -5
- package/src/blocks/Heading/block.ts +23 -20
- package/src/blocks/ListItem/BulletListItem/block.ts +2 -2
- package/src/blocks/ListItem/CheckListItem/block.ts +2 -2
- package/src/blocks/ListItem/NumberedListItem/block.ts +3 -3
- package/src/blocks/ListItem/ToggleListItem/block.ts +2 -2
- package/src/blocks/PageBreak/getPageBreakSlashMenuItems.ts +2 -2
- package/src/blocks/Paragraph/block.ts +2 -2
- package/src/blocks/Quote/block.ts +2 -2
- package/src/blocks/Table/block.ts +4 -3
- package/src/blocks/ToggleWrapper/createToggleWrapper.ts +2 -1
- package/src/comments/extension.ts +353 -0
- package/src/comments/index.ts +2 -1
- package/src/comments/types.ts +8 -0
- package/src/{extensions/Comments → comments}/userstore/UserStore.ts +2 -2
- package/src/editor/BlockNoteEditor.test.ts +2 -23
- package/src/editor/BlockNoteEditor.ts +60 -453
- package/src/editor/BlockNoteExtension.test.ts +103 -0
- package/src/editor/BlockNoteExtension.ts +174 -56
- package/src/editor/managers/EventManager.ts +64 -35
- package/src/editor/managers/ExtensionManager/extensions.ts +214 -0
- package/src/editor/managers/ExtensionManager/index.ts +514 -0
- package/src/editor/managers/ExtensionManager/symbol.ts +6 -0
- package/src/editor/managers/SelectionManager.ts +5 -1
- package/src/editor/managers/StateManager.ts +29 -17
- package/src/editor/managers/index.ts +1 -5
- package/src/extensions/BlockChange/{BlockChangePlugin.ts → BlockChange.ts} +27 -29
- package/src/extensions/Collaboration/{ForkYDocPlugin.test.ts → ForkYDoc.test.ts} +6 -5
- package/src/extensions/Collaboration/ForkYDoc.ts +158 -0
- package/src/extensions/Collaboration/YCursorPlugin.ts +183 -0
- package/src/extensions/Collaboration/YSync.ts +16 -0
- package/src/extensions/Collaboration/YUndo.ts +12 -0
- package/src/extensions/Collaboration/schemaMigration/SchemaMigration.ts +59 -0
- package/src/extensions/DropCursor/DropCursor.ts +26 -0
- package/src/extensions/FilePanel/FilePanel.ts +41 -0
- package/src/extensions/FormattingToolbar/FormattingToolbar.ts +119 -0
- package/src/extensions/History/History.ts +11 -0
- package/src/extensions/LinkToolbar/LinkToolbar.ts +121 -0
- package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboard.ts +74 -0
- package/src/extensions/Placeholder/Placeholder.ts +148 -0
- package/src/extensions/PreviousBlockType/{PreviousBlockTypePlugin.ts → PreviousBlockType.ts} +9 -13
- package/src/extensions/ShowSelection/{ShowSelectionPlugin.ts → ShowSelection.ts} +27 -33
- package/src/extensions/SideMenu/{SideMenuPlugin.ts → SideMenu.ts} +63 -83
- package/src/extensions/SuggestionMenu/{SuggestionPlugin.ts → SuggestionMenu.ts} +71 -77
- package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +29 -44
- package/src/extensions/TableHandles/{TableHandlesPlugin.ts → TableHandles.ts} +416 -437
- package/src/extensions/TrailingNode/{TrailingNodeExtension.ts → TrailingNode.ts} +8 -17
- package/src/extensions/index.ts +24 -0
- package/src/extensions/{BackgroundColor → tiptap-extensions/BackgroundColor}/BackgroundColorExtension.ts +1 -1
- package/src/extensions/{KeyboardShortcuts → tiptap-extensions/KeyboardShortcuts}/KeyboardShortcutsExtension.ts +21 -16
- package/src/extensions/{TextColor → tiptap-extensions/TextColor}/TextColorExtension.ts +1 -1
- package/src/extensions/tiptap-extensions/index.ts +31 -0
- package/src/index.ts +1 -13
- package/src/schema/blocks/createSpec.ts +14 -11
- package/src/schema/blocks/internal.ts +2 -2
- package/src/schema/blocks/types.ts +8 -5
- package/src/schema/schema.ts +11 -36
- package/src/util/topo-sort.ts +46 -0
- package/types/src/comments/extension.d.ts +70 -0
- package/types/src/comments/index.d.ts +2 -1
- package/types/src/comments/types.d.ts +8 -0
- package/types/src/{extensions/Comments → comments}/userstore/UserStore.d.ts +2 -2
- package/types/src/editor/BlockNoteEditor.d.ts +34 -105
- package/types/src/editor/BlockNoteExtension.d.ts +87 -22
- package/types/src/editor/managers/EventManager.d.ts +25 -16
- package/types/src/editor/managers/ExtensionManager/extensions.d.ts +8 -0
- package/types/src/editor/managers/ExtensionManager/index.d.ts +83 -0
- package/types/src/editor/managers/ExtensionManager/symbol.d.ts +5 -0
- package/types/src/editor/managers/StateManager.d.ts +1 -12
- package/types/src/editor/managers/index.d.ts +1 -2
- package/types/src/extensions/BlockChange/BlockChange.d.ts +16 -0
- package/types/src/extensions/Collaboration/ForkYDoc.d.ts +34 -0
- package/types/src/extensions/Collaboration/ForkYDoc.test.d.ts +1 -0
- package/types/src/extensions/Collaboration/YCursorPlugin.d.ts +24 -0
- package/types/src/extensions/Collaboration/YSync.d.ts +8 -0
- package/types/src/extensions/Collaboration/YUndo.d.ts +12 -0
- package/types/src/extensions/Collaboration/schemaMigration/SchemaMigration.d.ts +8 -0
- package/types/src/extensions/DropCursor/DropCursor.d.ts +5 -0
- package/types/src/extensions/FilePanel/FilePanel.d.ts +11 -0
- package/types/src/extensions/FormattingToolbar/FormattingToolbar.d.ts +9 -0
- package/types/src/extensions/History/History.d.ts +6 -0
- package/types/src/extensions/LinkToolbar/LinkToolbar.d.ts +24 -0
- package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboard.d.ts +5 -0
- package/types/src/extensions/Placeholder/Placeholder.d.ts +6 -0
- package/types/src/extensions/PreviousBlockType/{PreviousBlockTypePlugin.d.ts → PreviousBlockType.d.ts} +9 -5
- package/types/src/extensions/ShowSelection/ShowSelection.d.ts +21 -0
- package/types/src/extensions/SideMenu/{SideMenuPlugin.d.ts → SideMenu.d.ts} +11 -15
- package/types/src/extensions/SuggestionMenu/SuggestionMenu.d.ts +54 -0
- package/types/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.d.ts +1 -1
- package/types/src/extensions/TableHandles/{TableHandlesPlugin.d.ts → TableHandles.d.ts} +28 -31
- package/types/src/extensions/TrailingNode/TrailingNode.d.ts +8 -0
- package/types/src/extensions/index.d.ts +24 -0
- package/types/src/extensions/{KeyboardShortcuts → tiptap-extensions/KeyboardShortcuts}/KeyboardShortcutsExtension.d.ts +1 -1
- package/types/src/extensions/tiptap-extensions/index.d.ts +11 -0
- package/types/src/index.d.ts +1 -13
- package/types/src/schema/blocks/createSpec.d.ts +4 -4
- package/types/src/schema/blocks/internal.d.ts +2 -2
- package/types/src/schema/blocks/types.d.ts +5 -5
- package/types/src/util/topo-sort.d.ts +8 -0
- package/dist/BlockNoteSchema-Bi-eeHal.js.map +0 -1
- package/dist/BlockNoteSchema-DjDaA2C3.cjs +0 -6
- package/dist/BlockNoteSchema-DjDaA2C3.cjs.map +0 -1
- package/dist/blockToNode-DIfPWLH8.js.map +0 -1
- package/src/comments/models/User.ts +0 -8
- package/src/editor/BlockNoteExtensions.ts +0 -325
- package/src/editor/managers/CollaborationManager.ts +0 -212
- package/src/editor/managers/ExtensionManager.ts +0 -130
- package/src/extensions/Collaboration/CursorPlugin.ts +0 -189
- package/src/extensions/Collaboration/ForkYDocPlugin.ts +0 -192
- package/src/extensions/Collaboration/SyncPlugin.ts +0 -18
- package/src/extensions/Collaboration/UndoPlugin.ts +0 -18
- package/src/extensions/Collaboration/schemaMigration/SchemaMigrationPlugin.ts +0 -59
- package/src/extensions/Comments/CommentsPlugin.ts +0 -392
- package/src/extensions/FilePanel/FilePanelPlugin.ts +0 -206
- package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +0 -363
- package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +0 -380
- package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +0 -75
- package/src/extensions/Placeholder/PlaceholderPlugin.ts +0 -147
- package/types/src/comments/models/User.d.ts +0 -8
- package/types/src/editor/BlockNoteExtensions.d.ts +0 -43
- package/types/src/editor/managers/CollaborationManager.d.ts +0 -115
- package/types/src/editor/managers/ExtensionManager.d.ts +0 -68
- package/types/src/extensions/BlockChange/BlockChangePlugin.d.ts +0 -15
- package/types/src/extensions/Collaboration/CursorPlugin.d.ts +0 -37
- package/types/src/extensions/Collaboration/ForkYDocPlugin.d.ts +0 -41
- package/types/src/extensions/Collaboration/SyncPlugin.d.ts +0 -7
- package/types/src/extensions/Collaboration/UndoPlugin.d.ts +0 -9
- package/types/src/extensions/Collaboration/schemaMigration/SchemaMigrationPlugin.d.ts +0 -7
- package/types/src/extensions/Comments/CommentsPlugin.d.ts +0 -66
- package/types/src/extensions/FilePanel/FilePanelPlugin.d.ts +0 -31
- package/types/src/extensions/FormattingToolbar/FormattingToolbarPlugin.d.ts +0 -41
- package/types/src/extensions/LinkToolbar/LinkToolbarPlugin.d.ts +0 -42
- package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +0 -5
- package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +0 -6
- package/types/src/extensions/ShowSelection/ShowSelectionPlugin.d.ts +0 -15
- package/types/src/extensions/SuggestionMenu/SuggestionPlugin.d.ts +0 -31
- package/types/src/extensions/TrailingNode/TrailingNodeExtension.d.ts +0 -13
- /package/src/{extensions/Comments/CommentMark.ts → comments/mark.ts} +0 -0
- /package/src/extensions/{HardBreak → tiptap-extensions/HardBreak}/HardBreak.ts +0 -0
- /package/src/extensions/{Suggestions → tiptap-extensions/Suggestions}/SuggestionMarks.ts +0 -0
- /package/src/extensions/{TextAlignment → tiptap-extensions/TextAlignment}/TextAlignmentExtension.ts +0 -0
- /package/src/extensions/{UniqueID → tiptap-extensions/UniqueID}/UniqueID.ts +0 -0
- /package/types/src/{extensions/Comments/CommentMark.d.ts → comments/mark.d.ts} +0 -0
- /package/types/src/{extensions/Collaboration/ForkYDocPlugin.test.d.ts → editor/BlockNoteExtension.test.d.ts} +0 -0
- /package/types/src/extensions/{BackgroundColor → tiptap-extensions/BackgroundColor}/BackgroundColorExtension.d.ts +0 -0
- /package/types/src/extensions/{HardBreak → tiptap-extensions/HardBreak}/HardBreak.d.ts +0 -0
- /package/types/src/extensions/{Suggestions → tiptap-extensions/Suggestions}/SuggestionMarks.d.ts +0 -0
- /package/types/src/extensions/{TextAlignment → tiptap-extensions/TextAlignment}/TextAlignmentExtension.d.ts +0 -0
- /package/types/src/extensions/{TextColor → tiptap-extensions/TextColor}/TextColorExtension.d.ts +0 -0
- /package/types/src/extensions/{UniqueID → tiptap-extensions/UniqueID}/UniqueID.d.ts +0 -0
|
@@ -3,14 +3,12 @@ import { EditorState, Plugin, PluginKey } from "prosemirror-state";
|
|
|
3
3
|
import { Decoration, DecorationSet, EditorView } from "prosemirror-view";
|
|
4
4
|
|
|
5
5
|
import { trackPosition } from "../../api/positionMapping.js";
|
|
6
|
-
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
|
|
7
|
-
import { BlockNoteExtension } from "../../editor/BlockNoteExtension.js";
|
|
8
|
-
import { UiElementPosition } from "../../extensions-shared/UiElementPosition.js";
|
|
9
6
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "../../
|
|
7
|
+
createExtension,
|
|
8
|
+
createStore,
|
|
9
|
+
} from "../../editor/BlockNoteExtension.js";
|
|
10
|
+
import { UiElementPosition } from "../../extensions-shared/UiElementPosition.js";
|
|
11
|
+
import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
|
|
14
12
|
|
|
15
13
|
const findBlock = findParentNode((node) => node.type.name === "blockContainer");
|
|
16
14
|
|
|
@@ -19,18 +17,14 @@ export type SuggestionMenuState = UiElementPosition & {
|
|
|
19
17
|
ignoreQueryLength?: boolean;
|
|
20
18
|
};
|
|
21
19
|
|
|
22
|
-
class SuggestionMenuView
|
|
23
|
-
BSchema extends BlockSchema,
|
|
24
|
-
I extends InlineContentSchema,
|
|
25
|
-
S extends StyleSchema,
|
|
26
|
-
> {
|
|
20
|
+
class SuggestionMenuView {
|
|
27
21
|
public state?: SuggestionMenuState;
|
|
28
22
|
public emitUpdate: (triggerCharacter: string) => void;
|
|
29
23
|
private rootEl?: Document | ShadowRoot;
|
|
30
24
|
pluginState: SuggestionPluginState;
|
|
31
25
|
|
|
32
26
|
constructor(
|
|
33
|
-
private readonly editor: BlockNoteEditor<
|
|
27
|
+
private readonly editor: BlockNoteEditor<any, any, any>,
|
|
34
28
|
emitUpdate: (menuName: string, state: SuggestionMenuState) => void,
|
|
35
29
|
view: EditorView,
|
|
36
30
|
) {
|
|
@@ -63,7 +57,9 @@ class SuggestionMenuView<
|
|
|
63
57
|
if (!decorationNode) {
|
|
64
58
|
return;
|
|
65
59
|
}
|
|
66
|
-
this.state.referencePos = decorationNode
|
|
60
|
+
this.state.referencePos = decorationNode
|
|
61
|
+
.getBoundingClientRect()
|
|
62
|
+
.toJSON() as DOMRect;
|
|
67
63
|
this.emitUpdate(this.pluginState!.triggerCharacter!);
|
|
68
64
|
}
|
|
69
65
|
};
|
|
@@ -103,7 +99,9 @@ class SuggestionMenuView<
|
|
|
103
99
|
if (this.editor.isEditable && decorationNode) {
|
|
104
100
|
this.state = {
|
|
105
101
|
show: true,
|
|
106
|
-
referencePos: decorationNode
|
|
102
|
+
referencePos: decorationNode
|
|
103
|
+
.getBoundingClientRect()
|
|
104
|
+
.toJSON() as DOMRect,
|
|
107
105
|
query: this.pluginState!.query,
|
|
108
106
|
};
|
|
109
107
|
|
|
@@ -163,34 +161,68 @@ const suggestionMenuPluginKey = new PluginKey("SuggestionMenuPlugin");
|
|
|
163
161
|
* - This version hides some unnecessary complexity from the user of the plugin.
|
|
164
162
|
* - This version handles key events differently
|
|
165
163
|
*/
|
|
166
|
-
export
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
164
|
+
export const SuggestionMenu = createExtension(({ editor }) => {
|
|
165
|
+
const triggerCharacters: string[] = [];
|
|
166
|
+
let view: SuggestionMenuView | undefined = undefined;
|
|
167
|
+
const store = createStore<
|
|
168
|
+
(SuggestionMenuState & { triggerCharacter: string }) | undefined
|
|
169
|
+
>(undefined);
|
|
170
|
+
return {
|
|
171
|
+
key: "suggestionMenu",
|
|
172
|
+
store,
|
|
173
|
+
addTriggerCharacter: (triggerCharacter: string) => {
|
|
174
|
+
triggerCharacters.push(triggerCharacter);
|
|
175
|
+
},
|
|
176
|
+
removeTriggerCharacter: (triggerCharacter: string) => {
|
|
177
|
+
triggerCharacters.splice(triggerCharacters.indexOf(triggerCharacter), 1);
|
|
178
|
+
},
|
|
179
|
+
closeMenu: () => {
|
|
180
|
+
view?.closeMenu();
|
|
181
|
+
},
|
|
182
|
+
clearQuery: () => {
|
|
183
|
+
view?.clearQuery();
|
|
184
|
+
},
|
|
185
|
+
shown: () => {
|
|
186
|
+
return view?.state?.show || false;
|
|
187
|
+
},
|
|
188
|
+
openSuggestionMenu: (
|
|
189
|
+
triggerCharacter: string,
|
|
190
|
+
pluginState?: {
|
|
191
|
+
deleteTriggerCharacter?: boolean;
|
|
192
|
+
ignoreQueryLength?: boolean;
|
|
193
|
+
},
|
|
194
|
+
) => {
|
|
195
|
+
if (editor.headless) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
177
198
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
199
|
+
editor.focus();
|
|
200
|
+
|
|
201
|
+
editor.transact((tr) => {
|
|
202
|
+
if (pluginState?.deleteTriggerCharacter) {
|
|
203
|
+
tr.insertText(triggerCharacter);
|
|
204
|
+
}
|
|
205
|
+
tr.scrollIntoView().setMeta(suggestionMenuPluginKey, {
|
|
206
|
+
triggerCharacter: triggerCharacter,
|
|
207
|
+
deleteTriggerCharacter: pluginState?.deleteTriggerCharacter || false,
|
|
208
|
+
ignoreQueryLength: pluginState?.ignoreQueryLength || false,
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
},
|
|
212
|
+
// TODO this whole plugin needs to be refactored (but I've done the minimal)
|
|
213
|
+
prosemirrorPlugins: [
|
|
182
214
|
new Plugin({
|
|
183
215
|
key: suggestionMenuPluginKey,
|
|
184
216
|
|
|
185
|
-
view: (
|
|
186
|
-
|
|
217
|
+
view: (v) => {
|
|
218
|
+
view = new SuggestionMenuView(
|
|
187
219
|
editor,
|
|
188
220
|
(triggerCharacter, state) => {
|
|
189
|
-
|
|
221
|
+
store.setState({ ...state, triggerCharacter });
|
|
190
222
|
},
|
|
191
|
-
|
|
223
|
+
v,
|
|
192
224
|
);
|
|
193
|
-
return
|
|
225
|
+
return view;
|
|
194
226
|
},
|
|
195
227
|
|
|
196
228
|
state: {
|
|
@@ -225,7 +257,7 @@ export class SuggestionMenuProseMirrorPlugin<
|
|
|
225
257
|
) {
|
|
226
258
|
if (prev) {
|
|
227
259
|
// Close the previous menu if it exists
|
|
228
|
-
|
|
260
|
+
view?.closeMenu();
|
|
229
261
|
}
|
|
230
262
|
const trackedPosition = trackPosition(
|
|
231
263
|
editor,
|
|
@@ -360,44 +392,6 @@ export class SuggestionMenuProseMirrorPlugin<
|
|
|
360
392
|
},
|
|
361
393
|
},
|
|
362
394
|
}),
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
public onUpdate(
|
|
367
|
-
triggerCharacter: string,
|
|
368
|
-
callback: (state: SuggestionMenuState) => void,
|
|
369
|
-
) {
|
|
370
|
-
if (!this.triggerCharacters.includes(triggerCharacter)) {
|
|
371
|
-
this.addTriggerCharacter(triggerCharacter);
|
|
372
|
-
}
|
|
373
|
-
// TODO: be able to remove the triggerCharacter
|
|
374
|
-
return this.on(`update ${triggerCharacter}`, callback);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
addTriggerCharacter = (triggerCharacter: string) => {
|
|
378
|
-
this.triggerCharacters.push(triggerCharacter);
|
|
379
|
-
};
|
|
380
|
-
|
|
381
|
-
// TODO: Should this be called automatically when listeners are removed?
|
|
382
|
-
removeTriggerCharacter = (triggerCharacter: string) => {
|
|
383
|
-
this.triggerCharacters = this.triggerCharacters.filter(
|
|
384
|
-
(c) => c !== triggerCharacter,
|
|
385
|
-
);
|
|
386
|
-
};
|
|
387
|
-
|
|
388
|
-
closeMenu = () => this.view!.closeMenu();
|
|
389
|
-
|
|
390
|
-
clearQuery = () => this.view!.clearQuery();
|
|
391
|
-
|
|
392
|
-
public get shown() {
|
|
393
|
-
return this.view?.state?.show || false;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
export function createSuggestionMenu<
|
|
398
|
-
BSchema extends BlockSchema,
|
|
399
|
-
I extends InlineContentSchema,
|
|
400
|
-
S extends StyleSchema,
|
|
401
|
-
>(editor: BlockNoteEditor<BSchema, I, S>, triggerCharacter: string) {
|
|
402
|
-
editor.suggestionMenus.addTriggerCharacter(triggerCharacter);
|
|
403
|
-
}
|
|
395
|
+
],
|
|
396
|
+
} as const;
|
|
397
|
+
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Block, PartialBlock } from "../../blocks/defaultBlocks.js";
|
|
2
|
-
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
|
|
3
|
-
|
|
4
2
|
import { editorHasBlockWithType } from "../../blocks/defaultBlockTypeGuards.js";
|
|
3
|
+
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
|
|
5
4
|
import {
|
|
6
5
|
BlockSchema,
|
|
7
6
|
InlineContentSchema,
|
|
@@ -9,7 +8,9 @@ import {
|
|
|
9
8
|
isStyledTextInlineContent,
|
|
10
9
|
} from "../../schema/index.js";
|
|
11
10
|
import { formatKeyboardShortcut } from "../../util/browser.js";
|
|
11
|
+
import { FilePanelExtension } from "../FilePanel/FilePanel.js";
|
|
12
12
|
import { DefaultSuggestionItem } from "./DefaultSuggestionItem.js";
|
|
13
|
+
import { SuggestionMenu } from "./SuggestionMenu.js";
|
|
13
14
|
|
|
14
15
|
// Sets the editor's text cursor position to the next content editable block,
|
|
15
16
|
// so either a block with inline content or a table. The last block is always a
|
|
@@ -41,7 +42,7 @@ function setSelectionToNextContentEditableBlock<
|
|
|
41
42
|
// updates the current block instead of inserting a new one below. If the new
|
|
42
43
|
// block doesn't contain editable content, the cursor is moved to the next block
|
|
43
44
|
// that does.
|
|
44
|
-
export function
|
|
45
|
+
export function insertOrUpdateBlockForSlashMenu<
|
|
45
46
|
BSchema extends BlockSchema,
|
|
46
47
|
I extends InlineContentSchema,
|
|
47
48
|
S extends StyleSchema,
|
|
@@ -91,7 +92,7 @@ export function getDefaultSlashMenuItems<
|
|
|
91
92
|
items.push(
|
|
92
93
|
{
|
|
93
94
|
onItemClick: () => {
|
|
94
|
-
|
|
95
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
95
96
|
type: "heading",
|
|
96
97
|
props: { level: 1 },
|
|
97
98
|
});
|
|
@@ -102,7 +103,7 @@ export function getDefaultSlashMenuItems<
|
|
|
102
103
|
},
|
|
103
104
|
{
|
|
104
105
|
onItemClick: () => {
|
|
105
|
-
|
|
106
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
106
107
|
type: "heading",
|
|
107
108
|
props: { level: 2 },
|
|
108
109
|
});
|
|
@@ -113,7 +114,7 @@ export function getDefaultSlashMenuItems<
|
|
|
113
114
|
},
|
|
114
115
|
{
|
|
115
116
|
onItemClick: () => {
|
|
116
|
-
|
|
117
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
117
118
|
type: "heading",
|
|
118
119
|
props: { level: 3 },
|
|
119
120
|
});
|
|
@@ -128,7 +129,7 @@ export function getDefaultSlashMenuItems<
|
|
|
128
129
|
if (editorHasBlockWithType(editor, "quote")) {
|
|
129
130
|
items.push({
|
|
130
131
|
onItemClick: () => {
|
|
131
|
-
|
|
132
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
132
133
|
type: "quote",
|
|
133
134
|
});
|
|
134
135
|
},
|
|
@@ -140,7 +141,7 @@ export function getDefaultSlashMenuItems<
|
|
|
140
141
|
if (editorHasBlockWithType(editor, "toggleListItem")) {
|
|
141
142
|
items.push({
|
|
142
143
|
onItemClick: () => {
|
|
143
|
-
|
|
144
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
144
145
|
type: "toggleListItem",
|
|
145
146
|
});
|
|
146
147
|
},
|
|
@@ -153,7 +154,7 @@ export function getDefaultSlashMenuItems<
|
|
|
153
154
|
if (editorHasBlockWithType(editor, "numberedListItem")) {
|
|
154
155
|
items.push({
|
|
155
156
|
onItemClick: () => {
|
|
156
|
-
|
|
157
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
157
158
|
type: "numberedListItem",
|
|
158
159
|
});
|
|
159
160
|
},
|
|
@@ -166,7 +167,7 @@ export function getDefaultSlashMenuItems<
|
|
|
166
167
|
if (editorHasBlockWithType(editor, "bulletListItem")) {
|
|
167
168
|
items.push({
|
|
168
169
|
onItemClick: () => {
|
|
169
|
-
|
|
170
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
170
171
|
type: "bulletListItem",
|
|
171
172
|
});
|
|
172
173
|
},
|
|
@@ -179,7 +180,7 @@ export function getDefaultSlashMenuItems<
|
|
|
179
180
|
if (editorHasBlockWithType(editor, "checkListItem")) {
|
|
180
181
|
items.push({
|
|
181
182
|
onItemClick: () => {
|
|
182
|
-
|
|
183
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
183
184
|
type: "checkListItem",
|
|
184
185
|
});
|
|
185
186
|
},
|
|
@@ -192,7 +193,7 @@ export function getDefaultSlashMenuItems<
|
|
|
192
193
|
if (editorHasBlockWithType(editor, "paragraph")) {
|
|
193
194
|
items.push({
|
|
194
195
|
onItemClick: () => {
|
|
195
|
-
|
|
196
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
196
197
|
type: "paragraph",
|
|
197
198
|
});
|
|
198
199
|
},
|
|
@@ -205,7 +206,7 @@ export function getDefaultSlashMenuItems<
|
|
|
205
206
|
if (editorHasBlockWithType(editor, "codeBlock")) {
|
|
206
207
|
items.push({
|
|
207
208
|
onItemClick: () => {
|
|
208
|
-
|
|
209
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
209
210
|
type: "codeBlock",
|
|
210
211
|
});
|
|
211
212
|
},
|
|
@@ -218,7 +219,7 @@ export function getDefaultSlashMenuItems<
|
|
|
218
219
|
if (editorHasBlockWithType(editor, "divider")) {
|
|
219
220
|
items.push({
|
|
220
221
|
onItemClick: () => {
|
|
221
|
-
|
|
222
|
+
insertOrUpdateBlockForSlashMenu(editor, { type: "divider" });
|
|
222
223
|
},
|
|
223
224
|
key: "divider",
|
|
224
225
|
...editor.dictionary.slash_menu.divider,
|
|
@@ -228,7 +229,7 @@ export function getDefaultSlashMenuItems<
|
|
|
228
229
|
if (editorHasBlockWithType(editor, "table")) {
|
|
229
230
|
items.push({
|
|
230
231
|
onItemClick: () => {
|
|
231
|
-
|
|
232
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
232
233
|
type: "table",
|
|
233
234
|
content: {
|
|
234
235
|
type: "tableContent",
|
|
@@ -252,16 +253,12 @@ export function getDefaultSlashMenuItems<
|
|
|
252
253
|
if (editorHasBlockWithType(editor, "image", { url: "string" })) {
|
|
253
254
|
items.push({
|
|
254
255
|
onItemClick: () => {
|
|
255
|
-
const insertedBlock =
|
|
256
|
+
const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
|
|
256
257
|
type: "image",
|
|
257
258
|
});
|
|
258
259
|
|
|
259
260
|
// Immediately open the file toolbar
|
|
260
|
-
editor.
|
|
261
|
-
tr.setMeta(editor.filePanel!.plugins[0], {
|
|
262
|
-
block: insertedBlock,
|
|
263
|
-
}),
|
|
264
|
-
);
|
|
261
|
+
editor.getExtension(FilePanelExtension)?.showMenu(insertedBlock.id);
|
|
265
262
|
},
|
|
266
263
|
key: "image",
|
|
267
264
|
...editor.dictionary.slash_menu.image,
|
|
@@ -271,16 +268,12 @@ export function getDefaultSlashMenuItems<
|
|
|
271
268
|
if (editorHasBlockWithType(editor, "video", { url: "string" })) {
|
|
272
269
|
items.push({
|
|
273
270
|
onItemClick: () => {
|
|
274
|
-
const insertedBlock =
|
|
271
|
+
const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
|
|
275
272
|
type: "video",
|
|
276
273
|
});
|
|
277
274
|
|
|
278
275
|
// Immediately open the file toolbar
|
|
279
|
-
editor.
|
|
280
|
-
tr.setMeta(editor.filePanel!.plugins[0], {
|
|
281
|
-
block: insertedBlock,
|
|
282
|
-
}),
|
|
283
|
-
);
|
|
276
|
+
editor.getExtension(FilePanelExtension)?.showMenu(insertedBlock.id);
|
|
284
277
|
},
|
|
285
278
|
key: "video",
|
|
286
279
|
...editor.dictionary.slash_menu.video,
|
|
@@ -290,16 +283,12 @@ export function getDefaultSlashMenuItems<
|
|
|
290
283
|
if (editorHasBlockWithType(editor, "audio", { url: "string" })) {
|
|
291
284
|
items.push({
|
|
292
285
|
onItemClick: () => {
|
|
293
|
-
const insertedBlock =
|
|
286
|
+
const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
|
|
294
287
|
type: "audio",
|
|
295
288
|
});
|
|
296
289
|
|
|
297
290
|
// Immediately open the file toolbar
|
|
298
|
-
editor.
|
|
299
|
-
tr.setMeta(editor.filePanel!.plugins[0], {
|
|
300
|
-
block: insertedBlock,
|
|
301
|
-
}),
|
|
302
|
-
);
|
|
291
|
+
editor.getExtension(FilePanelExtension)?.showMenu(insertedBlock.id);
|
|
303
292
|
},
|
|
304
293
|
key: "audio",
|
|
305
294
|
...editor.dictionary.slash_menu.audio,
|
|
@@ -309,16 +298,12 @@ export function getDefaultSlashMenuItems<
|
|
|
309
298
|
if (editorHasBlockWithType(editor, "file", { url: "string" })) {
|
|
310
299
|
items.push({
|
|
311
300
|
onItemClick: () => {
|
|
312
|
-
const insertedBlock =
|
|
301
|
+
const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
|
|
313
302
|
type: "file",
|
|
314
303
|
});
|
|
315
304
|
|
|
316
305
|
// Immediately open the file toolbar
|
|
317
|
-
editor.
|
|
318
|
-
tr.setMeta(editor.filePanel!.plugins[0], {
|
|
319
|
-
block: insertedBlock,
|
|
320
|
-
}),
|
|
321
|
-
);
|
|
306
|
+
editor.getExtension(FilePanelExtension)?.showMenu(insertedBlock.id);
|
|
322
307
|
},
|
|
323
308
|
key: "file",
|
|
324
309
|
...editor.dictionary.slash_menu.file,
|
|
@@ -334,7 +319,7 @@ export function getDefaultSlashMenuItems<
|
|
|
334
319
|
items.push(
|
|
335
320
|
{
|
|
336
321
|
onItemClick: () => {
|
|
337
|
-
|
|
322
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
338
323
|
type: "heading",
|
|
339
324
|
props: { level: 1, isToggleable: true },
|
|
340
325
|
});
|
|
@@ -344,7 +329,7 @@ export function getDefaultSlashMenuItems<
|
|
|
344
329
|
},
|
|
345
330
|
{
|
|
346
331
|
onItemClick: () => {
|
|
347
|
-
|
|
332
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
348
333
|
type: "heading",
|
|
349
334
|
props: { level: 2, isToggleable: true },
|
|
350
335
|
});
|
|
@@ -355,7 +340,7 @@ export function getDefaultSlashMenuItems<
|
|
|
355
340
|
},
|
|
356
341
|
{
|
|
357
342
|
onItemClick: () => {
|
|
358
|
-
|
|
343
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
359
344
|
type: "heading",
|
|
360
345
|
props: { level: 3, isToggleable: true },
|
|
361
346
|
});
|
|
@@ -372,7 +357,7 @@ export function getDefaultSlashMenuItems<
|
|
|
372
357
|
.forEach((level) => {
|
|
373
358
|
items.push({
|
|
374
359
|
onItemClick: () => {
|
|
375
|
-
|
|
360
|
+
insertOrUpdateBlockForSlashMenu(editor, {
|
|
376
361
|
type: "heading",
|
|
377
362
|
props: { level: level },
|
|
378
363
|
});
|
|
@@ -385,7 +370,7 @@ export function getDefaultSlashMenuItems<
|
|
|
385
370
|
|
|
386
371
|
items.push({
|
|
387
372
|
onItemClick: () => {
|
|
388
|
-
editor.openSuggestionMenu(":", {
|
|
373
|
+
editor.getExtension(SuggestionMenu)?.openSuggestionMenu(":", {
|
|
389
374
|
deleteTriggerCharacter: true,
|
|
390
375
|
ignoreQueryLength: true,
|
|
391
376
|
});
|