@witchcraft/editor 0.0.5 → 0.0.6
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/module.d.mts +15 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +67 -13
- package/dist/runtime/assets/base.css +1 -0
- package/dist/runtime/assets/handle-arrow.svg +16 -0
- package/dist/runtime/assets/handle-border-circles-single.svg +44 -0
- package/dist/runtime/assets/handle-border-circles.svg +27 -0
- package/dist/runtime/assets/handle-temp.svg +1 -0
- package/dist/runtime/assets/utils.css +1 -0
- package/dist/runtime/components/CodeBlockThemePicker.d.vue.ts +12 -0
- package/dist/runtime/components/CodeBlockThemePicker.vue +123 -0
- package/dist/runtime/components/CodeBlockThemePicker.vue.d.ts +12 -0
- package/dist/runtime/components/Commands.d.vue.ts +10 -0
- package/dist/runtime/components/Commands.vue +60 -0
- package/dist/runtime/components/Commands.vue.d.ts +10 -0
- package/dist/runtime/components/Editor.d.vue.ts +40 -0
- package/dist/runtime/components/Editor.vue +208 -0
- package/dist/runtime/components/Editor.vue.d.ts +40 -0
- package/dist/runtime/components/EditorDemoApp.d.vue.ts +2 -0
- package/dist/runtime/components/EditorDemoApp.vue +104 -0
- package/dist/runtime/components/EditorDemoApp.vue.d.ts +2 -0
- package/dist/runtime/components/EditorDemoControls.d.vue.ts +12 -0
- package/dist/runtime/components/EditorDemoControls.vue +36 -0
- package/dist/runtime/components/EditorDemoControls.vue.d.ts +12 -0
- package/dist/runtime/components/TestWrapper.d.vue.ts +11 -0
- package/dist/runtime/components/TestWrapper.vue +63 -0
- package/dist/runtime/components/TestWrapper.vue.d.ts +11 -0
- package/dist/runtime/composables/useEditor.d.ts +9 -0
- package/dist/runtime/composables/useEditor.js +21 -0
- package/dist/runtime/composables/useWindowDebugging.d.ts +3 -0
- package/dist/runtime/composables/useWindowDebugging.js +16 -0
- package/dist/runtime/demo/App.d.vue.ts +2 -0
- package/dist/runtime/demo/App.vue +101 -0
- package/dist/runtime/demo/App.vue.d.ts +2 -0
- package/dist/runtime/demo/README.md +1 -0
- package/dist/runtime/demo/main.d.ts +1 -0
- package/dist/runtime/demo/main.js +4 -0
- package/dist/runtime/demo/tailwind.css +1 -0
- package/dist/runtime/env.d.ts +2 -0
- package/dist/runtime/injectionKeys.d.ts +6 -0
- package/dist/runtime/injectionKeys.js +3 -0
- package/dist/runtime/main.lib.d.ts +2 -0
- package/dist/runtime/main.lib.js +2 -0
- package/dist/runtime/pm/commands/backspace.d.ts +12 -0
- package/dist/runtime/pm/commands/backspace.js +26 -0
- package/dist/runtime/pm/commands/changeAttrs.d.ts +9 -0
- package/dist/runtime/pm/commands/changeAttrs.js +15 -0
- package/dist/runtime/pm/commands/deleteSelection.d.ts +9 -0
- package/dist/runtime/pm/commands/deleteSelection.js +8 -0
- package/dist/runtime/pm/commands/enter.d.ts +14 -0
- package/dist/runtime/pm/commands/enter.js +9 -0
- package/dist/runtime/pm/commands/insertBreak.d.ts +9 -0
- package/dist/runtime/pm/commands/insertBreak.js +22 -0
- package/dist/runtime/pm/features/Base/Base.d.ts +4 -0
- package/dist/runtime/pm/features/Base/Base.js +32 -0
- package/dist/runtime/pm/features/Base/commands/deleteNodes.d.ts +10 -0
- package/dist/runtime/pm/features/Base/commands/deleteNodes.js +29 -0
- package/dist/runtime/pm/features/Base/commands/setCursorVisible.d.ts +12 -0
- package/dist/runtime/pm/features/Base/commands/setCursorVisible.js +7 -0
- package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.d.ts +9 -0
- package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.js +48 -0
- package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.d.ts +3 -0
- package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.js +26 -0
- package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.d.ts +3 -0
- package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.js +38 -0
- package/dist/runtime/pm/features/Base/plugins/selectingIndicator.d.ts +5 -0
- package/dist/runtime/pm/features/Base/plugins/selectingIndicator.js +35 -0
- package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.d.ts +33 -0
- package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.js +66 -0
- package/dist/runtime/pm/features/Base/types.d.ts +3 -0
- package/dist/runtime/pm/features/Base/types.js +0 -0
- package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.d.ts +3 -0
- package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.js +34 -0
- package/dist/runtime/pm/features/Blockquote/Blockquote.d.ts +5 -0
- package/dist/runtime/pm/features/Blockquote/Blockquote.js +65 -0
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.d.ts +11 -0
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.js +31 -0
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.d.ts +11 -0
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.js +12 -0
- package/dist/runtime/pm/features/Blocks/Blocks.d.ts +2 -0
- package/dist/runtime/pm/features/Blocks/Blocks.js +2 -0
- package/dist/runtime/pm/features/Blocks/Item.d.ts +11 -0
- package/dist/runtime/pm/features/Blocks/Item.js +157 -0
- package/dist/runtime/pm/features/Blocks/List.d.ts +4 -0
- package/dist/runtime/pm/features/Blocks/List.js +59 -0
- package/dist/runtime/pm/features/Blocks/commands/changeItemType.d.ts +20 -0
- package/dist/runtime/pm/features/Blocks/commands/changeItemType.js +40 -0
- package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.d.ts +14 -0
- package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.js +28 -0
- package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.d.ts +23 -0
- package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.js +124 -0
- package/dist/runtime/pm/features/Blocks/commands/deleteItem.d.ts +12 -0
- package/dist/runtime/pm/features/Blocks/commands/deleteItem.js +8 -0
- package/dist/runtime/pm/features/Blocks/commands/indentItem.d.ts +12 -0
- package/dist/runtime/pm/features/Blocks/commands/indentItem.js +58 -0
- package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.d.ts +18 -0
- package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.js +40 -0
- package/dist/runtime/pm/features/Blocks/commands/moveItem.d.ts +12 -0
- package/dist/runtime/pm/features/Blocks/commands/moveItem.js +80 -0
- package/dist/runtime/pm/features/Blocks/commands/setNode.d.ts +20 -0
- package/dist/runtime/pm/features/Blocks/commands/setNode.js +87 -0
- package/dist/runtime/pm/features/Blocks/commands/splitItem.d.ts +17 -0
- package/dist/runtime/pm/features/Blocks/commands/splitItem.js +87 -0
- package/dist/runtime/pm/features/Blocks/commands/unindentItem.d.ts +12 -0
- package/dist/runtime/pm/features/Blocks/commands/unindentItem.js +42 -0
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.d.vue.ts +0 -0
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue +122 -0
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue.d.ts +0 -0
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.d.vue.ts +6 -0
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue +78 -0
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue.d.ts +6 -0
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.d.vue.ts +92 -0
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue +350 -0
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue.d.ts +92 -0
- package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.d.ts +5 -0
- package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.js +42 -0
- package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.d.ts +1 -0
- package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.js +0 -0
- package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.d.ts +5 -0
- package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.js +22 -0
- package/dist/runtime/pm/features/Blocks/composables/useHasChildren.d.ts +5 -0
- package/dist/runtime/pm/features/Blocks/composables/useHasChildren.js +10 -0
- package/dist/runtime/pm/features/Blocks/composables/useNodeStates.d.ts +7 -0
- package/dist/runtime/pm/features/Blocks/composables/useNodeStates.js +20 -0
- package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.d.ts +20 -0
- package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.js +138 -0
- package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.d.ts +11 -0
- package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.js +36 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.d.ts +8 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.js +30 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.d.ts +3 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.js +30 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.d.ts +4 -0
- package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.js +17 -0
- package/dist/runtime/pm/features/Blocks/states/stateful.d.ts +2 -0
- package/dist/runtime/pm/features/Blocks/states/stateful.js +37 -0
- package/dist/runtime/pm/features/Blocks/states/task/cancelled.svg +32 -0
- package/dist/runtime/pm/features/Blocks/states/task/checked.svg +27 -0
- package/dist/runtime/pm/features/Blocks/states/task/checked2.svg +24 -0
- package/dist/runtime/pm/features/Blocks/states/task/partial.svg +24 -0
- package/dist/runtime/pm/features/Blocks/states/task/partial2.svg +31 -0
- package/dist/runtime/pm/features/Blocks/states/task/unchecked.svg +20 -0
- package/dist/runtime/pm/features/Blocks/types.d.ts +43 -0
- package/dist/runtime/pm/features/Blocks/types.js +2 -0
- package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.d.ts +3 -0
- package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.js +24 -0
- package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.d.ts +4 -0
- package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.js +23 -0
- package/dist/runtime/pm/features/Blocks/utils/isValidId.d.ts +2 -0
- package/dist/runtime/pm/features/Blocks/utils/isValidId.js +7 -0
- package/dist/runtime/pm/features/CodeBlock/CodeBlock.d.ts +16 -0
- package/dist/runtime/pm/features/CodeBlock/CodeBlock.js +91 -0
- package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.d.ts +1 -0
- package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +63 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.d.ts +9 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.js +28 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.d.ts +9 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.js +39 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.d.ts +9 -0
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.js +50 -0
- package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.d.ts +9 -0
- package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.js +27 -0
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.d.vue.ts +92 -0
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +112 -0
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue.d.ts +92 -0
- package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.d.ts +28 -0
- package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.js +137 -0
- package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.d.ts +37 -0
- package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.js +101 -0
- package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.d.ts +17 -0
- package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.js +711 -0
- package/dist/runtime/pm/features/CodeBlock/types.d.ts +4 -0
- package/dist/runtime/pm/features/CodeBlock/types.js +2 -0
- package/dist/runtime/pm/features/Collaboration/Collaboration.d.ts +66 -0
- package/dist/runtime/pm/features/Collaboration/Collaboration.js +169 -0
- package/dist/runtime/pm/features/CommandsMenus/CommandBar.d.ts +19 -0
- package/dist/runtime/pm/features/CommandsMenus/CommandBar.js +97 -0
- package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.d.ts +20 -0
- package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.js +188 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.d.vue.ts +8 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue +58 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue.d.ts +8 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.d.vue.ts +12 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +42 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue.d.ts +12 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.d.vue.ts +10 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +55 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue.d.ts +10 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.d.vue.ts +11 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +58 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue.d.ts +11 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.d.vue.ts +11 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +54 -0
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue.d.ts +11 -0
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.d.vue.ts +5 -0
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue +13 -0
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue.d.ts +5 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.d.vue.ts +8 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +45 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue.d.ts +8 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.d.vue.ts +2 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +5 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue.d.ts +2 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.d.vue.ts +2 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +5 -0
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue.d.ts +2 -0
- package/dist/runtime/pm/features/CommandsMenus/types.d.ts +61 -0
- package/dist/runtime/pm/features/CommandsMenus/types.js +5 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.d.ts +3 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.js +11 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.d.ts +10 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.js +16 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.d.ts +5 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.js +9 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.d.ts +5 -0
- package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.js +11 -0
- package/dist/runtime/pm/features/Document/Document.d.ts +3 -0
- package/dist/runtime/pm/features/Document/Document.js +6 -0
- package/dist/runtime/pm/features/DocumentApi/DocumentApi.d.ts +86 -0
- package/dist/runtime/pm/features/DocumentApi/DocumentApi.js +170 -0
- package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.d.ts +13 -0
- package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.js +76 -0
- package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.d.ts +23 -0
- package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.js +70 -0
- package/dist/runtime/pm/features/DocumentApi/types.d.ts +133 -0
- package/dist/runtime/pm/features/DocumentApi/types.js +1 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.d.ts +3 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.js +37 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.d.ts +4 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.js +13 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.d.ts +2 -0
- package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.js +22 -0
- package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.d.ts +2 -0
- package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.js +6 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.d.ts +1 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.js +14 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.d.ts +1 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.js +14 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.d.ts +9 -0
- package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.js +19 -0
- package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.d.ts +2 -0
- package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.js +3 -0
- package/dist/runtime/pm/features/EmbeddedDocument/Embedded.d.ts +24 -0
- package/dist/runtime/pm/features/EmbeddedDocument/Embedded.js +73 -0
- package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.d.ts +23 -0
- package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.js +70 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.d.vue.ts +14 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +169 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue.d.ts +14 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.d.vue.ts +92 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +170 -0
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue.d.ts +92 -0
- package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.d.ts +31 -0
- package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.js +199 -0
- package/dist/runtime/pm/features/EmbeddedDocument/types.d.ts +49 -0
- package/dist/runtime/pm/features/EmbeddedDocument/types.js +6 -0
- package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.d.ts +9 -0
- package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.js +3 -0
- package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.d.ts +28 -0
- package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.js +17 -0
- package/dist/runtime/pm/features/FileLoader/FileLoader.d.ts +16 -0
- package/dist/runtime/pm/features/FileLoader/FileLoader.js +99 -0
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.d.ts +28 -0
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.js +69 -0
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.d.ts +11 -0
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.js +49 -0
- package/dist/runtime/pm/features/FileLoader/commands/insertFile.d.ts +17 -0
- package/dist/runtime/pm/features/FileLoader/commands/insertFile.js +39 -0
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.d.vue.ts +92 -0
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +38 -0
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue.d.ts +92 -0
- package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.d.ts +5 -0
- package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.js +61 -0
- package/dist/runtime/pm/features/FileLoader/types.d.ts +73 -0
- package/dist/runtime/pm/features/FileLoader/types.js +0 -0
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.d.ts +4 -0
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.js +27 -0
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.d.ts +9 -0
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.js +22 -0
- package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.d.ts +2 -0
- package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.js +11 -0
- package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.d.ts +3 -0
- package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.js +8 -0
- package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.d.ts +1 -0
- package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.js +12 -0
- package/dist/runtime/pm/features/HardBreak/HardBreak.d.ts +5 -0
- package/dist/runtime/pm/features/HardBreak/HardBreak.js +14 -0
- package/dist/runtime/pm/features/Heading/Heading.d.ts +24 -0
- package/dist/runtime/pm/features/Heading/Heading.js +85 -0
- package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.d.ts +16 -0
- package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.js +33 -0
- package/dist/runtime/pm/features/Heading/types.d.ts +14 -0
- package/dist/runtime/pm/features/Heading/types.js +0 -0
- package/dist/runtime/pm/features/Highlight/Highlight.d.ts +72 -0
- package/dist/runtime/pm/features/Highlight/Highlight.js +163 -0
- package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +3 -0
- package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +5 -0
- package/dist/runtime/pm/features/Highlight/types.d.ts +27 -0
- package/dist/runtime/pm/features/Highlight/types.js +2 -0
- package/dist/runtime/pm/features/History/History.d.ts +35 -0
- package/dist/runtime/pm/features/History/History.js +63 -0
- package/dist/runtime/pm/features/Iframe/Iframe.d.ts +21 -0
- package/dist/runtime/pm/features/Iframe/Iframe.js +127 -0
- package/dist/runtime/pm/features/Iframe/IframeParsers.d.ts +37 -0
- package/dist/runtime/pm/features/Iframe/IframeParsers.js +88 -0
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.d.vue.ts +92 -0
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue +79 -0
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue.d.ts +92 -0
- package/dist/runtime/pm/features/Iframe/types.d.ts +5 -0
- package/dist/runtime/pm/features/Iframe/types.js +0 -0
- package/dist/runtime/pm/features/Image/Image.d.ts +2 -0
- package/dist/runtime/pm/features/Image/Image.js +13 -0
- package/dist/runtime/pm/features/Link/Link.d.ts +38 -0
- package/dist/runtime/pm/features/Link/Link.js +241 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.d.vue.ts +28 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +113 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue.d.ts +28 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.d.vue.ts +29 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +104 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue.d.ts +29 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.d.vue.ts +11 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue +126 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue.d.ts +11 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.d.vue.ts +18 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +54 -0
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue.d.ts +18 -0
- package/dist/runtime/pm/features/Link/types.d.ts +44 -0
- package/dist/runtime/pm/features/Link/types.js +3 -0
- package/dist/runtime/pm/features/Menus/Menus.d.ts +45 -0
- package/dist/runtime/pm/features/Menus/Menus.js +142 -0
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.d.vue.ts +6 -0
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue +165 -0
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue.d.ts +6 -0
- package/dist/runtime/pm/features/Menus/types.d.ts +51 -0
- package/dist/runtime/pm/features/Menus/types.js +3 -0
- package/dist/runtime/pm/features/Menus/utils/isMarkMenu.d.ts +2 -0
- package/dist/runtime/pm/features/Menus/utils/isMarkMenu.js +3 -0
- package/dist/runtime/pm/features/Tables/commands/tableEnter.d.ts +15 -0
- package/dist/runtime/pm/features/Tables/commands/tableEnter.js +19 -0
- package/dist/runtime/pm/features/Tables/index.d.ts +9 -0
- package/dist/runtime/pm/features/Tables/index.js +44 -0
- package/dist/runtime/pm/schema.d.ts +4 -0
- package/dist/runtime/pm/schema.js +80 -0
- package/dist/runtime/pm/testSchema.d.ts +5 -0
- package/dist/runtime/pm/testSchema.js +30 -0
- package/dist/runtime/pm/utils/createDropIndicator.d.ts +23 -0
- package/dist/runtime/pm/utils/createDropIndicator.js +36 -0
- package/dist/runtime/pm/utils/createStateOnlyPluginApply.d.ts +2 -0
- package/dist/runtime/pm/utils/createStateOnlyPluginApply.js +9 -0
- package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.d.ts +2 -0
- package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.js +14 -0
- package/dist/runtime/pm/utils/dropPointInfo.d.ts +56 -0
- package/dist/runtime/pm/utils/dropPointInfo.js +28 -0
- package/dist/runtime/pm/utils/findUpwards.d.ts +20 -0
- package/dist/runtime/pm/utils/findUpwards.js +18 -0
- package/dist/runtime/pm/utils/getChildChunks.d.ts +3 -0
- package/dist/runtime/pm/utils/getChildChunks.js +15 -0
- package/dist/runtime/pm/utils/getDiffReplacementRange.d.ts +20 -0
- package/dist/runtime/pm/utils/getDiffReplacementRange.js +9 -0
- package/dist/runtime/pm/utils/getElMaxVisualSize.d.ts +9 -0
- package/dist/runtime/pm/utils/getElMaxVisualSize.js +7 -0
- package/dist/runtime/pm/utils/getElPropertyAsInt.d.ts +4 -0
- package/dist/runtime/pm/utils/getElPropertyAsInt.js +8 -0
- package/dist/runtime/pm/utils/getGroupNodeNames.d.ts +2 -0
- package/dist/runtime/pm/utils/getGroupNodeNames.js +7 -0
- package/dist/runtime/pm/utils/getMarkPosition.d.ts +11 -0
- package/dist/runtime/pm/utils/getMarkPosition.js +34 -0
- package/dist/runtime/pm/utils/getMarksInSelection.d.ts +3 -0
- package/dist/runtime/pm/utils/getMarksInSelection.js +16 -0
- package/dist/runtime/pm/utils/getTypeByName.d.ts +2 -0
- package/dist/runtime/pm/utils/getTypeByName.js +5 -0
- package/dist/runtime/pm/utils/index.d.ts +15 -0
- package/dist/runtime/pm/utils/index.js +15 -0
- package/dist/runtime/pm/utils/internal/createNodeTypesList.d.ts +2 -0
- package/dist/runtime/pm/utils/internal/createNodeTypesList.js +17 -0
- package/dist/runtime/pm/utils/internal/debugMap.d.ts +7 -0
- package/dist/runtime/pm/utils/internal/debugMap.js +24 -0
- package/dist/runtime/pm/utils/internal/debugNode.d.ts +2 -0
- package/dist/runtime/pm/utils/internal/debugNode.js +18 -0
- package/dist/runtime/pm/utils/internal/debugSel.d.ts +5 -0
- package/dist/runtime/pm/utils/internal/debugSel.js +8 -0
- package/dist/runtime/pm/utils/internal/recurse.d.ts +2 -0
- package/dist/runtime/pm/utils/internal/recurse.js +39 -0
- package/dist/runtime/pm/utils/internal/stripBlockId.d.ts +2 -0
- package/dist/runtime/pm/utils/internal/stripBlockId.js +9 -0
- package/dist/runtime/pm/utils/mapSelection.d.ts +8 -0
- package/dist/runtime/pm/utils/mapSelection.js +12 -0
- package/dist/runtime/pm/utils/nodesBetween.d.ts +21 -0
- package/dist/runtime/pm/utils/nodesBetween.js +21 -0
- package/dist/runtime/pm/utils/pointToPmPoint.d.ts +2 -0
- package/dist/runtime/pm/utils/pointToPmPoint.js +3 -0
- package/dist/runtime/pm/utils/splitIntoChunks.d.ts +32 -0
- package/dist/runtime/pm/utils/splitIntoChunks.js +31 -0
- package/dist/runtime/testDocuments.d.ts +53 -0
- package/dist/runtime/testDocuments.js +122 -0
- package/dist/runtime/types/index.d.ts +53 -0
- package/dist/runtime/types/index.js +9 -0
- package/dist/types.d.mts +2 -12
- package/package.json +5 -5
- package/dist/module.d.cts +0 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { delay } from "@alanscodelog/utils/delay";
|
|
2
|
+
import mime from "mime/lite";
|
|
3
|
+
import { FileLoaderHandler } from "./FileLoaderHandler.js";
|
|
4
|
+
import { findLoadingNodePos } from "../utils/findLoadingNodePos.js";
|
|
5
|
+
import { readAsDataUrl } from "../utils/readAsDataUrl.js";
|
|
6
|
+
export const testFileLoaderDelay = 2e3;
|
|
7
|
+
export const TestFileLoaderHandler = new FileLoaderHandler({
|
|
8
|
+
filterFile: (file) => {
|
|
9
|
+
const mimeExtension = mime.getExtension(file.type);
|
|
10
|
+
if (!mimeExtension) return void 0;
|
|
11
|
+
const normalizedMimeType = mime.getType(mimeExtension);
|
|
12
|
+
file.parsedMime = normalizedMimeType;
|
|
13
|
+
if (!normalizedMimeType?.startsWith("image")) return void 0;
|
|
14
|
+
return file;
|
|
15
|
+
},
|
|
16
|
+
replaceLoadingNode(editor, pos, res) {
|
|
17
|
+
const pm = editor.schema.nodes;
|
|
18
|
+
const parsedMime = res.file.parsedMime;
|
|
19
|
+
const returnVal = editor.commands.command(({ tr }) => {
|
|
20
|
+
if (parsedMime.startsWith("image")) {
|
|
21
|
+
tr.replaceWith(pos, pos + 1, pm.image.create({
|
|
22
|
+
src: res.result
|
|
23
|
+
}));
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
tr.delete(pos, pos + 1);
|
|
27
|
+
return false;
|
|
28
|
+
});
|
|
29
|
+
return returnVal;
|
|
30
|
+
},
|
|
31
|
+
loadFile: async (file, insertId, editor) => {
|
|
32
|
+
const result = await readAsDataUrl(file);
|
|
33
|
+
const replacePos = findLoadingNodePos(editor.state, insertId);
|
|
34
|
+
if (replacePos !== void 0) {
|
|
35
|
+
editor.commands.command(({ tr }) => {
|
|
36
|
+
tr.setNodeAttribute(replacePos, "preview", result);
|
|
37
|
+
return true;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (file.parsedMime.startsWith("image")) {
|
|
41
|
+
await delay(testFileLoaderDelay * Math.random());
|
|
42
|
+
return {
|
|
43
|
+
file,
|
|
44
|
+
result
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return void 0;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Command } from "@tiptap/core";
|
|
2
|
+
import type { IFileLoaderHandler } from "../types.js";
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
fileLoader: {
|
|
6
|
+
/**
|
|
7
|
+
* Insert a file into the editor using the FileLoader extension. The configured {@link IFileLoaderHandler} determines where exactly it's inserted (in an item node after by default).
|
|
8
|
+
*
|
|
9
|
+
* You can technically test if this will work with `can` but it's not 100% accurate. We only check if at least one file passes the file filter, not everything else.
|
|
10
|
+
*
|
|
11
|
+
* @redirectable
|
|
12
|
+
*/
|
|
13
|
+
insertFile(files: File[], pos?: number): ReturnType;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export declare const insertFile: (handler: IFileLoaderHandler<any, any>, debug?: boolean) => (files: File[], pos?: number) => Command;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { redirectFromEmbedded } from "../../EmbeddedDocument/utils/redirectFromEmbedded.js";
|
|
2
|
+
import { findLoadingNodePos } from "../utils/findLoadingNodePos.js";
|
|
3
|
+
export const insertFile = (handler, debug = false) => (files, pos) => ({ tr, editor, view, commands, dispatch }) => {
|
|
4
|
+
const redirect = redirectFromEmbedded(view, "insertFile", { args: [files, pos], view, commands });
|
|
5
|
+
if (redirect.redirected) {
|
|
6
|
+
return redirect.result;
|
|
7
|
+
}
|
|
8
|
+
if (dispatch) tr.setMeta("fileLoaderIgnore", true);
|
|
9
|
+
if (!dispatch) {
|
|
10
|
+
return files.some((file) => handler.filterFile?.(file) ?? true);
|
|
11
|
+
}
|
|
12
|
+
void Promise.allSettled(files.reverse().map(async (file) => {
|
|
13
|
+
if (debug) console.log(`insertFile for ${file.name}`, file);
|
|
14
|
+
const f = handler.filterFile ? handler.filterFile(file) : file;
|
|
15
|
+
if (!f) return;
|
|
16
|
+
if (debug) console.log(`filterFile for ${file.name}`, f);
|
|
17
|
+
const insertPosition = handler.insertPosition(f, editor, pos);
|
|
18
|
+
if (debug) console.log(`insertPosition for ${file.name}`, insertPosition);
|
|
19
|
+
if (insertPosition === void 0) return;
|
|
20
|
+
const insertLoadingNode = handler.insertLoadingNode;
|
|
21
|
+
const insertId = insertLoadingNode(f, editor, insertPosition, pos);
|
|
22
|
+
if (debug) console.log(`insertId for ${file.name}`, insertId);
|
|
23
|
+
if (!insertId) return;
|
|
24
|
+
const res = await handler.loadFile?.(f, insertId, editor);
|
|
25
|
+
if (debug) console.log(`result for ${file.name}`, res);
|
|
26
|
+
if (!res) {
|
|
27
|
+
return handler.onLoadError(f, editor, void 0, new Error("fileLoader returned nothing."), insertId);
|
|
28
|
+
}
|
|
29
|
+
const replacePos = findLoadingNodePos(editor.state, insertId);
|
|
30
|
+
if (debug) console.log(`replacePos for ${file.name}`, replacePos);
|
|
31
|
+
if (replacePos === void 0) {
|
|
32
|
+
return handler.onLoadError(f, editor, replacePos, new Error("Could not find node to replace."), insertId);
|
|
33
|
+
}
|
|
34
|
+
const replaceRes = handler.replaceLoadingNode(editor, replacePos, res, insertId);
|
|
35
|
+
if (debug) console.log(`called replaceLoadingNode for ${file.name}, replaced node:`, replaceRes);
|
|
36
|
+
})).then(() => {
|
|
37
|
+
});
|
|
38
|
+
return true;
|
|
39
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
editor: {
|
|
3
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
node: {
|
|
7
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
decorations: {
|
|
11
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
selected: {
|
|
15
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
extension: {
|
|
19
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
20
|
+
required: true;
|
|
21
|
+
};
|
|
22
|
+
getPos: {
|
|
23
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
updateAttributes: {
|
|
27
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
deleteNode: {
|
|
31
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
32
|
+
required: true;
|
|
33
|
+
};
|
|
34
|
+
view: {
|
|
35
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
36
|
+
required: true;
|
|
37
|
+
};
|
|
38
|
+
innerDecorations: {
|
|
39
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
40
|
+
required: true;
|
|
41
|
+
};
|
|
42
|
+
HTMLAttributes: {
|
|
43
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
44
|
+
required: true;
|
|
45
|
+
};
|
|
46
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
47
|
+
editor: {
|
|
48
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
49
|
+
required: true;
|
|
50
|
+
};
|
|
51
|
+
node: {
|
|
52
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
53
|
+
required: true;
|
|
54
|
+
};
|
|
55
|
+
decorations: {
|
|
56
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
57
|
+
required: true;
|
|
58
|
+
};
|
|
59
|
+
selected: {
|
|
60
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
61
|
+
required: true;
|
|
62
|
+
};
|
|
63
|
+
extension: {
|
|
64
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
65
|
+
required: true;
|
|
66
|
+
};
|
|
67
|
+
getPos: {
|
|
68
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
69
|
+
required: true;
|
|
70
|
+
};
|
|
71
|
+
updateAttributes: {
|
|
72
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
73
|
+
required: true;
|
|
74
|
+
};
|
|
75
|
+
deleteNode: {
|
|
76
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
77
|
+
required: true;
|
|
78
|
+
};
|
|
79
|
+
view: {
|
|
80
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
81
|
+
required: true;
|
|
82
|
+
};
|
|
83
|
+
innerDecorations: {
|
|
84
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
85
|
+
required: true;
|
|
86
|
+
};
|
|
87
|
+
HTMLAttributes: {
|
|
88
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
89
|
+
required: true;
|
|
90
|
+
};
|
|
91
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
92
|
+
export default _default;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- @vue-expect-error contenteditable exists -->
|
|
3
|
+
<node-view-wrapper
|
|
4
|
+
:class="twMerge(
|
|
5
|
+
`
|
|
6
|
+
group/file-loader
|
|
7
|
+
rounded-sm
|
|
8
|
+
animate-pulse
|
|
9
|
+
bg-accent-200
|
|
10
|
+
text-accent-800
|
|
11
|
+
dark:bg-accent-700
|
|
12
|
+
dark:text-accent-300
|
|
13
|
+
px-2
|
|
14
|
+
flex
|
|
15
|
+
flex-col
|
|
16
|
+
items-center
|
|
17
|
+
gap-2
|
|
18
|
+
`
|
|
19
|
+
)"
|
|
20
|
+
contenteditable="false"
|
|
21
|
+
>
|
|
22
|
+
<div class="self-start">
|
|
23
|
+
{{ `Loading "${node.attrs.fileName ?? `Unknown`}" ...` }}
|
|
24
|
+
</div>
|
|
25
|
+
<img
|
|
26
|
+
v-if="node.attrs.preview"
|
|
27
|
+
class="!max-h-[200px] !max-w-[200px] mb-2"
|
|
28
|
+
:src="node.attrs.preview"
|
|
29
|
+
alt="Loading Image"
|
|
30
|
+
>
|
|
31
|
+
</node-view-wrapper>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script setup>
|
|
35
|
+
import { nodeViewProps, NodeViewWrapper } from "@tiptap/vue-3";
|
|
36
|
+
import { twMerge } from "tailwind-merge";
|
|
37
|
+
defineProps(nodeViewProps);
|
|
38
|
+
</script>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
editor: {
|
|
3
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
node: {
|
|
7
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
decorations: {
|
|
11
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
selected: {
|
|
15
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
extension: {
|
|
19
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
20
|
+
required: true;
|
|
21
|
+
};
|
|
22
|
+
getPos: {
|
|
23
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
updateAttributes: {
|
|
27
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
deleteNode: {
|
|
31
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
32
|
+
required: true;
|
|
33
|
+
};
|
|
34
|
+
view: {
|
|
35
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
36
|
+
required: true;
|
|
37
|
+
};
|
|
38
|
+
innerDecorations: {
|
|
39
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
40
|
+
required: true;
|
|
41
|
+
};
|
|
42
|
+
HTMLAttributes: {
|
|
43
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
44
|
+
required: true;
|
|
45
|
+
};
|
|
46
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
47
|
+
editor: {
|
|
48
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
|
|
49
|
+
required: true;
|
|
50
|
+
};
|
|
51
|
+
node: {
|
|
52
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
|
|
53
|
+
required: true;
|
|
54
|
+
};
|
|
55
|
+
decorations: {
|
|
56
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
|
|
57
|
+
required: true;
|
|
58
|
+
};
|
|
59
|
+
selected: {
|
|
60
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
|
|
61
|
+
required: true;
|
|
62
|
+
};
|
|
63
|
+
extension: {
|
|
64
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
|
|
65
|
+
required: true;
|
|
66
|
+
};
|
|
67
|
+
getPos: {
|
|
68
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
|
|
69
|
+
required: true;
|
|
70
|
+
};
|
|
71
|
+
updateAttributes: {
|
|
72
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
|
|
73
|
+
required: true;
|
|
74
|
+
};
|
|
75
|
+
deleteNode: {
|
|
76
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
|
|
77
|
+
required: true;
|
|
78
|
+
};
|
|
79
|
+
view: {
|
|
80
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
|
|
81
|
+
required: true;
|
|
82
|
+
};
|
|
83
|
+
innerDecorations: {
|
|
84
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
|
|
85
|
+
required: true;
|
|
86
|
+
};
|
|
87
|
+
HTMLAttributes: {
|
|
88
|
+
type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
|
|
89
|
+
required: true;
|
|
90
|
+
};
|
|
91
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
92
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import { Plugin, PluginKey } from "@tiptap/pm/state";
|
|
3
|
+
import type { FileLoaderExtensionOptions } from "../types.js";
|
|
4
|
+
export declare const fileLoaderPluginKey: PluginKey<any>;
|
|
5
|
+
export declare function fileLoaderPlugin(editor: Editor, options: Pick<FileLoaderExtensionOptions, "cleanupOnLoad">): Plugin<any>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Plugin, PluginKey } from "@tiptap/pm/state";
|
|
2
|
+
import { cleanupFileLoaderNodes } from "../utils/cleanupFileLoaderNodes.js";
|
|
3
|
+
export const fileLoaderPluginKey = new PluginKey("fileLoader");
|
|
4
|
+
export function fileLoaderPlugin(editor, options) {
|
|
5
|
+
let cleaned = false;
|
|
6
|
+
return new Plugin({
|
|
7
|
+
key: fileLoaderPluginKey,
|
|
8
|
+
/** See {@link DocumentApi} */
|
|
9
|
+
stateInit: (tr) => {
|
|
10
|
+
if (!options.cleanupOnLoad) return;
|
|
11
|
+
cleaned = true;
|
|
12
|
+
return cleanupFileLoaderNodes(
|
|
13
|
+
tr,
|
|
14
|
+
editor.schema,
|
|
15
|
+
editor.state.schema.nodes.fileLoader,
|
|
16
|
+
[
|
|
17
|
+
editor.state.schema.nodes.item,
|
|
18
|
+
editor.state.schema.nodes.list
|
|
19
|
+
],
|
|
20
|
+
editor.state.schema.nodes.paragraph
|
|
21
|
+
);
|
|
22
|
+
},
|
|
23
|
+
// in case the documentApi isn't being used to load documents
|
|
24
|
+
appendTransaction: (_, _oldState, newState) => {
|
|
25
|
+
if (!newState.tr.getMeta("cleanFileLoaders") && (!options.cleanupOnLoad || cleaned)) return;
|
|
26
|
+
cleaned = true;
|
|
27
|
+
return cleanupFileLoaderNodes(
|
|
28
|
+
newState.tr,
|
|
29
|
+
editor.schema,
|
|
30
|
+
editor.state.schema.nodes.fileLoader,
|
|
31
|
+
[
|
|
32
|
+
editor.state.schema.nodes.item,
|
|
33
|
+
editor.state.schema.nodes.list
|
|
34
|
+
],
|
|
35
|
+
editor.state.schema.nodes.paragraph
|
|
36
|
+
);
|
|
37
|
+
},
|
|
38
|
+
filterTransaction: (tr) => {
|
|
39
|
+
if (tr.getMeta("fileLoaderIgnore")) return false;
|
|
40
|
+
return true;
|
|
41
|
+
},
|
|
42
|
+
props: {
|
|
43
|
+
handleDOMEvents: {
|
|
44
|
+
drop: (view, event) => {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
const pos = view.posAtCoords({ left: event.clientX, top: event.clientY });
|
|
47
|
+
if (!pos) return;
|
|
48
|
+
const position = pos.inside > 0 ? pos.inside : pos.pos - 1;
|
|
49
|
+
const files = Array.from(event.dataTransfer?.files ?? []);
|
|
50
|
+
void editor.commands.insertFile(files, position);
|
|
51
|
+
},
|
|
52
|
+
paste: (_view, event) => {
|
|
53
|
+
const files = Array.from(event.clipboardData?.files ?? []);
|
|
54
|
+
const htmlContent = event.clipboardData?.getData("text/html");
|
|
55
|
+
if (htmlContent) return;
|
|
56
|
+
void editor.commands.insertFile(files);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import type { HTMLAttributesOptions } from "../../../types/index.js";
|
|
3
|
+
import type { WithOnTriggerByEmbeddedBlockOptions } from "../EmbeddedDocument/types.js";
|
|
4
|
+
export interface FileLoaderExtensionOptions extends HTMLAttributesOptions, WithOnTriggerByEmbeddedBlockOptions {
|
|
5
|
+
/**
|
|
6
|
+
* By default, the plugin removes fileLoader nodes using {@link cleanupFileLoaderNodes} when the document is loaded. This can happen if the user interrupts a file load/upload/save and the document is saved with a fileLoader node.
|
|
7
|
+
*
|
|
8
|
+
* We can't keep a reference to the file they wanted to load without external work, so the nodes are removed.
|
|
9
|
+
*/
|
|
10
|
+
cleanupOnLoad?: boolean;
|
|
11
|
+
/** See {@link IFileLoaderHandler} */
|
|
12
|
+
handler: IFileLoaderHandler<File, any>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Helps handle the loading of files. Provides a way to adjust the insert position and takes care of keeping track of loading vs loaded nodes.
|
|
16
|
+
*
|
|
17
|
+
* See {@link FileLoaderHandler} for a partial implementation you can customize to create the interface.
|
|
18
|
+
*
|
|
19
|
+
* The insert handlers are called with the files in reverse order so that you can more easily insert them one after the other without position mapping.
|
|
20
|
+
*/
|
|
21
|
+
export type IFileLoaderHandler<TFile extends File, T = {
|
|
22
|
+
file: TFile;
|
|
23
|
+
result: string | ArrayBuffer | null;
|
|
24
|
+
}, TKey = string> = {
|
|
25
|
+
/**
|
|
26
|
+
* Should load/save/upload the file and return the information neccesary to create the loaded node.
|
|
27
|
+
*
|
|
28
|
+
* The `insertId` and `editor` are provided in case you're uploading the file or doing some other heavy operation and want to update the fileLoader node as soon as you can load the image.
|
|
29
|
+
*
|
|
30
|
+
* A `FileLoaderNodeView` is provided (but no pre-configured) for these purposes. If you set the node's `preview` property it will use it as the src for an image.
|
|
31
|
+
*/
|
|
32
|
+
loadFile: (file: TFile, insertId: TKey, editor: Editor) => Promise<T | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* This can be used to remove the loading node on errors.
|
|
35
|
+
*
|
|
36
|
+
* The default {@link FileLoaderHandler.onLoadError} uses {@link cleanupFileLoaderNodes} to remove the parent item node if possible, otherwise it turns the fileLoader node into a paragraph.
|
|
37
|
+
*/
|
|
38
|
+
onLoadError: (file: TFile, editor: Editor, pos: number | undefined, error: Error, loadingKey: TKey) => void;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* Where to insert the fileLoader node.
|
|
42
|
+
*
|
|
43
|
+
* The default @{@link FileLoaderHandler.insertPosition} returns the position after the closest parent item node. The idea being one inserts a new item node there with a loading file node inside.
|
|
44
|
+
*
|
|
45
|
+
* You can override this by returning a different position. If no position is returned, no node is inserted.
|
|
46
|
+
*/
|
|
47
|
+
insertPosition: (file: TFile, editor: Editor, pos?: number) => number | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Given a file, should insert a fileLoader node with the `loadingId` set to a unique key that the extension can then use to find the node again. It should return this key if it inserted the node.
|
|
50
|
+
*
|
|
51
|
+
* Using the file name is not a good idea as it's not guaranteed to be unique if the user inserts the same item twice.
|
|
52
|
+
*
|
|
53
|
+
* The default {@link FileLoaderHandler.insertLoadingNode} inserts a new item node with a fileLoader node inside after in the closest viable position after the insertPos. It uses a nanoid for the loading id.
|
|
54
|
+
*/
|
|
55
|
+
insertLoadingNode: (file: TFile, editor: Editor, insertPos: number, originalPos?: number) => TKey | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* After loading the file, if it's successful, this is passed the result and the position of the fileLoader node.
|
|
58
|
+
*
|
|
59
|
+
* Note that this position points at the node with those attributes, and not it's parent in the case of having inserted a wrapping node.
|
|
60
|
+
*
|
|
61
|
+
*
|
|
62
|
+
*/
|
|
63
|
+
replaceLoadingNode: (editor: Editor, pos: number, res: T, loadingKey: TKey) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Return the file (or whatever type you'd like) to allow the extension to handle it.
|
|
66
|
+
*
|
|
67
|
+
* If the function doesn't return anything, the file will be ignored.
|
|
68
|
+
* No fileLoader node will be created. The event will still be preventDefaulted.
|
|
69
|
+
*
|
|
70
|
+
* This can be used to filter out mime types you can't handle with a library like `mime`. Mime type filtering is not handled by the extension since it can be complicated.
|
|
71
|
+
*/
|
|
72
|
+
filterFile: (file: File) => TFile | undefined;
|
|
73
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NodeType } from "@tiptap/pm/model";
|
|
2
|
+
import type { Transaction } from "@tiptap/pm/state";
|
|
3
|
+
/** Like {@link cleanupFileLoaderNodes} but for single nodes when you already know the position. Returns true if it deleted a node. */
|
|
4
|
+
export declare function cleanupFileLoaderNode(tr: Transaction, pos: number, fileLoaderType: NodeType, wrappingTypes: NodeType[], replaceType: NodeType): boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { findUpwards } from "../../../utils/findUpwards.js";
|
|
2
|
+
export function cleanupFileLoaderNode(tr, pos, fileLoaderType, wrappingTypes, replaceType) {
|
|
3
|
+
const node = tr.doc.nodeAt(pos);
|
|
4
|
+
if (!node) return false;
|
|
5
|
+
if (node.type === fileLoaderType) {
|
|
6
|
+
let $parent;
|
|
7
|
+
findUpwards(tr.doc, pos, ($pos) => {
|
|
8
|
+
if (wrappingTypes.includes($pos.parent.type)) {
|
|
9
|
+
if ($pos.parent.childCount === 1) {
|
|
10
|
+
$parent = $pos;
|
|
11
|
+
} else {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
} else if ($parent) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
});
|
|
19
|
+
if ($parent) {
|
|
20
|
+
tr.delete($parent.start() - 1, $parent.end() + 1);
|
|
21
|
+
} else {
|
|
22
|
+
tr.replaceWith(pos, pos + node.nodeSize, replaceType.create());
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { NodeType, Schema } from "@tiptap/pm/model";
|
|
2
|
+
import type { Transaction } from "@tiptap/pm/state";
|
|
3
|
+
import { cleanupFileLoaderNode } from "./cleanupFileLoaderNode.js";
|
|
4
|
+
/**
|
|
5
|
+
* Removes all `fileLoader` nodes from the document.
|
|
6
|
+
*
|
|
7
|
+
* Searches up parent wrappers of the given `wrappingTypes`. If any exist and have no other children, they are removed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cleanupFileLoaderNodes(tr: Transaction, schema: Schema, fileLoaderTypeOrName: string | NodeType, wrappingTypesOrNames: (string | NodeType)[], replaceTypeOrName: string | NodeType, callback?: typeof cleanupFileLoaderNode): Transaction;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { unreachable } from "@alanscodelog/utils/unreachable";
|
|
2
|
+
import { getNodeType } from "@tiptap/core";
|
|
3
|
+
import { cleanupFileLoaderNode } from "./cleanupFileLoaderNode.js";
|
|
4
|
+
export function cleanupFileLoaderNodes(tr, schema, fileLoaderTypeOrName, wrappingTypesOrNames, replaceTypeOrName, callback = cleanupFileLoaderNode) {
|
|
5
|
+
const fileLoaderType = getNodeType(fileLoaderTypeOrName, schema);
|
|
6
|
+
const wrappingTypes = wrappingTypesOrNames.map((_) => getNodeType(_, schema));
|
|
7
|
+
const replaceType = getNodeType(replaceTypeOrName, schema);
|
|
8
|
+
const positions = [];
|
|
9
|
+
tr.doc.descendants((node, pos) => {
|
|
10
|
+
if (node.type === fileLoaderType) {
|
|
11
|
+
positions.push(pos);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
for (const pos of positions.reverse()) {
|
|
15
|
+
const mappedPos = tr.mapping.map(pos);
|
|
16
|
+
if (mappedPos !== pos) unreachable();
|
|
17
|
+
callback(tr, mappedPos, fileLoaderType, wrappingTypes, replaceType);
|
|
18
|
+
}
|
|
19
|
+
tr.setMeta("preventClearDocument", true);
|
|
20
|
+
tr.setMeta("addToHistory", false);
|
|
21
|
+
return tr;
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function findLoadingNodePos(state, loadingId) {
|
|
2
|
+
let replacePos;
|
|
3
|
+
state.doc.nodesBetween(0, state.doc.content.size - 1, (node, position) => {
|
|
4
|
+
if (node.attrs.loadingId === loadingId) {
|
|
5
|
+
replacePos = position;
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
return true;
|
|
9
|
+
});
|
|
10
|
+
return replacePos;
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function optionsCheck(editor, options) {
|
|
2
|
+
if (!options.handler) {
|
|
3
|
+
throw new Error("The FileLoader needs to be configered with a handler (see FileLoaderHandler).");
|
|
4
|
+
}
|
|
5
|
+
if ((!options.handler.insertLoadingNode || !options.handler.onLoadError || !options.handler?.insertPosition) && editor.state.schema.nodes.item === void 0) {
|
|
6
|
+
throw new Error("Could not find item node in schema. Add the block extensions or specify a custom `handler.insertLoadingNode` function for the FileLoader.");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function readAsDataUrl(file: File): Promise<string>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export async function readAsDataUrl(file) {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
const fileReader = new FileReader();
|
|
4
|
+
fileReader.readAsDataURL(file);
|
|
5
|
+
fileReader.onload = () => {
|
|
6
|
+
resolve(fileReader.result);
|
|
7
|
+
};
|
|
8
|
+
fileReader.onerror = (e) => {
|
|
9
|
+
reject(e);
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extends the tiptap hard break extension to set the linebreakReplacement option (which tiptap does not expose).
|
|
3
|
+
* This option tells prosemirror that when converting between blocks that can/can't show whitespace, it should use this node type to represent line breaks in node types that don't display them.
|
|
4
|
+
*/
|
|
5
|
+
export declare const HardBreak: import("@tiptap/core").Node<import("@tiptap/extension-hard-break", { with: { "resolution-mode": "require" } }).HardBreakOptions, any>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HardBreak as TipTapHardBreak } from "@tiptap/extension-hard-break";
|
|
2
|
+
export const HardBreak = TipTapHardBreak.extend({
|
|
3
|
+
extendNodeSchema(extension) {
|
|
4
|
+
if (extension.name === "hardBreak") {
|
|
5
|
+
return {
|
|
6
|
+
linebreakReplacement: true
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
return {};
|
|
10
|
+
},
|
|
11
|
+
addKeyboardShortcuts() {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Node } from "@tiptap/core";
|
|
2
|
+
import type { HeadingNodeOptions } from "./types.js";
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
heading: {
|
|
6
|
+
setHeading: (opts: {
|
|
7
|
+
level: HeadingNodeOptions["levels"][number];
|
|
8
|
+
onlyHeading: boolean;
|
|
9
|
+
}, pos?: number) => ReturnType;
|
|
10
|
+
toggleHeading: (opts: {
|
|
11
|
+
level: HeadingNodeOptions["levels"][number];
|
|
12
|
+
}) => ReturnType;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Like tiptap's Heading extension, but makes it easier to configure per-level html attributes.
|
|
18
|
+
*
|
|
19
|
+
* Also the setHeading command has an option to only change the heading level if the text is already a heading.
|
|
20
|
+
*
|
|
21
|
+
* This is useful for when you want to change the heading level of a heading that is already in the document.
|
|
22
|
+
*/
|
|
23
|
+
export declare const Heading: Node<HeadingNodeOptions<[1, 2, 3, 4, 5, 6]>, any>;
|
|
24
|
+
export type NodeHeadingName = "heading";
|