@blocknote/core 0.17.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocknote.js +2774 -1804
- package/dist/blocknote.js.map +1 -1
- package/dist/blocknote.umd.cjs +9 -6
- package/dist/blocknote.umd.cjs.map +1 -1
- package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js +27 -0
- package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js +99 -0
- package/dist/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js +97 -0
- package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js +88 -0
- package/dist/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js +116 -0
- package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js +106 -0
- package/dist/src/api/blockManipulation/commands/moveBlock/moveBlock.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js +57 -0
- package/dist/src/api/blockManipulation/commands/nestBlock/nestBlock.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js +43 -0
- package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js +27 -0
- package/dist/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js +29 -0
- package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js +157 -0
- package/dist/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js +27 -0
- package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js +64 -0
- package/dist/src/api/blockManipulation/commands/splitBlock/splitBlock.test.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js +145 -0
- package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.js.map +1 -0
- package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js +252 -0
- package/dist/src/api/blockManipulation/commands/updateBlock/updateBlock.test.js.map +1 -0
- package/dist/src/api/blockManipulation/insertContentAt.js +64 -0
- package/dist/src/api/blockManipulation/insertContentAt.js.map +1 -0
- package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js +76 -0
- package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.js.map +1 -0
- package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js +33 -0
- package/dist/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.js.map +1 -0
- package/dist/src/api/blockManipulation/setupTestEnv.js +172 -0
- package/dist/src/api/blockManipulation/setupTestEnv.js.map +1 -0
- package/dist/src/api/clipboard/clipboard.test.js +246 -0
- package/dist/src/api/clipboard/clipboard.test.js.map +1 -0
- package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js +8 -0
- package/dist/src/api/clipboard/fromClipboard/acceptedMIMETypes.js.map +1 -0
- package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js +38 -0
- package/dist/src/api/clipboard/fromClipboard/fileDropExtension.js.map +1 -0
- package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js +109 -0
- package/dist/src/api/clipboard/fromClipboard/handleFileInsertion.js.map +1 -0
- package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js +26 -0
- package/dist/src/api/clipboard/fromClipboard/handleVSCodePaste.js.map +1 -0
- package/dist/src/api/clipboard/fromClipboard/pasteExtension.js +57 -0
- package/dist/src/api/clipboard/fromClipboard/pasteExtension.js.map +1 -0
- package/dist/src/api/clipboard/toClipboard/copyExtension.js +132 -0
- package/dist/src/api/clipboard/toClipboard/copyExtension.js.map +1 -0
- package/dist/src/api/exporters/html/externalHTMLExporter.js +35 -0
- package/dist/src/api/exporters/html/externalHTMLExporter.js.map +1 -0
- package/dist/src/api/exporters/html/htmlConversion.test.js +72 -0
- package/dist/src/api/exporters/html/htmlConversion.test.js.map +1 -0
- package/dist/src/api/exporters/html/internalHTMLSerializer.js +21 -0
- package/dist/src/api/exporters/html/internalHTMLSerializer.js.map +1 -0
- package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js +141 -0
- package/dist/src/api/exporters/html/util/serializeBlocksExternalHTML.js.map +1 -0
- package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js +96 -0
- package/dist/src/api/exporters/html/util/serializeBlocksInternalHTML.js.map +1 -0
- package/dist/src/api/exporters/markdown/markdownExporter.js +31 -0
- package/dist/src/api/exporters/markdown/markdownExporter.js.map +1 -0
- package/dist/src/api/exporters/markdown/markdownExporter.test.js +57 -0
- package/dist/src/api/exporters/markdown/markdownExporter.test.js.map +1 -0
- package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js +33 -0
- package/dist/src/api/exporters/markdown/removeUnderlinesRehypePlugin.js.map +1 -0
- package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js +37 -0
- package/dist/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.js.map +1 -0
- package/dist/src/api/getBlockInfoFromPos.js +171 -0
- package/dist/src/api/getBlockInfoFromPos.js.map +1 -0
- package/dist/src/api/nodeConversions/blockToNode.js +197 -0
- package/dist/src/api/nodeConversions/blockToNode.js.map +1 -0
- package/dist/src/api/nodeConversions/fragmentToBlocks.js +50 -0
- package/dist/src/api/nodeConversions/fragmentToBlocks.js.map +1 -0
- package/dist/src/api/nodeConversions/nodeConversions.test.js +54 -0
- package/dist/src/api/nodeConversions/nodeConversions.test.js.map +1 -0
- package/dist/src/api/nodeConversions/nodeToBlock.js +316 -0
- package/dist/src/api/nodeConversions/nodeToBlock.js.map +1 -0
- package/dist/src/api/nodeUtil.js +28 -0
- package/dist/src/api/nodeUtil.js.map +1 -0
- package/dist/src/api/parsers/html/parseHTML.js +19 -0
- package/dist/src/api/parsers/html/parseHTML.js.map +1 -0
- package/dist/src/api/parsers/html/parseHTML.test.js +470 -0
- package/dist/src/api/parsers/html/parseHTML.test.js.map +1 -0
- package/dist/src/api/parsers/html/util/nestedLists.js +106 -0
- package/dist/src/api/parsers/html/util/nestedLists.js.map +1 -0
- package/dist/src/api/parsers/html/util/nestedLists.test.js +166 -0
- package/dist/src/api/parsers/html/util/nestedLists.test.js.map +1 -0
- package/dist/src/api/parsers/markdown/parseMarkdown.js +52 -0
- package/dist/src/api/parsers/markdown/parseMarkdown.js.map +1 -0
- package/dist/src/api/parsers/markdown/parseMarkdown.test.js +109 -0
- package/dist/src/api/parsers/markdown/parseMarkdown.test.js.map +1 -0
- package/dist/src/api/testUtil/cases/customBlocks.js +313 -0
- package/dist/src/api/testUtil/cases/customBlocks.js.map +1 -0
- package/dist/src/api/testUtil/cases/customInlineContent.js +91 -0
- package/dist/src/api/testUtil/cases/customInlineContent.js.map +1 -0
- package/dist/src/api/testUtil/cases/customStyles.js +83 -0
- package/dist/src/api/testUtil/cases/customStyles.js.map +1 -0
- package/dist/src/api/testUtil/cases/defaultSchema.js +673 -0
- package/dist/src/api/testUtil/cases/defaultSchema.js.map +1 -0
- package/dist/src/api/testUtil/index.js +2 -0
- package/dist/src/api/testUtil/index.js.map +1 -0
- package/dist/src/api/testUtil/partialBlockTestUtil.js +114 -0
- package/dist/src/api/testUtil/partialBlockTestUtil.js.map +1 -0
- package/dist/src/api/testUtil/paste.js +29 -0
- package/dist/src/api/testUtil/paste.js.map +1 -0
- package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js +97 -0
- package/dist/src/blocks/AudioBlockContent/AudioBlockContent.js.map +1 -0
- package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js +5 -0
- package/dist/src/blocks/AudioBlockContent/audioBlockHelpers.js.map +1 -0
- package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js +273 -0
- package/dist/src/blocks/CodeBlockContent/CodeBlockContent.js.map +1 -0
- package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js +90 -0
- package/dist/src/blocks/CodeBlockContent/defaultSupportedLanguages.js.map +1 -0
- package/dist/src/blocks/FileBlockContent/FileBlockContent.js +70 -0
- package/dist/src/blocks/FileBlockContent/FileBlockContent.js.map +1 -0
- package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js +317 -0
- package/dist/src/blocks/FileBlockContent/fileBlockHelpers.js.map +1 -0
- package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js +15 -0
- package/dist/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.js.map +1 -0
- package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js +141 -0
- package/dist/src/blocks/HeadingBlockContent/HeadingBlockContent.js.map +1 -0
- package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js +106 -0
- package/dist/src/blocks/ImageBlockContent/ImageBlockContent.js.map +1 -0
- package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js +6 -0
- package/dist/src/blocks/ImageBlockContent/imageBlockHelpers.js.map +1 -0
- package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js +111 -0
- package/dist/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.js.map +1 -0
- package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js +218 -0
- package/dist/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.js.map +1 -0
- package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js +41 -0
- package/dist/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.js.map +1 -0
- package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js +58 -0
- package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.js.map +1 -0
- package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js +128 -0
- package/dist/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.js.map +1 -0
- package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js +51 -0
- package/dist/src/blocks/ParagraphBlockContent/ParagraphBlockContent.js.map +1 -0
- package/dist/src/blocks/TableBlockContent/TableBlockContent.js +130 -0
- package/dist/src/blocks/TableBlockContent/TableBlockContent.js.map +1 -0
- package/dist/src/blocks/TableBlockContent/TableExtension.js +57 -0
- package/dist/src/blocks/TableBlockContent/TableExtension.js.map +1 -0
- package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js +103 -0
- package/dist/src/blocks/VideoBlockContent/VideoBlockContent.js.map +1 -0
- package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js +6 -0
- package/dist/src/blocks/VideoBlockContent/videoBlockHelpers.js.map +1 -0
- package/dist/src/blocks/defaultBlockHelpers.js +50 -0
- package/dist/src/blocks/defaultBlockHelpers.js.map +1 -0
- package/dist/src/blocks/defaultBlockTypeGuards.js +40 -0
- package/dist/src/blocks/defaultBlockTypeGuards.js.map +1 -0
- package/dist/src/blocks/defaultBlocks.js +50 -0
- package/dist/src/blocks/defaultBlocks.js.map +1 -0
- package/dist/src/blocks/defaultProps.js +19 -0
- package/dist/src/blocks/defaultProps.js.map +1 -0
- package/dist/src/editor/BlockNoteEditor.js +750 -0
- package/dist/src/editor/BlockNoteEditor.js.map +1 -0
- package/dist/src/editor/BlockNoteEditor.test.js +65 -0
- package/dist/src/editor/BlockNoteEditor.test.js.map +1 -0
- package/dist/src/editor/BlockNoteExtensions.js +149 -0
- package/dist/src/editor/BlockNoteExtensions.js.map +1 -0
- package/dist/src/editor/BlockNoteSchema.js +38 -0
- package/dist/src/editor/BlockNoteSchema.js.map +1 -0
- package/dist/src/editor/BlockNoteTipTapEditor.js +169 -0
- package/dist/src/editor/BlockNoteTipTapEditor.js.map +1 -0
- package/dist/src/editor/cursorPositionTypes.js +2 -0
- package/dist/src/editor/cursorPositionTypes.js.map +1 -0
- package/dist/src/editor/defaultColors.js +77 -0
- package/dist/src/editor/defaultColors.js.map +1 -0
- package/dist/src/editor/selectionTypes.js +2 -0
- package/dist/src/editor/selectionTypes.js.map +1 -0
- package/dist/src/editor/transformPasted.js +79 -0
- package/dist/src/editor/transformPasted.js.map +1 -0
- package/dist/src/exporter/Exporter.js +36 -0
- package/dist/src/exporter/Exporter.js.map +1 -0
- package/dist/src/exporter/index.js +3 -0
- package/dist/src/exporter/index.js.map +1 -0
- package/dist/src/exporter/mapping.js +12 -0
- package/dist/src/exporter/mapping.js.map +1 -0
- package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js +30 -0
- package/dist/src/extensions/BackgroundColor/BackgroundColorExtension.js.map +1 -0
- package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js +39 -0
- package/dist/src/extensions/BackgroundColor/BackgroundColorMark.js.map +1 -0
- package/dist/src/extensions/FilePanel/FilePanelPlugin.js +131 -0
- package/dist/src/extensions/FilePanel/FilePanelPlugin.js.map +1 -0
- package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js +195 -0
- package/dist/src/extensions/FormattingToolbar/FormattingToolbarPlugin.js.map +1 -0
- package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js +309 -0
- package/dist/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js.map +1 -0
- package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js +247 -0
- package/dist/src/extensions/LinkToolbar/LinkToolbarPlugin.js.map +1 -0
- package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js +51 -0
- package/dist/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js.map +1 -0
- package/dist/src/extensions/Placeholder/PlaceholderPlugin.js +81 -0
- package/dist/src/extensions/Placeholder/PlaceholderPlugin.js.map +1 -0
- package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js +183 -0
- package/dist/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.js.map +1 -0
- package/dist/src/extensions/SideMenu/MultipleNodeSelection.js +68 -0
- package/dist/src/extensions/SideMenu/MultipleNodeSelection.js.map +1 -0
- package/dist/src/extensions/SideMenu/SideMenuPlugin.js +339 -0
- package/dist/src/extensions/SideMenu/SideMenuPlugin.js.map +1 -0
- package/dist/src/extensions/SideMenu/dragging.js +128 -0
- package/dist/src/extensions/SideMenu/dragging.js.map +1 -0
- package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js +2 -0
- package/dist/src/extensions/SuggestionMenu/DefaultGridSuggestionItem.js.map +1 -0
- package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js +2 -0
- package/dist/src/extensions/SuggestionMenu/DefaultSuggestionItem.js.map +1 -0
- package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js +245 -0
- package/dist/src/extensions/SuggestionMenu/SuggestionPlugin.js.map +1 -0
- package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js +26 -0
- package/dist/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.js.map +1 -0
- package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js +244 -0
- package/dist/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.js.map +1 -0
- package/dist/src/extensions/TableHandles/TableHandlesPlugin.js +553 -0
- package/dist/src/extensions/TableHandles/TableHandlesPlugin.js.map +1 -0
- package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js +36 -0
- package/dist/src/extensions/TextAlignment/TextAlignmentExtension.js.map +1 -0
- package/dist/src/extensions/TextColor/TextColorExtension.js +29 -0
- package/dist/src/extensions/TextColor/TextColorExtension.js.map +1 -0
- package/dist/src/extensions/TextColor/TextColorMark.js +37 -0
- package/dist/src/extensions/TextColor/TextColorMark.js.map +1 -0
- package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js +58 -0
- package/dist/src/extensions/TrailingNode/TrailingNodeExtension.js.map +1 -0
- package/dist/src/extensions/UniqueID/UniqueID.js +283 -0
- package/dist/src/extensions/UniqueID/UniqueID.js.map +1 -0
- package/dist/src/extensions/getDraggableBlockFromElement.js +13 -0
- package/dist/src/extensions/getDraggableBlockFromElement.js.map +1 -0
- package/dist/src/extensions-shared/UiElementPosition.js +2 -0
- package/dist/src/extensions-shared/UiElementPosition.js.map +1 -0
- package/dist/src/i18n/dictionary.js +4 -0
- package/dist/src/i18n/dictionary.js.map +1 -0
- package/dist/src/i18n/locales/ar.js +298 -0
- package/dist/src/i18n/locales/ar.js.map +1 -0
- package/dist/src/i18n/locales/de.js +313 -0
- package/dist/src/i18n/locales/de.js.map +1 -0
- package/dist/src/i18n/locales/en.js +314 -0
- package/dist/src/i18n/locales/en.js.map +1 -0
- package/dist/src/i18n/locales/es.js +312 -0
- package/dist/src/i18n/locales/es.js.map +1 -0
- package/dist/src/i18n/locales/fr.js +313 -0
- package/dist/src/i18n/locales/fr.js.map +1 -0
- package/dist/src/i18n/locales/hr.js +308 -0
- package/dist/src/i18n/locales/hr.js.map +1 -0
- package/dist/src/i18n/locales/index.js +16 -0
- package/dist/src/i18n/locales/index.js.map +1 -0
- package/dist/src/i18n/locales/is.js +305 -0
- package/dist/src/i18n/locales/is.js.map +1 -0
- package/dist/src/i18n/locales/ja.js +333 -0
- package/dist/src/i18n/locales/ja.js.map +1 -0
- package/dist/src/i18n/locales/ko.js +326 -0
- package/dist/src/i18n/locales/ko.js.map +1 -0
- package/dist/src/i18n/locales/nl.js +313 -0
- package/dist/src/i18n/locales/nl.js.map +1 -0
- package/dist/src/i18n/locales/pl.js +297 -0
- package/dist/src/i18n/locales/pl.js.map +1 -0
- package/dist/src/i18n/locales/pt.js +305 -0
- package/dist/src/i18n/locales/pt.js.map +1 -0
- package/dist/src/i18n/locales/ru.js +340 -0
- package/dist/src/i18n/locales/ru.js.map +1 -0
- package/dist/src/i18n/locales/vi.js +312 -0
- package/dist/src/i18n/locales/vi.js.map +1 -0
- package/dist/src/i18n/locales/zh.js +346 -0
- package/dist/src/i18n/locales/zh.js.map +1 -0
- package/dist/src/index.js +55 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pm-nodes/BlockContainer.js +72 -0
- package/dist/src/pm-nodes/BlockContainer.js.map +1 -0
- package/dist/src/pm-nodes/BlockGroup.js +43 -0
- package/dist/src/pm-nodes/BlockGroup.js.map +1 -0
- package/dist/src/pm-nodes/Doc.js +7 -0
- package/dist/src/pm-nodes/Doc.js.map +1 -0
- package/dist/src/pm-nodes/index.js +4 -0
- package/dist/src/pm-nodes/index.js.map +1 -0
- package/dist/src/schema/blocks/createSpec.js +126 -0
- package/dist/src/schema/blocks/createSpec.js.map +1 -0
- package/dist/src/schema/blocks/internal.js +147 -0
- package/dist/src/schema/blocks/internal.js.map +1 -0
- package/dist/src/schema/blocks/types.js +2 -0
- package/dist/src/schema/blocks/types.js.map +1 -0
- package/dist/src/schema/index.js +11 -0
- package/dist/src/schema/index.js.map +1 -0
- package/dist/src/schema/inlineContent/createSpec.js +64 -0
- package/dist/src/schema/inlineContent/createSpec.js.map +1 -0
- package/dist/src/schema/inlineContent/internal.js +52 -0
- package/dist/src/schema/inlineContent/internal.js.map +1 -0
- package/dist/src/schema/inlineContent/types.js +10 -0
- package/dist/src/schema/inlineContent/types.js.map +1 -0
- package/dist/src/schema/propTypes.js +2 -0
- package/dist/src/schema/propTypes.js.map +1 -0
- package/dist/src/schema/styles/createSpec.js +48 -0
- package/dist/src/schema/styles/createSpec.js.map +1 -0
- package/dist/src/schema/styles/internal.js +53 -0
- package/dist/src/schema/styles/internal.js.map +1 -0
- package/dist/src/schema/styles/types.js +2 -0
- package/dist/src/schema/styles/types.js.map +1 -0
- package/dist/src/util/EventEmitter.js +33 -0
- package/dist/src/util/EventEmitter.js.map +1 -0
- package/dist/src/util/browser.js +17 -0
- package/dist/src/util/browser.js.map +1 -0
- package/dist/src/util/combineByGroup.js +20 -0
- package/dist/src/util/combineByGroup.js.map +1 -0
- package/dist/src/util/esmDependencies.js +35 -0
- package/dist/src/util/esmDependencies.js.map +1 -0
- package/dist/src/util/string.js +14 -0
- package/dist/src/util/string.js.map +1 -0
- package/dist/src/util/typescript.js +12 -0
- package/dist/src/util/typescript.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/webpack-stats.json +1 -1
- package/package.json +9 -7
- package/src/api/blockManipulation/commands/insertBlocks/__snapshots__/insertBlocks.test.ts.snap +30 -0
- package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +2 -0
- package/src/api/blockManipulation/commands/mergeBlocks/__snapshots__/mergeBlocks.test.ts.snap +25 -0
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +2 -2
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +104 -39
- package/src/api/blockManipulation/commands/moveBlock/__snapshots__/moveBlock.test.ts.snap +40 -0
- package/src/api/blockManipulation/commands/moveBlock/moveBlock.ts +3 -5
- package/src/api/blockManipulation/commands/nestBlock/nestBlock.ts +100 -0
- package/src/api/blockManipulation/commands/removeBlocks/__snapshots__/removeBlocks.test.ts.snap +10 -0
- package/src/api/blockManipulation/commands/removeBlocks/removeBlocks.ts +1 -1
- package/src/api/blockManipulation/commands/replaceBlocks/__snapshots__/replaceBlocks.test.ts.snap +40 -0
- package/src/api/blockManipulation/commands/splitBlock/__snapshots__/splitBlock.test.ts.snap +30 -0
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +8 -4
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +11 -7
- package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +87 -0
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +5 -5
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +192 -107
- package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.ts +48 -33
- package/src/api/clipboard/clipboard.test.ts +1 -1
- package/src/api/clipboard/fromClipboard/acceptedMIMETypes.ts +1 -0
- package/src/api/clipboard/fromClipboard/handleFileInsertion.ts +1 -1
- package/src/api/clipboard/fromClipboard/handleVSCodePaste.ts +49 -0
- package/src/api/clipboard/fromClipboard/pasteExtension.ts +6 -0
- package/src/api/clipboard/toClipboard/copyExtension.ts +1 -1
- package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/codeBlock/defaultLanguage/internal.html +1 -0
- package/src/api/exporters/html/__snapshots__/codeBlock/empty/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/codeBlock/empty/internal.html +1 -0
- package/src/api/exporters/html/__snapshots__/codeBlock/python/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/codeBlock/python/internal.html +1 -0
- package/src/api/exporters/html/__snapshots__/image/basic/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/image/nested/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/image/noName/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/image/noPreview/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/lists/basic/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/lists/nested/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/basic/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/basic/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/nested/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/nested/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/noCaption/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/noName/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/noName/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/external.html +1 -1
- package/src/api/exporters/html/__snapshots__/simpleImage/noPreview/internal.html +1 -1
- package/src/api/exporters/html/__snapshots__/table/allColWidths/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/table/allColWidths/internal.html +1 -0
- package/src/api/exporters/html/__snapshots__/table/basic/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/table/basic/internal.html +1 -0
- package/src/api/exporters/html/__snapshots__/table/mixedColWidths/external.html +1 -0
- package/src/api/exporters/html/__snapshots__/table/mixedColWidths/internal.html +1 -0
- package/src/api/exporters/html/htmlConversion.test.ts +1 -4
- package/src/api/exporters/html/internalHTMLSerializer.ts +2 -7
- package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +7 -1
- package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +75 -33
- package/src/api/exporters/markdown/__snapshots__/codeBlock/defaultLanguage/markdown.md +3 -0
- package/src/api/exporters/markdown/__snapshots__/codeBlock/empty/markdown.md +2 -0
- package/src/api/exporters/markdown/__snapshots__/codeBlock/python/markdown.md +3 -0
- package/src/api/exporters/markdown/__snapshots__/table/allColWidths/markdown.md +5 -0
- package/src/api/exporters/markdown/__snapshots__/table/basic/markdown.md +5 -0
- package/src/api/exporters/markdown/__snapshots__/table/mixedColWidths/markdown.md +5 -0
- package/src/api/exporters/markdown/markdownExporter.test.ts +1 -4
- package/src/api/getBlockInfoFromPos.ts +113 -58
- package/src/api/nodeConversions/__snapshots__/nodeConversions.test.ts.snap +711 -0
- package/src/api/nodeConversions/blockToNode.ts +62 -26
- package/src/api/nodeConversions/fragmentToBlocks.ts +18 -0
- package/src/api/nodeConversions/nodeToBlock.ts +35 -22
- package/src/api/nodeUtil.ts +1 -1
- package/src/api/parsers/html/__snapshots__/parse-notion-html.json +5 -0
- package/src/api/parsers/markdown/parseMarkdown.ts +1 -1
- package/src/api/testUtil/cases/defaultSchema.ts +95 -0
- package/src/api/testUtil/partialBlockTestUtil.ts +41 -4
- package/src/blocks/AudioBlockContent/AudioBlockContent.ts +4 -2
- package/src/blocks/CodeBlockContent/CodeBlockContent.ts +369 -0
- package/src/blocks/CodeBlockContent/defaultSupportedLanguages.ts +96 -0
- package/src/blocks/FileBlockContent/fileBlockHelpers.ts +10 -2
- package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +19 -31
- package/src/blocks/ImageBlockContent/ImageBlockContent.ts +4 -2
- package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +5 -9
- package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +6 -10
- package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +1 -1
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +11 -4
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +5 -9
- package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +4 -8
- package/src/blocks/TableBlockContent/TableBlockContent.ts +83 -8
- package/src/blocks/TableBlockContent/TableExtension.ts +10 -1
- package/src/blocks/VideoBlockContent/VideoBlockContent.ts +4 -2
- package/src/blocks/defaultBlockHelpers.ts +7 -2
- package/src/blocks/defaultBlocks.ts +4 -0
- package/src/editor/Block.css +71 -3
- package/src/editor/BlockNoteEditor.test.ts +2 -2
- package/src/editor/BlockNoteEditor.ts +18 -21
- package/src/editor/BlockNoteExtensions.ts +2 -3
- package/src/editor/BlockNoteTipTapEditor.ts +8 -1
- package/src/editor/defaultColors.ts +77 -0
- package/src/editor/editor.css +43 -5
- package/src/editor/transformPasted.ts +6 -3
- package/src/exporter/Exporter.ts +101 -0
- package/src/exporter/index.ts +2 -0
- package/src/exporter/mapping.ts +75 -0
- package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +8 -0
- package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +201 -48
- package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +1 -1
- package/src/extensions/Placeholder/PlaceholderPlugin.ts +5 -0
- package/src/extensions/SideMenu/SideMenuPlugin.ts +141 -52
- package/src/extensions/SideMenu/dragging.ts +3 -54
- package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +5 -0
- package/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts +2 -1
- package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +22 -6
- package/src/extensions/TableHandles/TableHandlesPlugin.ts +225 -120
- package/src/extensions/TrailingNode/TrailingNodeExtension.ts +1 -1
- package/src/extensions/getDraggableBlockFromElement.ts +19 -0
- package/src/i18n/locales/ar.ts +6 -0
- package/src/i18n/locales/de.ts +299 -294
- package/src/i18n/locales/en.ts +6 -0
- package/src/i18n/locales/es.ts +310 -274
- package/src/i18n/locales/fr.ts +6 -0
- package/src/i18n/locales/is.ts +6 -0
- package/src/i18n/locales/ja.ts +6 -0
- package/src/i18n/locales/ko.ts +6 -0
- package/src/i18n/locales/nl.ts +6 -0
- package/src/i18n/locales/pl.ts +6 -0
- package/src/i18n/locales/pt.ts +10 -4
- package/src/i18n/locales/ru.ts +6 -0
- package/src/i18n/locales/vi.ts +6 -0
- package/src/i18n/locales/zh.ts +6 -0
- package/src/index.ts +9 -0
- package/src/pm-nodes/BlockContainer.ts +1 -1
- package/src/pm-nodes/BlockGroup.ts +2 -2
- package/src/pm-nodes/README.md +127 -28
- package/src/schema/blocks/createSpec.ts +4 -1
- package/src/schema/blocks/internal.ts +12 -2
- package/src/schema/blocks/types.ts +3 -1
- package/src/util/combineByGroup.ts +25 -0
- package/types/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.d.ts +22 -2
- package/types/src/api/blockManipulation/commands/nestBlock/nestBlock.d.ts +5 -0
- package/types/src/api/blockManipulation/setupTestEnv.d.ts +22 -8
- package/types/src/api/clipboard/fromClipboard/acceptedMIMETypes.d.ts +1 -1
- package/types/src/api/clipboard/fromClipboard/handleVSCodePaste.d.ts +3 -0
- package/types/src/api/exporters/html/util/serializeBlocksInternalHTML.d.ts +2 -3
- package/types/src/api/getBlockInfoFromPos.d.ts +55 -5
- package/types/src/api/nodeConversions/blockToNode.d.ts +1 -1
- package/types/src/api/nodeConversions/nodeToBlock.d.ts +3 -1
- package/types/src/api/testUtil/cases/customBlocks.d.ts +22 -8
- package/types/src/api/testUtil/cases/customInlineContent.d.ts +22 -8
- package/types/src/api/testUtil/cases/customStyles.d.ts +22 -8
- package/types/src/api/testUtil/partialBlockTestUtil.d.ts +2 -1
- package/types/src/blocks/AudioBlockContent/AudioBlockContent.d.ts +1 -0
- package/types/src/blocks/CodeBlockContent/CodeBlockContent.d.ts +57 -0
- package/types/src/blocks/CodeBlockContent/defaultSupportedLanguages.d.ts +6 -0
- package/types/src/blocks/FileBlockContent/fileBlockHelpers.d.ts +1 -0
- package/types/src/blocks/ImageBlockContent/ImageBlockContent.d.ts +1 -0
- package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +0 -12
- package/types/src/blocks/TableBlockContent/TableExtension.d.ts +3 -0
- package/types/src/blocks/VideoBlockContent/VideoBlockContent.d.ts +1 -0
- package/types/src/blocks/defaultBlocks.d.ts +45 -16
- package/types/src/editor/BlockNoteEditor.d.ts +4 -3
- package/types/src/editor/BlockNoteTipTapEditor.d.ts +1 -0
- package/types/src/editor/defaultColors.d.ts +76 -0
- package/types/src/exporter/Exporter.d.ts +43 -0
- package/types/src/exporter/index.d.ts +2 -0
- package/types/src/exporter/mapping.d.ts +30 -0
- package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +2 -1
- package/types/src/extensions/SideMenu/dragging.d.ts +1 -6
- package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +9 -5
- package/types/src/extensions/getDraggableBlockFromElement.d.ts +5 -0
- package/types/src/i18n/locales/de.d.ts +6 -0
- package/types/src/i18n/locales/en.d.ts +6 -0
- package/types/src/i18n/locales/es.d.ts +6 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/schema/blocks/createSpec.d.ts +1 -1
- package/types/src/schema/blocks/internal.d.ts +2 -2
- package/types/src/schema/blocks/types.d.ts +3 -1
- package/types/src/util/combineByGroup.d.ts +9 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieves the position just before the nearest blockContainer node in a
|
|
3
|
+
* ProseMirror doc, relative to a position. If the position is within a
|
|
4
|
+
* blockContainer node or its descendants, the position just before it is
|
|
5
|
+
* returned. If the position is not within a blockContainer node or its
|
|
6
|
+
* descendants, the position just before the next closest blockContainer node
|
|
7
|
+
* is returned. If the position is beyond the last blockContainer, the position
|
|
8
|
+
* just before the last blockContainer is returned.
|
|
9
|
+
* @param doc The ProseMirror doc.
|
|
10
|
+
* @param pos An integer position in the document.
|
|
11
|
+
* @returns The position just before the nearest blockContainer node.
|
|
12
|
+
*/
|
|
13
|
+
export function getNearestBlockContainerPos(doc, pos) {
|
|
14
|
+
const $pos = doc.resolve(pos);
|
|
15
|
+
// Checks if the position provided is already just before a blockContainer
|
|
16
|
+
// node, in which case we return the position.
|
|
17
|
+
if ($pos.nodeAfter && $pos.nodeAfter.type.isInGroup("bnBlock")) {
|
|
18
|
+
return {
|
|
19
|
+
posBeforeNode: $pos.pos,
|
|
20
|
+
node: $pos.nodeAfter,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Checks the node containing the position and its ancestors until a
|
|
24
|
+
// blockContainer node is found and returned.
|
|
25
|
+
let depth = $pos.depth;
|
|
26
|
+
let node = $pos.node(depth);
|
|
27
|
+
while (depth > 0) {
|
|
28
|
+
if (node.type.isInGroup("bnBlock")) {
|
|
29
|
+
return {
|
|
30
|
+
posBeforeNode: $pos.before(depth),
|
|
31
|
+
node: node,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
depth--;
|
|
35
|
+
node = $pos.node(depth);
|
|
36
|
+
}
|
|
37
|
+
// If the position doesn't lie within a blockContainer node, we instead find
|
|
38
|
+
// the position of the next closest one. If the position is beyond the last
|
|
39
|
+
// blockContainer, we return the position of the last blockContainer. While
|
|
40
|
+
// running `doc.descendants` is expensive, this case should be very rarely
|
|
41
|
+
// triggered. However, it's possible for the position to sometimes be beyond
|
|
42
|
+
// the last blockContainer node. This is a problem specifically when using the
|
|
43
|
+
// collaboration plugin.
|
|
44
|
+
const allBlockContainerPositions = [];
|
|
45
|
+
doc.descendants((node, pos) => {
|
|
46
|
+
if (node.type.isInGroup("bnBlock")) {
|
|
47
|
+
allBlockContainerPositions.push(pos);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// eslint-disable-next-line no-console
|
|
51
|
+
console.warn(`Position ${pos} is not within a blockContainer node.`);
|
|
52
|
+
const resolvedPos = doc.resolve(allBlockContainerPositions.find((position) => position >= pos) ||
|
|
53
|
+
allBlockContainerPositions[allBlockContainerPositions.length - 1]);
|
|
54
|
+
return {
|
|
55
|
+
posBeforeNode: resolvedPos.pos,
|
|
56
|
+
node: resolvedPos.nodeAfter,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets information regarding the ProseMirror nodes that make up a block in a
|
|
61
|
+
* BlockNote document. This includes the main `blockContainer` node, the
|
|
62
|
+
* `blockContent` node with the block's main body, and the optional `blockGroup`
|
|
63
|
+
* node which contains the block's children. As well as the nodes, also returns
|
|
64
|
+
* the ProseMirror positions just before & after each node.
|
|
65
|
+
* @param node The main `blockContainer` node that the block information should
|
|
66
|
+
* be retrieved from,
|
|
67
|
+
* @param blockContainerBeforePosOffset the position just before the
|
|
68
|
+
* `blockContainer` node in the document.
|
|
69
|
+
*/
|
|
70
|
+
export function getBlockInfoWithManualOffset(node, bnBlockBeforePosOffset) {
|
|
71
|
+
if (!node.type.isInGroup("bnBlock")) {
|
|
72
|
+
throw new Error(`Attempted to get bnBlock node at position but found node of different type ${node.type}`);
|
|
73
|
+
}
|
|
74
|
+
const bnBlockNode = node;
|
|
75
|
+
const bnBlockBeforePos = bnBlockBeforePosOffset;
|
|
76
|
+
const bnBlockAfterPos = bnBlockBeforePos + bnBlockNode.nodeSize;
|
|
77
|
+
const bnBlock = {
|
|
78
|
+
node: bnBlockNode,
|
|
79
|
+
beforePos: bnBlockBeforePos,
|
|
80
|
+
afterPos: bnBlockAfterPos,
|
|
81
|
+
};
|
|
82
|
+
if (bnBlockNode.type.name === "blockContainer") {
|
|
83
|
+
let blockContent;
|
|
84
|
+
let blockGroup;
|
|
85
|
+
bnBlockNode.forEach((node, offset) => {
|
|
86
|
+
if (node.type.spec.group === "blockContent") {
|
|
87
|
+
// console.log(beforePos, offset);
|
|
88
|
+
const blockContentNode = node;
|
|
89
|
+
const blockContentBeforePos = bnBlockBeforePos + offset + 1;
|
|
90
|
+
const blockContentAfterPos = blockContentBeforePos + node.nodeSize;
|
|
91
|
+
blockContent = {
|
|
92
|
+
node: blockContentNode,
|
|
93
|
+
beforePos: blockContentBeforePos,
|
|
94
|
+
afterPos: blockContentAfterPos,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else if (node.type.name === "blockGroup") {
|
|
98
|
+
const blockGroupNode = node;
|
|
99
|
+
const blockGroupBeforePos = bnBlockBeforePos + offset + 1;
|
|
100
|
+
const blockGroupAfterPos = blockGroupBeforePos + node.nodeSize;
|
|
101
|
+
blockGroup = {
|
|
102
|
+
node: blockGroupNode,
|
|
103
|
+
beforePos: blockGroupBeforePos,
|
|
104
|
+
afterPos: blockGroupAfterPos,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
if (!blockContent) {
|
|
109
|
+
throw new Error(`blockContainer node does not contain a blockContent node in its children: ${bnBlockNode}`);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
isBlockContainer: true,
|
|
113
|
+
bnBlock,
|
|
114
|
+
blockContent,
|
|
115
|
+
childContainer: blockGroup,
|
|
116
|
+
blockNoteType: blockContent.node.type.name,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (!bnBlock.node.type.isInGroup("childContainer")) {
|
|
121
|
+
throw new Error(`bnBlock node is not in the childContainer group: ${bnBlock.node}`);
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
isBlockContainer: false,
|
|
125
|
+
bnBlock: bnBlock,
|
|
126
|
+
childContainer: bnBlock,
|
|
127
|
+
blockNoteType: bnBlock.node.type.name,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Gets information regarding the ProseMirror nodes that make up a block in a
|
|
133
|
+
* BlockNote document. This includes the main `blockContainer` node, the
|
|
134
|
+
* `blockContent` node with the block's main body, and the optional `blockGroup`
|
|
135
|
+
* node which contains the block's children. As well as the nodes, also returns
|
|
136
|
+
* the ProseMirror positions just before & after each node.
|
|
137
|
+
* @param posInfo An object with the main `blockContainer` node that the block
|
|
138
|
+
* information should be retrieved from, and the position just before it in the
|
|
139
|
+
* document.
|
|
140
|
+
*/
|
|
141
|
+
export function getBlockInfo(posInfo) {
|
|
142
|
+
return getBlockInfoWithManualOffset(posInfo.node, posInfo.posBeforeNode);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Gets information regarding the ProseMirror nodes that make up a block from a
|
|
146
|
+
* resolved position just before the `blockContainer` node in the document that
|
|
147
|
+
* corresponds to it.
|
|
148
|
+
* @param resolvedPos The resolved position just before the `blockContainer`
|
|
149
|
+
* node.
|
|
150
|
+
*/
|
|
151
|
+
export function getBlockInfoFromResolvedPos(resolvedPos) {
|
|
152
|
+
if (!resolvedPos.nodeAfter) {
|
|
153
|
+
throw new Error(`Attempted to get blockContainer node at position ${resolvedPos.pos} but a node at this position does not exist`);
|
|
154
|
+
}
|
|
155
|
+
return getBlockInfoWithManualOffset(resolvedPos.nodeAfter, resolvedPos.pos);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Gets information regarding the ProseMirror nodes that make up a block. The
|
|
159
|
+
* block chosen is the one currently containing the current ProseMirror
|
|
160
|
+
* selection.
|
|
161
|
+
* @param state The ProseMirror editor state.
|
|
162
|
+
*/
|
|
163
|
+
export function getBlockInfoFromSelection(state) {
|
|
164
|
+
const posInfo = getNearestBlockContainerPos(state.doc, state.selection.anchor);
|
|
165
|
+
const ret = getBlockInfo(posInfo);
|
|
166
|
+
if (!ret.isBlockContainer) {
|
|
167
|
+
throw new Error(`selection always expected to return blockContainer ${state.selection.anchor}`);
|
|
168
|
+
}
|
|
169
|
+
return ret;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=getBlockInfoFromPos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBlockInfoFromPos.js","sourceRoot":"","sources":["../../../src/api/getBlockInfoFromPos.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|