@tiptap/vue-2 2.0.0-beta.22 → 2.0.0-beta.220
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 +1 -1
- package/dist/{tiptap-vue-2.cjs.js → index.cjs} +113 -66
- package/dist/index.cjs.map +1 -0
- package/dist/{tiptap-vue-2.esm.js → index.js} +112 -63
- package/dist/index.js.map +1 -0
- package/dist/{tiptap-vue-2.umd.js → index.umd.js} +117 -70
- package/dist/index.umd.js.map +1 -0
- package/dist/packages/vue-2/src/BubbleMenu.d.ts +5 -2
- package/dist/packages/vue-2/src/FloatingMenu.d.ts +3 -1
- package/dist/packages/vue-2/src/VueNodeViewRenderer.d.ts +26 -19
- package/dist/packages/vue-2/src/index.d.ts +4 -4
- package/package.json +32 -11
- package/src/BubbleMenu.ts +23 -3
- package/src/EditorContent.ts +8 -3
- package/src/FloatingMenu.ts +16 -2
- package/src/NodeViewContent.ts +7 -9
- package/src/NodeViewWrapper.ts +2 -1
- package/src/VueNodeViewRenderer.ts +76 -40
- package/src/VueRenderer.ts +7 -4
- package/src/index.ts +4 -4
- package/CHANGELOG.md +0 -191
- package/LICENSE.md +0 -21
- package/dist/tiptap-vue-2.bundle.umd.min.js +0 -2
- package/dist/tiptap-vue-2.bundle.umd.min.js.map +0 -1
- package/dist/tiptap-vue-2.cjs.js.map +0 -1
- package/dist/tiptap-vue-2.esm.js.map +0 -1
- package/dist/tiptap-vue-2.umd.js.map +0 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
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
|
-
##
|
|
10
|
+
## Official Documentation
|
|
11
11
|
Documentation can be found on the [tiptap website](https://tiptap.dev).
|
|
12
12
|
|
|
13
13
|
## License
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var core = require('@tiptap/core');
|
|
6
5
|
var extensionBubbleMenu = require('@tiptap/extension-bubble-menu');
|
|
6
|
+
var core = require('@tiptap/core');
|
|
7
7
|
var extensionFloatingMenu = require('@tiptap/extension-floating-menu');
|
|
8
8
|
var Vue = require('vue');
|
|
9
9
|
|
|
@@ -14,14 +14,25 @@ var Vue__default = /*#__PURE__*/_interopDefaultLegacy(Vue);
|
|
|
14
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,
|
|
20
24
|
},
|
|
25
|
+
updateDelay: {
|
|
26
|
+
type: Number,
|
|
27
|
+
},
|
|
21
28
|
tippyOptions: {
|
|
22
29
|
type: Object,
|
|
23
30
|
default: () => ({}),
|
|
24
31
|
},
|
|
32
|
+
shouldShow: {
|
|
33
|
+
type: Function,
|
|
34
|
+
default: null,
|
|
35
|
+
},
|
|
25
36
|
},
|
|
26
37
|
watch: {
|
|
27
38
|
editor: {
|
|
@@ -32,8 +43,11 @@ const BubbleMenu = {
|
|
|
32
43
|
}
|
|
33
44
|
this.$nextTick(() => {
|
|
34
45
|
editor.registerPlugin(extensionBubbleMenu.BubbleMenuPlugin({
|
|
46
|
+
updateDelay: this.updateDelay,
|
|
35
47
|
editor,
|
|
36
48
|
element: this.$el,
|
|
49
|
+
pluginKey: this.pluginKey,
|
|
50
|
+
shouldShow: this.shouldShow,
|
|
37
51
|
tippyOptions: this.tippyOptions,
|
|
38
52
|
}));
|
|
39
53
|
});
|
|
@@ -44,7 +58,7 @@ const BubbleMenu = {
|
|
|
44
58
|
return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default);
|
|
45
59
|
},
|
|
46
60
|
beforeDestroy() {
|
|
47
|
-
this.editor.unregisterPlugin(
|
|
61
|
+
this.editor.unregisterPlugin(this.pluginKey);
|
|
48
62
|
},
|
|
49
63
|
};
|
|
50
64
|
|
|
@@ -73,7 +87,7 @@ const EditorContent = {
|
|
|
73
87
|
if (!element || !editor.options.element.firstChild) {
|
|
74
88
|
return;
|
|
75
89
|
}
|
|
76
|
-
element.
|
|
90
|
+
element.append(...editor.options.element.childNodes);
|
|
77
91
|
editor.contentComponent = this;
|
|
78
92
|
editor.setOptions({
|
|
79
93
|
element,
|
|
@@ -89,6 +103,9 @@ const EditorContent = {
|
|
|
89
103
|
},
|
|
90
104
|
beforeDestroy() {
|
|
91
105
|
const { editor } = this;
|
|
106
|
+
if (!editor) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
92
109
|
if (!editor.isDestroyed) {
|
|
93
110
|
editor.view.setProps({
|
|
94
111
|
nodeViews: {},
|
|
@@ -99,7 +116,7 @@ const EditorContent = {
|
|
|
99
116
|
return;
|
|
100
117
|
}
|
|
101
118
|
const newElement = document.createElement('div');
|
|
102
|
-
newElement.
|
|
119
|
+
newElement.append(...editor.options.element.childNodes);
|
|
103
120
|
editor.setOptions({
|
|
104
121
|
element: newElement,
|
|
105
122
|
});
|
|
@@ -109,6 +126,10 @@ const EditorContent = {
|
|
|
109
126
|
const FloatingMenu = {
|
|
110
127
|
name: 'FloatingMenu',
|
|
111
128
|
props: {
|
|
129
|
+
pluginKey: {
|
|
130
|
+
type: [String, Object],
|
|
131
|
+
default: 'floatingMenu',
|
|
132
|
+
},
|
|
112
133
|
editor: {
|
|
113
134
|
type: Object,
|
|
114
135
|
required: true,
|
|
@@ -117,6 +138,10 @@ const FloatingMenu = {
|
|
|
117
138
|
type: Object,
|
|
118
139
|
default: () => ({}),
|
|
119
140
|
},
|
|
141
|
+
shouldShow: {
|
|
142
|
+
type: Function,
|
|
143
|
+
default: null,
|
|
144
|
+
},
|
|
120
145
|
},
|
|
121
146
|
watch: {
|
|
122
147
|
editor: {
|
|
@@ -127,9 +152,11 @@ const FloatingMenu = {
|
|
|
127
152
|
}
|
|
128
153
|
this.$nextTick(() => {
|
|
129
154
|
editor.registerPlugin(extensionFloatingMenu.FloatingMenuPlugin({
|
|
155
|
+
pluginKey: this.pluginKey,
|
|
130
156
|
editor,
|
|
131
157
|
element: this.$el,
|
|
132
158
|
tippyOptions: this.tippyOptions,
|
|
159
|
+
shouldShow: this.shouldShow,
|
|
133
160
|
}));
|
|
134
161
|
});
|
|
135
162
|
},
|
|
@@ -139,31 +166,77 @@ const FloatingMenu = {
|
|
|
139
166
|
return createElement('div', { style: { visibility: 'hidden' } }, this.$slots.default);
|
|
140
167
|
},
|
|
141
168
|
beforeDestroy() {
|
|
142
|
-
this.editor.unregisterPlugin(
|
|
169
|
+
this.editor.unregisterPlugin(this.pluginKey);
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const NodeViewContent = {
|
|
174
|
+
props: {
|
|
175
|
+
as: {
|
|
176
|
+
type: String,
|
|
177
|
+
default: 'div',
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
render(createElement) {
|
|
181
|
+
return createElement(this.as, {
|
|
182
|
+
style: {
|
|
183
|
+
whiteSpace: 'pre-wrap',
|
|
184
|
+
},
|
|
185
|
+
attrs: {
|
|
186
|
+
'data-node-view-content': '',
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const NodeViewWrapper = {
|
|
193
|
+
props: {
|
|
194
|
+
as: {
|
|
195
|
+
type: String,
|
|
196
|
+
default: 'div',
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
inject: ['onDragStart', 'decorationClasses'],
|
|
200
|
+
render(createElement) {
|
|
201
|
+
return createElement(this.as, {
|
|
202
|
+
class: this.decorationClasses.value,
|
|
203
|
+
style: {
|
|
204
|
+
whiteSpace: 'normal',
|
|
205
|
+
},
|
|
206
|
+
attrs: {
|
|
207
|
+
'data-node-view-wrapper': '',
|
|
208
|
+
},
|
|
209
|
+
on: {
|
|
210
|
+
dragstart: this.onDragStart,
|
|
211
|
+
},
|
|
212
|
+
}, this.$slots.default);
|
|
143
213
|
},
|
|
144
214
|
};
|
|
145
215
|
|
|
146
216
|
class VueRenderer {
|
|
147
217
|
constructor(component, props) {
|
|
148
|
-
const Component = Vue__default[
|
|
218
|
+
const Component = (typeof component === 'function') ? component : Vue__default["default"].extend(component);
|
|
149
219
|
this.ref = new Component(props).$mount();
|
|
150
220
|
}
|
|
151
221
|
get element() {
|
|
152
222
|
return this.ref.$el;
|
|
153
223
|
}
|
|
154
224
|
updateProps(props = {}) {
|
|
225
|
+
var _a, _b, _c;
|
|
155
226
|
if (!this.ref.$props) {
|
|
156
227
|
return;
|
|
157
228
|
}
|
|
158
229
|
// prevents `Avoid mutating a prop directly` error message
|
|
159
|
-
|
|
160
|
-
Vue__default[
|
|
230
|
+
// Fix: `VueNodeViewRenderer` change vue Constructor `config.silent` not working
|
|
231
|
+
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
|
|
232
|
+
const originalSilent = currentVueConstructor.config.silent;
|
|
233
|
+
currentVueConstructor.config.silent = true;
|
|
161
234
|
Object
|
|
162
235
|
.entries(props)
|
|
163
236
|
.forEach(([key, value]) => {
|
|
164
237
|
this.ref.$props[key] = value;
|
|
165
238
|
});
|
|
166
|
-
|
|
239
|
+
currentVueConstructor.config.silent = originalSilent;
|
|
167
240
|
}
|
|
168
241
|
destroy() {
|
|
169
242
|
this.ref.$destroy();
|
|
@@ -199,9 +272,14 @@ const nodeViewProps = {
|
|
|
199
272
|
type: Function,
|
|
200
273
|
required: true,
|
|
201
274
|
},
|
|
275
|
+
deleteNode: {
|
|
276
|
+
type: Function,
|
|
277
|
+
required: true,
|
|
278
|
+
},
|
|
202
279
|
};
|
|
203
280
|
class VueNodeView extends core.NodeView {
|
|
204
281
|
mount() {
|
|
282
|
+
var _a, _b;
|
|
205
283
|
const props = {
|
|
206
284
|
editor: this.editor,
|
|
207
285
|
node: this.node,
|
|
@@ -210,14 +288,15 @@ class VueNodeView extends core.NodeView {
|
|
|
210
288
|
extension: this.extension,
|
|
211
289
|
getPos: () => this.getPos(),
|
|
212
290
|
updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
|
|
291
|
+
deleteNode: () => this.deleteNode(),
|
|
213
292
|
};
|
|
214
293
|
const onDragStart = this.onDragStart.bind(this);
|
|
215
|
-
this.decorationClasses = Vue__default[
|
|
294
|
+
this.decorationClasses = Vue__default["default"].observable({
|
|
216
295
|
value: this.getDecorationClasses(),
|
|
217
296
|
});
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
297
|
+
// @ts-ignore
|
|
298
|
+
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
|
|
299
|
+
const Component = vue.extend(this.component).extend({
|
|
221
300
|
props: Object.keys(props),
|
|
222
301
|
provide: () => {
|
|
223
302
|
return {
|
|
@@ -242,11 +321,25 @@ class VueNodeView extends core.NodeView {
|
|
|
242
321
|
return null;
|
|
243
322
|
}
|
|
244
323
|
const contentElement = this.dom.querySelector('[data-node-view-content]');
|
|
245
|
-
return contentElement || this.dom;
|
|
324
|
+
return (contentElement || this.dom);
|
|
246
325
|
}
|
|
247
326
|
update(node, decorations) {
|
|
327
|
+
const updateProps = (props) => {
|
|
328
|
+
this.decorationClasses.value = this.getDecorationClasses();
|
|
329
|
+
this.renderer.updateProps(props);
|
|
330
|
+
};
|
|
248
331
|
if (typeof this.options.update === 'function') {
|
|
249
|
-
|
|
332
|
+
const oldNode = this.node;
|
|
333
|
+
const oldDecorations = this.decorations;
|
|
334
|
+
this.node = node;
|
|
335
|
+
this.decorations = decorations;
|
|
336
|
+
return this.options.update({
|
|
337
|
+
oldNode,
|
|
338
|
+
oldDecorations,
|
|
339
|
+
newNode: node,
|
|
340
|
+
newDecorations: decorations,
|
|
341
|
+
updateProps: () => updateProps({ node, decorations }),
|
|
342
|
+
});
|
|
250
343
|
}
|
|
251
344
|
if (node.type !== this.node.type) {
|
|
252
345
|
return false;
|
|
@@ -256,8 +349,7 @@ class VueNodeView extends core.NodeView {
|
|
|
256
349
|
}
|
|
257
350
|
this.node = node;
|
|
258
351
|
this.decorations = decorations;
|
|
259
|
-
|
|
260
|
-
this.renderer.updateProps({ node, decorations });
|
|
352
|
+
updateProps({ node, decorations });
|
|
261
353
|
return true;
|
|
262
354
|
}
|
|
263
355
|
selectNode() {
|
|
@@ -271,11 +363,11 @@ class VueNodeView extends core.NodeView {
|
|
|
271
363
|
});
|
|
272
364
|
}
|
|
273
365
|
getDecorationClasses() {
|
|
274
|
-
return this.decorations
|
|
366
|
+
return (this.decorations
|
|
275
367
|
// @ts-ignore
|
|
276
368
|
.map(item => item.type.attrs.class)
|
|
277
369
|
.flat()
|
|
278
|
-
.join(' ');
|
|
370
|
+
.join(' '));
|
|
279
371
|
}
|
|
280
372
|
destroy() {
|
|
281
373
|
this.renderer.destroy();
|
|
@@ -293,49 +385,6 @@ function VueNodeViewRenderer(component, options) {
|
|
|
293
385
|
};
|
|
294
386
|
}
|
|
295
387
|
|
|
296
|
-
const NodeViewWrapper = {
|
|
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
|
-
class: this.decorationClasses.value,
|
|
307
|
-
style: {
|
|
308
|
-
whiteSpace: 'normal',
|
|
309
|
-
},
|
|
310
|
-
attrs: {
|
|
311
|
-
'data-node-view-wrapper': '',
|
|
312
|
-
},
|
|
313
|
-
on: {
|
|
314
|
-
dragstart: this.onDragStart,
|
|
315
|
-
},
|
|
316
|
-
}, this.$slots.default);
|
|
317
|
-
},
|
|
318
|
-
};
|
|
319
|
-
|
|
320
|
-
const NodeViewContent = {
|
|
321
|
-
props: {
|
|
322
|
-
as: {
|
|
323
|
-
type: String,
|
|
324
|
-
default: 'div',
|
|
325
|
-
},
|
|
326
|
-
},
|
|
327
|
-
render(createElement) {
|
|
328
|
-
return createElement(this.as, {
|
|
329
|
-
style: {
|
|
330
|
-
whiteSpace: 'pre-wrap',
|
|
331
|
-
},
|
|
332
|
-
attrs: {
|
|
333
|
-
'data-node-view-content': '',
|
|
334
|
-
},
|
|
335
|
-
});
|
|
336
|
-
},
|
|
337
|
-
};
|
|
338
|
-
|
|
339
388
|
exports.BubbleMenu = BubbleMenu;
|
|
340
389
|
exports.Editor = Editor;
|
|
341
390
|
exports.EditorContent = EditorContent;
|
|
@@ -348,9 +397,7 @@ exports.nodeViewProps = nodeViewProps;
|
|
|
348
397
|
Object.keys(core).forEach(function (k) {
|
|
349
398
|
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
350
399
|
enumerable: true,
|
|
351
|
-
get: function () {
|
|
352
|
-
return core[k];
|
|
353
|
-
}
|
|
400
|
+
get: function () { return core[k]; }
|
|
354
401
|
});
|
|
355
402
|
});
|
|
356
|
-
//# sourceMappingURL=
|
|
403
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","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 updateDelay: BubbleMenuPluginProps['updateDelay'],\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 updateDelay: {\n type: Number as PropType<BubbleMenuPluginProps['updateDelay']>,\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 updateDelay: this.updateDelay,\n editor,\n element: this.$el as HTMLElement,\n pluginKey: this.pluginKey,\n shouldShow: this.shouldShow,\n tippyOptions: this.tippyOptions,\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 DecorationWithType,\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererOptions,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { Decoration, NodeView as ProseMirrorNodeView } from '@tiptap/pm/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:\n | ((props: {\n oldNode: ProseMirrorNode\n oldDecorations: Decoration[]\n newNode: ProseMirrorNode\n newDecorations: Decoration[]\n updateProps: () => void\n }) => boolean)\n | null\n}\n\nclass VueNodeView extends NodeView<Vue | VueConstructor, Editor, VueNodeViewRendererOptions> {\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.extend(this.component).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: DecorationWithType[]) {\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 (\n this.decorations\n // @ts-ignore\n .map(item => item.type.attrs.class)\n .flat()\n .join(' ')\n )\n }\n\n destroy() {\n this.renderer.destroy()\n }\n}\n\nexport function VueNodeViewRenderer(\n component: Vue | VueConstructor,\n options?: Partial<VueNodeViewRendererOptions>,\n): 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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"}
|