@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,6 +1,6 @@
1
- import { Mark, Node, Schema } from "@tiptap/pm/model";
1
+ import { Mark, Node } from "@tiptap/pm/model";
2
2
 
3
- import UniqueID from "../../extensions/UniqueID/UniqueID";
3
+ import UniqueID from "../../extensions/UniqueID/UniqueID.js";
4
4
  import type {
5
5
  BlockSchema,
6
6
  CustomInlineContentConfig,
@@ -8,266 +8,23 @@ import type {
8
8
  InlineContent,
9
9
  InlineContentFromConfig,
10
10
  InlineContentSchema,
11
- PartialCustomInlineContentFromConfig,
12
- PartialInlineContent,
13
- PartialLink,
14
- PartialTableContent,
15
11
  StyleSchema,
16
- StyledText,
17
12
  Styles,
18
13
  TableContent,
19
- } from "../../schema";
20
- import { getBlockInfo } from "../getBlockInfoFromPos";
14
+ } from "../../schema/index.js";
15
+ import { getBlockInfoWithManualOffset } from "../getBlockInfoFromPos.js";
21
16
 
22
- import type { Block, PartialBlock } from "../../blocks/defaultBlocks";
17
+ import type { Block } from "../../blocks/defaultBlocks.js";
23
18
  import {
24
19
  isLinkInlineContent,
25
- isPartialLinkInlineContent,
26
20
  isStyledTextInlineContent,
27
- } from "../../schema/inlineContent/types";
28
- import { UnreachableCaseError } from "../../util/typescript";
29
-
30
- /**
31
- * Convert a StyledText inline element to a
32
- * prosemirror text node with the appropriate marks
33
- */
34
- function styledTextToNodes<T extends StyleSchema>(
35
- styledText: StyledText<T>,
36
- schema: Schema,
37
- styleSchema: T
38
- ): Node[] {
39
- const marks: Mark[] = [];
40
-
41
- for (const [style, value] of Object.entries(styledText.styles)) {
42
- const config = styleSchema[style];
43
- if (!config) {
44
- throw new Error(`style ${style} not found in styleSchema`);
45
- }
46
-
47
- if (config.propSchema === "boolean") {
48
- marks.push(schema.mark(style));
49
- } else if (config.propSchema === "string") {
50
- marks.push(schema.mark(style, { stringValue: value }));
51
- } else {
52
- throw new UnreachableCaseError(config.propSchema);
53
- }
54
- }
55
-
56
- return (
57
- styledText.text
58
- // Splits text & line breaks.
59
- .split(/(\n)/g)
60
- // If the content ends with a line break, an empty string is added to the
61
- // end, which this removes.
62
- .filter((text) => text.length > 0)
63
- // Converts text & line breaks to nodes.
64
- .map((text) => {
65
- if (text === "\n") {
66
- return schema.nodes["hardBreak"].create();
67
- } else {
68
- return schema.text(text, marks);
69
- }
70
- })
71
- );
72
- }
73
-
74
- /**
75
- * Converts a Link inline content element to
76
- * prosemirror text nodes with the appropriate marks
77
- */
78
- function linkToNodes(
79
- link: PartialLink<StyleSchema>,
80
- schema: Schema,
81
- styleSchema: StyleSchema
82
- ): Node[] {
83
- const linkMark = schema.marks.link.create({
84
- href: link.href,
85
- });
86
-
87
- return styledTextArrayToNodes(link.content, schema, styleSchema).map(
88
- (node) => {
89
- if (node.type.name === "text") {
90
- return node.mark([...node.marks, linkMark]);
91
- }
92
-
93
- if (node.type.name === "hardBreak") {
94
- return node;
95
- }
96
- throw new Error("unexpected node type");
97
- }
98
- );
99
- }
100
-
101
- /**
102
- * Converts an array of StyledText inline content elements to
103
- * prosemirror text nodes with the appropriate marks
104
- */
105
- function styledTextArrayToNodes<S extends StyleSchema>(
106
- content: string | StyledText<S>[],
107
- schema: Schema,
108
- styleSchema: S
109
- ): Node[] {
110
- const nodes: Node[] = [];
111
-
112
- if (typeof content === "string") {
113
- nodes.push(
114
- ...styledTextToNodes(
115
- { type: "text", text: content, styles: {} },
116
- schema,
117
- styleSchema
118
- )
119
- );
120
- return nodes;
121
- }
122
-
123
- for (const styledText of content) {
124
- nodes.push(...styledTextToNodes(styledText, schema, styleSchema));
125
- }
126
- return nodes;
127
- }
128
-
129
- /**
130
- * converts an array of inline content elements to prosemirror nodes
131
- */
132
- export function inlineContentToNodes<
133
- I extends InlineContentSchema,
134
- S extends StyleSchema
135
- >(
136
- blockContent: PartialInlineContent<I, S>,
137
- schema: Schema,
138
- styleSchema: S
139
- ): Node[] {
140
- const nodes: Node[] = [];
141
-
142
- for (const content of blockContent) {
143
- if (typeof content === "string") {
144
- nodes.push(...styledTextArrayToNodes(content, schema, styleSchema));
145
- } else if (isPartialLinkInlineContent(content)) {
146
- nodes.push(...linkToNodes(content, schema, styleSchema));
147
- } else if (isStyledTextInlineContent(content)) {
148
- nodes.push(...styledTextArrayToNodes([content], schema, styleSchema));
149
- } else {
150
- nodes.push(
151
- blockOrInlineContentToContentNode(content, schema, styleSchema)
152
- );
153
- }
154
- }
155
- return nodes;
156
- }
157
-
158
- /**
159
- * converts an array of inline content elements to prosemirror nodes
160
- */
161
- export function tableContentToNodes<
162
- I extends InlineContentSchema,
163
- S extends StyleSchema
164
- >(
165
- tableContent: PartialTableContent<I, S>,
166
- schema: Schema,
167
- styleSchema: StyleSchema
168
- ): Node[] {
169
- const rowNodes: Node[] = [];
170
-
171
- for (const row of tableContent.rows) {
172
- const columnNodes: Node[] = [];
173
- for (const cell of row.cells) {
174
- let pNode: Node;
175
- if (!cell) {
176
- pNode = schema.nodes["tableParagraph"].create({});
177
- } else if (typeof cell === "string") {
178
- pNode = schema.nodes["tableParagraph"].create({}, schema.text(cell));
179
- } else {
180
- const textNodes = inlineContentToNodes(cell, schema, styleSchema);
181
- pNode = schema.nodes["tableParagraph"].create({}, textNodes);
182
- }
183
-
184
- const cellNode = schema.nodes["tableCell"].create({}, pNode);
185
- columnNodes.push(cellNode);
186
- }
187
- const rowNode = schema.nodes["tableRow"].create({}, columnNodes);
188
- rowNodes.push(rowNode);
189
- }
190
- return rowNodes;
191
- }
192
-
193
- function blockOrInlineContentToContentNode(
194
- block:
195
- | PartialBlock<any, any, any>
196
- | PartialCustomInlineContentFromConfig<any, any>,
197
- schema: Schema,
198
- styleSchema: StyleSchema
199
- ) {
200
- let contentNode: Node;
201
- let type = block.type;
202
-
203
- // TODO: needed? came from previous code
204
- if (type === undefined) {
205
- type = "paragraph";
206
- }
207
-
208
- if (!schema.nodes[type]) {
209
- throw new Error(`node type ${type} not found in schema`);
210
- }
211
-
212
- if (!block.content) {
213
- contentNode = schema.nodes[type].create(block.props);
214
- } else if (typeof block.content === "string") {
215
- const nodes = inlineContentToNodes([block.content], schema, styleSchema);
216
- contentNode = schema.nodes[type].create(block.props, nodes);
217
- } else if (Array.isArray(block.content)) {
218
- const nodes = inlineContentToNodes(block.content, schema, styleSchema);
219
- contentNode = schema.nodes[type].create(block.props, nodes);
220
- } else if (block.content.type === "tableContent") {
221
- const nodes = tableContentToNodes(block.content, schema, styleSchema);
222
- contentNode = schema.nodes[type].create(block.props, nodes);
223
- } else {
224
- throw new UnreachableCaseError(block.content.type);
225
- }
226
- return contentNode;
227
- }
228
- /**
229
- * Converts a BlockNote block to a TipTap node.
230
- */
231
- export function blockToNode(
232
- block: PartialBlock<any, any, any>,
233
- schema: Schema,
234
- styleSchema: StyleSchema
235
- ) {
236
- let id = block.id;
237
-
238
- if (id === undefined) {
239
- id = UniqueID.options.generateID();
240
- }
241
-
242
- const contentNode = blockOrInlineContentToContentNode(
243
- block,
244
- schema,
245
- styleSchema
246
- );
247
-
248
- const children: Node[] = [];
249
-
250
- if (block.children) {
251
- for (const child of block.children) {
252
- children.push(blockToNode(child, schema, styleSchema));
253
- }
254
- }
255
-
256
- const groupNode = schema.nodes["blockGroup"].create({}, children);
257
-
258
- return schema.nodes["blockContainer"].create(
259
- {
260
- id: id,
261
- ...block.props,
262
- },
263
- children.length > 0 ? [contentNode, groupNode] : contentNode
264
- );
265
- }
21
+ } from "../../schema/inlineContent/types.js";
22
+ import { UnreachableCaseError } from "../../util/typescript.js";
266
23
 
267
24
  /**
268
25
  * Converts an internal (prosemirror) table node contentto a BlockNote Tablecontent
269
26
  */
270
- function contentNodeToTableContent<
27
+ export function contentNodeToTableContent<
271
28
  I extends InlineContentSchema,
272
29
  S extends StyleSchema
273
30
  >(contentNode: Node, inlineContentSchema: I, styleSchema: S) {
@@ -566,9 +323,10 @@ export function nodeToBlock<
566
323
  return cachedBlock;
567
324
  }
568
325
 
569
- const blockInfo = getBlockInfo(node);
326
+ const { blockContainer, blockContent, blockGroup } =
327
+ getBlockInfoWithManualOffset(node, 0);
570
328
 
571
- let id = blockInfo.id;
329
+ let id = blockContainer.node.attrs.id;
572
330
 
573
331
  // Only used for blocks converted from other formats.
574
332
  if (id === null) {
@@ -578,13 +336,13 @@ export function nodeToBlock<
578
336
  const props: any = {};
579
337
  for (const [attr, value] of Object.entries({
580
338
  ...node.attrs,
581
- ...blockInfo.contentNode.attrs,
339
+ ...blockContent.node.attrs,
582
340
  })) {
583
- const blockSpec = blockSchema[blockInfo.contentType.name];
341
+ const blockSpec = blockSchema[blockContent.node.type.name];
584
342
 
585
343
  if (!blockSpec) {
586
344
  throw Error(
587
- "Block is of an unrecognized type: " + blockInfo.contentType.name
345
+ "Block is of an unrecognized type: " + blockContent.node.type.name
588
346
  );
589
347
  }
590
348
 
@@ -595,32 +353,32 @@ export function nodeToBlock<
595
353
  }
596
354
  }
597
355
 
598
- const blockConfig = blockSchema[blockInfo.contentType.name];
356
+ const blockConfig = blockSchema[blockContent.node.type.name];
599
357
 
600
358
  const children: Block<BSchema, I, S>[] = [];
601
- for (let i = 0; i < blockInfo.numChildBlocks; i++) {
359
+ blockGroup?.node.forEach((child) => {
602
360
  children.push(
603
361
  nodeToBlock(
604
- node.lastChild!.child(i),
362
+ child,
605
363
  blockSchema,
606
364
  inlineContentSchema,
607
365
  styleSchema,
608
366
  blockCache
609
367
  )
610
368
  );
611
- }
369
+ });
612
370
 
613
371
  let content: Block<any, any, any>["content"];
614
372
 
615
373
  if (blockConfig.content === "inline") {
616
374
  content = contentNodeToInlineContent(
617
- blockInfo.contentNode,
375
+ blockContent.node,
618
376
  inlineContentSchema,
619
377
  styleSchema
620
378
  );
621
379
  } else if (blockConfig.content === "table") {
622
380
  content = contentNodeToTableContent(
623
- blockInfo.contentNode,
381
+ blockContent.node,
624
382
  inlineContentSchema,
625
383
  styleSchema
626
384
  );
@@ -1,21 +1,18 @@
1
+ import * as pmView from "prosemirror-view";
1
2
  import { describe, expect, it } from "vitest";
2
- import { BlockNoteEditor } from "../../..";
3
- import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
3
+ import { BlockNoteEditor } from "../../../index.js";
4
+ import { nestedListsToBlockNoteStructure } from "./util/nestedLists.js";
4
5
 
5
6
  async function parseHTMLAndCompareSnapshots(
6
7
  html: string,
7
8
  snapshotName: string
8
9
  ) {
9
- // use a dynamic import because we want to access
10
- // __parseFromClipboard which is not exposed in types
11
- const view: any = await import("prosemirror-view");
12
-
13
10
  const editor = BlockNoteEditor.create();
14
11
  const div = document.createElement("div");
15
12
  editor.mount(div);
16
13
  const blocks = await editor.tryParseHTMLToBlocks(html);
17
14
 
18
- const snapshotPath = "./__snapshots__/paste/" + snapshotName + ".json";
15
+ const snapshotPath = "./__snapshots__/" + snapshotName + ".json";
19
16
  expect(JSON.stringify(blocks, undefined, 2)).toMatchFileSnapshot(
20
17
  snapshotPath
21
18
  );
@@ -34,7 +31,7 @@ async function parseHTMLAndCompareSnapshots(
34
31
  (window as any).__TEST_OPTIONS.mockID = 0; // reset id counter
35
32
  const htmlNode = nestedListsToBlockNoteStructure(html);
36
33
 
37
- const slice = view.__parseFromClipboard(
34
+ const slice = (pmView as any).__parseFromClipboard(
38
35
  editor.prosemirrorView,
39
36
  "",
40
37
  htmlNode.innerHTML,
@@ -1,9 +1,13 @@
1
1
  import { DOMParser, Schema } from "prosemirror-model";
2
- import { BlockSchema, InlineContentSchema, StyleSchema } from "../../../schema";
2
+ import {
3
+ BlockSchema,
4
+ InlineContentSchema,
5
+ StyleSchema,
6
+ } from "../../../schema/index.js";
3
7
 
4
- import { Block } from "../../../blocks/defaultBlocks";
5
- import { nodeToBlock } from "../../nodeConversions/nodeConversions";
6
- import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
8
+ import { Block } from "../../../blocks/defaultBlocks.js";
9
+ import { nodeToBlock } from "../../nodeConversions/nodeToBlock.js";
10
+ import { nestedListsToBlockNoteStructure } from "./util/nestedLists.js";
7
11
  export async function HTMLToBlocks<
8
12
  BSchema extends BlockSchema,
9
13
  I extends InlineContentSchema,
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { initializeESMDependencies } from "../../../../util/esmDependencies";
3
- import { nestedListsToBlockNoteStructure } from "./nestedLists";
2
+ import { initializeESMDependencies } from "../../../../util/esmDependencies.js";
3
+ import { nestedListsToBlockNoteStructure } from "./nestedLists.js";
4
4
 
5
5
  async function testHTML(html: string) {
6
6
  const deps = await initializeESMDependencies();