@blocknote/core 0.28.0 → 0.29.1

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 (381) hide show
  1. package/dist/blocknote.cjs +9 -9
  2. package/dist/blocknote.cjs.map +1 -1
  3. package/dist/blocknote.js +3221 -3351
  4. package/dist/blocknote.js.map +1 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/dist/webpack-stats.json +1 -1
  7. package/package.json +2 -2
  8. package/src/api/__snapshots__/blocks-deleted-nested-deep.json +26 -0
  9. package/src/api/__snapshots__/blocks-deleted-nested.json +68 -0
  10. package/src/api/__snapshots__/blocks-deleted.json +26 -0
  11. package/src/api/__snapshots__/blocks-inserted-nested.json +62 -0
  12. package/src/api/__snapshots__/blocks-inserted.json +20 -0
  13. package/src/api/__snapshots__/blocks-updated-content-inserted.json +42 -0
  14. package/src/api/__snapshots__/blocks-updated-multiple-insert.json +50 -0
  15. package/src/api/__snapshots__/blocks-updated-multiple.json +82 -0
  16. package/src/api/__snapshots__/blocks-updated-nested-deep.json +42 -0
  17. package/src/api/__snapshots__/blocks-updated-nested-multiple.json +118 -0
  18. package/src/api/__snapshots__/blocks-updated-nested.json +78 -0
  19. package/src/api/__snapshots__/blocks-updated-single.json +42 -0
  20. package/src/api/__snapshots__/blocks-updated.json +42 -0
  21. package/src/api/blockManipulation/__snapshots__/transactions.test.ts.snap +34 -0
  22. package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +312 -0
  23. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.ts +127 -94
  24. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +19 -37
  25. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +8 -6
  26. package/src/api/blockManipulation/commands/moveBlocks/moveBlocks.test.ts +25 -31
  27. package/src/api/blockManipulation/commands/moveBlocks/moveBlocks.ts +93 -91
  28. package/src/api/blockManipulation/commands/nestBlock/nestBlock.ts +16 -20
  29. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.ts +14 -1
  30. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +18 -56
  31. package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +52 -46
  32. package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +1051 -0
  33. package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +247 -154
  34. package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +109 -142
  35. package/src/api/blockManipulation/getBlock/getBlock.ts +23 -48
  36. package/src/api/blockManipulation/insertContentAt.ts +4 -17
  37. package/src/api/blockManipulation/selections/selection.test.ts +32 -16
  38. package/src/api/blockManipulation/selections/selection.ts +25 -51
  39. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.ts +35 -14
  40. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +34 -65
  41. package/src/api/clipboard/fromClipboard/handleFileInsertion.ts +8 -10
  42. package/src/api/clipboard/toClipboard/copyExtension.ts +7 -7
  43. package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +7 -16
  44. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +3 -17
  45. package/src/api/getBlockInfoFromPos.ts +13 -1
  46. package/src/api/nodeConversions/blockToNode.ts +21 -10
  47. package/src/api/nodeConversions/fragmentToBlocks.ts +5 -18
  48. package/src/api/nodeConversions/nodeToBlock.ts +11 -8
  49. package/src/api/nodeUtil.test.ts +228 -0
  50. package/src/api/nodeUtil.ts +235 -2
  51. package/src/api/parsers/html/parseHTML.ts +2 -10
  52. package/src/api/parsers/markdown/parseMarkdown.ts +2 -8
  53. package/src/api/pmUtil.ts +54 -0
  54. package/src/api/positionMapping.ts +4 -2
  55. package/src/blocks/FileBlockContent/helpers/render/createAddFileButton.ts +2 -2
  56. package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +9 -13
  57. package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +5 -9
  58. package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +19 -31
  59. package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +10 -8
  60. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +9 -13
  61. package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +1 -1
  62. package/src/blocks/QuoteBlockContent/QuoteBlockContent.ts +5 -9
  63. package/src/blocks/defaultBlockHelpers.ts +1 -1
  64. package/src/editor/BlockNoteEditor.test.ts +1 -1
  65. package/src/editor/BlockNoteEditor.ts +259 -131
  66. package/src/editor/BlockNoteTipTapEditor.ts +91 -8
  67. package/src/extensions/Comments/CommentsPlugin.ts +32 -34
  68. package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +4 -8
  69. package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +12 -13
  70. package/src/extensions/ShowSelection/ShowSelectionPlugin.ts +1 -3
  71. package/src/extensions/SideMenu/MultipleNodeSelection.ts +3 -1
  72. package/src/extensions/SideMenu/dragging.ts +1 -1
  73. package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +22 -19
  74. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +8 -8
  75. package/src/extensions/TableHandles/TableHandlesPlugin.ts +150 -136
  76. package/src/index.ts +4 -3
  77. package/src/schema/inlineContent/createSpec.ts +1 -5
  78. package/types/src/api/blockManipulation/commands/insertBlocks/insertBlocks.d.ts +2 -2
  79. package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.d.ts +4 -8
  80. package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.d.ts +9 -10
  81. package/types/src/api/blockManipulation/getBlock/getBlock.d.ts +7 -7
  82. package/types/src/api/blockManipulation/insertContentAt.d.ts +5 -3
  83. package/types/src/api/blockManipulation/selections/selection.d.ts +3 -3
  84. package/types/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.d.ts +5 -5
  85. package/types/src/api/getBlockInfoFromPos.d.ts +8 -1
  86. package/types/src/api/nodeConversions/blockToNode.d.ts +3 -3
  87. package/types/src/api/nodeConversions/fragmentToBlocks.d.ts +1 -2
  88. package/types/src/api/nodeConversions/nodeToBlock.d.ts +2 -2
  89. package/types/src/api/nodeUtil.d.ts +67 -1
  90. package/types/src/api/parsers/html/parseHTML.d.ts +1 -1
  91. package/types/src/api/parsers/markdown/parseMarkdown.d.ts +1 -1
  92. package/types/src/api/pmUtil.d.ts +12 -0
  93. package/types/src/editor/BlockNoteEditor.d.ts +72 -10
  94. package/types/src/editor/BlockNoteTipTapEditor.d.ts +15 -2
  95. package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +1 -1
  96. package/types/src/index.d.ts +1 -2
  97. package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +0 -1859
  98. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.ts +0 -40
  99. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +0 -20
  100. package/src/api/clipboard/__snapshots__/external/pasteEndOfParagraph.html +0 -138
  101. package/src/api/clipboard/__snapshots__/external/pasteEndOfParagraphText.html +0 -138
  102. package/src/api/clipboard/__snapshots__/external/pasteImage.html +0 -153
  103. package/src/api/clipboard/__snapshots__/external/pasteParagraphInCustomBlock.html +0 -138
  104. package/src/api/clipboard/__snapshots__/external/pasteTable.html +0 -233
  105. package/src/api/clipboard/__snapshots__/external/pasteTableInExistingTable.html +0 -216
  106. package/src/api/clipboard/__snapshots__/internal/basicBlocks.html +0 -1
  107. package/src/api/clipboard/__snapshots__/internal/basicBlocksWithProps.html +0 -1
  108. package/src/api/clipboard/__snapshots__/internal/childToParent.html +0 -1
  109. package/src/api/clipboard/__snapshots__/internal/childrenToNextParent.html +0 -1
  110. package/src/api/clipboard/__snapshots__/internal/childrenToNextParentsChildren.html +0 -1
  111. package/src/api/clipboard/__snapshots__/internal/image.html +0 -1
  112. package/src/api/clipboard/__snapshots__/internal/multipleChildren.html +0 -1
  113. package/src/api/clipboard/__snapshots__/internal/multipleStyledText.html +0 -1
  114. package/src/api/clipboard/__snapshots__/internal/nestedImage.html +0 -1
  115. package/src/api/clipboard/__snapshots__/internal/paragraphInCustomBlock.html +0 -1
  116. package/src/api/clipboard/__snapshots__/internal/partialChildToParent.html +0 -1
  117. package/src/api/clipboard/__snapshots__/internal/styledText.html +0 -1
  118. package/src/api/clipboard/__snapshots__/internal/tableAllCells.html +0 -1
  119. package/src/api/clipboard/__snapshots__/internal/tableCell.html +0 -1
  120. package/src/api/clipboard/__snapshots__/internal/tableCellText.html +0 -1
  121. package/src/api/clipboard/__snapshots__/internal/tableRow.html +0 -1
  122. package/src/api/clipboard/__snapshots__/internal/unstyledText.html +0 -1
  123. package/src/api/clipboard/clipboardExternal.test.ts +0 -161
  124. package/src/api/clipboard/clipboardInternal.test.ts +0 -435
  125. package/src/api/clipboard/testUtil.ts +0 -27
  126. package/src/api/exporters/html/__snapshots__/codeBlock/contains-newlines/external.html +0 -1
  127. package/src/api/exporters/html/__snapshots__/codeBlock/contains-newlines/internal.html +0 -3
  128. package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/external.html +0 -1
  129. package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/internal.html +0 -1
  130. package/src/api/exporters/html/__snapshots__/codeBlock/empty/external.html +0 -1
  131. package/src/api/exporters/html/__snapshots__/codeBlock/empty/internal.html +0 -1
  132. package/src/api/exporters/html/__snapshots__/codeBlock/python/external.html +0 -1
  133. package/src/api/exporters/html/__snapshots__/codeBlock/python/internal.html +0 -1
  134. package/src/api/exporters/html/__snapshots__/complex/misc/external.html +0 -1
  135. package/src/api/exporters/html/__snapshots__/complex/misc/internal.html +0 -1
  136. package/src/api/exporters/html/__snapshots__/customBlock/basic/external.html +0 -1
  137. package/src/api/exporters/html/__snapshots__/customBlock/basic/internal.html +0 -1
  138. package/src/api/exporters/html/__snapshots__/customParagraph/basic/external.html +0 -1
  139. package/src/api/exporters/html/__snapshots__/customParagraph/basic/internal.html +0 -1
  140. package/src/api/exporters/html/__snapshots__/customParagraph/lineBreaks/external.html +0 -1
  141. package/src/api/exporters/html/__snapshots__/customParagraph/lineBreaks/internal.html +0 -1
  142. package/src/api/exporters/html/__snapshots__/customParagraph/nested/external.html +0 -1
  143. package/src/api/exporters/html/__snapshots__/customParagraph/nested/internal.html +0 -1
  144. package/src/api/exporters/html/__snapshots__/customParagraph/styled/external.html +0 -1
  145. package/src/api/exporters/html/__snapshots__/customParagraph/styled/internal.html +0 -1
  146. package/src/api/exporters/html/__snapshots__/file/basic/external.html +0 -1
  147. package/src/api/exporters/html/__snapshots__/file/basic/internal.html +0 -1
  148. package/src/api/exporters/html/__snapshots__/file/button/external.html +0 -1
  149. package/src/api/exporters/html/__snapshots__/file/button/internal.html +0 -1
  150. package/src/api/exporters/html/__snapshots__/file/nested/external.html +0 -1
  151. package/src/api/exporters/html/__snapshots__/file/nested/internal.html +0 -1
  152. package/src/api/exporters/html/__snapshots__/file/noCaption/external.html +0 -1
  153. package/src/api/exporters/html/__snapshots__/file/noCaption/internal.html +0 -1
  154. package/src/api/exporters/html/__snapshots__/file/noName/external.html +0 -1
  155. package/src/api/exporters/html/__snapshots__/file/noName/internal.html +0 -1
  156. package/src/api/exporters/html/__snapshots__/fontSize/basic/external.html +0 -1
  157. package/src/api/exporters/html/__snapshots__/fontSize/basic/internal.html +0 -1
  158. package/src/api/exporters/html/__snapshots__/hardbreak/basic/external.html +0 -1
  159. package/src/api/exporters/html/__snapshots__/hardbreak/basic/internal.html +0 -1
  160. package/src/api/exporters/html/__snapshots__/hardbreak/between-links/external.html +0 -1
  161. package/src/api/exporters/html/__snapshots__/hardbreak/between-links/internal.html +0 -1
  162. package/src/api/exporters/html/__snapshots__/hardbreak/end/external.html +0 -1
  163. package/src/api/exporters/html/__snapshots__/hardbreak/end/internal.html +0 -1
  164. package/src/api/exporters/html/__snapshots__/hardbreak/link/external.html +0 -1
  165. package/src/api/exporters/html/__snapshots__/hardbreak/link/internal.html +0 -1
  166. package/src/api/exporters/html/__snapshots__/hardbreak/multiple/external.html +0 -1
  167. package/src/api/exporters/html/__snapshots__/hardbreak/multiple/internal.html +0 -1
  168. package/src/api/exporters/html/__snapshots__/hardbreak/only/external.html +0 -1
  169. package/src/api/exporters/html/__snapshots__/hardbreak/only/internal.html +0 -1
  170. package/src/api/exporters/html/__snapshots__/hardbreak/start/external.html +0 -1
  171. package/src/api/exporters/html/__snapshots__/hardbreak/start/internal.html +0 -1
  172. package/src/api/exporters/html/__snapshots__/hardbreak/styles/external.html +0 -1
  173. package/src/api/exporters/html/__snapshots__/hardbreak/styles/internal.html +0 -1
  174. package/src/api/exporters/html/__snapshots__/image/basic/external.html +0 -1
  175. package/src/api/exporters/html/__snapshots__/image/basic/internal.html +0 -1
  176. package/src/api/exporters/html/__snapshots__/image/button/external.html +0 -1
  177. package/src/api/exporters/html/__snapshots__/image/button/internal.html +0 -1
  178. package/src/api/exporters/html/__snapshots__/image/nested/external.html +0 -1
  179. package/src/api/exporters/html/__snapshots__/image/nested/internal.html +0 -1
  180. package/src/api/exporters/html/__snapshots__/image/noCaption/external.html +0 -1
  181. package/src/api/exporters/html/__snapshots__/image/noCaption/internal.html +0 -1
  182. package/src/api/exporters/html/__snapshots__/image/noName/external.html +0 -1
  183. package/src/api/exporters/html/__snapshots__/image/noName/internal.html +0 -1
  184. package/src/api/exporters/html/__snapshots__/image/noPreview/external.html +0 -1
  185. package/src/api/exporters/html/__snapshots__/image/noPreview/internal.html +0 -1
  186. package/src/api/exporters/html/__snapshots__/link/adjacent/external.html +0 -1
  187. package/src/api/exporters/html/__snapshots__/link/adjacent/internal.html +0 -1
  188. package/src/api/exporters/html/__snapshots__/link/basic/external.html +0 -1
  189. package/src/api/exporters/html/__snapshots__/link/basic/internal.html +0 -1
  190. package/src/api/exporters/html/__snapshots__/link/styled/external.html +0 -1
  191. package/src/api/exporters/html/__snapshots__/link/styled/internal.html +0 -1
  192. package/src/api/exporters/html/__snapshots__/lists/basic/external.html +0 -1
  193. package/src/api/exporters/html/__snapshots__/lists/basic/internal.html +0 -1
  194. package/src/api/exporters/html/__snapshots__/lists/nested/external.html +0 -1
  195. package/src/api/exporters/html/__snapshots__/lists/nested/internal.html +0 -1
  196. package/src/api/exporters/html/__snapshots__/mention/basic/external.html +0 -1
  197. package/src/api/exporters/html/__snapshots__/mention/basic/internal.html +0 -1
  198. package/src/api/exporters/html/__snapshots__/pageBreak/basic/external.html +0 -1
  199. package/src/api/exporters/html/__snapshots__/pageBreak/basic/internal.html +0 -1
  200. package/src/api/exporters/html/__snapshots__/paragraph/basic/external.html +0 -1
  201. package/src/api/exporters/html/__snapshots__/paragraph/basic/internal.html +0 -1
  202. package/src/api/exporters/html/__snapshots__/paragraph/empty/external.html +0 -1
  203. package/src/api/exporters/html/__snapshots__/paragraph/empty/internal.html +0 -1
  204. package/src/api/exporters/html/__snapshots__/paragraph/lineBreaks/external.html +0 -1
  205. package/src/api/exporters/html/__snapshots__/paragraph/lineBreaks/internal.html +0 -1
  206. package/src/api/exporters/html/__snapshots__/paragraph/nested/external.html +0 -1
  207. package/src/api/exporters/html/__snapshots__/paragraph/nested/internal.html +0 -1
  208. package/src/api/exporters/html/__snapshots__/paragraph/styled/external.html +0 -1
  209. package/src/api/exporters/html/__snapshots__/paragraph/styled/internal.html +0 -1
  210. package/src/api/exporters/html/__snapshots__/paste/parse-basic-block-types.json +0 -140
  211. package/src/api/exporters/html/__snapshots__/paste/parse-deep-nested-content.json +0 -240
  212. package/src/api/exporters/html/__snapshots__/paste/parse-div-with-inline-content.json +0 -91
  213. package/src/api/exporters/html/__snapshots__/paste/parse-divs.json +0 -19
  214. package/src/api/exporters/html/__snapshots__/paste/parse-fake-image-caption.json +0 -31
  215. package/src/api/exporters/html/__snapshots__/paste/parse-mixed-nested-lists.json +0 -70
  216. package/src/api/exporters/html/__snapshots__/paste/parse-nested-lists-with-paragraphs.json +0 -70
  217. package/src/api/exporters/html/__snapshots__/paste/parse-nested-lists.json +0 -70
  218. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/basic/external.html +0 -1
  219. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/basic/internal.html +0 -1
  220. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/nested/external.html +0 -1
  221. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/nested/internal.html +0 -1
  222. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/styled/external.html +0 -1
  223. package/src/api/exporters/html/__snapshots__/simpleCustomParagraph/styled/internal.html +0 -1
  224. package/src/api/exporters/html/__snapshots__/simpleFile/basic/external.html +0 -1
  225. package/src/api/exporters/html/__snapshots__/simpleFile/basic/internal.html +0 -1
  226. package/src/api/exporters/html/__snapshots__/simpleFile/button/external.html +0 -1
  227. package/src/api/exporters/html/__snapshots__/simpleFile/button/internal.html +0 -1
  228. package/src/api/exporters/html/__snapshots__/simpleFile/nested/external.html +0 -1
  229. package/src/api/exporters/html/__snapshots__/simpleFile/nested/internal.html +0 -1
  230. package/src/api/exporters/html/__snapshots__/simpleImage/basic/external.html +0 -1
  231. package/src/api/exporters/html/__snapshots__/simpleImage/basic/internal.html +0 -1
  232. package/src/api/exporters/html/__snapshots__/simpleImage/button/external.html +0 -1
  233. package/src/api/exporters/html/__snapshots__/simpleImage/button/internal.html +0 -1
  234. package/src/api/exporters/html/__snapshots__/simpleImage/nested/external.html +0 -1
  235. package/src/api/exporters/html/__snapshots__/simpleImage/nested/internal.html +0 -1
  236. package/src/api/exporters/html/__snapshots__/simpleImage/noCaption/external.html +0 -1
  237. package/src/api/exporters/html/__snapshots__/simpleImage/noCaption/internal.html +0 -1
  238. package/src/api/exporters/html/__snapshots__/simpleImage/noName/external.html +0 -1
  239. package/src/api/exporters/html/__snapshots__/simpleImage/noName/internal.html +0 -1
  240. package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/external.html +0 -1
  241. package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/internal.html +0 -1
  242. package/src/api/exporters/html/__snapshots__/small/basic/external.html +0 -1
  243. package/src/api/exporters/html/__snapshots__/small/basic/internal.html +0 -1
  244. package/src/api/exporters/html/__snapshots__/table/allColWidths/external.html +0 -1
  245. package/src/api/exporters/html/__snapshots__/table/allColWidths/internal.html +0 -1
  246. package/src/api/exporters/html/__snapshots__/table/basic/external.html +0 -1
  247. package/src/api/exporters/html/__snapshots__/table/basic/internal.html +0 -1
  248. package/src/api/exporters/html/__snapshots__/table/headerCols/external.html +0 -1
  249. package/src/api/exporters/html/__snapshots__/table/headerCols/internal.html +0 -1
  250. package/src/api/exporters/html/__snapshots__/table/headerRows/external.html +0 -1
  251. package/src/api/exporters/html/__snapshots__/table/headerRows/internal.html +0 -1
  252. package/src/api/exporters/html/__snapshots__/table/headersRows/external.html +0 -1
  253. package/src/api/exporters/html/__snapshots__/table/headersRows/internal.html +0 -1
  254. package/src/api/exporters/html/__snapshots__/table/mixedCellColors/external.html +0 -1
  255. package/src/api/exporters/html/__snapshots__/table/mixedCellColors/internal.html +0 -1
  256. package/src/api/exporters/html/__snapshots__/table/mixedColWidths/external.html +0 -1
  257. package/src/api/exporters/html/__snapshots__/table/mixedColWidths/internal.html +0 -1
  258. package/src/api/exporters/html/__snapshots__/table/mixedRowspansAndColspans/external.html +0 -1
  259. package/src/api/exporters/html/__snapshots__/table/mixedRowspansAndColspans/internal.html +0 -1
  260. package/src/api/exporters/html/__snapshots__/tag/basic/external.html +0 -1
  261. package/src/api/exporters/html/__snapshots__/tag/basic/internal.html +0 -1
  262. package/src/api/exporters/html/htmlConversion.test.ts +0 -110
  263. package/src/api/exporters/markdown/__snapshots__/codeBlock/contains-newlines/markdown.md +0 -4
  264. package/src/api/exporters/markdown/__snapshots__/codeBlock/defaultLanguage/markdown.md +0 -3
  265. package/src/api/exporters/markdown/__snapshots__/codeBlock/empty/markdown.md +0 -2
  266. package/src/api/exporters/markdown/__snapshots__/codeBlock/python/markdown.md +0 -3
  267. package/src/api/exporters/markdown/__snapshots__/complex/misc/markdown.md +0 -5
  268. package/src/api/exporters/markdown/__snapshots__/customBlock/basic/markdown.md +0 -5
  269. package/src/api/exporters/markdown/__snapshots__/customParagraph/basic/markdown.md +0 -1
  270. package/src/api/exporters/markdown/__snapshots__/customParagraph/lineBreaks/markdown.md +0 -1
  271. package/src/api/exporters/markdown/__snapshots__/customParagraph/nested/markdown.md +0 -5
  272. package/src/api/exporters/markdown/__snapshots__/customParagraph/styled/markdown.md +0 -1
  273. package/src/api/exporters/markdown/__snapshots__/file/basic/markdown.md +0 -3
  274. package/src/api/exporters/markdown/__snapshots__/file/button/markdown.md +0 -1
  275. package/src/api/exporters/markdown/__snapshots__/file/nested/markdown.md +0 -7
  276. package/src/api/exporters/markdown/__snapshots__/file/noCaption/markdown.md +0 -1
  277. package/src/api/exporters/markdown/__snapshots__/file/noName/markdown.md +0 -3
  278. package/src/api/exporters/markdown/__snapshots__/fontSize/basic/markdown.md +0 -1
  279. package/src/api/exporters/markdown/__snapshots__/hardbreak/basic/markdown.md +0 -2
  280. package/src/api/exporters/markdown/__snapshots__/hardbreak/between-links/markdown.md +0 -2
  281. package/src/api/exporters/markdown/__snapshots__/hardbreak/end/markdown.md +0 -1
  282. package/src/api/exporters/markdown/__snapshots__/hardbreak/link/markdown.md +0 -2
  283. package/src/api/exporters/markdown/__snapshots__/hardbreak/multiple/markdown.md +0 -3
  284. package/src/api/exporters/markdown/__snapshots__/hardbreak/only/markdown.md +0 -0
  285. package/src/api/exporters/markdown/__snapshots__/hardbreak/start/markdown.md +0 -1
  286. package/src/api/exporters/markdown/__snapshots__/hardbreak/styles/markdown.md +0 -2
  287. package/src/api/exporters/markdown/__snapshots__/image/basic/markdown.md +0 -3
  288. package/src/api/exporters/markdown/__snapshots__/image/button/markdown.md +0 -1
  289. package/src/api/exporters/markdown/__snapshots__/image/nested/markdown.md +0 -7
  290. package/src/api/exporters/markdown/__snapshots__/image/noCaption/markdown.md +0 -1
  291. package/src/api/exporters/markdown/__snapshots__/image/noName/markdown.md +0 -3
  292. package/src/api/exporters/markdown/__snapshots__/image/noPreview/markdown.md +0 -3
  293. package/src/api/exporters/markdown/__snapshots__/link/adjacent/markdown.md +0 -1
  294. package/src/api/exporters/markdown/__snapshots__/link/basic/markdown.md +0 -1
  295. package/src/api/exporters/markdown/__snapshots__/link/styled/markdown.md +0 -1
  296. package/src/api/exporters/markdown/__snapshots__/lists/basic/markdown.md +0 -10
  297. package/src/api/exporters/markdown/__snapshots__/lists/nested/markdown.md +0 -10
  298. package/src/api/exporters/markdown/__snapshots__/mention/basic/markdown.md +0 -1
  299. package/src/api/exporters/markdown/__snapshots__/pageBreak/basic/markdown.md +0 -0
  300. package/src/api/exporters/markdown/__snapshots__/paragraph/basic/markdown.md +0 -1
  301. package/src/api/exporters/markdown/__snapshots__/paragraph/empty/markdown.md +0 -0
  302. package/src/api/exporters/markdown/__snapshots__/paragraph/lineBreaks/markdown.md +0 -2
  303. package/src/api/exporters/markdown/__snapshots__/paragraph/nested/markdown.md +0 -5
  304. package/src/api/exporters/markdown/__snapshots__/paragraph/styled/markdown.md +0 -1
  305. package/src/api/exporters/markdown/__snapshots__/simpleCustomParagraph/basic/markdown.md +0 -1
  306. package/src/api/exporters/markdown/__snapshots__/simpleCustomParagraph/nested/markdown.md +0 -5
  307. package/src/api/exporters/markdown/__snapshots__/simpleCustomParagraph/styled/markdown.md +0 -1
  308. package/src/api/exporters/markdown/__snapshots__/simpleFile/basic/markdown.md +0 -3
  309. package/src/api/exporters/markdown/__snapshots__/simpleFile/button/markdown.md +0 -1
  310. package/src/api/exporters/markdown/__snapshots__/simpleFile/nested/markdown.md +0 -7
  311. package/src/api/exporters/markdown/__snapshots__/simpleImage/basic/markdown.md +0 -3
  312. package/src/api/exporters/markdown/__snapshots__/simpleImage/button/markdown.md +0 -1
  313. package/src/api/exporters/markdown/__snapshots__/simpleImage/nested/markdown.md +0 -7
  314. package/src/api/exporters/markdown/__snapshots__/simpleImage/noCaption/markdown.md +0 -1
  315. package/src/api/exporters/markdown/__snapshots__/simpleImage/noName/markdown.md +0 -3
  316. package/src/api/exporters/markdown/__snapshots__/simpleImage/noPreview/markdown.md +0 -3
  317. package/src/api/exporters/markdown/__snapshots__/small/basic/markdown.md +0 -1
  318. package/src/api/exporters/markdown/__snapshots__/table/allColWidths/markdown.md +0 -5
  319. package/src/api/exporters/markdown/__snapshots__/table/basic/markdown.md +0 -5
  320. package/src/api/exporters/markdown/__snapshots__/table/headerCols/markdown.md +0 -4
  321. package/src/api/exporters/markdown/__snapshots__/table/headerRows/markdown.md +0 -4
  322. package/src/api/exporters/markdown/__snapshots__/table/mixedCellColors/markdown.md +0 -5
  323. package/src/api/exporters/markdown/__snapshots__/table/mixedColWidths/markdown.md +0 -5
  324. package/src/api/exporters/markdown/__snapshots__/table/mixedRowspansAndColspans/markdown.md +0 -5
  325. package/src/api/exporters/markdown/__snapshots__/tag/basic/markdown.md +0 -1
  326. package/src/api/exporters/markdown/markdownExporter.test.ts +0 -86
  327. package/src/api/nodeConversions/__snapshots__/nodeConversions.test.ts.snap +0 -3473
  328. package/src/api/nodeConversions/nodeConversions.test.ts +0 -83
  329. package/src/api/parsers/html/__snapshots__/list-test.json +0 -177
  330. package/src/api/parsers/html/__snapshots__/parse-2-tables.json +0 -129
  331. package/src/api/parsers/html/__snapshots__/parse-basic-block-types.json +0 -142
  332. package/src/api/parsers/html/__snapshots__/parse-codeblocks.json +0 -62
  333. package/src/api/parsers/html/__snapshots__/parse-div-with-inline-content.json +0 -91
  334. package/src/api/parsers/html/__snapshots__/parse-divs.json +0 -121
  335. package/src/api/parsers/html/__snapshots__/parse-fake-image-caption.json +0 -33
  336. package/src/api/parsers/html/__snapshots__/parse-image-in-paragraph.json +0 -16
  337. package/src/api/parsers/html/__snapshots__/parse-mixed-nested-lists.json +0 -265
  338. package/src/api/parsers/html/__snapshots__/parse-nested-lists-with-paragraphs.json +0 -265
  339. package/src/api/parsers/html/__snapshots__/parse-nested-lists.json +0 -265
  340. package/src/api/parsers/html/__snapshots__/parse-notion-html.json +0 -565
  341. package/src/api/parsers/html/__snapshots__/parse-two-divs.json +0 -36
  342. package/src/api/parsers/html/parseHTML.test.ts +0 -563
  343. package/src/api/parsers/markdown/__snapshots__/complex.json +0 -353
  344. package/src/api/parsers/markdown/__snapshots__/issue-226-1.json +0 -71
  345. package/src/api/parsers/markdown/__snapshots__/issue-226-2.json +0 -144
  346. package/src/api/parsers/markdown/__snapshots__/nested.json +0 -72
  347. package/src/api/parsers/markdown/__snapshots__/non-nested.json +0 -71
  348. package/src/api/parsers/markdown/__snapshots__/pasted/complex.json +0 -319
  349. package/src/api/parsers/markdown/__snapshots__/pasted/issue-226-1.json +0 -81
  350. package/src/api/parsers/markdown/__snapshots__/pasted/issue-226-2.json +0 -165
  351. package/src/api/parsers/markdown/__snapshots__/pasted/nested.json +0 -81
  352. package/src/api/parsers/markdown/__snapshots__/pasted/non-nested.json +0 -81
  353. package/src/api/parsers/markdown/__snapshots__/pasted/styled.json +0 -61
  354. package/src/api/parsers/markdown/__snapshots__/pasted/whitespace bold.json +0 -42
  355. package/src/api/parsers/markdown/__snapshots__/styled.json +0 -58
  356. package/src/api/parsers/markdown/__snapshots__/whitespace bold.json +0 -19
  357. package/src/api/parsers/markdown/parseMarkdown.test.ts +0 -135
  358. package/src/api/testUtil/cases/customBlocks.ts +0 -342
  359. package/src/api/testUtil/cases/customInlineContent.ts +0 -113
  360. package/src/api/testUtil/cases/customStyles.ts +0 -102
  361. package/src/api/testUtil/cases/defaultSchema.ts +0 -1493
  362. package/src/api/testUtil/index.ts +0 -19
  363. package/src/api/testUtil/partialBlockTestUtil.ts +0 -198
  364. package/src/api/testUtil/paste.ts +0 -46
  365. package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.d.ts +0 -4
  366. package/types/src/api/clipboard/clipboardExternal.test.d.ts +0 -1
  367. package/types/src/api/clipboard/clipboardInternal.test.d.ts +0 -1
  368. package/types/src/api/clipboard/testUtil.d.ts +0 -541
  369. package/types/src/api/exporters/html/htmlConversion.test.d.ts +0 -1
  370. package/types/src/api/exporters/markdown/markdownExporter.test.d.ts +0 -1
  371. package/types/src/api/nodeConversions/nodeConversions.test.d.ts +0 -1
  372. package/types/src/api/parsers/html/parseHTML.test.d.ts +0 -1
  373. package/types/src/api/parsers/markdown/parseMarkdown.test.d.ts +0 -1
  374. package/types/src/api/testUtil/cases/customBlocks.d.ts +0 -670
  375. package/types/src/api/testUtil/cases/customInlineContent.d.ts +0 -558
  376. package/types/src/api/testUtil/cases/customStyles.d.ts +0 -552
  377. package/types/src/api/testUtil/cases/defaultSchema.d.ts +0 -4
  378. package/types/src/api/testUtil/index.d.ts +0 -14
  379. package/types/src/api/testUtil/partialBlockTestUtil.d.ts +0 -9
  380. package/types/src/api/testUtil/paste.d.ts +0 -2
  381. /package/types/src/api/{blockManipulation/commands/removeBlocks/removeBlocks.test.d.ts → nodeUtil.test.d.ts} +0 -0
@@ -1,5 +1,4 @@
1
- import { EditorOptions, createDocument } from "@tiptap/core";
2
- // import "./blocknote.css";
1
+ import { Editor, EditorOptions, createDocument } from "@tiptap/core";
3
2
  import { Editor as TiptapEditor } from "@tiptap/core";
4
3
 
5
4
  import { Node } from "@tiptap/pm/model";
@@ -138,13 +137,83 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
138
137
  return this._state;
139
138
  }
140
139
 
141
- dispatch(tr: Transaction) {
142
- if (this.view) {
143
- this.view.dispatch(tr);
144
- } else {
140
+ dispatch(transaction: Transaction) {
141
+ if (!this.view) {
145
142
  // before view has been initialized
146
- this._state = this.state.apply(tr);
143
+ this._state = this.state.apply(transaction);
144
+ return;
145
+ }
146
+ // This is a verbatim copy of the default dispatch method, but with the following changes:
147
+ // - We provide the appendedTransactions to a new `v3-update` event
148
+ // In the future, we can remove this dispatch method entirely and rely on the new `update` event signature which does what we want by providing the appendedTransactions
149
+ ////////////////////////////////////////////////////////////////////////////////
150
+ // if the editor / the view of the editor was destroyed
151
+ // the transaction should not be dispatched as there is no view anymore.
152
+ if (this.view.isDestroyed) {
153
+ return;
154
+ }
155
+
156
+ if (this.isCapturingTransaction) {
157
+ // Do the default capture behavior
158
+ (this as any).dispatchTransaction(transaction);
159
+
160
+ return;
161
+ }
162
+
163
+ const { state, transactions: appendedTransactions } =
164
+ this.state.applyTransaction(transaction);
165
+ const selectionHasChanged = !this.state.selection.eq(state.selection);
166
+
167
+ this.emit("beforeTransaction", {
168
+ editor: this,
169
+ transaction,
170
+ nextState: state,
171
+ });
172
+ this.view.updateState(state);
173
+ this.emit("transaction", {
174
+ editor: this,
175
+ transaction,
176
+ });
177
+
178
+ if (selectionHasChanged) {
179
+ this.emit("selectionUpdate", {
180
+ editor: this,
181
+ transaction,
182
+ });
183
+ }
184
+
185
+ const focus = transaction.getMeta("focus");
186
+ const blur = transaction.getMeta("blur");
187
+
188
+ if (focus) {
189
+ this.emit("focus", {
190
+ editor: this,
191
+ event: focus.event,
192
+ transaction,
193
+ });
194
+ }
195
+
196
+ if (blur) {
197
+ this.emit("blur", {
198
+ editor: this,
199
+ event: blur.event,
200
+ transaction,
201
+ });
147
202
  }
203
+
204
+ if (!transaction.docChanged || transaction.getMeta("preventUpdate")) {
205
+ return;
206
+ }
207
+
208
+ this.emit("update", {
209
+ editor: this,
210
+ transaction,
211
+ });
212
+ this.emit("v3-update", {
213
+ editor: this,
214
+ transaction,
215
+ appendedTransactions: appendedTransactions.slice(1),
216
+ });
148
217
  }
149
218
 
150
219
  /**
@@ -171,7 +240,7 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
171
240
  {
172
241
  ...this.options.editorProps,
173
242
  // @ts-ignore
174
- dispatchTransaction: this.dispatchTransaction.bind(this),
243
+ dispatchTransaction: this.dispatch.bind(this),
175
244
  state: this.state,
176
245
  markViews,
177
246
  nodeViews: this.extensionManager.nodeViews,
@@ -228,3 +297,17 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
228
297
  // (note: can probably be removed after tiptap upgrade fixed in 2.8.0)
229
298
  this.options.onPaste = this.options.onDrop = undefined;
230
299
  };
300
+
301
+ declare module "@tiptap/core" {
302
+ interface EditorEvents {
303
+ /**
304
+ * This is a custom event that will be emitted in Tiptap V3.
305
+ * We use it to provide the appendedTransactions, until Tiptap V3 is released.
306
+ */
307
+ "v3-update": {
308
+ editor: Editor;
309
+ transaction: Transaction;
310
+ appendedTransactions: Transaction[];
311
+ };
312
+ }
313
+ }
@@ -89,41 +89,39 @@ export class CommentsPlugin extends EventEmitter<any> {
89
89
  * when a thread is resolved or deleted, we need to update the marks to reflect the new state
90
90
  */
91
91
  private updateMarksFromThreads = (threads: Map<string, ThreadData>) => {
92
- const ttEditor = this.editor._tiptapEditor;
93
-
94
- ttEditor.state.doc.descendants((node, pos) => {
95
- node.marks.forEach((mark) => {
96
- if (mark.type.name === this.markType) {
97
- const markType = mark.type;
98
- const markThreadId = mark.attrs.threadId;
99
- const thread = threads.get(markThreadId);
100
- const isOrphan = !!(!thread || thread.resolved || thread.deletedAt);
101
-
102
- if (isOrphan !== mark.attrs.orphan) {
103
- const { tr } = ttEditor.state;
104
- const trimmedFrom = Math.max(pos, 0);
105
- const trimmedTo = Math.min(
106
- pos + node.nodeSize,
107
- ttEditor.state.doc.content.size - 1
108
- );
109
- tr.removeMark(trimmedFrom, trimmedTo, mark);
110
- tr.addMark(
111
- trimmedFrom,
112
- trimmedTo,
113
- markType.create({
114
- ...mark.attrs,
115
- orphan: isOrphan,
116
- })
117
- );
118
- ttEditor.dispatch(tr);
92
+ this.editor.transact((tr) => {
93
+ tr.doc.descendants((node, pos) => {
94
+ node.marks.forEach((mark) => {
95
+ if (mark.type.name === this.markType) {
96
+ const markType = mark.type;
97
+ const markThreadId = mark.attrs.threadId;
98
+ const thread = threads.get(markThreadId);
99
+ const isOrphan = !!(!thread || thread.resolved || thread.deletedAt);
100
+
101
+ if (isOrphan !== mark.attrs.orphan) {
102
+ const trimmedFrom = Math.max(pos, 0);
103
+ const trimmedTo = Math.min(
104
+ pos + node.nodeSize,
105
+ tr.doc.content.size - 1
106
+ );
107
+ tr.removeMark(trimmedFrom, trimmedTo, mark);
108
+ tr.addMark(
109
+ trimmedFrom,
110
+ trimmedTo,
111
+ markType.create({
112
+ ...mark.attrs,
113
+ orphan: isOrphan,
114
+ })
115
+ );
119
116
 
120
- if (isOrphan && this.selectedThreadId === markThreadId) {
121
- // unselect
122
- this.selectedThreadId = undefined;
123
- this.emitStateUpdate();
117
+ if (isOrphan && this.selectedThreadId === markThreadId) {
118
+ // unselect
119
+ this.selectedThreadId = undefined;
120
+ this.emitStateUpdate();
121
+ }
124
122
  }
125
123
  }
126
- }
124
+ });
127
125
  });
128
126
  });
129
127
  };
@@ -262,8 +260,8 @@ export class CommentsPlugin extends EventEmitter<any> {
262
260
  }
263
261
  this.selectedThreadId = threadId;
264
262
  this.emitStateUpdate();
265
- this.editor.dispatch(
266
- this.editor.prosemirrorView!.state.tr.setMeta(PLUGIN_KEY, {
263
+ this.editor.transact((tr) =>
264
+ tr.setMeta(PLUGIN_KEY, {
267
265
  name: SET_SELECTED_THREAD_ID,
268
266
  })
269
267
  );
@@ -45,14 +45,10 @@ export const KeyboardShortcutsExtension = Extension.create<{
45
45
 
46
46
  if (selectionAtBlockStart && !isParagraph) {
47
47
  return commands.command(
48
- updateBlockCommand(
49
- this.options.editor,
50
- blockInfo.bnBlock.beforePos,
51
- {
52
- type: "paragraph",
53
- props: {},
54
- }
55
- )
48
+ updateBlockCommand(blockInfo.bnBlock.beforePos, {
49
+ type: "paragraph",
50
+ props: {},
51
+ })
56
52
  );
57
53
  }
58
54
 
@@ -12,6 +12,7 @@ import {
12
12
  StyleSchema,
13
13
  } from "../../schema/index.js";
14
14
  import { EventEmitter } from "../../util/EventEmitter.js";
15
+ import { getPmSchema } from "../../api/pmUtil.js";
15
16
 
16
17
  export type LinkToolbarState = UiElementPosition & {
17
18
  // The hovered link's URL, and the text it's displayed with in the
@@ -153,17 +154,15 @@ class LinkToolbarView implements PluginView {
153
154
  };
154
155
 
155
156
  editLink(url: string, text: string) {
156
- const tr = this.pmView.state.tr.insertText(
157
- text,
158
- this.linkMarkRange!.from,
159
- this.linkMarkRange!.to
160
- );
161
- tr.addMark(
162
- this.linkMarkRange!.from,
163
- this.linkMarkRange!.from + text.length,
164
- this.pmView.state.schema.mark("link", { href: url })
165
- );
166
- this.editor.dispatch(tr);
157
+ this.editor.transact((tr) => {
158
+ const pmSchema = getPmSchema(tr);
159
+ tr.insertText(text, this.linkMarkRange!.from, this.linkMarkRange!.to);
160
+ tr.addMark(
161
+ this.linkMarkRange!.from,
162
+ this.linkMarkRange!.from + text.length,
163
+ pmSchema.mark("link", { href: url })
164
+ );
165
+ });
167
166
  this.pmView.focus();
168
167
 
169
168
  if (this.state?.show) {
@@ -173,8 +172,8 @@ class LinkToolbarView implements PluginView {
173
172
  }
174
173
 
175
174
  deleteLink() {
176
- this.editor.dispatch(
177
- this.pmView.state.tr
175
+ this.editor.transact((tr) =>
176
+ tr
178
177
  .removeMark(
179
178
  this.linkMarkRange!.from,
180
179
  this.linkMarkRange!.to,
@@ -41,9 +41,7 @@ export class ShowSelectionPlugin {
41
41
 
42
42
  this.enabled = enabled;
43
43
 
44
- this.editor.prosemirrorView?.dispatch(
45
- this.editor.prosemirrorView?.state.tr.setMeta(PLUGIN_KEY, {})
46
- );
44
+ this.editor.transact((tr) => tr.setMeta(PLUGIN_KEY, {}));
47
45
  }
48
46
 
49
47
  public getEnabled() {
@@ -82,6 +82,8 @@ export class MultipleNodeSelection extends Selection {
82
82
  }
83
83
 
84
84
  toJSON(): any {
85
- return { type: "node", anchor: this.anchor, head: this.head };
85
+ return { type: "multiple-node", anchor: this.anchor, head: this.head };
86
86
  }
87
87
  }
88
+
89
+ Selection.jsonID("multiple-node", MultipleNodeSelection);
@@ -201,7 +201,7 @@ export function dragStart<
201
201
 
202
202
  const externalHTMLExporter = createExternalHTMLExporter(schema, editor);
203
203
 
204
- const blocks = fragmentToBlocks(selectedSlice.content, editor.schema);
204
+ const blocks = fragmentToBlocks(selectedSlice.content);
205
205
  const externalHTML = externalHTMLExporter.exportBlocks(blocks, {});
206
206
 
207
207
  const plainText = cleanHTMLToMarkdown(externalHTML);
@@ -115,9 +115,7 @@ class SuggestionMenuView<
115
115
  }
116
116
 
117
117
  closeMenu = () => {
118
- this.editor.dispatch(
119
- this.editor._tiptapEditor.state.tr.setMeta(suggestionMenuPluginKey, null)
120
- );
118
+ this.editor.transact((tr) => tr.setMeta(suggestionMenuPluginKey, null));
121
119
  };
122
120
 
123
121
  clearQuery = () => {
@@ -128,13 +126,14 @@ class SuggestionMenuView<
128
126
  this.editor._tiptapEditor
129
127
  .chain()
130
128
  .focus()
129
+ // TODO need to make an API for this
131
130
  .deleteRange({
132
131
  from:
133
132
  this.pluginState.queryStartPos() -
134
133
  (this.pluginState.deleteTriggerCharacter
135
134
  ? this.pluginState.triggerCharacter!.length
136
135
  : 0),
137
- to: this.editor._tiptapEditor.state.selection.from,
136
+ to: this.editor.transact((tr) => tr.selection.from),
138
137
  })
139
138
  .run();
140
139
  };
@@ -196,7 +195,12 @@ export class SuggestionMenuProseMirrorPlugin<
196
195
  },
197
196
 
198
197
  // Apply changes to the plugin state from an editor transaction.
199
- apply(transaction, prev, _oldState, newState): SuggestionPluginState {
198
+ apply: (
199
+ transaction,
200
+ prev,
201
+ _oldState,
202
+ newState
203
+ ): SuggestionPluginState => {
200
204
  // TODO: More clearly define which transactions should be ignored.
201
205
  if (transaction.getMeta("orderedListIndexing") !== undefined) {
202
206
  return prev;
@@ -215,12 +219,14 @@ export class SuggestionMenuProseMirrorPlugin<
215
219
  ignoreQueryLength?: boolean;
216
220
  } | null = transaction.getMeta(suggestionMenuPluginKey);
217
221
 
218
- // Only opens a menu of no menu is already open
219
222
  if (
220
223
  typeof suggestionPluginTransactionMeta === "object" &&
221
- suggestionPluginTransactionMeta !== null &&
222
- prev === undefined
224
+ suggestionPluginTransactionMeta !== null
223
225
  ) {
226
+ if (prev) {
227
+ // Close the previous menu if it exists
228
+ this.closeMenu();
229
+ }
224
230
  const trackedPosition = trackPosition(
225
231
  editor,
226
232
  newState.selection.from -
@@ -262,7 +268,11 @@ export class SuggestionMenuProseMirrorPlugin<
262
268
  transaction.getMeta("pointer") ||
263
269
  // Moving the caret before the character which triggered the menu should hide it.
264
270
  (prev.triggerCharacter !== undefined &&
265
- newState.selection.from < prev.queryStartPos())
271
+ newState.selection.from < prev.queryStartPos()) ||
272
+ // Moving the caret to a new block should hide the menu.
273
+ !newState.selection.$from.sameParent(
274
+ newState.doc.resolve(prev.queryStartPos())
275
+ )
266
276
  ) {
267
277
  return undefined;
268
278
  }
@@ -281,21 +291,14 @@ export class SuggestionMenuProseMirrorPlugin<
281
291
 
282
292
  props: {
283
293
  handleTextInput(view, _from, _to, text) {
284
- const suggestionPluginState: SuggestionPluginState = (
285
- this as Plugin
286
- ).getState(view.state);
287
-
288
- if (
289
- triggerCharacters.includes(text) &&
290
- suggestionPluginState === undefined
291
- ) {
294
+ if (triggerCharacters.includes(text)) {
295
+ view.dispatch(view.state.tr.insertText(text));
292
296
  view.dispatch(
293
297
  view.state.tr
294
- .insertText(text)
295
- .scrollIntoView()
296
298
  .setMeta(suggestionMenuPluginKey, {
297
299
  triggerCharacter: text,
298
300
  })
301
+ .scrollIntoView()
299
302
  );
300
303
 
301
304
  return true;
@@ -234,8 +234,8 @@ export function getDefaultSlashMenuItems<
234
234
  });
235
235
 
236
236
  // Immediately open the file toolbar
237
- editor.dispatch(
238
- editor._tiptapEditor.state.tr.setMeta(editor.filePanel!.plugin, {
237
+ editor.transact((tr) =>
238
+ tr.setMeta(editor.filePanel!.plugin, {
239
239
  block: insertedBlock,
240
240
  })
241
241
  );
@@ -253,8 +253,8 @@ export function getDefaultSlashMenuItems<
253
253
  });
254
254
 
255
255
  // Immediately open the file toolbar
256
- editor.dispatch(
257
- editor._tiptapEditor.state.tr.setMeta(editor.filePanel!.plugin, {
256
+ editor.transact((tr) =>
257
+ tr.setMeta(editor.filePanel!.plugin, {
258
258
  block: insertedBlock,
259
259
  })
260
260
  );
@@ -272,8 +272,8 @@ export function getDefaultSlashMenuItems<
272
272
  });
273
273
 
274
274
  // Immediately open the file toolbar
275
- editor.dispatch(
276
- editor._tiptapEditor.state.tr.setMeta(editor.filePanel!.plugin, {
275
+ editor.transact((tr) =>
276
+ tr.setMeta(editor.filePanel!.plugin, {
277
277
  block: insertedBlock,
278
278
  })
279
279
  );
@@ -291,8 +291,8 @@ export function getDefaultSlashMenuItems<
291
291
  });
292
292
 
293
293
  // Immediately open the file toolbar
294
- editor.dispatch(
295
- editor._tiptapEditor.state.tr.setMeta(editor.filePanel!.plugin, {
294
+ editor.transact((tr) =>
295
+ tr.setMeta(editor.filePanel!.plugin, {
296
296
  block: insertedBlock,
297
297
  })
298
298
  );