@witchcraft/editor 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.d.cts +2 -0
- package/dist/module.d.mts +2 -15
- package/dist/module.json +1 -1
- package/dist/module.mjs +13 -72
- package/dist/types.d.mts +12 -2
- package/package.json +228 -237
- package/src/module.ts +1 -2
- package/src/runtime/assets/handle-border-circles.svg +0 -0
- package/src/runtime/components/Editor.vue +0 -0
- package/src/runtime/pm/features/Blocks/components/ItemNodeView.vue +1 -1
- package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +0 -2
- package/src/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +1 -3
- package/src/runtime/pm/features/Iframe/components/IframeNodeView.vue +0 -3
- package/src/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +0 -1
- package/src/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +1 -4
- package/src/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +0 -3
- package/src/runtime/pm/features/Menus/components/MarkMenuManager.vue +0 -1
- package/src/runtime/pm/schema.ts +0 -0
- package/src/runtime/pm/utils/createDropIndicator.ts +9 -3
- package/src/runtime/pm/utils/getElPropertyAsInt.ts +3 -0
- package/src/runtime/pm/utils/internal/debugSel.ts +0 -0
- package/src/runtime/pm/utils/internal/recurse.ts +0 -0
- package/dist/runtime/assets/base.css +0 -1
- package/dist/runtime/assets/handle-arrow.svg +0 -16
- package/dist/runtime/assets/handle-border-circles-single.svg +0 -44
- package/dist/runtime/assets/handle-border-circles.svg +0 -27
- package/dist/runtime/assets/handle-temp.svg +0 -1
- package/dist/runtime/assets/utils.css +0 -1
- package/dist/runtime/components/CodeBlockThemePicker.d.vue.ts +0 -12
- package/dist/runtime/components/CodeBlockThemePicker.vue +0 -123
- package/dist/runtime/components/CodeBlockThemePicker.vue.d.ts +0 -12
- package/dist/runtime/components/Commands.d.vue.ts +0 -10
- package/dist/runtime/components/Commands.vue +0 -60
- package/dist/runtime/components/Commands.vue.d.ts +0 -10
- package/dist/runtime/components/Editor.d.vue.ts +0 -40
- package/dist/runtime/components/Editor.vue +0 -208
- package/dist/runtime/components/Editor.vue.d.ts +0 -40
- package/dist/runtime/components/EditorDemoApp.d.vue.ts +0 -2
- package/dist/runtime/components/EditorDemoApp.vue +0 -104
- package/dist/runtime/components/EditorDemoApp.vue.d.ts +0 -2
- package/dist/runtime/components/EditorDemoControls.d.vue.ts +0 -12
- package/dist/runtime/components/EditorDemoControls.vue +0 -36
- package/dist/runtime/components/EditorDemoControls.vue.d.ts +0 -12
- package/dist/runtime/components/TestWrapper.d.vue.ts +0 -11
- package/dist/runtime/components/TestWrapper.vue +0 -63
- package/dist/runtime/components/TestWrapper.vue.d.ts +0 -11
- package/dist/runtime/composables/useEditor.d.ts +0 -9
- package/dist/runtime/composables/useEditor.js +0 -21
- package/dist/runtime/composables/useWindowDebugging.d.ts +0 -3
- package/dist/runtime/composables/useWindowDebugging.js +0 -16
- package/dist/runtime/demo/App.d.vue.ts +0 -2
- package/dist/runtime/demo/App.vue +0 -101
- package/dist/runtime/demo/App.vue.d.ts +0 -2
- package/dist/runtime/demo/README.md +0 -1
- package/dist/runtime/demo/main.d.ts +0 -1
- package/dist/runtime/demo/main.js +0 -4
- package/dist/runtime/demo/tailwind.css +0 -1
- package/dist/runtime/env.d.ts +0 -2
- package/dist/runtime/injectionKeys.d.ts +0 -6
- package/dist/runtime/injectionKeys.js +0 -3
- package/dist/runtime/main.lib.d.ts +0 -2
- package/dist/runtime/main.lib.js +0 -2
- package/dist/runtime/pm/commands/backspace.d.ts +0 -12
- package/dist/runtime/pm/commands/backspace.js +0 -26
- package/dist/runtime/pm/commands/changeAttrs.d.ts +0 -9
- package/dist/runtime/pm/commands/changeAttrs.js +0 -15
- package/dist/runtime/pm/commands/deleteSelection.d.ts +0 -9
- package/dist/runtime/pm/commands/deleteSelection.js +0 -8
- package/dist/runtime/pm/commands/enter.d.ts +0 -14
- package/dist/runtime/pm/commands/enter.js +0 -9
- package/dist/runtime/pm/commands/insertBreak.d.ts +0 -9
- package/dist/runtime/pm/commands/insertBreak.js +0 -22
- package/dist/runtime/pm/features/Base/Base.d.ts +0 -4
- package/dist/runtime/pm/features/Base/Base.js +0 -32
- package/dist/runtime/pm/features/Base/commands/deleteNodes.d.ts +0 -10
- package/dist/runtime/pm/features/Base/commands/deleteNodes.js +0 -29
- package/dist/runtime/pm/features/Base/commands/setCursorVisible.d.ts +0 -12
- package/dist/runtime/pm/features/Base/commands/setCursorVisible.js +0 -7
- package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.d.ts +0 -9
- package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.js +0 -48
- package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.d.ts +0 -3
- package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.js +0 -26
- package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.d.ts +0 -3
- package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.js +0 -38
- package/dist/runtime/pm/features/Base/plugins/selectingIndicator.d.ts +0 -5
- package/dist/runtime/pm/features/Base/plugins/selectingIndicator.js +0 -35
- package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.d.ts +0 -33
- package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.js +0 -66
- package/dist/runtime/pm/features/Base/types.d.ts +0 -3
- package/dist/runtime/pm/features/Base/types.js +0 -0
- package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.d.ts +0 -3
- package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.js +0 -34
- package/dist/runtime/pm/features/Blockquote/Blockquote.d.ts +0 -5
- package/dist/runtime/pm/features/Blockquote/Blockquote.js +0 -65
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.d.ts +0 -11
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.js +0 -31
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.d.ts +0 -11
- package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.js +0 -12
- package/dist/runtime/pm/features/Blocks/Blocks.d.ts +0 -2
- package/dist/runtime/pm/features/Blocks/Blocks.js +0 -2
- package/dist/runtime/pm/features/Blocks/Item.d.ts +0 -11
- package/dist/runtime/pm/features/Blocks/Item.js +0 -157
- package/dist/runtime/pm/features/Blocks/List.d.ts +0 -4
- package/dist/runtime/pm/features/Blocks/List.js +0 -59
- package/dist/runtime/pm/features/Blocks/commands/changeItemType.d.ts +0 -20
- package/dist/runtime/pm/features/Blocks/commands/changeItemType.js +0 -40
- package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.d.ts +0 -14
- package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.js +0 -28
- package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.d.ts +0 -23
- package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.js +0 -124
- package/dist/runtime/pm/features/Blocks/commands/deleteItem.d.ts +0 -12
- package/dist/runtime/pm/features/Blocks/commands/deleteItem.js +0 -8
- package/dist/runtime/pm/features/Blocks/commands/indentItem.d.ts +0 -12
- package/dist/runtime/pm/features/Blocks/commands/indentItem.js +0 -58
- package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.d.ts +0 -18
- package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.js +0 -40
- package/dist/runtime/pm/features/Blocks/commands/moveItem.d.ts +0 -12
- package/dist/runtime/pm/features/Blocks/commands/moveItem.js +0 -80
- package/dist/runtime/pm/features/Blocks/commands/setNode.d.ts +0 -20
- package/dist/runtime/pm/features/Blocks/commands/setNode.js +0 -87
- package/dist/runtime/pm/features/Blocks/commands/splitItem.d.ts +0 -17
- package/dist/runtime/pm/features/Blocks/commands/splitItem.js +0 -87
- package/dist/runtime/pm/features/Blocks/commands/unindentItem.d.ts +0 -12
- package/dist/runtime/pm/features/Blocks/commands/unindentItem.js +0 -42
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.d.vue.ts +0 -0
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue +0 -122
- package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue.d.ts +0 -0
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.d.vue.ts +0 -6
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue +0 -78
- package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue.d.ts +0 -6
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.d.vue.ts +0 -92
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue +0 -350
- package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue.d.ts +0 -92
- package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.d.ts +0 -5
- package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.js +0 -42
- package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.d.ts +0 -1
- package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.js +0 -0
- package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.d.ts +0 -5
- package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.js +0 -22
- package/dist/runtime/pm/features/Blocks/composables/useHasChildren.d.ts +0 -5
- package/dist/runtime/pm/features/Blocks/composables/useHasChildren.js +0 -10
- package/dist/runtime/pm/features/Blocks/composables/useNodeStates.d.ts +0 -7
- package/dist/runtime/pm/features/Blocks/composables/useNodeStates.js +0 -20
- package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.d.ts +0 -20
- package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.js +0 -138
- package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.d.ts +0 -11
- package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.js +0 -36
- package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.d.ts +0 -8
- package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.js +0 -30
- package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.d.ts +0 -3
- package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.js +0 -30
- package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.d.ts +0 -4
- package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.js +0 -17
- package/dist/runtime/pm/features/Blocks/states/stateful.d.ts +0 -2
- package/dist/runtime/pm/features/Blocks/states/stateful.js +0 -37
- package/dist/runtime/pm/features/Blocks/states/task/cancelled.svg +0 -32
- package/dist/runtime/pm/features/Blocks/states/task/checked.svg +0 -27
- package/dist/runtime/pm/features/Blocks/states/task/checked2.svg +0 -24
- package/dist/runtime/pm/features/Blocks/states/task/partial.svg +0 -24
- package/dist/runtime/pm/features/Blocks/states/task/partial2.svg +0 -31
- package/dist/runtime/pm/features/Blocks/states/task/unchecked.svg +0 -20
- package/dist/runtime/pm/features/Blocks/types.d.ts +0 -43
- package/dist/runtime/pm/features/Blocks/types.js +0 -2
- package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.d.ts +0 -3
- package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.js +0 -24
- package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.d.ts +0 -4
- package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.js +0 -23
- package/dist/runtime/pm/features/Blocks/utils/isValidId.d.ts +0 -2
- package/dist/runtime/pm/features/Blocks/utils/isValidId.js +0 -7
- package/dist/runtime/pm/features/CodeBlock/CodeBlock.d.ts +0 -16
- package/dist/runtime/pm/features/CodeBlock/CodeBlock.js +0 -91
- package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.d.ts +0 -1
- package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +0 -63
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.d.ts +0 -9
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.js +0 -28
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.d.ts +0 -9
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.js +0 -39
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.d.ts +0 -9
- package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.js +0 -50
- package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.d.ts +0 -9
- package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.js +0 -27
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.d.vue.ts +0 -92
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +0 -112
- package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue.d.ts +0 -92
- package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.d.ts +0 -28
- package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.js +0 -137
- package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.d.ts +0 -37
- package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.js +0 -101
- package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.d.ts +0 -17
- package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.js +0 -711
- package/dist/runtime/pm/features/CodeBlock/types.d.ts +0 -4
- package/dist/runtime/pm/features/CodeBlock/types.js +0 -2
- package/dist/runtime/pm/features/Collaboration/Collaboration.d.ts +0 -66
- package/dist/runtime/pm/features/Collaboration/Collaboration.js +0 -169
- package/dist/runtime/pm/features/CommandsMenus/CommandBar.d.ts +0 -19
- package/dist/runtime/pm/features/CommandsMenus/CommandBar.js +0 -97
- package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.d.ts +0 -20
- package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.js +0 -188
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.d.vue.ts +0 -8
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue +0 -58
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue.d.ts +0 -8
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.d.vue.ts +0 -12
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +0 -42
- package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue.d.ts +0 -12
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.d.vue.ts +0 -10
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +0 -55
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue.d.ts +0 -10
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.d.vue.ts +0 -11
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +0 -58
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue.d.ts +0 -11
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.d.vue.ts +0 -11
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +0 -54
- package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue.d.ts +0 -11
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.d.vue.ts +0 -5
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue +0 -13
- package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue.d.ts +0 -5
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.d.vue.ts +0 -8
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +0 -45
- package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue.d.ts +0 -8
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.d.vue.ts +0 -2
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +0 -5
- package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue.d.ts +0 -2
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.d.vue.ts +0 -2
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +0 -5
- package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue.d.ts +0 -2
- package/dist/runtime/pm/features/CommandsMenus/types.d.ts +0 -61
- package/dist/runtime/pm/features/CommandsMenus/types.js +0 -5
- package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.d.ts +0 -3
- package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.js +0 -11
- package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.d.ts +0 -10
- package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.js +0 -16
- package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.d.ts +0 -5
- package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.js +0 -9
- package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.d.ts +0 -5
- package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.js +0 -11
- package/dist/runtime/pm/features/Document/Document.d.ts +0 -3
- package/dist/runtime/pm/features/Document/Document.js +0 -6
- package/dist/runtime/pm/features/DocumentApi/DocumentApi.d.ts +0 -86
- package/dist/runtime/pm/features/DocumentApi/DocumentApi.js +0 -170
- package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.d.ts +0 -13
- package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.js +0 -76
- package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.d.ts +0 -23
- package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.js +0 -70
- package/dist/runtime/pm/features/DocumentApi/types.d.ts +0 -133
- package/dist/runtime/pm/features/DocumentApi/types.js +0 -1
- package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.d.ts +0 -3
- package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.js +0 -37
- package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.d.ts +0 -4
- package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.js +0 -13
- package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.d.ts +0 -2
- package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.js +0 -22
- package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.d.ts +0 -2
- package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.js +0 -6
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.d.ts +0 -1
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.js +0 -14
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.d.ts +0 -1
- package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.js +0 -14
- package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.d.ts +0 -9
- package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.js +0 -19
- package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.d.ts +0 -2
- package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.js +0 -3
- package/dist/runtime/pm/features/EmbeddedDocument/Embedded.d.ts +0 -24
- package/dist/runtime/pm/features/EmbeddedDocument/Embedded.js +0 -73
- package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.d.ts +0 -23
- package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.js +0 -70
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.d.vue.ts +0 -14
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +0 -171
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue.d.ts +0 -14
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.d.vue.ts +0 -92
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +0 -172
- package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue.d.ts +0 -92
- package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.d.ts +0 -31
- package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.js +0 -199
- package/dist/runtime/pm/features/EmbeddedDocument/types.d.ts +0 -49
- package/dist/runtime/pm/features/EmbeddedDocument/types.js +0 -6
- package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.d.ts +0 -9
- package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.js +0 -3
- package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.d.ts +0 -28
- package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.js +0 -17
- package/dist/runtime/pm/features/FileLoader/FileLoader.d.ts +0 -16
- package/dist/runtime/pm/features/FileLoader/FileLoader.js +0 -99
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.d.ts +0 -28
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.js +0 -69
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.d.ts +0 -11
- package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.js +0 -49
- package/dist/runtime/pm/features/FileLoader/commands/insertFile.d.ts +0 -17
- package/dist/runtime/pm/features/FileLoader/commands/insertFile.js +0 -39
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.d.vue.ts +0 -92
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +0 -38
- package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue.d.ts +0 -92
- package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.d.ts +0 -5
- package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.js +0 -61
- package/dist/runtime/pm/features/FileLoader/types.d.ts +0 -73
- package/dist/runtime/pm/features/FileLoader/types.js +0 -0
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.d.ts +0 -4
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.js +0 -27
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.d.ts +0 -9
- package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.js +0 -22
- package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.d.ts +0 -2
- package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.js +0 -11
- package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.d.ts +0 -3
- package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.js +0 -8
- package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.d.ts +0 -1
- package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.js +0 -12
- package/dist/runtime/pm/features/HardBreak/HardBreak.d.ts +0 -5
- package/dist/runtime/pm/features/HardBreak/HardBreak.js +0 -14
- package/dist/runtime/pm/features/Heading/Heading.d.ts +0 -24
- package/dist/runtime/pm/features/Heading/Heading.js +0 -85
- package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.d.ts +0 -16
- package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.js +0 -33
- package/dist/runtime/pm/features/Heading/types.d.ts +0 -14
- package/dist/runtime/pm/features/Heading/types.js +0 -0
- package/dist/runtime/pm/features/Highlight/Highlight.d.ts +0 -72
- package/dist/runtime/pm/features/Highlight/Highlight.js +0 -163
- package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +0 -3
- package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +0 -5
- package/dist/runtime/pm/features/Highlight/types.d.ts +0 -27
- package/dist/runtime/pm/features/Highlight/types.js +0 -2
- package/dist/runtime/pm/features/History/History.d.ts +0 -35
- package/dist/runtime/pm/features/History/History.js +0 -63
- package/dist/runtime/pm/features/Iframe/Iframe.d.ts +0 -21
- package/dist/runtime/pm/features/Iframe/Iframe.js +0 -127
- package/dist/runtime/pm/features/Iframe/IframeParsers.d.ts +0 -37
- package/dist/runtime/pm/features/Iframe/IframeParsers.js +0 -88
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.d.vue.ts +0 -92
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue +0 -82
- package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue.d.ts +0 -92
- package/dist/runtime/pm/features/Iframe/types.d.ts +0 -5
- package/dist/runtime/pm/features/Iframe/types.js +0 -0
- package/dist/runtime/pm/features/Image/Image.d.ts +0 -2
- package/dist/runtime/pm/features/Image/Image.js +0 -13
- package/dist/runtime/pm/features/Link/Link.d.ts +0 -38
- package/dist/runtime/pm/features/Link/Link.js +0 -241
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.d.vue.ts +0 -28
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +0 -114
- package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue.d.ts +0 -28
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.d.vue.ts +0 -29
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +0 -107
- package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue.d.ts +0 -29
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.d.vue.ts +0 -11
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue +0 -126
- package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue.d.ts +0 -11
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.d.vue.ts +0 -18
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +0 -57
- package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue.d.ts +0 -18
- package/dist/runtime/pm/features/Link/types.d.ts +0 -44
- package/dist/runtime/pm/features/Link/types.js +0 -3
- package/dist/runtime/pm/features/Menus/Menus.d.ts +0 -45
- package/dist/runtime/pm/features/Menus/Menus.js +0 -142
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.d.vue.ts +0 -6
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue +0 -166
- package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue.d.ts +0 -6
- package/dist/runtime/pm/features/Menus/types.d.ts +0 -51
- package/dist/runtime/pm/features/Menus/types.js +0 -3
- package/dist/runtime/pm/features/Menus/utils/isMarkMenu.d.ts +0 -2
- package/dist/runtime/pm/features/Menus/utils/isMarkMenu.js +0 -3
- package/dist/runtime/pm/features/Tables/commands/tableEnter.d.ts +0 -15
- package/dist/runtime/pm/features/Tables/commands/tableEnter.js +0 -19
- package/dist/runtime/pm/features/Tables/index.d.ts +0 -9
- package/dist/runtime/pm/features/Tables/index.js +0 -44
- package/dist/runtime/pm/schema.d.ts +0 -4
- package/dist/runtime/pm/schema.js +0 -80
- package/dist/runtime/pm/testSchema.d.ts +0 -5
- package/dist/runtime/pm/testSchema.js +0 -30
- package/dist/runtime/pm/utils/createDropIndicator.d.ts +0 -23
- package/dist/runtime/pm/utils/createDropIndicator.js +0 -32
- package/dist/runtime/pm/utils/createStateOnlyPluginApply.d.ts +0 -2
- package/dist/runtime/pm/utils/createStateOnlyPluginApply.js +0 -9
- package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.d.ts +0 -2
- package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.js +0 -14
- package/dist/runtime/pm/utils/dropPointInfo.d.ts +0 -56
- package/dist/runtime/pm/utils/dropPointInfo.js +0 -28
- package/dist/runtime/pm/utils/findUpwards.d.ts +0 -20
- package/dist/runtime/pm/utils/findUpwards.js +0 -18
- package/dist/runtime/pm/utils/getChildChunks.d.ts +0 -3
- package/dist/runtime/pm/utils/getChildChunks.js +0 -15
- package/dist/runtime/pm/utils/getDiffReplacementRange.d.ts +0 -20
- package/dist/runtime/pm/utils/getDiffReplacementRange.js +0 -9
- package/dist/runtime/pm/utils/getElMaxVisualSize.d.ts +0 -9
- package/dist/runtime/pm/utils/getElMaxVisualSize.js +0 -7
- package/dist/runtime/pm/utils/getElPropertyAsInt.d.ts +0 -1
- package/dist/runtime/pm/utils/getElPropertyAsInt.js +0 -8
- package/dist/runtime/pm/utils/getGroupNodeNames.d.ts +0 -2
- package/dist/runtime/pm/utils/getGroupNodeNames.js +0 -7
- package/dist/runtime/pm/utils/getMarkPosition.d.ts +0 -11
- package/dist/runtime/pm/utils/getMarkPosition.js +0 -34
- package/dist/runtime/pm/utils/getMarksInSelection.d.ts +0 -3
- package/dist/runtime/pm/utils/getMarksInSelection.js +0 -16
- package/dist/runtime/pm/utils/getTypeByName.d.ts +0 -2
- package/dist/runtime/pm/utils/getTypeByName.js +0 -5
- package/dist/runtime/pm/utils/index.d.ts +0 -15
- package/dist/runtime/pm/utils/index.js +0 -15
- package/dist/runtime/pm/utils/internal/createNodeTypesList.d.ts +0 -2
- package/dist/runtime/pm/utils/internal/createNodeTypesList.js +0 -17
- package/dist/runtime/pm/utils/internal/debugMap.d.ts +0 -7
- package/dist/runtime/pm/utils/internal/debugMap.js +0 -24
- package/dist/runtime/pm/utils/internal/debugNode.d.ts +0 -2
- package/dist/runtime/pm/utils/internal/debugNode.js +0 -18
- package/dist/runtime/pm/utils/internal/debugSel.d.ts +0 -5
- package/dist/runtime/pm/utils/internal/debugSel.js +0 -8
- package/dist/runtime/pm/utils/internal/recurse.d.ts +0 -2
- package/dist/runtime/pm/utils/internal/recurse.js +0 -39
- package/dist/runtime/pm/utils/internal/stripBlockId.d.ts +0 -2
- package/dist/runtime/pm/utils/internal/stripBlockId.js +0 -9
- package/dist/runtime/pm/utils/mapSelection.d.ts +0 -8
- package/dist/runtime/pm/utils/mapSelection.js +0 -12
- package/dist/runtime/pm/utils/nodesBetween.d.ts +0 -21
- package/dist/runtime/pm/utils/nodesBetween.js +0 -21
- package/dist/runtime/pm/utils/pointToPmPoint.d.ts +0 -2
- package/dist/runtime/pm/utils/pointToPmPoint.js +0 -3
- package/dist/runtime/pm/utils/splitIntoChunks.d.ts +0 -32
- package/dist/runtime/pm/utils/splitIntoChunks.js +0 -31
- package/dist/runtime/testDocuments.d.ts +0 -53
- package/dist/runtime/testDocuments.js +0 -122
- package/dist/runtime/types/index.d.ts +0 -53
- package/dist/runtime/types/index.js +0 -9
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import type { Content, EditorOptions } from "@tiptap/core";
|
|
2
|
-
import type { Schema } from "@tiptap/pm/model";
|
|
3
|
-
import type { EditorState, Plugin, Transaction } from "@tiptap/pm/state";
|
|
4
|
-
import { Editor } from "@tiptap/vue-3";
|
|
5
|
-
import type { DocId, DocumentApiInterface, EmbedId, OnSaveDocumentCallback, OnUpdateDocumentCallback } from "./types.js.js";
|
|
6
|
-
/**
|
|
7
|
-
* Configures the document api which tells the editor how to load/unload/save/cache documents, including embedded ones.
|
|
8
|
-
*
|
|
9
|
-
* The cache implementation is left up to the user, hence why it's defined as a get/set interface. A load function must be provided for requesting uncached documents.
|
|
10
|
-
*
|
|
11
|
-
* `save` is optional, but you probably want to save. The function is automatically debounced the configured amount.
|
|
12
|
-
*
|
|
13
|
-
* **Any function that needs to return a document should return it unwrapped with toRaw if it was a ref or in a ref or reactive. **
|
|
14
|
-
*
|
|
15
|
-
* A `refCounter` object can be provided with the respective load/unload functions to be notified when embedded views load/unload documents to reference count them and unload them once no editors have them in use.
|
|
16
|
-
*
|
|
17
|
-
* It is safe to call load multiple times for the same document, the actual load function will only be called once per document, but the refCounter will be called multiple times.
|
|
18
|
-
*
|
|
19
|
-
* The `getTitle` function can be provided to customize the title of the embedded document. It's passed the full embed id and returns it as docId#blockId by default.
|
|
20
|
-
*
|
|
21
|
-
* If there are extensions that use onCreate to set state or have plugins that need to change the state on init with appendTransaction, they will not work since there is no view to initialize the plugins. To get around this, plugins can specify a stateInit function that will be called with a transaction from the initial loaded state which it can then modify while having access to `this` and the extension options.
|
|
22
|
-
*
|
|
23
|
-
* The api creates a default instance of the editor to copy plugins from, this can be replaced by passing your own editor instance.
|
|
24
|
-
*
|
|
25
|
-
* See {@link useTestDocumentApi} for an example of how to set things up.
|
|
26
|
-
*/
|
|
27
|
-
export declare class DocumentApi<T extends Record<string, any> = Record<string, any>> implements DocumentApiInterface<T> {
|
|
28
|
-
private readonly _callbacks;
|
|
29
|
-
private readonly _load;
|
|
30
|
-
private readonly _save?;
|
|
31
|
-
private readonly _saveQueue;
|
|
32
|
-
readonly save: DocumentApiInterface<T>["save"];
|
|
33
|
-
private readonly _cache;
|
|
34
|
-
/**
|
|
35
|
-
* The refCounter is called every time an editor loads or unloads a document. It's used to keep track of the number of editors that are using a document, and to unload it when no editors are using it.
|
|
36
|
-
*
|
|
37
|
-
* Note that you need not immediately unload the cached document. So long as the count is immediatly updated you can set a timeout to actually delete the cache entry (be sure to check the count it still 0 and you can delete it).
|
|
38
|
-
*/
|
|
39
|
-
private readonly _refCounter;
|
|
40
|
-
getSuggestions: DocumentApiInterface["getSuggestions"];
|
|
41
|
-
getEmbedTitle: DocumentApiInterface["getEmbedTitle"];
|
|
42
|
-
postEditorInit: DocumentApiInterface["postEditorInit"];
|
|
43
|
-
preEditorInit: DocumentApiInterface["preEditorInit"];
|
|
44
|
-
updateFilter?: DocumentApiInterface["updateFilter"];
|
|
45
|
-
editor: Editor;
|
|
46
|
-
constructor({ editorOptions, getTitle, getSuggestions, load, save, saveDebounce, cache, refCounter, postEditorInit, preEditorInit, updateFilter }: {
|
|
47
|
-
/**
|
|
48
|
-
* The editor options for the internal instance to use to keep track of the document state. It should include the same extensions as the root editor.
|
|
49
|
-
*/
|
|
50
|
-
editorOptions: Partial<EditorOptions>;
|
|
51
|
-
getTitle?: (docId: string, blockId?: string) => string;
|
|
52
|
-
getSuggestions: DocumentApiInterface["getSuggestions"];
|
|
53
|
-
load: (docId: string, schema: Schema, plugins: Plugin[]) => Promise<{
|
|
54
|
-
state: EditorState;
|
|
55
|
-
data?: T;
|
|
56
|
-
}>;
|
|
57
|
-
save?: DocumentApi["_save"];
|
|
58
|
-
saveDebounce?: number;
|
|
59
|
-
cache: DocumentApi["_cache"];
|
|
60
|
-
refCounter: DocumentApi<T>["_refCounter"];
|
|
61
|
-
postEditorInit?: DocumentApi["postEditorInit"];
|
|
62
|
-
preEditorInit?: DocumentApi["preEditorInit"];
|
|
63
|
-
updateFilter?: DocumentApi["updateFilter"];
|
|
64
|
-
});
|
|
65
|
-
_saveDocument(docId: string): Promise<void>;
|
|
66
|
-
updateDocument(embedId: DocId, tr: Transaction, updaterSymbol?: symbol): void;
|
|
67
|
-
addEventListener(type: "saving" | "saved", cb: OnSaveDocumentCallback): void;
|
|
68
|
-
addEventListener(type: "update", cb: OnUpdateDocumentCallback): void;
|
|
69
|
-
removeEventListener(type: "saving" | "saved", cb: OnSaveDocumentCallback): void;
|
|
70
|
-
removeEventListener(type: "update", cb: OnUpdateDocumentCallback): void;
|
|
71
|
-
unload({ docId }: DocId): void;
|
|
72
|
-
private readonly _loading;
|
|
73
|
-
load({ docId }: DocId): Promise<{
|
|
74
|
-
state: EditorState;
|
|
75
|
-
data?: T;
|
|
76
|
-
}>;
|
|
77
|
-
private _loadInternal;
|
|
78
|
-
getFullState(docId: DocId): EditorState;
|
|
79
|
-
getFromCache(docId: DocId, options?: {
|
|
80
|
-
errorIfNotFound: true;
|
|
81
|
-
}): EditorState;
|
|
82
|
-
getFromCache(docId: DocId, options?: {
|
|
83
|
-
errorIfNotFound?: boolean;
|
|
84
|
-
}): EditorState | undefined;
|
|
85
|
-
getEmbeddedContent(embedId: EmbedId): Content | undefined;
|
|
86
|
-
}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { debounce } from "@alanscodelog/utils/debounce";
|
|
2
|
-
import { unreachable } from "@alanscodelog/utils/unreachable";
|
|
3
|
-
import { Editor } from "@tiptap/vue-3";
|
|
4
|
-
import { isProxy } from "vue";
|
|
5
|
-
import { convertTransactionForFullState } from "./utils/convertTransactionForFullState.js";
|
|
6
|
-
import { getEmbedJson } from "./utils/getEmbedJson.js";
|
|
7
|
-
import { getEmbedNodeFromDoc } from "./utils/getEmbedNodeFromDoc.js";
|
|
8
|
-
export class DocumentApi {
|
|
9
|
-
_callbacks = { update: [], saved: [], saving: [] };
|
|
10
|
-
_load;
|
|
11
|
-
_save;
|
|
12
|
-
_saveQueue = {};
|
|
13
|
-
save;
|
|
14
|
-
_cache;
|
|
15
|
-
/**
|
|
16
|
-
* The refCounter is called every time an editor loads or unloads a document. It's used to keep track of the number of editors that are using a document, and to unload it when no editors are using it.
|
|
17
|
-
*
|
|
18
|
-
* Note that you need not immediately unload the cached document. So long as the count is immediatly updated you can set a timeout to actually delete the cache entry (be sure to check the count it still 0 and you can delete it).
|
|
19
|
-
*/
|
|
20
|
-
_refCounter;
|
|
21
|
-
getSuggestions;
|
|
22
|
-
getEmbedTitle;
|
|
23
|
-
postEditorInit;
|
|
24
|
-
// editor + updateState does not work :/
|
|
25
|
-
preEditorInit = (_docId, options, state) => {
|
|
26
|
-
options.content = state.doc.toJSON();
|
|
27
|
-
return options;
|
|
28
|
-
};
|
|
29
|
-
updateFilter = () => true;
|
|
30
|
-
editor;
|
|
31
|
-
constructor({
|
|
32
|
-
editorOptions,
|
|
33
|
-
getTitle,
|
|
34
|
-
getSuggestions,
|
|
35
|
-
load,
|
|
36
|
-
save,
|
|
37
|
-
saveDebounce = 1e3,
|
|
38
|
-
cache,
|
|
39
|
-
refCounter,
|
|
40
|
-
postEditorInit,
|
|
41
|
-
preEditorInit,
|
|
42
|
-
updateFilter
|
|
43
|
-
}) {
|
|
44
|
-
this.updateFilter = updateFilter;
|
|
45
|
-
this.getEmbedTitle = getTitle ? ({ docId, blockId }) => getTitle(docId, blockId) : ({ docId, blockId }) => `${docId}${blockId ? `#${blockId}` : ""}`;
|
|
46
|
-
this._load = load;
|
|
47
|
-
this._cache = cache;
|
|
48
|
-
this._refCounter = refCounter;
|
|
49
|
-
this._save = save;
|
|
50
|
-
const debouncedSave = debounce(this._saveDocument.bind(this), saveDebounce, {
|
|
51
|
-
queue: this._saveQueue,
|
|
52
|
-
// even though save is async, promisified debounce is slightly more expensive because it creates a new function with every call
|
|
53
|
-
// and we don't really need that
|
|
54
|
-
promisify: false
|
|
55
|
-
});
|
|
56
|
-
this.save = function save2(docId) {
|
|
57
|
-
for (const cb of this._callbacks.saving) {
|
|
58
|
-
cb(docId);
|
|
59
|
-
}
|
|
60
|
-
debouncedSave(docId);
|
|
61
|
-
};
|
|
62
|
-
this.postEditorInit = postEditorInit ?? (() => {
|
|
63
|
-
});
|
|
64
|
-
if (preEditorInit) this.preEditorInit = preEditorInit;
|
|
65
|
-
this.getSuggestions = getSuggestions;
|
|
66
|
-
this.editor = new Editor({
|
|
67
|
-
...editorOptions,
|
|
68
|
-
extensions: [...editorOptions.extensions],
|
|
69
|
-
injectCSS: false
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
73
|
-
async _saveDocument(docId) {
|
|
74
|
-
if (this._save) {
|
|
75
|
-
await this._save(docId);
|
|
76
|
-
for (const cb of this._callbacks.saved) {
|
|
77
|
-
cb(docId);
|
|
78
|
-
}
|
|
79
|
-
} else {
|
|
80
|
-
console.warn("No save function provided, ignoring save request.");
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
updateDocument(embedId, tr, updaterSymbol) {
|
|
84
|
-
if (this.updateFilter && this.updateFilter(tr) === false) return;
|
|
85
|
-
const stateBefore = this.getFromCache(embedId, { errorIfNotFound: true });
|
|
86
|
-
const modifiedTr = convertTransactionForFullState(stateBefore, tr);
|
|
87
|
-
const newState = stateBefore.apply(modifiedTr);
|
|
88
|
-
this._cache.set(embedId.docId, newState);
|
|
89
|
-
for (const cb of this._callbacks.update) {
|
|
90
|
-
cb(embedId, modifiedTr, stateBefore, newState, updaterSymbol);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
addEventListener(type, cb) {
|
|
94
|
-
this._callbacks[type].push(cb);
|
|
95
|
-
}
|
|
96
|
-
removeEventListener(type, cb) {
|
|
97
|
-
const cbIndex = this._callbacks[type].indexOf(cb);
|
|
98
|
-
if (cbIndex === -1) {
|
|
99
|
-
throw new Error("Tried to remove a callback that was not registered.");
|
|
100
|
-
}
|
|
101
|
-
this._callbacks[type].splice(cbIndex, 1);
|
|
102
|
-
}
|
|
103
|
-
unload({ docId }) {
|
|
104
|
-
this._refCounter.unload(docId);
|
|
105
|
-
}
|
|
106
|
-
_loading = {};
|
|
107
|
-
async load({ docId }) {
|
|
108
|
-
this._loading[docId] ??= this._loadInternal({ docId });
|
|
109
|
-
const res = await this._loading[docId];
|
|
110
|
-
if (res === void 0) unreachable();
|
|
111
|
-
this._loading[docId] = void 0;
|
|
112
|
-
this._refCounter.load(docId, res);
|
|
113
|
-
if (isProxy(res.state)) {
|
|
114
|
-
throw new Error("State cannot be a reactive proxy. You can use toRaw as a temporary workaround but you should ideally not make it reactive");
|
|
115
|
-
}
|
|
116
|
-
this._cache.set(docId, res.state);
|
|
117
|
-
return res;
|
|
118
|
-
}
|
|
119
|
-
async _loadInternal({ docId }) {
|
|
120
|
-
const cachedState = this.getFromCache({ docId }, { errorIfNotFound: false });
|
|
121
|
-
if (isProxy(cachedState)) {
|
|
122
|
-
throw new Error("State cannot be a reactive proxy. You can use toRaw as a temporary workaround but you should ideally not make it reactive");
|
|
123
|
-
}
|
|
124
|
-
if (cachedState) {
|
|
125
|
-
const res = { state: cachedState };
|
|
126
|
-
this._refCounter.load(docId, res);
|
|
127
|
-
return res;
|
|
128
|
-
}
|
|
129
|
-
const schema = this.editor.schema;
|
|
130
|
-
const loaded = await this._load(
|
|
131
|
-
docId,
|
|
132
|
-
schema,
|
|
133
|
-
[...this.editor.extensionManager.plugins]
|
|
134
|
-
);
|
|
135
|
-
let state = loaded.state;
|
|
136
|
-
const tr = state.tr;
|
|
137
|
-
tr.setMeta("addToHistory", false);
|
|
138
|
-
for (const plugin of state.plugins) {
|
|
139
|
-
if (plugin.spec.stateInit) {
|
|
140
|
-
plugin.spec.stateInit(tr);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
state = state.apply(tr);
|
|
144
|
-
return { data: loaded.data, state };
|
|
145
|
-
}
|
|
146
|
-
getFullState(docId) {
|
|
147
|
-
return this.getFromCache(docId, { errorIfNotFound: true });
|
|
148
|
-
}
|
|
149
|
-
getFromCache({ docId }, options) {
|
|
150
|
-
const cached = this._cache.get(docId);
|
|
151
|
-
if (cached) return cached;
|
|
152
|
-
if (options?.errorIfNotFound) {
|
|
153
|
-
throw new Error(`Could not find cached state for document ${docId}. Expected document to be loaded.`);
|
|
154
|
-
}
|
|
155
|
-
if (isProxy(cached)) {
|
|
156
|
-
throw new Error("State cannot be a reactive proxy. You can use toRaw as a temporary workaround but you should ideally not make it reactive");
|
|
157
|
-
}
|
|
158
|
-
return void 0;
|
|
159
|
-
}
|
|
160
|
-
getEmbeddedContent(embedId) {
|
|
161
|
-
const state = this.getFullState(embedId);
|
|
162
|
-
const json = state.doc.toJSON();
|
|
163
|
-
const nodeWanted = getEmbedNodeFromDoc(json, embedId.blockId);
|
|
164
|
-
if (embedId.blockId && !nodeWanted) {
|
|
165
|
-
return void 0;
|
|
166
|
-
} else {
|
|
167
|
-
return getEmbedJson(nodeWanted) ?? json;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Content, Editor, EditorOptions } from "@tiptap/core";
|
|
2
|
-
import { type Ref, type ShallowRef } from "vue";
|
|
3
|
-
import type { DocumentApiInterface } from "../types.js.js";
|
|
4
|
-
/**
|
|
5
|
-
* Provides two ways to load content into the editor.
|
|
6
|
-
*
|
|
7
|
-
* The simple one, which is just to provide a content ref.
|
|
8
|
-
*
|
|
9
|
-
* And the more advanced one which uses the document api to load the content. This requires passing the embed api and an id to load.
|
|
10
|
-
*
|
|
11
|
-
* The second option is usually the best, as multiple editors can load the same content and it's automatically kept in sync. See {@link DocumentApi} for more info.
|
|
12
|
-
*/
|
|
13
|
-
export declare function useEditorContent(editor: ShallowRef<Editor | undefined>, content: Ref<Content | undefined>, id: Ref<string | undefined>, documentApi: DocumentApiInterface | undefined, recreate: (modifyOptions?: (options: Partial<EditorOptions>) => Partial<EditorOptions>) => void): void;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { nextTick, onBeforeUnmount, watch } from "vue";
|
|
2
|
-
import { convertTrForInstance } from "../utils/convertTrForInstance.js";
|
|
3
|
-
export function useEditorContent(editor, content, id, documentApi, recreate) {
|
|
4
|
-
const selfSymbol = Symbol(`self${Math.random()}`);
|
|
5
|
-
function onTransaction({ transaction: tr }) {
|
|
6
|
-
if (!documentApi || !id.value || !tr.docChanged || tr.getMeta("ignore")) {
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
tr.setMeta("no-step-convert", true);
|
|
10
|
-
documentApi.updateDocument({ docId: id.value }, tr, selfSymbol);
|
|
11
|
-
}
|
|
12
|
-
const onUpdateDocument = (embedId, tr, __, ___, symbol) => {
|
|
13
|
-
if (symbol !== selfSymbol && !tr.getMeta("ignore") && tr.docChanged && embedId.docId === id.value) {
|
|
14
|
-
tr.setMeta("ignore", true);
|
|
15
|
-
const convertedTr = convertTrForInstance(
|
|
16
|
-
tr,
|
|
17
|
-
editor.value.state
|
|
18
|
-
);
|
|
19
|
-
editor.value?.view.dispatch(convertedTr);
|
|
20
|
-
}
|
|
21
|
-
if (tr.docChanged) {
|
|
22
|
-
void documentApi?.save(embedId.docId);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
let attached = false;
|
|
26
|
-
async function load(changed) {
|
|
27
|
-
if (content.value) {
|
|
28
|
-
editor.value?.commands.setContent(content.value);
|
|
29
|
-
} else if (documentApi) {
|
|
30
|
-
if (changed && id.value) {
|
|
31
|
-
await documentApi.load({ docId: id.value });
|
|
32
|
-
const state = documentApi.getFullState({ docId: id.value });
|
|
33
|
-
recreate((options) => documentApi.preEditorInit?.(id.value, { ...options }, state));
|
|
34
|
-
await nextTick(async () => {
|
|
35
|
-
editor.value.on("transaction", onTransaction);
|
|
36
|
-
documentApi.addEventListener("update", onUpdateDocument);
|
|
37
|
-
documentApi.postEditorInit(id.value, editor.value);
|
|
38
|
-
attached = true;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function unload(oldId) {
|
|
44
|
-
if (oldId !== void 0 && documentApi) {
|
|
45
|
-
documentApi.unload({ docId: oldId });
|
|
46
|
-
if (attached) {
|
|
47
|
-
documentApi.removeEventListener("update", onUpdateDocument);
|
|
48
|
-
editor.value?.off("transaction", onTransaction);
|
|
49
|
-
attached = false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
watch([content, id, editor], async ([_newContent, newId], [_oldContent, oldId]) => {
|
|
54
|
-
if (!editor.value) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (!content.value && (!id.value || !documentApi)) {
|
|
58
|
-
throw new Error("No content or id and document api provided.");
|
|
59
|
-
}
|
|
60
|
-
if (id.value && !documentApi) {
|
|
61
|
-
throw new Error("Id provided but no document api provided.");
|
|
62
|
-
}
|
|
63
|
-
if (oldId !== void 0 && newId !== oldId && documentApi) {
|
|
64
|
-
unload(oldId);
|
|
65
|
-
await load(true);
|
|
66
|
-
} else if (_newContent) {
|
|
67
|
-
await load(false);
|
|
68
|
-
}
|
|
69
|
-
}, { deep: false });
|
|
70
|
-
void load(true);
|
|
71
|
-
onBeforeUnmount(() => {
|
|
72
|
-
if (id.value) {
|
|
73
|
-
unload(id.value);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { EditorOptions } from "@tiptap/core";
|
|
2
|
-
import { EditorState } from "@tiptap/pm/state";
|
|
3
|
-
import { type Ref } from "vue";
|
|
4
|
-
import type { DocumentApiInterface } from "../types.js.js";
|
|
5
|
-
type Cache = Record<string, {
|
|
6
|
-
state?: EditorState;
|
|
7
|
-
count: number;
|
|
8
|
-
}>;
|
|
9
|
-
/** Creates a simple instance of the DocumentApi for testing purposes. */
|
|
10
|
-
export declare function useTestDocumentApi(editorOptions: Partial<EditorOptions>, embeds: Record<string, {
|
|
11
|
-
content: any;
|
|
12
|
-
title?: string;
|
|
13
|
-
}>, { loadDelay }?: {
|
|
14
|
-
loadDelay?: number;
|
|
15
|
-
}): {
|
|
16
|
-
cache: Ref<Cache>;
|
|
17
|
-
documentApi: DocumentApiInterface;
|
|
18
|
-
embeds: Record<string, {
|
|
19
|
-
content: any;
|
|
20
|
-
title?: string;
|
|
21
|
-
}>;
|
|
22
|
-
};
|
|
23
|
-
export {};
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { delay } from "@alanscodelog/utils/delay";
|
|
2
|
-
import { keys } from "@alanscodelog/utils/keys";
|
|
3
|
-
import { unreachable } from "@alanscodelog/utils/unreachable";
|
|
4
|
-
import { createDocument, generateJSON } from "@tiptap/core";
|
|
5
|
-
import { EditorState } from "@tiptap/pm/state";
|
|
6
|
-
import { ref, toRaw } from "vue";
|
|
7
|
-
import { testExtensions } from "../../../testSchema.js";
|
|
8
|
-
import { DocumentApi } from "../DocumentApi.js";
|
|
9
|
-
export function useTestDocumentApi(editorOptions, embeds, { loadDelay = 0 } = {}) {
|
|
10
|
-
const cache = ref({});
|
|
11
|
-
const documentApi = new DocumentApi({
|
|
12
|
-
editorOptions,
|
|
13
|
-
getSuggestions: async (searchString) => {
|
|
14
|
-
const res = [];
|
|
15
|
-
for (const docId of keys(embeds)) {
|
|
16
|
-
const title = embeds[docId].title ?? docId;
|
|
17
|
-
if (title.includes(searchString)) {
|
|
18
|
-
res.push({ title, docId });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (loadDelay) {
|
|
22
|
-
await delay(loadDelay);
|
|
23
|
-
}
|
|
24
|
-
return res;
|
|
25
|
-
},
|
|
26
|
-
getTitle: (docId, blockId) => (embeds[docId]?.title ?? docId) + (blockId ? `#${blockId}` : ""),
|
|
27
|
-
cache: {
|
|
28
|
-
get(docId) {
|
|
29
|
-
return toRaw(cache.value[docId]?.state);
|
|
30
|
-
},
|
|
31
|
-
set(docId, state) {
|
|
32
|
-
cache.value[docId].state = state;
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
load: async (docId, schema, plugins) => {
|
|
36
|
-
if (loadDelay) {
|
|
37
|
-
await delay(loadDelay);
|
|
38
|
-
}
|
|
39
|
-
if (!embeds[docId]) {
|
|
40
|
-
throw new Error(`No embed found for docId ${docId} in: ${JSON.stringify(embeds, null, " ")}`);
|
|
41
|
-
}
|
|
42
|
-
const json = generateJSON(embeds[docId].content, testExtensions);
|
|
43
|
-
const doc = createDocument(json, schema);
|
|
44
|
-
const state = EditorState.create({
|
|
45
|
-
doc,
|
|
46
|
-
schema,
|
|
47
|
-
plugins
|
|
48
|
-
});
|
|
49
|
-
return { state };
|
|
50
|
-
},
|
|
51
|
-
refCounter: {
|
|
52
|
-
load(docId, loaded) {
|
|
53
|
-
cache.value[docId] ??= { ...loaded, count: 0 };
|
|
54
|
-
cache.value[docId].count++;
|
|
55
|
-
},
|
|
56
|
-
unload: (docId) => {
|
|
57
|
-
if (cache.value[docId]) {
|
|
58
|
-
if (cache.value[docId].count === 1) {
|
|
59
|
-
delete cache.value[docId];
|
|
60
|
-
} else {
|
|
61
|
-
cache.value[docId].count--;
|
|
62
|
-
}
|
|
63
|
-
} else {
|
|
64
|
-
unreachable();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return { documentApi, cache, embeds };
|
|
70
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import type { Content, Editor, EditorOptions } from "@tiptap/core";
|
|
2
|
-
import type { EditorState, Transaction } from "@tiptap/pm/state";
|
|
3
|
-
import type { InjectionKey } from "vue";
|
|
4
|
-
export declare const documentApiInjectionKey: InjectionKey<DocumentApiInterface>;
|
|
5
|
-
export type DocId = {
|
|
6
|
-
docId: string;
|
|
7
|
-
};
|
|
8
|
-
export type BlockId = {
|
|
9
|
-
blockId?: string;
|
|
10
|
-
};
|
|
11
|
-
/** When the user initially creates an embed, it's docId will be undefined. */
|
|
12
|
-
export type MaybeEmbedId = Partial<DocId> & BlockId;
|
|
13
|
-
export type EmbedId = DocId & BlockId;
|
|
14
|
-
export type OnUpdateDocumentCallback = (embedId: DocId, tr: Transaction, oldEditorState: EditorState, newEditorState: EditorState, selfSymbol?: symbol) => void;
|
|
15
|
-
export type OnSaveDocumentCallback = (docId: string) => void;
|
|
16
|
-
export type DocumentApiInterface<T extends Record<string, any> = Record<string, any>> = {
|
|
17
|
-
/** Debounced save (to storage) function. Use the event listeners to get notified when saving finishes. */
|
|
18
|
-
save: (docId: string) => void;
|
|
19
|
-
getEmbeddedContent: (embedId: EmbedId) => Content | undefined;
|
|
20
|
-
getFromCache: (docId: DocId, options?: {
|
|
21
|
-
errorIfNotFound?: boolean;
|
|
22
|
-
}) => EditorState | undefined;
|
|
23
|
-
/** Load should be called the first time, before attempting to load the state. */
|
|
24
|
-
getFullState: (docId: DocId) => EditorState;
|
|
25
|
-
/** Like {@link DocumentApi.preEditorInit}, but after initializing and loading the document (and before the transaction listeners are added). */
|
|
26
|
-
postEditorInit: (docId: string, editor: Editor) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Sets options before initializing the editor. By default just does `options.content = state.doc.toJSON()`, but can be useful when managing the document state in some other way (e.g. collab.
|
|
29
|
-
*
|
|
30
|
-
* Also useful for creating per-doc instances for certain extensions, such as Collaboration.
|
|
31
|
-
*
|
|
32
|
-
* This is a bit tricky to do normally since the editor component initializes the editor before the document is loaded and is re-used (the wrapper Editor *component*, not the editor) when the document changes.
|
|
33
|
-
*
|
|
34
|
-
* So this hook can be used to add these additional per-doc instances of extensions. Be sure to clone the properties you are modifying. They are only shallow cloned before being passed to the function.
|
|
35
|
-
*
|
|
36
|
-
* ```ts
|
|
37
|
-
* preEditorInit(docId, options: Partial<EditorOptions>, state: EditorState) {
|
|
38
|
-
* // we do not need to set options.content when using collab
|
|
39
|
-
* // so no options.content = state.doc.toJSON()
|
|
40
|
-
* const ydoc = cache.value[docId].ydoc
|
|
41
|
-
* // it's suggested you add the collab extension only here
|
|
42
|
-
* // otherwise you would have to initially configure it with a dummy document
|
|
43
|
-
* const collabExt = Collaboration.configure({
|
|
44
|
-
* document: ydoc
|
|
45
|
-
* }) as any
|
|
46
|
-
* options.extensions = [
|
|
47
|
-
* ...(options.extensions ?? []),
|
|
48
|
-
* collabExt
|
|
49
|
-
* ]
|
|
50
|
-
* return options
|
|
51
|
-
* },
|
|
52
|
-
* load: async (
|
|
53
|
-
* docId: string,
|
|
54
|
-
* schema: Schema,
|
|
55
|
-
* plugins: Plugin[],
|
|
56
|
-
* ) => {
|
|
57
|
-
* if (cache.value[docId]?.state) {
|
|
58
|
-
* return { state: toRaw(cache.value[docId].state) }
|
|
59
|
-
* }
|
|
60
|
-
* const doc = getFromYourDb(docId)
|
|
61
|
-
* const decoded = toUint8Array(doc.contentBinary)
|
|
62
|
-
* const yDoc = new Y.Doc()
|
|
63
|
-
* Y.applyUpdate(yDoc, decoded)
|
|
64
|
-
*
|
|
65
|
-
* const yjs = initProseMirrorDoc(yDoc.getXmlFragment("prosemirror"), schema)
|
|
66
|
-
* const state = EditorState.create({
|
|
67
|
-
* doc: yjs.doc,
|
|
68
|
-
* schema,
|
|
69
|
-
* plugins:[
|
|
70
|
-
* ...plugins,
|
|
71
|
-
* // the document api's yjs instance
|
|
72
|
-
* ySyncPlugin(yDoc.getXmlFragment("prosemirror"), {mapping:yjs.mapping}),
|
|
73
|
-
* ]
|
|
74
|
-
* })
|
|
75
|
-
* // return the state and any additional data we want refCounter.load to be called with.
|
|
76
|
-
* return { state, doc, yDoc }
|
|
77
|
-
* },
|
|
78
|
-
* updateFilter(tr:Transaction) {
|
|
79
|
-
* const meta = tr.getMeta(ySyncPluginKey)
|
|
80
|
-
* if (meta) return false
|
|
81
|
-
* return true
|
|
82
|
-
* },
|
|
83
|
-
* ```
|
|
84
|
-
* See {@link DocumentApi.updateFilter} for why yjs (and other syncronization mechanisms) might need to ignore transactions.
|
|
85
|
-
*/
|
|
86
|
-
preEditorInit: (docId: string, options: Partial<EditorOptions>, state: EditorState) => Partial<EditorOptions>;
|
|
87
|
-
/**
|
|
88
|
-
* Return false to ignore the transaction.
|
|
89
|
-
*
|
|
90
|
-
* This is useful when using a secondary syncronization mechanism, such as yjs.
|
|
91
|
-
*
|
|
92
|
-
* If you load all editors of a file with yjs's plugin and point to the same ydoc, yjs's plugin will sync them. But that means that when the DocumentApi tries to sync the transactions they will have already been applied and the document update will fail.
|
|
93
|
-
*
|
|
94
|
-
* So we have to ignore all of yjs's transactions, but NOT transactions from partially embedded docs => full state, as these do not pass through yjs.
|
|
95
|
-
*/
|
|
96
|
-
updateFilter?: (tr: Transaction) => boolean | undefined;
|
|
97
|
-
updateDocument: (embedId: DocId, tr: Transaction, selfSymbol?: symbol) => void;
|
|
98
|
-
addEventListener(type: "saving" | "saved", cb: OnSaveDocumentCallback): void;
|
|
99
|
-
addEventListener(type: "update", cb: OnUpdateDocumentCallback): void;
|
|
100
|
-
removeEventListener(type: "saving" | "saved", cb: OnSaveDocumentCallback): void;
|
|
101
|
-
removeEventListener(type: "update", cb: OnUpdateDocumentCallback): void;
|
|
102
|
-
/** For the embedded document picker, should return suggestions for the search string. */
|
|
103
|
-
getSuggestions: (searchString: string) => Promise<{
|
|
104
|
-
title: string;
|
|
105
|
-
docId: string;
|
|
106
|
-
}[]>;
|
|
107
|
-
/** How to format the title of the embedded document. Defaults to docId#blockId */
|
|
108
|
-
getEmbedTitle: (embedId: EmbedId) => string;
|
|
109
|
-
/**
|
|
110
|
-
* Tells the document api how to load an unloaded document and any additional data. Whatever this function returns will be passed to the refCounter.load option in the default DocumentApi implementation.
|
|
111
|
-
*
|
|
112
|
-
* ```ts
|
|
113
|
-
* load: async ( docId: string, schema: Schema, plugins: Plugin[],) => {
|
|
114
|
-
* const dbDoc = getFromYourDb(docId)
|
|
115
|
-
*
|
|
116
|
-
* const state = EditorState.create({
|
|
117
|
-
* doc: yjs.doc,
|
|
118
|
-
* schema,
|
|
119
|
-
* plugins
|
|
120
|
-
* })
|
|
121
|
-
* // return the state and any additional data we want to cache
|
|
122
|
-
* return { state, data: { dbDoc } }
|
|
123
|
-
* },
|
|
124
|
-
* ```
|
|
125
|
-
* See {@link DocumentApi.preEditorInit} for how to set this up with sync (e.g. yjs).
|
|
126
|
-
*/
|
|
127
|
-
load: (docId: DocId) => Promise<{
|
|
128
|
-
state: EditorState;
|
|
129
|
-
data?: T;
|
|
130
|
-
}>;
|
|
131
|
-
/** Notifies the document api that an editor has unloaded the document. */
|
|
132
|
-
unload: (docId: DocId) => void;
|
|
133
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const documentApiInjectionKey = Symbol("documentApiInjectionKey");
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Step } from "@tiptap/pm/transform";
|
|
2
|
-
import { copyMeta } from "./copyMeta.js";
|
|
3
|
-
import { getStateEmbedRange } from "./getStateEmbedRange.js";
|
|
4
|
-
import { getDiffReplacementRange } from "../../../utils/getDiffReplacementRange.js";
|
|
5
|
-
export function convertFullTransactionForPartialState(state, tr, embedId) {
|
|
6
|
-
const blockId = embedId.blockId;
|
|
7
|
-
if (!blockId) {
|
|
8
|
-
const steps = JSON.parse(
|
|
9
|
-
JSON.stringify(tr.steps)
|
|
10
|
-
).map((step) => Step.fromJSON(state.schema, step));
|
|
11
|
-
const intTr2 = state.tr;
|
|
12
|
-
copyMeta(tr, intTr2);
|
|
13
|
-
intTr2.setMeta("ignore", true);
|
|
14
|
-
for (const step of steps) {
|
|
15
|
-
intTr2.step(step);
|
|
16
|
-
}
|
|
17
|
-
return intTr2;
|
|
18
|
-
}
|
|
19
|
-
const { start: nodeStartExisting } = getStateEmbedRange(state.doc, embedId);
|
|
20
|
-
const { start: nodeStart } = getStateEmbedRange(
|
|
21
|
-
tr.doc,
|
|
22
|
-
embedId
|
|
23
|
-
);
|
|
24
|
-
if (nodeStart === void 0 || nodeStartExisting === void 0) return void 0;
|
|
25
|
-
const intTr = state.tr;
|
|
26
|
-
copyMeta(tr, intTr);
|
|
27
|
-
intTr.setMeta("ignore", true);
|
|
28
|
-
const existingNode = state.doc.nodeAt(nodeStartExisting);
|
|
29
|
-
const newNode = tr.doc.nodeAt(nodeStart);
|
|
30
|
-
const convertedNewNode = newNode ? state.schema.nodeFromJSON(newNode.toJSON()) : void 0;
|
|
31
|
-
if (!existingNode || !convertedNewNode) return void 0;
|
|
32
|
-
const diff = getDiffReplacementRange(existingNode, convertedNewNode, nodeStartExisting - 1);
|
|
33
|
-
if (diff) {
|
|
34
|
-
intTr.replace(2 + diff.start, 2 + diff.end, convertedNewNode.slice(diff.sliceStart, diff.sliceEnd));
|
|
35
|
-
}
|
|
36
|
-
return intTr;
|
|
37
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Step } from "@tiptap/pm/transform";
|
|
2
|
-
import { copyMeta } from "./copyMeta.js";
|
|
3
|
-
export function convertTrForInstance(tr, otherState) {
|
|
4
|
-
const extTr = otherState.tr;
|
|
5
|
-
copyMeta(tr, extTr);
|
|
6
|
-
const steps = JSON.parse(
|
|
7
|
-
JSON.stringify(tr.steps)
|
|
8
|
-
).map((step) => Step.fromJSON(otherState.schema, step));
|
|
9
|
-
for (const step of steps) {
|
|
10
|
-
extTr.step(step);
|
|
11
|
-
}
|
|
12
|
-
return extTr;
|
|
13
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { unreachable } from "@alanscodelog/utils/unreachable";
|
|
2
|
-
import { Step, StepMap } from "@tiptap/pm/transform";
|
|
3
|
-
import { copyMeta } from "./copyMeta.js";
|
|
4
|
-
import { getStateEmbedRange } from "./getStateEmbedRange.js";
|
|
5
|
-
export function convertTransactionForFullState(state, tr) {
|
|
6
|
-
const steps = tr.getMeta("no-schema-convert") ? tr.steps : JSON.parse(
|
|
7
|
-
JSON.stringify(tr.steps)
|
|
8
|
-
).map((step) => Step.fromJSON(state.schema, step));
|
|
9
|
-
const extTr = state.tr;
|
|
10
|
-
copyMeta(tr, extTr);
|
|
11
|
-
const trSubId = tr.doc.nodeAt(1)?.attrs.blockId;
|
|
12
|
-
if (!trSubId && !tr.getMeta("no-step-convert")) {
|
|
13
|
-
unreachable();
|
|
14
|
-
}
|
|
15
|
-
const embedRange = trSubId ? getStateEmbedRange(tr.doc, trSubId) : void 0;
|
|
16
|
-
const offsetMap = embedRange && !tr.getMeta("no-step-convert") ? StepMap.offset(embedRange.start !== void 0 ? embedRange.start - 1 : 0) : void 0;
|
|
17
|
-
for (const step of steps) {
|
|
18
|
-
const mapped = offsetMap ? step.map(offsetMap) : step;
|
|
19
|
-
extTr.step(mapped);
|
|
20
|
-
}
|
|
21
|
-
return extTr;
|
|
22
|
-
}
|