@tiptap/vue-2 2.0.0-beta.19 → 2.0.0-beta.195

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/README.md CHANGED
@@ -7,8 +7,8 @@
7
7
  ## Introduction
8
8
  tiptap is a headless wrapper around [ProseMirror](https://ProseMirror.net) – a toolkit for building rich text WYSIWYG editors, which is already in use at many well-known companies such as *New York Times*, *The Guardian* or *Atlassian*.
9
9
 
10
- ## Offical Documentation
10
+ ## Official Documentation
11
11
  Documentation can be found on the [tiptap website](https://tiptap.dev).
12
12
 
13
13
  ## License
14
- tiptap is open sourced software licensed under the [MIT license](https://github.com/ueberdosis/tiptap-next/blob/main/LICENSE.md).
14
+ tiptap is open sourced software licensed under the [MIT license](https://github.com/ueberdosis/tiptap/blob/main/LICENSE.md).
@@ -1,5 +1,9 @@
1
- import Vue from 'vue';
2
- export declare const BubbleMenu: import("vue/types/vue").ExtendedVue<Vue, unknown, unknown, unknown, {
3
- editor: import("@tiptap/core").Editor;
4
- tippyOptions: {} | undefined;
5
- }>;
1
+ import { BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
2
+ import Vue, { Component } from 'vue';
3
+ export interface BubbleMenuInterface extends Vue {
4
+ pluginKey: BubbleMenuPluginProps['pluginKey'];
5
+ editor: BubbleMenuPluginProps['editor'];
6
+ tippyOptions: BubbleMenuPluginProps['tippyOptions'];
7
+ shouldShow: BubbleMenuPluginProps['shouldShow'];
8
+ }
9
+ export declare const BubbleMenu: Component;
@@ -1,5 +1,6 @@
1
- import Vue from 'vue';
1
+ import Vue, { Component } from 'vue';
2
2
  import { Editor } from './Editor';
3
- export declare const EditorContent: import("vue/types/vue").ExtendedVue<Vue, unknown, unknown, unknown, {
3
+ export interface EditorContentInterface extends Vue {
4
4
  editor: Editor;
5
- }>;
5
+ }
6
+ export declare const EditorContent: Component;
@@ -1,5 +1,9 @@
1
- import Vue from 'vue';
2
- export declare const FloatingMenu: import("vue/types/vue").ExtendedVue<Vue, unknown, unknown, unknown, {
3
- editor: import("@tiptap/core").Editor;
4
- tippyOptions: {} | undefined;
5
- }>;
1
+ import { FloatingMenuPluginProps } from '@tiptap/extension-floating-menu';
2
+ import Vue, { Component } from 'vue';
3
+ export interface FloatingMenuInterface extends Vue {
4
+ pluginKey: FloatingMenuPluginProps['pluginKey'];
5
+ tippyOptions: FloatingMenuPluginProps['tippyOptions'];
6
+ editor: FloatingMenuPluginProps['editor'];
7
+ shouldShow: FloatingMenuPluginProps['shouldShow'];
8
+ }
9
+ export declare const FloatingMenu: Component;
@@ -1,4 +1,5 @@
1
- import Vue from 'vue';
2
- export declare const NodeViewContent: import("vue/types/vue").ExtendedVue<Vue, unknown, unknown, unknown, {
1
+ import Vue, { Component } from 'vue';
2
+ export interface NodeViewContentInterface extends Vue {
3
3
  as: string;
4
- }>;
4
+ }
5
+ export declare const NodeViewContent: Component;
@@ -1,4 +1,9 @@
1
- import Vue from 'vue';
2
- export declare const NodeViewWrapper: import("vue/types/vue").ExtendedVue<Vue, unknown, unknown, unknown, {
1
+ import Vue, { Component } from 'vue';
2
+ export interface NodeViewWrapperInterface extends Vue {
3
3
  as: string;
4
- }>;
4
+ decorationClasses: {
5
+ value: string;
6
+ };
7
+ onDragStart: Function;
8
+ }
9
+ export declare const NodeViewWrapper: Component;
@@ -1,43 +1,49 @@
1
- import { NodeViewRenderer } from '@tiptap/core';
2
- import { Decoration } from 'prosemirror-view';
1
+ import { NodeViewRenderer, NodeViewRendererOptions } from '@tiptap/core';
3
2
  import { Node as ProseMirrorNode } from 'prosemirror-model';
3
+ import { Decoration } from 'prosemirror-view';
4
4
  import Vue from 'vue';
5
- import { VueConstructor, PropType } from 'vue/types/umd';
5
+ import { PropType, VueConstructor } from 'vue/types/umd';
6
6
  export declare const nodeViewProps: {
7
7
  editor: {
8
8
  type: PropType<import("@tiptap/core").Editor>;
9
- required: boolean;
9
+ required: true;
10
10
  };
11
11
  node: {
12
- type: PropType<ProseMirrorNode<any>>;
13
- required: boolean;
12
+ type: PropType<ProseMirrorNode>;
13
+ required: true;
14
14
  };
15
15
  decorations: {
16
- type: PropType<Decoration<{
17
- [key: string]: any;
18
- }>[]>;
19
- required: boolean;
16
+ type: PropType<Decoration[]>;
17
+ required: true;
20
18
  };
21
19
  selected: {
22
20
  type: PropType<boolean>;
23
- required: boolean;
21
+ required: true;
24
22
  };
25
23
  extension: {
26
- type: PropType<import("@tiptap/core").Node<any>>;
27
- required: boolean;
24
+ type: PropType<import("@tiptap/core").Node<any, any>>;
25
+ required: true;
28
26
  };
29
27
  getPos: {
30
28
  type: PropType<() => number>;
31
- required: boolean;
29
+ required: true;
32
30
  };
33
31
  updateAttributes: {
34
- type: PropType<(attributes: import("@tiptap/core").AnyObject) => void>;
35
- required: boolean;
32
+ type: PropType<(attributes: Record<string, any>) => void>;
33
+ required: true;
34
+ };
35
+ deleteNode: {
36
+ type: PropType<() => void>;
37
+ required: true;
36
38
  };
37
39
  };
38
- interface VueNodeViewRendererOptions {
39
- stopEvent: ((event: Event) => boolean) | null;
40
- update: ((node: ProseMirrorNode, decorations: Decoration[]) => boolean) | null;
40
+ export interface VueNodeViewRendererOptions extends NodeViewRendererOptions {
41
+ update: ((props: {
42
+ oldNode: ProseMirrorNode;
43
+ oldDecorations: Decoration[];
44
+ newNode: ProseMirrorNode;
45
+ newDecorations: Decoration[];
46
+ updateProps: () => void;
47
+ }) => boolean) | null;
41
48
  }
42
49
  export declare function VueNodeViewRenderer(component: Vue | VueConstructor, options?: Partial<VueNodeViewRendererOptions>): NodeViewRenderer;
43
- export {};
@@ -1,9 +1,9 @@
1
- export * from '@tiptap/core';
2
1
  export * from './BubbleMenu';
3
2
  export { Editor } from './Editor';
4
3
  export * from './EditorContent';
5
4
  export * from './FloatingMenu';
6
- export * from './VueRenderer';
7
- export * from './VueNodeViewRenderer';
8
- export * from './NodeViewWrapper';
9
5
  export * from './NodeViewContent';
6
+ export * from './NodeViewWrapper';
7
+ export * from './VueNodeViewRenderer';
8
+ export * from './VueRenderer';
9
+ export * from '@tiptap/core';
@@ -2,18 +2,22 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var core = require('@tiptap/core');
6
- var Vue = require('vue');
7
5
  var extensionBubbleMenu = require('@tiptap/extension-bubble-menu');
6
+ var core = require('@tiptap/core');
8
7
  var extensionFloatingMenu = require('@tiptap/extension-floating-menu');
8
+ var Vue = require('vue');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
12
12
  var Vue__default = /*#__PURE__*/_interopDefaultLegacy(Vue);
13
13
 
14
- const BubbleMenu = Vue__default['default'].extend({
14
+ const BubbleMenu = {
15
15
  name: 'BubbleMenu',
16
16
  props: {
17
+ pluginKey: {
18
+ type: [String, Object],
19
+ default: 'bubbleMenu',
20
+ },
17
21
  editor: {
18
22
  type: Object,
19
23
  required: true,
@@ -22,6 +26,10 @@ const BubbleMenu = Vue__default['default'].extend({
22
26
  type: Object,
23
27
  default: () => ({}),
24
28
  },
29
+ shouldShow: {
30
+ type: Function,
31
+ default: null,
32
+ },
25
33
  },
26
34
  watch: {
27
35
  editor: {
@@ -32,9 +40,11 @@ const BubbleMenu = Vue__default['default'].extend({
32
40
  }
33
41
  this.$nextTick(() => {
34
42
  editor.registerPlugin(extensionBubbleMenu.BubbleMenuPlugin({
43
+ pluginKey: this.pluginKey,
35
44
  editor,
36
45
  element: this.$el,
37
46
  tippyOptions: this.tippyOptions,
47
+ shouldShow: this.shouldShow,
38
48
  }));
39
49
  });
40
50
  },
@@ -44,9 +54,9 @@ const BubbleMenu = Vue__default['default'].extend({
44
54
  return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default);
45
55
  },
46
56
  beforeDestroy() {
47
- this.editor.unregisterPlugin(extensionBubbleMenu.BubbleMenuPluginKey);
57
+ this.editor.unregisterPlugin(this.pluginKey);
48
58
  },
49
- });
59
+ };
50
60
 
51
61
  class Editor extends core.Editor {
52
62
  constructor() {
@@ -55,7 +65,7 @@ class Editor extends core.Editor {
55
65
  }
56
66
  }
57
67
 
58
- const EditorContent = Vue__default['default'].extend({
68
+ const EditorContent = {
59
69
  name: 'EditorContent',
60
70
  props: {
61
71
  editor: {
@@ -73,7 +83,7 @@ const EditorContent = Vue__default['default'].extend({
73
83
  if (!element || !editor.options.element.firstChild) {
74
84
  return;
75
85
  }
76
- element.appendChild(editor.options.element.firstChild);
86
+ element.append(...editor.options.element.childNodes);
77
87
  editor.contentComponent = this;
78
88
  editor.setOptions({
79
89
  element,
@@ -89,6 +99,9 @@ const EditorContent = Vue__default['default'].extend({
89
99
  },
90
100
  beforeDestroy() {
91
101
  const { editor } = this;
102
+ if (!editor) {
103
+ return;
104
+ }
92
105
  if (!editor.isDestroyed) {
93
106
  editor.view.setProps({
94
107
  nodeViews: {},
@@ -99,16 +112,20 @@ const EditorContent = Vue__default['default'].extend({
99
112
  return;
100
113
  }
101
114
  const newElement = document.createElement('div');
102
- newElement.appendChild(editor.options.element.firstChild);
115
+ newElement.append(...editor.options.element.childNodes);
103
116
  editor.setOptions({
104
117
  element: newElement,
105
118
  });
106
119
  },
107
- });
120
+ };
108
121
 
109
- const FloatingMenu = Vue__default['default'].extend({
122
+ const FloatingMenu = {
110
123
  name: 'FloatingMenu',
111
124
  props: {
125
+ pluginKey: {
126
+ type: [String, Object],
127
+ default: 'floatingMenu',
128
+ },
112
129
  editor: {
113
130
  type: Object,
114
131
  required: true,
@@ -117,6 +134,10 @@ const FloatingMenu = Vue__default['default'].extend({
117
134
  type: Object,
118
135
  default: () => ({}),
119
136
  },
137
+ shouldShow: {
138
+ type: Function,
139
+ default: null,
140
+ },
120
141
  },
121
142
  watch: {
122
143
  editor: {
@@ -127,9 +148,11 @@ const FloatingMenu = Vue__default['default'].extend({
127
148
  }
128
149
  this.$nextTick(() => {
129
150
  editor.registerPlugin(extensionFloatingMenu.FloatingMenuPlugin({
151
+ pluginKey: this.pluginKey,
130
152
  editor,
131
153
  element: this.$el,
132
154
  tippyOptions: this.tippyOptions,
155
+ shouldShow: this.shouldShow,
133
156
  }));
134
157
  });
135
158
  },
@@ -139,31 +162,77 @@ const FloatingMenu = Vue__default['default'].extend({
139
162
  return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default);
140
163
  },
141
164
  beforeDestroy() {
142
- this.editor.unregisterPlugin(extensionFloatingMenu.FloatingMenuPluginKey);
165
+ this.editor.unregisterPlugin(this.pluginKey);
143
166
  },
144
- });
167
+ };
168
+
169
+ const NodeViewContent = {
170
+ props: {
171
+ as: {
172
+ type: String,
173
+ default: 'div',
174
+ },
175
+ },
176
+ render(createElement) {
177
+ return createElement(this.as, {
178
+ style: {
179
+ whiteSpace: 'pre-wrap',
180
+ },
181
+ attrs: {
182
+ 'data-node-view-content': '',
183
+ },
184
+ });
185
+ },
186
+ };
187
+
188
+ const NodeViewWrapper = {
189
+ props: {
190
+ as: {
191
+ type: String,
192
+ default: 'div',
193
+ },
194
+ },
195
+ inject: ['onDragStart', 'decorationClasses'],
196
+ render(createElement) {
197
+ return createElement(this.as, {
198
+ class: this.decorationClasses.value,
199
+ style: {
200
+ whiteSpace: 'normal',
201
+ },
202
+ attrs: {
203
+ 'data-node-view-wrapper': '',
204
+ },
205
+ on: {
206
+ dragstart: this.onDragStart,
207
+ },
208
+ }, this.$slots.default);
209
+ },
210
+ };
145
211
 
146
212
  class VueRenderer {
147
213
  constructor(component, props) {
148
- const Component = Vue__default['default'].extend(component);
214
+ const Component = (typeof component === 'function') ? component : Vue__default["default"].extend(component);
149
215
  this.ref = new Component(props).$mount();
150
216
  }
151
217
  get element() {
152
218
  return this.ref.$el;
153
219
  }
154
220
  updateProps(props = {}) {
221
+ var _a, _b, _c;
155
222
  if (!this.ref.$props) {
156
223
  return;
157
224
  }
158
225
  // prevents `Avoid mutating a prop directly` error message
159
- const originalSilent = Vue__default['default'].config.silent;
160
- Vue__default['default'].config.silent = true;
226
+ // Fix: `VueNodeViewRenderer` change vue Constructor `config.silent` not working
227
+ const currentVueConstructor = (_c = (_b = (_a = this.ref.$props.editor) === null || _a === void 0 ? void 0 : _a.contentComponent) === null || _b === void 0 ? void 0 : _b.$options._base) !== null && _c !== void 0 ? _c : Vue__default["default"]; // eslint-disable-line
228
+ const originalSilent = currentVueConstructor.config.silent;
229
+ currentVueConstructor.config.silent = true;
161
230
  Object
162
231
  .entries(props)
163
232
  .forEach(([key, value]) => {
164
233
  this.ref.$props[key] = value;
165
234
  });
166
- Vue__default['default'].config.silent = originalSilent;
235
+ currentVueConstructor.config.silent = originalSilent;
167
236
  }
168
237
  destroy() {
169
238
  this.ref.$destroy();
@@ -199,9 +268,14 @@ const nodeViewProps = {
199
268
  type: Function,
200
269
  required: true,
201
270
  },
271
+ deleteNode: {
272
+ type: Function,
273
+ required: true,
274
+ },
202
275
  };
203
276
  class VueNodeView extends core.NodeView {
204
277
  mount() {
278
+ var _a, _b;
205
279
  const props = {
206
280
  editor: this.editor,
207
281
  node: this.node,
@@ -210,12 +284,15 @@ class VueNodeView extends core.NodeView {
210
284
  extension: this.extension,
211
285
  getPos: () => this.getPos(),
212
286
  updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
287
+ deleteNode: () => this.deleteNode(),
213
288
  };
214
289
  const onDragStart = this.onDragStart.bind(this);
215
- this.decorationClasses = Vue__default['default'].observable({
290
+ this.decorationClasses = Vue__default["default"].observable({
216
291
  value: this.getDecorationClasses(),
217
292
  });
218
- const Component = Vue__default['default']
293
+ // @ts-ignore
294
+ const vue = (_b = (_a = this.editor.contentComponent) === null || _a === void 0 ? void 0 : _a.$options._base) !== null && _b !== void 0 ? _b : Vue__default["default"]; // eslint-disable-line
295
+ const Component = vue
219
296
  .extend(this.component)
220
297
  .extend({
221
298
  props: Object.keys(props),
@@ -242,11 +319,25 @@ class VueNodeView extends core.NodeView {
242
319
  return null;
243
320
  }
244
321
  const contentElement = this.dom.querySelector('[data-node-view-content]');
245
- return contentElement || this.dom;
322
+ return (contentElement || this.dom);
246
323
  }
247
324
  update(node, decorations) {
325
+ const updateProps = (props) => {
326
+ this.decorationClasses.value = this.getDecorationClasses();
327
+ this.renderer.updateProps(props);
328
+ };
248
329
  if (typeof this.options.update === 'function') {
249
- return this.options.update(node, decorations);
330
+ const oldNode = this.node;
331
+ const oldDecorations = this.decorations;
332
+ this.node = node;
333
+ this.decorations = decorations;
334
+ return this.options.update({
335
+ oldNode,
336
+ oldDecorations,
337
+ newNode: node,
338
+ newDecorations: decorations,
339
+ updateProps: () => updateProps({ node, decorations }),
340
+ });
250
341
  }
251
342
  if (node.type !== this.node.type) {
252
343
  return false;
@@ -256,8 +347,7 @@ class VueNodeView extends core.NodeView {
256
347
  }
257
348
  this.node = node;
258
349
  this.decorations = decorations;
259
- this.decorationClasses.value = this.getDecorationClasses();
260
- this.renderer.updateProps({ node, decorations });
350
+ updateProps({ node, decorations });
261
351
  return true;
262
352
  }
263
353
  selectNode() {
@@ -293,51 +383,6 @@ function VueNodeViewRenderer(component, options) {
293
383
  };
294
384
  }
295
385
 
296
- const NodeViewWrapper = Vue__default['default'].extend({
297
- props: {
298
- as: {
299
- type: String,
300
- default: 'div',
301
- },
302
- },
303
- inject: ['onDragStart', 'decorationClasses'],
304
- render(createElement) {
305
- return createElement(this.as, {
306
- // @ts-ignore
307
- class: this.decorationClasses.value,
308
- style: {
309
- whiteSpace: 'normal',
310
- },
311
- attrs: {
312
- 'data-node-view-wrapper': '',
313
- },
314
- on: {
315
- // @ts-ignore
316
- dragstart: this.onDragStart,
317
- },
318
- }, this.$slots.default);
319
- },
320
- });
321
-
322
- const NodeViewContent = Vue__default['default'].extend({
323
- props: {
324
- as: {
325
- type: String,
326
- default: 'div',
327
- },
328
- },
329
- render(createElement) {
330
- return createElement(this.as, {
331
- style: {
332
- whiteSpace: 'pre-wrap',
333
- },
334
- attrs: {
335
- 'data-node-view-content': '',
336
- },
337
- });
338
- },
339
- });
340
-
341
386
  exports.BubbleMenu = BubbleMenu;
342
387
  exports.Editor = Editor;
343
388
  exports.EditorContent = EditorContent;
@@ -350,9 +395,7 @@ exports.nodeViewProps = nodeViewProps;
350
395
  Object.keys(core).forEach(function (k) {
351
396
  if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
352
397
  enumerable: true,
353
- get: function () {
354
- return core[k];
355
- }
398
+ get: function () { return core[k]; }
356
399
  });
357
400
  });
358
401
  //# sourceMappingURL=tiptap-vue-2.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiptap-vue-2.cjs.js","sources":["../src/BubbleMenu.ts","../src/Editor.ts","../src/EditorContent.ts","../src/FloatingMenu.ts","../src/VueRenderer.ts","../src/VueNodeViewRenderer.ts","../src/NodeViewWrapper.ts","../src/NodeViewContent.ts"],"sourcesContent":["import Vue, { PropType } from 'vue'\nimport { BubbleMenuPlugin, BubbleMenuPluginKey, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\n\nexport const BubbleMenu = Vue.extend({\n name: 'BubbleMenu',\n\n props: {\n editor: {\n type: Object as PropType<BubbleMenuPluginProps['editor']>,\n required: true,\n },\n\n tippyOptions: {\n type: Object as PropType<BubbleMenuPluginProps['tippyOptions']>,\n default: () => ({}),\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(editor: BubbleMenuPluginProps['editor']) {\n if (!editor) {\n return\n }\n\n this.$nextTick(() => {\n editor.registerPlugin(BubbleMenuPlugin({\n editor,\n element: this.$el as HTMLElement,\n tippyOptions: this.tippyOptions,\n }))\n })\n },\n },\n },\n\n render(createElement) {\n return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default)\n },\n\n beforeDestroy() {\n this.editor.unregisterPlugin(BubbleMenuPluginKey)\n },\n})\n","import { Editor as CoreEditor } from '@tiptap/core'\nimport Vue from 'vue'\n\nexport class Editor extends CoreEditor {\n public contentComponent: Vue | null = null\n}\n","import Vue, { PropType } from 'vue'\nimport { Editor } from './Editor'\n\nexport const EditorContent = Vue.extend({\n name: 'EditorContent',\n\n props: {\n editor: {\n default: null,\n type: Object as PropType<Editor>,\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(editor: Editor) {\n if (editor && editor.options.element) {\n this.$nextTick(() => {\n const element = this.$el\n\n if (!element || !editor.options.element.firstChild) {\n return\n }\n\n element.appendChild(editor.options.element.firstChild)\n\n editor.contentComponent = this\n\n editor.setOptions({\n element,\n })\n\n editor.createNodeViews()\n })\n }\n },\n },\n },\n\n render(createElement) {\n return createElement('div')\n },\n\n beforeDestroy() {\n const { editor } = this\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.appendChild(editor.options.element.firstChild)\n\n editor.setOptions({\n element: newElement,\n })\n },\n})\n","import Vue, { PropType } from 'vue'\nimport { FloatingMenuPlugin, FloatingMenuPluginKey, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'\n\nexport const FloatingMenu = Vue.extend({\n name: 'FloatingMenu',\n\n props: {\n editor: {\n type: Object as PropType<FloatingMenuPluginProps['editor']>,\n required: true,\n },\n\n tippyOptions: {\n type: Object as PropType<FloatingMenuPluginProps['tippyOptions']>,\n default: () => ({}),\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(editor: FloatingMenuPluginProps['editor']) {\n if (!editor) {\n return\n }\n\n this.$nextTick(() => {\n editor.registerPlugin(FloatingMenuPlugin({\n editor,\n element: this.$el as HTMLElement,\n tippyOptions: this.tippyOptions,\n }))\n })\n },\n },\n },\n\n render(createElement) {\n return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default)\n },\n\n beforeDestroy() {\n this.editor.unregisterPlugin(FloatingMenuPluginKey)\n },\n})\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/umd'\n\nexport class VueRenderer {\n ref!: Vue\n\n constructor(component: Vue | VueConstructor, props: any) {\n const Component = Vue.extend(component)\n\n this.ref = new Component(props).$mount()\n }\n\n get element(): Element {\n return this.ref.$el\n }\n\n updateProps(props: Record<string, any> = {}): void {\n if (!this.ref.$props) {\n return\n }\n\n // prevents `Avoid mutating a prop directly` error message\n const originalSilent = Vue.config.silent\n Vue.config.silent = true\n\n Object\n .entries(props)\n .forEach(([key, value]) => {\n this.ref.$props[key] = value\n })\n\n Vue.config.silent = originalSilent\n }\n\n destroy(): void {\n this.ref.$destroy()\n }\n}\n","import {\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Decoration, NodeView as ProseMirrorNodeView } from 'prosemirror-view'\nimport { Node as ProseMirrorNode } from 'prosemirror-model'\nimport Vue from 'vue'\nimport { VueConstructor, PropType } from 'vue/types/umd'\nimport { Editor } from './Editor'\nimport { VueRenderer } from './VueRenderer'\n\nexport const nodeViewProps = {\n editor: {\n type: Object as PropType<NodeViewProps['editor']>,\n required: true,\n },\n node: {\n type: Object as PropType<NodeViewProps['node']>,\n required: true,\n },\n decorations: {\n type: Object as PropType<NodeViewProps['decorations']>,\n required: true,\n },\n selected: {\n type: Boolean as PropType<NodeViewProps['selected']>,\n required: true,\n },\n extension: {\n type: Object as PropType<NodeViewProps['extension']>,\n required: true,\n },\n getPos: {\n type: Function as PropType<NodeViewProps['getPos']>,\n required: true,\n },\n updateAttributes: {\n type: Function as PropType<NodeViewProps['updateAttributes']>,\n required: true,\n },\n}\n\ninterface VueNodeViewRendererOptions {\n stopEvent: ((event: Event) => boolean) | null,\n update: ((node: ProseMirrorNode, decorations: Decoration[]) => boolean) | null,\n}\n\nclass VueNodeView extends NodeView<(Vue | VueConstructor), Editor> {\n\n renderer!: VueRenderer\n\n decorationClasses!: {\n value: string\n }\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n }\n\n const onDragStart = this.onDragStart.bind(this)\n\n this.decorationClasses = Vue.observable({\n value: this.getDecorationClasses(),\n })\n\n const Component = Vue\n .extend(this.component)\n .extend({\n props: Object.keys(props),\n provide: () => {\n return {\n onDragStart,\n decorationClasses: this.decorationClasses,\n }\n },\n })\n\n this.renderer = new VueRenderer(Component, {\n parent: this.editor.contentComponent,\n propsData: props,\n })\n }\n\n get dom() {\n if (!this.renderer.element.hasAttribute('data-node-view-wrapper')) {\n throw Error('Please use the NodeViewWrapper component for your node view.')\n }\n\n return this.renderer.element\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n const contentElement = this.dom.querySelector('[data-node-view-content]')\n\n return contentElement || this.dom\n }\n\n update(node: ProseMirrorNode, decorations: Decoration[]) {\n if (typeof this.options.update === 'function') {\n return this.options.update(node, decorations)\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n this.decorationClasses.value = this.getDecorationClasses()\n this.renderer.updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n getDecorationClasses() {\n return this.decorations\n // @ts-ignore\n .map(item => item.type.attrs.class)\n .flat()\n .join(' ')\n }\n\n destroy() {\n this.renderer.destroy()\n }\n\n}\n\nexport function VueNodeViewRenderer(component: Vue | VueConstructor, options?: Partial<VueNodeViewRendererOptions>): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new VueNodeView(component, props, options) as ProseMirrorNodeView\n }\n}\n","import Vue from 'vue'\n\nexport const NodeViewWrapper = Vue.extend({\n props: {\n as: {\n type: String,\n default: 'div',\n },\n },\n\n inject: ['onDragStart', 'decorationClasses'],\n\n render(createElement) {\n return createElement(\n this.as, {\n // @ts-ignore\n class: this.decorationClasses.value,\n style: {\n whiteSpace: 'normal',\n },\n attrs: {\n 'data-node-view-wrapper': '',\n },\n on: {\n // @ts-ignore\n dragstart: this.onDragStart,\n },\n },\n this.$slots.default,\n )\n },\n})\n","import Vue from 'vue'\n\nexport const NodeViewContent = Vue.extend({\n props: {\n as: {\n type: String,\n default: 'div',\n },\n },\n\n render(createElement) {\n return createElement(\n this.as, {\n style: {\n whiteSpace: 'pre-wrap',\n },\n attrs: {\n 'data-node-view-content': '',\n },\n },\n )\n },\n})\n"],"names":["Vue","BubbleMenuPlugin","BubbleMenuPluginKey","CoreEditor","FloatingMenuPlugin","FloatingMenuPluginKey","NodeView"],"mappings":"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"}
1
+ {"version":3,"file":"tiptap-vue-2.cjs.js","sources":["../src/BubbleMenu.ts","../src/Editor.ts","../src/EditorContent.ts","../src/FloatingMenu.ts","../src/NodeViewContent.ts","../src/NodeViewWrapper.ts","../src/VueRenderer.ts","../src/VueNodeViewRenderer.ts"],"sourcesContent":["import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\nimport Vue, { Component, PropType } from 'vue'\n\nexport interface BubbleMenuInterface extends Vue {\n pluginKey: BubbleMenuPluginProps['pluginKey'],\n editor: BubbleMenuPluginProps['editor'],\n tippyOptions: BubbleMenuPluginProps['tippyOptions'],\n shouldShow: BubbleMenuPluginProps['shouldShow'],\n}\n\nexport const BubbleMenu: Component = {\n name: 'BubbleMenu',\n\n props: {\n pluginKey: {\n type: [String, Object as PropType<Exclude<BubbleMenuPluginProps['pluginKey'], string>>],\n default: 'bubbleMenu',\n },\n\n editor: {\n type: Object as PropType<BubbleMenuPluginProps['editor']>,\n required: true,\n },\n\n tippyOptions: {\n type: Object as PropType<BubbleMenuPluginProps['tippyOptions']>,\n default: () => ({}),\n },\n\n shouldShow: {\n type: Function as PropType<Exclude<BubbleMenuPluginProps['shouldShow'], null>>,\n default: null,\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(this: BubbleMenuInterface, editor: BubbleMenuPluginProps['editor']) {\n if (!editor) {\n return\n }\n\n this.$nextTick(() => {\n editor.registerPlugin(BubbleMenuPlugin({\n pluginKey: this.pluginKey,\n editor,\n element: this.$el as HTMLElement,\n tippyOptions: this.tippyOptions,\n shouldShow: this.shouldShow,\n }))\n })\n },\n },\n },\n\n render(this: BubbleMenuInterface, createElement) {\n return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default)\n },\n\n beforeDestroy(this: BubbleMenuInterface) {\n this.editor.unregisterPlugin(this.pluginKey)\n },\n}\n","import { Editor as CoreEditor } from '@tiptap/core'\nimport Vue from 'vue'\n\nexport class Editor extends CoreEditor {\n public contentComponent: Vue | null = null\n}\n","import Vue, { Component, PropType } from 'vue'\n\nimport { Editor } from './Editor'\n\nexport interface EditorContentInterface extends Vue {\n editor: Editor,\n}\n\nexport const EditorContent: Component = {\n name: 'EditorContent',\n\n props: {\n editor: {\n default: null,\n type: Object as PropType<Editor>,\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(this: EditorContentInterface, editor: Editor) {\n if (editor && editor.options.element) {\n this.$nextTick(() => {\n const element = this.$el\n\n if (!element || !editor.options.element.firstChild) {\n return\n }\n\n element.append(...editor.options.element.childNodes)\n editor.contentComponent = this\n\n editor.setOptions({\n element,\n })\n\n editor.createNodeViews()\n })\n }\n },\n },\n },\n\n render(createElement) {\n return createElement('div')\n },\n\n beforeDestroy(this: EditorContentInterface) {\n const { editor } = this\n\n if (!editor) {\n return\n }\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element: newElement,\n })\n },\n}\n","import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'\nimport Vue, { Component, PropType } from 'vue'\n\nexport interface FloatingMenuInterface extends Vue {\n pluginKey: FloatingMenuPluginProps['pluginKey'],\n tippyOptions: FloatingMenuPluginProps['tippyOptions'],\n editor: FloatingMenuPluginProps['editor'],\n shouldShow: FloatingMenuPluginProps['shouldShow'],\n}\n\nexport const FloatingMenu: Component = {\n name: 'FloatingMenu',\n\n props: {\n pluginKey: {\n type: [String, Object as PropType<Exclude<FloatingMenuPluginProps['pluginKey'], string>>],\n default: 'floatingMenu',\n },\n\n editor: {\n type: Object as PropType<FloatingMenuPluginProps['editor']>,\n required: true,\n },\n\n tippyOptions: {\n type: Object as PropType<FloatingMenuPluginProps['tippyOptions']>,\n default: () => ({}),\n },\n\n shouldShow: {\n type: Function as PropType<Exclude<FloatingMenuPluginProps['shouldShow'], null>>,\n default: null,\n },\n },\n\n watch: {\n editor: {\n immediate: true,\n handler(this: FloatingMenuInterface, editor: FloatingMenuPluginProps['editor']) {\n if (!editor) {\n return\n }\n\n this.$nextTick(() => {\n editor.registerPlugin(FloatingMenuPlugin({\n pluginKey: this.pluginKey,\n editor,\n element: this.$el as HTMLElement,\n tippyOptions: this.tippyOptions,\n shouldShow: this.shouldShow,\n }))\n })\n },\n },\n },\n\n render(this: FloatingMenuInterface, createElement) {\n return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default)\n },\n\n beforeDestroy(this: FloatingMenuInterface) {\n this.editor.unregisterPlugin(this.pluginKey)\n },\n}\n","import Vue, { Component } from 'vue'\n\nexport interface NodeViewContentInterface extends Vue {\n as: string,\n}\n\nexport const NodeViewContent: Component = {\n props: {\n as: {\n type: String,\n default: 'div',\n },\n },\n\n render(this: NodeViewContentInterface, createElement) {\n return createElement(this.as, {\n style: {\n whiteSpace: 'pre-wrap',\n },\n attrs: {\n 'data-node-view-content': '',\n },\n })\n },\n}\n","import Vue, { Component } from 'vue'\n\nexport interface NodeViewWrapperInterface extends Vue {\n as: string,\n decorationClasses: {\n value: string,\n },\n onDragStart: Function,\n}\n\nexport const NodeViewWrapper: Component = {\n props: {\n as: {\n type: String,\n default: 'div',\n },\n },\n\n inject: ['onDragStart', 'decorationClasses'],\n\n render(this: NodeViewWrapperInterface, createElement) {\n return createElement(\n this.as,\n {\n class: this.decorationClasses.value,\n style: {\n whiteSpace: 'normal',\n },\n attrs: {\n 'data-node-view-wrapper': '',\n },\n on: {\n dragstart: this.onDragStart,\n },\n },\n this.$slots.default,\n )\n },\n}\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/umd'\n\nexport class VueRenderer {\n ref!: Vue\n\n constructor(component: Vue | VueConstructor, props: any) {\n const Component = (typeof component === 'function') ? component : Vue.extend(component)\n\n this.ref = new Component(props).$mount()\n }\n\n get element(): Element {\n return this.ref.$el\n }\n\n updateProps(props: Record<string, any> = {}): void {\n if (!this.ref.$props) {\n return\n }\n\n // prevents `Avoid mutating a prop directly` error message\n // Fix: `VueNodeViewRenderer` change vue Constructor `config.silent` not working\n const currentVueConstructor = this.ref.$props.editor?.contentComponent?.$options._base ?? Vue // eslint-disable-line\n const originalSilent = currentVueConstructor.config.silent\n\n currentVueConstructor.config.silent = true\n\n Object\n .entries(props)\n .forEach(([key, value]) => {\n this.ref.$props[key] = value\n })\n\n currentVueConstructor.config.silent = originalSilent\n }\n\n destroy(): void {\n this.ref.$destroy()\n }\n}\n","import {\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererOptions,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Node as ProseMirrorNode } from 'prosemirror-model'\nimport { Decoration, NodeView as ProseMirrorNodeView } from 'prosemirror-view'\nimport Vue from 'vue'\nimport { PropType, VueConstructor } from 'vue/types/umd'\n\nimport { Editor } from './Editor'\nimport { VueRenderer } from './VueRenderer'\n\nexport const nodeViewProps = {\n editor: {\n type: Object as PropType<NodeViewProps['editor']>,\n required: true as const,\n },\n node: {\n type: Object as PropType<NodeViewProps['node']>,\n required: true as const,\n },\n decorations: {\n type: Object as PropType<NodeViewProps['decorations']>,\n required: true as const,\n },\n selected: {\n type: Boolean as PropType<NodeViewProps['selected']>,\n required: true as const,\n },\n extension: {\n type: Object as PropType<NodeViewProps['extension']>,\n required: true as const,\n },\n getPos: {\n type: Function as PropType<NodeViewProps['getPos']>,\n required: true as const,\n },\n updateAttributes: {\n type: Function as PropType<NodeViewProps['updateAttributes']>,\n required: true as const,\n },\n deleteNode: {\n type: Function as PropType<NodeViewProps['deleteNode']>,\n required: true as const,\n },\n}\n\nexport interface VueNodeViewRendererOptions extends NodeViewRendererOptions {\n update: ((props: {\n oldNode: ProseMirrorNode,\n oldDecorations: Decoration[],\n newNode: ProseMirrorNode,\n newDecorations: Decoration[],\n updateProps: () => void,\n }) => boolean) | null,\n}\n\nclass VueNodeView extends NodeView<(Vue | VueConstructor), Editor, VueNodeViewRendererOptions> {\n\n renderer!: VueRenderer\n\n decorationClasses!: {\n value: string\n }\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n }\n\n const onDragStart = this.onDragStart.bind(this)\n\n this.decorationClasses = Vue.observable({\n value: this.getDecorationClasses(),\n })\n\n // @ts-ignore\n const vue = this.editor.contentComponent?.$options._base ?? Vue // eslint-disable-line\n\n const Component = vue\n .extend(this.component)\n .extend({\n props: Object.keys(props),\n provide: () => {\n return {\n onDragStart,\n decorationClasses: this.decorationClasses,\n }\n },\n })\n\n this.renderer = new VueRenderer(Component, {\n parent: this.editor.contentComponent,\n propsData: props,\n })\n }\n\n get dom() {\n if (!this.renderer.element.hasAttribute('data-node-view-wrapper')) {\n throw Error('Please use the NodeViewWrapper component for your node view.')\n }\n\n return this.renderer.element as HTMLElement\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n const contentElement = this.dom.querySelector('[data-node-view-content]')\n\n return (contentElement || this.dom) as HTMLElement | null\n }\n\n update(node: ProseMirrorNode, decorations: Decoration[]) {\n const updateProps = (props?: Record<string, any>) => {\n this.decorationClasses.value = this.getDecorationClasses()\n this.renderer.updateProps(props)\n }\n\n if (typeof this.options.update === 'function') {\n const oldNode = this.node\n const oldDecorations = this.decorations\n\n this.node = node\n this.decorations = decorations\n\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n updateProps: () => updateProps({ node, decorations }),\n })\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n\n updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n getDecorationClasses() {\n return this.decorations\n // @ts-ignore\n .map(item => item.type.attrs.class)\n .flat()\n .join(' ')\n }\n\n destroy() {\n this.renderer.destroy()\n }\n\n}\n\nexport function VueNodeViewRenderer(component: Vue | VueConstructor, options?: Partial<VueNodeViewRendererOptions>): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new VueNodeView(component, props, options) as unknown as ProseMirrorNodeView\n }\n}\n"],"names":["BubbleMenuPlugin","CoreEditor","FloatingMenuPlugin","Vue","NodeView"],"mappings":"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"}