@blocknote/core 0.18.0 → 0.19.1

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 (537) hide show
  1. package/README.md +2 -0
  2. package/dist/blocknote.js +3145 -2970
  3. package/dist/blocknote.js.map +1 -1
  4. package/dist/blocknote.umd.cjs +9 -9
  5. package/dist/blocknote.umd.cjs.map +1 -1
  6. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js +27 -0
  7. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js.map +1 -0
  8. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js +99 -0
  9. package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js.map +1 -0
  10. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js +97 -0
  11. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js.map +1 -0
  12. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js +88 -0
  13. package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js.map +1 -0
  14. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js +116 -0
  15. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js.map +1 -0
  16. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js +110 -0
  17. package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js.map +1 -0
  18. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js +57 -0
  19. package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js.map +1 -0
  20. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js +5 -0
  21. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js.map +1 -0
  22. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js +31 -0
  23. package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js.map +1 -0
  24. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js +71 -0
  25. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js.map +1 -0
  26. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js +157 -0
  27. package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js.map +1 -0
  28. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js +27 -0
  29. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js.map +1 -0
  30. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js +64 -0
  31. package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js.map +1 -0
  32. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js +145 -0
  33. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js.map +1 -0
  34. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js +252 -0
  35. package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js.map +1 -0
  36. package/dist/src/api/blockManipulation/insertContentAt.js +64 -0
  37. package/dist/src/api/blockManipulation/insertContentAt.js.map +1 -0
  38. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js +76 -0
  39. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js.map +1 -0
  40. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js +33 -0
  41. package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js.map +1 -0
  42. package/dist/src/api/blockManipulation/setupTestEnv.js +172 -0
  43. package/dist/src/api/blockManipulation/setupTestEnv.js.map +1 -0
  44. package/dist/src/api/clipboard/clipboard.test.js +246 -0
  45. package/dist/src/api/clipboard/clipboard.test.js.map +1 -0
  46. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js +8 -0
  47. package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js.map +1 -0
  48. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js +38 -0
  49. package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js.map +1 -0
  50. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js +111 -0
  51. package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js.map +1 -0
  52. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js +26 -0
  53. package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js.map +1 -0
  54. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js +57 -0
  55. package/dist/src/api/clipboard/fromClipboard/pasteExtension.js.map +1 -0
  56. package/dist/src/api/clipboard/toClipboard/copyExtension.js +132 -0
  57. package/dist/src/api/clipboard/toClipboard/copyExtension.js.map +1 -0
  58. package/dist/src/api/exporters/html/externalHTMLExporter.js +35 -0
  59. package/dist/src/api/exporters/html/externalHTMLExporter.js.map +1 -0
  60. package/dist/src/api/exporters/html/htmlConversion.test.js +72 -0
  61. package/dist/src/api/exporters/html/htmlConversion.test.js.map +1 -0
  62. package/dist/src/api/exporters/html/internalHTMLSerializer.js +21 -0
  63. package/dist/src/api/exporters/html/internalHTMLSerializer.js.map +1 -0
  64. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js +141 -0
  65. package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js.map +1 -0
  66. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js +96 -0
  67. package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js.map +1 -0
  68. package/dist/src/api/exporters/markdown/markdownExporter.js +31 -0
  69. package/dist/src/api/exporters/markdown/markdownExporter.js.map +1 -0
  70. package/dist/src/api/exporters/markdown/markdownExporter.test.js +57 -0
  71. package/dist/src/api/exporters/markdown/markdownExporter.test.js.map +1 -0
  72. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js +33 -0
  73. package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js.map +1 -0
  74. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js +37 -0
  75. package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js.map +1 -0
  76. package/dist/src/api/getBlockInfoFromPos.js +165 -0
  77. package/dist/src/api/getBlockInfoFromPos.js.map +1 -0
  78. package/dist/src/api/nodeConversions/blockToNode.js +197 -0
  79. package/dist/src/api/nodeConversions/blockToNode.js.map +1 -0
  80. package/dist/src/api/nodeConversions/fragmentToBlocks.js +50 -0
  81. package/dist/src/api/nodeConversions/fragmentToBlocks.js.map +1 -0
  82. package/dist/src/api/nodeConversions/nodeConversions.test.js +54 -0
  83. package/dist/src/api/nodeConversions/nodeConversions.test.js.map +1 -0
  84. package/dist/src/api/nodeConversions/nodeToBlock.js +316 -0
  85. package/dist/src/api/nodeConversions/nodeToBlock.js.map +1 -0
  86. package/dist/src/api/nodeUtil.js +28 -0
  87. package/dist/src/api/nodeUtil.js.map +1 -0
  88. package/dist/src/api/parsers/html/parseHTML.js +19 -0
  89. package/dist/src/api/parsers/html/parseHTML.js.map +1 -0
  90. package/dist/src/api/parsers/html/parseHTML.test.js +470 -0
  91. package/dist/src/api/parsers/html/parseHTML.test.js.map +1 -0
  92. package/dist/src/api/parsers/html/util/nestedLists.js +106 -0
  93. package/dist/src/api/parsers/html/util/nestedLists.js.map +1 -0
  94. package/dist/src/api/parsers/html/util/nestedLists.test.js +166 -0
  95. package/dist/src/api/parsers/html/util/nestedLists.test.js.map +1 -0
  96. package/dist/src/api/parsers/markdown/parseMarkdown.js +52 -0
  97. package/dist/src/api/parsers/markdown/parseMarkdown.js.map +1 -0
  98. package/dist/src/api/parsers/markdown/parseMarkdown.test.js +109 -0
  99. package/dist/src/api/parsers/markdown/parseMarkdown.test.js.map +1 -0
  100. package/dist/src/api/testUtil/cases/customBlocks.js +313 -0
  101. package/dist/src/api/testUtil/cases/customBlocks.js.map +1 -0
  102. package/dist/src/api/testUtil/cases/customInlineContent.js +91 -0
  103. package/dist/src/api/testUtil/cases/customInlineContent.js.map +1 -0
  104. package/dist/src/api/testUtil/cases/customStyles.js +83 -0
  105. package/dist/src/api/testUtil/cases/customStyles.js.map +1 -0
  106. package/dist/src/api/testUtil/cases/defaultSchema.js +673 -0
  107. package/dist/src/api/testUtil/cases/defaultSchema.js.map +1 -0
  108. package/dist/src/api/testUtil/index.js +2 -0
  109. package/dist/src/api/testUtil/index.js.map +1 -0
  110. package/dist/src/api/testUtil/partialBlockTestUtil.js +114 -0
  111. package/dist/src/api/testUtil/partialBlockTestUtil.js.map +1 -0
  112. package/dist/src/api/testUtil/paste.js +29 -0
  113. package/dist/src/api/testUtil/paste.js.map +1 -0
  114. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js +97 -0
  115. package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js.map +1 -0
  116. package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js +5 -0
  117. package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js.map +1 -0
  118. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js +273 -0
  119. package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js.map +1 -0
  120. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js +90 -0
  121. package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js.map +1 -0
  122. package/dist/src/blocks/FileBlockContent/FileBlockContent.js +70 -0
  123. package/dist/src/blocks/FileBlockContent/FileBlockContent.js.map +1 -0
  124. package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js +317 -0
  125. package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js.map +1 -0
  126. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js +15 -0
  127. package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js.map +1 -0
  128. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js +145 -0
  129. package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js.map +1 -0
  130. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js +106 -0
  131. package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js.map +1 -0
  132. package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js +6 -0
  133. package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js.map +1 -0
  134. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js +113 -0
  135. package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js.map +1 -0
  136. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js +224 -0
  137. package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js.map +1 -0
  138. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js +45 -0
  139. package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js.map +1 -0
  140. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js +58 -0
  141. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js.map +1 -0
  142. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js +130 -0
  143. package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js.map +1 -0
  144. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js +52 -0
  145. package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js.map +1 -0
  146. package/dist/src/blocks/TableBlockContent/TableBlockContent.js +129 -0
  147. package/dist/src/blocks/TableBlockContent/TableBlockContent.js.map +1 -0
  148. package/dist/src/blocks/TableBlockContent/TableExtension.js +57 -0
  149. package/dist/src/blocks/TableBlockContent/TableExtension.js.map +1 -0
  150. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js +103 -0
  151. package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js.map +1 -0
  152. package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js +6 -0
  153. package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js.map +1 -0
  154. package/dist/src/blocks/defaultBlockHelpers.js +50 -0
  155. package/dist/src/blocks/defaultBlockHelpers.js.map +1 -0
  156. package/dist/src/blocks/defaultBlockTypeGuards.js +40 -0
  157. package/dist/src/blocks/defaultBlockTypeGuards.js.map +1 -0
  158. package/dist/src/blocks/defaultBlocks.js +50 -0
  159. package/dist/src/blocks/defaultBlocks.js.map +1 -0
  160. package/dist/src/blocks/defaultProps.js +19 -0
  161. package/dist/src/blocks/defaultProps.js.map +1 -0
  162. package/dist/src/editor/BlockNoteEditor.js +746 -0
  163. package/dist/src/editor/BlockNoteEditor.js.map +1 -0
  164. package/dist/src/editor/BlockNoteEditor.test.js +65 -0
  165. package/dist/src/editor/BlockNoteEditor.test.js.map +1 -0
  166. package/dist/src/editor/BlockNoteExtensions.js +195 -0
  167. package/dist/src/editor/BlockNoteExtensions.js.map +1 -0
  168. package/dist/src/editor/BlockNoteSchema.js +38 -0
  169. package/dist/src/editor/BlockNoteSchema.js.map +1 -0
  170. package/dist/src/editor/BlockNoteTipTapEditor.js +169 -0
  171. package/dist/src/editor/BlockNoteTipTapEditor.js.map +1 -0
  172. package/dist/src/editor/cursorPositionTypes.js +2 -0
  173. package/dist/src/editor/cursorPositionTypes.js.map +1 -0
  174. package/dist/src/editor/defaultColors.js +77 -0
  175. package/dist/src/editor/defaultColors.js.map +1 -0
  176. package/dist/src/editor/selectionTypes.js +2 -0
  177. package/dist/src/editor/selectionTypes.js.map +1 -0
  178. package/dist/src/editor/transformPasted.js +79 -0
  179. package/dist/src/editor/transformPasted.js.map +1 -0
  180. package/dist/src/exporter/Exporter.js +36 -0
  181. package/dist/src/exporter/Exporter.js.map +1 -0
  182. package/dist/src/exporter/index.js +3 -0
  183. package/dist/src/exporter/index.js.map +1 -0
  184. package/dist/src/exporter/mapping.js +12 -0
  185. package/dist/src/exporter/mapping.js.map +1 -0
  186. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js +30 -0
  187. package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js.map +1 -0
  188. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js +39 -0
  189. package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js.map +1 -0
  190. package/dist/src/extensions/FilePanel/FilePanelPlugin.js +131 -0
  191. package/dist/src/extensions/FilePanel/FilePanelPlugin.js.map +1 -0
  192. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js +195 -0
  193. package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js.map +1 -0
  194. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js +339 -0
  195. package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js.map +1 -0
  196. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js +247 -0
  197. package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js.map +1 -0
  198. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js +54 -0
  199. package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js.map +1 -0
  200. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js +84 -0
  201. package/dist/src/extensions/Placeholder/PlaceholderPlugin.js.map +1 -0
  202. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js +187 -0
  203. package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js.map +1 -0
  204. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js +68 -0
  205. package/dist/src/extensions/SideMenu/MultipleNodeSelection.js.map +1 -0
  206. package/dist/src/extensions/SideMenu/SideMenuPlugin.js +339 -0
  207. package/dist/src/extensions/SideMenu/SideMenuPlugin.js.map +1 -0
  208. package/dist/src/extensions/SideMenu/dragging.js +128 -0
  209. package/dist/src/extensions/SideMenu/dragging.js.map +1 -0
  210. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js +2 -0
  211. package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js.map +1 -0
  212. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js +2 -0
  213. package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js.map +1 -0
  214. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js +245 -0
  215. package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js.map +1 -0
  216. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js +26 -0
  217. package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js.map +1 -0
  218. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js +244 -0
  219. package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js.map +1 -0
  220. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js +553 -0
  221. package/dist/src/extensions/TableHandles/TableHandlesPlugin.js.map +1 -0
  222. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js +36 -0
  223. package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js.map +1 -0
  224. package/dist/src/extensions/TextColor/TextColorExtension.js +29 -0
  225. package/dist/src/extensions/TextColor/TextColorExtension.js.map +1 -0
  226. package/dist/src/extensions/TextColor/TextColorMark.js +37 -0
  227. package/dist/src/extensions/TextColor/TextColorMark.js.map +1 -0
  228. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js +58 -0
  229. package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js.map +1 -0
  230. package/dist/src/extensions/UniqueID/UniqueID.js +283 -0
  231. package/dist/src/extensions/UniqueID/UniqueID.js.map +1 -0
  232. package/dist/src/extensions/getDraggableBlockFromElement.js +13 -0
  233. package/dist/src/extensions/getDraggableBlockFromElement.js.map +1 -0
  234. package/dist/src/extensions-shared/UiElementPosition.js +2 -0
  235. package/dist/src/extensions-shared/UiElementPosition.js.map +1 -0
  236. package/dist/src/i18n/dictionary.js +4 -0
  237. package/dist/src/i18n/dictionary.js.map +1 -0
  238. package/dist/src/i18n/locales/ar.js +298 -0
  239. package/dist/src/i18n/locales/ar.js.map +1 -0
  240. package/dist/src/i18n/locales/de.js +313 -0
  241. package/dist/src/i18n/locales/de.js.map +1 -0
  242. package/dist/src/i18n/locales/en.js +314 -0
  243. package/dist/src/i18n/locales/en.js.map +1 -0
  244. package/dist/src/i18n/locales/es.js +312 -0
  245. package/dist/src/i18n/locales/es.js.map +1 -0
  246. package/dist/src/i18n/locales/fr.js +313 -0
  247. package/dist/src/i18n/locales/fr.js.map +1 -0
  248. package/dist/src/i18n/locales/hr.js +308 -0
  249. package/dist/src/i18n/locales/hr.js.map +1 -0
  250. package/dist/src/i18n/locales/index.js +16 -0
  251. package/dist/src/i18n/locales/index.js.map +1 -0
  252. package/dist/src/i18n/locales/is.js +305 -0
  253. package/dist/src/i18n/locales/is.js.map +1 -0
  254. package/dist/src/i18n/locales/ja.js +333 -0
  255. package/dist/src/i18n/locales/ja.js.map +1 -0
  256. package/dist/src/i18n/locales/ko.js +326 -0
  257. package/dist/src/i18n/locales/ko.js.map +1 -0
  258. package/dist/src/i18n/locales/nl.js +313 -0
  259. package/dist/src/i18n/locales/nl.js.map +1 -0
  260. package/dist/src/i18n/locales/pl.js +297 -0
  261. package/dist/src/i18n/locales/pl.js.map +1 -0
  262. package/dist/src/i18n/locales/pt.js +305 -0
  263. package/dist/src/i18n/locales/pt.js.map +1 -0
  264. package/dist/src/i18n/locales/ru.js +340 -0
  265. package/dist/src/i18n/locales/ru.js.map +1 -0
  266. package/dist/src/i18n/locales/vi.js +312 -0
  267. package/dist/src/i18n/locales/vi.js.map +1 -0
  268. package/dist/src/i18n/locales/zh.js +346 -0
  269. package/dist/src/i18n/locales/zh.js.map +1 -0
  270. package/dist/src/index.js +55 -0
  271. package/dist/src/index.js.map +1 -0
  272. package/dist/src/pm-nodes/BlockContainer.js +72 -0
  273. package/dist/src/pm-nodes/BlockContainer.js.map +1 -0
  274. package/dist/src/pm-nodes/BlockGroup.js +43 -0
  275. package/dist/src/pm-nodes/BlockGroup.js.map +1 -0
  276. package/dist/src/pm-nodes/Doc.js +7 -0
  277. package/dist/src/pm-nodes/Doc.js.map +1 -0
  278. package/dist/src/pm-nodes/index.js +4 -0
  279. package/dist/src/pm-nodes/index.js.map +1 -0
  280. package/dist/src/schema/blocks/createSpec.js +126 -0
  281. package/dist/src/schema/blocks/createSpec.js.map +1 -0
  282. package/dist/src/schema/blocks/internal.js +147 -0
  283. package/dist/src/schema/blocks/internal.js.map +1 -0
  284. package/dist/src/schema/blocks/types.js +2 -0
  285. package/dist/src/schema/blocks/types.js.map +1 -0
  286. package/dist/src/schema/index.js +11 -0
  287. package/dist/src/schema/index.js.map +1 -0
  288. package/dist/src/schema/inlineContent/createSpec.js +64 -0
  289. package/dist/src/schema/inlineContent/createSpec.js.map +1 -0
  290. package/dist/src/schema/inlineContent/internal.js +52 -0
  291. package/dist/src/schema/inlineContent/internal.js.map +1 -0
  292. package/dist/src/schema/inlineContent/types.js +10 -0
  293. package/dist/src/schema/inlineContent/types.js.map +1 -0
  294. package/dist/src/schema/propTypes.js +2 -0
  295. package/dist/src/schema/propTypes.js.map +1 -0
  296. package/dist/src/schema/styles/createSpec.js +48 -0
  297. package/dist/src/schema/styles/createSpec.js.map +1 -0
  298. package/dist/src/schema/styles/internal.js +53 -0
  299. package/dist/src/schema/styles/internal.js.map +1 -0
  300. package/dist/src/schema/styles/types.js +2 -0
  301. package/dist/src/schema/styles/types.js.map +1 -0
  302. package/dist/src/util/EventEmitter.js +33 -0
  303. package/dist/src/util/EventEmitter.js.map +1 -0
  304. package/dist/src/util/browser.js +17 -0
  305. package/dist/src/util/browser.js.map +1 -0
  306. package/dist/src/util/combineByGroup.js +20 -0
  307. package/dist/src/util/combineByGroup.js.map +1 -0
  308. package/dist/src/util/esmDependencies.js +35 -0
  309. package/dist/src/util/esmDependencies.js.map +1 -0
  310. package/dist/src/util/string.js +14 -0
  311. package/dist/src/util/string.js.map +1 -0
  312. package/dist/src/util/typescript.js +12 -0
  313. package/dist/src/util/typescript.js.map +1 -0
  314. package/dist/style.css +1 -1
  315. package/dist/tsconfig.tsbuildinfo +1 -0
  316. package/dist/webpack-stats.json +1 -1
  317. package/package.json +5 -5
  318. package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +0 -6
  319. package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +2 -0
  320. package/src/api/blockManipulation/commands/mergeBlocks/__snapshots__/mergeBlocks.test.ts.snap +0 -5
  321. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +2 -2
  322. package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +104 -39
  323. package/src/api/blockManipulation/commands/moveBlock/__snapshots__/moveBlock.test.ts.snap +0 -8
  324. package/src/api/blockManipulation/commands/moveBlock/moveBlock.test.ts +7 -3
  325. package/src/api/blockManipulation/commands/moveBlock/moveBlock.ts +3 -5
  326. package/src/api/blockManipulation/commands/nestBlock/nestBlock.ts +100 -0
  327. package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +439 -2
  328. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.ts +6 -0
  329. package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +2 -82
  330. package/src/api/blockManipulation/commands/replaceBlocks/__snapshots__/replaceBlocks.test.ts.snap +0 -8
  331. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +96 -20
  332. package/src/api/blockManipulation/commands/splitBlock/__snapshots__/splitBlock.test.ts.snap +0 -6
  333. package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +8 -4
  334. package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +13 -12
  335. package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +0 -490
  336. package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +5 -5
  337. package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +192 -107
  338. package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +48 -33
  339. package/src/api/clipboard/fromClipboard/acceptedMIMETypes.ts +1 -1
  340. package/src/api/clipboard/fromClipboard/handleFileInsertion.ts +7 -6
  341. package/src/api/clipboard/toClipboard/copyExtension.ts +1 -1
  342. package/src/api/exporters/html/htmlConversion.test.ts +1 -4
  343. package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +7 -1
  344. package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +56 -19
  345. package/src/api/exporters/markdown/markdownExporter.test.ts +1 -4
  346. package/src/api/getBlockInfoFromPos.ts +125 -80
  347. package/src/api/nodeConversions/blockToNode.ts +50 -25
  348. package/src/api/nodeConversions/fragmentToBlocks.ts +18 -0
  349. package/src/api/nodeConversions/nodeToBlock.ts +24 -21
  350. package/src/api/nodeUtil.ts +1 -1
  351. package/src/api/parsers/html/__snapshots__/parse-notion-html.json +1 -2
  352. package/src/api/testUtil/partialBlockTestUtil.ts +15 -3
  353. package/src/blocks/AudioBlockContent/AudioBlockContent.ts +4 -2
  354. package/src/blocks/FileBlockContent/fileBlockHelpers.ts +5 -4
  355. package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +35 -35
  356. package/src/blocks/ImageBlockContent/ImageBlockContent.ts +4 -2
  357. package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +14 -12
  358. package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +28 -16
  359. package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +5 -3
  360. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +11 -4
  361. package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +13 -11
  362. package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +8 -9
  363. package/src/blocks/TableBlockContent/TableBlockContent.ts +0 -1
  364. package/src/blocks/VideoBlockContent/VideoBlockContent.ts +4 -2
  365. package/src/blocks/defaultBlockHelpers.ts +7 -2
  366. package/src/editor/Block.css +22 -1
  367. package/src/editor/BlockNoteEditor.test.ts +4 -7
  368. package/src/editor/BlockNoteEditor.ts +87 -61
  369. package/src/editor/BlockNoteExtensions.ts +92 -17
  370. package/src/editor/BlockNoteTipTapEditor.ts +8 -1
  371. package/src/editor/defaultColors.ts +77 -0
  372. package/src/editor/editor.css +10 -0
  373. package/src/editor/transformPasted.ts +6 -3
  374. package/src/exporter/Exporter.ts +101 -0
  375. package/src/exporter/index.ts +2 -0
  376. package/src/exporter/mapping.ts +75 -0
  377. package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +233 -53
  378. package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +45 -42
  379. package/src/extensions/Placeholder/PlaceholderPlugin.ts +94 -90
  380. package/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.ts +173 -169
  381. package/src/extensions/SideMenu/SideMenuPlugin.ts +141 -52
  382. package/src/extensions/SideMenu/dragging.ts +3 -54
  383. package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +4 -6
  384. package/src/extensions/TableHandles/TableHandlesPlugin.ts +1 -1
  385. package/src/extensions/TrailingNode/TrailingNodeExtension.ts +1 -1
  386. package/src/extensions/getDraggableBlockFromElement.ts +19 -0
  387. package/src/i18n/locales/de.ts +5 -5
  388. package/src/i18n/locales/pt.ts +5 -5
  389. package/src/index.ts +9 -5
  390. package/src/pm-nodes/BlockContainer.ts +1 -1
  391. package/src/pm-nodes/BlockGroup.ts +2 -2
  392. package/src/pm-nodes/README.md +127 -28
  393. package/src/schema/blocks/createSpec.ts +4 -1
  394. package/src/schema/blocks/internal.ts +12 -2
  395. package/src/schema/blocks/types.ts +1 -1
  396. package/src/util/combineByGroup.ts +25 -0
  397. package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.d.ts +22 -2
  398. package/types/src/api/blockManipulation/commands/nestBlock/nestBlock.d.ts +5 -0
  399. package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.d.ts +0 -3
  400. package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.d.ts +4 -0
  401. package/types/src/api/blockManipulation/setupTestEnv.d.ts +0 -6
  402. package/types/src/api/clipboard/fromClipboard/acceptedMIMETypes.d.ts +1 -1
  403. package/types/src/api/getBlockInfoFromPos.d.ts +38 -13
  404. package/types/src/api/nodeConversions/blockToNode.d.ts +1 -1
  405. package/types/src/api/nodeConversions/nodeToBlock.d.ts +3 -1
  406. package/types/src/api/testUtil/cases/customBlocks.d.ts +0 -6
  407. package/types/src/api/testUtil/cases/customInlineContent.d.ts +0 -6
  408. package/types/src/api/testUtil/cases/customStyles.d.ts +0 -6
  409. package/types/src/api/testUtil/partialBlockTestUtil.d.ts +2 -1
  410. package/types/src/blocks/AudioBlockContent/AudioBlockContent.d.ts +1 -0
  411. package/types/src/blocks/FileBlockContent/fileBlockHelpers.d.ts +1 -0
  412. package/types/src/blocks/ImageBlockContent/ImageBlockContent.d.ts +1 -0
  413. package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +0 -9
  414. package/types/src/blocks/VideoBlockContent/VideoBlockContent.d.ts +1 -0
  415. package/types/src/blocks/defaultBlocks.d.ts +0 -12
  416. package/types/src/editor/BlockNoteEditor.d.ts +23 -5
  417. package/types/src/editor/BlockNoteExtensions.d.ts +14 -7
  418. package/types/src/editor/BlockNoteTipTapEditor.d.ts +1 -0
  419. package/types/src/editor/defaultColors.d.ts +76 -0
  420. package/types/src/exporter/Exporter.d.ts +43 -0
  421. package/types/src/exporter/index.d.ts +2 -0
  422. package/types/src/exporter/mapping.d.ts +30 -0
  423. package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +4 -1
  424. package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +4 -1
  425. package/types/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.d.ts +4 -5
  426. package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +2 -1
  427. package/types/src/extensions/SideMenu/dragging.d.ts +1 -6
  428. package/types/src/extensions/getDraggableBlockFromElement.d.ts +5 -0
  429. package/types/src/index.d.ts +9 -5
  430. package/types/src/schema/blocks/createSpec.d.ts +1 -1
  431. package/types/src/schema/blocks/internal.d.ts +2 -2
  432. package/types/src/schema/blocks/types.d.ts +1 -1
  433. package/types/src/util/combineByGroup.d.ts +9 -0
  434. package/dist/angular-html-HQGguTAE.js +0 -33
  435. package/dist/angular-html-HQGguTAE.js.map +0 -1
  436. package/dist/angular-ts-q9PqJiJb.js +0 -22
  437. package/dist/angular-ts-q9PqJiJb.js.map +0 -1
  438. package/dist/astro-0iWgpDaK.js +0 -17
  439. package/dist/astro-0iWgpDaK.js.map +0 -1
  440. package/dist/blade-C3Z8AhvY.js +0 -19
  441. package/dist/blade-C3Z8AhvY.js.map +0 -1
  442. package/dist/c-TKJGJdXV.js +0 -7
  443. package/dist/c-TKJGJdXV.js.map +0 -1
  444. package/dist/coffee-CN_y6cG3.js +0 -9
  445. package/dist/coffee-CN_y6cG3.js.map +0 -1
  446. package/dist/cpp-Be_e67JE.js +0 -19
  447. package/dist/cpp-Be_e67JE.js.map +0 -1
  448. package/dist/css-DHLSoXzW.js +0 -7
  449. package/dist/css-DHLSoXzW.js.map +0 -1
  450. package/dist/glsl-8qSUIm5B.js +0 -9
  451. package/dist/glsl-8qSUIm5B.js.map +0 -1
  452. package/dist/graphql-D7_Dk2ma.js +0 -15
  453. package/dist/graphql-D7_Dk2ma.js.map +0 -1
  454. package/dist/haml-S3dmcfEW.js +0 -11
  455. package/dist/haml-S3dmcfEW.js.map +0 -1
  456. package/dist/handlebars-DaIrqVg3.js +0 -15
  457. package/dist/handlebars-DaIrqVg3.js.map +0 -1
  458. package/dist/html-Bx3A18fV.js +0 -11
  459. package/dist/html-Bx3A18fV.js.map +0 -1
  460. package/dist/html-derivative-Cf3KTZBS.js +0 -9
  461. package/dist/html-derivative-Cf3KTZBS.js.map +0 -1
  462. package/dist/http-BphR83YX.js +0 -15
  463. package/dist/http-BphR83YX.js.map +0 -1
  464. package/dist/imba-CmP25v0O.js +0 -9
  465. package/dist/imba-CmP25v0O.js.map +0 -1
  466. package/dist/java-Dg4kxH6C.js +0 -7
  467. package/dist/java-Dg4kxH6C.js.map +0 -1
  468. package/dist/javascript-CipAzIn1.js +0 -7
  469. package/dist/javascript-CipAzIn1.js.map +0 -1
  470. package/dist/jinja-tioldiz6.js +0 -12
  471. package/dist/jinja-tioldiz6.js.map +0 -1
  472. package/dist/jison-DWJFEE_I.js +0 -9
  473. package/dist/jison-DWJFEE_I.js.map +0 -1
  474. package/dist/json-_04EL6MS.js +0 -7
  475. package/dist/json-_04EL6MS.js.map +0 -1
  476. package/dist/json5-Dwmp5XFI.js +0 -7
  477. package/dist/json5-Dwmp5XFI.js.map +0 -1
  478. package/dist/jsonc-LqD5auy0.js +0 -7
  479. package/dist/jsonc-LqD5auy0.js.map +0 -1
  480. package/dist/jsonl-B4yVuYQH.js +0 -7
  481. package/dist/jsonl-B4yVuYQH.js.map +0 -1
  482. package/dist/jsx-Mg4WaD5k.js +0 -7
  483. package/dist/jsx-Mg4WaD5k.js.map +0 -1
  484. package/dist/julia-CWi-ZdpN.js +0 -17
  485. package/dist/julia-CWi-ZdpN.js.map +0 -1
  486. package/dist/less-BBvTHIGe.js +0 -7
  487. package/dist/less-BBvTHIGe.js.map +0 -1
  488. package/dist/markdown-DAXqtk9a.js +0 -7
  489. package/dist/markdown-DAXqtk9a.js.map +0 -1
  490. package/dist/marko-0aaNgUGV.js +0 -15
  491. package/dist/marko-0aaNgUGV.js.map +0 -1
  492. package/dist/mdc-hXJ2B4O0.js +0 -13
  493. package/dist/mdc-hXJ2B4O0.js.map +0 -1
  494. package/dist/mdx-CSCKbb_f.js +0 -7
  495. package/dist/mdx-CSCKbb_f.js.map +0 -1
  496. package/dist/php-B_-4RJ09.js +0 -19
  497. package/dist/php-B_-4RJ09.js.map +0 -1
  498. package/dist/postcss-SJfTvo_B.js +0 -7
  499. package/dist/postcss-SJfTvo_B.js.map +0 -1
  500. package/dist/pug-3q2tx0nf.js +0 -13
  501. package/dist/pug-3q2tx0nf.js.map +0 -1
  502. package/dist/python-Dpup1-fE.js +0 -7
  503. package/dist/python-Dpup1-fE.js.map +0 -1
  504. package/dist/r-Chyv38Fv.js +0 -7
  505. package/dist/r-Chyv38Fv.js.map +0 -1
  506. package/dist/regexp-BF0hfxNW.js +0 -7
  507. package/dist/regexp-BF0hfxNW.js.map +0 -1
  508. package/dist/sass-p2RMoqDT.js +0 -7
  509. package/dist/sass-p2RMoqDT.js.map +0 -1
  510. package/dist/scss-DmlHSoOY.js +0 -9
  511. package/dist/scss-DmlHSoOY.js.map +0 -1
  512. package/dist/shellscript-CZpPN8_x.js +0 -7
  513. package/dist/shellscript-CZpPN8_x.js.map +0 -1
  514. package/dist/sql-DtlkUz2m.js +0 -7
  515. package/dist/sql-DtlkUz2m.js.map +0 -1
  516. package/dist/stylus-DEr8eSLm.js +0 -7
  517. package/dist/stylus-DEr8eSLm.js.map +0 -1
  518. package/dist/svelte-BRIJF62h.js +0 -15
  519. package/dist/svelte-BRIJF62h.js.map +0 -1
  520. package/dist/ts-tags-qkUtuI0N.js +0 -42
  521. package/dist/ts-tags-qkUtuI0N.js.map +0 -1
  522. package/dist/tsx-DTfbgJxi.js +0 -7
  523. package/dist/tsx-DTfbgJxi.js.map +0 -1
  524. package/dist/typescript-CCd4aQHh.js +0 -7
  525. package/dist/typescript-CCd4aQHh.js.map +0 -1
  526. package/dist/vue-B3TdbERm.js +0 -32
  527. package/dist/vue-B3TdbERm.js.map +0 -1
  528. package/dist/vue-html-BGmTBZk0.js +0 -11
  529. package/dist/vue-html-BGmTBZk0.js.map +0 -1
  530. package/dist/wasm-VDIDph3E.js +0 -7
  531. package/dist/wasm-VDIDph3E.js.map +0 -1
  532. package/dist/wgsl-2np_U3Z8.js +0 -7
  533. package/dist/wgsl-2np_U3Z8.js.map +0 -1
  534. package/dist/xml-CNyphW9R.js +0 -9
  535. package/dist/xml-CNyphW9R.js.map +0 -1
  536. package/dist/yaml-DxFiVFcM.js +0 -7
  537. package/dist/yaml-DxFiVFcM.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
+ import { customBlocksTestCases } from "../../testUtil/cases/customBlocks.js";
5
+ import { customInlineContentTestCases } from "../../testUtil/cases/customInlineContent.js";
6
+ import { customStylesTestCases } from "../../testUtil/cases/customStyles.js";
7
+ import { defaultSchemaTestCases } from "../../testUtil/cases/defaultSchema.js";
8
+ import { partialBlocksToBlocksForTesting } from "../../testUtil/partialBlockTestUtil.js";
9
+ async function convertToMarkdownAndCompareSnapshots(editor, blocks, snapshotDirectory, snapshotName) {
10
+ const fullBlocks = partialBlocksToBlocksForTesting(editor.schema, blocks);
11
+ const md = await editor.blocksToMarkdownLossy(fullBlocks);
12
+ const snapshotPath = "./__snapshots__/" +
13
+ snapshotDirectory +
14
+ "/" +
15
+ snapshotName +
16
+ "/markdown.md";
17
+ // vitest empty snapshots are broken on CI. might be fixed on next vitest, use workaround for now
18
+ if (!md.length && process.env.CI) {
19
+ if (fs.readFileSync(path.join(__dirname, snapshotPath), "utf8").length === 0) {
20
+ // both are empty, so it's fine
21
+ return;
22
+ }
23
+ }
24
+ expect(md).toMatchFileSnapshot(snapshotPath);
25
+ }
26
+ const testCases = [
27
+ defaultSchemaTestCases,
28
+ customBlocksTestCases,
29
+ customStylesTestCases,
30
+ customInlineContentTestCases,
31
+ ];
32
+ describe("markdownExporter", () => {
33
+ for (const testCase of testCases) {
34
+ describe("Case: " + testCase.name, () => {
35
+ let editor;
36
+ const div = document.createElement("div");
37
+ beforeEach(() => {
38
+ editor = testCase.createEditor();
39
+ editor.mount(div);
40
+ });
41
+ afterEach(() => {
42
+ editor.mount(undefined);
43
+ editor._tiptapEditor.destroy();
44
+ editor = undefined;
45
+ delete window.__TEST_OPTIONS;
46
+ });
47
+ for (const document of testCase.documents) {
48
+ // eslint-disable-next-line no-loop-func
49
+ it("Convert " + document.name + " to HTML", async () => {
50
+ const nameSplit = document.name.split("/");
51
+ await convertToMarkdownAndCompareSnapshots(editor, document.blocks, nameSplit[0], nameSplit[1]);
52
+ });
53
+ }
54
+ });
55
+ }
56
+ });
57
+ //# sourceMappingURL=markdownExporter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownExporter.test.js","sourceRoot":"","sources":["../../../../../src/api/exporters/markdown/markdownExporter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAMrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AAEzF,KAAK,UAAU,oCAAoC,CAKjD,MAAgC,EAChC,MAA+B,EAC/B,iBAAyB,EACzB,YAAoB;IAEpB,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,YAAY,GAChB,kBAAkB;QAClB,iBAAiB;QACjB,GAAG;QACH,YAAY;QACZ,cAAc,CAAC;IAEjB,iGAAiG;IACjG,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACjC,IACE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EACxE,CAAC;YACD,+BAA+B;YAC/B,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,sBAAsB;IACtB,qBAAqB;IACrB,qBAAqB;IACrB,4BAA4B;CAC7B,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;YACtC,IAAI,MAAsC,CAAC;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE1C,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,GAAG,SAAgB,CAAC;gBAE1B,OAAQ,MAA4C,CAAC,cAAc,CAAC;YACtE,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1C,wCAAwC;gBACxC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,GAAG,UAAU,EAAE,KAAK,IAAI,EAAE;oBACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3C,MAAM,oCAAoC,CACxC,MAAM,EACN,QAAQ,CAAC,MAAM,EACf,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,CACb,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Rehype plugin which removes <u> tags. Used to remove underlines before converting HTML to markdown, as Markdown
3
+ * doesn't support underlines.
4
+ */
5
+ export function removeUnderlines() {
6
+ const removeUnderlinesHelper = (tree) => {
7
+ let numChildElements = tree.children.length;
8
+ for (let i = 0; i < numChildElements; i++) {
9
+ const node = tree.children[i];
10
+ if (node.type === "element") {
11
+ // Recursively removes underlines from child elements.
12
+ removeUnderlinesHelper(node);
13
+ if (node.tagName === "u") {
14
+ // Lifts child nodes outside underline element, deletes the underline element, and updates current index &
15
+ // the number of child elements.
16
+ if (node.children.length > 0) {
17
+ tree.children.splice(i, 1, ...node.children);
18
+ const numElementsAdded = node.children.length - 1;
19
+ numChildElements += numElementsAdded;
20
+ i += numElementsAdded;
21
+ }
22
+ else {
23
+ tree.children.splice(i, 1);
24
+ numChildElements--;
25
+ i--;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ };
31
+ return removeUnderlinesHelper;
32
+ }
33
+ //# sourceMappingURL=removeUnderlinesRehypePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeUnderlinesRehypePlugin.js","sourceRoot":"","sources":["../../../../../src/api/exporters/markdown/removeUnderlinesRehypePlugin.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,sBAAsB,GAAG,CAAC,IAAgB,EAAE,EAAE;QAClD,IAAI,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,sDAAsD;gBACtD,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAE7B,IAAK,IAAoB,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;oBAC1C,0GAA0G;oBAC1G,gCAAgC;oBAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAE7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;wBAClD,gBAAgB,IAAI,gBAAgB,CAAC;wBACrC,CAAC,IAAI,gBAAgB,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAE3B,gBAAgB,EAAE,CAAC;wBACnB,CAAC,EAAE,CAAC;oBACN,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { esmDependencies } from "../../../../util/esmDependencies.js";
2
+ /**
3
+ * Rehype plugin which adds a space after each checkbox input element. This is
4
+ * because remark doesn't add any spaces between the checkbox input and the text
5
+ * itself, but these are needed for correct Markdown syntax.
6
+ */
7
+ export function addSpacesToCheckboxes() {
8
+ const deps = esmDependencies;
9
+ if (!deps) {
10
+ throw new Error("addSpacesToCheckboxes requires ESM dependencies to be initialized");
11
+ }
12
+ const helper = (tree) => {
13
+ if (tree.children && "length" in tree.children && tree.children.length) {
14
+ for (let i = tree.children.length - 1; i >= 0; i--) {
15
+ const child = tree.children[i];
16
+ const nextChild = i + 1 < tree.children.length ? tree.children[i + 1] : undefined;
17
+ // Checks for paragraph element after checkbox input element.
18
+ if (child.type === "element" &&
19
+ child.tagName === "input" &&
20
+ child.properties?.type === "checkbox" &&
21
+ nextChild?.type === "element" &&
22
+ nextChild.tagName === "p") {
23
+ // Converts paragraph to span, otherwise remark will think it needs to
24
+ // be on a new line.
25
+ nextChild.tagName = "span";
26
+ // Adds a space after the checkbox input element.
27
+ nextChild.children.splice(0, 0, deps.hastUtilFromDom.fromDom(document.createTextNode(" ")));
28
+ }
29
+ else {
30
+ helper(child);
31
+ }
32
+ }
33
+ }
34
+ };
35
+ return helper;
36
+ }
37
+ //# sourceMappingURL=addSpacesToCheckboxesRehypePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addSpacesToCheckboxesRehypePlugin.js","sourceRoot":"","sources":["../../../../../../src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAElE,6DAA6D;gBAC7D,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;oBACxB,KAAK,CAAC,OAAO,KAAK,OAAO;oBACzB,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,UAAU;oBACrC,SAAS,EAAE,IAAI,KAAK,SAAS;oBAC7B,SAAS,CAAC,OAAO,KAAK,GAAG,EACzB,CAAC;oBACD,sEAAsE;oBACtE,oBAAoB;oBACpB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;oBAC3B,iDAAiD;oBACjD,SAAS,CAAC,QAAQ,CAAC,MAAM,CACvB,CAAC,EACD,CAAC,EACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAC1B,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CACd,CACjB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAmB,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Retrieves the position just before the nearest block node in a ProseMirror
3
+ * doc, relative to a position. If the position is within a block node or its
4
+ * descendants, the position just before it is returned. If the position is not
5
+ * within a block node or its descendants, the position just before the next
6
+ * closest block node is returned. If the position is beyond the last block, the
7
+ * position just before the last block is returned.
8
+ * @param doc The ProseMirror doc.
9
+ * @param pos An integer position in the document.
10
+ * @returns The position just before the nearest blockContainer node.
11
+ */
12
+ export function getNearestBlockPos(doc, pos) {
13
+ const $pos = doc.resolve(pos);
14
+ // Checks if the position provided is already just before a block node, in
15
+ // which case we return the position.
16
+ if ($pos.nodeAfter && $pos.nodeAfter.type.isInGroup("bnBlock")) {
17
+ return {
18
+ posBeforeNode: $pos.pos,
19
+ node: $pos.nodeAfter,
20
+ };
21
+ }
22
+ // Checks the node containing the position and its ancestors until a
23
+ // block node is found and returned.
24
+ let depth = $pos.depth;
25
+ let node = $pos.node(depth);
26
+ while (depth > 0) {
27
+ if (node.type.isInGroup("bnBlock")) {
28
+ return {
29
+ posBeforeNode: $pos.before(depth),
30
+ node: node,
31
+ };
32
+ }
33
+ depth--;
34
+ node = $pos.node(depth);
35
+ }
36
+ // If the position doesn't lie within a block node, we instead find the
37
+ // position of the next closest one. If the position is beyond the last block,
38
+ // we return the position of the last block. While running `doc.descendants`
39
+ // is expensive, this case should be very rarely triggered. However, it's
40
+ // possible for the position to sometimes be beyond the last block node. This
41
+ // is a problem specifically when using the collaboration plugin.
42
+ const allBlockContainerPositions = [];
43
+ doc.descendants((node, pos) => {
44
+ if (node.type.isInGroup("bnBlock")) {
45
+ allBlockContainerPositions.push(pos);
46
+ }
47
+ });
48
+ // eslint-disable-next-line no-console
49
+ console.warn(`Position ${pos} is not within a blockContainer node.`);
50
+ const resolvedPos = doc.resolve(allBlockContainerPositions.find((position) => position >= pos) ||
51
+ allBlockContainerPositions[allBlockContainerPositions.length - 1]);
52
+ return {
53
+ posBeforeNode: resolvedPos.pos,
54
+ node: resolvedPos.nodeAfter,
55
+ };
56
+ }
57
+ /**
58
+ * Gets information regarding the ProseMirror nodes that make up a block in a
59
+ * BlockNote document. This includes the main `blockContainer` node, the
60
+ * `blockContent` node with the block's main body, and the optional `blockGroup`
61
+ * node which contains the block's children. As well as the nodes, also returns
62
+ * the ProseMirror positions just before & after each node.
63
+ * @param node The main `blockContainer` node that the block information should
64
+ * be retrieved from,
65
+ * @param bnBlockBeforePosOffset the position just before the
66
+ * `blockContainer` node in the document.
67
+ */
68
+ export function getBlockInfoWithManualOffset(node, bnBlockBeforePosOffset) {
69
+ if (!node.type.isInGroup("bnBlock")) {
70
+ throw new Error(`Attempted to get bnBlock node at position but found node of different type ${node.type}`);
71
+ }
72
+ const bnBlockNode = node;
73
+ const bnBlockBeforePos = bnBlockBeforePosOffset;
74
+ const bnBlockAfterPos = bnBlockBeforePos + bnBlockNode.nodeSize;
75
+ const bnBlock = {
76
+ node: bnBlockNode,
77
+ beforePos: bnBlockBeforePos,
78
+ afterPos: bnBlockAfterPos,
79
+ };
80
+ if (bnBlockNode.type.name === "blockContainer") {
81
+ let blockContent;
82
+ let blockGroup;
83
+ bnBlockNode.forEach((node, offset) => {
84
+ if (node.type.spec.group === "blockContent") {
85
+ // console.log(beforePos, offset);
86
+ const blockContentNode = node;
87
+ const blockContentBeforePos = bnBlockBeforePos + offset + 1;
88
+ const blockContentAfterPos = blockContentBeforePos + node.nodeSize;
89
+ blockContent = {
90
+ node: blockContentNode,
91
+ beforePos: blockContentBeforePos,
92
+ afterPos: blockContentAfterPos,
93
+ };
94
+ }
95
+ else if (node.type.name === "blockGroup") {
96
+ const blockGroupNode = node;
97
+ const blockGroupBeforePos = bnBlockBeforePos + offset + 1;
98
+ const blockGroupAfterPos = blockGroupBeforePos + node.nodeSize;
99
+ blockGroup = {
100
+ node: blockGroupNode,
101
+ beforePos: blockGroupBeforePos,
102
+ afterPos: blockGroupAfterPos,
103
+ };
104
+ }
105
+ });
106
+ if (!blockContent) {
107
+ throw new Error(`blockContainer node does not contain a blockContent node in its children: ${bnBlockNode}`);
108
+ }
109
+ return {
110
+ isBlockContainer: true,
111
+ bnBlock,
112
+ blockContent,
113
+ childContainer: blockGroup,
114
+ blockNoteType: blockContent.node.type.name,
115
+ };
116
+ }
117
+ else {
118
+ if (!bnBlock.node.type.isInGroup("childContainer")) {
119
+ throw new Error(`bnBlock node is not in the childContainer group: ${bnBlock.node}`);
120
+ }
121
+ return {
122
+ isBlockContainer: false,
123
+ bnBlock: bnBlock,
124
+ childContainer: bnBlock,
125
+ blockNoteType: bnBlock.node.type.name,
126
+ };
127
+ }
128
+ }
129
+ /**
130
+ * Gets information regarding the ProseMirror nodes that make up a block in a
131
+ * BlockNote document. This includes the main `blockContainer` node, the
132
+ * `blockContent` node with the block's main body, and the optional `blockGroup`
133
+ * node which contains the block's children. As well as the nodes, also returns
134
+ * the ProseMirror positions just before & after each node.
135
+ * @param posInfo An object with the main `blockContainer` node that the block
136
+ * information should be retrieved from, and the position just before it in the
137
+ * document.
138
+ */
139
+ export function getBlockInfo(posInfo) {
140
+ return getBlockInfoWithManualOffset(posInfo.node, posInfo.posBeforeNode);
141
+ }
142
+ /**
143
+ * Gets information regarding the ProseMirror nodes that make up a block from a
144
+ * resolved position just before the `blockContainer` node in the document that
145
+ * corresponds to it.
146
+ * @param resolvedPos The resolved position just before the `blockContainer`
147
+ * node.
148
+ */
149
+ export function getBlockInfoFromResolvedPos(resolvedPos) {
150
+ if (!resolvedPos.nodeAfter) {
151
+ throw new Error(`Attempted to get blockContainer node at position ${resolvedPos.pos} but a node at this position does not exist`);
152
+ }
153
+ return getBlockInfoWithManualOffset(resolvedPos.nodeAfter, resolvedPos.pos);
154
+ }
155
+ /**
156
+ * Gets information regarding the ProseMirror nodes that make up a block. The
157
+ * block chosen is the one currently containing the current ProseMirror
158
+ * selection.
159
+ * @param state The ProseMirror editor state.
160
+ */
161
+ export function getBlockInfoFromSelection(state) {
162
+ const posInfo = getNearestBlockPos(state.doc, state.selection.anchor);
163
+ return getBlockInfo(posInfo);
164
+ }
165
+ //# sourceMappingURL=getBlockInfoFromPos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBlockInfoFromPos.js","sourceRoot":"","sources":["../../../src/api/getBlockInfoFromPos.ts"],"names":[],"mappings":"AA8CA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAS,EAAE,GAAW;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9B,0EAA0E;IAC1E,qCAAqC;IACrC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/D,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,GAAG;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,oCAAoC;IACpC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACjC,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,KAAK,EAAE,CAAC;QACR,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,8EAA8E;IAC9E,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,0BAA0B,GAAa,EAAE,CAAC;IAChD,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,uCAAuC,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAC7B,0BAA0B,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC;QAC5D,0BAA0B,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC,CACpE,CAAC;IACF,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,GAAG;QAC9B,IAAI,EAAE,WAAW,CAAC,SAAU;KAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAU,EACV,sBAA8B;IAE9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,8EAA8E,IAAI,CAAC,IAAI,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC;IACzB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;IAChD,MAAM,eAAe,GAAG,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC;IAEhE,MAAM,OAAO,GAAoB;QAC/B,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,eAAe;KAC1B,CAAC;IAEF,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/C,IAAI,YAAyC,CAAC;QAC9C,IAAI,UAAuC,CAAC;QAE5C,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC5C,kCAAkC;gBAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC;gBAC5D,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAEnE,YAAY,GAAG;oBACb,IAAI,EAAE,gBAAgB;oBACtB,SAAS,EAAE,qBAAqB;oBAChC,QAAQ,EAAE,oBAAoB;iBAC/B,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3C,MAAM,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC;gBAC1D,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE/D,UAAU,GAAG;oBACX,IAAI,EAAE,cAAc;oBACpB,SAAS,EAAE,mBAAmB;oBAC9B,QAAQ,EAAE,kBAAkB;iBAC7B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,6EAA6E,WAAW,EAAE,CAC3F,CAAC;QACJ,CAAC;QAED,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,OAAO;YACP,YAAY;YACZ,cAAc,EAAE,UAAU;YAC1B,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;SAC3C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,oDAAoD,OAAO,CAAC,IAAI,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,OAAO;YACvB,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;SACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAA8C;IACzE,OAAO,4BAA4B,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAwB;IAClE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,oDAAoD,WAAW,CAAC,GAAG,6CAA6C,CACjH,CAAC;IACJ,CAAC;IACD,OAAO,4BAA4B,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAkB;IAC1D,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEtE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,197 @@
1
+ import UniqueID from "../../extensions/UniqueID/UniqueID.js";
2
+ import { isPartialLinkInlineContent, isStyledTextInlineContent, } from "../../schema/inlineContent/types.js";
3
+ import { UnreachableCaseError } from "../../util/typescript.js";
4
+ /**
5
+ * Convert a StyledText inline element to a
6
+ * prosemirror text node with the appropriate marks
7
+ */
8
+ function styledTextToNodes(styledText, schema, styleSchema) {
9
+ const marks = [];
10
+ for (const [style, value] of Object.entries(styledText.styles)) {
11
+ const config = styleSchema[style];
12
+ if (!config) {
13
+ throw new Error(`style ${style} not found in styleSchema`);
14
+ }
15
+ if (config.propSchema === "boolean") {
16
+ marks.push(schema.mark(style));
17
+ }
18
+ else if (config.propSchema === "string") {
19
+ marks.push(schema.mark(style, { stringValue: value }));
20
+ }
21
+ else {
22
+ throw new UnreachableCaseError(config.propSchema);
23
+ }
24
+ }
25
+ return (styledText.text
26
+ // Splits text & line breaks.
27
+ .split(/(\n)/g)
28
+ // If the content ends with a line break, an empty string is added to the
29
+ // end, which this removes.
30
+ .filter((text) => text.length > 0)
31
+ // Converts text & line breaks to nodes.
32
+ .map((text) => {
33
+ if (text === "\n") {
34
+ return schema.nodes["hardBreak"].createChecked();
35
+ }
36
+ else {
37
+ return schema.text(text, marks);
38
+ }
39
+ }));
40
+ }
41
+ /**
42
+ * Converts a Link inline content element to
43
+ * prosemirror text nodes with the appropriate marks
44
+ */
45
+ function linkToNodes(link, schema, styleSchema) {
46
+ const linkMark = schema.marks.link.create({
47
+ href: link.href,
48
+ });
49
+ return styledTextArrayToNodes(link.content, schema, styleSchema).map((node) => {
50
+ if (node.type.name === "text") {
51
+ return node.mark([...node.marks, linkMark]);
52
+ }
53
+ if (node.type.name === "hardBreak") {
54
+ return node;
55
+ }
56
+ throw new Error("unexpected node type");
57
+ });
58
+ }
59
+ /**
60
+ * Converts an array of StyledText inline content elements to
61
+ * prosemirror text nodes with the appropriate marks
62
+ */
63
+ function styledTextArrayToNodes(content, schema, styleSchema) {
64
+ const nodes = [];
65
+ if (typeof content === "string") {
66
+ nodes.push(...styledTextToNodes({ type: "text", text: content, styles: {} }, schema, styleSchema));
67
+ return nodes;
68
+ }
69
+ for (const styledText of content) {
70
+ nodes.push(...styledTextToNodes(styledText, schema, styleSchema));
71
+ }
72
+ return nodes;
73
+ }
74
+ /**
75
+ * converts an array of inline content elements to prosemirror nodes
76
+ */
77
+ export function inlineContentToNodes(blockContent, schema, styleSchema) {
78
+ const nodes = [];
79
+ for (const content of blockContent) {
80
+ if (typeof content === "string") {
81
+ nodes.push(...styledTextArrayToNodes(content, schema, styleSchema));
82
+ }
83
+ else if (isPartialLinkInlineContent(content)) {
84
+ nodes.push(...linkToNodes(content, schema, styleSchema));
85
+ }
86
+ else if (isStyledTextInlineContent(content)) {
87
+ nodes.push(...styledTextArrayToNodes([content], schema, styleSchema));
88
+ }
89
+ else {
90
+ nodes.push(blockOrInlineContentToContentNode(content, schema, styleSchema));
91
+ }
92
+ }
93
+ return nodes;
94
+ }
95
+ /**
96
+ * converts an array of inline content elements to prosemirror nodes
97
+ */
98
+ export function tableContentToNodes(tableContent, schema, styleSchema) {
99
+ const rowNodes = [];
100
+ for (const row of tableContent.rows) {
101
+ const columnNodes = [];
102
+ for (let i = 0; i < row.cells.length; i++) {
103
+ const cell = row.cells[i];
104
+ let pNode;
105
+ if (!cell) {
106
+ pNode = schema.nodes["tableParagraph"].createChecked({});
107
+ }
108
+ else if (typeof cell === "string") {
109
+ pNode = schema.nodes["tableParagraph"].createChecked({}, schema.text(cell));
110
+ }
111
+ else {
112
+ const textNodes = inlineContentToNodes(cell, schema, styleSchema);
113
+ pNode = schema.nodes["tableParagraph"].createChecked({}, textNodes);
114
+ }
115
+ const cellNode = schema.nodes["tableCell"].createChecked({
116
+ // The colwidth array should have multiple values when the colspan of
117
+ // a cell is greater than 1. However, this is not yet implemented so
118
+ // we can always assume a length of 1.
119
+ colwidth: tableContent.columnWidths?.[i]
120
+ ? [tableContent.columnWidths[i]]
121
+ : null,
122
+ }, pNode);
123
+ columnNodes.push(cellNode);
124
+ }
125
+ const rowNode = schema.nodes["tableRow"].createChecked({}, columnNodes);
126
+ rowNodes.push(rowNode);
127
+ }
128
+ return rowNodes;
129
+ }
130
+ function blockOrInlineContentToContentNode(block, schema, styleSchema) {
131
+ let contentNode;
132
+ let type = block.type;
133
+ // TODO: needed? came from previous code
134
+ if (type === undefined) {
135
+ type = "paragraph";
136
+ }
137
+ if (!schema.nodes[type]) {
138
+ throw new Error(`node type ${type} not found in schema`);
139
+ }
140
+ if (!block.content) {
141
+ contentNode = schema.nodes[type].createChecked(block.props);
142
+ }
143
+ else if (typeof block.content === "string") {
144
+ const nodes = inlineContentToNodes([block.content], schema, styleSchema);
145
+ contentNode = schema.nodes[type].createChecked(block.props, nodes);
146
+ }
147
+ else if (Array.isArray(block.content)) {
148
+ const nodes = inlineContentToNodes(block.content, schema, styleSchema);
149
+ contentNode = schema.nodes[type].createChecked(block.props, nodes);
150
+ }
151
+ else if (block.content.type === "tableContent") {
152
+ const nodes = tableContentToNodes(block.content, schema, styleSchema);
153
+ contentNode = schema.nodes[type].createChecked(block.props, nodes);
154
+ }
155
+ else {
156
+ throw new UnreachableCaseError(block.content.type);
157
+ }
158
+ return contentNode;
159
+ }
160
+ /**
161
+ * Converts a BlockNote block to a Prosemirror node.
162
+ */
163
+ export function blockToNode(block, schema, styleSchema) {
164
+ let id = block.id;
165
+ if (id === undefined) {
166
+ id = UniqueID.options.generateID();
167
+ }
168
+ const children = [];
169
+ if (block.children) {
170
+ for (const child of block.children) {
171
+ children.push(blockToNode(child, schema, styleSchema));
172
+ }
173
+ }
174
+ const nodeTypeCorrespondingToBlock = schema.nodes[block.type];
175
+ if (nodeTypeCorrespondingToBlock.isInGroup("blockContent")) {
176
+ // Blocks with a type that matches "blockContent" group always need to be wrapped in a blockContainer
177
+ const contentNode = blockOrInlineContentToContentNode(block, schema, styleSchema);
178
+ const groupNode = children.length > 0
179
+ ? schema.nodes["blockGroup"].createChecked({}, children)
180
+ : undefined;
181
+ return schema.nodes["blockContainer"].createChecked({
182
+ id: id,
183
+ ...block.props,
184
+ }, groupNode ? [contentNode, groupNode] : contentNode);
185
+ }
186
+ else if (nodeTypeCorrespondingToBlock.isInGroup("bnBlock")) {
187
+ // this is a bnBlock node like Column or ColumnList that directly translates to a prosemirror node
188
+ return schema.nodes[block.type].createChecked({
189
+ id: id,
190
+ ...block.props,
191
+ }, children);
192
+ }
193
+ else {
194
+ throw new Error(`block type ${block.type} doesn't match blockContent or bnBlock group`);
195
+ }
196
+ }
197
+ //# sourceMappingURL=blockToNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockToNode.js","sourceRoot":"","sources":["../../../../src/api/nodeConversions/blockToNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { nodeToBlock } from "./nodeToBlock.js";
2
+ /**
3
+ * Converts all Blocks within a fragment to BlockNote blocks.
4
+ */
5
+ export function fragmentToBlocks(fragment, schema) {
6
+ // first convert selection to blocknote-style blocks, and then
7
+ // pass these to the exporter
8
+ const blocks = [];
9
+ fragment.descendants((node) => {
10
+ if (node.type.name === "blockContainer") {
11
+ if (node.firstChild?.type.name === "blockGroup") {
12
+ // selection started within a block group
13
+ // in this case the fragment starts with:
14
+ // <blockContainer>
15
+ // <blockGroup>
16
+ // <blockContainer ... />
17
+ // <blockContainer ... />
18
+ // </blockGroup>
19
+ // </blockContainer>
20
+ //
21
+ // instead of:
22
+ // <blockContainer>
23
+ // <blockContent ... />
24
+ // <blockGroup>
25
+ // <blockContainer ... />
26
+ // <blockContainer ... />
27
+ // </blockGroup>
28
+ // </blockContainer>
29
+ //
30
+ // so we don't need to serialize this block, just descend into the children of the blockGroup
31
+ return true;
32
+ }
33
+ }
34
+ if (node.type.name === "columnList" && node.childCount === 1) {
35
+ // column lists with a single column should be flattened (not the entire column list has been selected)
36
+ node.firstChild?.forEach((child) => {
37
+ blocks.push(nodeToBlock(child, schema.blockSchema, schema.inlineContentSchema, schema.styleSchema));
38
+ });
39
+ return false;
40
+ }
41
+ if (node.type.isInGroup("bnBlock")) {
42
+ blocks.push(nodeToBlock(node, schema.blockSchema, schema.inlineContentSchema, schema.styleSchema));
43
+ // don't descend into children, as they're already included in the block returned by nodeToBlock
44
+ return false;
45
+ }
46
+ return true;
47
+ });
48
+ return blocks;
49
+ }
50
+ //# sourceMappingURL=fragmentToBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragmentToBlocks.js","sourceRoot":"","sources":["../../../../src/api/nodeConversions/fragmentToBlocks.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAI9B,QAAkB,EAAE,MAAgC;IACpD,8DAA8D;IAC9D,6BAA6B;IAC7B,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChD,yCAAyC;gBACzC,yCAAyC;gBACzC,mBAAmB;gBACnB,iBAAiB;gBACjB,6BAA6B;gBAC7B,6BAA6B;gBAC7B,kBAAkB;gBAClB,oBAAoB;gBACpB,EAAE;gBACF,cAAc;gBACd,mBAAmB;gBACnB,yBAAyB;gBACzB,iBAAiB;gBACjB,6BAA6B;gBAC7B,6BAA6B;gBAC7B,kBAAkB;gBAClB,oBAAoB;gBACpB,EAAE;gBACF,6FAA6F;gBAC7F,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC7D,uGAAuG;YACvG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,MAAM,CAAC,IAAI,CACT,WAAW,CACT,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,WAAW,CACnB,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACT,WAAW,CACT,IAAI,EACJ,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,WAAW,CACnB,CACF,CAAC;YACF,gGAAgG;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
+ import { customBlocksTestCases } from "../testUtil/cases/customBlocks.js";
3
+ import { customInlineContentTestCases } from "../testUtil/cases/customInlineContent.js";
4
+ import { customStylesTestCases } from "../testUtil/cases/customStyles.js";
5
+ import { defaultSchemaTestCases } from "../testUtil/cases/defaultSchema.js";
6
+ import { addIdsToBlock, partialBlockToBlockForTesting, } from "../testUtil/partialBlockTestUtil.js";
7
+ import { blockToNode } from "./blockToNode.js";
8
+ import { nodeToBlock } from "./nodeToBlock.js";
9
+ function validateConversion(block, editor) {
10
+ addIdsToBlock(block);
11
+ const node = blockToNode(block, editor.pmSchema, editor.schema.styleSchema);
12
+ expect(node).toMatchSnapshot();
13
+ const outputBlock = nodeToBlock(node, editor.schema.blockSchema, editor.schema.inlineContentSchema, editor.schema.styleSchema);
14
+ const fullOriginalBlock = partialBlockToBlockForTesting(editor.schema.blockSchema, block);
15
+ expect(outputBlock).toStrictEqual(fullOriginalBlock);
16
+ }
17
+ const testCases = [
18
+ defaultSchemaTestCases,
19
+ customStylesTestCases,
20
+ customInlineContentTestCases,
21
+ customBlocksTestCases,
22
+ ];
23
+ describe("Test BlockNote-Prosemirror conversion", () => {
24
+ for (const testCase of testCases) {
25
+ describe("Case: " + testCase.name, () => {
26
+ let editor;
27
+ const div = document.createElement("div");
28
+ beforeEach(() => {
29
+ editor = testCase.createEditor();
30
+ // Note that we don't necessarily need to mount a root
31
+ // Currently, we do mount to a root so that it reflects the "production" use-case more closely.
32
+ // However, it would be nice to increased converage and share the same set of tests for these cases:
33
+ // - does render to a root
34
+ // - does not render to a root
35
+ // - runs in server (jsdom) environment using server-util
36
+ editor.mount(div);
37
+ });
38
+ afterEach(() => {
39
+ editor.mount(undefined);
40
+ editor._tiptapEditor.destroy();
41
+ editor = undefined;
42
+ delete window.__TEST_OPTIONS;
43
+ });
44
+ for (const document of testCase.documents) {
45
+ // eslint-disable-next-line no-loop-func
46
+ it("Convert " + document.name + " to/from prosemirror", () => {
47
+ // NOTE: only converts first block
48
+ validateConversion(document.blocks[0], editor);
49
+ });
50
+ }
51
+ });
52
+ }
53
+ });
54
+ //# sourceMappingURL=nodeConversions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeConversions.test.js","sourceRoot":"","sources":["../../../../src/api/nodeConversions/nodeConversions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAKrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EACL,aAAa,EACb,6BAA6B,GAC9B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,SAAS,kBAAkB,CACzB,KAAkC,EAClC,MAAsC;IAEtC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE5E,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,WAAW,CAC7B,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,WAAW,EACzB,MAAM,CAAC,MAAM,CAAC,mBAAmB,EACjC,MAAM,CAAC,MAAM,CAAC,WAAW,CAC1B,CAAC;IAEF,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,MAAM,CAAC,MAAM,CAAC,WAAW,EACzB,KAAK,CACN,CAAC;IAEF,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,sBAAsB;IACtB,qBAAqB;IACrB,4BAA4B;IAC5B,qBAAqB;CACtB,CAAC;AAEF,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;YACtC,IAAI,MAAsC,CAAC;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE1C,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACjC,sDAAsD;gBACtD,+FAA+F;gBAE/F,oGAAoG;gBACpG,0BAA0B;gBAC1B,8BAA8B;gBAC9B,yDAAyD;gBACzD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,GAAG,SAAgB,CAAC;gBAE1B,OAAQ,MAA4C,CAAC,cAAc,CAAC;YACtE,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1C,wCAAwC;gBACxC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,GAAG,sBAAsB,EAAE,GAAG,EAAE;oBAC3D,kCAAkC;oBAClC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}