@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.
Files changed (200) hide show
  1. package/dist/BlockNoteExtension-BWw0r8Gy.cjs +2 -0
  2. package/dist/BlockNoteExtension-BWw0r8Gy.cjs.map +1 -0
  3. package/dist/BlockNoteExtension-C2X7LW-V.js +25 -0
  4. package/dist/BlockNoteExtension-C2X7LW-V.js.map +1 -0
  5. package/dist/BlockNoteSchema-B4gm-Qco.cjs +2 -0
  6. package/dist/BlockNoteSchema-B4gm-Qco.cjs.map +1 -0
  7. package/dist/BlockNoteSchema-C-l154WP.js +270 -0
  8. package/dist/BlockNoteSchema-C-l154WP.js.map +1 -0
  9. package/dist/EventEmitter-CLwfmbqG.cjs +2 -0
  10. package/dist/EventEmitter-CLwfmbqG.cjs.map +1 -0
  11. package/dist/EventEmitter-CjSwpTbz.js +27 -0
  12. package/dist/EventEmitter-CjSwpTbz.js.map +1 -0
  13. package/dist/ShowSelection-BW37oJ6h.cjs +2 -0
  14. package/dist/ShowSelection-BW37oJ6h.cjs.map +1 -0
  15. package/dist/ShowSelection-Dz-NEase.js +43 -0
  16. package/dist/ShowSelection-Dz-NEase.js.map +1 -0
  17. package/dist/TrailingNode-B_zPMWxw.js +2098 -0
  18. package/dist/TrailingNode-B_zPMWxw.js.map +1 -0
  19. package/dist/TrailingNode-CRHrgOnK.cjs +2 -0
  20. package/dist/TrailingNode-CRHrgOnK.cjs.map +1 -0
  21. package/dist/{blockToNode-DIfPWLH8.js → blockToNode-DBNbhwwC.js} +33 -33
  22. package/dist/blockToNode-DBNbhwwC.js.map +1 -0
  23. package/dist/blockToNode-w7H99R6p.cjs.map +1 -1
  24. package/dist/blocknote.cjs +4 -4
  25. package/dist/blocknote.cjs.map +1 -1
  26. package/dist/blocknote.js +2496 -5686
  27. package/dist/blocknote.js.map +1 -1
  28. package/dist/blocks.cjs +1 -1
  29. package/dist/blocks.js +71 -70
  30. package/dist/blocks.js.map +1 -1
  31. package/dist/comments.cjs +1 -1
  32. package/dist/comments.cjs.map +1 -1
  33. package/dist/comments.js +451 -137
  34. package/dist/comments.js.map +1 -1
  35. package/dist/defaultBlocks-DLJ4Q1_J.cjs +6 -0
  36. package/dist/defaultBlocks-DLJ4Q1_J.cjs.map +1 -0
  37. package/dist/{BlockNoteSchema-Bi-eeHal.js → defaultBlocks-DgA_mtQV.js} +974 -1027
  38. package/dist/defaultBlocks-DgA_mtQV.js.map +1 -0
  39. package/dist/extensions.cjs +2 -0
  40. package/dist/extensions.cjs.map +1 -0
  41. package/dist/extensions.js +57 -0
  42. package/dist/extensions.js.map +1 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/dist/webpack-stats.json +1 -1
  45. package/dist/yjs.js +1 -1
  46. package/package.json +9 -3
  47. package/src/api/nodeConversions/blockToNode.ts +1 -1
  48. package/src/api/nodeConversions/nodeToBlock.ts +1 -1
  49. package/src/blocks/Code/block.ts +4 -4
  50. package/src/blocks/Divider/block.ts +2 -2
  51. package/src/blocks/File/helpers/render/createAddFileButton.ts +7 -5
  52. package/src/blocks/Heading/block.ts +23 -20
  53. package/src/blocks/ListItem/BulletListItem/block.ts +2 -2
  54. package/src/blocks/ListItem/CheckListItem/block.ts +2 -2
  55. package/src/blocks/ListItem/NumberedListItem/block.ts +3 -3
  56. package/src/blocks/ListItem/ToggleListItem/block.ts +2 -2
  57. package/src/blocks/PageBreak/getPageBreakSlashMenuItems.ts +2 -2
  58. package/src/blocks/Paragraph/block.ts +2 -2
  59. package/src/blocks/Quote/block.ts +2 -2
  60. package/src/blocks/Table/block.ts +4 -3
  61. package/src/blocks/ToggleWrapper/createToggleWrapper.ts +2 -1
  62. package/src/comments/extension.ts +353 -0
  63. package/src/comments/index.ts +2 -1
  64. package/src/comments/types.ts +8 -0
  65. package/src/{extensions/Comments → comments}/userstore/UserStore.ts +2 -2
  66. package/src/editor/BlockNoteEditor.test.ts +2 -23
  67. package/src/editor/BlockNoteEditor.ts +60 -453
  68. package/src/editor/BlockNoteExtension.test.ts +103 -0
  69. package/src/editor/BlockNoteExtension.ts +174 -56
  70. package/src/editor/managers/EventManager.ts +64 -35
  71. package/src/editor/managers/ExtensionManager/extensions.ts +214 -0
  72. package/src/editor/managers/ExtensionManager/index.ts +514 -0
  73. package/src/editor/managers/ExtensionManager/symbol.ts +6 -0
  74. package/src/editor/managers/SelectionManager.ts +5 -1
  75. package/src/editor/managers/StateManager.ts +29 -17
  76. package/src/editor/managers/index.ts +1 -5
  77. package/src/extensions/BlockChange/{BlockChangePlugin.ts → BlockChange.ts} +27 -29
  78. package/src/extensions/Collaboration/{ForkYDocPlugin.test.ts → ForkYDoc.test.ts} +6 -5
  79. package/src/extensions/Collaboration/ForkYDoc.ts +158 -0
  80. package/src/extensions/Collaboration/YCursorPlugin.ts +183 -0
  81. package/src/extensions/Collaboration/YSync.ts +16 -0
  82. package/src/extensions/Collaboration/YUndo.ts +12 -0
  83. package/src/extensions/Collaboration/schemaMigration/SchemaMigration.ts +59 -0
  84. package/src/extensions/DropCursor/DropCursor.ts +26 -0
  85. package/src/extensions/FilePanel/FilePanel.ts +41 -0
  86. package/src/extensions/FormattingToolbar/FormattingToolbar.ts +119 -0
  87. package/src/extensions/History/History.ts +11 -0
  88. package/src/extensions/LinkToolbar/LinkToolbar.ts +121 -0
  89. package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboard.ts +74 -0
  90. package/src/extensions/Placeholder/Placeholder.ts +148 -0
  91. package/src/extensions/PreviousBlockType/{PreviousBlockTypePlugin.ts → PreviousBlockType.ts} +9 -13
  92. package/src/extensions/ShowSelection/{ShowSelectionPlugin.ts → ShowSelection.ts} +27 -33
  93. package/src/extensions/SideMenu/{SideMenuPlugin.ts → SideMenu.ts} +63 -83
  94. package/src/extensions/SuggestionMenu/{SuggestionPlugin.ts → SuggestionMenu.ts} +71 -77
  95. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +29 -44
  96. package/src/extensions/TableHandles/{TableHandlesPlugin.ts → TableHandles.ts} +416 -437
  97. package/src/extensions/TrailingNode/{TrailingNodeExtension.ts → TrailingNode.ts} +8 -17
  98. package/src/extensions/index.ts +24 -0
  99. package/src/extensions/{BackgroundColor → tiptap-extensions/BackgroundColor}/BackgroundColorExtension.ts +1 -1
  100. package/src/extensions/{KeyboardShortcuts → tiptap-extensions/KeyboardShortcuts}/KeyboardShortcutsExtension.ts +21 -16
  101. package/src/extensions/{TextColor → tiptap-extensions/TextColor}/TextColorExtension.ts +1 -1
  102. package/src/extensions/tiptap-extensions/index.ts +31 -0
  103. package/src/index.ts +1 -13
  104. package/src/schema/blocks/createSpec.ts +14 -11
  105. package/src/schema/blocks/internal.ts +2 -2
  106. package/src/schema/blocks/types.ts +8 -5
  107. package/src/schema/schema.ts +11 -36
  108. package/src/util/topo-sort.ts +46 -0
  109. package/types/src/comments/extension.d.ts +70 -0
  110. package/types/src/comments/index.d.ts +2 -1
  111. package/types/src/comments/types.d.ts +8 -0
  112. package/types/src/{extensions/Comments → comments}/userstore/UserStore.d.ts +2 -2
  113. package/types/src/editor/BlockNoteEditor.d.ts +34 -105
  114. package/types/src/editor/BlockNoteExtension.d.ts +87 -22
  115. package/types/src/editor/managers/EventManager.d.ts +25 -16
  116. package/types/src/editor/managers/ExtensionManager/extensions.d.ts +8 -0
  117. package/types/src/editor/managers/ExtensionManager/index.d.ts +83 -0
  118. package/types/src/editor/managers/ExtensionManager/symbol.d.ts +5 -0
  119. package/types/src/editor/managers/StateManager.d.ts +1 -12
  120. package/types/src/editor/managers/index.d.ts +1 -2
  121. package/types/src/extensions/BlockChange/BlockChange.d.ts +16 -0
  122. package/types/src/extensions/Collaboration/ForkYDoc.d.ts +34 -0
  123. package/types/src/extensions/Collaboration/ForkYDoc.test.d.ts +1 -0
  124. package/types/src/extensions/Collaboration/YCursorPlugin.d.ts +24 -0
  125. package/types/src/extensions/Collaboration/YSync.d.ts +8 -0
  126. package/types/src/extensions/Collaboration/YUndo.d.ts +12 -0
  127. package/types/src/extensions/Collaboration/schemaMigration/SchemaMigration.d.ts +8 -0
  128. package/types/src/extensions/DropCursor/DropCursor.d.ts +5 -0
  129. package/types/src/extensions/FilePanel/FilePanel.d.ts +11 -0
  130. package/types/src/extensions/FormattingToolbar/FormattingToolbar.d.ts +9 -0
  131. package/types/src/extensions/History/History.d.ts +6 -0
  132. package/types/src/extensions/LinkToolbar/LinkToolbar.d.ts +24 -0
  133. package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboard.d.ts +5 -0
  134. package/types/src/extensions/Placeholder/Placeholder.d.ts +6 -0
  135. package/types/src/extensions/PreviousBlockType/{PreviousBlockTypePlugin.d.ts → PreviousBlockType.d.ts} +9 -5
  136. package/types/src/extensions/ShowSelection/ShowSelection.d.ts +21 -0
  137. package/types/src/extensions/SideMenu/{SideMenuPlugin.d.ts → SideMenu.d.ts} +11 -15
  138. package/types/src/extensions/SuggestionMenu/SuggestionMenu.d.ts +54 -0
  139. package/types/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.d.ts +1 -1
  140. package/types/src/extensions/TableHandles/{TableHandlesPlugin.d.ts → TableHandles.d.ts} +28 -31
  141. package/types/src/extensions/TrailingNode/TrailingNode.d.ts +8 -0
  142. package/types/src/extensions/index.d.ts +24 -0
  143. package/types/src/extensions/{KeyboardShortcuts → tiptap-extensions/KeyboardShortcuts}/KeyboardShortcutsExtension.d.ts +1 -1
  144. package/types/src/extensions/tiptap-extensions/index.d.ts +11 -0
  145. package/types/src/index.d.ts +1 -13
  146. package/types/src/schema/blocks/createSpec.d.ts +4 -4
  147. package/types/src/schema/blocks/internal.d.ts +2 -2
  148. package/types/src/schema/blocks/types.d.ts +5 -5
  149. package/types/src/util/topo-sort.d.ts +8 -0
  150. package/dist/BlockNoteSchema-Bi-eeHal.js.map +0 -1
  151. package/dist/BlockNoteSchema-DjDaA2C3.cjs +0 -6
  152. package/dist/BlockNoteSchema-DjDaA2C3.cjs.map +0 -1
  153. package/dist/blockToNode-DIfPWLH8.js.map +0 -1
  154. package/src/comments/models/User.ts +0 -8
  155. package/src/editor/BlockNoteExtensions.ts +0 -325
  156. package/src/editor/managers/CollaborationManager.ts +0 -212
  157. package/src/editor/managers/ExtensionManager.ts +0 -130
  158. package/src/extensions/Collaboration/CursorPlugin.ts +0 -189
  159. package/src/extensions/Collaboration/ForkYDocPlugin.ts +0 -192
  160. package/src/extensions/Collaboration/SyncPlugin.ts +0 -18
  161. package/src/extensions/Collaboration/UndoPlugin.ts +0 -18
  162. package/src/extensions/Collaboration/schemaMigration/SchemaMigrationPlugin.ts +0 -59
  163. package/src/extensions/Comments/CommentsPlugin.ts +0 -392
  164. package/src/extensions/FilePanel/FilePanelPlugin.ts +0 -206
  165. package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +0 -363
  166. package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +0 -380
  167. package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +0 -75
  168. package/src/extensions/Placeholder/PlaceholderPlugin.ts +0 -147
  169. package/types/src/comments/models/User.d.ts +0 -8
  170. package/types/src/editor/BlockNoteExtensions.d.ts +0 -43
  171. package/types/src/editor/managers/CollaborationManager.d.ts +0 -115
  172. package/types/src/editor/managers/ExtensionManager.d.ts +0 -68
  173. package/types/src/extensions/BlockChange/BlockChangePlugin.d.ts +0 -15
  174. package/types/src/extensions/Collaboration/CursorPlugin.d.ts +0 -37
  175. package/types/src/extensions/Collaboration/ForkYDocPlugin.d.ts +0 -41
  176. package/types/src/extensions/Collaboration/SyncPlugin.d.ts +0 -7
  177. package/types/src/extensions/Collaboration/UndoPlugin.d.ts +0 -9
  178. package/types/src/extensions/Collaboration/schemaMigration/SchemaMigrationPlugin.d.ts +0 -7
  179. package/types/src/extensions/Comments/CommentsPlugin.d.ts +0 -66
  180. package/types/src/extensions/FilePanel/FilePanelPlugin.d.ts +0 -31
  181. package/types/src/extensions/FormattingToolbar/FormattingToolbarPlugin.d.ts +0 -41
  182. package/types/src/extensions/LinkToolbar/LinkToolbarPlugin.d.ts +0 -42
  183. package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +0 -5
  184. package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +0 -6
  185. package/types/src/extensions/ShowSelection/ShowSelectionPlugin.d.ts +0 -15
  186. package/types/src/extensions/SuggestionMenu/SuggestionPlugin.d.ts +0 -31
  187. package/types/src/extensions/TrailingNode/TrailingNodeExtension.d.ts +0 -13
  188. /package/src/{extensions/Comments/CommentMark.ts → comments/mark.ts} +0 -0
  189. /package/src/extensions/{HardBreak → tiptap-extensions/HardBreak}/HardBreak.ts +0 -0
  190. /package/src/extensions/{Suggestions → tiptap-extensions/Suggestions}/SuggestionMarks.ts +0 -0
  191. /package/src/extensions/{TextAlignment → tiptap-extensions/TextAlignment}/TextAlignmentExtension.ts +0 -0
  192. /package/src/extensions/{UniqueID → tiptap-extensions/UniqueID}/UniqueID.ts +0 -0
  193. /package/types/src/{extensions/Comments/CommentMark.d.ts → comments/mark.d.ts} +0 -0
  194. /package/types/src/{extensions/Collaboration/ForkYDocPlugin.test.d.ts → editor/BlockNoteExtension.test.d.ts} +0 -0
  195. /package/types/src/extensions/{BackgroundColor → tiptap-extensions/BackgroundColor}/BackgroundColorExtension.d.ts +0 -0
  196. /package/types/src/extensions/{HardBreak → tiptap-extensions/HardBreak}/HardBreak.d.ts +0 -0
  197. /package/types/src/extensions/{Suggestions → tiptap-extensions/Suggestions}/SuggestionMarks.d.ts +0 -0
  198. /package/types/src/extensions/{TextAlignment → tiptap-extensions/TextAlignment}/TextAlignmentExtension.d.ts +0 -0
  199. /package/types/src/extensions/{TextColor → tiptap-extensions/TextColor}/TextColorExtension.d.ts +0 -0
  200. /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
- BlockSchema,
11
- InlineContentSchema,
12
- StyleSchema,
13
- } from "../../schema/index.js";
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<BSchema, I, S>,
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.getBoundingClientRect();
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.getBoundingClientRect(),
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 class SuggestionMenuProseMirrorPlugin<
167
- BSchema extends BlockSchema,
168
- I extends InlineContentSchema,
169
- S extends StyleSchema,
170
- > extends BlockNoteExtension {
171
- public static key() {
172
- return "suggestionMenu";
173
- }
174
-
175
- private view: SuggestionMenuView<BSchema, I, S> | undefined;
176
- private triggerCharacters: string[] = [];
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
- constructor(editor: BlockNoteEditor<BSchema, I, S>) {
179
- super();
180
- const triggerCharacters = this.triggerCharacters;
181
- this.addProsemirrorPlugin(
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: (view) => {
186
- this.view = new SuggestionMenuView<BSchema, I, S>(
217
+ view: (v) => {
218
+ view = new SuggestionMenuView(
187
219
  editor,
188
220
  (triggerCharacter, state) => {
189
- this.emit(`update ${triggerCharacter}`, state);
221
+ store.setState({ ...state, triggerCharacter });
190
222
  },
191
- view,
223
+ v,
192
224
  );
193
- return this.view;
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
- this.closeMenu();
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 insertOrUpdateBlock<
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, { type: "divider" });
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
- insertOrUpdateBlock(editor, {
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 = insertOrUpdateBlock(editor, {
256
+ const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
256
257
  type: "image",
257
258
  });
258
259
 
259
260
  // Immediately open the file toolbar
260
- editor.transact((tr) =>
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 = insertOrUpdateBlock(editor, {
271
+ const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
275
272
  type: "video",
276
273
  });
277
274
 
278
275
  // Immediately open the file toolbar
279
- editor.transact((tr) =>
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 = insertOrUpdateBlock(editor, {
286
+ const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
294
287
  type: "audio",
295
288
  });
296
289
 
297
290
  // Immediately open the file toolbar
298
- editor.transact((tr) =>
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 = insertOrUpdateBlock(editor, {
301
+ const insertedBlock = insertOrUpdateBlockForSlashMenu(editor, {
313
302
  type: "file",
314
303
  });
315
304
 
316
305
  // Immediately open the file toolbar
317
- editor.transact((tr) =>
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
- insertOrUpdateBlock(editor, {
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
  });