@blocknote/core 0.15.11 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocknote.js +3349 -2773
- package/dist/blocknote.js.map +1 -1
- package/dist/blocknote.umd.cjs +6 -6
- package/dist/blocknote.umd.cjs.map +1 -1
- package/dist/webpack-stats.json +1 -1
- package/package.json +5 -2
- package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +3087 -0
- package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.ts +132 -0
- package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +71 -0
- package/src/api/blockManipulation/commands/mergeBlocks/__snapshots__/mergeBlocks.test.ts.snap +2276 -0
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +131 -0
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +103 -0
- package/src/api/blockManipulation/commands/moveBlock/__snapshots__/moveBlock.test.ts.snap +3767 -0
- package/src/api/blockManipulation/commands/moveBlock/moveBlock.test.ts +192 -0
- package/src/api/blockManipulation/commands/moveBlock/moveBlock.ts +178 -0
- package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +1136 -0
- package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.ts +34 -0
- package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +100 -0
- package/src/api/blockManipulation/commands/replaceBlocks/__snapshots__/replaceBlocks.test.ts.snap +4931 -0
- package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.ts +222 -0
- package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +70 -0
- package/src/api/blockManipulation/commands/splitBlock/__snapshots__/splitBlock.test.ts.snap +2924 -0
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +136 -0
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +48 -0
- package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +8376 -0
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +300 -0
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +199 -0
- package/src/api/blockManipulation/insertContentAt.ts +96 -0
- package/src/api/blockManipulation/selections/textCursorPosition/__snapshots__/textCursorPosition.test.ts.snap +316 -0
- package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.ts +53 -0
- package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +130 -0
- package/src/api/blockManipulation/setupTestEnv.ts +179 -0
- package/src/api/clipboard/__snapshots__/childToParent.html +1 -0
- package/src/api/clipboard/__snapshots__/childrenToNextParent.html +1 -0
- package/src/api/clipboard/__snapshots__/childrenToNextParentsChildren.html +1 -0
- package/src/api/clipboard/__snapshots__/image.html +1 -0
- package/src/api/clipboard/__snapshots__/multipleStyledText.html +1 -0
- package/src/api/clipboard/__snapshots__/nestedImage.html +1 -0
- package/src/api/clipboard/__snapshots__/partialChildToParent.html +1 -0
- package/src/api/clipboard/__snapshots__/styledText.html +1 -0
- package/src/api/clipboard/__snapshots__/tableAllCells.html +1 -0
- package/src/api/clipboard/__snapshots__/tableCell.html +1 -0
- package/src/api/clipboard/__snapshots__/tableCellText.html +1 -0
- package/src/api/clipboard/__snapshots__/tableRow.html +1 -0
- package/src/api/clipboard/__snapshots__/unstyledText.html +1 -0
- package/src/api/clipboard/clipboard.test.ts +283 -0
- package/src/api/{parsers → clipboard/fromClipboard}/fileDropExtension.ts +8 -4
- package/src/api/{parsers → clipboard/fromClipboard}/handleFileInsertion.ts +12 -7
- package/src/api/{parsers → clipboard/fromClipboard}/pasteExtension.ts +19 -8
- package/src/api/clipboard/toClipboard/copyExtension.ts +243 -0
- package/src/api/exporters/html/__snapshots__/complex/misc/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/lists/basic/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/lists/nested/external.html +1 -1
- package/src/api/exporters/html/externalHTMLExporter.ts +42 -87
- package/src/api/exporters/html/htmlConversion.test.ts +19 -156
- package/src/api/exporters/html/internalHTMLSerializer.ts +21 -69
- package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +263 -0
- package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +158 -0
- package/src/api/exporters/markdown/markdownExporter.test.ts +10 -10
- package/src/api/exporters/markdown/markdownExporter.ts +11 -7
- package/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.ts +2 -2
- package/src/api/getBlockInfoFromPos.ts +172 -90
- package/src/api/nodeConversions/blockToNode.ts +257 -0
- package/src/api/nodeConversions/fragmentToBlocks.ts +60 -0
- package/src/api/nodeConversions/nodeConversions.test.ts +9 -8
- package/src/api/nodeConversions/{nodeConversions.ts → nodeToBlock.ts} +20 -262
- package/src/api/parsers/html/parseHTML.test.ts +5 -8
- package/src/api/parsers/html/parseHTML.ts +8 -4
- package/src/api/parsers/html/util/nestedLists.test.ts +2 -2
- package/src/api/parsers/markdown/__snapshots__/pasted/complex.json +319 -0
- package/src/api/parsers/markdown/__snapshots__/pasted/issue-226-1.json +81 -0
- package/src/api/parsers/{html/__snapshots__/paste/parse-deep-nested-content.json → markdown/__snapshots__/pasted/issue-226-2.json} +35 -110
- package/src/api/parsers/markdown/__snapshots__/pasted/nested.json +81 -0
- package/src/api/parsers/markdown/__snapshots__/pasted/non-nested.json +81 -0
- package/src/api/parsers/markdown/__snapshots__/pasted/styled.json +61 -0
- package/src/api/parsers/markdown/parseMarkdown.test.ts +16 -1
- package/src/api/parsers/markdown/parseMarkdown.ts +8 -4
- package/src/api/testUtil/cases/customBlocks.ts +11 -11
- package/src/api/testUtil/cases/customInlineContent.ts +6 -6
- package/src/api/testUtil/cases/customStyles.ts +6 -6
- package/src/api/testUtil/cases/defaultSchema.ts +4 -4
- package/src/api/testUtil/index.ts +6 -6
- package/src/api/testUtil/partialBlockTestUtil.ts +5 -5
- package/src/api/testUtil/paste.ts +46 -0
- package/src/blocks/AudioBlockContent/AudioBlockContent.ts +5 -5
- package/src/blocks/FileBlockContent/FileBlockContent.ts +4 -4
- package/src/blocks/FileBlockContent/fileBlockHelpers.ts +2 -2
- package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +61 -39
- package/src/blocks/ImageBlockContent/ImageBlockContent.ts +5 -5
- package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +30 -18
- package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +67 -33
- package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +23 -19
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +22 -24
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +31 -19
- package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +16 -11
- package/src/blocks/TableBlockContent/TableBlockContent.ts +4 -5
- package/src/blocks/VideoBlockContent/VideoBlockContent.ts +5 -5
- package/src/blocks/defaultBlockHelpers.ts +4 -4
- package/src/blocks/defaultBlockTypeGuards.ts +5 -5
- package/src/blocks/defaultBlocks.ts +13 -13
- package/src/blocks/defaultProps.ts +1 -1
- package/src/editor/BlockNoteEditor.test.ts +14 -7
- package/src/editor/BlockNoteEditor.ts +82 -149
- package/src/editor/BlockNoteExtensions.ts +15 -11
- package/src/editor/BlockNoteSchema.ts +7 -7
- package/src/editor/BlockNoteTipTapEditor.ts +5 -3
- package/src/editor/cursorPositionTypes.ts +7 -2
- package/src/editor/selectionTypes.ts +6 -2
- package/src/editor/transformPasted.ts +34 -2
- package/src/extensions/BackgroundColor/BackgroundColorExtension.ts +1 -1
- package/src/extensions/BackgroundColor/BackgroundColorMark.ts +1 -1
- package/src/extensions/FilePanel/FilePanelPlugin.ts +4 -4
- package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +8 -4
- package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +333 -0
- package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +9 -4
- package/src/extensions/{NonEditableBlocks/NonEditableBlockPlugin.ts → NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts} +2 -2
- package/src/extensions/Placeholder/PlaceholderPlugin.ts +1 -1
- package/src/extensions/SideMenu/SideMenuPlugin.ts +72 -402
- package/src/extensions/SideMenu/dragging.ts +251 -0
- package/src/extensions/SuggestionMenu/DefaultSuggestionItem.ts +1 -1
- package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +8 -4
- package/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts +8 -4
- package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +19 -15
- package/src/extensions/TableHandles/TableHandlesPlugin.ts +11 -7
- package/src/extensions/TextColor/TextColorExtension.ts +1 -1
- package/src/extensions/TextColor/TextColorMark.ts +1 -1
- package/src/i18n/dictionary.ts +1 -1
- package/src/i18n/locales/ar.ts +1 -1
- package/src/i18n/locales/fr.ts +1 -1
- package/src/i18n/locales/hr.ts +308 -0
- package/src/i18n/locales/index.ts +15 -14
- package/src/i18n/locales/is.ts +1 -1
- package/src/i18n/locales/ja.ts +1 -1
- package/src/i18n/locales/ko.ts +1 -1
- package/src/i18n/locales/nl.ts +1 -1
- package/src/i18n/locales/pl.ts +1 -1
- package/src/i18n/locales/pt.ts +1 -1
- package/src/i18n/locales/ru.ts +1 -1
- package/src/i18n/locales/vi.ts +1 -1
- package/src/i18n/locales/zh.ts +1 -1
- package/src/index.ts +45 -44
- package/src/pm-nodes/BlockContainer.ts +3 -647
- package/src/pm-nodes/BlockGroup.ts +2 -2
- package/src/pm-nodes/index.ts +3 -3
- package/src/schema/blocks/createSpec.ts +24 -14
- package/src/schema/blocks/internal.ts +9 -9
- package/src/schema/blocks/types.ts +4 -4
- package/src/schema/index.ts +10 -10
- package/src/schema/inlineContent/createSpec.ts +9 -10
- package/src/schema/inlineContent/internal.ts +3 -3
- package/src/schema/inlineContent/types.ts +2 -2
- package/src/schema/styles/createSpec.ts +4 -3
- package/src/schema/styles/internal.ts +1 -1
- package/types/src/api/blockManipulation/commands/insertBlocks/insertBlocks.d.ts +4 -0
- package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.d.ts +7 -0
- package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/moveBlock/moveBlock.d.ts +5 -0
- package/types/src/api/blockManipulation/commands/moveBlock/moveBlock.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.d.ts +7 -0
- package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.d.ts +7 -0
- package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/splitBlock/splitBlock.d.ts +5 -0
- package/types/src/api/blockManipulation/commands/splitBlock/splitBlock.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.d.ts +11 -0
- package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.test.d.ts +1 -0
- package/types/src/api/blockManipulation/insertContentAt.d.ts +6 -0
- package/types/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.d.ts +5 -0
- package/types/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.d.ts +1 -0
- package/types/src/api/blockManipulation/setupTestEnv.d.ts +492 -0
- package/types/src/api/clipboard/clipboard.test.d.ts +1 -0
- package/types/src/api/clipboard/fromClipboard/fileDropExtension.d.ts +6 -0
- package/types/src/api/{parsers → clipboard/fromClipboard}/handleFileInsertion.d.ts +2 -2
- package/types/src/api/clipboard/fromClipboard/pasteExtension.d.ts +6 -0
- package/types/src/api/clipboard/toClipboard/copyExtension.d.ts +12 -0
- package/types/src/api/exporters/html/externalHTMLExporter.d.ts +7 -8
- package/types/src/api/exporters/html/internalHTMLSerializer.d.ts +6 -10
- package/types/src/api/exporters/html/util/serializeBlocksExternalHTML.d.ts +10 -0
- package/types/src/api/exporters/html/util/serializeBlocksInternalHTML.d.ts +11 -0
- package/types/src/api/exporters/markdown/markdownExporter.d.ts +3 -3
- package/types/src/api/getBlockInfoFromPos.d.ts +63 -20
- package/types/src/api/nodeConversions/blockToNode.d.ts +15 -0
- package/types/src/api/nodeConversions/fragmentToBlocks.d.ts +7 -0
- package/types/src/api/nodeConversions/nodeToBlock.d.ts +16 -0
- package/types/src/api/parsers/html/parseHTML.d.ts +2 -2
- package/types/src/api/parsers/markdown/parseMarkdown.d.ts +2 -2
- package/types/src/api/testUtil/cases/customBlocks.d.ts +39 -39
- package/types/src/api/testUtil/cases/customInlineContent.d.ts +35 -35
- package/types/src/api/testUtil/cases/customStyles.d.ts +35 -35
- package/types/src/api/testUtil/cases/defaultSchema.d.ts +2 -2
- package/types/src/api/testUtil/index.d.ts +6 -6
- package/types/src/api/testUtil/partialBlockTestUtil.d.ts +4 -4
- package/types/src/api/testUtil/paste.d.ts +2 -0
- package/types/src/blocks/AudioBlockContent/AudioBlockContent.d.ts +4 -4
- package/types/src/blocks/FileBlockContent/FileBlockContent.d.ts +4 -4
- package/types/src/blocks/FileBlockContent/fileBlockHelpers.d.ts +2 -2
- package/types/src/blocks/HeadingBlockContent/HeadingBlockContent.d.ts +2 -2
- package/types/src/blocks/ImageBlockContent/ImageBlockContent.d.ts +4 -4
- package/types/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.d.ts +2 -2
- package/types/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.d.ts +2 -2
- package/types/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.d.ts +2 -2
- package/types/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.d.ts +2 -2
- package/types/src/blocks/ParagraphBlockContent/ParagraphBlockContent.d.ts +2 -2
- package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +2 -2
- package/types/src/blocks/VideoBlockContent/VideoBlockContent.d.ts +4 -4
- package/types/src/blocks/defaultBlockHelpers.d.ts +3 -3
- package/types/src/blocks/defaultBlockTypeGuards.d.ts +4 -4
- package/types/src/blocks/defaultBlocks.d.ts +38 -38
- package/types/src/blocks/defaultProps.d.ts +1 -1
- package/types/src/editor/BlockNoteEditor.d.ts +28 -16
- package/types/src/editor/BlockNoteExtensions.d.ts +3 -3
- package/types/src/editor/BlockNoteSchema.d.ts +4 -4
- package/types/src/editor/BlockNoteTipTapEditor.d.ts +2 -2
- package/types/src/editor/cursorPositionTypes.d.ts +3 -2
- package/types/src/editor/selectionTypes.d.ts +2 -2
- package/types/src/editor/transformPasted.d.ts +8 -1
- package/types/src/extensions/BackgroundColor/BackgroundColorMark.d.ts +1 -1
- package/types/src/extensions/FilePanel/FilePanelPlugin.d.ts +4 -4
- package/types/src/extensions/FormattingToolbar/FormattingToolbarPlugin.d.ts +4 -4
- package/types/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.d.ts +5 -0
- package/types/src/extensions/LinkToolbar/LinkToolbarPlugin.d.ts +4 -4
- package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +2 -0
- package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +1 -1
- package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +12 -28
- package/types/src/extensions/SideMenu/dragging.d.ts +17 -0
- package/types/src/extensions/SuggestionMenu/DefaultSuggestionItem.d.ts +1 -1
- package/types/src/extensions/SuggestionMenu/SuggestionPlugin.d.ts +4 -4
- package/types/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.d.ts +3 -3
- package/types/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.d.ts +4 -4
- package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +4 -4
- package/types/src/extensions/TextColor/TextColorMark.d.ts +1 -1
- package/types/src/i18n/dictionary.d.ts +1 -1
- package/types/src/i18n/locales/ar.d.ts +1 -1
- package/types/src/i18n/locales/fr.d.ts +1 -1
- package/types/src/i18n/locales/hr.d.ts +239 -0
- package/types/src/i18n/locales/index.d.ts +15 -14
- package/types/src/i18n/locales/is.d.ts +1 -1
- package/types/src/i18n/locales/ja.d.ts +1 -1
- package/types/src/i18n/locales/ko.d.ts +1 -1
- package/types/src/i18n/locales/nl.d.ts +1 -1
- package/types/src/i18n/locales/pl.d.ts +1 -1
- package/types/src/i18n/locales/pt.d.ts +1 -1
- package/types/src/i18n/locales/ru.d.ts +1 -1
- package/types/src/i18n/locales/vi.d.ts +1 -1
- package/types/src/i18n/locales/zh.d.ts +1 -1
- package/types/src/index.d.ts +45 -44
- package/types/src/pm-nodes/BlockContainer.d.ts +2 -16
- package/types/src/pm-nodes/BlockGroup.d.ts +1 -1
- package/types/src/pm-nodes/index.d.ts +3 -3
- package/types/src/schema/blocks/createSpec.d.ts +5 -5
- package/types/src/schema/blocks/internal.d.ts +5 -5
- package/types/src/schema/blocks/types.d.ts +4 -4
- package/types/src/schema/index.d.ts +10 -10
- package/types/src/schema/inlineContent/createSpec.d.ts +3 -3
- package/types/src/schema/inlineContent/internal.d.ts +2 -2
- package/types/src/schema/inlineContent/types.d.ts +2 -2
- package/types/src/schema/styles/createSpec.d.ts +1 -1
- package/types/src/schema/styles/internal.d.ts +1 -1
- package/src/api/blockManipulation/__snapshots__/blockManipulation.test.ts.snap +0 -714
- package/src/api/blockManipulation/blockManipulation.test.ts +0 -292
- package/src/api/blockManipulation/blockManipulation.ts +0 -350
- package/src/api/exporters/copyExtension.ts +0 -164
- package/src/api/exporters/html/__snapshots_fragment_edge_cases__/selectionLeavesBlockChildren.html +0 -1
- package/src/api/exporters/html/__snapshots_fragment_edge_cases__/selectionSpansBlocksChildren.html +0 -1
- package/src/api/exporters/html/util/sharedHTMLConversion.ts +0 -130
- package/src/api/exporters/html/util/simplifyBlocksRehypePlugin.ts +0 -218
- package/src/api/getCurrentBlockContentType.ts +0 -14
- package/src/api/parsers/html/__snapshots__/paste/parse-google-docs-html.json +0 -476
- package/types/src/api/blockManipulation/blockManipulation.d.ts +0 -14
- package/types/src/api/exporters/copyExtension.d.ts +0 -6
- package/types/src/api/exporters/html/util/sharedHTMLConversion.d.ts +0 -9
- package/types/src/api/exporters/html/util/simplifyBlocksRehypePlugin.d.ts +0 -16
- package/types/src/api/getCurrentBlockContentType.d.ts +0 -2
- package/types/src/api/nodeConversions/nodeConversions.d.ts +0 -24
- package/types/src/api/parsers/fileDropExtension.d.ts +0 -6
- package/types/src/api/parsers/pasteExtension.d.ts +0 -6
- package/types/src/extensions/NonEditableBlocks/NonEditableBlockPlugin.d.ts +0 -2
- /package/src/api/{exporters/html/__snapshots_fragment_edge_cases__/selectionWithinBlockChildren.html → clipboard/__snapshots__/multipleChildren.html} +0 -0
- /package/src/api/{parsers → clipboard/fromClipboard}/acceptedMIMETypes.ts +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/list-test.json → list-test.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-basic-block-types.json → parse-basic-block-types.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-div-with-inline-content.json → parse-div-with-inline-content.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-divs.json → parse-divs.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-fake-image-caption.json → parse-fake-image-caption.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-image-in-paragraph.json → parse-image-in-paragraph.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-mixed-nested-lists.json → parse-mixed-nested-lists.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-nested-lists-with-paragraphs.json → parse-nested-lists-with-paragraphs.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-nested-lists.json → parse-nested-lists.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-notion-html.json → parse-notion-html.json} +0 -0
- /package/src/api/parsers/html/__snapshots__/{paste/parse-two-divs.json → parse-two-divs.json} +0 -0
- /package/types/src/api/blockManipulation/{blockManipulation.test.d.ts → commands/insertBlocks/insertBlocks.test.d.ts} +0 -0
- /package/types/src/api/{parsers → clipboard/fromClipboard}/acceptedMIMETypes.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Mark, Node
|
|
1
|
+
import { Mark, Node } from "@tiptap/pm/model";
|
|
2
2
|
|
|
3
|
-
import UniqueID from "../../extensions/UniqueID/UniqueID";
|
|
3
|
+
import UniqueID from "../../extensions/UniqueID/UniqueID.js";
|
|
4
4
|
import type {
|
|
5
5
|
BlockSchema,
|
|
6
6
|
CustomInlineContentConfig,
|
|
@@ -8,266 +8,23 @@ import type {
|
|
|
8
8
|
InlineContent,
|
|
9
9
|
InlineContentFromConfig,
|
|
10
10
|
InlineContentSchema,
|
|
11
|
-
PartialCustomInlineContentFromConfig,
|
|
12
|
-
PartialInlineContent,
|
|
13
|
-
PartialLink,
|
|
14
|
-
PartialTableContent,
|
|
15
11
|
StyleSchema,
|
|
16
|
-
StyledText,
|
|
17
12
|
Styles,
|
|
18
13
|
TableContent,
|
|
19
|
-
} from "../../schema";
|
|
20
|
-
import {
|
|
14
|
+
} from "../../schema/index.js";
|
|
15
|
+
import { getBlockInfoWithManualOffset } from "../getBlockInfoFromPos.js";
|
|
21
16
|
|
|
22
|
-
import type { Block
|
|
17
|
+
import type { Block } from "../../blocks/defaultBlocks.js";
|
|
23
18
|
import {
|
|
24
19
|
isLinkInlineContent,
|
|
25
|
-
isPartialLinkInlineContent,
|
|
26
20
|
isStyledTextInlineContent,
|
|
27
|
-
} from "../../schema/inlineContent/types";
|
|
28
|
-
import { UnreachableCaseError } from "../../util/typescript";
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Convert a StyledText inline element to a
|
|
32
|
-
* prosemirror text node with the appropriate marks
|
|
33
|
-
*/
|
|
34
|
-
function styledTextToNodes<T extends StyleSchema>(
|
|
35
|
-
styledText: StyledText<T>,
|
|
36
|
-
schema: Schema,
|
|
37
|
-
styleSchema: T
|
|
38
|
-
): Node[] {
|
|
39
|
-
const marks: Mark[] = [];
|
|
40
|
-
|
|
41
|
-
for (const [style, value] of Object.entries(styledText.styles)) {
|
|
42
|
-
const config = styleSchema[style];
|
|
43
|
-
if (!config) {
|
|
44
|
-
throw new Error(`style ${style} not found in styleSchema`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (config.propSchema === "boolean") {
|
|
48
|
-
marks.push(schema.mark(style));
|
|
49
|
-
} else if (config.propSchema === "string") {
|
|
50
|
-
marks.push(schema.mark(style, { stringValue: value }));
|
|
51
|
-
} else {
|
|
52
|
-
throw new UnreachableCaseError(config.propSchema);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return (
|
|
57
|
-
styledText.text
|
|
58
|
-
// Splits text & line breaks.
|
|
59
|
-
.split(/(\n)/g)
|
|
60
|
-
// If the content ends with a line break, an empty string is added to the
|
|
61
|
-
// end, which this removes.
|
|
62
|
-
.filter((text) => text.length > 0)
|
|
63
|
-
// Converts text & line breaks to nodes.
|
|
64
|
-
.map((text) => {
|
|
65
|
-
if (text === "\n") {
|
|
66
|
-
return schema.nodes["hardBreak"].create();
|
|
67
|
-
} else {
|
|
68
|
-
return schema.text(text, marks);
|
|
69
|
-
}
|
|
70
|
-
})
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Converts a Link inline content element to
|
|
76
|
-
* prosemirror text nodes with the appropriate marks
|
|
77
|
-
*/
|
|
78
|
-
function linkToNodes(
|
|
79
|
-
link: PartialLink<StyleSchema>,
|
|
80
|
-
schema: Schema,
|
|
81
|
-
styleSchema: StyleSchema
|
|
82
|
-
): Node[] {
|
|
83
|
-
const linkMark = schema.marks.link.create({
|
|
84
|
-
href: link.href,
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
return styledTextArrayToNodes(link.content, schema, styleSchema).map(
|
|
88
|
-
(node) => {
|
|
89
|
-
if (node.type.name === "text") {
|
|
90
|
-
return node.mark([...node.marks, linkMark]);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (node.type.name === "hardBreak") {
|
|
94
|
-
return node;
|
|
95
|
-
}
|
|
96
|
-
throw new Error("unexpected node type");
|
|
97
|
-
}
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Converts an array of StyledText inline content elements to
|
|
103
|
-
* prosemirror text nodes with the appropriate marks
|
|
104
|
-
*/
|
|
105
|
-
function styledTextArrayToNodes<S extends StyleSchema>(
|
|
106
|
-
content: string | StyledText<S>[],
|
|
107
|
-
schema: Schema,
|
|
108
|
-
styleSchema: S
|
|
109
|
-
): Node[] {
|
|
110
|
-
const nodes: Node[] = [];
|
|
111
|
-
|
|
112
|
-
if (typeof content === "string") {
|
|
113
|
-
nodes.push(
|
|
114
|
-
...styledTextToNodes(
|
|
115
|
-
{ type: "text", text: content, styles: {} },
|
|
116
|
-
schema,
|
|
117
|
-
styleSchema
|
|
118
|
-
)
|
|
119
|
-
);
|
|
120
|
-
return nodes;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
for (const styledText of content) {
|
|
124
|
-
nodes.push(...styledTextToNodes(styledText, schema, styleSchema));
|
|
125
|
-
}
|
|
126
|
-
return nodes;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* converts an array of inline content elements to prosemirror nodes
|
|
131
|
-
*/
|
|
132
|
-
export function inlineContentToNodes<
|
|
133
|
-
I extends InlineContentSchema,
|
|
134
|
-
S extends StyleSchema
|
|
135
|
-
>(
|
|
136
|
-
blockContent: PartialInlineContent<I, S>,
|
|
137
|
-
schema: Schema,
|
|
138
|
-
styleSchema: S
|
|
139
|
-
): Node[] {
|
|
140
|
-
const nodes: Node[] = [];
|
|
141
|
-
|
|
142
|
-
for (const content of blockContent) {
|
|
143
|
-
if (typeof content === "string") {
|
|
144
|
-
nodes.push(...styledTextArrayToNodes(content, schema, styleSchema));
|
|
145
|
-
} else if (isPartialLinkInlineContent(content)) {
|
|
146
|
-
nodes.push(...linkToNodes(content, schema, styleSchema));
|
|
147
|
-
} else if (isStyledTextInlineContent(content)) {
|
|
148
|
-
nodes.push(...styledTextArrayToNodes([content], schema, styleSchema));
|
|
149
|
-
} else {
|
|
150
|
-
nodes.push(
|
|
151
|
-
blockOrInlineContentToContentNode(content, schema, styleSchema)
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return nodes;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* converts an array of inline content elements to prosemirror nodes
|
|
160
|
-
*/
|
|
161
|
-
export function tableContentToNodes<
|
|
162
|
-
I extends InlineContentSchema,
|
|
163
|
-
S extends StyleSchema
|
|
164
|
-
>(
|
|
165
|
-
tableContent: PartialTableContent<I, S>,
|
|
166
|
-
schema: Schema,
|
|
167
|
-
styleSchema: StyleSchema
|
|
168
|
-
): Node[] {
|
|
169
|
-
const rowNodes: Node[] = [];
|
|
170
|
-
|
|
171
|
-
for (const row of tableContent.rows) {
|
|
172
|
-
const columnNodes: Node[] = [];
|
|
173
|
-
for (const cell of row.cells) {
|
|
174
|
-
let pNode: Node;
|
|
175
|
-
if (!cell) {
|
|
176
|
-
pNode = schema.nodes["tableParagraph"].create({});
|
|
177
|
-
} else if (typeof cell === "string") {
|
|
178
|
-
pNode = schema.nodes["tableParagraph"].create({}, schema.text(cell));
|
|
179
|
-
} else {
|
|
180
|
-
const textNodes = inlineContentToNodes(cell, schema, styleSchema);
|
|
181
|
-
pNode = schema.nodes["tableParagraph"].create({}, textNodes);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const cellNode = schema.nodes["tableCell"].create({}, pNode);
|
|
185
|
-
columnNodes.push(cellNode);
|
|
186
|
-
}
|
|
187
|
-
const rowNode = schema.nodes["tableRow"].create({}, columnNodes);
|
|
188
|
-
rowNodes.push(rowNode);
|
|
189
|
-
}
|
|
190
|
-
return rowNodes;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function blockOrInlineContentToContentNode(
|
|
194
|
-
block:
|
|
195
|
-
| PartialBlock<any, any, any>
|
|
196
|
-
| PartialCustomInlineContentFromConfig<any, any>,
|
|
197
|
-
schema: Schema,
|
|
198
|
-
styleSchema: StyleSchema
|
|
199
|
-
) {
|
|
200
|
-
let contentNode: Node;
|
|
201
|
-
let type = block.type;
|
|
202
|
-
|
|
203
|
-
// TODO: needed? came from previous code
|
|
204
|
-
if (type === undefined) {
|
|
205
|
-
type = "paragraph";
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
if (!schema.nodes[type]) {
|
|
209
|
-
throw new Error(`node type ${type} not found in schema`);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (!block.content) {
|
|
213
|
-
contentNode = schema.nodes[type].create(block.props);
|
|
214
|
-
} else if (typeof block.content === "string") {
|
|
215
|
-
const nodes = inlineContentToNodes([block.content], schema, styleSchema);
|
|
216
|
-
contentNode = schema.nodes[type].create(block.props, nodes);
|
|
217
|
-
} else if (Array.isArray(block.content)) {
|
|
218
|
-
const nodes = inlineContentToNodes(block.content, schema, styleSchema);
|
|
219
|
-
contentNode = schema.nodes[type].create(block.props, nodes);
|
|
220
|
-
} else if (block.content.type === "tableContent") {
|
|
221
|
-
const nodes = tableContentToNodes(block.content, schema, styleSchema);
|
|
222
|
-
contentNode = schema.nodes[type].create(block.props, nodes);
|
|
223
|
-
} else {
|
|
224
|
-
throw new UnreachableCaseError(block.content.type);
|
|
225
|
-
}
|
|
226
|
-
return contentNode;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Converts a BlockNote block to a TipTap node.
|
|
230
|
-
*/
|
|
231
|
-
export function blockToNode(
|
|
232
|
-
block: PartialBlock<any, any, any>,
|
|
233
|
-
schema: Schema,
|
|
234
|
-
styleSchema: StyleSchema
|
|
235
|
-
) {
|
|
236
|
-
let id = block.id;
|
|
237
|
-
|
|
238
|
-
if (id === undefined) {
|
|
239
|
-
id = UniqueID.options.generateID();
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
const contentNode = blockOrInlineContentToContentNode(
|
|
243
|
-
block,
|
|
244
|
-
schema,
|
|
245
|
-
styleSchema
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
const children: Node[] = [];
|
|
249
|
-
|
|
250
|
-
if (block.children) {
|
|
251
|
-
for (const child of block.children) {
|
|
252
|
-
children.push(blockToNode(child, schema, styleSchema));
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
const groupNode = schema.nodes["blockGroup"].create({}, children);
|
|
257
|
-
|
|
258
|
-
return schema.nodes["blockContainer"].create(
|
|
259
|
-
{
|
|
260
|
-
id: id,
|
|
261
|
-
...block.props,
|
|
262
|
-
},
|
|
263
|
-
children.length > 0 ? [contentNode, groupNode] : contentNode
|
|
264
|
-
);
|
|
265
|
-
}
|
|
21
|
+
} from "../../schema/inlineContent/types.js";
|
|
22
|
+
import { UnreachableCaseError } from "../../util/typescript.js";
|
|
266
23
|
|
|
267
24
|
/**
|
|
268
25
|
* Converts an internal (prosemirror) table node contentto a BlockNote Tablecontent
|
|
269
26
|
*/
|
|
270
|
-
function contentNodeToTableContent<
|
|
27
|
+
export function contentNodeToTableContent<
|
|
271
28
|
I extends InlineContentSchema,
|
|
272
29
|
S extends StyleSchema
|
|
273
30
|
>(contentNode: Node, inlineContentSchema: I, styleSchema: S) {
|
|
@@ -566,9 +323,10 @@ export function nodeToBlock<
|
|
|
566
323
|
return cachedBlock;
|
|
567
324
|
}
|
|
568
325
|
|
|
569
|
-
const
|
|
326
|
+
const { blockContainer, blockContent, blockGroup } =
|
|
327
|
+
getBlockInfoWithManualOffset(node, 0);
|
|
570
328
|
|
|
571
|
-
let id =
|
|
329
|
+
let id = blockContainer.node.attrs.id;
|
|
572
330
|
|
|
573
331
|
// Only used for blocks converted from other formats.
|
|
574
332
|
if (id === null) {
|
|
@@ -578,13 +336,13 @@ export function nodeToBlock<
|
|
|
578
336
|
const props: any = {};
|
|
579
337
|
for (const [attr, value] of Object.entries({
|
|
580
338
|
...node.attrs,
|
|
581
|
-
...
|
|
339
|
+
...blockContent.node.attrs,
|
|
582
340
|
})) {
|
|
583
|
-
const blockSpec = blockSchema[
|
|
341
|
+
const blockSpec = blockSchema[blockContent.node.type.name];
|
|
584
342
|
|
|
585
343
|
if (!blockSpec) {
|
|
586
344
|
throw Error(
|
|
587
|
-
"Block is of an unrecognized type: " +
|
|
345
|
+
"Block is of an unrecognized type: " + blockContent.node.type.name
|
|
588
346
|
);
|
|
589
347
|
}
|
|
590
348
|
|
|
@@ -595,32 +353,32 @@ export function nodeToBlock<
|
|
|
595
353
|
}
|
|
596
354
|
}
|
|
597
355
|
|
|
598
|
-
const blockConfig = blockSchema[
|
|
356
|
+
const blockConfig = blockSchema[blockContent.node.type.name];
|
|
599
357
|
|
|
600
358
|
const children: Block<BSchema, I, S>[] = [];
|
|
601
|
-
|
|
359
|
+
blockGroup?.node.forEach((child) => {
|
|
602
360
|
children.push(
|
|
603
361
|
nodeToBlock(
|
|
604
|
-
|
|
362
|
+
child,
|
|
605
363
|
blockSchema,
|
|
606
364
|
inlineContentSchema,
|
|
607
365
|
styleSchema,
|
|
608
366
|
blockCache
|
|
609
367
|
)
|
|
610
368
|
);
|
|
611
|
-
}
|
|
369
|
+
});
|
|
612
370
|
|
|
613
371
|
let content: Block<any, any, any>["content"];
|
|
614
372
|
|
|
615
373
|
if (blockConfig.content === "inline") {
|
|
616
374
|
content = contentNodeToInlineContent(
|
|
617
|
-
|
|
375
|
+
blockContent.node,
|
|
618
376
|
inlineContentSchema,
|
|
619
377
|
styleSchema
|
|
620
378
|
);
|
|
621
379
|
} else if (blockConfig.content === "table") {
|
|
622
380
|
content = contentNodeToTableContent(
|
|
623
|
-
|
|
381
|
+
blockContent.node,
|
|
624
382
|
inlineContentSchema,
|
|
625
383
|
styleSchema
|
|
626
384
|
);
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
+
import * as pmView from "prosemirror-view";
|
|
1
2
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { BlockNoteEditor } from "
|
|
3
|
-
import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
|
|
3
|
+
import { BlockNoteEditor } from "../../../index.js";
|
|
4
|
+
import { nestedListsToBlockNoteStructure } from "./util/nestedLists.js";
|
|
4
5
|
|
|
5
6
|
async function parseHTMLAndCompareSnapshots(
|
|
6
7
|
html: string,
|
|
7
8
|
snapshotName: string
|
|
8
9
|
) {
|
|
9
|
-
// use a dynamic import because we want to access
|
|
10
|
-
// __parseFromClipboard which is not exposed in types
|
|
11
|
-
const view: any = await import("prosemirror-view");
|
|
12
|
-
|
|
13
10
|
const editor = BlockNoteEditor.create();
|
|
14
11
|
const div = document.createElement("div");
|
|
15
12
|
editor.mount(div);
|
|
16
13
|
const blocks = await editor.tryParseHTMLToBlocks(html);
|
|
17
14
|
|
|
18
|
-
const snapshotPath = "./__snapshots__/
|
|
15
|
+
const snapshotPath = "./__snapshots__/" + snapshotName + ".json";
|
|
19
16
|
expect(JSON.stringify(blocks, undefined, 2)).toMatchFileSnapshot(
|
|
20
17
|
snapshotPath
|
|
21
18
|
);
|
|
@@ -34,7 +31,7 @@ async function parseHTMLAndCompareSnapshots(
|
|
|
34
31
|
(window as any).__TEST_OPTIONS.mockID = 0; // reset id counter
|
|
35
32
|
const htmlNode = nestedListsToBlockNoteStructure(html);
|
|
36
33
|
|
|
37
|
-
const slice =
|
|
34
|
+
const slice = (pmView as any).__parseFromClipboard(
|
|
38
35
|
editor.prosemirrorView,
|
|
39
36
|
"",
|
|
40
37
|
htmlNode.innerHTML,
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { DOMParser, Schema } from "prosemirror-model";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
BlockSchema,
|
|
4
|
+
InlineContentSchema,
|
|
5
|
+
StyleSchema,
|
|
6
|
+
} from "../../../schema/index.js";
|
|
3
7
|
|
|
4
|
-
import { Block } from "../../../blocks/defaultBlocks";
|
|
5
|
-
import { nodeToBlock } from "../../nodeConversions/
|
|
6
|
-
import { nestedListsToBlockNoteStructure } from "./util/nestedLists";
|
|
8
|
+
import { Block } from "../../../blocks/defaultBlocks.js";
|
|
9
|
+
import { nodeToBlock } from "../../nodeConversions/nodeToBlock.js";
|
|
10
|
+
import { nestedListsToBlockNoteStructure } from "./util/nestedLists.js";
|
|
7
11
|
export async function HTMLToBlocks<
|
|
8
12
|
BSchema extends BlockSchema,
|
|
9
13
|
I extends InlineContentSchema,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { initializeESMDependencies } from "../../../../util/esmDependencies";
|
|
3
|
-
import { nestedListsToBlockNoteStructure } from "./nestedLists";
|
|
2
|
+
import { initializeESMDependencies } from "../../../../util/esmDependencies.js";
|
|
3
|
+
import { nestedListsToBlockNoteStructure } from "./nestedLists.js";
|
|
4
4
|
|
|
5
5
|
async function testHTML(html: string) {
|
|
6
6
|
const deps = await initializeESMDependencies();
|