@blocknote/core 0.18.0 → 0.19.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 (508) hide show
  1. package/dist/blocknote.js +2191 -2068
  2. package/dist/blocknote.js.map +1 -1
  3. package/dist/blocknote.umd.cjs +9 -9
  4. package/dist/blocknote.umd.cjs.map +1 -1
  5. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js +27 -0
  6. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js.map +1 -0
  7. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js +99 -0
  8. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js.map +1 -0
  9. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js +97 -0
  10. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js.map +1 -0
  11. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js +88 -0
  12. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js.map +1 -0
  13. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js +116 -0
  14. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js.map +1 -0
  15. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js +106 -0
  16. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js.map +1 -0
  17. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js +57 -0
  18. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js.map +1 -0
  19. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js +43 -0
  20. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js.map +1 -0
  21. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js +27 -0
  22. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js.map +1 -0
  23. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js +29 -0
  24. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js.map +1 -0
  25. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js +157 -0
  26. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js.map +1 -0
  27. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js +27 -0
  28. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js.map +1 -0
  29. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js +64 -0
  30. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js.map +1 -0
  31. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js +145 -0
  32. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js.map +1 -0
  33. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js +252 -0
  34. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js.map +1 -0
  35. package/dist/src/api/blockManipulation/insertContentAt.js +64 -0
  36. package/dist/src/api/blockManipulation/insertContentAt.js.map +1 -0
  37. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js +76 -0
  38. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js.map +1 -0
  39. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js +33 -0
  40. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js.map +1 -0
  41. package/dist/src/api/blockManipulation/setupTestEnv.js +172 -0
  42. package/dist/src/api/blockManipulation/setupTestEnv.js.map +1 -0
  43. package/dist/src/api/clipboard/clipboard.test.js +246 -0
  44. package/dist/src/api/clipboard/clipboard.test.js.map +1 -0
  45. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js +8 -0
  46. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js.map +1 -0
  47. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js +38 -0
  48. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js.map +1 -0
  49. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js +109 -0
  50. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js.map +1 -0
  51. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js +26 -0
  52. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js.map +1 -0
  53. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js +57 -0
  54. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js.map +1 -0
  55. package/dist/src/api/clipboard/toClipboard/copyExtension.js +132 -0
  56. package/dist/src/api/clipboard/toClipboard/copyExtension.js.map +1 -0
  57. package/dist/src/api/exporters/html/externalHTMLExporter.js +35 -0
  58. package/dist/src/api/exporters/html/externalHTMLExporter.js.map +1 -0
  59. package/dist/src/api/exporters/html/htmlConversion.test.js +72 -0
  60. package/dist/src/api/exporters/html/htmlConversion.test.js.map +1 -0
  61. package/dist/src/api/exporters/html/internalHTMLSerializer.js +21 -0
  62. package/dist/src/api/exporters/html/internalHTMLSerializer.js.map +1 -0
  63. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js +141 -0
  64. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js.map +1 -0
  65. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js +96 -0
  66. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js.map +1 -0
  67. package/dist/src/api/exporters/markdown/markdownExporter.js +31 -0
  68. package/dist/src/api/exporters/markdown/markdownExporter.js.map +1 -0
  69. package/dist/src/api/exporters/markdown/markdownExporter.test.js +57 -0
  70. package/dist/src/api/exporters/markdown/markdownExporter.test.js.map +1 -0
  71. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js +33 -0
  72. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js.map +1 -0
  73. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js +37 -0
  74. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js.map +1 -0
  75. package/dist/src/api/getBlockInfoFromPos.js +171 -0
  76. package/dist/src/api/getBlockInfoFromPos.js.map +1 -0
  77. package/dist/src/api/nodeConversions/blockToNode.js +197 -0
  78. package/dist/src/api/nodeConversions/blockToNode.js.map +1 -0
  79. package/dist/src/api/nodeConversions/fragmentToBlocks.js +50 -0
  80. package/dist/src/api/nodeConversions/fragmentToBlocks.js.map +1 -0
  81. package/dist/src/api/nodeConversions/nodeConversions.test.js +54 -0
  82. package/dist/src/api/nodeConversions/nodeConversions.test.js.map +1 -0
  83. package/dist/src/api/nodeConversions/nodeToBlock.js +316 -0
  84. package/dist/src/api/nodeConversions/nodeToBlock.js.map +1 -0
  85. package/dist/src/api/nodeUtil.js +28 -0
  86. package/dist/src/api/nodeUtil.js.map +1 -0
  87. package/dist/src/api/parsers/html/parseHTML.js +19 -0
  88. package/dist/src/api/parsers/html/parseHTML.js.map +1 -0
  89. package/dist/src/api/parsers/html/parseHTML.test.js +470 -0
  90. package/dist/src/api/parsers/html/parseHTML.test.js.map +1 -0
  91. package/dist/src/api/parsers/html/util/nestedLists.js +106 -0
  92. package/dist/src/api/parsers/html/util/nestedLists.js.map +1 -0
  93. package/dist/src/api/parsers/html/util/nestedLists.test.js +166 -0
  94. package/dist/src/api/parsers/html/util/nestedLists.test.js.map +1 -0
  95. package/dist/src/api/parsers/markdown/parseMarkdown.js +52 -0
  96. package/dist/src/api/parsers/markdown/parseMarkdown.js.map +1 -0
  97. package/dist/src/api/parsers/markdown/parseMarkdown.test.js +109 -0
  98. package/dist/src/api/parsers/markdown/parseMarkdown.test.js.map +1 -0
  99. package/dist/src/api/testUtil/cases/customBlocks.js +313 -0
  100. package/dist/src/api/testUtil/cases/customBlocks.js.map +1 -0
  101. package/dist/src/api/testUtil/cases/customInlineContent.js +91 -0
  102. package/dist/src/api/testUtil/cases/customInlineContent.js.map +1 -0
  103. package/dist/src/api/testUtil/cases/customStyles.js +83 -0
  104. package/dist/src/api/testUtil/cases/customStyles.js.map +1 -0
  105. package/dist/src/api/testUtil/cases/defaultSchema.js +673 -0
  106. package/dist/src/api/testUtil/cases/defaultSchema.js.map +1 -0
  107. package/dist/src/api/testUtil/index.js +2 -0
  108. package/dist/src/api/testUtil/index.js.map +1 -0
  109. package/dist/src/api/testUtil/partialBlockTestUtil.js +114 -0
  110. package/dist/src/api/testUtil/partialBlockTestUtil.js.map +1 -0
  111. package/dist/src/api/testUtil/paste.js +29 -0
  112. package/dist/src/api/testUtil/paste.js.map +1 -0
  113. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js +97 -0
  114. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js.map +1 -0
  115. package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js +5 -0
  116. package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js.map +1 -0
  117. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js +273 -0
  118. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js.map +1 -0
  119. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js +90 -0
  120. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js.map +1 -0
  121. package/dist/src/blocks/FileBlockContent/FileBlockContent.js +70 -0
  122. package/dist/src/blocks/FileBlockContent/FileBlockContent.js.map +1 -0
  123. package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js +317 -0
  124. package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js.map +1 -0
  125. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js +15 -0
  126. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js.map +1 -0
  127. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js +141 -0
  128. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js.map +1 -0
  129. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js +106 -0
  130. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js.map +1 -0
  131. package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js +6 -0
  132. package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js.map +1 -0
  133. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js +111 -0
  134. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js.map +1 -0
  135. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js +218 -0
  136. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js.map +1 -0
  137. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js +41 -0
  138. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js.map +1 -0
  139. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js +58 -0
  140. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js.map +1 -0
  141. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js +128 -0
  142. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js.map +1 -0
  143. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js +51 -0
  144. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js.map +1 -0
  145. package/dist/src/blocks/TableBlockContent/TableBlockContent.js +130 -0
  146. package/dist/src/blocks/TableBlockContent/TableBlockContent.js.map +1 -0
  147. package/dist/src/blocks/TableBlockContent/TableExtension.js +57 -0
  148. package/dist/src/blocks/TableBlockContent/TableExtension.js.map +1 -0
  149. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js +103 -0
  150. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js.map +1 -0
  151. package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js +6 -0
  152. package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js.map +1 -0
  153. package/dist/src/blocks/defaultBlockHelpers.js +50 -0
  154. package/dist/src/blocks/defaultBlockHelpers.js.map +1 -0
  155. package/dist/src/blocks/defaultBlockTypeGuards.js +40 -0
  156. package/dist/src/blocks/defaultBlockTypeGuards.js.map +1 -0
  157. package/dist/src/blocks/defaultBlocks.js +50 -0
  158. package/dist/src/blocks/defaultBlocks.js.map +1 -0
  159. package/dist/src/blocks/defaultProps.js +19 -0
  160. package/dist/src/blocks/defaultProps.js.map +1 -0
  161. package/dist/src/editor/BlockNoteEditor.js +750 -0
  162. package/dist/src/editor/BlockNoteEditor.js.map +1 -0
  163. package/dist/src/editor/BlockNoteEditor.test.js +65 -0
  164. package/dist/src/editor/BlockNoteEditor.test.js.map +1 -0
  165. package/dist/src/editor/BlockNoteExtensions.js +149 -0
  166. package/dist/src/editor/BlockNoteExtensions.js.map +1 -0
  167. package/dist/src/editor/BlockNoteSchema.js +38 -0
  168. package/dist/src/editor/BlockNoteSchema.js.map +1 -0
  169. package/dist/src/editor/BlockNoteTipTapEditor.js +169 -0
  170. package/dist/src/editor/BlockNoteTipTapEditor.js.map +1 -0
  171. package/dist/src/editor/cursorPositionTypes.js +2 -0
  172. package/dist/src/editor/cursorPositionTypes.js.map +1 -0
  173. package/dist/src/editor/defaultColors.js +77 -0
  174. package/dist/src/editor/defaultColors.js.map +1 -0
  175. package/dist/src/editor/selectionTypes.js +2 -0
  176. package/dist/src/editor/selectionTypes.js.map +1 -0
  177. package/dist/src/editor/transformPasted.js +79 -0
  178. package/dist/src/editor/transformPasted.js.map +1 -0
  179. package/dist/src/exporter/Exporter.js +36 -0
  180. package/dist/src/exporter/Exporter.js.map +1 -0
  181. package/dist/src/exporter/index.js +3 -0
  182. package/dist/src/exporter/index.js.map +1 -0
  183. package/dist/src/exporter/mapping.js +12 -0
  184. package/dist/src/exporter/mapping.js.map +1 -0
  185. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js +30 -0
  186. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js.map +1 -0
  187. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js +39 -0
  188. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js.map +1 -0
  189. package/dist/src/extensions/FilePanel/FilePanelPlugin.js +131 -0
  190. package/dist/src/extensions/FilePanel/FilePanelPlugin.js.map +1 -0
  191. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js +195 -0
  192. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js.map +1 -0
  193. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js +309 -0
  194. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js.map +1 -0
  195. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js +247 -0
  196. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js.map +1 -0
  197. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js +51 -0
  198. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js.map +1 -0
  199. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js +81 -0
  200. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js.map +1 -0
  201. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js +183 -0
  202. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js.map +1 -0
  203. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js +68 -0
  204. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js.map +1 -0
  205. package/dist/src/extensions/SideMenu/SideMenuPlugin.js +339 -0
  206. package/dist/src/extensions/SideMenu/SideMenuPlugin.js.map +1 -0
  207. package/dist/src/extensions/SideMenu/dragging.js +128 -0
  208. package/dist/src/extensions/SideMenu/dragging.js.map +1 -0
  209. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js +2 -0
  210. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js.map +1 -0
  211. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js +2 -0
  212. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js.map +1 -0
  213. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js +245 -0
  214. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js.map +1 -0
  215. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js +26 -0
  216. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js.map +1 -0
  217. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js +244 -0
  218. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js.map +1 -0
  219. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js +553 -0
  220. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js.map +1 -0
  221. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js +36 -0
  222. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js.map +1 -0
  223. package/dist/src/extensions/TextColor/TextColorExtension.js +29 -0
  224. package/dist/src/extensions/TextColor/TextColorExtension.js.map +1 -0
  225. package/dist/src/extensions/TextColor/TextColorMark.js +37 -0
  226. package/dist/src/extensions/TextColor/TextColorMark.js.map +1 -0
  227. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js +58 -0
  228. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js.map +1 -0
  229. package/dist/src/extensions/UniqueID/UniqueID.js +283 -0
  230. package/dist/src/extensions/UniqueID/UniqueID.js.map +1 -0
  231. package/dist/src/extensions/getDraggableBlockFromElement.js +13 -0
  232. package/dist/src/extensions/getDraggableBlockFromElement.js.map +1 -0
  233. package/dist/src/extensions-shared/UiElementPosition.js +2 -0
  234. package/dist/src/extensions-shared/UiElementPosition.js.map +1 -0
  235. package/dist/src/i18n/dictionary.js +4 -0
  236. package/dist/src/i18n/dictionary.js.map +1 -0
  237. package/dist/src/i18n/locales/ar.js +298 -0
  238. package/dist/src/i18n/locales/ar.js.map +1 -0
  239. package/dist/src/i18n/locales/de.js +313 -0
  240. package/dist/src/i18n/locales/de.js.map +1 -0
  241. package/dist/src/i18n/locales/en.js +314 -0
  242. package/dist/src/i18n/locales/en.js.map +1 -0
  243. package/dist/src/i18n/locales/es.js +312 -0
  244. package/dist/src/i18n/locales/es.js.map +1 -0
  245. package/dist/src/i18n/locales/fr.js +313 -0
  246. package/dist/src/i18n/locales/fr.js.map +1 -0
  247. package/dist/src/i18n/locales/hr.js +308 -0
  248. package/dist/src/i18n/locales/hr.js.map +1 -0
  249. package/dist/src/i18n/locales/index.js +16 -0
  250. package/dist/src/i18n/locales/index.js.map +1 -0
  251. package/dist/src/i18n/locales/is.js +305 -0
  252. package/dist/src/i18n/locales/is.js.map +1 -0
  253. package/dist/src/i18n/locales/ja.js +333 -0
  254. package/dist/src/i18n/locales/ja.js.map +1 -0
  255. package/dist/src/i18n/locales/ko.js +326 -0
  256. package/dist/src/i18n/locales/ko.js.map +1 -0
  257. package/dist/src/i18n/locales/nl.js +313 -0
  258. package/dist/src/i18n/locales/nl.js.map +1 -0
  259. package/dist/src/i18n/locales/pl.js +297 -0
  260. package/dist/src/i18n/locales/pl.js.map +1 -0
  261. package/dist/src/i18n/locales/pt.js +305 -0
  262. package/dist/src/i18n/locales/pt.js.map +1 -0
  263. package/dist/src/i18n/locales/ru.js +340 -0
  264. package/dist/src/i18n/locales/ru.js.map +1 -0
  265. package/dist/src/i18n/locales/vi.js +312 -0
  266. package/dist/src/i18n/locales/vi.js.map +1 -0
  267. package/dist/src/i18n/locales/zh.js +346 -0
  268. package/dist/src/i18n/locales/zh.js.map +1 -0
  269. package/dist/src/index.js +55 -0
  270. package/dist/src/index.js.map +1 -0
  271. package/dist/src/pm-nodes/BlockContainer.js +72 -0
  272. package/dist/src/pm-nodes/BlockContainer.js.map +1 -0
  273. package/dist/src/pm-nodes/BlockGroup.js +43 -0
  274. package/dist/src/pm-nodes/BlockGroup.js.map +1 -0
  275. package/dist/src/pm-nodes/Doc.js +7 -0
  276. package/dist/src/pm-nodes/Doc.js.map +1 -0
  277. package/dist/src/pm-nodes/index.js +4 -0
  278. package/dist/src/pm-nodes/index.js.map +1 -0
  279. package/dist/src/schema/blocks/createSpec.js +126 -0
  280. package/dist/src/schema/blocks/createSpec.js.map +1 -0
  281. package/dist/src/schema/blocks/internal.js +147 -0
  282. package/dist/src/schema/blocks/internal.js.map +1 -0
  283. package/dist/src/schema/blocks/types.js +2 -0
  284. package/dist/src/schema/blocks/types.js.map +1 -0
  285. package/dist/src/schema/index.js +11 -0
  286. package/dist/src/schema/index.js.map +1 -0
  287. package/dist/src/schema/inlineContent/createSpec.js +64 -0
  288. package/dist/src/schema/inlineContent/createSpec.js.map +1 -0
  289. package/dist/src/schema/inlineContent/internal.js +52 -0
  290. package/dist/src/schema/inlineContent/internal.js.map +1 -0
  291. package/dist/src/schema/inlineContent/types.js +10 -0
  292. package/dist/src/schema/inlineContent/types.js.map +1 -0
  293. package/dist/src/schema/propTypes.js +2 -0
  294. package/dist/src/schema/propTypes.js.map +1 -0
  295. package/dist/src/schema/styles/createSpec.js +48 -0
  296. package/dist/src/schema/styles/createSpec.js.map +1 -0
  297. package/dist/src/schema/styles/internal.js +53 -0
  298. package/dist/src/schema/styles/internal.js.map +1 -0
  299. package/dist/src/schema/styles/types.js +2 -0
  300. package/dist/src/schema/styles/types.js.map +1 -0
  301. package/dist/src/util/EventEmitter.js +33 -0
  302. package/dist/src/util/EventEmitter.js.map +1 -0
  303. package/dist/src/util/browser.js +17 -0
  304. package/dist/src/util/browser.js.map +1 -0
  305. package/dist/src/util/combineByGroup.js +20 -0
  306. package/dist/src/util/combineByGroup.js.map +1 -0
  307. package/dist/src/util/esmDependencies.js +35 -0
  308. package/dist/src/util/esmDependencies.js.map +1 -0
  309. package/dist/src/util/string.js +14 -0
  310. package/dist/src/util/string.js.map +1 -0
  311. package/dist/src/util/typescript.js +12 -0
  312. package/dist/src/util/typescript.js.map +1 -0
  313. package/dist/style.css +1 -1
  314. package/dist/tsconfig.tsbuildinfo +1 -0
  315. package/dist/webpack-stats.json +1 -1
  316. package/package.json +5 -5
  317. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +2 -0
  318. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +2 -2
  319. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +104 -39
  320. package/src/api/blockManipulation/commands/moveBlock/moveBlock.ts +3 -5
  321. package/src/api/blockManipulation/commands/nestBlock/nestBlock.ts +100 -0
  322. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +1 -1
  323. package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +8 -4
  324. package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +11 -7
  325. package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +5 -5
  326. package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +192 -107
  327. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +48 -33
  328. package/src/api/clipboard/fromClipboard/handleFileInsertion.ts +1 -1
  329. package/src/api/clipboard/toClipboard/copyExtension.ts +1 -1
  330. package/src/api/exporters/html/htmlConversion.test.ts +1 -4
  331. package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +7 -1
  332. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +56 -19
  333. package/src/api/exporters/markdown/markdownExporter.test.ts +1 -4
  334. package/src/api/getBlockInfoFromPos.ts +113 -58
  335. package/src/api/nodeConversions/blockToNode.ts +50 -25
  336. package/src/api/nodeConversions/fragmentToBlocks.ts +18 -0
  337. package/src/api/nodeConversions/nodeToBlock.ts +24 -21
  338. package/src/api/nodeUtil.ts +1 -1
  339. package/src/api/testUtil/partialBlockTestUtil.ts +15 -3
  340. package/src/blocks/AudioBlockContent/AudioBlockContent.ts +4 -2
  341. package/src/blocks/FileBlockContent/fileBlockHelpers.ts +5 -4
  342. package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +19 -31
  343. package/src/blocks/ImageBlockContent/ImageBlockContent.ts +4 -2
  344. package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +5 -9
  345. package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +6 -10
  346. package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +1 -1
  347. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +11 -4
  348. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +5 -9
  349. package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +4 -8
  350. package/src/blocks/VideoBlockContent/VideoBlockContent.ts +4 -2
  351. package/src/blocks/defaultBlockHelpers.ts +7 -2
  352. package/src/editor/Block.css +22 -1
  353. package/src/editor/BlockNoteEditor.test.ts +2 -2
  354. package/src/editor/BlockNoteEditor.ts +18 -21
  355. package/src/editor/BlockNoteExtensions.ts +2 -3
  356. package/src/editor/BlockNoteTipTapEditor.ts +8 -1
  357. package/src/editor/defaultColors.ts +77 -0
  358. package/src/editor/editor.css +10 -0
  359. package/src/editor/transformPasted.ts +6 -3
  360. package/src/exporter/Exporter.ts +101 -0
  361. package/src/exporter/index.ts +2 -0
  362. package/src/exporter/mapping.ts +75 -0
  363. package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +201 -48
  364. package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +1 -1
  365. package/src/extensions/SideMenu/SideMenuPlugin.ts +141 -52
  366. package/src/extensions/SideMenu/dragging.ts +3 -54
  367. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +4 -6
  368. package/src/extensions/TableHandles/TableHandlesPlugin.ts +1 -1
  369. package/src/extensions/TrailingNode/TrailingNodeExtension.ts +1 -1
  370. package/src/extensions/getDraggableBlockFromElement.ts +19 -0
  371. package/src/i18n/locales/de.ts +5 -5
  372. package/src/i18n/locales/pt.ts +5 -5
  373. package/src/index.ts +9 -5
  374. package/src/pm-nodes/BlockContainer.ts +1 -1
  375. package/src/pm-nodes/BlockGroup.ts +2 -2
  376. package/src/pm-nodes/README.md +127 -28
  377. package/src/schema/blocks/createSpec.ts +4 -1
  378. package/src/schema/blocks/internal.ts +12 -2
  379. package/src/schema/blocks/types.ts +1 -1
  380. package/src/util/combineByGroup.ts +25 -0
  381. package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.d.ts +22 -2
  382. package/types/src/api/blockManipulation/commands/nestBlock/nestBlock.d.ts +5 -0
  383. package/types/src/api/getBlockInfoFromPos.d.ts +55 -5
  384. package/types/src/api/nodeConversions/blockToNode.d.ts +1 -1
  385. package/types/src/api/nodeConversions/nodeToBlock.d.ts +3 -1
  386. package/types/src/api/testUtil/partialBlockTestUtil.d.ts +2 -1
  387. package/types/src/blocks/AudioBlockContent/AudioBlockContent.d.ts +1 -0
  388. package/types/src/blocks/FileBlockContent/fileBlockHelpers.d.ts +1 -0
  389. package/types/src/blocks/ImageBlockContent/ImageBlockContent.d.ts +1 -0
  390. package/types/src/blocks/VideoBlockContent/VideoBlockContent.d.ts +1 -0
  391. package/types/src/editor/BlockNoteEditor.d.ts +4 -3
  392. package/types/src/editor/BlockNoteTipTapEditor.d.ts +1 -0
  393. package/types/src/editor/defaultColors.d.ts +76 -0
  394. package/types/src/exporter/Exporter.d.ts +43 -0
  395. package/types/src/exporter/index.d.ts +2 -0
  396. package/types/src/exporter/mapping.d.ts +30 -0
  397. package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +2 -1
  398. package/types/src/extensions/SideMenu/dragging.d.ts +1 -6
  399. package/types/src/extensions/getDraggableBlockFromElement.d.ts +5 -0
  400. package/types/src/index.d.ts +9 -5
  401. package/types/src/schema/blocks/createSpec.d.ts +1 -1
  402. package/types/src/schema/blocks/internal.d.ts +2 -2
  403. package/types/src/schema/blocks/types.d.ts +1 -1
  404. package/types/src/util/combineByGroup.d.ts +9 -0
  405. package/dist/angular-html-HQGguTAE.js +0 -33
  406. package/dist/angular-html-HQGguTAE.js.map +0 -1
  407. package/dist/angular-ts-q9PqJiJb.js +0 -22
  408. package/dist/angular-ts-q9PqJiJb.js.map +0 -1
  409. package/dist/astro-0iWgpDaK.js +0 -17
  410. package/dist/astro-0iWgpDaK.js.map +0 -1
  411. package/dist/blade-C3Z8AhvY.js +0 -19
  412. package/dist/blade-C3Z8AhvY.js.map +0 -1
  413. package/dist/c-TKJGJdXV.js +0 -7
  414. package/dist/c-TKJGJdXV.js.map +0 -1
  415. package/dist/coffee-CN_y6cG3.js +0 -9
  416. package/dist/coffee-CN_y6cG3.js.map +0 -1
  417. package/dist/cpp-Be_e67JE.js +0 -19
  418. package/dist/cpp-Be_e67JE.js.map +0 -1
  419. package/dist/css-DHLSoXzW.js +0 -7
  420. package/dist/css-DHLSoXzW.js.map +0 -1
  421. package/dist/glsl-8qSUIm5B.js +0 -9
  422. package/dist/glsl-8qSUIm5B.js.map +0 -1
  423. package/dist/graphql-D7_Dk2ma.js +0 -15
  424. package/dist/graphql-D7_Dk2ma.js.map +0 -1
  425. package/dist/haml-S3dmcfEW.js +0 -11
  426. package/dist/haml-S3dmcfEW.js.map +0 -1
  427. package/dist/handlebars-DaIrqVg3.js +0 -15
  428. package/dist/handlebars-DaIrqVg3.js.map +0 -1
  429. package/dist/html-Bx3A18fV.js +0 -11
  430. package/dist/html-Bx3A18fV.js.map +0 -1
  431. package/dist/html-derivative-Cf3KTZBS.js +0 -9
  432. package/dist/html-derivative-Cf3KTZBS.js.map +0 -1
  433. package/dist/http-BphR83YX.js +0 -15
  434. package/dist/http-BphR83YX.js.map +0 -1
  435. package/dist/imba-CmP25v0O.js +0 -9
  436. package/dist/imba-CmP25v0O.js.map +0 -1
  437. package/dist/java-Dg4kxH6C.js +0 -7
  438. package/dist/java-Dg4kxH6C.js.map +0 -1
  439. package/dist/javascript-CipAzIn1.js +0 -7
  440. package/dist/javascript-CipAzIn1.js.map +0 -1
  441. package/dist/jinja-tioldiz6.js +0 -12
  442. package/dist/jinja-tioldiz6.js.map +0 -1
  443. package/dist/jison-DWJFEE_I.js +0 -9
  444. package/dist/jison-DWJFEE_I.js.map +0 -1
  445. package/dist/json-_04EL6MS.js +0 -7
  446. package/dist/json-_04EL6MS.js.map +0 -1
  447. package/dist/json5-Dwmp5XFI.js +0 -7
  448. package/dist/json5-Dwmp5XFI.js.map +0 -1
  449. package/dist/jsonc-LqD5auy0.js +0 -7
  450. package/dist/jsonc-LqD5auy0.js.map +0 -1
  451. package/dist/jsonl-B4yVuYQH.js +0 -7
  452. package/dist/jsonl-B4yVuYQH.js.map +0 -1
  453. package/dist/jsx-Mg4WaD5k.js +0 -7
  454. package/dist/jsx-Mg4WaD5k.js.map +0 -1
  455. package/dist/julia-CWi-ZdpN.js +0 -17
  456. package/dist/julia-CWi-ZdpN.js.map +0 -1
  457. package/dist/less-BBvTHIGe.js +0 -7
  458. package/dist/less-BBvTHIGe.js.map +0 -1
  459. package/dist/markdown-DAXqtk9a.js +0 -7
  460. package/dist/markdown-DAXqtk9a.js.map +0 -1
  461. package/dist/marko-0aaNgUGV.js +0 -15
  462. package/dist/marko-0aaNgUGV.js.map +0 -1
  463. package/dist/mdc-hXJ2B4O0.js +0 -13
  464. package/dist/mdc-hXJ2B4O0.js.map +0 -1
  465. package/dist/mdx-CSCKbb_f.js +0 -7
  466. package/dist/mdx-CSCKbb_f.js.map +0 -1
  467. package/dist/php-B_-4RJ09.js +0 -19
  468. package/dist/php-B_-4RJ09.js.map +0 -1
  469. package/dist/postcss-SJfTvo_B.js +0 -7
  470. package/dist/postcss-SJfTvo_B.js.map +0 -1
  471. package/dist/pug-3q2tx0nf.js +0 -13
  472. package/dist/pug-3q2tx0nf.js.map +0 -1
  473. package/dist/python-Dpup1-fE.js +0 -7
  474. package/dist/python-Dpup1-fE.js.map +0 -1
  475. package/dist/r-Chyv38Fv.js +0 -7
  476. package/dist/r-Chyv38Fv.js.map +0 -1
  477. package/dist/regexp-BF0hfxNW.js +0 -7
  478. package/dist/regexp-BF0hfxNW.js.map +0 -1
  479. package/dist/sass-p2RMoqDT.js +0 -7
  480. package/dist/sass-p2RMoqDT.js.map +0 -1
  481. package/dist/scss-DmlHSoOY.js +0 -9
  482. package/dist/scss-DmlHSoOY.js.map +0 -1
  483. package/dist/shellscript-CZpPN8_x.js +0 -7
  484. package/dist/shellscript-CZpPN8_x.js.map +0 -1
  485. package/dist/sql-DtlkUz2m.js +0 -7
  486. package/dist/sql-DtlkUz2m.js.map +0 -1
  487. package/dist/stylus-DEr8eSLm.js +0 -7
  488. package/dist/stylus-DEr8eSLm.js.map +0 -1
  489. package/dist/svelte-BRIJF62h.js +0 -15
  490. package/dist/svelte-BRIJF62h.js.map +0 -1
  491. package/dist/ts-tags-qkUtuI0N.js +0 -42
  492. package/dist/ts-tags-qkUtuI0N.js.map +0 -1
  493. package/dist/tsx-DTfbgJxi.js +0 -7
  494. package/dist/tsx-DTfbgJxi.js.map +0 -1
  495. package/dist/typescript-CCd4aQHh.js +0 -7
  496. package/dist/typescript-CCd4aQHh.js.map +0 -1
  497. package/dist/vue-B3TdbERm.js +0 -32
  498. package/dist/vue-B3TdbERm.js.map +0 -1
  499. package/dist/vue-html-BGmTBZk0.js +0 -11
  500. package/dist/vue-html-BGmTBZk0.js.map +0 -1
  501. package/dist/wasm-VDIDph3E.js +0 -7
  502. package/dist/wasm-VDIDph3E.js.map +0 -1
  503. package/dist/wgsl-2np_U3Z8.js +0 -7
  504. package/dist/wgsl-2np_U3Z8.js.map +0 -1
  505. package/dist/xml-CNyphW9R.js +0 -9
  506. package/dist/xml-CNyphW9R.js.map +0 -1
  507. package/dist/yaml-DxFiVFcM.js +0 -7
  508. package/dist/yaml-DxFiVFcM.js.map +0 -1
@@ -36,7 +36,7 @@ const BulletListItemBlockContent = createStronglyTypedTiptapNode({
36
36
  .command(
37
37
  updateBlockCommand(
38
38
  this.options.editor,
39
- blockInfo.blockContainer.beforePos,
39
+ blockInfo.bnBlock.beforePos,
40
40
  {
41
41
  type: "bulletListItem",
42
42
  props: {},
@@ -60,14 +60,10 @@ const BulletListItemBlockContent = createStronglyTypedTiptapNode({
60
60
  }
61
61
 
62
62
  return this.options.editor.commands.command(
63
- updateBlockCommand(
64
- this.options.editor,
65
- blockInfo.blockContainer.beforePos,
66
- {
67
- type: "bulletListItem",
68
- props: {},
69
- }
70
- )
63
+ updateBlockCommand(this.options.editor, blockInfo.bnBlock.beforePos, {
64
+ type: "bulletListItem",
65
+ props: {},
66
+ })
71
67
  );
72
68
  },
73
69
  };
@@ -57,7 +57,7 @@ const checkListItemBlockContent = createStronglyTypedTiptapNode({
57
57
  .command(
58
58
  updateBlockCommand(
59
59
  this.options.editor,
60
- blockInfo.blockContainer.beforePos,
60
+ blockInfo.bnBlock.beforePos,
61
61
  {
62
62
  type: "checkListItem",
63
63
  props: {
@@ -83,7 +83,7 @@ const checkListItemBlockContent = createStronglyTypedTiptapNode({
83
83
  .command(
84
84
  updateBlockCommand(
85
85
  this.options.editor,
86
- blockInfo.blockContainer.beforePos,
86
+ blockInfo.bnBlock.beforePos,
87
87
  {
88
88
  type: "checkListItem",
89
89
  props: {
@@ -109,14 +109,10 @@ const checkListItemBlockContent = createStronglyTypedTiptapNode({
109
109
  }
110
110
 
111
111
  return this.editor.commands.command(
112
- updateBlockCommand(
113
- this.options.editor,
114
- blockInfo.blockContainer.beforePos,
115
- {
116
- type: "checkListItem",
117
- props: {},
118
- }
119
- )
112
+ updateBlockCommand(this.options.editor, blockInfo.bnBlock.beforePos, {
113
+ type: "checkListItem",
114
+ props: {},
115
+ })
120
116
  );
121
117
  },
122
118
  };
@@ -5,7 +5,7 @@ import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
5
5
 
6
6
  export const handleEnter = (editor: BlockNoteEditor<any, any, any>) => {
7
7
  const ttEditor = editor._tiptapEditor;
8
- const { blockContent, blockContainer } = getBlockInfoFromSelection(
8
+ const { blockContent, bnBlock: blockContainer } = getBlockInfoFromSelection(
9
9
  ttEditor.state
10
10
  );
11
11
 
@@ -27,24 +27,30 @@ export const NumberedListIndexingPlugin = () => {
27
27
  node,
28
28
  });
29
29
 
30
+ if (!blockInfo.isBlockContainer) {
31
+ throw new Error("impossible");
32
+ }
33
+
30
34
  // Checks if this block is the start of a new ordered list, i.e. if it's the first block in the document, the
31
35
  // first block in its nesting level, or the previous block is not an ordered list item.
32
36
 
33
37
  const prevBlock = tr.doc.resolve(
34
- blockInfo.blockContainer.beforePos
38
+ blockInfo.bnBlock.beforePos
35
39
  ).nodeBefore;
36
40
 
37
41
  if (prevBlock) {
38
42
  const prevBlockInfo = getBlockInfo({
39
- posBeforeNode:
40
- blockInfo.blockContainer.beforePos - prevBlock.nodeSize,
43
+ posBeforeNode: blockInfo.bnBlock.beforePos - prevBlock.nodeSize,
41
44
  node: prevBlock,
42
45
  });
43
46
 
44
47
  const isPrevBlockOrderedListItem =
45
- prevBlockInfo.blockContent.node.type.name === "numberedListItem";
48
+ prevBlockInfo.blockNoteType === "numberedListItem";
46
49
 
47
50
  if (isPrevBlockOrderedListItem) {
51
+ if (!prevBlockInfo.isBlockContainer) {
52
+ throw new Error("impossible");
53
+ }
48
54
  const prevBlockIndex =
49
55
  prevBlockInfo.blockContent.node.attrs["index"];
50
56
 
@@ -59,6 +65,7 @@ export const NumberedListIndexingPlugin = () => {
59
65
  modified = true;
60
66
 
61
67
  tr.setNodeMarkup(blockInfo.blockContent.beforePos, undefined, {
68
+ ...contentNode.attrs,
62
69
  index: newIndex,
63
70
  });
64
71
  }
@@ -49,7 +49,7 @@ const NumberedListItemBlockContent = createStronglyTypedTiptapNode({
49
49
  .command(
50
50
  updateBlockCommand(
51
51
  this.options.editor,
52
- blockInfo.blockContainer.beforePos,
52
+ blockInfo.bnBlock.beforePos,
53
53
  {
54
54
  type: "numberedListItem",
55
55
  props: {},
@@ -73,14 +73,10 @@ const NumberedListItemBlockContent = createStronglyTypedTiptapNode({
73
73
  }
74
74
 
75
75
  return this.editor.commands.command(
76
- updateBlockCommand(
77
- this.options.editor,
78
- blockInfo.blockContainer.beforePos,
79
- {
80
- type: "numberedListItem",
81
- props: {},
82
- }
83
- )
76
+ updateBlockCommand(this.options.editor, blockInfo.bnBlock.beforePos, {
77
+ type: "numberedListItem",
78
+ props: {},
79
+ })
84
80
  );
85
81
  },
86
82
  };
@@ -25,14 +25,10 @@ export const ParagraphBlockContent = createStronglyTypedTiptapNode({
25
25
  }
26
26
 
27
27
  return this.editor.commands.command(
28
- updateBlockCommand(
29
- this.options.editor,
30
- blockInfo.blockContainer.beforePos,
31
- {
32
- type: "paragraph",
33
- props: {},
34
- }
35
- )
28
+ updateBlockCommand(this.options.editor, blockInfo.bnBlock.beforePos, {
29
+ type: "paragraph",
30
+ props: {},
31
+ })
36
32
  );
37
33
  },
38
34
  };
@@ -18,6 +18,9 @@ import {
18
18
  } from "../FileBlockContent/fileBlockHelpers.js";
19
19
  import { parseVideoElement } from "./videoBlockHelpers.js";
20
20
 
21
+ export const FILE_VIDEO_ICON_SVG =
22
+ '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934ZM8 5V19H16V5H8ZM4 5V7H6V5H4ZM18 5V7H20V5H18ZM4 9V11H6V9H4ZM18 9V11H20V9H18ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z"></path></svg>';
23
+
21
24
  export const videoPropSchema = {
22
25
  textAlignment: defaultProps.textAlignment,
23
26
  backgroundColor: defaultProps.backgroundColor,
@@ -56,8 +59,7 @@ export const videoRender = (
56
59
  editor: BlockNoteEditor<any, any, any>
57
60
  ) => {
58
61
  const icon = document.createElement("div");
59
- icon.innerHTML =
60
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934ZM8 5V19H16V5H8ZM4 5V7H6V5H4ZM18 5V7H20V5H18ZM4 9V11H6V9H4ZM18 9V11H20V9H18ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z"></path></svg>';
62
+ icon.innerHTML = FILE_VIDEO_ICON_SVG;
61
63
 
62
64
  const video = document.createElement("video");
63
65
  video.className = "bn-visual-media";
@@ -67,8 +67,13 @@ export const defaultBlockToHTML = <
67
67
  dom: HTMLElement;
68
68
  contentDOM?: HTMLElement;
69
69
  } => {
70
- const node = blockToNode(block, editor.pmSchema, editor.schema.styleSchema)
71
- .firstChild!;
70
+ let node = blockToNode(block, editor.pmSchema, editor.schema.styleSchema);
71
+
72
+ if (node.type.name === "blockContainer") {
73
+ // for regular blocks, get the toDOM spec from the blockContent node
74
+ node = node.firstChild!;
75
+ }
76
+
72
77
  const toDOM = editor.pmSchema.nodes[node.type.name].spec.toDOM;
73
78
 
74
79
  if (toDOM === undefined) {
@@ -403,6 +403,7 @@ NESTED BLOCKS
403
403
  [data-file-block] .bn-file-caption {
404
404
  font-size: 0.8em;
405
405
  padding-block: 4px;
406
+ word-break: break-word;
406
407
  }
407
408
 
408
409
  [data-file-block] .bn-file-caption:empty {
@@ -472,7 +473,7 @@ NESTED BLOCKS
472
473
  }
473
474
 
474
475
  [data-background-color="orange"] {
475
- background-color: #faebdd;
476
+ background-color: #f6e9d9;
476
477
  }
477
478
 
478
479
  [data-background-color="yellow"] {
@@ -515,3 +516,23 @@ NESTED BLOCKS
515
516
  justify-content: flex-start;
516
517
  text-align: justify;
517
518
  }
519
+
520
+ .bn-block-column-list {
521
+ display: flex;
522
+ flex-direction: row;
523
+ }
524
+
525
+ .bn-block-column {
526
+ flex: 1;
527
+ padding: 12px 20px;
528
+ /* scroll if we overflow, for example when tables or images are in the column */
529
+ overflow-x: auto;
530
+ }
531
+
532
+ .bn-block-column:first-child {
533
+ padding-left: 0;
534
+ }
535
+
536
+ .bn-block-column:last-child {
537
+ padding-right: 0;
538
+ }
@@ -14,8 +14,8 @@ it("creates an editor", () => {
14
14
  editor._tiptapEditor.state.doc,
15
15
  2
16
16
  );
17
- const { blockContent } = getBlockInfo(posInfo);
18
- expect(blockContent.node.type.name).toEqual("paragraph");
17
+ const info = getBlockInfo(posInfo);
18
+ expect(info.blockNoteType).toEqual("paragraph");
19
19
  });
20
20
 
21
21
  it("immediately replaces doc", async () => {
@@ -7,6 +7,12 @@ import {
7
7
  moveBlockDown,
8
8
  moveBlockUp,
9
9
  } from "../api/blockManipulation/commands/moveBlock/moveBlock.js";
10
+ import {
11
+ canNestBlock,
12
+ canUnnestBlock,
13
+ nestBlock,
14
+ unnestBlock,
15
+ } from "../api/blockManipulation/commands/nestBlock/nestBlock.js";
10
16
  import { removeBlocks } from "../api/blockManipulation/commands/removeBlocks/removeBlocks.js";
11
17
  import { replaceBlocks } from "../api/blockManipulation/commands/replaceBlocks/replaceBlocks.js";
12
18
  import { updateBlock } from "../api/blockManipulation/commands/updateBlock/updateBlock.js";
@@ -17,7 +23,6 @@ import {
17
23
  } from "../api/blockManipulation/selections/textCursorPosition/textCursorPosition.js";
18
24
  import { createExternalHTMLExporter } from "../api/exporters/html/externalHTMLExporter.js";
19
25
  import { blocksToMarkdown } from "../api/exporters/markdown/markdownExporter.js";
20
- import { getBlockInfoFromSelection } from "../api/getBlockInfoFromPos.js";
21
26
  import { HTMLToBlocks } from "../api/parsers/html/parseHTML.js";
22
27
  import { markdownToBlocks } from "../api/parsers/markdown/parseMarkdown.js";
23
28
  import {
@@ -66,7 +71,8 @@ import { PlaceholderPlugin } from "../extensions/Placeholder/PlaceholderPlugin.j
66
71
  import { Dictionary } from "../i18n/dictionary.js";
67
72
  import { en } from "../i18n/locales/index.js";
68
73
 
69
- import { Transaction } from "@tiptap/pm/state";
74
+ import { Plugin, Transaction } from "@tiptap/pm/state";
75
+ import { dropCursor } from "prosemirror-dropcursor";
70
76
  import { createInternalHTMLSerializer } from "../api/exporters/html/internalHTMLSerializer.js";
71
77
  import { inlineContentToNodes } from "../api/nodeConversions/blockToNode.js";
72
78
  import { nodeToBlock } from "../api/nodeConversions/nodeToBlock.js";
@@ -90,7 +96,7 @@ export type BlockNoteEditorOptions<
90
96
  /**
91
97
  * A dictionary object containing translations for the editor.
92
98
  */
93
- dictionary?: Dictionary;
99
+ dictionary?: Dictionary & Record<string, any>;
94
100
 
95
101
  /**
96
102
  * @deprecated, provide placeholders via dictionary instead
@@ -190,6 +196,8 @@ export type BlockNoteEditorOptions<
190
196
  * (note that the id is always set on the `data-id` attribute)
191
197
  */
192
198
  setIdAttribute?: boolean;
199
+
200
+ dropCursor?: (opts: any) => Plugin;
193
201
  };
194
202
 
195
203
  const blockNoteTipTapOptions = {
@@ -236,7 +244,7 @@ export class BlockNoteEditor<
236
244
  /**
237
245
  * The dictionary contains translations for the editor.
238
246
  */
239
- public readonly dictionary: Dictionary;
247
+ public readonly dictionary: Dictionary & Record<string, any>;
240
248
 
241
249
  /**
242
250
  * The schema of the editor. The schema defines which Blocks, InlineContent, and Styles are available in the editor.
@@ -369,6 +377,7 @@ export class BlockNoteEditor<
369
377
  setIdAttribute: newOptions.setIdAttribute,
370
378
  });
371
379
 
380
+ const dropCursorPlugin: any = this.options.dropCursor ?? dropCursor;
372
381
  const blockNoteUIExtension = Extension.create({
373
382
  name: "BlockNoteUIExtension",
374
383
 
@@ -380,6 +389,7 @@ export class BlockNoteEditor<
380
389
  this.suggestionMenus.plugin,
381
390
  ...(this.filePanel ? [this.filePanel.plugin] : []),
382
391
  ...(this.tableHandles ? [this.tableHandles.plugin] : []),
392
+ dropCursorPlugin({ width: 5, color: "#ddeeff", editor: this }),
383
393
  PlaceholderPlugin(this, newOptions.placeholders),
384
394
  NodeSelectionKeyboardPlugin(),
385
395
  ...(this.options.animations ?? true
@@ -962,41 +972,28 @@ export class BlockNoteEditor<
962
972
  * Checks if the block containing the text cursor can be nested.
963
973
  */
964
974
  public canNestBlock() {
965
- const { blockContainer } = getBlockInfoFromSelection(
966
- this._tiptapEditor.state
967
- );
968
-
969
- return (
970
- this._tiptapEditor.state.doc.resolve(blockContainer.beforePos)
971
- .nodeBefore !== null
972
- );
975
+ return canNestBlock(this);
973
976
  }
974
977
 
975
978
  /**
976
979
  * Nests the block containing the text cursor into the block above it.
977
980
  */
978
981
  public nestBlock() {
979
- this._tiptapEditor.commands.sinkListItem("blockContainer");
982
+ nestBlock(this);
980
983
  }
981
984
 
982
985
  /**
983
986
  * Checks if the block containing the text cursor is nested.
984
987
  */
985
988
  public canUnnestBlock() {
986
- const { blockContainer } = getBlockInfoFromSelection(
987
- this._tiptapEditor.state
988
- );
989
-
990
- return (
991
- this._tiptapEditor.state.doc.resolve(blockContainer.beforePos).depth > 1
992
- );
989
+ return canUnnestBlock(this);
993
990
  }
994
991
 
995
992
  /**
996
993
  * Lifts the block containing the text cursor out of its parent.
997
994
  */
998
995
  public unnestBlock() {
999
- this._tiptapEditor.commands.liftListItem("blockContainer");
996
+ unnestBlock(this);
1000
997
  }
1001
998
 
1002
999
  /**
@@ -4,7 +4,6 @@ import type { BlockNoteEditor } from "./BlockNoteEditor.js";
4
4
 
5
5
  import Collaboration from "@tiptap/extension-collaboration";
6
6
  import CollaborationCursor from "@tiptap/extension-collaboration-cursor";
7
- import { Dropcursor } from "@tiptap/extension-dropcursor";
8
7
  import { Gapcursor } from "@tiptap/extension-gapcursor";
9
8
  import { HardBreak } from "@tiptap/extension-hard-break";
10
9
  import { History } from "@tiptap/extension-history";
@@ -70,7 +69,8 @@ export const getBlockNoteExtensions = <
70
69
 
71
70
  // DropCursor,
72
71
  UniqueID.configure({
73
- types: ["blockContainer"],
72
+ // everything from bnBlock group (nodes that represent a BlockNote block should have an id)
73
+ types: ["blockContainer", "columnList", "column"],
74
74
  setIdAttribute: opts.setIdAttribute,
75
75
  }),
76
76
  HardBreak.extend({ priority: 10 }),
@@ -155,7 +155,6 @@ export const getBlockNoteExtensions = <
155
155
  createPasteFromClipboardExtension(opts.editor),
156
156
  createDropFileExtension(opts.editor),
157
157
 
158
- Dropcursor.configure({ width: 5, color: "#ddeeff" }),
159
158
  // This needs to be at the bottom of this list, because Key events (such as enter, when selecting a /command),
160
159
  // should be handled before Enter handlers in other components like splitListItem
161
160
  ...(opts.trailingBlock === undefined || opts.trailingBlock
@@ -24,7 +24,7 @@ export type BlockNoteTipTapEditorOptions = Partial<
24
24
  // @ts-ignore
25
25
  export class BlockNoteTipTapEditor extends TiptapEditor {
26
26
  private _state: EditorState;
27
-
27
+ private _creating = false;
28
28
  public static create = (
29
29
  options: BlockNoteTipTapEditorOptions,
30
30
  styleSchema: StyleSchema
@@ -151,8 +151,12 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
151
151
  * Replace the default `createView` method with a custom one - which we call on mount
152
152
  */
153
153
  private createViewAlternative() {
154
+ this._creating = true;
154
155
  // Without queueMicrotask, custom IC / styles will give a React FlushSync error
155
156
  queueMicrotask(() => {
157
+ if (!this._creating) {
158
+ return;
159
+ }
156
160
  this.view = new EditorView(
157
161
  { mount: this.options.element as any }, // use mount option so that we reuse the existing element instead of creating a new one
158
162
  {
@@ -178,6 +182,7 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
178
182
  this.commands.focus(this.options.autofocus);
179
183
  this.emit("create", { editor: this });
180
184
  this.isInitialized = true;
185
+ this._creating = false;
181
186
  });
182
187
  }
183
188
 
@@ -189,6 +194,8 @@ export class BlockNoteTipTapEditor extends TiptapEditor {
189
194
  public mount = (element?: HTMLElement | null) => {
190
195
  if (!element) {
191
196
  this.destroy();
197
+ // cancel pending microtask
198
+ this._creating = false;
192
199
  } else {
193
200
  this.options.element = element;
194
201
  // @ts-ignore
@@ -0,0 +1,77 @@
1
+ export const COLORS_DEFAULT = {
2
+ gray: {
3
+ text: "#9b9a97",
4
+ background: "#ebeced",
5
+ },
6
+ brown: {
7
+ text: "#64473a",
8
+ background: "#e9e5e3",
9
+ },
10
+ red: {
11
+ text: "#e03e3e",
12
+ background: "#fbe4e4",
13
+ },
14
+ orange: {
15
+ text: "#d9730d",
16
+ background: "#f6e9d9",
17
+ },
18
+ yellow: {
19
+ text: "#dfab01",
20
+ background: "#fbf3db",
21
+ },
22
+ green: {
23
+ text: "#4d6461",
24
+ background: "#ddedea",
25
+ },
26
+ blue: {
27
+ text: "#0b6e99",
28
+ background: "#ddebf1",
29
+ },
30
+ purple: {
31
+ text: "#6940a5",
32
+ background: "#eae4f2",
33
+ },
34
+ pink: {
35
+ text: "#ad1a72",
36
+ background: "#f4dfeb",
37
+ },
38
+ };
39
+
40
+ export const COLORS_DARK_MODE_DEFAULT = {
41
+ gray: {
42
+ text: "#bebdb8",
43
+ background: "#9b9a97",
44
+ },
45
+ brown: {
46
+ text: "#8e6552",
47
+ background: "#64473a",
48
+ },
49
+ red: {
50
+ text: "#ec4040",
51
+ background: "#be3434",
52
+ },
53
+ orange: {
54
+ text: "#e3790d",
55
+ background: "#b7600a",
56
+ },
57
+ yellow: {
58
+ text: "#dfab01",
59
+ background: "#b58b00",
60
+ },
61
+ green: {
62
+ text: "#6b8b87",
63
+ background: "#4d6461",
64
+ },
65
+ blue: {
66
+ text: "#0e87bc",
67
+ background: "#0b6e99",
68
+ },
69
+ purple: {
70
+ text: "#8552d7",
71
+ background: "#6940a5",
72
+ },
73
+ pink: {
74
+ text: "#da208f",
75
+ background: "#ad1a72",
76
+ },
77
+ };
@@ -151,3 +151,13 @@ Tippy popups that are appended to document.body directly
151
151
  /* if there's no explicit width set and the column is not being resized, set a default width */
152
152
  min-width: var(--default-cell-min-width) !important;
153
153
  }
154
+
155
+ .prosemirror-dropcursor-block {
156
+ transition-property: top, bottom;
157
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
158
+ transition-duration: 0.15s;
159
+ }
160
+
161
+ .prosemirror-dropcursor-vertical {
162
+ transition-property: left, right;
163
+ }
@@ -32,7 +32,10 @@ export function wrapTableRows(f: Fragment, schema: Schema) {
32
32
  newItems[newItems.length - 1] = newTable;
33
33
  } else {
34
34
  // create new table to wrap tableRow with
35
- const newTable = schema.nodes.table.create(undefined, f.child(i));
35
+ const newTable = schema.nodes.table.createChecked(
36
+ undefined,
37
+ f.child(i)
38
+ );
36
39
  newItems.push(newTable);
37
40
  }
38
41
  } else {
@@ -64,7 +67,7 @@ export function transformPasted(slice: Slice, view: EditorView) {
64
67
  // (if we remove this if-block, the nesting bug will be fixed, but lists won't be nested correctly)
65
68
  if (
66
69
  i + 1 < f.childCount &&
67
- f.child(i + 1).type.spec.group === "blockGroup"
70
+ f.child(i + 1).type.name === "blockGroup" // TODO
68
71
  ) {
69
72
  const nestedChild = f
70
73
  .child(i + 1)
@@ -80,7 +83,7 @@ export function transformPasted(slice: Slice, view: EditorView) {
80
83
  f = removeChild(f, i + 1);
81
84
  }
82
85
  }
83
- const container = view.state.schema.nodes.blockContainer.create(
86
+ const container = view.state.schema.nodes.blockContainer.createChecked(
84
87
  undefined,
85
88
  content
86
89
  );
@@ -0,0 +1,101 @@
1
+ import { BlockNoteSchema } from "../editor/BlockNoteSchema.js";
2
+ import { COLORS_DEFAULT } from "../editor/defaultColors.js";
3
+ import {
4
+ BlockFromConfig,
5
+ BlockSchema,
6
+ InlineContent,
7
+ InlineContentSchema,
8
+ StyleSchema,
9
+ StyledText,
10
+ Styles,
11
+ } from "../schema/index.js";
12
+
13
+ import type {
14
+ BlockMapping,
15
+ InlineContentMapping,
16
+ StyleMapping,
17
+ } from "./mapping.js";
18
+
19
+ export type ExporterOptions = {
20
+ /**
21
+ * A function that can be used to resolve files, images, etc.
22
+ * Exporters might need the binary contents of files like images,
23
+ * which might not always be available from the same origin as the main page.
24
+ * You can use this option to proxy requests through a server you control
25
+ * to avoid cross-origin (CORS) issues.
26
+ *
27
+ * @default uses a BlockNote hosted proxy (https://corsproxy.api.blocknotejs.org/)
28
+ * @param url - The URL of the file to resolve
29
+ * @returns A Promise that resolves to a string (the URL to use instead of the original)
30
+ * or a Blob (you can return the Blob directly if you have already fetched it)
31
+ */
32
+ resolveFileUrl?: (url: string) => Promise<string | Blob>;
33
+ /**
34
+ * Colors to use for background of blocks, font colors, and highlight colors
35
+ */
36
+ colors: typeof COLORS_DEFAULT;
37
+ };
38
+ export abstract class Exporter<
39
+ B extends BlockSchema,
40
+ I extends InlineContentSchema,
41
+ S extends StyleSchema,
42
+ RB,
43
+ RI,
44
+ RS,
45
+ TS
46
+ > {
47
+ public constructor(
48
+ _schema: BlockNoteSchema<B, I, S>, // only used for type inference
49
+ protected readonly mappings: {
50
+ blockMapping: BlockMapping<B, I, S, RB, RI>;
51
+ inlineContentMapping: InlineContentMapping<I, S, RI, TS>;
52
+ styleMapping: StyleMapping<S, RS>;
53
+ },
54
+ public readonly options: ExporterOptions
55
+ ) {}
56
+
57
+ public async resolveFile(url: string) {
58
+ if (!this.options?.resolveFileUrl) {
59
+ return (await fetch(url)).blob();
60
+ }
61
+ const ret = await this.options.resolveFileUrl(url);
62
+ if (ret instanceof Blob) {
63
+ return ret;
64
+ }
65
+ return (await fetch(ret)).blob();
66
+ }
67
+
68
+ public mapStyles(styles: Styles<S>) {
69
+ const stylesArray = Object.entries(styles).map(([key, value]) => {
70
+ const mappedStyle = this.mappings.styleMapping[key](value, this);
71
+ return mappedStyle;
72
+ });
73
+ return stylesArray;
74
+ }
75
+
76
+ public mapInlineContent(inlineContent: InlineContent<I, S>) {
77
+ return this.mappings.inlineContentMapping[inlineContent.type](
78
+ inlineContent,
79
+ this
80
+ );
81
+ }
82
+
83
+ public transformInlineContent(inlineContentArray: InlineContent<I, S>[]) {
84
+ return inlineContentArray.map((ic) => this.mapInlineContent(ic));
85
+ }
86
+
87
+ public abstract transformStyledText(styledText: StyledText<S>): TS;
88
+
89
+ public async mapBlock(
90
+ block: BlockFromConfig<B[keyof B], I, S>,
91
+ nestingLevel: number,
92
+ numberedListIndex: number
93
+ ) {
94
+ return this.mappings.blockMapping[block.type](
95
+ block,
96
+ this,
97
+ nestingLevel,
98
+ numberedListIndex
99
+ );
100
+ }
101
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./Exporter.js";
2
+ export * from "./mapping.js";