@tiptap/vue-3 3.0.0 → 3.0.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +5 -1
  3. package/dist/index.cjs +577 -455
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +228 -0
  6. package/dist/index.d.ts +228 -0
  7. package/dist/index.js +541 -443
  8. package/dist/index.js.map +1 -1
  9. package/dist/menus/index.cjs +693 -0
  10. package/dist/menus/index.cjs.map +1 -0
  11. package/dist/menus/index.d.cts +279 -0
  12. package/dist/menus/index.d.ts +279 -0
  13. package/dist/menus/index.js +685 -0
  14. package/dist/menus/index.js.map +1 -0
  15. package/package.json +28 -17
  16. package/src/Editor.ts +23 -17
  17. package/src/EditorContent.ts +14 -44
  18. package/src/VueMarkViewRenderer.ts +130 -0
  19. package/src/VueNodeViewRenderer.ts +99 -36
  20. package/src/VueRenderer.ts +27 -18
  21. package/src/index.ts +1 -2
  22. package/src/menus/BubbleMenu.ts +78 -0
  23. package/src/menus/FloatingMenu.ts +68 -0
  24. package/src/menus/index.ts +2 -0
  25. package/src/useEditor.ts +7 -1
  26. package/dist/index.umd.js +0 -495
  27. package/dist/index.umd.js.map +0 -1
  28. package/dist/packages/core/src/CommandManager.d.ts +0 -20
  29. package/dist/packages/core/src/Editor.d.ts +0 -161
  30. package/dist/packages/core/src/EventEmitter.d.ts +0 -11
  31. package/dist/packages/core/src/Extension.d.ts +0 -343
  32. package/dist/packages/core/src/ExtensionManager.d.ts +0 -55
  33. package/dist/packages/core/src/InputRule.d.ts +0 -42
  34. package/dist/packages/core/src/Mark.d.ts +0 -451
  35. package/dist/packages/core/src/Node.d.ts +0 -611
  36. package/dist/packages/core/src/NodePos.d.ts +0 -44
  37. package/dist/packages/core/src/NodeView.d.ts +0 -31
  38. package/dist/packages/core/src/PasteRule.d.ts +0 -50
  39. package/dist/packages/core/src/Tracker.d.ts +0 -11
  40. package/dist/packages/core/src/commands/blur.d.ts +0 -13
  41. package/dist/packages/core/src/commands/clearContent.d.ts +0 -14
  42. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -13
  43. package/dist/packages/core/src/commands/command.d.ts +0 -18
  44. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -13
  45. package/dist/packages/core/src/commands/cut.d.ts +0 -20
  46. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +0 -13
  47. package/dist/packages/core/src/commands/deleteNode.d.ts +0 -15
  48. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -14
  49. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -13
  50. package/dist/packages/core/src/commands/enter.d.ts +0 -13
  51. package/dist/packages/core/src/commands/exitCode.d.ts +0 -13
  52. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -25
  53. package/dist/packages/core/src/commands/first.d.ts +0 -14
  54. package/dist/packages/core/src/commands/focus.d.ts +0 -27
  55. package/dist/packages/core/src/commands/forEach.d.ts +0 -14
  56. package/dist/packages/core/src/commands/index.d.ts +0 -55
  57. package/dist/packages/core/src/commands/insertContent.d.ts +0 -34
  58. package/dist/packages/core/src/commands/insertContentAt.d.ts +0 -47
  59. package/dist/packages/core/src/commands/join.d.ts +0 -41
  60. package/dist/packages/core/src/commands/joinItemBackward.d.ts +0 -13
  61. package/dist/packages/core/src/commands/joinItemForward.d.ts +0 -13
  62. package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +0 -12
  63. package/dist/packages/core/src/commands/joinTextblockForward.d.ts +0 -12
  64. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -14
  65. package/dist/packages/core/src/commands/lift.d.ts +0 -17
  66. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -13
  67. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -15
  68. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -13
  69. package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -16
  70. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -13
  71. package/dist/packages/core/src/commands/selectAll.d.ts +0 -13
  72. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -13
  73. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -13
  74. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -13
  75. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +0 -13
  76. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +0 -13
  77. package/dist/packages/core/src/commands/setContent.d.ts +0 -40
  78. package/dist/packages/core/src/commands/setMark.d.ts +0 -15
  79. package/dist/packages/core/src/commands/setMeta.d.ts +0 -15
  80. package/dist/packages/core/src/commands/setNode.d.ts +0 -16
  81. package/dist/packages/core/src/commands/setNodeSelection.d.ts +0 -14
  82. package/dist/packages/core/src/commands/setTextSelection.d.ts +0 -14
  83. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -15
  84. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -17
  85. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -15
  86. package/dist/packages/core/src/commands/toggleList.d.ts +0 -18
  87. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -30
  88. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -17
  89. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -16
  90. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -13
  91. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -13
  92. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -25
  93. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -24
  94. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -16
  95. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -16
  96. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -5
  97. package/dist/packages/core/src/extensions/commands.d.ts +0 -3
  98. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  99. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  100. package/dist/packages/core/src/extensions/index.d.ts +0 -6
  101. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  102. package/dist/packages/core/src/extensions/tabindex.d.ts +0 -2
  103. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +0 -10
  104. package/dist/packages/core/src/helpers/createChainableState.d.ts +0 -10
  105. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -12
  106. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -15
  107. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +0 -7
  108. package/dist/packages/core/src/helpers/findChildren.d.ts +0 -9
  109. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +0 -10
  110. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -16
  111. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -17
  112. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -8
  113. package/dist/packages/core/src/helpers/generateJSON.d.ts +0 -8
  114. package/dist/packages/core/src/helpers/generateText.d.ts +0 -12
  115. package/dist/packages/core/src/helpers/getAttributes.d.ts +0 -9
  116. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  117. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +0 -11
  118. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +0 -8
  119. package/dist/packages/core/src/helpers/getExtensionField.d.ts +0 -9
  120. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  121. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -3
  122. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  123. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  124. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  125. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +0 -11
  126. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -3
  127. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  128. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  129. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -4
  130. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +0 -10
  131. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -8
  132. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -8
  133. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -9
  134. package/dist/packages/core/src/helpers/getText.d.ts +0 -15
  135. package/dist/packages/core/src/helpers/getTextBetween.d.ts +0 -14
  136. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +0 -8
  137. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +0 -8
  138. package/dist/packages/core/src/helpers/index.d.ts +0 -50
  139. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  140. package/dist/packages/core/src/helpers/isActive.d.ts +0 -2
  141. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +0 -2
  142. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +0 -2
  143. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +0 -2
  144. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  145. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -3
  146. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -3
  147. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  148. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  149. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  150. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +0 -2
  151. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +0 -4
  152. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  153. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  154. package/dist/packages/core/src/index.d.ts +0 -24
  155. package/dist/packages/core/src/inputRules/index.d.ts +0 -5
  156. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -13
  157. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -23
  158. package/dist/packages/core/src/inputRules/textInputRule.d.ts +0 -10
  159. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +0 -15
  160. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +0 -28
  161. package/dist/packages/core/src/pasteRules/index.d.ts +0 -3
  162. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -13
  163. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +0 -13
  164. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +0 -10
  165. package/dist/packages/core/src/style.d.ts +0 -1
  166. package/dist/packages/core/src/types.d.ts +0 -255
  167. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -9
  168. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  169. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -6
  170. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  171. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +0 -1
  172. package/dist/packages/core/src/utilities/findDuplicates.d.ts +0 -1
  173. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  174. package/dist/packages/core/src/utilities/index.d.ts +0 -20
  175. package/dist/packages/core/src/utilities/isAndroid.d.ts +0 -1
  176. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  177. package/dist/packages/core/src/utilities/isFunction.d.ts +0 -1
  178. package/dist/packages/core/src/utilities/isMacOS.d.ts +0 -1
  179. package/dist/packages/core/src/utilities/isNumber.d.ts +0 -1
  180. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  181. package/dist/packages/core/src/utilities/isRegExp.d.ts +0 -1
  182. package/dist/packages/core/src/utilities/isString.d.ts +0 -1
  183. package/dist/packages/core/src/utilities/isiOS.d.ts +0 -1
  184. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -1
  185. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -1
  186. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  187. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -8
  188. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +0 -8
  189. package/dist/packages/extension-bubble-menu/src/bubble-menu-plugin.d.ts +0 -76
  190. package/dist/packages/extension-bubble-menu/src/bubble-menu.d.ts +0 -15
  191. package/dist/packages/extension-bubble-menu/src/index.d.ts +0 -4
  192. package/dist/packages/extension-floating-menu/src/floating-menu-plugin.d.ts +0 -66
  193. package/dist/packages/extension-floating-menu/src/floating-menu.d.ts +0 -15
  194. package/dist/packages/extension-floating-menu/src/index.d.ts +0 -4
  195. package/dist/packages/vue-3/src/BubbleMenu.d.ts +0 -59
  196. package/dist/packages/vue-3/src/Editor.d.ts +0 -23
  197. package/dist/packages/vue-3/src/EditorContent.d.ts +0 -17
  198. package/dist/packages/vue-3/src/FloatingMenu.d.ts +0 -48
  199. package/dist/packages/vue-3/src/NodeViewContent.d.ts +0 -13
  200. package/dist/packages/vue-3/src/NodeViewWrapper.d.ts +0 -13
  201. package/dist/packages/vue-3/src/VueNodeViewRenderer.d.ts +0 -48
  202. package/dist/packages/vue-3/src/VueRenderer.d.ts +0 -36
  203. package/dist/packages/vue-3/src/index.d.ts +0 -10
  204. package/dist/packages/vue-3/src/useEditor.d.ts +0 -3
  205. package/src/BubbleMenu.ts +0 -71
  206. package/src/FloatingMenu.ts +0 -66
package/dist/index.cjs CHANGED
@@ -1,494 +1,616 @@
1
- 'use strict';
2
-
3
- var extensionBubbleMenu = require('@tiptap/extension-bubble-menu');
4
- var vue = require('vue');
5
- var core = require('@tiptap/core');
6
- var extensionFloatingMenu = require('@tiptap/extension-floating-menu');
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
7
20
 
8
- const BubbleMenu = vue.defineComponent({
9
- name: 'BubbleMenu',
10
- props: {
11
- pluginKey: {
12
- type: [String, Object],
13
- default: 'bubbleMenu',
14
- },
15
- editor: {
16
- type: Object,
17
- required: true,
18
- },
19
- updateDelay: {
20
- type: Number,
21
- default: undefined,
22
- },
23
- tippyOptions: {
24
- type: Object,
25
- default: () => ({}),
26
- },
27
- shouldShow: {
28
- type: Function,
29
- default: null,
30
- },
31
- },
32
- setup(props, { slots }) {
33
- const root = vue.ref(null);
34
- vue.onMounted(() => {
35
- const { updateDelay, editor, pluginKey, shouldShow, tippyOptions, } = props;
36
- editor.registerPlugin(extensionBubbleMenu.BubbleMenuPlugin({
37
- updateDelay,
38
- editor,
39
- element: root.value,
40
- pluginKey,
41
- shouldShow,
42
- tippyOptions,
43
- }));
44
- });
45
- vue.onBeforeUnmount(() => {
46
- const { pluginKey, editor } = props;
47
- editor.unregisterPlugin(pluginKey);
48
- });
49
- return () => { var _a; return vue.h('div', { ref: root }, (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)); };
50
- },
21
+ // src/index.ts
22
+ var index_exports = {};
23
+ __export(index_exports, {
24
+ Editor: () => Editor,
25
+ EditorContent: () => EditorContent,
26
+ MarkViewContent: () => MarkViewContent,
27
+ NodeViewContent: () => NodeViewContent,
28
+ NodeViewWrapper: () => NodeViewWrapper,
29
+ VueMarkView: () => VueMarkView,
30
+ VueMarkViewRenderer: () => VueMarkViewRenderer,
31
+ VueNodeViewRenderer: () => VueNodeViewRenderer,
32
+ VueRenderer: () => VueRenderer,
33
+ markViewProps: () => markViewProps,
34
+ nodeViewProps: () => nodeViewProps,
35
+ useEditor: () => useEditor
51
36
  });
37
+ module.exports = __toCommonJS(index_exports);
52
38
 
39
+ // src/Editor.ts
40
+ var import_core = require("@tiptap/core");
41
+ var import_vue = require("vue");
53
42
  function useDebouncedRef(value) {
54
- return vue.customRef((track, trigger) => {
55
- return {
56
- get() {
57
- track();
58
- return value;
59
- },
60
- set(newValue) {
61
- // update state
62
- value = newValue;
63
- // update view as soon as possible
64
- requestAnimationFrame(() => {
65
- requestAnimationFrame(() => {
66
- trigger();
67
- });
68
- });
69
- },
70
- };
71
- });
72
- }
73
- class Editor extends core.Editor {
74
- constructor(options = {}) {
75
- super(options);
76
- this.contentComponent = null;
77
- this.appContext = null;
78
- this.reactiveState = useDebouncedRef(this.view.state);
79
- this.reactiveExtensionStorage = useDebouncedRef(this.extensionStorage);
80
- this.on('beforeTransaction', ({ nextState }) => {
81
- this.reactiveState.value = nextState;
82
- this.reactiveExtensionStorage.value = this.extensionStorage;
43
+ return (0, import_vue.customRef)((track, trigger) => {
44
+ return {
45
+ get() {
46
+ track();
47
+ return value;
48
+ },
49
+ set(newValue) {
50
+ value = newValue;
51
+ requestAnimationFrame(() => {
52
+ requestAnimationFrame(() => {
53
+ trigger();
54
+ });
83
55
  });
84
- return vue.markRaw(this); // eslint-disable-line
85
- }
86
- get state() {
87
- return this.reactiveState ? this.reactiveState.value : this.view.state;
88
- }
89
- get storage() {
90
- return this.reactiveExtensionStorage ? this.reactiveExtensionStorage.value : super.storage;
91
- }
92
- /**
93
- * Register a ProseMirror plugin.
94
- */
95
- registerPlugin(plugin, handlePlugins) {
96
- super.registerPlugin(plugin, handlePlugins);
97
- this.reactiveState.value = this.view.state;
56
+ }
57
+ };
58
+ });
59
+ }
60
+ var Editor = class extends import_core.Editor {
61
+ constructor(options = {}) {
62
+ super(options);
63
+ this.contentComponent = null;
64
+ this.appContext = null;
65
+ this.reactiveState = useDebouncedRef(this.view.state);
66
+ this.reactiveExtensionStorage = useDebouncedRef(this.extensionStorage);
67
+ this.on("beforeTransaction", ({ nextState }) => {
68
+ this.reactiveState.value = nextState;
69
+ this.reactiveExtensionStorage.value = this.extensionStorage;
70
+ });
71
+ return (0, import_vue.markRaw)(this);
72
+ }
73
+ get state() {
74
+ return this.reactiveState ? this.reactiveState.value : this.view.state;
75
+ }
76
+ get storage() {
77
+ return this.reactiveExtensionStorage ? this.reactiveExtensionStorage.value : super.storage;
78
+ }
79
+ /**
80
+ * Register a ProseMirror plugin.
81
+ */
82
+ registerPlugin(plugin, handlePlugins) {
83
+ const nextState = super.registerPlugin(plugin, handlePlugins);
84
+ if (this.reactiveState) {
85
+ this.reactiveState.value = nextState;
98
86
  }
99
- /**
100
- * Unregister a ProseMirror plugin.
101
- */
102
- unregisterPlugin(nameOrPluginKey) {
103
- super.unregisterPlugin(nameOrPluginKey);
104
- this.reactiveState.value = this.view.state;
87
+ return nextState;
88
+ }
89
+ /**
90
+ * Unregister a ProseMirror plugin.
91
+ */
92
+ unregisterPlugin(nameOrPluginKey) {
93
+ const nextState = super.unregisterPlugin(nameOrPluginKey);
94
+ if (this.reactiveState && nextState) {
95
+ this.reactiveState.value = nextState;
105
96
  }
106
- }
107
-
108
- const EditorContent = vue.defineComponent({
109
- name: 'EditorContent',
110
- props: {
111
- editor: {
112
- default: null,
113
- type: Object,
114
- },
115
- },
116
- setup(props) {
117
- const rootEl = vue.ref();
118
- const instance = vue.getCurrentInstance();
119
- vue.watchEffect(() => {
120
- const editor = props.editor;
121
- if (editor && editor.options.element && rootEl.value) {
122
- vue.nextTick(() => {
123
- if (!rootEl.value || !editor.options.element.firstChild) {
124
- return;
125
- }
126
- const element = vue.unref(rootEl.value);
127
- rootEl.value.append(...editor.options.element.childNodes);
128
- // @ts-ignore
129
- editor.contentComponent = instance.ctx._;
130
- if (instance) {
131
- editor.appContext = {
132
- ...instance.appContext,
133
- provides: {
134
- // @ts-ignore
135
- ...instance.provides,
136
- ...instance.appContext.provides,
137
- },
138
- };
139
- }
140
- editor.setOptions({
141
- element,
142
- });
143
- editor.createNodeViews();
144
- });
145
- }
146
- });
147
- vue.onBeforeUnmount(() => {
148
- const editor = props.editor;
149
- if (!editor) {
150
- return;
151
- }
152
- // destroy nodeviews before vue removes dom element
153
- if (!editor.isDestroyed) {
154
- editor.view.setProps({
155
- nodeViews: {},
156
- });
157
- }
158
- editor.contentComponent = null;
159
- editor.appContext = null;
160
- if (!editor.options.element.firstChild) {
161
- return;
162
- }
163
- const newElement = document.createElement('div');
164
- newElement.append(...editor.options.element.childNodes);
165
- editor.setOptions({
166
- element: newElement,
167
- });
168
- });
169
- return { rootEl };
170
- },
171
- render() {
172
- return vue.h('div', {
173
- ref: (el) => { this.rootEl = el; },
174
- });
175
- },
176
- });
97
+ return nextState;
98
+ }
99
+ };
177
100
 
178
- const FloatingMenu = vue.defineComponent({
179
- name: 'FloatingMenu',
180
- props: {
181
- pluginKey: {
182
- // TODO: TypeScript breaks :(
183
- // type: [String, Object as PropType<Exclude<FloatingMenuPluginProps['pluginKey'], string>>],
184
- type: null,
185
- default: 'floatingMenu',
186
- },
187
- editor: {
188
- type: Object,
189
- required: true,
190
- },
191
- tippyOptions: {
192
- type: Object,
193
- default: () => ({}),
194
- },
195
- shouldShow: {
196
- type: Function,
197
- default: null,
198
- },
199
- },
200
- setup(props, { slots }) {
201
- const root = vue.ref(null);
202
- vue.onMounted(() => {
203
- const { pluginKey, editor, tippyOptions, shouldShow, } = props;
204
- editor.registerPlugin(extensionFloatingMenu.FloatingMenuPlugin({
205
- pluginKey,
206
- editor,
207
- element: root.value,
208
- tippyOptions,
209
- shouldShow,
210
- }));
211
- });
212
- vue.onBeforeUnmount(() => {
213
- const { pluginKey, editor } = props;
214
- editor.unregisterPlugin(pluginKey);
101
+ // src/EditorContent.ts
102
+ var import_vue2 = require("vue");
103
+ var EditorContent = (0, import_vue2.defineComponent)({
104
+ name: "EditorContent",
105
+ props: {
106
+ editor: {
107
+ default: null,
108
+ type: Object
109
+ }
110
+ },
111
+ setup(props) {
112
+ const rootEl = (0, import_vue2.ref)();
113
+ const instance = (0, import_vue2.getCurrentInstance)();
114
+ (0, import_vue2.watchEffect)(() => {
115
+ const editor = props.editor;
116
+ if (editor && editor.options.element && rootEl.value) {
117
+ (0, import_vue2.nextTick)(() => {
118
+ var _a;
119
+ if (!rootEl.value || !((_a = editor.options.element) == null ? void 0 : _a.firstChild)) {
120
+ return;
121
+ }
122
+ const element = (0, import_vue2.unref)(rootEl.value);
123
+ rootEl.value.append(...editor.options.element.childNodes);
124
+ editor.contentComponent = instance.ctx._;
125
+ if (instance) {
126
+ editor.appContext = {
127
+ ...instance.appContext,
128
+ // Vue internally uses prototype chain to forward/shadow injects across the entire component chain
129
+ // so don't use object spread operator or 'Object.assign' and just set `provides` as is on editor's appContext
130
+ // @ts-expect-error forward instance's 'provides' into appContext
131
+ provides: instance.provides
132
+ };
133
+ }
134
+ editor.setOptions({
135
+ element
136
+ });
137
+ editor.createNodeViews();
215
138
  });
216
- return () => { var _a; return vue.h('div', { ref: root }, (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)); };
217
- },
139
+ }
140
+ });
141
+ (0, import_vue2.onBeforeUnmount)(() => {
142
+ const editor = props.editor;
143
+ if (!editor) {
144
+ return;
145
+ }
146
+ editor.contentComponent = null;
147
+ editor.appContext = null;
148
+ });
149
+ return { rootEl };
150
+ },
151
+ render() {
152
+ return (0, import_vue2.h)("div", {
153
+ ref: (el) => {
154
+ this.rootEl = el;
155
+ }
156
+ });
157
+ }
218
158
  });
219
159
 
220
- const NodeViewContent = vue.defineComponent({
221
- name: 'NodeViewContent',
222
- props: {
223
- as: {
224
- type: String,
225
- default: 'div',
226
- },
227
- },
228
- render() {
229
- return vue.h(this.as, {
230
- style: {
231
- whiteSpace: 'pre-wrap',
232
- },
233
- 'data-node-view-content': '',
234
- });
235
- },
160
+ // src/NodeViewContent.ts
161
+ var import_vue3 = require("vue");
162
+ var NodeViewContent = (0, import_vue3.defineComponent)({
163
+ name: "NodeViewContent",
164
+ props: {
165
+ as: {
166
+ type: String,
167
+ default: "div"
168
+ }
169
+ },
170
+ render() {
171
+ return (0, import_vue3.h)(this.as, {
172
+ style: {
173
+ whiteSpace: "pre-wrap"
174
+ },
175
+ "data-node-view-content": ""
176
+ });
177
+ }
236
178
  });
237
179
 
238
- const NodeViewWrapper = vue.defineComponent({
239
- name: 'NodeViewWrapper',
240
- props: {
241
- as: {
242
- type: String,
243
- default: 'div',
180
+ // src/NodeViewWrapper.ts
181
+ var import_vue4 = require("vue");
182
+ var NodeViewWrapper = (0, import_vue4.defineComponent)({
183
+ name: "NodeViewWrapper",
184
+ props: {
185
+ as: {
186
+ type: String,
187
+ default: "div"
188
+ }
189
+ },
190
+ inject: ["onDragStart", "decorationClasses"],
191
+ render() {
192
+ var _a, _b;
193
+ return (0, import_vue4.h)(
194
+ this.as,
195
+ {
196
+ // @ts-ignore
197
+ class: this.decorationClasses,
198
+ style: {
199
+ whiteSpace: "normal"
244
200
  },
245
- },
246
- inject: ['onDragStart', 'decorationClasses'],
247
- render() {
248
- var _a, _b;
249
- return vue.h(this.as, {
250
- // @ts-ignore
251
- class: this.decorationClasses,
252
- style: {
253
- whiteSpace: 'normal',
254
- },
255
- 'data-node-view-wrapper': '',
256
- // @ts-ignore (https://github.com/vuejs/vue-next/issues/3031)
257
- onDragstart: this.onDragStart,
258
- }, (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a));
259
- },
201
+ "data-node-view-wrapper": "",
202
+ // @ts-ignore (https://github.com/vuejs/vue-next/issues/3031)
203
+ onDragstart: this.onDragStart
204
+ },
205
+ (_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a)
206
+ );
207
+ }
260
208
  });
261
209
 
262
- const useEditor = (options = {}) => {
263
- const editor = vue.shallowRef();
264
- vue.onMounted(() => {
265
- editor.value = new Editor(options);
266
- });
267
- vue.onBeforeUnmount(() => {
268
- var _a;
269
- (_a = editor.value) === null || _a === void 0 ? void 0 : _a.destroy();
270
- });
271
- return editor;
210
+ // src/useEditor.ts
211
+ var import_vue5 = require("vue");
212
+ var useEditor = (options = {}) => {
213
+ const editor = (0, import_vue5.shallowRef)();
214
+ (0, import_vue5.onMounted)(() => {
215
+ editor.value = new Editor(options);
216
+ });
217
+ (0, import_vue5.onBeforeUnmount)(() => {
218
+ var _a, _b, _c;
219
+ const nodes = (_a = editor.value) == null ? void 0 : _a.options.element;
220
+ const newEl = nodes == null ? void 0 : nodes.cloneNode(true);
221
+ (_b = nodes == null ? void 0 : nodes.parentNode) == null ? void 0 : _b.replaceChild(newEl, nodes);
222
+ (_c = editor.value) == null ? void 0 : _c.destroy();
223
+ });
224
+ return editor;
272
225
  };
273
226
 
274
- /**
275
- * This class is used to render Vue components inside the editor.
276
- */
277
- class VueRenderer {
278
- constructor(component, { props = {}, editor }) {
279
- this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString();
280
- this.editor = editor;
281
- this.component = vue.markRaw(component);
282
- this.el = document.createElement('div');
283
- this.props = vue.reactive(props);
284
- this.renderedComponent = this.renderComponent();
227
+ // src/VueMarkViewRenderer.ts
228
+ var import_core2 = require("@tiptap/core");
229
+ var import_vue7 = require("vue");
230
+
231
+ // src/VueRenderer.ts
232
+ var import_vue6 = require("vue");
233
+ var VueRenderer = class {
234
+ constructor(component, { props = {}, editor }) {
235
+ this.editor = editor;
236
+ this.component = (0, import_vue6.markRaw)(component);
237
+ this.el = document.createElement("div");
238
+ this.props = (0, import_vue6.reactive)(props);
239
+ this.renderedComponent = this.renderComponent();
240
+ }
241
+ get element() {
242
+ return this.renderedComponent.el;
243
+ }
244
+ get ref() {
245
+ var _a, _b, _c, _d;
246
+ if ((_b = (_a = this.renderedComponent.vNode) == null ? void 0 : _a.component) == null ? void 0 : _b.exposed) {
247
+ return this.renderedComponent.vNode.component.exposed;
285
248
  }
286
- get element() {
287
- return this.renderedComponent.el;
249
+ return (_d = (_c = this.renderedComponent.vNode) == null ? void 0 : _c.component) == null ? void 0 : _d.proxy;
250
+ }
251
+ renderComponent() {
252
+ let vNode = (0, import_vue6.h)(this.component, this.props);
253
+ if (this.editor.appContext) {
254
+ vNode.appContext = this.editor.appContext;
288
255
  }
289
- renderComponent() {
290
- let vNode = vue.h(this.component, this.props);
291
- if (typeof document !== 'undefined' && this.el) {
292
- vue.render(vNode, this.el);
293
- }
294
- const destroy = () => {
295
- if (this.el) {
296
- vue.render(null, this.el);
297
- }
298
- this.el = null;
299
- vNode = null;
300
- };
301
- return { vNode, destroy, el: this.el ? this.el.firstElementChild : null };
256
+ if (typeof document !== "undefined" && this.el) {
257
+ (0, import_vue6.render)(vNode, this.el);
302
258
  }
303
- updateProps(props = {}) {
304
- Object
305
- .entries(props)
306
- .forEach(([key, value]) => {
307
- this.props[key] = value;
308
- });
309
- this.renderComponent();
259
+ const destroy = () => {
260
+ if (this.el) {
261
+ (0, import_vue6.render)(null, this.el);
262
+ }
263
+ this.el = null;
264
+ vNode = null;
265
+ };
266
+ return { vNode, destroy, el: this.el ? this.el.firstElementChild : null };
267
+ }
268
+ updateProps(props = {}) {
269
+ Object.entries(props).forEach(([key, value]) => {
270
+ this.props[key] = value;
271
+ });
272
+ this.renderComponent();
273
+ }
274
+ destroy() {
275
+ this.renderedComponent.destroy();
276
+ }
277
+ };
278
+
279
+ // src/VueMarkViewRenderer.ts
280
+ var markViewProps = {
281
+ editor: {
282
+ type: Object,
283
+ required: true
284
+ },
285
+ mark: {
286
+ type: Object,
287
+ required: true
288
+ },
289
+ extension: {
290
+ type: Object,
291
+ required: true
292
+ },
293
+ inline: {
294
+ type: Boolean,
295
+ required: true
296
+ },
297
+ view: {
298
+ type: Object,
299
+ required: true
300
+ },
301
+ updateAttributes: {
302
+ type: Function,
303
+ required: true
304
+ },
305
+ HTMLAttributes: {
306
+ type: Object,
307
+ required: true
308
+ }
309
+ };
310
+ var MarkViewContent = (0, import_vue7.defineComponent)({
311
+ name: "MarkViewContent",
312
+ props: {
313
+ as: {
314
+ type: String,
315
+ default: "span"
310
316
  }
311
- destroy() {
312
- this.renderedComponent.destroy();
317
+ },
318
+ render() {
319
+ return (0, import_vue7.h)(this.as, {
320
+ style: {
321
+ whiteSpace: "inherit"
322
+ },
323
+ "data-mark-view-content": ""
324
+ });
325
+ }
326
+ });
327
+ var VueMarkView = class extends import_core2.MarkView {
328
+ constructor(component, props, options) {
329
+ super(component, props, options);
330
+ const componentProps = { ...props, updateAttributes: this.updateAttributes.bind(this) };
331
+ const extendedComponent = (0, import_vue7.defineComponent)({
332
+ extends: { ...component },
333
+ props: Object.keys(componentProps),
334
+ template: this.component.template,
335
+ setup: (reactiveProps) => {
336
+ var _a;
337
+ return (_a = component.setup) == null ? void 0 : _a.call(component, reactiveProps, {
338
+ expose: () => void 0
339
+ });
340
+ },
341
+ // Add support for scoped styles
342
+ __scopeId: component.__scopeId,
343
+ __cssModules: component.__cssModules,
344
+ __name: component.__name,
345
+ __file: component.__file
346
+ });
347
+ this.renderer = new VueRenderer(extendedComponent, {
348
+ editor: this.editor,
349
+ props: componentProps
350
+ });
351
+ }
352
+ get dom() {
353
+ return this.renderer.element;
354
+ }
355
+ get contentDOM() {
356
+ return this.dom.querySelector("[data-mark-view-content]");
357
+ }
358
+ updateAttributes(attrs) {
359
+ const unproxiedMark = (0, import_vue7.toRaw)(this.mark);
360
+ super.updateAttributes(attrs, unproxiedMark);
361
+ }
362
+ destroy() {
363
+ this.renderer.destroy();
364
+ }
365
+ };
366
+ function VueMarkViewRenderer(component, options = {}) {
367
+ return (props) => {
368
+ if (!props.editor.contentComponent) {
369
+ return {};
313
370
  }
371
+ return new VueMarkView(component, props, options);
372
+ };
314
373
  }
315
374
 
316
- const nodeViewProps = {
317
- editor: {
318
- type: Object,
319
- required: true,
320
- },
321
- node: {
322
- type: Object,
323
- required: true,
324
- },
325
- decorations: {
326
- type: Object,
327
- required: true,
328
- },
329
- selected: {
330
- type: Boolean,
331
- required: true,
332
- },
333
- extension: {
334
- type: Object,
335
- required: true,
336
- },
337
- getPos: {
338
- type: Function,
339
- required: true,
340
- },
341
- updateAttributes: {
342
- type: Function,
343
- required: true,
344
- },
345
- deleteNode: {
346
- type: Function,
347
- required: true,
348
- },
375
+ // src/VueNodeViewRenderer.ts
376
+ var import_core3 = require("@tiptap/core");
377
+ var import_vue8 = require("vue");
378
+ var nodeViewProps = {
379
+ editor: {
380
+ type: Object,
381
+ required: true
382
+ },
383
+ node: {
384
+ type: Object,
385
+ required: true
386
+ },
387
+ decorations: {
388
+ type: Object,
389
+ required: true
390
+ },
391
+ selected: {
392
+ type: Boolean,
393
+ required: true
394
+ },
395
+ extension: {
396
+ type: Object,
397
+ required: true
398
+ },
399
+ getPos: {
400
+ type: Function,
401
+ required: true
402
+ },
403
+ updateAttributes: {
404
+ type: Function,
405
+ required: true
406
+ },
407
+ deleteNode: {
408
+ type: Function,
409
+ required: true
410
+ },
411
+ view: {
412
+ type: Object,
413
+ required: true
414
+ },
415
+ innerDecorations: {
416
+ type: Object,
417
+ required: true
418
+ },
419
+ HTMLAttributes: {
420
+ type: Object,
421
+ required: true
422
+ }
349
423
  };
350
- class VueNodeView extends core.NodeView {
351
- mount() {
352
- const props = {
353
- editor: this.editor,
354
- node: this.node,
355
- decorations: this.decorations,
356
- selected: false,
357
- extension: this.extension,
358
- getPos: () => this.getPos(),
359
- updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
360
- deleteNode: () => this.deleteNode(),
361
- };
362
- const onDragStart = this.onDragStart.bind(this);
363
- this.decorationClasses = vue.ref(this.getDecorationClasses());
364
- const extendedComponent = vue.defineComponent({
365
- extends: { ...this.component },
366
- props: Object.keys(props),
367
- template: this.component.template,
368
- setup: reactiveProps => {
369
- var _a, _b;
370
- vue.provide('onDragStart', onDragStart);
371
- vue.provide('decorationClasses', this.decorationClasses);
372
- return (_b = (_a = this.component).setup) === null || _b === void 0 ? void 0 : _b.call(_a, reactiveProps, {
373
- expose: () => undefined,
374
- });
375
- },
376
- // add support for scoped styles
377
- // @ts-ignore
378
- // eslint-disable-next-line
379
- __scopeId: this.component.__scopeId,
380
- // add support for CSS Modules
381
- // @ts-ignore
382
- // eslint-disable-next-line
383
- __cssModules: this.component.__cssModules,
384
- // add support for vue devtools
385
- // @ts-ignore
386
- // eslint-disable-next-line
387
- __name: this.component.__name,
388
- // @ts-ignore
389
- // eslint-disable-next-line
390
- __file: this.component.__file,
391
- });
392
- this.renderer = new VueRenderer(extendedComponent, {
393
- editor: this.editor,
394
- props,
424
+ var VueNodeView = class extends import_core3.NodeView {
425
+ mount() {
426
+ const props = {
427
+ editor: this.editor,
428
+ node: this.node,
429
+ decorations: this.decorations,
430
+ innerDecorations: this.innerDecorations,
431
+ view: this.view,
432
+ selected: false,
433
+ extension: this.extension,
434
+ HTMLAttributes: this.HTMLAttributes,
435
+ getPos: () => this.getPos(),
436
+ updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
437
+ deleteNode: () => this.deleteNode()
438
+ };
439
+ const onDragStart = this.onDragStart.bind(this);
440
+ this.decorationClasses = (0, import_vue8.ref)(this.getDecorationClasses());
441
+ const extendedComponent = (0, import_vue8.defineComponent)({
442
+ extends: { ...this.component },
443
+ props: Object.keys(props),
444
+ template: this.component.template,
445
+ setup: (reactiveProps) => {
446
+ var _a, _b;
447
+ (0, import_vue8.provide)("onDragStart", onDragStart);
448
+ (0, import_vue8.provide)("decorationClasses", this.decorationClasses);
449
+ return (_b = (_a = this.component).setup) == null ? void 0 : _b.call(_a, reactiveProps, {
450
+ expose: () => void 0
395
451
  });
452
+ },
453
+ // add support for scoped styles
454
+ // @ts-ignore
455
+ // eslint-disable-next-line
456
+ __scopeId: this.component.__scopeId,
457
+ // add support for CSS Modules
458
+ // @ts-ignore
459
+ // eslint-disable-next-line
460
+ __cssModules: this.component.__cssModules,
461
+ // add support for vue devtools
462
+ // @ts-ignore
463
+ // eslint-disable-next-line
464
+ __name: this.component.__name,
465
+ // @ts-ignore
466
+ // eslint-disable-next-line
467
+ __file: this.component.__file
468
+ });
469
+ this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
470
+ this.editor.on("selectionUpdate", this.handleSelectionUpdate);
471
+ this.renderer = new VueRenderer(extendedComponent, {
472
+ editor: this.editor,
473
+ props
474
+ });
475
+ }
476
+ /**
477
+ * Return the DOM element.
478
+ * This is the element that will be used to display the node view.
479
+ */
480
+ get dom() {
481
+ if (!this.renderer.element || !this.renderer.element.hasAttribute("data-node-view-wrapper")) {
482
+ throw Error("Please use the NodeViewWrapper component for your node view.");
396
483
  }
397
- get dom() {
398
- if (!this.renderer.element || !this.renderer.element.hasAttribute('data-node-view-wrapper')) {
399
- throw Error('Please use the NodeViewWrapper component for your node view.');
400
- }
401
- return this.renderer.element;
484
+ return this.renderer.element;
485
+ }
486
+ /**
487
+ * Return the content DOM element.
488
+ * This is the element that will be used to display the rich-text content of the node.
489
+ */
490
+ get contentDOM() {
491
+ if (this.node.isLeaf) {
492
+ return null;
402
493
  }
403
- get contentDOM() {
404
- if (this.node.isLeaf) {
405
- return null;
406
- }
407
- const contentElement = this.dom.querySelector('[data-node-view-content]');
408
- return (contentElement || this.dom);
494
+ return this.dom.querySelector("[data-node-view-content]");
495
+ }
496
+ /**
497
+ * On editor selection update, check if the node is selected.
498
+ * If it is, call `selectNode`, otherwise call `deselectNode`.
499
+ */
500
+ handleSelectionUpdate() {
501
+ const { from, to } = this.editor.state.selection;
502
+ const pos = this.getPos();
503
+ if (typeof pos !== "number") {
504
+ return;
409
505
  }
410
- update(node, decorations) {
411
- const updateProps = (props) => {
412
- this.decorationClasses.value = this.getDecorationClasses();
413
- this.renderer.updateProps(props);
414
- };
415
- if (typeof this.options.update === 'function') {
416
- const oldNode = this.node;
417
- const oldDecorations = this.decorations;
418
- this.node = node;
419
- this.decorations = decorations;
420
- return this.options.update({
421
- oldNode,
422
- oldDecorations,
423
- newNode: node,
424
- newDecorations: decorations,
425
- updateProps: () => updateProps({ node, decorations }),
426
- });
427
- }
428
- if (node.type !== this.node.type) {
429
- return false;
430
- }
431
- if (node === this.node && this.decorations === decorations) {
432
- return true;
433
- }
434
- this.node = node;
435
- this.decorations = decorations;
436
- updateProps({ node, decorations });
437
- return true;
506
+ if (from <= pos && to >= pos + this.node.nodeSize) {
507
+ if (this.renderer.props.selected) {
508
+ return;
509
+ }
510
+ this.selectNode();
511
+ } else {
512
+ if (!this.renderer.props.selected) {
513
+ return;
514
+ }
515
+ this.deselectNode();
438
516
  }
439
- selectNode() {
440
- this.renderer.updateProps({
441
- selected: true,
442
- });
443
- if (this.renderer.element) {
444
- this.renderer.element.classList.add('ProseMirror-selectednode');
445
- }
517
+ }
518
+ /**
519
+ * On update, update the React component.
520
+ * To prevent unnecessary updates, the `update` option can be used.
521
+ */
522
+ update(node, decorations, innerDecorations) {
523
+ const rerenderComponent = (props) => {
524
+ this.decorationClasses.value = this.getDecorationClasses();
525
+ this.renderer.updateProps(props);
526
+ };
527
+ if (typeof this.options.update === "function") {
528
+ const oldNode = this.node;
529
+ const oldDecorations = this.decorations;
530
+ const oldInnerDecorations = this.innerDecorations;
531
+ this.node = node;
532
+ this.decorations = decorations;
533
+ this.innerDecorations = innerDecorations;
534
+ return this.options.update({
535
+ oldNode,
536
+ oldDecorations,
537
+ newNode: node,
538
+ newDecorations: decorations,
539
+ oldInnerDecorations,
540
+ innerDecorations,
541
+ updateProps: () => rerenderComponent({ node, decorations, innerDecorations })
542
+ });
446
543
  }
447
- deselectNode() {
448
- this.renderer.updateProps({
449
- selected: false,
450
- });
451
- if (this.renderer.element) {
452
- this.renderer.element.classList.remove('ProseMirror-selectednode');
453
- }
544
+ if (node.type !== this.node.type) {
545
+ return false;
454
546
  }
455
- getDecorationClasses() {
456
- return (this.decorations
457
- // @ts-ignore
458
- .map(item => item.type.attrs.class)
459
- .flat()
460
- .join(' '));
547
+ if (node === this.node && this.decorations === decorations && this.innerDecorations === innerDecorations) {
548
+ return true;
461
549
  }
462
- destroy() {
463
- this.renderer.destroy();
550
+ this.node = node;
551
+ this.decorations = decorations;
552
+ this.innerDecorations = innerDecorations;
553
+ rerenderComponent({ node, decorations, innerDecorations });
554
+ return true;
555
+ }
556
+ /**
557
+ * Select the node.
558
+ * Add the `selected` prop and the `ProseMirror-selectednode` class.
559
+ */
560
+ selectNode() {
561
+ this.renderer.updateProps({
562
+ selected: true
563
+ });
564
+ if (this.renderer.element) {
565
+ this.renderer.element.classList.add("ProseMirror-selectednode");
464
566
  }
465
- }
567
+ }
568
+ /**
569
+ * Deselect the node.
570
+ * Remove the `selected` prop and the `ProseMirror-selectednode` class.
571
+ */
572
+ deselectNode() {
573
+ this.renderer.updateProps({
574
+ selected: false
575
+ });
576
+ if (this.renderer.element) {
577
+ this.renderer.element.classList.remove("ProseMirror-selectednode");
578
+ }
579
+ }
580
+ getDecorationClasses() {
581
+ return this.decorations.map((item) => item.type.attrs.class).flat().join(" ");
582
+ }
583
+ destroy() {
584
+ this.renderer.destroy();
585
+ this.editor.off("selectionUpdate", this.handleSelectionUpdate);
586
+ }
587
+ };
466
588
  function VueNodeViewRenderer(component, options) {
467
- return (props) => {
468
- // try to get the parent component
469
- // this is important for vue devtools to show the component hierarchy correctly
470
- // maybe it’s `undefined` because <editor-content> isn’t rendered yet
471
- if (!props.editor.contentComponent) {
472
- return {};
473
- }
474
- return new VueNodeView(component, props, options);
475
- };
589
+ return (props) => {
590
+ if (!props.editor.contentComponent) {
591
+ return {};
592
+ }
593
+ const normalizedComponent = typeof component === "function" && "__vccOpts" in component ? component.__vccOpts : component;
594
+ return new VueNodeView(normalizedComponent, props, options);
595
+ };
476
596
  }
477
597
 
478
- exports.BubbleMenu = BubbleMenu;
479
- exports.Editor = Editor;
480
- exports.EditorContent = EditorContent;
481
- exports.FloatingMenu = FloatingMenu;
482
- exports.NodeViewContent = NodeViewContent;
483
- exports.NodeViewWrapper = NodeViewWrapper;
484
- exports.VueNodeViewRenderer = VueNodeViewRenderer;
485
- exports.VueRenderer = VueRenderer;
486
- exports.nodeViewProps = nodeViewProps;
487
- exports.useEditor = useEditor;
488
- Object.keys(core).forEach(function (k) {
489
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
490
- enumerable: true,
491
- get: function () { return core[k]; }
492
- });
598
+ // src/index.ts
599
+ __reExport(index_exports, require("@tiptap/core"), module.exports);
600
+ // Annotate the CommonJS export names for ESM import in node:
601
+ 0 && (module.exports = {
602
+ Editor,
603
+ EditorContent,
604
+ MarkViewContent,
605
+ NodeViewContent,
606
+ NodeViewWrapper,
607
+ VueMarkView,
608
+ VueMarkViewRenderer,
609
+ VueNodeViewRenderer,
610
+ VueRenderer,
611
+ markViewProps,
612
+ nodeViewProps,
613
+ useEditor,
614
+ ...require("@tiptap/core")
493
615
  });
494
- //# sourceMappingURL=index.cjs.map
616
+ //# sourceMappingURL=index.cjs.map