@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,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,31 @@
|
|
|
1
|
+
import type { Content, Editor, EditorOptions } from "@tiptap/core";
|
|
2
|
+
import { type ComputedRef, type Ref, type ShallowRef } from "vue";
|
|
3
|
+
import { type DocumentApiInterface, type MaybeEmbedId } from "../../DocumentApi/types.js.js";
|
|
4
|
+
/** Sets up nearly everything for the embedded editor nodeview. */
|
|
5
|
+
export declare function useEmbeddedEditor(embedIdRef: ComputedRef<MaybeEmbedId> | Ref<MaybeEmbedId>, editor: ShallowRef<Editor | undefined>, rootEditor: Editor,
|
|
6
|
+
/** For forwarding commands the embedded editor can't handle. See {@link Embedded}. */
|
|
7
|
+
getPos: () => number | undefined, { undoTimeouts, selfSymbol, onUndoWarning, onUndoOk, alwaysLoad, injectIsEmbedded, injectIsDeepEmbedded }?: {
|
|
8
|
+
undoTimeouts?: [number, number];
|
|
9
|
+
onUndoWarning?: ((ref: Ref<boolean>) => void);
|
|
10
|
+
onUndoOk?: ((ref: Ref<boolean>) => void);
|
|
11
|
+
selfSymbol?: symbol;
|
|
12
|
+
/** By default, documents will not be loaded if they are embedded too deeply or recursively embedded. Passing true will ignore all checks and load them anyways. This also usually requires disabling the injections with the `injectIsEmbedded` and `injectIsDeepEmbedded` options. */
|
|
13
|
+
alwaysLoad?: boolean;
|
|
14
|
+
/** By default, the composable injects the `isEmbedded*InjectionKey`s. Passing false will not inject them. */
|
|
15
|
+
injectIsEmbedded?: boolean;
|
|
16
|
+
/** By default, the composable injects `isDeepEmbeddedInjectionKey` with true if it is false. Passing false will not inject it. */
|
|
17
|
+
injectIsDeepEmbedded?: boolean;
|
|
18
|
+
}): {
|
|
19
|
+
content: Ref<Content | null>;
|
|
20
|
+
api: DocumentApiInterface;
|
|
21
|
+
selfSymbol: symbol;
|
|
22
|
+
isEmbeddedTooDeep: boolean;
|
|
23
|
+
isEmbeddedBlock?: Ref<boolean>;
|
|
24
|
+
isRecursivelyEmbedded: ComputedRef<boolean>;
|
|
25
|
+
showUndoWarning: Ref<boolean>;
|
|
26
|
+
/** If name is undefined, the embed is a new embed without a document id. */
|
|
27
|
+
name: ComputedRef<string | undefined>;
|
|
28
|
+
isLoading: Ref<boolean>;
|
|
29
|
+
/** The root editor needs to provide it's options so we can pass them to the embedded editor. If we don't, extra extensions (e.g. BaseShortcuts) and options won't be registered on the embedded editor. See the `embeddedEditorOptionsInjectionKey` for why `autofocus` is ommitted. */
|
|
30
|
+
editorOptions: Partial<Omit<EditorOptions, "autofocus">>;
|
|
31
|
+
};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { castType } from "@alanscodelog/utils/castType";
|
|
2
|
+
import { computed, inject, onBeforeUnmount, onMounted, provide, ref, watch } from "vue";
|
|
3
|
+
import { getDiffReplacementRange } from "../../../utils/getDiffReplacementRange.js";
|
|
4
|
+
import { documentApiInjectionKey } from "../../DocumentApi/types.js";
|
|
5
|
+
import { convertFullTransactionForPartialState } from "../../DocumentApi/utils/convertFullTransactionForPartialState.js";
|
|
6
|
+
import { getStateEmbedRange } from "../../DocumentApi/utils/getStateEmbedRange.js";
|
|
7
|
+
import { isEmbedId } from "../../DocumentApi/utils/isEmbedId.js";
|
|
8
|
+
import { Embedded } from "../Embedded.js";
|
|
9
|
+
import { embededEditorOptionsInjectionKey, isDeepEmbeddedInjectionKey, isEmbeddedBlockInjectionKey, isEmbeddedInjectionKey, parentEditorIdInjectionKey } from "../types.js";
|
|
10
|
+
function defaultOnUndoWarning(r, state, undoTimeouts = [50, 2e3]) {
|
|
11
|
+
clearTimeout(state.smallTimeout);
|
|
12
|
+
clearTimeout(state.timeout);
|
|
13
|
+
r.value = false;
|
|
14
|
+
if (state.justWarned) {
|
|
15
|
+
r.value = true;
|
|
16
|
+
}
|
|
17
|
+
state.justWarned = true;
|
|
18
|
+
state.smallTimeout = setTimeout(() => {
|
|
19
|
+
state.justWarned = false;
|
|
20
|
+
r.value = true;
|
|
21
|
+
clearTimeout(state.timeout);
|
|
22
|
+
state.timeout = setTimeout(() => {
|
|
23
|
+
r.value = false;
|
|
24
|
+
}, undoTimeouts[1]);
|
|
25
|
+
}, undoTimeouts[0]);
|
|
26
|
+
}
|
|
27
|
+
function defaultOnUndoOk(r, state) {
|
|
28
|
+
clearTimeout(state.smallTimeout);
|
|
29
|
+
clearTimeout(state.timeout);
|
|
30
|
+
r.value = false;
|
|
31
|
+
}
|
|
32
|
+
export function useEmbeddedEditor(embedIdRef, editor, rootEditor, getPos, {
|
|
33
|
+
undoTimeouts = [50, 2e3],
|
|
34
|
+
selfSymbol = Symbol(`embedded-editor`),
|
|
35
|
+
onUndoWarning,
|
|
36
|
+
onUndoOk,
|
|
37
|
+
alwaysLoad = false,
|
|
38
|
+
injectIsEmbedded = true,
|
|
39
|
+
injectIsDeepEmbedded = true
|
|
40
|
+
} = {}) {
|
|
41
|
+
const showUndoWarning = ref(false);
|
|
42
|
+
const content = ref(null);
|
|
43
|
+
const api = inject(documentApiInjectionKey);
|
|
44
|
+
if (!api) {
|
|
45
|
+
throw new Error("No embed api provided.");
|
|
46
|
+
}
|
|
47
|
+
const editorOptions = inject(embededEditorOptionsInjectionKey);
|
|
48
|
+
if (!editorOptions) {
|
|
49
|
+
throw new Error("No editor options provided.");
|
|
50
|
+
}
|
|
51
|
+
editorOptions.extensions = [
|
|
52
|
+
...(editorOptions.extensions ?? []).filter((ext) => ext.name !== Embedded.name),
|
|
53
|
+
Embedded.configure({
|
|
54
|
+
rootEditor,
|
|
55
|
+
getPos,
|
|
56
|
+
getEmbedId: () => embedIdRef.value
|
|
57
|
+
})
|
|
58
|
+
];
|
|
59
|
+
const isEmbeddedTooDeep = inject(isDeepEmbeddedInjectionKey, false);
|
|
60
|
+
if (injectIsDeepEmbedded && !isEmbeddedTooDeep) {
|
|
61
|
+
provide(isDeepEmbeddedInjectionKey, true);
|
|
62
|
+
}
|
|
63
|
+
const isEmbeddedBlock = computed(() => !!embedIdRef.value.blockId);
|
|
64
|
+
if (injectIsEmbedded) {
|
|
65
|
+
provide(isEmbeddedInjectionKey, true);
|
|
66
|
+
provide(isEmbeddedBlockInjectionKey, isEmbeddedBlock);
|
|
67
|
+
}
|
|
68
|
+
const parentId = inject(parentEditorIdInjectionKey, void 0);
|
|
69
|
+
const isRecursivelyEmbedded = computed(() => parentId?.value === embedIdRef.value.docId);
|
|
70
|
+
const isLoading = ref(false);
|
|
71
|
+
const name = computed(() => isEmbedId(embedIdRef.value) ? api.getEmbedTitle(embedIdRef.value) : void 0);
|
|
72
|
+
const warningState = {
|
|
73
|
+
smallTimeout: void 0,
|
|
74
|
+
timeout: void 0,
|
|
75
|
+
justWarned: false
|
|
76
|
+
};
|
|
77
|
+
function forwardDispatchToFullState(tr) {
|
|
78
|
+
castType(embedIdRef.value);
|
|
79
|
+
const stateBefore = api.getFromCache(embedIdRef.value);
|
|
80
|
+
if (!stateBefore) {
|
|
81
|
+
throw new Error("Expected stateBefore to exist.");
|
|
82
|
+
}
|
|
83
|
+
if (!tr) return;
|
|
84
|
+
const diff = getDiffReplacementRange(stateBefore.doc, tr.doc);
|
|
85
|
+
const { start, end } = getStateEmbedRange(tr.doc, embedIdRef.value);
|
|
86
|
+
if (diff && end !== void 0 && start !== void 0 && (diff.start < start || diff.end > end)) {
|
|
87
|
+
onUndoWarning ? onUndoWarning(showUndoWarning) : defaultOnUndoWarning(showUndoWarning, warningState, undoTimeouts);
|
|
88
|
+
} else {
|
|
89
|
+
onUndoOk ? onUndoOk(showUndoWarning) : defaultOnUndoOk(showUndoWarning, warningState);
|
|
90
|
+
}
|
|
91
|
+
tr.setMeta("no-step-convert", true);
|
|
92
|
+
tr.setMeta("no-schema-convert", true);
|
|
93
|
+
if (!embedIdRef.value.blockId) {
|
|
94
|
+
tr.setMeta("no-step-convert", true);
|
|
95
|
+
}
|
|
96
|
+
api.updateDocument?.(
|
|
97
|
+
embedIdRef.value,
|
|
98
|
+
tr,
|
|
99
|
+
void 0
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
function onTransaction({ transaction }) {
|
|
103
|
+
castType(embedIdRef.value);
|
|
104
|
+
if (!transaction.docChanged || transaction.getMeta("ignore")) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!embedIdRef.value.blockId) {
|
|
108
|
+
transaction.setMeta("no-step-convert", true);
|
|
109
|
+
}
|
|
110
|
+
api.updateDocument?.(
|
|
111
|
+
embedIdRef.value,
|
|
112
|
+
transaction,
|
|
113
|
+
selfSymbol
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
const onUpdateDocument = (incomingEmbedId, tr, _stateBefore, _incomingState, incomingSelfSymbol) => {
|
|
117
|
+
castType(embedIdRef.value);
|
|
118
|
+
if (incomingSelfSymbol === selfSymbol || embedIdRef.value.docId !== incomingEmbedId.docId || !tr.docChanged || tr.getMeta("ignore")) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (content.value) {
|
|
122
|
+
const convertedTr = convertFullTransactionForPartialState(
|
|
123
|
+
editor.value.state,
|
|
124
|
+
tr,
|
|
125
|
+
embedIdRef.value
|
|
126
|
+
);
|
|
127
|
+
if (convertedTr) {
|
|
128
|
+
if (!convertedTr.before.eq(editor.value.state.doc)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
editor.value.view.dispatch(convertedTr);
|
|
132
|
+
} else {
|
|
133
|
+
unloadDocument(embedIdRef.value, { partial: true });
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
void loadDocument(embedIdRef.value, { partial: true });
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
let attached = false;
|
|
140
|
+
async function loadDocument(embedId, { partial = false } = {}) {
|
|
141
|
+
if (!isEmbedId(embedId)) return;
|
|
142
|
+
if (!alwaysLoad && (isRecursivelyEmbedded.value || isEmbeddedTooDeep)) return;
|
|
143
|
+
if (!partial) {
|
|
144
|
+
isLoading.value = true;
|
|
145
|
+
await api.load(embedId);
|
|
146
|
+
}
|
|
147
|
+
const res = api.getEmbeddedContent?.(embedId);
|
|
148
|
+
if (!res) return;
|
|
149
|
+
if (!partial) {
|
|
150
|
+
api.addEventListener?.("update", onUpdateDocument);
|
|
151
|
+
}
|
|
152
|
+
content.value = res;
|
|
153
|
+
watch(editor, () => {
|
|
154
|
+
editor.value.commands.setHistoryRedirect(
|
|
155
|
+
() => api.getFromCache(embedId),
|
|
156
|
+
forwardDispatchToFullState
|
|
157
|
+
);
|
|
158
|
+
editor.value?.on("transaction", onTransaction);
|
|
159
|
+
isLoading.value = false;
|
|
160
|
+
attached = true;
|
|
161
|
+
}, { once: true });
|
|
162
|
+
}
|
|
163
|
+
function unloadDocument(embedId, { partial = false } = {}) {
|
|
164
|
+
if (!isEmbedId(embedId)) return;
|
|
165
|
+
if (!alwaysLoad && (isRecursivelyEmbedded.value || isEmbeddedTooDeep)) return;
|
|
166
|
+
editor.value?.off("transaction", onTransaction);
|
|
167
|
+
if (!partial && attached) {
|
|
168
|
+
api.removeEventListener?.("update", onUpdateDocument);
|
|
169
|
+
api.unload(embedId);
|
|
170
|
+
attached = false;
|
|
171
|
+
}
|
|
172
|
+
editor.value?.commands.setHistoryRedirect(void 0, void 0);
|
|
173
|
+
content.value = null;
|
|
174
|
+
}
|
|
175
|
+
watch(embedIdRef, (newVal, oldVal) => {
|
|
176
|
+
if (newVal.docId !== oldVal.docId || newVal.blockId !== oldVal.blockId) {
|
|
177
|
+
unloadDocument(oldVal);
|
|
178
|
+
void loadDocument(newVal);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
onMounted(async () => {
|
|
182
|
+
await loadDocument(embedIdRef.value);
|
|
183
|
+
});
|
|
184
|
+
onBeforeUnmount(() => {
|
|
185
|
+
unloadDocument(embedIdRef.value);
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
content,
|
|
189
|
+
api,
|
|
190
|
+
selfSymbol,
|
|
191
|
+
isEmbeddedTooDeep,
|
|
192
|
+
isEmbeddedBlock,
|
|
193
|
+
isRecursivelyEmbedded,
|
|
194
|
+
showUndoWarning,
|
|
195
|
+
name,
|
|
196
|
+
isLoading,
|
|
197
|
+
editorOptions
|
|
198
|
+
};
|
|
199
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Dispatch, Editor, EditorOptions } from "@tiptap/core";
|
|
2
|
+
import type { ComputedRef, InjectionKey, Ref } from "vue";
|
|
3
|
+
import type { MaybeEmbedId } from "../DocumentApi/types.js.js";
|
|
4
|
+
export interface EmbeddedDocumentNodeOptions extends WithOnTriggerByEmbeddedBlockOptions {
|
|
5
|
+
rootEditor: Editor;
|
|
6
|
+
/** Provided by the embedded node view. */
|
|
7
|
+
getPos: () => number | undefined;
|
|
8
|
+
getEmbedId: () => MaybeEmbedId;
|
|
9
|
+
}
|
|
10
|
+
/** Tells the editor and embedded doc view whether it's deeply embedded (more than one level) or not. */
|
|
11
|
+
export declare const isDeepEmbeddedInjectionKey: InjectionKey<boolean>;
|
|
12
|
+
/** Tells the editor and embedded doc view whether it's embedded or not. */
|
|
13
|
+
export declare const isEmbeddedInjectionKey: InjectionKey<boolean>;
|
|
14
|
+
export declare const isEmbeddedBlockInjectionKey: InjectionKey<ComputedRef<boolean> | Ref<boolean>>;
|
|
15
|
+
/** Injects the editor component to use for embedded editors. */
|
|
16
|
+
export declare const embeddedEditorComponentInjectionKey: InjectionKey<new (...args: any) => {
|
|
17
|
+
editor?: Editor;
|
|
18
|
+
}>;
|
|
19
|
+
/** Injects the parent editor id so the embedded editor can know who is embedding it (to track recursive/disallowed embeds). */
|
|
20
|
+
export declare const parentEditorIdInjectionKey: InjectionKey<Ref<string | undefined>>;
|
|
21
|
+
/**
|
|
22
|
+
* Injects the editor options so the embedded editor can use the same ones as it's parent.
|
|
23
|
+
*
|
|
24
|
+
* Note that autofocus is always disabled for embedded editors, hence it's omission.
|
|
25
|
+
*/
|
|
26
|
+
export declare const embededEditorOptionsInjectionKey: InjectionKey<Partial<Omit<EditorOptions, "autofocus">>>;
|
|
27
|
+
export type WithOnTriggerByEmbeddedBlockOptions = {
|
|
28
|
+
/**
|
|
29
|
+
* When the editor is embedded and it's embedding a single block, certain commands are nullified and just return true and do nothing because they would break the embedding (e.g. enter, split, indent, etc).
|
|
30
|
+
*
|
|
31
|
+
* All such commands forward to the `embeddedCommandRedirect` command if it's available (otherwise a warning is logged). The `Embedded` extension takes care of registering this redirect and can redirect some of the commands to the root editor, but not all of them.
|
|
32
|
+
*
|
|
33
|
+
* You can use this function to handle the redirection yourself. You will get passed both editor instances (root and embedded) to facilitate communication. If you can handle the command, you should return a boolean as with a regular command. Otherwise you can return undefined to let the default handler take care of it.
|
|
34
|
+
*
|
|
35
|
+
* Note that if the change moves the node, the component will get remounted and the embedded editor will no longer exist (to, for example, focus it).
|
|
36
|
+
*
|
|
37
|
+
* The included EmbeddedNodeView takes care of auto-focusing when the selection matches it's position. So as a workaround for focus at least, you can use `tr.setNodeSelection(nodePos + offset)`. Note the use of `offset`. The node's position will have probably changed depending on the command so you will need to know how much to offset it or have some way to find it's position again. While the embedId is provided, it's not guaranteed there is only one node embedding that id, there might be multiple. A better way is to first find the parent embedding item id before executing your command, note the `blockId`, then use it to find the node again.
|
|
38
|
+
*
|
|
39
|
+
* See {@link redirectFromEmbedded} for creating redirectable commands.
|
|
40
|
+
*/
|
|
41
|
+
embeddedBlockCommandRedirect?: (commandName: string, args: any, context: {
|
|
42
|
+
editor: Editor;
|
|
43
|
+
rootEditor: Editor;
|
|
44
|
+
nodePos: number | undefined;
|
|
45
|
+
embedId: MaybeEmbedId;
|
|
46
|
+
dispatch: Dispatch;
|
|
47
|
+
}) => boolean | undefined;
|
|
48
|
+
};
|
|
49
|
+
export type OnTriggerByEmbeddedBlock = WithOnTriggerByEmbeddedBlockOptions["embeddedBlockCommandRedirect"];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const isDeepEmbeddedInjectionKey = Symbol("isEmbeddedInjectionKey");
|
|
2
|
+
export const isEmbeddedInjectionKey = Symbol("isEmbeddedInjectionKey");
|
|
3
|
+
export const isEmbeddedBlockInjectionKey = Symbol("isEmbeddedBlockInjectionKey");
|
|
4
|
+
export const embeddedEditorComponentInjectionKey = Symbol("embeddedEditorComponentInjectionKey");
|
|
5
|
+
export const parentEditorIdInjectionKey = Symbol("parentEditorIdInjectionKey");
|
|
6
|
+
export const embededEditorOptionsInjectionKey = Symbol("embededEditorOptionsInjectionKey");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EditorView } from "@tiptap/pm/view";
|
|
2
|
+
/**
|
|
3
|
+
* Returns whether the current view is a block embed embedded in another view.
|
|
4
|
+
*
|
|
5
|
+
* This is done by checking if the immediate parent has the class `editor-is-embedded-block` which the editor component adds when it receives the {@link isEmbeddedBlockInjectionKey} injection key.
|
|
6
|
+
*
|
|
7
|
+
* We cannot do this via state since a document can be both embedded and not embedded at the same time.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isEmbeddedBlock(view: EditorView): boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SingleCommands } from "@tiptap/core";
|
|
2
|
+
import type { EditorView } from "@tiptap/pm/view";
|
|
3
|
+
/**
|
|
4
|
+
* Commands that can split a block or modify it's position (indent/unindent) should not be called when the editor is in embedded block mode.
|
|
5
|
+
*
|
|
6
|
+
* This takes care of redirecting the command if possible (see {@link WithOnTriggerByEmbeddedBlockOptions.onTriggerByEmbeddedBlock}), otherwise it logs a warning.
|
|
7
|
+
*
|
|
8
|
+
* If the command should not be called at all and offers no redirect, don't pass the redirect parameter and it will log a different warning.
|
|
9
|
+
*
|
|
10
|
+
* You can use it in a command like this:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* commandName: (arg:any) => ({ commands, view, dispatch }) => {
|
|
14
|
+
* const redirect = isEmbeddedBlock(view, "commandName", { args:[arg], view, commands, dispatch }))
|
|
15
|
+
* if (redirect.redirected) { return redirect.result }
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function redirectFromEmbedded(view: EditorView, name: string, redirect?: {
|
|
20
|
+
args: any[];
|
|
21
|
+
view: EditorView;
|
|
22
|
+
commands: SingleCommands;
|
|
23
|
+
}): {
|
|
24
|
+
redirected: true;
|
|
25
|
+
result: any;
|
|
26
|
+
} | {
|
|
27
|
+
redirected: false;
|
|
28
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { isEmbeddedBlock } from "./isEmbeddedBlock.js";
|
|
2
|
+
export function redirectFromEmbedded(view, name, redirect) {
|
|
3
|
+
if (isEmbeddedBlock(view)) {
|
|
4
|
+
if (redirect && "embeddedCommandRedirect" in redirect.commands) {
|
|
5
|
+
const result = redirect.commands.embeddedCommandRedirect(
|
|
6
|
+
name,
|
|
7
|
+
redirect.args
|
|
8
|
+
);
|
|
9
|
+
return { redirected: true, result };
|
|
10
|
+
}
|
|
11
|
+
console.warn(
|
|
12
|
+
redirect ? `Command ${name} called from an embedded editor. This command supports command redirection, but no "embeddedCommandRedirect" command found. Command ignored (returning true to prevent further action).` : `Command ${name} should not be called from an embedded editor. Command ignored (returning true to prevent further action).`
|
|
13
|
+
);
|
|
14
|
+
return { redirected: true, result: true };
|
|
15
|
+
}
|
|
16
|
+
return { redirected: false };
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Node } from "@tiptap/core";
|
|
2
|
+
import type { FileLoaderExtensionOptions } from "./types.js.js";
|
|
3
|
+
/**
|
|
4
|
+
* Provides a way to asynchronously load files into the editor and a node to display while they are loading.
|
|
5
|
+
*
|
|
6
|
+
* An {@link IFileLoaderHandler} interface should be passed to describe what to do with the file at each step. There is a default implementation at {@link FileLoaderHandler} that tries to handler as much as possible. See it for details.
|
|
7
|
+
*
|
|
8
|
+
* It also automatically removes fileLoader nodes when the document is loaded. You can disable this with the `cleanupOnLoad` option.
|
|
9
|
+
*
|
|
10
|
+
* To force the plugin to cleanup after the first load you can do `tr.setMeta("cleanFileLoaders")`.
|
|
11
|
+
*
|
|
12
|
+
* A basic node view that can preview images is provided but not configured.
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export declare const FileLoader: Node<FileLoaderExtensionOptions, any>;
|
|
16
|
+
export type NodeFileLoaderName = "fileLoader";
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { mergeAttributes, Node } from "@tiptap/core";
|
|
2
|
+
import { insertFile } from "./commands/insertFile.js";
|
|
3
|
+
import { fileLoaderPlugin } from "./plugins/fileLoaderPlugin.js";
|
|
4
|
+
import { optionsCheck } from "./utils/optionsCheck.js";
|
|
5
|
+
import { isValidId } from "../Blocks/utils/isValidId.js";
|
|
6
|
+
export const FileLoader = Node.create({
|
|
7
|
+
name: "fileLoader",
|
|
8
|
+
content: "",
|
|
9
|
+
marks: "",
|
|
10
|
+
group: "block",
|
|
11
|
+
addOptions() {
|
|
12
|
+
return {
|
|
13
|
+
cleanupOnLoad: true,
|
|
14
|
+
onDrop: void 0,
|
|
15
|
+
onPaste: void 0,
|
|
16
|
+
// there are checks on init to throw if the user didn't configure a handler
|
|
17
|
+
handler: void 0,
|
|
18
|
+
embeddedBlockCommandRedirect: void 0,
|
|
19
|
+
HTMLAttributes: {
|
|
20
|
+
class: `
|
|
21
|
+
rounded-sm
|
|
22
|
+
animate-pulse
|
|
23
|
+
bg-accent-200
|
|
24
|
+
text-accent-800
|
|
25
|
+
dark:bg-accent-700
|
|
26
|
+
dark:text-accent-300
|
|
27
|
+
px-2
|
|
28
|
+
`
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
addAttributes() {
|
|
33
|
+
return {
|
|
34
|
+
HTMLAttributes: {
|
|
35
|
+
default: {}
|
|
36
|
+
},
|
|
37
|
+
/** For the optional FileLoaderNodeView. */
|
|
38
|
+
preview: {
|
|
39
|
+
default: void 0
|
|
40
|
+
},
|
|
41
|
+
fileName: {
|
|
42
|
+
default: void 0
|
|
43
|
+
},
|
|
44
|
+
loading: {
|
|
45
|
+
default: true
|
|
46
|
+
},
|
|
47
|
+
loadingId: {
|
|
48
|
+
default: void 0
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
parseHTML() {
|
|
53
|
+
return [
|
|
54
|
+
{
|
|
55
|
+
tag: `div[type=${this.name}]`,
|
|
56
|
+
getAttrs: (dom) => {
|
|
57
|
+
const fileName = dom.getAttribute("file-name");
|
|
58
|
+
const loading = dom.getAttribute("file-loading");
|
|
59
|
+
const loadingId = dom.getAttribute("file-loading-id");
|
|
60
|
+
return {
|
|
61
|
+
fileName,
|
|
62
|
+
loadingId: isValidId(loadingId, 10) ? loadingId : void 0,
|
|
63
|
+
loading: loading === "true"
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
},
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
70
|
+
renderHTML({ node, HTMLAttributes }) {
|
|
71
|
+
return [
|
|
72
|
+
"div",
|
|
73
|
+
mergeAttributes(
|
|
74
|
+
this.options.HTMLAttributes,
|
|
75
|
+
HTMLAttributes,
|
|
76
|
+
{
|
|
77
|
+
"file-loading-id": node.attrs.loadingId,
|
|
78
|
+
"file-name": node.attrs.fileName,
|
|
79
|
+
"file-loading": node.attrs.loading,
|
|
80
|
+
type: this.name
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
`Loading "${node.attrs.fileName ?? "Unknown"}" ...`
|
|
84
|
+
];
|
|
85
|
+
},
|
|
86
|
+
addCommands() {
|
|
87
|
+
optionsCheck(this.editor, this.options);
|
|
88
|
+
const self = this;
|
|
89
|
+
return {
|
|
90
|
+
insertFile: insertFile(self.options.handler)
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
addProseMirrorPlugins() {
|
|
94
|
+
const self = this;
|
|
95
|
+
return [
|
|
96
|
+
fileLoaderPlugin(self.editor, self.options)
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { MakeOptional } from "@alanscodelog/utils/types";
|
|
2
|
+
import type { Editor } from "@tiptap/core";
|
|
3
|
+
import type { IFileLoaderHandler } from "../types.js.js";
|
|
4
|
+
/**
|
|
5
|
+
* A partial implementation of {@link IFileLoaderHandler}.
|
|
6
|
+
*
|
|
7
|
+
* Using the defaults of this class, you only need to specify the handler's `loadFile` and `replaceLoadingNode` properties.
|
|
8
|
+
*
|
|
9
|
+
* It assumes the use of the {@link Item} extension since it uses the node to wrap the fileLoader node.
|
|
10
|
+
*
|
|
11
|
+
* To identify each fileLoader node and fetch it again once the file is loaded, it uses a 10 character nanoid.
|
|
12
|
+
*/
|
|
13
|
+
export declare class FileLoaderHandler<TFile extends File, T = {
|
|
14
|
+
file: TFile;
|
|
15
|
+
result: string | ArrayBuffer | null;
|
|
16
|
+
}, TKey = string> implements IFileLoaderHandler<TFile, T, TKey> {
|
|
17
|
+
loadFile: IFileLoaderHandler<TFile, T, TKey>["loadFile"];
|
|
18
|
+
onLoadError: IFileLoaderHandler<TFile, T, TKey>["onLoadError"];
|
|
19
|
+
insertPosition: IFileLoaderHandler<TFile, T, TKey>["insertPosition"];
|
|
20
|
+
insertLoadingNode: IFileLoaderHandler<TFile, T, TKey>["insertLoadingNode"];
|
|
21
|
+
replaceLoadingNode: IFileLoaderHandler<TFile, T, TKey>["replaceLoadingNode"];
|
|
22
|
+
filterFile: IFileLoaderHandler<TFile, T, TKey>["filterFile"];
|
|
23
|
+
constructor(opts: MakeOptional<IFileLoaderHandler<TFile, T, TKey>, "onLoadError" | "insertPosition" | "insertLoadingNode">);
|
|
24
|
+
defaultFilterFile(file: File): TFile | undefined;
|
|
25
|
+
defaultInsertPosition(_file: TFile, editor: Editor, pos?: number): number | undefined;
|
|
26
|
+
defaultOnLoadError(_file: TFile, editor: Editor, pos: number | undefined): void;
|
|
27
|
+
defaultInsertLoadingNode(file: TFile, editor: Editor, insertPos: number): TKey;
|
|
28
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { unreachable } from "@alanscodelog/utils/unreachable";
|
|
2
|
+
import { nanoid } from "nanoid";
|
|
3
|
+
import { findUpwards } from "../../../utils/findUpwards.js";
|
|
4
|
+
import { cleanupFileLoaderNode } from "../utils/cleanupFileLoaderNode.js";
|
|
5
|
+
export class FileLoaderHandler {
|
|
6
|
+
loadFile;
|
|
7
|
+
onLoadError;
|
|
8
|
+
insertPosition;
|
|
9
|
+
insertLoadingNode;
|
|
10
|
+
replaceLoadingNode;
|
|
11
|
+
filterFile;
|
|
12
|
+
constructor(opts) {
|
|
13
|
+
this.loadFile = opts.loadFile;
|
|
14
|
+
this.replaceLoadingNode = opts.replaceLoadingNode;
|
|
15
|
+
if (opts.onLoadError) this.onLoadError = opts.onLoadError;
|
|
16
|
+
else this.onLoadError = this.defaultOnLoadError;
|
|
17
|
+
if (opts.insertPosition) this.insertPosition = opts.insertPosition;
|
|
18
|
+
else this.insertPosition = this.defaultInsertPosition;
|
|
19
|
+
if (opts.insertLoadingNode) this.insertLoadingNode = opts.insertLoadingNode;
|
|
20
|
+
else this.insertLoadingNode = this.defaultInsertLoadingNode;
|
|
21
|
+
if (opts.filterFile) this.filterFile = opts.filterFile;
|
|
22
|
+
else this.filterFile = this.defaultFilterFile;
|
|
23
|
+
}
|
|
24
|
+
defaultFilterFile(file) {
|
|
25
|
+
return file;
|
|
26
|
+
}
|
|
27
|
+
defaultInsertPosition(_file, editor, pos) {
|
|
28
|
+
const position = pos ?? editor.state.selection.anchor;
|
|
29
|
+
const $insertionNode = findUpwards(editor.state.doc, position, ($node) => {
|
|
30
|
+
if ($node.node().type.name === "item") {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}).$pos;
|
|
35
|
+
return $insertionNode ? $insertionNode.end() + 1 : void 0;
|
|
36
|
+
}
|
|
37
|
+
defaultOnLoadError(_file, editor, pos) {
|
|
38
|
+
if (pos === void 0) unreachable();
|
|
39
|
+
editor.commands.command(({ tr }) => {
|
|
40
|
+
cleanupFileLoaderNode(
|
|
41
|
+
tr,
|
|
42
|
+
pos,
|
|
43
|
+
editor.schema.nodes.fileLoader,
|
|
44
|
+
[
|
|
45
|
+
editor.state.schema.nodes.item,
|
|
46
|
+
editor.state.schema.nodes.list
|
|
47
|
+
],
|
|
48
|
+
editor.schema.nodes.paragraph
|
|
49
|
+
);
|
|
50
|
+
return true;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
defaultInsertLoadingNode(file, editor, insertPos) {
|
|
54
|
+
const attrs = {
|
|
55
|
+
loadingId: nanoid(10),
|
|
56
|
+
fileName: file.name,
|
|
57
|
+
loading: true
|
|
58
|
+
};
|
|
59
|
+
editor.commands.command(({ tr }) => {
|
|
60
|
+
const pm = editor.schema.nodes;
|
|
61
|
+
tr.insert(insertPos, pm.item.create(
|
|
62
|
+
{},
|
|
63
|
+
pm.fileLoader.create(attrs)
|
|
64
|
+
));
|
|
65
|
+
return true;
|
|
66
|
+
});
|
|
67
|
+
return attrs.loadingId;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FileLoaderHandler } from "./FileLoaderHandler.js.js";
|
|
2
|
+
export declare const testFileLoaderDelay = 2000;
|
|
3
|
+
/** Instance of {@link FileLoaderHandler} for testing. */
|
|
4
|
+
export declare const TestFileLoaderHandler: FileLoaderHandler<File & {
|
|
5
|
+
parsedMime: string;
|
|
6
|
+
}, {
|
|
7
|
+
file: File & {
|
|
8
|
+
parsedMime: string;
|
|
9
|
+
};
|
|
10
|
+
result: string | ArrayBuffer | null;
|
|
11
|
+
}, string>;
|