@witchcraft/editor 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/@tiptap/core/index.d.ts +3 -0
- package/README.md +111 -0
- package/dist/module.d.mts +15 -0
- package/dist/module.json +9 -0
- package/dist/module.mjs +68 -0
- 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 +17 -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 +85 -0
- package/dist/runtime/pm/features/DocumentApi/DocumentApi.js +161 -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 +171 -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 +172 -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 +82 -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 +114 -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 +107 -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 +57 -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 +166 -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 +32 -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 +1 -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 +3 -0
- package/package.json +238 -0
- package/src/module.ts +101 -0
- package/src/runtime/assets/base.css +83 -0
- package/src/runtime/assets/handle-arrow.svg +16 -0
- package/src/runtime/assets/handle-border-circles-single.svg +44 -0
- package/src/runtime/assets/handle-border-circles.svg +27 -0
- package/src/runtime/assets/handle-temp.svg +1 -0
- package/src/runtime/assets/utils.css +9 -0
- package/src/runtime/components/CodeBlockThemePicker.vue +125 -0
- package/src/runtime/components/Commands.vue +67 -0
- package/src/runtime/components/Editor.vue +330 -0
- package/src/runtime/components/EditorDemoApp.vue +118 -0
- package/src/runtime/components/EditorDemoControls.vue +38 -0
- package/src/runtime/components/TestWrapper.vue +74 -0
- package/src/runtime/composables/useEditor.ts +29 -0
- package/src/runtime/composables/useWindowDebugging.ts +20 -0
- package/src/runtime/demo/App.vue +114 -0
- package/src/runtime/demo/README.md +1 -0
- package/src/runtime/demo/main.ts +8 -0
- package/src/runtime/demo/tailwind.css +4 -0
- package/src/runtime/env.d.ts +2 -0
- package/src/runtime/injectionKeys.ts +10 -0
- package/src/runtime/main.lib.ts +2 -0
- package/src/runtime/pm/commands/backspace.ts +44 -0
- package/src/runtime/pm/commands/changeAttrs.ts +37 -0
- package/src/runtime/pm/commands/deleteSelection.ts +22 -0
- package/src/runtime/pm/commands/enter.ts +27 -0
- package/src/runtime/pm/commands/insertBreak.ts +40 -0
- package/src/runtime/pm/features/Base/Base.ts +39 -0
- package/src/runtime/pm/features/Base/commands/deleteNodes.ts +54 -0
- package/src/runtime/pm/features/Base/commands/setCursorVisible.ts +24 -0
- package/src/runtime/pm/features/Base/plugins/debugSelectionPlugin.ts +57 -0
- package/src/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.ts +28 -0
- package/src/runtime/pm/features/Base/plugins/isUsingTouchPlugin.ts +40 -0
- package/src/runtime/pm/features/Base/plugins/selectingIndicator.ts +38 -0
- package/src/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.ts +107 -0
- package/src/runtime/pm/features/Base/types.ts +3 -0
- package/src/runtime/pm/features/BaseShortcuts/BaseShortcuts.ts +39 -0
- package/src/runtime/pm/features/Blockquote/Blockquote.ts +75 -0
- package/src/runtime/pm/features/Blockquote/commands/blockquoteEnter.ts +51 -0
- package/src/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.ts +26 -0
- package/src/runtime/pm/features/Blocks/Blocks.ts +3 -0
- package/src/runtime/pm/features/Blocks/Item.ts +176 -0
- package/src/runtime/pm/features/Blocks/List.ts +67 -0
- package/src/runtime/pm/features/Blocks/commands/changeItemType.ts +64 -0
- package/src/runtime/pm/features/Blocks/commands/changeTypeAttr.ts +47 -0
- package/src/runtime/pm/features/Blocks/commands/copyOrMoveItem.ts +179 -0
- package/src/runtime/pm/features/Blocks/commands/deleteItem.ts +24 -0
- package/src/runtime/pm/features/Blocks/commands/indentItem.ts +105 -0
- package/src/runtime/pm/features/Blocks/commands/itemMenuCommands.ts +62 -0
- package/src/runtime/pm/features/Blocks/commands/moveItem.ts +128 -0
- package/src/runtime/pm/features/Blocks/commands/setNode.ts +186 -0
- package/src/runtime/pm/features/Blocks/commands/splitItem.ts +116 -0
- package/src/runtime/pm/features/Blocks/commands/unindentItem.ts +82 -0
- package/src/runtime/pm/features/Blocks/components/DragTreeHandle.vue +142 -0
- package/src/runtime/pm/features/Blocks/components/ItemMenu.vue +88 -0
- package/src/runtime/pm/features/Blocks/components/ItemNodeView.vue +394 -0
- package/src/runtime/pm/features/Blocks/components/defaultItemMenu.ts +45 -0
- package/src/runtime/pm/features/Blocks/composables/useDragWithThreshold.ts +0 -0
- package/src/runtime/pm/features/Blocks/composables/useHandleHeight.ts +28 -0
- package/src/runtime/pm/features/Blocks/composables/useHasChildren.ts +14 -0
- package/src/runtime/pm/features/Blocks/composables/useNodeStates.ts +29 -0
- package/src/runtime/pm/features/Blocks/itemMenuMenuItems.ts +143 -0
- package/src/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.ts +52 -0
- package/src/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.ts +40 -0
- package/src/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.ts +32 -0
- package/src/runtime/pm/features/Blocks/plugins/itemMenuPlugin.ts +21 -0
- package/src/runtime/pm/features/Blocks/states/stateful.ts +41 -0
- package/src/runtime/pm/features/Blocks/states/task/cancelled.svg +32 -0
- package/src/runtime/pm/features/Blocks/states/task/checked.svg +27 -0
- package/src/runtime/pm/features/Blocks/states/task/checked2.svg +24 -0
- package/src/runtime/pm/features/Blocks/states/task/partial.svg +24 -0
- package/src/runtime/pm/features/Blocks/states/task/partial2.svg +31 -0
- package/src/runtime/pm/features/Blocks/states/task/unchecked.svg +20 -0
- package/src/runtime/pm/features/Blocks/types.ts +51 -0
- package/src/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.ts +47 -0
- package/src/runtime/pm/features/Blocks/utils/fixBlockIds.ts +28 -0
- package/src/runtime/pm/features/Blocks/utils/isValidId.ts +8 -0
- package/src/runtime/pm/features/CodeBlock/CodeBlock.ts +104 -0
- package/src/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +63 -0
- package/src/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.ts +55 -0
- package/src/runtime/pm/features/CodeBlock/commands/codeBlockIndent.ts +67 -0
- package/src/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.ts +74 -0
- package/src/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.ts +44 -0
- package/src/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +126 -0
- package/src/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.ts +185 -0
- package/src/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.ts +150 -0
- package/src/runtime/pm/features/CodeBlock/highlightJsInfo.ts +733 -0
- package/src/runtime/pm/features/CodeBlock/types.ts +7 -0
- package/src/runtime/pm/features/Collaboration/Collaboration.ts +295 -0
- package/src/runtime/pm/features/CommandsMenus/CommandBar.ts +130 -0
- package/src/runtime/pm/features/CommandsMenus/commandBarMenuItems.ts +209 -0
- package/src/runtime/pm/features/CommandsMenus/components/CommandBar.vue +63 -0
- package/src/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +48 -0
- package/src/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +59 -0
- package/src/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +67 -0
- package/src/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +60 -0
- package/src/runtime/pm/features/CommandsMenus/components/TextIcon.vue +14 -0
- package/src/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +51 -0
- package/src/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +5 -0
- package/src/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +5 -0
- package/src/runtime/pm/features/CommandsMenus/types.ts +73 -0
- package/src/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.ts +22 -0
- package/src/runtime/pm/features/CommandsMenus/utils/findCommand.ts +37 -0
- package/src/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.ts +14 -0
- package/src/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.ts +16 -0
- package/src/runtime/pm/features/Document/Document.ts +9 -0
- package/src/runtime/pm/features/DocumentApi/DocumentApi.ts +272 -0
- package/src/runtime/pm/features/DocumentApi/composables/useEditorContent.ts +105 -0
- package/src/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.ts +95 -0
- package/src/runtime/pm/features/DocumentApi/types.ts +143 -0
- package/src/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.ts +54 -0
- package/src/runtime/pm/features/DocumentApi/utils/convertTrForInstance.ts +24 -0
- package/src/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.ts +39 -0
- package/src/runtime/pm/features/DocumentApi/utils/copyMeta.ts +8 -0
- package/src/runtime/pm/features/DocumentApi/utils/getEmbedJson.ts +16 -0
- package/src/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.ts +15 -0
- package/src/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.ts +26 -0
- package/src/runtime/pm/features/DocumentApi/utils/isEmbedId.ts +5 -0
- package/src/runtime/pm/features/EmbeddedDocument/Embedded.ts +110 -0
- package/src/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.ts +102 -0
- package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +188 -0
- package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +187 -0
- package/src/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.ts +302 -0
- package/src/runtime/pm/features/EmbeddedDocument/types.ts +61 -0
- package/src/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.ts +12 -0
- package/src/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.ts +48 -0
- package/src/runtime/pm/features/FileLoader/FileLoader.ts +120 -0
- package/src/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.ts +100 -0
- package/src/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.ts +61 -0
- package/src/runtime/pm/features/FileLoader/commands/insertFile.ts +87 -0
- package/src/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +38 -0
- package/src/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.ts +70 -0
- package/src/runtime/pm/features/FileLoader/types.ts +91 -0
- package/src/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.ts +39 -0
- package/src/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.ts +42 -0
- package/src/runtime/pm/features/FileLoader/utils/findLoadingNodePos.ts +16 -0
- package/src/runtime/pm/features/FileLoader/utils/optionsCheck.ts +16 -0
- package/src/runtime/pm/features/FileLoader/utils/readAsDataUrl.ts +12 -0
- package/src/runtime/pm/features/HardBreak/HardBreak.ts +21 -0
- package/src/runtime/pm/features/Heading/Heading.ts +130 -0
- package/src/runtime/pm/features/Heading/commands/changeLevelAttr.ts +55 -0
- package/src/runtime/pm/features/Heading/types.ts +17 -0
- package/src/runtime/pm/features/Highlight/Highlight.ts +234 -0
- package/src/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +3 -0
- package/src/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +5 -0
- package/src/runtime/pm/features/Highlight/types.ts +25 -0
- package/src/runtime/pm/features/History/History.ts +112 -0
- package/src/runtime/pm/features/Iframe/Iframe.ts +163 -0
- package/src/runtime/pm/features/Iframe/IframeParsers.ts +116 -0
- package/src/runtime/pm/features/Iframe/components/IframeNodeView.vue +83 -0
- package/src/runtime/pm/features/Iframe/types.ts +7 -0
- package/src/runtime/pm/features/Image/Image.ts +16 -0
- package/src/runtime/pm/features/Link/Link.ts +313 -0
- package/src/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +125 -0
- package/src/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +130 -0
- package/src/runtime/pm/features/Link/components/BubbleMenuLink.vue +149 -0
- package/src/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +65 -0
- package/src/runtime/pm/features/Link/types.ts +53 -0
- package/src/runtime/pm/features/Menus/Menus.ts +195 -0
- package/src/runtime/pm/features/Menus/components/MarkMenuManager.vue +203 -0
- package/src/runtime/pm/features/Menus/types.ts +64 -0
- package/src/runtime/pm/features/Menus/utils/isMarkMenu.ts +5 -0
- package/src/runtime/pm/features/Tables/commands/tableEnter.ts +40 -0
- package/src/runtime/pm/features/Tables/index.ts +60 -0
- package/src/runtime/pm/schema.ts +128 -0
- package/src/runtime/pm/testSchema.ts +34 -0
- package/src/runtime/pm/utils/createDropIndicator.ts +61 -0
- package/src/runtime/pm/utils/createStateOnlyPluginApply.ts +11 -0
- package/src/runtime/pm/utils/createStateOnlyPluginObjApply.ts +16 -0
- package/src/runtime/pm/utils/dropPointInfo.ts +85 -0
- package/src/runtime/pm/utils/findUpwards.ts +43 -0
- package/src/runtime/pm/utils/getChildChunks.ts +24 -0
- package/src/runtime/pm/utils/getDiffReplacementRange.ts +32 -0
- package/src/runtime/pm/utils/getElMaxVisualSize.ts +14 -0
- package/src/runtime/pm/utils/getElPropertyAsInt.ts +8 -0
- package/src/runtime/pm/utils/getGroupNodeNames.ts +9 -0
- package/src/runtime/pm/utils/getMarkPosition.ts +57 -0
- package/src/runtime/pm/utils/getMarksInSelection.ts +19 -0
- package/src/runtime/pm/utils/getTypeByName.ts +7 -0
- package/src/runtime/pm/utils/index.ts +17 -0
- package/src/runtime/pm/utils/internal/createNodeTypesList.ts +25 -0
- package/src/runtime/pm/utils/internal/debugMap.ts +36 -0
- package/src/runtime/pm/utils/internal/debugNode.ts +38 -0
- package/src/runtime/pm/utils/internal/debugSel.ts +10 -0
- package/src/runtime/pm/utils/internal/recurse.ts +44 -0
- package/src/runtime/pm/utils/internal/stripBlockId.ts +10 -0
- package/src/runtime/pm/utils/mapSelection.ts +21 -0
- package/src/runtime/pm/utils/nodesBetween.ts +47 -0
- package/src/runtime/pm/utils/pointToPmPoint.ts +5 -0
- package/src/runtime/pm/utils/splitIntoChunks.ts +68 -0
- package/src/runtime/testDocuments.ts +130 -0
- package/src/runtime/types/index.ts +56 -0
|
@@ -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.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.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.js";
|
|
3
|
+
import type { WithOnTriggerByEmbeddedBlockOptions } from "../EmbeddedDocument/types.js.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.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.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";
|