@blocknote/core 0.28.0 → 0.29.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 (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,18 +1,22 @@
1
- import { Fragment, NodeType, Node as PMNode, Slice } from "prosemirror-model";
2
- import { EditorState } from "prosemirror-state";
1
+ import {
2
+ Fragment,
3
+ type NodeType,
4
+ type Node as PMNode,
5
+ Slice,
6
+ } from "prosemirror-model";
7
+ import type { Transaction } from "prosemirror-state";
3
8
 
4
9
  import { ReplaceStep } from "prosemirror-transform";
5
- import { Block, PartialBlock } from "../../../../blocks/defaultBlocks.js";
6
- import { BlockNoteEditor } from "../../../../editor/BlockNoteEditor.js";
7
- import {
10
+ import type { Block, PartialBlock } from "../../../../blocks/defaultBlocks.js";
11
+ import type {
8
12
  BlockIdentifier,
9
13
  BlockSchema,
10
14
  } from "../../../../schema/blocks/types.js";
11
- import { InlineContentSchema } from "../../../../schema/inlineContent/types.js";
12
- import { StyleSchema } from "../../../../schema/styles/types.js";
15
+ import type { InlineContentSchema } from "../../../../schema/inlineContent/types.js";
16
+ import type { StyleSchema } from "../../../../schema/styles/types.js";
13
17
  import { UnreachableCaseError } from "../../../../util/typescript.js";
14
18
  import {
15
- BlockInfo,
19
+ type BlockInfo,
16
20
  getBlockInfoFromResolvedPos,
17
21
  } from "../../../getBlockInfoFromPos.js";
18
22
  import {
@@ -22,98 +26,90 @@ import {
22
26
  } from "../../../nodeConversions/blockToNode.js";
23
27
  import { nodeToBlock } from "../../../nodeConversions/nodeToBlock.js";
24
28
  import { getNodeById } from "../../../nodeUtil.js";
29
+ import { getPmSchema } from "../../../pmUtil.js";
25
30
 
26
- export const updateBlockCommand =
27
- <
28
- BSchema extends BlockSchema,
29
- I extends InlineContentSchema,
30
- S extends StyleSchema
31
- >(
32
- editor: BlockNoteEditor<BSchema, I, S>,
33
- posBeforeBlock: number,
34
- block: PartialBlock<BSchema, I, S>
35
- ) =>
36
- ({
37
- state,
31
+ export const updateBlockCommand = <
32
+ BSchema extends BlockSchema,
33
+ I extends InlineContentSchema,
34
+ S extends StyleSchema
35
+ >(
36
+ posBeforeBlock: number,
37
+ block: PartialBlock<BSchema, I, S>
38
+ ) => {
39
+ return ({
40
+ tr,
38
41
  dispatch,
39
42
  }: {
40
- state: EditorState;
41
- dispatch: ((args?: any) => any) | undefined;
42
- }) => {
43
- const blockInfo = getBlockInfoFromResolvedPos(
44
- state.doc.resolve(posBeforeBlock)
45
- );
46
-
43
+ tr: Transaction;
44
+ dispatch?: () => void;
45
+ }): boolean => {
47
46
  if (dispatch) {
48
- // Adds blockGroup node with child blocks if necessary.
47
+ updateBlockTr(tr, posBeforeBlock, block);
48
+ }
49
+ return true;
50
+ };
51
+ };
49
52
 
50
- const oldNodeType = state.schema.nodes[blockInfo.blockNoteType];
51
- const newNodeType =
52
- state.schema.nodes[block.type || blockInfo.blockNoteType];
53
- const newBnBlockNodeType = newNodeType.isInGroup("bnBlock")
54
- ? newNodeType
55
- : state.schema.nodes["blockContainer"];
53
+ const updateBlockTr = <
54
+ BSchema extends BlockSchema,
55
+ I extends InlineContentSchema,
56
+ S extends StyleSchema
57
+ >(
58
+ tr: Transaction,
59
+ posBeforeBlock: number,
60
+ block: PartialBlock<BSchema, I, S>
61
+ ) => {
62
+ const blockInfo = getBlockInfoFromResolvedPos(tr.doc.resolve(posBeforeBlock));
56
63
 
57
- if (blockInfo.isBlockContainer && newNodeType.isInGroup("blockContent")) {
58
- updateChildren(block, state, editor, blockInfo);
59
- // The code below determines the new content of the block.
60
- // or "keep" to keep as-is
61
- updateBlockContentNode(
62
- block,
63
- state,
64
- editor,
65
- oldNodeType,
66
- newNodeType,
67
- blockInfo
68
- );
69
- } else if (
70
- !blockInfo.isBlockContainer &&
71
- newNodeType.isInGroup("bnBlock")
72
- ) {
73
- updateChildren(block, state, editor, blockInfo);
74
- // old node was a bnBlock type (like column or columnList) and new block as well
75
- // No op, we just update the bnBlock below (at end of function) and have already updated the children
76
- } else {
77
- // switching from blockContainer to non-blockContainer or v.v.
78
- // currently breaking for column slash menu items converting empty block
79
- // to column.
64
+ const pmSchema = getPmSchema(tr);
65
+ // Adds blockGroup node with child blocks if necessary.
80
66
 
81
- // currently, we calculate the new node and replace the entire node with the desired new node.
82
- // for this, we do a nodeToBlock on the existing block to get the children.
83
- // it would be cleaner to use a ReplaceAroundStep, but this is a bit simpler and it's quite an edge case
84
- const existingBlock = nodeToBlock(
85
- blockInfo.bnBlock.node,
86
- editor.schema.blockSchema,
87
- editor.schema.inlineContentSchema,
88
- editor.schema.styleSchema,
89
- editor.blockCache
90
- );
91
- state.tr.replaceWith(
92
- blockInfo.bnBlock.beforePos,
93
- blockInfo.bnBlock.afterPos,
94
- blockToNode(
95
- {
96
- children: existingBlock.children, // if no children are passed in, use existing children
97
- ...block,
98
- },
99
- state.schema,
100
- editor.schema.styleSchema
101
- )
102
- );
67
+ const oldNodeType = pmSchema.nodes[blockInfo.blockNoteType];
68
+ const newNodeType = pmSchema.nodes[block.type || blockInfo.blockNoteType];
69
+ const newBnBlockNodeType = newNodeType.isInGroup("bnBlock")
70
+ ? newNodeType
71
+ : pmSchema.nodes["blockContainer"];
103
72
 
104
- return true;
105
- }
73
+ if (blockInfo.isBlockContainer && newNodeType.isInGroup("blockContent")) {
74
+ updateChildren(block, tr, blockInfo);
75
+ // The code below determines the new content of the block.
76
+ // or "keep" to keep as-is
77
+ updateBlockContentNode(block, tr, oldNodeType, newNodeType, blockInfo);
78
+ } else if (!blockInfo.isBlockContainer && newNodeType.isInGroup("bnBlock")) {
79
+ updateChildren(block, tr, blockInfo);
80
+ // old node was a bnBlock type (like column or columnList) and new block as well
81
+ // No op, we just update the bnBlock below (at end of function) and have already updated the children
82
+ } else {
83
+ // switching from blockContainer to non-blockContainer or v.v.
84
+ // currently breaking for column slash menu items converting empty block
85
+ // to column.
106
86
 
107
- // Adds all provided props as attributes to the parent blockContainer node too, and also preserves existing
108
- // attributes.
109
- state.tr.setNodeMarkup(blockInfo.bnBlock.beforePos, newBnBlockNodeType, {
110
- ...blockInfo.bnBlock.node.attrs,
111
- ...block.props,
112
- });
113
- }
87
+ // currently, we calculate the new node and replace the entire node with the desired new node.
88
+ // for this, we do a nodeToBlock on the existing block to get the children.
89
+ // it would be cleaner to use a ReplaceAroundStep, but this is a bit simpler and it's quite an edge case
90
+ const existingBlock = nodeToBlock(blockInfo.bnBlock.node, pmSchema);
91
+ tr.replaceWith(
92
+ blockInfo.bnBlock.beforePos,
93
+ blockInfo.bnBlock.afterPos,
94
+ blockToNode(
95
+ {
96
+ children: existingBlock.children, // if no children are passed in, use existing children
97
+ ...block,
98
+ },
99
+ pmSchema
100
+ )
101
+ );
114
102
 
115
- return true;
116
- };
103
+ return;
104
+ }
105
+
106
+ // Adds all provided props as attributes to the parent blockContainer node too, and also preserves existing
107
+ // attributes.
108
+ tr.setNodeMarkup(blockInfo.bnBlock.beforePos, newBnBlockNodeType, {
109
+ ...blockInfo.bnBlock.node.attrs,
110
+ ...block.props,
111
+ });
112
+ };
117
113
 
118
114
  function updateBlockContentNode<
119
115
  BSchema extends BlockSchema,
@@ -121,8 +117,7 @@ function updateBlockContentNode<
121
117
  S extends StyleSchema
122
118
  >(
123
119
  block: PartialBlock<BSchema, I, S>,
124
- state: EditorState,
125
- editor: BlockNoteEditor<BSchema, I, S>,
120
+ tr: Transaction,
126
121
  oldNodeType: NodeType,
127
122
  newNodeType: NodeType,
128
123
  blockInfo: {
@@ -132,6 +127,7 @@ function updateBlockContentNode<
132
127
  blockContent: { node: PMNode; beforePos: number; afterPos: number };
133
128
  }
134
129
  ) {
130
+ const pmSchema = getPmSchema(tr);
135
131
  let content: PMNode[] | "keep" = "keep";
136
132
 
137
133
  // Has there been any custom content provided?
@@ -140,25 +136,15 @@ function updateBlockContentNode<
140
136
  // Adds a single text node with no marks to the content.
141
137
  content = inlineContentToNodes(
142
138
  [block.content],
143
- state.schema,
144
- editor.schema.styleSchema,
139
+ pmSchema,
145
140
  newNodeType.name
146
141
  );
147
142
  } else if (Array.isArray(block.content)) {
148
143
  // Adds a text node with the provided styles converted into marks to the content,
149
144
  // for each InlineContent object.
150
- content = inlineContentToNodes(
151
- block.content,
152
- state.schema,
153
- editor.schema.styleSchema,
154
- newNodeType.name
155
- );
145
+ content = inlineContentToNodes(block.content, pmSchema, newNodeType.name);
156
146
  } else if (block.content.type === "tableContent") {
157
- content = tableContentToNodes(
158
- block.content,
159
- state.schema,
160
- editor.schema.styleSchema
161
- );
147
+ content = tableContentToNodes(block.content, pmSchema);
162
148
  } else {
163
149
  throw new UnreachableCaseError(block.content.type);
164
150
  }
@@ -186,9 +172,9 @@ function updateBlockContentNode<
186
172
  // content is being replaced or not.
187
173
  if (content === "keep") {
188
174
  // use setNodeMarkup to only update the type and attributes
189
- state.tr.setNodeMarkup(
175
+ tr.setNodeMarkup(
190
176
  blockInfo.blockContent.beforePos,
191
- block.type === undefined ? undefined : state.schema.nodes[block.type],
177
+ block.type === undefined ? undefined : pmSchema.nodes[block.type],
192
178
  {
193
179
  ...blockInfo.blockContent.node.attrs,
194
180
  ...block.props,
@@ -198,7 +184,7 @@ function updateBlockContentNode<
198
184
  // use replaceWith to replace the content and the block itself
199
185
  // also reset the selection since replacing the block content
200
186
  // sets it to the next block.
201
- state.tr.replaceWith(
187
+ tr.replaceWith(
202
188
  blockInfo.blockContent.beforePos,
203
189
  blockInfo.blockContent.afterPos,
204
190
  newNodeType.createChecked(
@@ -216,15 +202,11 @@ function updateChildren<
216
202
  BSchema extends BlockSchema,
217
203
  I extends InlineContentSchema,
218
204
  S extends StyleSchema
219
- >(
220
- block: PartialBlock<BSchema, I, S>,
221
- state: EditorState,
222
- editor: BlockNoteEditor<BSchema, I, S>,
223
- blockInfo: BlockInfo
224
- ) {
205
+ >(block: PartialBlock<BSchema, I, S>, tr: Transaction, blockInfo: BlockInfo) {
206
+ const pmSchema = getPmSchema(tr);
225
207
  if (block.children !== undefined && block.children.length > 0) {
226
208
  const childNodes = block.children.map((child) => {
227
- return blockToNode(child, state.schema, editor.schema.styleSchema);
209
+ return blockToNode(child, pmSchema);
228
210
  });
229
211
 
230
212
  // Checks if a blockGroup node already exists.
@@ -232,7 +214,7 @@ function updateChildren<
232
214
  // Replaces all child nodes in the existing blockGroup with the ones created earlier.
233
215
 
234
216
  // use a replacestep to avoid the fitting algorithm
235
- state.tr.step(
217
+ tr.step(
236
218
  new ReplaceStep(
237
219
  blockInfo.childContainer.beforePos + 1,
238
220
  blockInfo.childContainer.afterPos - 1,
@@ -244,51 +226,36 @@ function updateChildren<
244
226
  throw new Error("impossible");
245
227
  }
246
228
  // Inserts a new blockGroup containing the child nodes created earlier.
247
- state.tr.insert(
229
+ tr.insert(
248
230
  blockInfo.blockContent.afterPos,
249
- state.schema.nodes["blockGroup"].createChecked({}, childNodes)
231
+ pmSchema.nodes["blockGroup"].createChecked({}, childNodes)
250
232
  );
251
233
  }
252
234
  }
253
235
  }
254
236
 
255
237
  export function updateBlock<
256
- BSchema extends BlockSchema,
257
- I extends InlineContentSchema,
258
- S extends StyleSchema
238
+ BSchema extends BlockSchema = any,
239
+ I extends InlineContentSchema = any,
240
+ S extends StyleSchema = any
259
241
  >(
260
- editor: BlockNoteEditor<BSchema, I, S>,
242
+ tr: Transaction,
261
243
  blockToUpdate: BlockIdentifier,
262
244
  update: PartialBlock<BSchema, I, S>
263
245
  ): Block<BSchema, I, S> {
264
- const ttEditor = editor._tiptapEditor;
265
-
266
246
  const id =
267
247
  typeof blockToUpdate === "string" ? blockToUpdate : blockToUpdate.id;
268
-
269
- const posInfo = getNodeById(id, ttEditor.state.doc);
248
+ const posInfo = getNodeById(id, tr.doc);
270
249
  if (!posInfo) {
271
250
  throw new Error(`Block with ID ${id} not found`);
272
251
  }
273
252
 
274
- ttEditor.commands.command(({ state, dispatch }) => {
275
- updateBlockCommand(
276
- editor,
277
- posInfo.posBeforeNode,
278
- update
279
- )({ state, dispatch });
280
- return true;
281
- });
253
+ updateBlockTr(tr, posInfo.posBeforeNode, update);
282
254
 
283
- const blockContainerNode = ttEditor.state.doc
255
+ const blockContainerNode = tr.doc
284
256
  .resolve(posInfo.posBeforeNode + 1) // TODO: clean?
285
257
  .node();
286
258
 
287
- return nodeToBlock(
288
- blockContainerNode,
289
- editor.schema.blockSchema,
290
- editor.schema.inlineContentSchema,
291
- editor.schema.styleSchema,
292
- editor.blockCache
293
- );
259
+ const pmSchema = getPmSchema(tr);
260
+ return nodeToBlock(blockContainerNode, pmSchema);
294
261
  }
@@ -1,6 +1,6 @@
1
- import { Block } from "../../../blocks/defaultBlocks.js";
2
- import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js";
3
- import {
1
+ import type { Node } from "prosemirror-model";
2
+ import type { Block } from "../../../blocks/defaultBlocks.js";
3
+ import type {
4
4
  BlockIdentifier,
5
5
  BlockSchema,
6
6
  InlineContentSchema,
@@ -8,30 +8,26 @@ import {
8
8
  } from "../../../schema/index.js";
9
9
  import { nodeToBlock } from "../../nodeConversions/nodeToBlock.js";
10
10
  import { getNodeById } from "../../nodeUtil.js";
11
+ import { getPmSchema } from "../../pmUtil.js";
11
12
 
12
13
  export function getBlock<
13
14
  BSchema extends BlockSchema,
14
15
  I extends InlineContentSchema,
15
16
  S extends StyleSchema
16
17
  >(
17
- editor: BlockNoteEditor<BSchema, I, S>,
18
+ doc: Node,
18
19
  blockIdentifier: BlockIdentifier
19
20
  ): Block<BSchema, I, S> | undefined {
20
21
  const id =
21
22
  typeof blockIdentifier === "string" ? blockIdentifier : blockIdentifier.id;
23
+ const pmSchema = getPmSchema(doc);
22
24
 
23
- const posInfo = getNodeById(id, editor._tiptapEditor.state.doc);
25
+ const posInfo = getNodeById(id, doc);
24
26
  if (!posInfo) {
25
27
  return undefined;
26
28
  }
27
29
 
28
- return nodeToBlock(
29
- posInfo.node,
30
- editor.schema.blockSchema,
31
- editor.schema.inlineContentSchema,
32
- editor.schema.styleSchema,
33
- editor.blockCache
34
- );
30
+ return nodeToBlock(posInfo.node, pmSchema);
35
31
  }
36
32
 
37
33
  export function getPrevBlock<
@@ -39,32 +35,25 @@ export function getPrevBlock<
39
35
  I extends InlineContentSchema,
40
36
  S extends StyleSchema
41
37
  >(
42
- editor: BlockNoteEditor<BSchema, I, S>,
38
+ doc: Node,
43
39
  blockIdentifier: BlockIdentifier
44
40
  ): Block<BSchema, I, S> | undefined {
45
41
  const id =
46
42
  typeof blockIdentifier === "string" ? blockIdentifier : blockIdentifier.id;
47
43
 
48
- const posInfo = getNodeById(id, editor._tiptapEditor.state.doc);
44
+ const posInfo = getNodeById(id, doc);
45
+ const pmSchema = getPmSchema(doc);
49
46
  if (!posInfo) {
50
47
  return undefined;
51
48
  }
52
49
 
53
- const $posBeforeNode = editor._tiptapEditor.state.doc.resolve(
54
- posInfo.posBeforeNode
55
- );
50
+ const $posBeforeNode = doc.resolve(posInfo.posBeforeNode);
56
51
  const nodeToConvert = $posBeforeNode.nodeBefore;
57
52
  if (!nodeToConvert) {
58
53
  return undefined;
59
54
  }
60
55
 
61
- return nodeToBlock(
62
- nodeToConvert,
63
- editor.schema.blockSchema,
64
- editor.schema.inlineContentSchema,
65
- editor.schema.styleSchema,
66
- editor.blockCache
67
- );
56
+ return nodeToBlock(nodeToConvert, pmSchema);
68
57
  }
69
58
 
70
59
  export function getNextBlock<
@@ -72,18 +61,18 @@ export function getNextBlock<
72
61
  I extends InlineContentSchema,
73
62
  S extends StyleSchema
74
63
  >(
75
- editor: BlockNoteEditor<BSchema, I, S>,
64
+ doc: Node,
76
65
  blockIdentifier: BlockIdentifier
77
66
  ): Block<BSchema, I, S> | undefined {
78
67
  const id =
79
68
  typeof blockIdentifier === "string" ? blockIdentifier : blockIdentifier.id;
80
-
81
- const posInfo = getNodeById(id, editor._tiptapEditor.state.doc);
69
+ const posInfo = getNodeById(id, doc);
70
+ const pmSchema = getPmSchema(doc);
82
71
  if (!posInfo) {
83
72
  return undefined;
84
73
  }
85
74
 
86
- const $posAfterNode = editor._tiptapEditor.state.doc.resolve(
75
+ const $posAfterNode = doc.resolve(
87
76
  posInfo.posBeforeNode + posInfo.node.nodeSize
88
77
  );
89
78
  const nodeToConvert = $posAfterNode.nodeAfter;
@@ -91,13 +80,7 @@ export function getNextBlock<
91
80
  return undefined;
92
81
  }
93
82
 
94
- return nodeToBlock(
95
- nodeToConvert,
96
- editor.schema.blockSchema,
97
- editor.schema.inlineContentSchema,
98
- editor.schema.styleSchema,
99
- editor.blockCache
100
- );
83
+ return nodeToBlock(nodeToConvert, pmSchema);
101
84
  }
102
85
 
103
86
  export function getParentBlock<
@@ -105,20 +88,18 @@ export function getParentBlock<
105
88
  I extends InlineContentSchema,
106
89
  S extends StyleSchema
107
90
  >(
108
- editor: BlockNoteEditor<BSchema, I, S>,
91
+ doc: Node,
109
92
  blockIdentifier: BlockIdentifier
110
93
  ): Block<BSchema, I, S> | undefined {
111
94
  const id =
112
95
  typeof blockIdentifier === "string" ? blockIdentifier : blockIdentifier.id;
113
-
114
- const posInfo = getNodeById(id, editor._tiptapEditor.state.doc);
96
+ const pmSchema = getPmSchema(doc);
97
+ const posInfo = getNodeById(id, doc);
115
98
  if (!posInfo) {
116
99
  return undefined;
117
100
  }
118
101
 
119
- const $posBeforeNode = editor._tiptapEditor.state.doc.resolve(
120
- posInfo.posBeforeNode
121
- );
102
+ const $posBeforeNode = doc.resolve(posInfo.posBeforeNode);
122
103
  const parentNode = $posBeforeNode.node();
123
104
  const grandparentNode = $posBeforeNode.node(-1);
124
105
  const nodeToConvert =
@@ -131,11 +112,5 @@ export function getParentBlock<
131
112
  return undefined;
132
113
  }
133
114
 
134
- return nodeToBlock(
135
- nodeToConvert,
136
- editor.schema.blockSchema,
137
- editor.schema.inlineContentSchema,
138
- editor.schema.styleSchema,
139
- editor.blockCache
140
- );
115
+ return nodeToBlock(nodeToConvert, pmSchema);
141
116
  }
@@ -1,28 +1,17 @@
1
1
  import { selectionToInsertionEnd } from "@tiptap/core";
2
2
  import { Node } from "prosemirror-model";
3
3
 
4
- import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
5
- import {
6
- BlockSchema,
7
- InlineContentSchema,
8
- StyleSchema,
9
- } from "../../schema/index.js";
4
+ import type { Transaction } from "prosemirror-state";
10
5
 
11
6
  // similar to tiptap insertContentAt
12
- export function insertContentAt<
13
- BSchema extends BlockSchema,
14
- I extends InlineContentSchema,
15
- S extends StyleSchema
16
- >(
17
- position: any,
7
+ export function insertContentAt(
8
+ tr: Transaction,
9
+ position: number | { from: number; to: number },
18
10
  nodes: Node[],
19
- editor: BlockNoteEditor<BSchema, I, S>,
20
11
  options: {
21
12
  updateSelection: boolean;
22
13
  } = { updateSelection: true }
23
14
  ) {
24
- const tr = editor._tiptapEditor.state.tr;
25
-
26
15
  // don’t dispatch an empty fragment because this can lead to strange errors
27
16
  // if (content.toString() === "<>") {
28
17
  // return true;
@@ -90,7 +79,5 @@ export function insertContentAt<
90
79
  selectionToInsertionEnd(tr, tr.steps.length - 1, -1);
91
80
  }
92
81
 
93
- editor.dispatch(tr);
94
-
95
82
  return true;
96
83
  }
@@ -7,50 +7,66 @@ const getEditor = setupTestEnv();
7
7
 
8
8
  describe("Test getSelection & setSelection", () => {
9
9
  it("Basic", () => {
10
- setSelection(getEditor(), "paragraph-0", "paragraph-1");
10
+ getEditor().transact((tr) => {
11
+ setSelection(tr, "paragraph-0", "paragraph-1");
12
+ });
11
13
 
12
- expect(getSelection(getEditor())).toMatchSnapshot();
14
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
13
15
  });
14
16
 
15
17
  it("Starts in block with children", () => {
16
- setSelection(getEditor(), "paragraph-with-children", "paragraph-2");
18
+ getEditor().transact((tr) => {
19
+ setSelection(tr, "paragraph-with-children", "paragraph-2");
20
+ });
17
21
 
18
- expect(getSelection(getEditor())).toMatchSnapshot();
22
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
19
23
  });
20
24
 
21
25
  it("Starts in nested block", () => {
22
- setSelection(getEditor(), "nested-paragraph-0", "paragraph-2");
26
+ getEditor().transact((tr) => {
27
+ setSelection(tr, "nested-paragraph-0", "paragraph-2");
28
+ });
23
29
 
24
- expect(getSelection(getEditor())).toMatchSnapshot();
30
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
25
31
  });
26
32
 
27
33
  it("Ends in block with children", () => {
28
- setSelection(getEditor(), "paragraph-1", "paragraph-with-children");
34
+ getEditor().transact((tr) => {
35
+ setSelection(tr, "paragraph-1", "paragraph-with-children");
36
+ });
29
37
 
30
- expect(getSelection(getEditor())).toMatchSnapshot();
38
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
31
39
  });
32
40
 
33
41
  it("Ends in nested block", () => {
34
- setSelection(getEditor(), "paragraph-1", "nested-paragraph-0");
42
+ getEditor().transact((tr) => {
43
+ setSelection(tr, "paragraph-1", "nested-paragraph-0");
44
+ });
35
45
 
36
- expect(getSelection(getEditor())).toMatchSnapshot();
46
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
37
47
  });
38
48
 
39
49
  it("Contains block with children", () => {
40
- setSelection(getEditor(), "paragraph-1", "paragraph-2");
50
+ getEditor().transact((tr) => {
51
+ setSelection(tr, "paragraph-1", "paragraph-2");
52
+ });
41
53
 
42
- expect(getSelection(getEditor())).toMatchSnapshot();
54
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
43
55
  });
44
56
 
45
57
  it("Starts in table", () => {
46
- setSelection(getEditor(), "table-0", "paragraph-7");
58
+ getEditor().transact((tr) => {
59
+ setSelection(tr, "table-0", "paragraph-7");
60
+ });
47
61
 
48
- expect(getSelection(getEditor())).toMatchSnapshot();
62
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
49
63
  });
50
64
 
51
65
  it("Ends in table", () => {
52
- setSelection(getEditor(), "paragraph-6", "table-0");
66
+ getEditor().transact((tr) => {
67
+ setSelection(tr, "paragraph-6", "table-0");
68
+ });
53
69
 
54
- expect(getSelection(getEditor())).toMatchSnapshot();
70
+ expect(getEditor().transact((tr) => getSelection(tr))).toMatchSnapshot();
55
71
  });
56
72
  });