@blocknote/core 0.21.0 → 0.23.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 (444) hide show
  1. package/dist/blocknote.js +2320 -1692
  2. package/dist/blocknote.js.map +1 -1
  3. package/dist/blocknote.umd.cjs +7 -7
  4. package/dist/blocknote.umd.cjs.map +1 -1
  5. package/dist/style.css +1 -1
  6. package/dist/tsconfig.tsbuildinfo +1 -1
  7. package/dist/webpack-stats.json +1 -1
  8. package/package.json +3 -3
  9. package/src/api/clipboard/__snapshots__/external/pasteEndOfParagraph.html +96 -0
  10. package/src/api/clipboard/__snapshots__/external/pasteEndOfParagraphText.html +96 -0
  11. package/src/api/clipboard/__snapshots__/external/pasteImage.html +111 -0
  12. package/src/api/clipboard/__snapshots__/external/pasteParagraphInCustomBlock.html +96 -0
  13. package/src/api/clipboard/__snapshots__/external/pasteTable.html +149 -0
  14. package/src/api/clipboard/__snapshots__/external/pasteTableInExistingTable.html +124 -0
  15. package/src/api/clipboard/__snapshots__/internal/basicBlocks.html +1 -0
  16. package/src/api/clipboard/__snapshots__/internal/basicBlocksWithProps.html +1 -0
  17. package/src/api/clipboard/__snapshots__/internal/paragraphInCustomBlock.html +1 -0
  18. package/src/api/clipboard/clipboardExternal.test.ts +161 -0
  19. package/src/api/clipboard/{clipboard.test.ts → clipboardInternal.test.ts} +186 -38
  20. package/src/api/clipboard/testUtil.ts +27 -0
  21. package/src/api/clipboard/toClipboard/copyExtension.ts +1 -0
  22. package/src/api/exporters/html/__snapshots__/pageBreak/basic/external.html +1 -0
  23. package/src/api/exporters/html/__snapshots__/pageBreak/basic/internal.html +1 -0
  24. package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +7 -1
  25. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +3 -1
  26. package/src/api/exporters/markdown/__snapshots__/pageBreak/basic/markdown.md +0 -0
  27. package/src/api/nodeConversions/__snapshots__/nodeConversions.test.ts.snap +16 -0
  28. package/src/api/nodeConversions/nodeToBlock.ts +4 -1
  29. package/src/api/parsers/html/__snapshots__/parse-codeblocks.json +62 -0
  30. package/src/api/parsers/html/parseHTML.test.ts +9 -0
  31. package/src/api/parsers/markdown/__snapshots__/pasted/styled.json +2 -2
  32. package/src/api/testUtil/cases/defaultSchema.ts +15 -1
  33. package/src/api/testUtil/partialBlockTestUtil.ts +4 -1
  34. package/src/blocks/CodeBlockContent/CodeBlockContent.ts +32 -11
  35. package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +3 -28
  36. package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +1 -1
  37. package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +4 -16
  38. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +11 -3
  39. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +26 -6
  40. package/src/blocks/PageBreakBlockContent/PageBreakBlockContent.ts +49 -0
  41. package/src/blocks/PageBreakBlockContent/getPageBreakSlashMenuItems.ts +45 -0
  42. package/src/blocks/PageBreakBlockContent/schema.ts +40 -0
  43. package/src/editor/Block.css +18 -4
  44. package/src/editor/BlockNoteEditor.test.ts +21 -1
  45. package/src/editor/BlockNoteEditor.ts +17 -0
  46. package/src/editor/BlockNoteExtensions.ts +111 -16
  47. package/src/editor/editor.css +28 -13
  48. package/src/editor/transformPasted.ts +57 -4
  49. package/src/extensions/SideMenu/SideMenuPlugin.ts +115 -23
  50. package/src/extensions/SideMenu/dragging.ts +0 -1
  51. package/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts +1 -1
  52. package/src/i18n/locales/ar.ts +6 -0
  53. package/src/i18n/locales/de.ts +6 -0
  54. package/src/i18n/locales/en.ts +6 -0
  55. package/src/i18n/locales/es.ts +6 -0
  56. package/src/i18n/locales/fr.ts +47 -17
  57. package/src/i18n/locales/hr.ts +72 -54
  58. package/src/i18n/locales/index.ts +1 -0
  59. package/src/i18n/locales/is.ts +6 -0
  60. package/src/i18n/locales/it.ts +315 -0
  61. package/src/i18n/locales/ja.ts +6 -0
  62. package/src/i18n/locales/ko.ts +6 -0
  63. package/src/i18n/locales/nl.ts +6 -0
  64. package/src/i18n/locales/pl.ts +6 -0
  65. package/src/i18n/locales/pt.ts +6 -0
  66. package/src/i18n/locales/ru.ts +6 -0
  67. package/src/i18n/locales/vi.ts +6 -0
  68. package/src/i18n/locales/zh.ts +6 -0
  69. package/src/index.ts +3 -0
  70. package/src/schema/blocks/createSpec.ts +1 -1
  71. package/src/schema/blocks/internal.ts +16 -6
  72. package/src/schema/inlineContent/internal.ts +4 -1
  73. package/src/schema/propTypes.ts +41 -18
  74. package/types/src/api/blockManipulation/setupTestEnv.d.ts +8 -0
  75. package/types/src/api/clipboard/clipboardInternal.test.d.ts +1 -0
  76. package/types/src/api/clipboard/testUtil.d.ts +509 -0
  77. package/types/src/api/testUtil/cases/customBlocks.d.ts +8 -0
  78. package/types/src/api/testUtil/cases/customInlineContent.d.ts +8 -0
  79. package/types/src/api/testUtil/cases/customStyles.d.ts +8 -0
  80. package/types/src/api/testUtil/cases/defaultSchema.d.ts +2 -1
  81. package/types/src/blocks/CodeBlockContent/CodeBlockContent.d.ts +2 -0
  82. package/types/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.d.ts +12 -0
  83. package/types/src/blocks/PageBreakBlockContent/PageBreakBlockContent.d.ts +31 -0
  84. package/types/src/blocks/PageBreakBlockContent/getPageBreakSlashMenuItems.d.ts +8 -0
  85. package/types/src/blocks/PageBreakBlockContent/schema.d.ts +86 -0
  86. package/types/src/blocks/defaultBlocks.d.ts +16 -0
  87. package/types/src/editor/BlockNoteEditor.d.ts +15 -0
  88. package/types/src/editor/BlockNoteExtensions.d.ts +2 -0
  89. package/types/src/editor/transformPasted.d.ts +8 -4
  90. package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +25 -5
  91. package/types/src/extensions/SuggestionMenu/DefaultSuggestionItem.d.ts +1 -1
  92. package/types/src/i18n/locales/de.d.ts +6 -0
  93. package/types/src/i18n/locales/en.d.ts +6 -0
  94. package/types/src/i18n/locales/es.d.ts +6 -0
  95. package/types/src/i18n/locales/hr.d.ts +6 -0
  96. package/types/src/i18n/locales/index.d.ts +1 -0
  97. package/types/src/i18n/locales/it.d.ts +245 -0
  98. package/types/src/index.d.ts +3 -0
  99. package/types/src/schema/propTypes.d.ts +20 -2
  100. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js +0 -30
  101. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js.map +0 -1
  102. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js +0 -99
  103. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js.map +0 -1
  104. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js +0 -97
  105. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js.map +0 -1
  106. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js +0 -88
  107. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js.map +0 -1
  108. package/dist/src/api/blockManipulation/commands/moveBlocks/moveBlocks.js +0 -219
  109. package/dist/src/api/blockManipulation/commands/moveBlocks/moveBlocks.js.map +0 -1
  110. package/dist/src/api/blockManipulation/commands/moveBlocks/moveBlocks.test.js +0 -175
  111. package/dist/src/api/blockManipulation/commands/moveBlocks/moveBlocks.test.js.map +0 -1
  112. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js +0 -57
  113. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js.map +0 -1
  114. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js +0 -5
  115. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js.map +0 -1
  116. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js +0 -31
  117. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js.map +0 -1
  118. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js +0 -71
  119. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js.map +0 -1
  120. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js +0 -157
  121. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js.map +0 -1
  122. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js +0 -27
  123. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js.map +0 -1
  124. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js +0 -67
  125. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js.map +0 -1
  126. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js +0 -148
  127. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js.map +0 -1
  128. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js +0 -252
  129. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js.map +0 -1
  130. package/dist/src/api/blockManipulation/getBlock/getBlock.js +0 -56
  131. package/dist/src/api/blockManipulation/getBlock/getBlock.js.map +0 -1
  132. package/dist/src/api/blockManipulation/insertContentAt.js +0 -64
  133. package/dist/src/api/blockManipulation/insertContentAt.js.map +0 -1
  134. package/dist/src/api/blockManipulation/selections/selection.js +0 -149
  135. package/dist/src/api/blockManipulation/selections/selection.js.map +0 -1
  136. package/dist/src/api/blockManipulation/selections/selection.test.js +0 -39
  137. package/dist/src/api/blockManipulation/selections/selection.test.js.map +0 -1
  138. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js +0 -79
  139. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js.map +0 -1
  140. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js +0 -33
  141. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js.map +0 -1
  142. package/dist/src/api/blockManipulation/setupTestEnv.js +0 -172
  143. package/dist/src/api/blockManipulation/setupTestEnv.js.map +0 -1
  144. package/dist/src/api/clipboard/clipboard.test.js +0 -249
  145. package/dist/src/api/clipboard/clipboard.test.js.map +0 -1
  146. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js +0 -8
  147. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js.map +0 -1
  148. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js +0 -38
  149. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js.map +0 -1
  150. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js +0 -111
  151. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js.map +0 -1
  152. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js +0 -25
  153. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js.map +0 -1
  154. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js +0 -57
  155. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js.map +0 -1
  156. package/dist/src/api/clipboard/toClipboard/copyExtension.js +0 -134
  157. package/dist/src/api/clipboard/toClipboard/copyExtension.js.map +0 -1
  158. package/dist/src/api/exporters/html/externalHTMLExporter.js +0 -35
  159. package/dist/src/api/exporters/html/externalHTMLExporter.js.map +0 -1
  160. package/dist/src/api/exporters/html/htmlConversion.test.js +0 -72
  161. package/dist/src/api/exporters/html/htmlConversion.test.js.map +0 -1
  162. package/dist/src/api/exporters/html/internalHTMLSerializer.js +0 -21
  163. package/dist/src/api/exporters/html/internalHTMLSerializer.js.map +0 -1
  164. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js +0 -141
  165. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js.map +0 -1
  166. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js +0 -96
  167. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js.map +0 -1
  168. package/dist/src/api/exporters/markdown/markdownExporter.js +0 -31
  169. package/dist/src/api/exporters/markdown/markdownExporter.js.map +0 -1
  170. package/dist/src/api/exporters/markdown/markdownExporter.test.js +0 -57
  171. package/dist/src/api/exporters/markdown/markdownExporter.test.js.map +0 -1
  172. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js +0 -33
  173. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js.map +0 -1
  174. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js +0 -37
  175. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js.map +0 -1
  176. package/dist/src/api/getBlockInfoFromPos.js +0 -165
  177. package/dist/src/api/getBlockInfoFromPos.js.map +0 -1
  178. package/dist/src/api/nodeConversions/blockToNode.js +0 -197
  179. package/dist/src/api/nodeConversions/blockToNode.js.map +0 -1
  180. package/dist/src/api/nodeConversions/fragmentToBlocks.js +0 -50
  181. package/dist/src/api/nodeConversions/fragmentToBlocks.js.map +0 -1
  182. package/dist/src/api/nodeConversions/nodeConversions.test.js +0 -54
  183. package/dist/src/api/nodeConversions/nodeConversions.test.js.map +0 -1
  184. package/dist/src/api/nodeConversions/nodeToBlock.js +0 -316
  185. package/dist/src/api/nodeConversions/nodeToBlock.js.map +0 -1
  186. package/dist/src/api/nodeUtil.js +0 -28
  187. package/dist/src/api/nodeUtil.js.map +0 -1
  188. package/dist/src/api/parsers/html/parseHTML.js +0 -19
  189. package/dist/src/api/parsers/html/parseHTML.js.map +0 -1
  190. package/dist/src/api/parsers/html/parseHTML.test.js +0 -470
  191. package/dist/src/api/parsers/html/parseHTML.test.js.map +0 -1
  192. package/dist/src/api/parsers/html/util/nestedLists.js +0 -106
  193. package/dist/src/api/parsers/html/util/nestedLists.js.map +0 -1
  194. package/dist/src/api/parsers/html/util/nestedLists.test.js +0 -166
  195. package/dist/src/api/parsers/html/util/nestedLists.test.js.map +0 -1
  196. package/dist/src/api/parsers/markdown/parseMarkdown.js +0 -52
  197. package/dist/src/api/parsers/markdown/parseMarkdown.js.map +0 -1
  198. package/dist/src/api/parsers/markdown/parseMarkdown.test.js +0 -112
  199. package/dist/src/api/parsers/markdown/parseMarkdown.test.js.map +0 -1
  200. package/dist/src/api/testUtil/cases/customBlocks.js +0 -313
  201. package/dist/src/api/testUtil/cases/customBlocks.js.map +0 -1
  202. package/dist/src/api/testUtil/cases/customInlineContent.js +0 -91
  203. package/dist/src/api/testUtil/cases/customInlineContent.js.map +0 -1
  204. package/dist/src/api/testUtil/cases/customStyles.js +0 -83
  205. package/dist/src/api/testUtil/cases/customStyles.js.map +0 -1
  206. package/dist/src/api/testUtil/cases/defaultSchema.js +0 -673
  207. package/dist/src/api/testUtil/cases/defaultSchema.js.map +0 -1
  208. package/dist/src/api/testUtil/index.js +0 -2
  209. package/dist/src/api/testUtil/index.js.map +0 -1
  210. package/dist/src/api/testUtil/partialBlockTestUtil.js +0 -114
  211. package/dist/src/api/testUtil/partialBlockTestUtil.js.map +0 -1
  212. package/dist/src/api/testUtil/paste.js +0 -29
  213. package/dist/src/api/testUtil/paste.js.map +0 -1
  214. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js +0 -104
  215. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js.map +0 -1
  216. package/dist/src/blocks/AudioBlockContent/parseAudioElement.js +0 -5
  217. package/dist/src/blocks/AudioBlockContent/parseAudioElement.js.map +0 -1
  218. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js +0 -281
  219. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js.map +0 -1
  220. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js +0 -110
  221. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js.map +0 -1
  222. package/dist/src/blocks/FileBlockContent/FileBlockContent.js +0 -71
  223. package/dist/src/blocks/FileBlockContent/FileBlockContent.js.map +0 -1
  224. package/dist/src/blocks/FileBlockContent/helpers/parse/parseEmbedElement.js +0 -5
  225. package/dist/src/blocks/FileBlockContent/helpers/parse/parseEmbedElement.js.map +0 -1
  226. package/dist/src/blocks/FileBlockContent/helpers/parse/parseFigureElement.js +0 -10
  227. package/dist/src/blocks/FileBlockContent/helpers/parse/parseFigureElement.js.map +0 -1
  228. package/dist/src/blocks/FileBlockContent/helpers/render/createAddFileButton.js +0 -39
  229. package/dist/src/blocks/FileBlockContent/helpers/render/createAddFileButton.js.map +0 -1
  230. package/dist/src/blocks/FileBlockContent/helpers/render/createFileBlockWrapper.js +0 -51
  231. package/dist/src/blocks/FileBlockContent/helpers/render/createFileBlockWrapper.js.map +0 -1
  232. package/dist/src/blocks/FileBlockContent/helpers/render/createFileNameWithIcon.js +0 -17
  233. package/dist/src/blocks/FileBlockContent/helpers/render/createFileNameWithIcon.js.map +0 -1
  234. package/dist/src/blocks/FileBlockContent/helpers/render/createResizableFileBlockWrapper.js +0 -147
  235. package/dist/src/blocks/FileBlockContent/helpers/render/createResizableFileBlockWrapper.js.map +0 -1
  236. package/dist/src/blocks/FileBlockContent/helpers/toExternalHTML/createFigureWithCaption.js +0 -9
  237. package/dist/src/blocks/FileBlockContent/helpers/toExternalHTML/createFigureWithCaption.js.map +0 -1
  238. package/dist/src/blocks/FileBlockContent/helpers/toExternalHTML/createLinkWithCaption.js +0 -11
  239. package/dist/src/blocks/FileBlockContent/helpers/toExternalHTML/createLinkWithCaption.js.map +0 -1
  240. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js +0 -15
  241. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js.map +0 -1
  242. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js +0 -145
  243. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js.map +0 -1
  244. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js +0 -114
  245. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js.map +0 -1
  246. package/dist/src/blocks/ImageBlockContent/parseImageElement.js +0 -6
  247. package/dist/src/blocks/ImageBlockContent/parseImageElement.js.map +0 -1
  248. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js +0 -113
  249. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js.map +0 -1
  250. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js +0 -224
  251. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js.map +0 -1
  252. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js +0 -45
  253. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js.map +0 -1
  254. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js +0 -58
  255. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js.map +0 -1
  256. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js +0 -130
  257. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js.map +0 -1
  258. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js +0 -52
  259. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js.map +0 -1
  260. package/dist/src/blocks/TableBlockContent/TableBlockContent.js +0 -129
  261. package/dist/src/blocks/TableBlockContent/TableBlockContent.js.map +0 -1
  262. package/dist/src/blocks/TableBlockContent/TableExtension.js +0 -64
  263. package/dist/src/blocks/TableBlockContent/TableExtension.js.map +0 -1
  264. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js +0 -114
  265. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js.map +0 -1
  266. package/dist/src/blocks/VideoBlockContent/parseVideoElement.js +0 -6
  267. package/dist/src/blocks/VideoBlockContent/parseVideoElement.js.map +0 -1
  268. package/dist/src/blocks/defaultBlockHelpers.js +0 -50
  269. package/dist/src/blocks/defaultBlockHelpers.js.map +0 -1
  270. package/dist/src/blocks/defaultBlockTypeGuards.js +0 -40
  271. package/dist/src/blocks/defaultBlockTypeGuards.js.map +0 -1
  272. package/dist/src/blocks/defaultBlocks.js +0 -50
  273. package/dist/src/blocks/defaultBlocks.js.map +0 -1
  274. package/dist/src/blocks/defaultProps.js +0 -19
  275. package/dist/src/blocks/defaultProps.js.map +0 -1
  276. package/dist/src/editor/BlockNoteEditor.js +0 -751
  277. package/dist/src/editor/BlockNoteEditor.js.map +0 -1
  278. package/dist/src/editor/BlockNoteEditor.test.js +0 -65
  279. package/dist/src/editor/BlockNoteEditor.test.js.map +0 -1
  280. package/dist/src/editor/BlockNoteExtensions.js +0 -192
  281. package/dist/src/editor/BlockNoteExtensions.js.map +0 -1
  282. package/dist/src/editor/BlockNoteSchema.js +0 -38
  283. package/dist/src/editor/BlockNoteSchema.js.map +0 -1
  284. package/dist/src/editor/BlockNoteTipTapEditor.js +0 -169
  285. package/dist/src/editor/BlockNoteTipTapEditor.js.map +0 -1
  286. package/dist/src/editor/cursorPositionTypes.js +0 -2
  287. package/dist/src/editor/cursorPositionTypes.js.map +0 -1
  288. package/dist/src/editor/defaultColors.js +0 -77
  289. package/dist/src/editor/defaultColors.js.map +0 -1
  290. package/dist/src/editor/selectionTypes.js +0 -2
  291. package/dist/src/editor/selectionTypes.js.map +0 -1
  292. package/dist/src/editor/transformPasted.js +0 -79
  293. package/dist/src/editor/transformPasted.js.map +0 -1
  294. package/dist/src/exporter/Exporter.js +0 -36
  295. package/dist/src/exporter/Exporter.js.map +0 -1
  296. package/dist/src/exporter/index.js +0 -3
  297. package/dist/src/exporter/index.js.map +0 -1
  298. package/dist/src/exporter/mapping.js +0 -12
  299. package/dist/src/exporter/mapping.js.map +0 -1
  300. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js +0 -30
  301. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js.map +0 -1
  302. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js +0 -39
  303. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js.map +0 -1
  304. package/dist/src/extensions/FilePanel/FilePanelPlugin.js +0 -131
  305. package/dist/src/extensions/FilePanel/FilePanelPlugin.js.map +0 -1
  306. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js +0 -197
  307. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js.map +0 -1
  308. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js +0 -341
  309. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js.map +0 -1
  310. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js +0 -251
  311. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js.map +0 -1
  312. package/dist/src/extensions/LinkToolbar/protocols.js +0 -14
  313. package/dist/src/extensions/LinkToolbar/protocols.js.map +0 -1
  314. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js +0 -54
  315. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js.map +0 -1
  316. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js +0 -90
  317. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js.map +0 -1
  318. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js +0 -187
  319. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js.map +0 -1
  320. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js +0 -68
  321. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js.map +0 -1
  322. package/dist/src/extensions/SideMenu/SideMenuPlugin.js +0 -347
  323. package/dist/src/extensions/SideMenu/SideMenuPlugin.js.map +0 -1
  324. package/dist/src/extensions/SideMenu/dragging.js +0 -135
  325. package/dist/src/extensions/SideMenu/dragging.js.map +0 -1
  326. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js +0 -2
  327. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js.map +0 -1
  328. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js +0 -2
  329. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js.map +0 -1
  330. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js +0 -245
  331. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js.map +0 -1
  332. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js +0 -26
  333. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js.map +0 -1
  334. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js +0 -241
  335. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js.map +0 -1
  336. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js +0 -579
  337. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js.map +0 -1
  338. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js +0 -36
  339. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js.map +0 -1
  340. package/dist/src/extensions/TextColor/TextColorExtension.js +0 -29
  341. package/dist/src/extensions/TextColor/TextColorExtension.js.map +0 -1
  342. package/dist/src/extensions/TextColor/TextColorMark.js +0 -37
  343. package/dist/src/extensions/TextColor/TextColorMark.js.map +0 -1
  344. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js +0 -58
  345. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js.map +0 -1
  346. package/dist/src/extensions/UniqueID/UniqueID.js +0 -283
  347. package/dist/src/extensions/UniqueID/UniqueID.js.map +0 -1
  348. package/dist/src/extensions/getDraggableBlockFromElement.js +0 -13
  349. package/dist/src/extensions/getDraggableBlockFromElement.js.map +0 -1
  350. package/dist/src/extensions-shared/UiElementPosition.js +0 -2
  351. package/dist/src/extensions-shared/UiElementPosition.js.map +0 -1
  352. package/dist/src/i18n/dictionary.js +0 -4
  353. package/dist/src/i18n/dictionary.js.map +0 -1
  354. package/dist/src/i18n/locales/ar.js +0 -298
  355. package/dist/src/i18n/locales/ar.js.map +0 -1
  356. package/dist/src/i18n/locales/de.js +0 -313
  357. package/dist/src/i18n/locales/de.js.map +0 -1
  358. package/dist/src/i18n/locales/en.js +0 -314
  359. package/dist/src/i18n/locales/en.js.map +0 -1
  360. package/dist/src/i18n/locales/es.js +0 -312
  361. package/dist/src/i18n/locales/es.js.map +0 -1
  362. package/dist/src/i18n/locales/fr.js +0 -313
  363. package/dist/src/i18n/locales/fr.js.map +0 -1
  364. package/dist/src/i18n/locales/hr.js +0 -308
  365. package/dist/src/i18n/locales/hr.js.map +0 -1
  366. package/dist/src/i18n/locales/index.js +0 -16
  367. package/dist/src/i18n/locales/index.js.map +0 -1
  368. package/dist/src/i18n/locales/is.js +0 -305
  369. package/dist/src/i18n/locales/is.js.map +0 -1
  370. package/dist/src/i18n/locales/ja.js +0 -333
  371. package/dist/src/i18n/locales/ja.js.map +0 -1
  372. package/dist/src/i18n/locales/ko.js +0 -326
  373. package/dist/src/i18n/locales/ko.js.map +0 -1
  374. package/dist/src/i18n/locales/nl.js +0 -313
  375. package/dist/src/i18n/locales/nl.js.map +0 -1
  376. package/dist/src/i18n/locales/pl.js +0 -297
  377. package/dist/src/i18n/locales/pl.js.map +0 -1
  378. package/dist/src/i18n/locales/pt.js +0 -305
  379. package/dist/src/i18n/locales/pt.js.map +0 -1
  380. package/dist/src/i18n/locales/ru.js +0 -340
  381. package/dist/src/i18n/locales/ru.js.map +0 -1
  382. package/dist/src/i18n/locales/vi.js +0 -312
  383. package/dist/src/i18n/locales/vi.js.map +0 -1
  384. package/dist/src/i18n/locales/zh.js +0 -346
  385. package/dist/src/i18n/locales/zh.js.map +0 -1
  386. package/dist/src/index.js +0 -63
  387. package/dist/src/index.js.map +0 -1
  388. package/dist/src/pm-nodes/BlockContainer.js +0 -72
  389. package/dist/src/pm-nodes/BlockContainer.js.map +0 -1
  390. package/dist/src/pm-nodes/BlockGroup.js +0 -43
  391. package/dist/src/pm-nodes/BlockGroup.js.map +0 -1
  392. package/dist/src/pm-nodes/Doc.js +0 -7
  393. package/dist/src/pm-nodes/Doc.js.map +0 -1
  394. package/dist/src/pm-nodes/index.js +0 -4
  395. package/dist/src/pm-nodes/index.js.map +0 -1
  396. package/dist/src/schema/blocks/createSpec.js +0 -126
  397. package/dist/src/schema/blocks/createSpec.js.map +0 -1
  398. package/dist/src/schema/blocks/internal.js +0 -147
  399. package/dist/src/schema/blocks/internal.js.map +0 -1
  400. package/dist/src/schema/blocks/types.js +0 -2
  401. package/dist/src/schema/blocks/types.js.map +0 -1
  402. package/dist/src/schema/index.js +0 -11
  403. package/dist/src/schema/index.js.map +0 -1
  404. package/dist/src/schema/inlineContent/createSpec.js +0 -64
  405. package/dist/src/schema/inlineContent/createSpec.js.map +0 -1
  406. package/dist/src/schema/inlineContent/internal.js +0 -52
  407. package/dist/src/schema/inlineContent/internal.js.map +0 -1
  408. package/dist/src/schema/inlineContent/types.js +0 -10
  409. package/dist/src/schema/inlineContent/types.js.map +0 -1
  410. package/dist/src/schema/propTypes.js +0 -2
  411. package/dist/src/schema/propTypes.js.map +0 -1
  412. package/dist/src/schema/styles/createSpec.js +0 -48
  413. package/dist/src/schema/styles/createSpec.js.map +0 -1
  414. package/dist/src/schema/styles/internal.js +0 -53
  415. package/dist/src/schema/styles/internal.js.map +0 -1
  416. package/dist/src/schema/styles/types.js +0 -2
  417. package/dist/src/schema/styles/types.js.map +0 -1
  418. package/dist/src/util/EventEmitter.js +0 -33
  419. package/dist/src/util/EventEmitter.js.map +0 -1
  420. package/dist/src/util/browser.js +0 -17
  421. package/dist/src/util/browser.js.map +0 -1
  422. package/dist/src/util/combineByGroup.js +0 -20
  423. package/dist/src/util/combineByGroup.js.map +0 -1
  424. package/dist/src/util/esmDependencies.js +0 -35
  425. package/dist/src/util/esmDependencies.js.map +0 -1
  426. package/dist/src/util/string.js +0 -14
  427. package/dist/src/util/string.js.map +0 -1
  428. package/dist/src/util/typescript.js +0 -12
  429. package/dist/src/util/typescript.js.map +0 -1
  430. /package/src/api/clipboard/__snapshots__/{childToParent.html → internal/childToParent.html} +0 -0
  431. /package/src/api/clipboard/__snapshots__/{childrenToNextParent.html → internal/childrenToNextParent.html} +0 -0
  432. /package/src/api/clipboard/__snapshots__/{childrenToNextParentsChildren.html → internal/childrenToNextParentsChildren.html} +0 -0
  433. /package/src/api/clipboard/__snapshots__/{image.html → internal/image.html} +0 -0
  434. /package/src/api/clipboard/__snapshots__/{multipleChildren.html → internal/multipleChildren.html} +0 -0
  435. /package/src/api/clipboard/__snapshots__/{multipleStyledText.html → internal/multipleStyledText.html} +0 -0
  436. /package/src/api/clipboard/__snapshots__/{nestedImage.html → internal/nestedImage.html} +0 -0
  437. /package/src/api/clipboard/__snapshots__/{partialChildToParent.html → internal/partialChildToParent.html} +0 -0
  438. /package/src/api/clipboard/__snapshots__/{styledText.html → internal/styledText.html} +0 -0
  439. /package/src/api/clipboard/__snapshots__/{tableAllCells.html → internal/tableAllCells.html} +0 -0
  440. /package/src/api/clipboard/__snapshots__/{tableCell.html → internal/tableCell.html} +0 -0
  441. /package/src/api/clipboard/__snapshots__/{tableCellText.html → internal/tableCellText.html} +0 -0
  442. /package/src/api/clipboard/__snapshots__/{tableRow.html → internal/tableRow.html} +0 -0
  443. /package/src/api/clipboard/__snapshots__/{unstyledText.html → internal/unstyledText.html} +0 -0
  444. /package/types/src/api/clipboard/{clipboard.test.d.ts → clipboardExternal.test.d.ts} +0 -0
@@ -0,0 +1,124 @@
1
+ [
2
+ {
3
+ "children": [],
4
+ "content": [
5
+ {
6
+ "styles": {},
7
+ "text": "Paragraph",
8
+ "type": "text",
9
+ },
10
+ ],
11
+ "id": "0",
12
+ "props": {
13
+ "backgroundColor": "default",
14
+ "textAlignment": "left",
15
+ "textColor": "default",
16
+ },
17
+ "type": "paragraph",
18
+ },
19
+ {
20
+ "children": [],
21
+ "content": {
22
+ "columnWidths": [
23
+ undefined,
24
+ undefined,
25
+ undefined,
26
+ ],
27
+ "rows": [
28
+ {
29
+ "cells": [
30
+ [
31
+ {
32
+ "styles": {},
33
+ "text": "Table Cell",
34
+ "type": "text",
35
+ },
36
+ ],
37
+ [
38
+ {
39
+ "styles": {},
40
+ "text": "Table Cell",
41
+ "type": "text",
42
+ },
43
+ ],
44
+ [],
45
+ ],
46
+ },
47
+ {
48
+ "cells": [
49
+ [
50
+ {
51
+ "styles": {},
52
+ "text": "Table Cell",
53
+ "type": "text",
54
+ },
55
+ ],
56
+ [
57
+ {
58
+ "styles": {},
59
+ "text": "Cell 1",
60
+ "type": "text",
61
+ },
62
+ ],
63
+ [
64
+ {
65
+ "styles": {},
66
+ "text": "Cell 2",
67
+ "type": "text",
68
+ },
69
+ ],
70
+ ],
71
+ },
72
+ {
73
+ "cells": [
74
+ [],
75
+ [
76
+ {
77
+ "styles": {},
78
+ "text": "Cell 3",
79
+ "type": "text",
80
+ },
81
+ ],
82
+ [
83
+ {
84
+ "styles": {},
85
+ "text": "Cell 4",
86
+ "type": "text",
87
+ },
88
+ ],
89
+ ],
90
+ },
91
+ ],
92
+ "type": "tableContent",
93
+ },
94
+ "id": "1",
95
+ "props": {
96
+ "textColor": "default",
97
+ },
98
+ "type": "table",
99
+ },
100
+ {
101
+ "children": [],
102
+ "content": [
103
+ {
104
+ "styles": {},
105
+ "text": "Custom Paragraph",
106
+ "type": "text",
107
+ },
108
+ ],
109
+ "id": "2",
110
+ "props": {},
111
+ "type": "customParagraph",
112
+ },
113
+ {
114
+ "children": [],
115
+ "content": [],
116
+ "id": "3",
117
+ "props": {
118
+ "backgroundColor": "default",
119
+ "textAlignment": "left",
120
+ "textColor": "default",
121
+ },
122
+ "type": "paragraph",
123
+ },
124
+ ]
@@ -0,0 +1 @@
1
+ <p>Paragraph</p><h1>Heading</h1><ol><li><p>Numbered List Item</p></li></ol><ul><li><p>Bullet List Item</p></li><li><input type="checkbox"><p class="bn-inline-content">Check List Item</p></li></ul><pre><code class="bn-inline-content language-javascript">console.log("Hello World");</code></pre><table><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr></table><p>Add image</p><p data-text-color="red"></p>
@@ -0,0 +1 @@
1
+ <p data-text-color="red">Paragraph</p><h2 data-level="2">Heading</h2><ol start="2"><li><p data-start="2">Numbered List Item</p></li></ol><ul><li><p data-background-color="red">Bullet List Item</p></li><li><input type="checkbox" checked="" data-checked="true"><p class="bn-inline-content">Check List Item</p></li></ul><pre><code class="bn-inline-content language-typescript">console.log("Hello World");</code></pre><table><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr><tr><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td><td colspan="1" rowspan="1"><p>Table Cell</p></td></tr></table><figure data-name="1280px-Placeholder_view_vector.svg.png" data-url="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Placeholder_view_vector.svg/1280px-Placeholder_view_vector.svg.png" data-caption="Placeholder" data-preview-width="256"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Placeholder_view_vector.svg/1280px-Placeholder_view_vector.svg.png" alt="1280px-Placeholder_view_vector.svg.png" width="256"><figcaption>Placeholder</figcaption></figure><p></p>
@@ -0,0 +1,161 @@
1
+ import { Node } from "prosemirror-model";
2
+ import { Selection, TextSelection } from "prosemirror-state";
3
+ import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
4
+
5
+ import { PartialBlock } from "../../blocks/defaultBlocks.js";
6
+ import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
7
+ import { initializeESMDependencies } from "../../util/esmDependencies.js";
8
+ import { doPaste } from "../testUtil/paste.js";
9
+ import { schema } from "./testUtil.js";
10
+
11
+ type SelectionTestCase = {
12
+ testName: string;
13
+ createSelection: (doc: Node) => Selection;
14
+ } & (
15
+ | {
16
+ html: string;
17
+ }
18
+ | {
19
+ plainText: string;
20
+ }
21
+ );
22
+
23
+ // These tests are meant to test the pasting of external HTML in the editor.
24
+ // Each test case has an HTML string to be pasted, and a selection in the editor
25
+ // to paste at.
26
+ describe("Test external clipboard HTML", () => {
27
+ const initialContent: PartialBlock<typeof schema.blockSchema>[] = [
28
+ {
29
+ type: "paragraph",
30
+ content: "Paragraph",
31
+ },
32
+ {
33
+ type: "table",
34
+ content: {
35
+ type: "tableContent",
36
+ rows: [
37
+ {
38
+ cells: ["Table Cell", "Table Cell"],
39
+ },
40
+ {
41
+ cells: ["Table Cell", "Table Cell"],
42
+ },
43
+ ],
44
+ },
45
+ },
46
+ {
47
+ type: "customParagraph",
48
+ content: "Custom Paragraph",
49
+ },
50
+ {
51
+ type: "paragraph",
52
+ },
53
+ ];
54
+
55
+ let editor: BlockNoteEditor<typeof schema.blockSchema>;
56
+ const div = document.createElement("div");
57
+
58
+ beforeEach(() => {
59
+ editor.replaceBlocks(editor.document, initialContent);
60
+ });
61
+
62
+ beforeAll(async () => {
63
+ (window as any).__TEST_OPTIONS = (window as any).__TEST_OPTIONS || {};
64
+
65
+ editor = BlockNoteEditor.create({ schema });
66
+ editor.mount(div);
67
+
68
+ await initializeESMDependencies();
69
+ });
70
+
71
+ afterAll(() => {
72
+ editor.mount(undefined);
73
+ editor._tiptapEditor.destroy();
74
+ editor = undefined as any;
75
+
76
+ delete (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS;
77
+ });
78
+
79
+ // Sets the editor selection to the given start and end positions, then
80
+ // pastes the HTML and compares it the document after to a snapshot.
81
+ async function testPasteExternalHTML(testCase: SelectionTestCase) {
82
+ if (!editor.prosemirrorView) {
83
+ throw new Error("Editor view not initialized.");
84
+ }
85
+
86
+ editor.dispatch(
87
+ editor._tiptapEditor.state.tr.setSelection(
88
+ testCase.createSelection(editor.prosemirrorView.state.doc)
89
+ )
90
+ );
91
+
92
+ doPaste(
93
+ editor.prosemirrorView,
94
+ "plainText" in testCase ? testCase.plainText : "",
95
+ "html" in testCase ? testCase.html : "",
96
+ "plainText" in testCase,
97
+ new ClipboardEvent("paste")
98
+ );
99
+
100
+ expect(editor.document).toMatchFileSnapshot(
101
+ `./__snapshots__/external/${testCase.testName}.html`
102
+ );
103
+ }
104
+
105
+ const testCases: SelectionTestCase[] = [
106
+ {
107
+ testName: "pasteEndOfParagraph",
108
+ createSelection: (doc) => TextSelection.create(doc, 12),
109
+ html: `<p>Paragraph</p>`,
110
+ },
111
+ {
112
+ testName: "pasteEndOfParagraphText",
113
+ createSelection: (doc) => TextSelection.create(doc, 12),
114
+ plainText: `Paragraph`,
115
+ },
116
+ {
117
+ testName: "pasteImage",
118
+ createSelection: (doc) => TextSelection.create(doc, 12),
119
+ html: `<img src="exampleURL">`,
120
+ },
121
+ {
122
+ testName: "pasteTable",
123
+ createSelection: (doc) => TextSelection.create(doc, 12),
124
+ html: `<table>
125
+ <tr>
126
+ <td>Cell 1</td>
127
+ <td>Cell 2</td>
128
+ </tr>
129
+ <tr>
130
+ <td>Cell 3</td>
131
+ <td>Cell 4</td>
132
+ </tr>
133
+ </table>`,
134
+ },
135
+ {
136
+ testName: "pasteTableInExistingTable",
137
+ createSelection: (doc) => TextSelection.create(doc, 73),
138
+ html: `<table>
139
+ <tr>
140
+ <td>Cell 1</td>
141
+ <td>Cell 2</td>
142
+ </tr>
143
+ <tr>
144
+ <td>Cell 3</td>
145
+ <td>Cell 4</td>
146
+ </tr>
147
+ </table>`,
148
+ },
149
+ {
150
+ testName: "pasteParagraphInCustomBlock",
151
+ createSelection: (doc) => TextSelection.create(doc, 80, 96),
152
+ html: `<p>Paragraph</p>`,
153
+ },
154
+ ];
155
+
156
+ for (const testCase of testCases) {
157
+ it(`${testCase.testName}`, async () => {
158
+ await testPasteExternalHTML(testCase);
159
+ });
160
+ }
161
+ });
@@ -7,11 +7,13 @@ import { PartialBlock } from "../../blocks/defaultBlocks.js";
7
7
  import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
8
8
  import { initializeESMDependencies } from "../../util/esmDependencies.js";
9
9
  import { doPaste } from "../testUtil/paste.js";
10
+ import { schema } from "./testUtil.js";
10
11
  import { selectedFragmentToHTML } from "./toClipboard/copyExtension.js";
11
12
 
12
13
  type SelectionTestCase = {
13
14
  testName: string;
14
- createSelection: (doc: Node) => Selection;
15
+ createCopySelection: (doc: Node) => Selection;
16
+ createPasteSelection?: (doc: Node) => Selection;
15
17
  };
16
18
 
17
19
  // These tests are meant to test the copying of user selections in the editor.
@@ -19,7 +21,7 @@ type SelectionTestCase = {
19
21
  // as they are represented in the BlockNote API, whereas here we want to test
20
22
  // ProseMirror/TipTap selections directly.
21
23
  describe("Test ProseMirror selection clipboard HTML", () => {
22
- const initialContent: PartialBlock[] = [
24
+ const initialContent: PartialBlock<typeof schema.blockSchema>[] = [
23
25
  {
24
26
  type: "heading",
25
27
  props: {
@@ -138,9 +140,133 @@ describe("Test ProseMirror selection clipboard HTML", () => {
138
140
  // },
139
141
  // ],
140
142
  },
143
+ {
144
+ type: "paragraph",
145
+ content: "Paragraph",
146
+ },
147
+ {
148
+ type: "customParagraph",
149
+ content: "Paragraph",
150
+ },
151
+ {
152
+ type: "paragraph",
153
+ content: "Paragraph",
154
+ },
155
+ {
156
+ type: "heading",
157
+ content: "Heading",
158
+ },
159
+ {
160
+ type: "numberedListItem",
161
+ content: "Numbered List Item",
162
+ },
163
+ {
164
+ type: "bulletListItem",
165
+ content: "Bullet List Item",
166
+ },
167
+ {
168
+ type: "checkListItem",
169
+ content: "Check List Item",
170
+ },
171
+ {
172
+ type: "codeBlock",
173
+ content: 'console.log("Hello World");',
174
+ },
175
+ {
176
+ type: "table",
177
+ content: {
178
+ type: "tableContent",
179
+ rows: [
180
+ {
181
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
182
+ },
183
+ {
184
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
185
+ },
186
+ {
187
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
188
+ },
189
+ ],
190
+ },
191
+ },
192
+ {
193
+ type: "image",
194
+ },
195
+ {
196
+ type: "paragraph",
197
+ props: {
198
+ textColor: "red",
199
+ },
200
+ content: "Paragraph",
201
+ },
202
+ {
203
+ type: "heading",
204
+ props: {
205
+ level: 2,
206
+ },
207
+ content: "Heading",
208
+ },
209
+ {
210
+ type: "numberedListItem",
211
+ props: {
212
+ start: 2,
213
+ },
214
+ content: "Numbered List Item",
215
+ },
216
+ {
217
+ type: "bulletListItem",
218
+ props: {
219
+ backgroundColor: "red",
220
+ },
221
+ content: "Bullet List Item",
222
+ },
223
+ {
224
+ type: "checkListItem",
225
+ props: {
226
+ checked: true,
227
+ },
228
+ content: "Check List Item",
229
+ },
230
+ {
231
+ type: "codeBlock",
232
+ props: {
233
+ language: "typescript",
234
+ },
235
+ content: 'console.log("Hello World");',
236
+ },
237
+ {
238
+ type: "table",
239
+ content: {
240
+ type: "tableContent",
241
+ rows: [
242
+ {
243
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
244
+ },
245
+ {
246
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
247
+ },
248
+ {
249
+ cells: [["Table Cell"], ["Table Cell"], ["Table Cell"]],
250
+ },
251
+ ],
252
+ },
253
+ },
254
+ {
255
+ type: "image",
256
+ props: {
257
+ name: "1280px-Placeholder_view_vector.svg.png",
258
+ url: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Placeholder_view_vector.svg/1280px-Placeholder_view_vector.svg.png",
259
+ caption: "Placeholder",
260
+ showPreview: true,
261
+ previewWidth: 256,
262
+ },
263
+ },
264
+ {
265
+ type: "paragraph",
266
+ },
141
267
  ];
142
268
 
143
- let editor: BlockNoteEditor;
269
+ let editor: BlockNoteEditor<typeof schema.blockSchema>;
144
270
  const div = document.createElement("div");
145
271
 
146
272
  beforeEach(() => {
@@ -150,7 +276,7 @@ describe("Test ProseMirror selection clipboard HTML", () => {
150
276
  beforeAll(async () => {
151
277
  (window as any).__TEST_OPTIONS = (window as any).__TEST_OPTIONS || {};
152
278
 
153
- editor = BlockNoteEditor.create();
279
+ editor = BlockNoteEditor.create({ schema });
154
280
  editor.mount(div);
155
281
 
156
282
  await initializeESMDependencies();
@@ -173,7 +299,7 @@ describe("Test ProseMirror selection clipboard HTML", () => {
173
299
 
174
300
  editor.dispatch(
175
301
  editor._tiptapEditor.state.tr.setSelection(
176
- testCase.createSelection(editor.prosemirrorView.state.doc)
302
+ testCase.createCopySelection(editor.prosemirrorView.state.doc)
177
303
  )
178
304
  );
179
305
 
@@ -183,9 +309,17 @@ describe("Test ProseMirror selection clipboard HTML", () => {
183
309
  );
184
310
 
185
311
  expect(externalHTML).toMatchFileSnapshot(
186
- `./__snapshots__/${testCase.testName}.html`
312
+ `./__snapshots__/internal/${testCase.testName}.html`
187
313
  );
188
314
 
315
+ if (testCase.createPasteSelection) {
316
+ editor.dispatch(
317
+ editor._tiptapEditor.state.tr.setSelection(
318
+ testCase.createPasteSelection(editor.prosemirrorView.state.doc)
319
+ )
320
+ );
321
+ }
322
+
189
323
  const originalDocument = editor.document;
190
324
  doPaste(
191
325
  editor.prosemirrorView,
@@ -201,81 +335,95 @@ describe("Test ProseMirror selection clipboard HTML", () => {
201
335
 
202
336
  const testCases: SelectionTestCase[] = [
203
337
  // TODO: Consider adding test cases for nested blocks & double nested blocks.
204
- // Selection spans all of first heading's children.
338
+ // Copy/paste all of first heading's children.
205
339
  {
206
340
  testName: "multipleChildren",
207
- createSelection: (doc) => TextSelection.create(doc, 16, 78),
341
+ createCopySelection: (doc) => TextSelection.create(doc, 16, 78),
208
342
  },
209
- // Selection spans from start of first heading to end of its first child.
343
+ // Copy/paste from start of first heading to end of its first child.
210
344
  {
211
345
  testName: "childToParent",
212
- createSelection: (doc) => TextSelection.create(doc, 3, 34),
346
+ createCopySelection: (doc) => TextSelection.create(doc, 3, 34),
213
347
  },
214
- // Selection spans from middle of first heading to the middle of its first
215
- // child.
348
+ // Copy/paste from middle of first heading to the middle of its first child.
216
349
  {
217
350
  testName: "partialChildToParent",
218
- createSelection: (doc) => TextSelection.create(doc, 6, 23),
351
+ createCopySelection: (doc) => TextSelection.create(doc, 6, 23),
219
352
  },
220
- // Selection spans from start of first heading's first child to end of
221
- // second heading's content (does not include second heading's children).
353
+ // Copy/paste from start of first heading's first child to end of second
354
+ // heading's content (does not include second heading's children).
222
355
  {
223
356
  testName: "childrenToNextParent",
224
- createSelection: (doc) => TextSelection.create(doc, 16, 93),
357
+ createCopySelection: (doc) => TextSelection.create(doc, 16, 93),
225
358
  },
226
- // Selection spans from start of first heading's first child to end of
227
- // second heading's last child.
359
+ // Copy/paste from start of first heading's first child to end of second
360
+ // heading's last child.
228
361
  {
229
362
  testName: "childrenToNextParentsChildren",
230
- createSelection: (doc) => TextSelection.create(doc, 16, 159),
363
+ createCopySelection: (doc) => TextSelection.create(doc, 16, 159),
231
364
  },
232
- // Selection spans "Regular" text inside third heading.
365
+ // Copy/paste "Regular" text inside third heading.
233
366
  {
234
367
  testName: "unstyledText",
235
- createSelection: (doc) => TextSelection.create(doc, 175, 182),
368
+ createCopySelection: (doc) => TextSelection.create(doc, 175, 182),
236
369
  },
237
- // Selection spans "Italic" text inside third heading.
370
+ // Copy/paste "Italic" text inside third heading.
238
371
  {
239
372
  testName: "styledText",
240
- createSelection: (doc) => TextSelection.create(doc, 169, 175),
373
+ createCopySelection: (doc) => TextSelection.create(doc, 169, 175),
241
374
  },
242
- // Selection spans third heading's content (does not include third heading's
375
+ // Copy/paste third heading's content (does not include third heading's
243
376
  // children).
244
377
  {
245
378
  testName: "multipleStyledText",
246
- createSelection: (doc) => TextSelection.create(doc, 165, 182),
379
+ createCopySelection: (doc) => TextSelection.create(doc, 165, 182),
247
380
  },
248
- // Selection spans the image block content.
381
+ // Copy/paste the image block content.
249
382
  {
250
383
  testName: "image",
251
- createSelection: (doc) => NodeSelection.create(doc, 185),
384
+ createCopySelection: (doc) => NodeSelection.create(doc, 185),
252
385
  },
253
- // Selection spans from start of third heading to end of it's last
254
- // descendant.
386
+ // Copy/paste from start of third heading to end of it's last descendant.
255
387
  {
256
388
  testName: "nestedImage",
257
- createSelection: (doc) => TextSelection.create(doc, 165, 205),
389
+ createCopySelection: (doc) => TextSelection.create(doc, 165, 205),
258
390
  },
259
- // Selection spans text in first cell of the table.
391
+ // Copy/paste text in first cell of the table.
260
392
  {
261
393
  testName: "tableCellText",
262
- createSelection: (doc) => TextSelection.create(doc, 216, 226),
394
+ createCopySelection: (doc) => TextSelection.create(doc, 216, 226),
263
395
  },
264
- // Selection spans first cell of the table.
396
+ // Copy/paste first cell of the table.
265
397
  // TODO: External HTML is wrapped in unnecessary `tr` element.
266
398
  {
267
399
  testName: "tableCell",
268
- createSelection: (doc) => CellSelection.create(doc, 214),
400
+ createCopySelection: (doc) => CellSelection.create(doc, 214),
269
401
  },
270
- // Selection spans first row of the table.
402
+ // Copy/paste first row of the table.
271
403
  {
272
404
  testName: "tableRow",
273
- createSelection: (doc) => CellSelection.create(doc, 214, 228),
405
+ createCopySelection: (doc) => CellSelection.create(doc, 214, 228),
274
406
  },
275
- // Selection spans all cells of the table.
407
+ // Copy/paste all cells of the table.
276
408
  {
277
409
  testName: "tableAllCells",
278
- createSelection: (doc) => CellSelection.create(doc, 214, 258),
410
+ createCopySelection: (doc) => CellSelection.create(doc, 214, 258),
411
+ },
412
+ // Copy regular paragraph content and paste over custom block content.
413
+ {
414
+ testName: "paragraphInCustomBlock",
415
+ createCopySelection: (doc) => TextSelection.create(doc, 277, 286),
416
+ createPasteSelection: (doc) => TextSelection.create(doc, 290, 299),
417
+ },
418
+ // Copy/paste basic blocks.
419
+ {
420
+ testName: "basicBlocks",
421
+ createCopySelection: (doc) => TextSelection.create(doc, 303, 558),
422
+ },
423
+ // Copy/paste basic blocks with props.
424
+ {
425
+ testName: "basicBlocksWithProps",
426
+ createCopySelection: (doc) => TextSelection.create(doc, 558, 813),
279
427
  },
280
428
  ];
281
429
 
@@ -0,0 +1,27 @@
1
+ import { createBlockSpec } from "../../schema/index.js";
2
+ import { BlockNoteSchema } from "../../editor/BlockNoteSchema.js";
3
+ import { defaultBlockSpecs } from "../../blocks/defaultBlocks.js";
4
+
5
+ const CustomParagraph = createBlockSpec(
6
+ {
7
+ type: "customParagraph",
8
+ content: "inline",
9
+ propSchema: {},
10
+ },
11
+ {
12
+ render: () => {
13
+ const customParagraph = document.createElement("p");
14
+
15
+ return {
16
+ dom: customParagraph,
17
+ contentDOM: customParagraph,
18
+ };
19
+ },
20
+ }
21
+ );
22
+ export const schema = BlockNoteSchema.create({
23
+ blockSpecs: {
24
+ ...defaultBlockSpecs,
25
+ customParagraph: CustomParagraph as any,
26
+ },
27
+ });
@@ -80,6 +80,7 @@ function fragmentToExternalHTML<
80
80
  editor.schema.styleSchema
81
81
  );
82
82
 
83
+ // Wrap in table to ensure correct parsing by spreadsheet applications
83
84
  externalHTML = `<table>${externalHTMLExporter.exportInlineContent(
84
85
  ic as any,
85
86
  {}
@@ -0,0 +1 @@
1
+ <div data-page-break=""></div>
@@ -0,0 +1 @@
1
+ <div class="bn-block-group" data-node-type="blockGroup"><div class="bn-block-outer" data-node-type="blockOuter" data-id="1"><div class="bn-block" data-node-type="blockContainer" data-id="1"><div class="bn-block-content" data-content-type="pageBreak"><div class="bn-page-break" data-page-break=""></div></div></div></div></div>
@@ -104,7 +104,9 @@ function serializeBlock<
104
104
  for (const [name, spec] of Object.entries(
105
105
  editor.schema.blockSchema[block.type as any].propSchema
106
106
  )) {
107
- (props as any)[name] = spec.default;
107
+ if (spec.default !== undefined) {
108
+ (props as any)[name] = spec.default;
109
+ }
108
110
  }
109
111
  }
110
112
 
@@ -172,6 +174,10 @@ function serializeBlock<
172
174
  if (listType) {
173
175
  if (fragment.lastChild?.nodeName !== listType) {
174
176
  const list = doc.createElement(listType);
177
+
178
+ if (listType === "OL" && props?.start && props?.start !== 1) {
179
+ list.setAttribute("start", props.start + "");
180
+ }
175
181
  fragment.append(list);
176
182
  }
177
183
  const li = doc.createElement("li");