@blocknote/core 0.15.11 → 0.17.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 (292) hide show
  1. package/dist/blocknote.js +3349 -2773
  2. package/dist/blocknote.js.map +1 -1
  3. package/dist/blocknote.umd.cjs +6 -6
  4. package/dist/blocknote.umd.cjs.map +1 -1
  5. package/dist/webpack-stats.json +1 -1
  6. package/package.json +5 -2
  7. package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +3087 -0
  8. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.ts +132 -0
  9. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +71 -0
  10. package/src/api/blockManipulation/commands/mergeBlocks/__snapshots__/mergeBlocks.test.ts.snap +2276 -0
  11. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +131 -0
  12. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +103 -0
  13. package/src/api/blockManipulation/commands/moveBlock/__snapshots__/moveBlock.test.ts.snap +3767 -0
  14. package/src/api/blockManipulation/commands/moveBlock/moveBlock.test.ts +192 -0
  15. package/src/api/blockManipulation/commands/moveBlock/moveBlock.ts +178 -0
  16. package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +1136 -0
  17. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.ts +34 -0
  18. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +100 -0
  19. package/src/api/blockManipulation/commands/replaceBlocks/__snapshots__/replaceBlocks.test.ts.snap +4931 -0
  20. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.ts +222 -0
  21. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +70 -0
  22. package/src/api/blockManipulation/commands/splitBlock/__snapshots__/splitBlock.test.ts.snap +2924 -0
  23. package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +136 -0
  24. package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +48 -0
  25. package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +8376 -0
  26. package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +300 -0
  27. package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +199 -0
  28. package/src/api/blockManipulation/insertContentAt.ts +96 -0
  29. package/src/api/blockManipulation/selections/textCursorPosition/__snapshots__/textCursorPosition.test.ts.snap +316 -0
  30. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.ts +53 -0
  31. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +130 -0
  32. package/src/api/blockManipulation/setupTestEnv.ts +179 -0
  33. package/src/api/clipboard/__snapshots__/childToParent.html +1 -0
  34. package/src/api/clipboard/__snapshots__/childrenToNextParent.html +1 -0
  35. package/src/api/clipboard/__snapshots__/childrenToNextParentsChildren.html +1 -0
  36. package/src/api/clipboard/__snapshots__/image.html +1 -0
  37. package/src/api/clipboard/__snapshots__/multipleStyledText.html +1 -0
  38. package/src/api/clipboard/__snapshots__/nestedImage.html +1 -0
  39. package/src/api/clipboard/__snapshots__/partialChildToParent.html +1 -0
  40. package/src/api/clipboard/__snapshots__/styledText.html +1 -0
  41. package/src/api/clipboard/__snapshots__/tableAllCells.html +1 -0
  42. package/src/api/clipboard/__snapshots__/tableCell.html +1 -0
  43. package/src/api/clipboard/__snapshots__/tableCellText.html +1 -0
  44. package/src/api/clipboard/__snapshots__/tableRow.html +1 -0
  45. package/src/api/clipboard/__snapshots__/unstyledText.html +1 -0
  46. package/src/api/clipboard/clipboard.test.ts +283 -0
  47. package/src/api/{parsers → clipboard/fromClipboard}/fileDropExtension.ts +8 -4
  48. package/src/api/{parsers → clipboard/fromClipboard}/handleFileInsertion.ts +12 -7
  49. package/src/api/{parsers → clipboard/fromClipboard}/pasteExtension.ts +19 -8
  50. package/src/api/clipboard/toClipboard/copyExtension.ts +243 -0
  51. package/src/api/exporters/html/__snapshots__/complex/misc/external.html +1 -1
  52. package/src/api/exporters/html/__snapshots__/lists/basic/external.html +1 -1
  53. package/src/api/exporters/html/__snapshots__/lists/nested/external.html +1 -1
  54. package/src/api/exporters/html/externalHTMLExporter.ts +42 -87
  55. package/src/api/exporters/html/htmlConversion.test.ts +19 -156
  56. package/src/api/exporters/html/internalHTMLSerializer.ts +21 -69
  57. package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +263 -0
  58. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +158 -0
  59. package/src/api/exporters/markdown/markdownExporter.test.ts +10 -10
  60. package/src/api/exporters/markdown/markdownExporter.ts +11 -7
  61. package/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.ts +2 -2
  62. package/src/api/getBlockInfoFromPos.ts +172 -90
  63. package/src/api/nodeConversions/blockToNode.ts +257 -0
  64. package/src/api/nodeConversions/fragmentToBlocks.ts +60 -0
  65. package/src/api/nodeConversions/nodeConversions.test.ts +9 -8
  66. package/src/api/nodeConversions/{nodeConversions.ts → nodeToBlock.ts} +20 -262
  67. package/src/api/parsers/html/parseHTML.test.ts +5 -8
  68. package/src/api/parsers/html/parseHTML.ts +8 -4
  69. package/src/api/parsers/html/util/nestedLists.test.ts +2 -2
  70. package/src/api/parsers/markdown/__snapshots__/pasted/complex.json +319 -0
  71. package/src/api/parsers/markdown/__snapshots__/pasted/issue-226-1.json +81 -0
  72. package/src/api/parsers/{html/__snapshots__/paste/parse-deep-nested-content.json → markdown/__snapshots__/pasted/issue-226-2.json} +35 -110
  73. package/src/api/parsers/markdown/__snapshots__/pasted/nested.json +81 -0
  74. package/src/api/parsers/markdown/__snapshots__/pasted/non-nested.json +81 -0
  75. package/src/api/parsers/markdown/__snapshots__/pasted/styled.json +61 -0
  76. package/src/api/parsers/markdown/parseMarkdown.test.ts +16 -1
  77. package/src/api/parsers/markdown/parseMarkdown.ts +8 -4
  78. package/src/api/testUtil/cases/customBlocks.ts +11 -11
  79. package/src/api/testUtil/cases/customInlineContent.ts +6 -6
  80. package/src/api/testUtil/cases/customStyles.ts +6 -6
  81. package/src/api/testUtil/cases/defaultSchema.ts +4 -4
  82. package/src/api/testUtil/index.ts +6 -6
  83. package/src/api/testUtil/partialBlockTestUtil.ts +5 -5
  84. package/src/api/testUtil/paste.ts +46 -0
  85. package/src/blocks/AudioBlockContent/AudioBlockContent.ts +5 -5
  86. package/src/blocks/FileBlockContent/FileBlockContent.ts +4 -4
  87. package/src/blocks/FileBlockContent/fileBlockHelpers.ts +2 -2
  88. package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +61 -39
  89. package/src/blocks/ImageBlockContent/ImageBlockContent.ts +5 -5
  90. package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +30 -18
  91. package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +67 -33
  92. package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +23 -19
  93. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +22 -24
  94. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +31 -19
  95. package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +16 -11
  96. package/src/blocks/TableBlockContent/TableBlockContent.ts +4 -5
  97. package/src/blocks/VideoBlockContent/VideoBlockContent.ts +5 -5
  98. package/src/blocks/defaultBlockHelpers.ts +4 -4
  99. package/src/blocks/defaultBlockTypeGuards.ts +5 -5
  100. package/src/blocks/defaultBlocks.ts +13 -13
  101. package/src/blocks/defaultProps.ts +1 -1
  102. package/src/editor/BlockNoteEditor.test.ts +14 -7
  103. package/src/editor/BlockNoteEditor.ts +82 -149
  104. package/src/editor/BlockNoteExtensions.ts +15 -11
  105. package/src/editor/BlockNoteSchema.ts +7 -7
  106. package/src/editor/BlockNoteTipTapEditor.ts +5 -3
  107. package/src/editor/cursorPositionTypes.ts +7 -2
  108. package/src/editor/selectionTypes.ts +6 -2
  109. package/src/editor/transformPasted.ts +34 -2
  110. package/src/extensions/BackgroundColor/BackgroundColorExtension.ts +1 -1
  111. package/src/extensions/BackgroundColor/BackgroundColorMark.ts +1 -1
  112. package/src/extensions/FilePanel/FilePanelPlugin.ts +4 -4
  113. package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +8 -4
  114. package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +333 -0
  115. package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +9 -4
  116. package/src/extensions/{NonEditableBlocks/NonEditableBlockPlugin.ts → NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts} +2 -2
  117. package/src/extensions/Placeholder/PlaceholderPlugin.ts +1 -1
  118. package/src/extensions/SideMenu/SideMenuPlugin.ts +72 -402
  119. package/src/extensions/SideMenu/dragging.ts +251 -0
  120. package/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts +1 -1
  121. package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +8 -4
  122. package/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts +8 -4
  123. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +19 -15
  124. package/src/extensions/TableHandles/TableHandlesPlugin.ts +11 -7
  125. package/src/extensions/TextColor/TextColorExtension.ts +1 -1
  126. package/src/extensions/TextColor/TextColorMark.ts +1 -1
  127. package/src/i18n/dictionary.ts +1 -1
  128. package/src/i18n/locales/ar.ts +1 -1
  129. package/src/i18n/locales/fr.ts +1 -1
  130. package/src/i18n/locales/hr.ts +308 -0
  131. package/src/i18n/locales/index.ts +15 -14
  132. package/src/i18n/locales/is.ts +1 -1
  133. package/src/i18n/locales/ja.ts +1 -1
  134. package/src/i18n/locales/ko.ts +1 -1
  135. package/src/i18n/locales/nl.ts +1 -1
  136. package/src/i18n/locales/pl.ts +1 -1
  137. package/src/i18n/locales/pt.ts +1 -1
  138. package/src/i18n/locales/ru.ts +1 -1
  139. package/src/i18n/locales/vi.ts +1 -1
  140. package/src/i18n/locales/zh.ts +1 -1
  141. package/src/index.ts +45 -44
  142. package/src/pm-nodes/BlockContainer.ts +3 -647
  143. package/src/pm-nodes/BlockGroup.ts +2 -2
  144. package/src/pm-nodes/index.ts +3 -3
  145. package/src/schema/blocks/createSpec.ts +24 -14
  146. package/src/schema/blocks/internal.ts +9 -9
  147. package/src/schema/blocks/types.ts +4 -4
  148. package/src/schema/index.ts +10 -10
  149. package/src/schema/inlineContent/createSpec.ts +9 -10
  150. package/src/schema/inlineContent/internal.ts +3 -3
  151. package/src/schema/inlineContent/types.ts +2 -2
  152. package/src/schema/styles/createSpec.ts +4 -3
  153. package/src/schema/styles/internal.ts +1 -1
  154. package/types/src/api/blockManipulation/commands/insertBlocks/insertBlocks.d.ts +4 -0
  155. package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.d.ts +7 -0
  156. package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.d.ts +1 -0
  157. package/types/src/api/blockManipulation/commands/moveBlock/moveBlock.d.ts +5 -0
  158. package/types/src/api/blockManipulation/commands/moveBlock/moveBlock.test.d.ts +1 -0
  159. package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.d.ts +7 -0
  160. package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.d.ts +1 -0
  161. package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.d.ts +7 -0
  162. package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.d.ts +1 -0
  163. package/types/src/api/blockManipulation/commands/splitBlock/splitBlock.d.ts +5 -0
  164. package/types/src/api/blockManipulation/commands/splitBlock/splitBlock.test.d.ts +1 -0
  165. package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.d.ts +11 -0
  166. package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.test.d.ts +1 -0
  167. package/types/src/api/blockManipulation/insertContentAt.d.ts +6 -0
  168. package/types/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.d.ts +5 -0
  169. package/types/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.d.ts +1 -0
  170. package/types/src/api/blockManipulation/setupTestEnv.d.ts +492 -0
  171. package/types/src/api/clipboard/clipboard.test.d.ts +1 -0
  172. package/types/src/api/clipboard/fromClipboard/fileDropExtension.d.ts +6 -0
  173. package/types/src/api/{parsers → clipboard/fromClipboard}/handleFileInsertion.d.ts +2 -2
  174. package/types/src/api/clipboard/fromClipboard/pasteExtension.d.ts +6 -0
  175. package/types/src/api/clipboard/toClipboard/copyExtension.d.ts +12 -0
  176. package/types/src/api/exporters/html/externalHTMLExporter.d.ts +7 -8
  177. package/types/src/api/exporters/html/internalHTMLSerializer.d.ts +6 -10
  178. package/types/src/api/exporters/html/util/serializeBlocksExternalHTML.d.ts +10 -0
  179. package/types/src/api/exporters/html/util/serializeBlocksInternalHTML.d.ts +11 -0
  180. package/types/src/api/exporters/markdown/markdownExporter.d.ts +3 -3
  181. package/types/src/api/getBlockInfoFromPos.d.ts +63 -20
  182. package/types/src/api/nodeConversions/blockToNode.d.ts +15 -0
  183. package/types/src/api/nodeConversions/fragmentToBlocks.d.ts +7 -0
  184. package/types/src/api/nodeConversions/nodeToBlock.d.ts +16 -0
  185. package/types/src/api/parsers/html/parseHTML.d.ts +2 -2
  186. package/types/src/api/parsers/markdown/parseMarkdown.d.ts +2 -2
  187. package/types/src/api/testUtil/cases/customBlocks.d.ts +39 -39
  188. package/types/src/api/testUtil/cases/customInlineContent.d.ts +35 -35
  189. package/types/src/api/testUtil/cases/customStyles.d.ts +35 -35
  190. package/types/src/api/testUtil/cases/defaultSchema.d.ts +2 -2
  191. package/types/src/api/testUtil/index.d.ts +6 -6
  192. package/types/src/api/testUtil/partialBlockTestUtil.d.ts +4 -4
  193. package/types/src/api/testUtil/paste.d.ts +2 -0
  194. package/types/src/blocks/AudioBlockContent/AudioBlockContent.d.ts +4 -4
  195. package/types/src/blocks/FileBlockContent/FileBlockContent.d.ts +4 -4
  196. package/types/src/blocks/FileBlockContent/fileBlockHelpers.d.ts +2 -2
  197. package/types/src/blocks/HeadingBlockContent/HeadingBlockContent.d.ts +2 -2
  198. package/types/src/blocks/ImageBlockContent/ImageBlockContent.d.ts +4 -4
  199. package/types/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.d.ts +2 -2
  200. package/types/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.d.ts +2 -2
  201. package/types/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.d.ts +2 -2
  202. package/types/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.d.ts +2 -2
  203. package/types/src/blocks/ParagraphBlockContent/ParagraphBlockContent.d.ts +2 -2
  204. package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +2 -2
  205. package/types/src/blocks/VideoBlockContent/VideoBlockContent.d.ts +4 -4
  206. package/types/src/blocks/defaultBlockHelpers.d.ts +3 -3
  207. package/types/src/blocks/defaultBlockTypeGuards.d.ts +4 -4
  208. package/types/src/blocks/defaultBlocks.d.ts +38 -38
  209. package/types/src/blocks/defaultProps.d.ts +1 -1
  210. package/types/src/editor/BlockNoteEditor.d.ts +28 -16
  211. package/types/src/editor/BlockNoteExtensions.d.ts +3 -3
  212. package/types/src/editor/BlockNoteSchema.d.ts +4 -4
  213. package/types/src/editor/BlockNoteTipTapEditor.d.ts +2 -2
  214. package/types/src/editor/cursorPositionTypes.d.ts +3 -2
  215. package/types/src/editor/selectionTypes.d.ts +2 -2
  216. package/types/src/editor/transformPasted.d.ts +8 -1
  217. package/types/src/extensions/BackgroundColor/BackgroundColorMark.d.ts +1 -1
  218. package/types/src/extensions/FilePanel/FilePanelPlugin.d.ts +4 -4
  219. package/types/src/extensions/FormattingToolbar/FormattingToolbarPlugin.d.ts +4 -4
  220. package/types/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.d.ts +5 -0
  221. package/types/src/extensions/LinkToolbar/LinkToolbarPlugin.d.ts +4 -4
  222. package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +2 -0
  223. package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +1 -1
  224. package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +12 -28
  225. package/types/src/extensions/SideMenu/dragging.d.ts +17 -0
  226. package/types/src/extensions/SuggestionMenu/DefaultSuggestionItem.d.ts +1 -1
  227. package/types/src/extensions/SuggestionMenu/SuggestionPlugin.d.ts +4 -4
  228. package/types/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.d.ts +3 -3
  229. package/types/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.d.ts +4 -4
  230. package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +4 -4
  231. package/types/src/extensions/TextColor/TextColorMark.d.ts +1 -1
  232. package/types/src/i18n/dictionary.d.ts +1 -1
  233. package/types/src/i18n/locales/ar.d.ts +1 -1
  234. package/types/src/i18n/locales/fr.d.ts +1 -1
  235. package/types/src/i18n/locales/hr.d.ts +239 -0
  236. package/types/src/i18n/locales/index.d.ts +15 -14
  237. package/types/src/i18n/locales/is.d.ts +1 -1
  238. package/types/src/i18n/locales/ja.d.ts +1 -1
  239. package/types/src/i18n/locales/ko.d.ts +1 -1
  240. package/types/src/i18n/locales/nl.d.ts +1 -1
  241. package/types/src/i18n/locales/pl.d.ts +1 -1
  242. package/types/src/i18n/locales/pt.d.ts +1 -1
  243. package/types/src/i18n/locales/ru.d.ts +1 -1
  244. package/types/src/i18n/locales/vi.d.ts +1 -1
  245. package/types/src/i18n/locales/zh.d.ts +1 -1
  246. package/types/src/index.d.ts +45 -44
  247. package/types/src/pm-nodes/BlockContainer.d.ts +2 -16
  248. package/types/src/pm-nodes/BlockGroup.d.ts +1 -1
  249. package/types/src/pm-nodes/index.d.ts +3 -3
  250. package/types/src/schema/blocks/createSpec.d.ts +5 -5
  251. package/types/src/schema/blocks/internal.d.ts +5 -5
  252. package/types/src/schema/blocks/types.d.ts +4 -4
  253. package/types/src/schema/index.d.ts +10 -10
  254. package/types/src/schema/inlineContent/createSpec.d.ts +3 -3
  255. package/types/src/schema/inlineContent/internal.d.ts +2 -2
  256. package/types/src/schema/inlineContent/types.d.ts +2 -2
  257. package/types/src/schema/styles/createSpec.d.ts +1 -1
  258. package/types/src/schema/styles/internal.d.ts +1 -1
  259. package/src/api/blockManipulation/__snapshots__/blockManipulation.test.ts.snap +0 -714
  260. package/src/api/blockManipulation/blockManipulation.test.ts +0 -292
  261. package/src/api/blockManipulation/blockManipulation.ts +0 -350
  262. package/src/api/exporters/copyExtension.ts +0 -164
  263. package/src/api/exporters/html/__snapshots_fragment_edge_cases__/selectionLeavesBlockChildren.html +0 -1
  264. package/src/api/exporters/html/__snapshots_fragment_edge_cases__/selectionSpansBlocksChildren.html +0 -1
  265. package/src/api/exporters/html/util/sharedHTMLConversion.ts +0 -130
  266. package/src/api/exporters/html/util/simplifyBlocksRehypePlugin.ts +0 -218
  267. package/src/api/getCurrentBlockContentType.ts +0 -14
  268. package/src/api/parsers/html/__snapshots__/paste/parse-google-docs-html.json +0 -476
  269. package/types/src/api/blockManipulation/blockManipulation.d.ts +0 -14
  270. package/types/src/api/exporters/copyExtension.d.ts +0 -6
  271. package/types/src/api/exporters/html/util/sharedHTMLConversion.d.ts +0 -9
  272. package/types/src/api/exporters/html/util/simplifyBlocksRehypePlugin.d.ts +0 -16
  273. package/types/src/api/getCurrentBlockContentType.d.ts +0 -2
  274. package/types/src/api/nodeConversions/nodeConversions.d.ts +0 -24
  275. package/types/src/api/parsers/fileDropExtension.d.ts +0 -6
  276. package/types/src/api/parsers/pasteExtension.d.ts +0 -6
  277. package/types/src/extensions/NonEditableBlocks/NonEditableBlockPlugin.d.ts +0 -2
  278. /package/src/api/{exporters/html/__snapshots_fragment_edge_cases__/selectionWithinBlockChildren.html → clipboard/__snapshots__/multipleChildren.html} +0 -0
  279. /package/src/api/{parsers → clipboard/fromClipboard}/acceptedMIMETypes.ts +0 -0
  280. /package/src/api/parsers/html/__snapshots__/{paste/list-test.json → list-test.json} +0 -0
  281. /package/src/api/parsers/html/__snapshots__/{paste/parse-basic-block-types.json → parse-basic-block-types.json} +0 -0
  282. /package/src/api/parsers/html/__snapshots__/{paste/parse-div-with-inline-content.json → parse-div-with-inline-content.json} +0 -0
  283. /package/src/api/parsers/html/__snapshots__/{paste/parse-divs.json → parse-divs.json} +0 -0
  284. /package/src/api/parsers/html/__snapshots__/{paste/parse-fake-image-caption.json → parse-fake-image-caption.json} +0 -0
  285. /package/src/api/parsers/html/__snapshots__/{paste/parse-image-in-paragraph.json → parse-image-in-paragraph.json} +0 -0
  286. /package/src/api/parsers/html/__snapshots__/{paste/parse-mixed-nested-lists.json → parse-mixed-nested-lists.json} +0 -0
  287. /package/src/api/parsers/html/__snapshots__/{paste/parse-nested-lists-with-paragraphs.json → parse-nested-lists-with-paragraphs.json} +0 -0
  288. /package/src/api/parsers/html/__snapshots__/{paste/parse-nested-lists.json → parse-nested-lists.json} +0 -0
  289. /package/src/api/parsers/html/__snapshots__/{paste/parse-notion-html.json → parse-notion-html.json} +0 -0
  290. /package/src/api/parsers/html/__snapshots__/{paste/parse-two-divs.json → parse-two-divs.json} +0 -0
  291. /package/types/src/api/blockManipulation/{blockManipulation.test.d.ts → commands/insertBlocks/insertBlocks.test.d.ts} +0 -0
  292. /package/types/src/api/{parsers → clipboard/fromClipboard}/acceptedMIMETypes.d.ts +0 -0
@@ -1,15 +1,17 @@
1
- import { DOMSerializer, Fragment, Node, Schema } from "prosemirror-model";
1
+ import { DOMSerializer, Schema } from "prosemirror-model";
2
2
 
3
- import { PartialBlock } from "../../../blocks/defaultBlocks";
4
- import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
5
- import { BlockSchema, InlineContentSchema, StyleSchema } from "../../../schema";
6
- import { esmDependencies } from "../../../util/esmDependencies";
7
- import { blockToNode } from "../../nodeConversions/nodeConversions";
3
+ import { PartialBlock } from "../../../blocks/defaultBlocks.js";
4
+ import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js";
8
5
  import {
9
- serializeNodeInner,
10
- serializeProseMirrorFragment,
11
- } from "./util/sharedHTMLConversion";
12
- import { simplifyBlocks } from "./util/simplifyBlocksRehypePlugin";
6
+ BlockSchema,
7
+ InlineContent,
8
+ InlineContentSchema,
9
+ StyleSchema,
10
+ } from "../../../schema/index.js";
11
+ import {
12
+ serializeBlocksExternalHTML,
13
+ serializeInlineContentExternalHTML,
14
+ } from "./util/serializeBlocksExternalHTML.js";
13
15
 
14
16
  // Used to export BlockNote blocks and ProseMirror nodes to HTML for use outside
15
17
  // the editor. Blocks are exported using the `toExternalHTML` method in their
@@ -24,26 +26,6 @@ import { simplifyBlocks } from "./util/simplifyBlocksRehypePlugin";
24
26
  // 3. While nesting for list items is preserved, other types of blocks nested
25
27
  // inside a list are un-nested and a new list is created after them.
26
28
  // 4. The HTML is wrapped in a single `div` element.
27
- //
28
- // The serializer has 2 main methods:
29
- // `exportBlocks`: Exports an array of blocks to HTML.
30
- // `exportFragment`: Exports a ProseMirror fragment to HTML. This is mostly
31
- // useful if you want to export a selection which may not start/end at the
32
- // start/end of a block.
33
- export interface ExternalHTMLExporter<
34
- BSchema extends BlockSchema,
35
- I extends InlineContentSchema,
36
- S extends StyleSchema
37
- > {
38
- exportBlocks: (
39
- blocks: PartialBlock<BSchema, I, S>[],
40
- options: { document?: Document }
41
- ) => string;
42
- exportProseMirrorFragment: (
43
- fragment: Fragment,
44
- options: { document?: Document }
45
- ) => string;
46
- }
47
29
 
48
30
  // Needs to be sync because it's used in drag handler event (SideMenuPlugin)
49
31
  // Ideally, call `await initializeESMDependencies()` before calling this function
@@ -54,69 +36,42 @@ export const createExternalHTMLExporter = <
54
36
  >(
55
37
  schema: Schema,
56
38
  editor: BlockNoteEditor<BSchema, I, S>
57
- ): ExternalHTMLExporter<BSchema, I, S> => {
58
- const deps = esmDependencies;
59
-
60
- if (!deps) {
61
- throw new Error(
62
- "External HTML exporter requires ESM dependencies to be initialized"
63
- );
64
- }
39
+ ) => {
40
+ const serializer = DOMSerializer.fromSchema(schema);
65
41
 
66
- const serializer = DOMSerializer.fromSchema(schema) as DOMSerializer & {
67
- serializeNodeInner: (
68
- node: Node,
69
- options: { document?: Document }
70
- ) => HTMLElement;
71
- exportProseMirrorFragment: (
72
- fragment: Fragment,
73
- options: { document?: Document }
74
- ) => string;
42
+ return {
75
43
  exportBlocks: (
76
44
  blocks: PartialBlock<BSchema, I, S>[],
77
45
  options: { document?: Document }
78
- ) => string;
79
- };
80
-
81
- serializer.serializeNodeInner = (
82
- node: Node,
83
- options: { document?: Document }
84
- ) => serializeNodeInner(node, options, serializer, editor, true);
85
-
86
- // Like the `internalHTMLSerializer`, also uses `serializeProseMirrorFragment`
87
- // but additionally runs it through the `simplifyBlocks` rehype plugin to
88
- // convert the internal HTML to external.
89
- serializer.exportProseMirrorFragment = (fragment, options) => {
90
- const externalHTML = deps.unified
91
- .unified()
92
- .use(deps.rehypeParse.default, { fragment: true })
93
- .use(simplifyBlocks, {
94
- orderedListItemBlockTypes: new Set<string>(["numberedListItem"]),
95
- unorderedListItemBlockTypes: new Set<string>([
96
- "bulletListItem",
97
- "checkListItem",
98
- ]),
99
- })
100
- .use(deps.rehypeStringify.default)
101
- .processSync(serializeProseMirrorFragment(fragment, serializer, options));
46
+ ) => {
47
+ const html = serializeBlocksExternalHTML(
48
+ editor,
49
+ blocks,
50
+ serializer,
51
+ new Set<string>(["numberedListItem"]),
52
+ new Set<string>(["bulletListItem", "checkListItem"]),
53
+ options
54
+ );
55
+ const div = document.createElement("div");
56
+ div.append(html);
57
+ return div.innerHTML;
58
+ },
102
59
 
103
- return externalHTML.value as string;
104
- };
60
+ exportInlineContent: (
61
+ inlineContent: InlineContent<I, S>[],
62
+ options: { document?: Document }
63
+ ) => {
64
+ const domFragment = serializeInlineContentExternalHTML(
65
+ editor,
66
+ inlineContent as any,
67
+ serializer,
68
+ options
69
+ );
105
70
 
106
- serializer.exportBlocks = (
107
- blocks: PartialBlock<BSchema, I, S>[],
108
- options
109
- ) => {
110
- const nodes = blocks.map((block) =>
111
- blockToNode(block, schema, editor.schema.styleSchema)
112
- );
113
- const blockGroup = schema.nodes["blockGroup"].create(null, nodes);
71
+ const parent = document.createElement("div");
72
+ parent.append(domFragment.cloneNode(true));
114
73
 
115
- return serializer.exportProseMirrorFragment(
116
- Fragment.from(blockGroup),
117
- options
118
- );
74
+ return parent.innerHTML;
75
+ },
119
76
  };
120
-
121
- return serializer;
122
77
  };
@@ -1,19 +1,23 @@
1
- import { TextSelection } from "prosemirror-state";
2
1
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
- import { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
4
2
 
5
- import { addIdsToBlocks, partialBlocksToBlocksForTesting } from "../../..";
6
- import { PartialBlock } from "../../../blocks/defaultBlocks";
7
- import { BlockSchema } from "../../../schema/blocks/types";
8
- import { InlineContentSchema } from "../../../schema/inlineContent/types";
9
- import { StyleSchema } from "../../../schema/styles/types";
10
- import { initializeESMDependencies } from "../../../util/esmDependencies";
11
- import { customBlocksTestCases } from "../../testUtil/cases/customBlocks";
12
- import { customInlineContentTestCases } from "../../testUtil/cases/customInlineContent";
13
- import { customStylesTestCases } from "../../testUtil/cases/customStyles";
14
- import { defaultSchemaTestCases } from "../../testUtil/cases/defaultSchema";
15
- import { createExternalHTMLExporter } from "./externalHTMLExporter";
16
- import { createInternalHTMLSerializer } from "./internalHTMLSerializer";
3
+ import { PartialBlock } from "../../../blocks/defaultBlocks.js";
4
+ import { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js";
5
+ import {
6
+ addIdsToBlocks,
7
+ partialBlocksToBlocksForTesting,
8
+ } from "../../../index.js";
9
+ import {
10
+ BlockSchema,
11
+ InlineContentSchema,
12
+ StyleSchema,
13
+ } from "../../../schema/index.js";
14
+ import { initializeESMDependencies } from "../../../util/esmDependencies.js";
15
+ import { customBlocksTestCases } from "../../testUtil/cases/customBlocks.js";
16
+ import { customInlineContentTestCases } from "../../testUtil/cases/customInlineContent.js";
17
+ import { customStylesTestCases } from "../../testUtil/cases/customStyles.js";
18
+ import { defaultSchemaTestCases } from "../../testUtil/cases/defaultSchema.js";
19
+ import { createExternalHTMLExporter } from "./externalHTMLExporter.js";
20
+ import { createInternalHTMLSerializer } from "./internalHTMLSerializer.js";
17
21
 
18
22
  async function convertToHTMLAndCompareSnapshots<
19
23
  B extends BlockSchema,
@@ -26,6 +30,7 @@ async function convertToHTMLAndCompareSnapshots<
26
30
  snapshotName: string
27
31
  ) {
28
32
  addIdsToBlocks(blocks);
33
+
29
34
  const serializer = createInternalHTMLSerializer(editor.pmSchema, editor);
30
35
  const internalHTML = serializer.serializeBlocks(blocks, {});
31
36
  const internalHTMLSnapshotPath =
@@ -106,145 +111,3 @@ describe("Test HTML conversion", () => {
106
111
  });
107
112
  }
108
113
  });
109
-
110
- // Fragments created from ProseMirror selections don't always conform to the
111
- // schema. This is because ProseMirror preserves the full ancestry of selected
112
- // nodes, but not the siblings of ancestor nodes. These tests are to verify that
113
- // Fragments like this are exported to HTML properly, as they can't be created
114
- // from Block objects like all the other test cases (Block object conversions
115
- // always conform to the schema).
116
- describe("Test ProseMirror fragment edge case conversion", () => {
117
- let editor: BlockNoteEditor;
118
- const div = document.createElement("div");
119
- beforeEach(() => {
120
- editor = BlockNoteEditor.create();
121
- editor.mount(div);
122
- });
123
-
124
- afterEach(() => {
125
- editor.mount(undefined);
126
- editor._tiptapEditor.destroy();
127
- editor = undefined as any;
128
-
129
- delete (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS;
130
- });
131
-
132
- // When the selection starts in a nested block, the Fragment from it omits the
133
- // `blockContent` node of the parent `blockContainer` if it's not also
134
- // included in the selection. In the schema, `blockContainer` nodes should
135
- // contain a single `blockContent` node, so this edge case needs to be tested.
136
- describe("No block content", () => {
137
- const blocks: PartialBlock[] = [
138
- {
139
- type: "paragraph",
140
- content: "Paragraph 1",
141
- children: [
142
- {
143
- type: "paragraph",
144
- content: "Nested Paragraph 1",
145
- },
146
- {
147
- type: "paragraph",
148
- content: "Nested Paragraph 2",
149
- },
150
- {
151
- type: "paragraph",
152
- content: "Nested Paragraph 3",
153
- },
154
- ],
155
- },
156
- {
157
- type: "paragraph",
158
- content: "Paragraph 2",
159
- children: [
160
- {
161
- type: "paragraph",
162
- content: "Nested Paragraph 1",
163
- },
164
- {
165
- type: "paragraph",
166
- content: "Nested Paragraph 2",
167
- },
168
- {
169
- type: "paragraph",
170
- content: "Nested Paragraph 3",
171
- },
172
- ],
173
- },
174
- ];
175
-
176
- beforeEach(() => {
177
- editor.replaceBlocks(editor.document, blocks);
178
- });
179
-
180
- it("Selection within a block's children", async () => {
181
- // Selection starts and ends within the first block's children.
182
- editor.dispatch(
183
- editor._tiptapEditor.state.tr.setSelection(
184
- TextSelection.create(editor._tiptapEditor.state.doc, 18, 80)
185
- )
186
- );
187
-
188
- const copiedFragment =
189
- editor._tiptapEditor.state.selection.content().content;
190
-
191
- await initializeESMDependencies();
192
- const exporter = createExternalHTMLExporter(editor.pmSchema, editor);
193
- const externalHTML = exporter.exportProseMirrorFragment(
194
- copiedFragment,
195
- {}
196
- );
197
- expect(externalHTML).toMatchFileSnapshot(
198
- "./__snapshots_fragment_edge_cases__/" +
199
- "selectionWithinBlockChildren.html"
200
- );
201
- });
202
-
203
- it("Selection leaves a block's children", async () => {
204
- // Selection starts and ends within the first block's children and ends
205
- // outside, at a shallower nesting level in the second block.
206
- editor.dispatch(
207
- editor._tiptapEditor.state.tr.setSelection(
208
- TextSelection.create(editor._tiptapEditor.state.doc, 18, 97)
209
- )
210
- );
211
-
212
- const copiedFragment =
213
- editor._tiptapEditor.state.selection.content().content;
214
-
215
- await initializeESMDependencies();
216
- const exporter = createExternalHTMLExporter(editor.pmSchema, editor);
217
- const externalHTML = exporter.exportProseMirrorFragment(
218
- copiedFragment,
219
- {}
220
- );
221
- expect(externalHTML).toMatchFileSnapshot(
222
- "./__snapshots_fragment_edge_cases__/" +
223
- "selectionLeavesBlockChildren.html"
224
- );
225
- });
226
-
227
- it("Selection spans multiple blocks' children", async () => {
228
- // Selection starts and ends within the first block's children and ends
229
- // within the second block's children.
230
- editor.dispatch(
231
- editor._tiptapEditor.state.tr.setSelection(
232
- TextSelection.create(editor._tiptapEditor.state.doc, 18, 163)
233
- )
234
- );
235
-
236
- const copiedFragment =
237
- editor._tiptapEditor.state.selection.content().content;
238
- await initializeESMDependencies();
239
- const exporter = createExternalHTMLExporter(editor.pmSchema, editor);
240
- const externalHTML = exporter.exportProseMirrorFragment(
241
- copiedFragment,
242
- {}
243
- );
244
- expect(externalHTML).toMatchFileSnapshot(
245
- "./__snapshots_fragment_edge_cases__/" +
246
- "selectionSpansBlocksChildren.html"
247
- );
248
- });
249
- });
250
- });
@@ -1,13 +1,12 @@
1
- import { DOMSerializer, Fragment, Node, Schema } from "prosemirror-model";
2
- import { PartialBlock } from "../../../blocks/defaultBlocks";
3
- import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor";
4
- import { BlockSchema, InlineContentSchema, StyleSchema } from "../../../schema";
5
- import { blockToNode } from "../../nodeConversions/nodeConversions";
1
+ import { DOMSerializer, Schema } from "prosemirror-model";
2
+ import { PartialBlock } from "../../../blocks/defaultBlocks.js";
3
+ import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js";
6
4
  import {
7
- serializeNodeInner,
8
- serializeProseMirrorFragment,
9
- } from "./util/sharedHTMLConversion";
10
-
5
+ BlockSchema,
6
+ InlineContentSchema,
7
+ StyleSchema,
8
+ } from "../../../schema/index.js";
9
+ import { serializeBlocksInternalHTML } from "./util/serializeBlocksInternalHTML.js";
11
10
  // Used to serialize BlockNote blocks and ProseMirror nodes to HTML without
12
11
  // losing data. Blocks are exported using the `toInternalHTML` method in their
13
12
  // `blockSpec`.
@@ -17,29 +16,6 @@ import {
17
16
  // editor, including the `blockGroup` and `blockContainer` wrappers. This also
18
17
  // means that it can be converted back to the original blocks without any data
19
18
  // loss.
20
- //
21
- // The serializer has 2 main methods:
22
- // `serializeFragment`: Serializes a ProseMirror fragment to HTML. This is
23
- // mostly useful if you want to serialize a selection which may not start/end at
24
- // the start/end of a block.
25
- // `serializeBlocks`: Serializes an array of blocks to HTML.
26
- export interface InternalHTMLSerializer<
27
- BSchema extends BlockSchema,
28
- I extends InlineContentSchema,
29
- S extends StyleSchema
30
- > {
31
- // TODO: Ideally we would expand the BlockNote API to support partial
32
- // selections so we don't need this.
33
- serializeProseMirrorFragment: (
34
- fragment: Fragment,
35
- options: { document?: Document }
36
- ) => string;
37
- serializeBlocks: (
38
- blocks: PartialBlock<BSchema, I, S>[],
39
- options: { document?: Document }
40
- ) => string;
41
- }
42
-
43
19
  export const createInternalHTMLSerializer = <
44
20
  BSchema extends BlockSchema,
45
21
  I extends InlineContentSchema,
@@ -47,45 +23,21 @@ export const createInternalHTMLSerializer = <
47
23
  >(
48
24
  schema: Schema,
49
25
  editor: BlockNoteEditor<BSchema, I, S>
50
- ): InternalHTMLSerializer<BSchema, I, S> => {
51
- const serializer = DOMSerializer.fromSchema(schema) as DOMSerializer & {
52
- serializeNodeInner: (
53
- node: Node,
54
- options: { document?: Document }
55
- ) => HTMLElement;
26
+ ) => {
27
+ const serializer = DOMSerializer.fromSchema(schema);
28
+
29
+ return {
56
30
  serializeBlocks: (
57
31
  blocks: PartialBlock<BSchema, I, S>[],
58
32
  options: { document?: Document }
59
- ) => string;
60
- serializeProseMirrorFragment: (
61
- fragment: Fragment,
62
- options?: { document?: Document | undefined } | undefined,
63
- target?: HTMLElement | DocumentFragment | undefined
64
- ) => string;
33
+ ) => {
34
+ return serializeBlocksInternalHTML(
35
+ editor,
36
+ blocks,
37
+ serializer,
38
+ false,
39
+ options
40
+ ).outerHTML;
41
+ },
65
42
  };
66
-
67
- serializer.serializeNodeInner = (
68
- node: Node,
69
- options: { document?: Document }
70
- ) => serializeNodeInner(node, options, serializer, editor, false);
71
-
72
- serializer.serializeProseMirrorFragment = (fragment: Fragment, options) =>
73
- serializeProseMirrorFragment(fragment, serializer, options);
74
-
75
- serializer.serializeBlocks = (
76
- blocks: PartialBlock<BSchema, I, S>[],
77
- options
78
- ) => {
79
- const nodes = blocks.map((block) =>
80
- blockToNode(block, schema, editor.schema.styleSchema)
81
- );
82
- const blockGroup = schema.nodes["blockGroup"].create(null, nodes);
83
-
84
- return serializer.serializeProseMirrorFragment(
85
- Fragment.from(blockGroup),
86
- options
87
- );
88
- };
89
-
90
- return serializer;
91
43
  };