@tiptap/vue-2 3.20.3 → 3.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
+ Editor: () => Editor,
35
+ EditorContent: () => EditorContent,
36
+ NodeViewContent: () => NodeViewContent,
37
+ NodeViewWrapper: () => NodeViewWrapper,
38
+ VueNodeViewRenderer: () => VueNodeViewRenderer,
39
+ VueRenderer: () => VueRenderer,
40
+ nodeViewProps: () => nodeViewProps
41
+ });
42
+ module.exports = __toCommonJS(index_exports);
43
+
44
+ // src/Editor.ts
45
+ var import_core = require("@tiptap/core");
46
+ var Editor = class extends import_core.Editor {
47
+ constructor() {
48
+ super(...arguments);
49
+ this.contentComponent = null;
50
+ }
51
+ };
52
+
53
+ // src/EditorContent.ts
54
+ var EditorContent = {
55
+ name: "EditorContent",
56
+ props: {
57
+ editor: {
58
+ default: null,
59
+ type: Object
60
+ }
61
+ },
62
+ watch: {
63
+ editor: {
64
+ immediate: true,
65
+ handler(editor) {
66
+ if (editor && editor.options.element) {
67
+ this.$nextTick(() => {
68
+ var _a;
69
+ const element = this.$el;
70
+ if (!element || !((_a = editor.view.dom) == null ? void 0 : _a.parentNode)) {
71
+ return;
72
+ }
73
+ element.append(...editor.view.dom.parentNode.childNodes);
74
+ editor.contentComponent = this;
75
+ editor.setOptions({
76
+ element
77
+ });
78
+ editor.createNodeViews();
79
+ });
80
+ }
81
+ }
82
+ }
83
+ },
84
+ render(createElement) {
85
+ return createElement("div");
86
+ },
87
+ beforeDestroy() {
88
+ var _a;
89
+ const { editor } = this;
90
+ if (!editor) {
91
+ return;
92
+ }
93
+ if (!editor.isDestroyed) {
94
+ editor.view.setProps({
95
+ nodeViews: {}
96
+ });
97
+ }
98
+ editor.contentComponent = null;
99
+ if (!((_a = editor.view.dom) == null ? void 0 : _a.parentNode)) {
100
+ return;
101
+ }
102
+ const newElement = document.createElement("div");
103
+ newElement.append(...editor.view.dom.parentNode.childNodes);
104
+ editor.setOptions({
105
+ element: newElement
106
+ });
107
+ }
108
+ };
109
+
110
+ // src/NodeViewContent.ts
111
+ var NodeViewContent = {
112
+ props: {
113
+ as: {
114
+ type: String,
115
+ default: "div"
116
+ }
117
+ },
118
+ render(createElement) {
119
+ return createElement(this.as, {
120
+ style: {
121
+ whiteSpace: "pre-wrap"
122
+ },
123
+ attrs: {
124
+ "data-node-view-content": ""
125
+ }
126
+ });
127
+ }
128
+ };
129
+
130
+ // src/NodeViewWrapper.ts
131
+ var NodeViewWrapper = {
132
+ props: {
133
+ as: {
134
+ type: String,
135
+ default: "div"
136
+ }
137
+ },
138
+ inject: ["onDragStart", "decorationClasses"],
139
+ render(createElement) {
140
+ return createElement(
141
+ this.as,
142
+ {
143
+ class: this.decorationClasses.value,
144
+ style: {
145
+ whiteSpace: "normal"
146
+ },
147
+ attrs: {
148
+ "data-node-view-wrapper": ""
149
+ },
150
+ on: {
151
+ dragstart: this.onDragStart
152
+ }
153
+ },
154
+ this.$slots.default
155
+ );
156
+ }
157
+ };
158
+
159
+ // src/VueNodeViewRenderer.ts
160
+ var import_core2 = require("@tiptap/core");
161
+ var import_vue_ts_types = require("vue-ts-types");
162
+
163
+ // src/Vue.ts
164
+ var import_vue = __toESM(require("vue"), 1);
165
+ var Vue = import_vue.default;
166
+
167
+ // src/VueRenderer.ts
168
+ var VueRenderer = class {
169
+ constructor(component, props) {
170
+ const Component = typeof component === "function" ? component : Vue.extend(component);
171
+ this.ref = new Component(props).$mount();
172
+ }
173
+ get element() {
174
+ return this.ref.$el;
175
+ }
176
+ updateProps(props = {}) {
177
+ var _a, _b, _c;
178
+ if (!this.ref.$props) {
179
+ return;
180
+ }
181
+ const currentVueConstructor = (_c = (_b = (_a = this.ref.$props.editor) == null ? void 0 : _a.contentComponent) == null ? void 0 : _b.$options._base) != null ? _c : Vue;
182
+ const originalSilent = currentVueConstructor.config.silent;
183
+ currentVueConstructor.config.silent = true;
184
+ Object.entries(props).forEach(([key, value]) => {
185
+ this.ref.$props[key] = value;
186
+ });
187
+ currentVueConstructor.config.silent = originalSilent;
188
+ }
189
+ destroy() {
190
+ this.ref.$destroy();
191
+ }
192
+ };
193
+
194
+ // src/VueNodeViewRenderer.ts
195
+ var nodeViewProps = {
196
+ editor: (0, import_vue_ts_types.objectProp)().required,
197
+ node: (0, import_vue_ts_types.objectProp)().required,
198
+ decorations: (0, import_vue_ts_types.objectProp)().required,
199
+ selected: (0, import_vue_ts_types.booleanProp)().required,
200
+ extension: (0, import_vue_ts_types.objectProp)().required,
201
+ getPos: (0, import_vue_ts_types.functionProp)().required,
202
+ updateAttributes: (0, import_vue_ts_types.functionProp)().required,
203
+ deleteNode: (0, import_vue_ts_types.functionProp)().required
204
+ };
205
+ var VueNodeView = class extends import_core2.NodeView {
206
+ mount() {
207
+ var _a, _b;
208
+ const props = {
209
+ editor: this.editor,
210
+ node: this.node,
211
+ decorations: this.decorations,
212
+ innerDecorations: this.innerDecorations,
213
+ view: this.view,
214
+ selected: false,
215
+ extension: this.extension,
216
+ HTMLAttributes: this.HTMLAttributes,
217
+ getPos: () => this.getPos(),
218
+ updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
219
+ deleteNode: () => this.deleteNode()
220
+ };
221
+ const onDragStart = this.onDragStart.bind(this);
222
+ this.decorationClasses = Vue.observable({
223
+ value: this.getDecorationClasses()
224
+ });
225
+ const vue = (_b = (_a = this.editor.contentComponent) == null ? void 0 : _a.$options._base) != null ? _b : Vue;
226
+ const Component = vue.extend(this.component).extend({
227
+ props: Object.keys(props),
228
+ provide: () => {
229
+ return {
230
+ onDragStart,
231
+ decorationClasses: this.decorationClasses
232
+ };
233
+ }
234
+ });
235
+ this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
236
+ this.editor.on("selectionUpdate", this.handleSelectionUpdate);
237
+ this.renderer = new VueRenderer(Component, {
238
+ parent: this.editor.contentComponent,
239
+ propsData: props
240
+ });
241
+ }
242
+ /**
243
+ * Return the DOM element.
244
+ * This is the element that will be used to display the node view.
245
+ */
246
+ get dom() {
247
+ if (!this.renderer.element.hasAttribute("data-node-view-wrapper")) {
248
+ throw Error("Please use the NodeViewWrapper component for your node view.");
249
+ }
250
+ return this.renderer.element;
251
+ }
252
+ /**
253
+ * Return the content DOM element.
254
+ * This is the element that will be used to display the rich-text content of the node.
255
+ */
256
+ get contentDOM() {
257
+ if (this.node.isLeaf) {
258
+ return null;
259
+ }
260
+ return this.dom.querySelector("[data-node-view-content]");
261
+ }
262
+ /**
263
+ * On editor selection update, check if the node is selected.
264
+ * If it is, call `selectNode`, otherwise call `deselectNode`.
265
+ */
266
+ handleSelectionUpdate() {
267
+ const { from, to } = this.editor.state.selection;
268
+ const pos = this.getPos();
269
+ if (typeof pos !== "number") {
270
+ return;
271
+ }
272
+ if (from <= pos && to >= pos + this.node.nodeSize) {
273
+ if (this.renderer.ref.$props.selected) {
274
+ return;
275
+ }
276
+ this.selectNode();
277
+ } else {
278
+ if (!this.renderer.ref.$props.selected) {
279
+ return;
280
+ }
281
+ this.deselectNode();
282
+ }
283
+ }
284
+ /**
285
+ * On update, update the React component.
286
+ * To prevent unnecessary updates, the `update` option can be used.
287
+ */
288
+ update(node, decorations, innerDecorations) {
289
+ const rerenderComponent = (props) => {
290
+ this.decorationClasses.value = this.getDecorationClasses();
291
+ this.renderer.updateProps(props);
292
+ };
293
+ if (typeof this.options.update === "function") {
294
+ const oldNode = this.node;
295
+ const oldDecorations = this.decorations;
296
+ const oldInnerDecorations = this.innerDecorations;
297
+ this.node = node;
298
+ this.decorations = decorations;
299
+ this.innerDecorations = innerDecorations;
300
+ return this.options.update({
301
+ oldNode,
302
+ oldDecorations,
303
+ newNode: node,
304
+ newDecorations: decorations,
305
+ oldInnerDecorations,
306
+ innerDecorations,
307
+ updateProps: () => rerenderComponent({ node, decorations, innerDecorations })
308
+ });
309
+ }
310
+ if (node.type !== this.node.type) {
311
+ return false;
312
+ }
313
+ if (node === this.node && this.decorations === decorations && this.innerDecorations === innerDecorations) {
314
+ return true;
315
+ }
316
+ this.node = node;
317
+ this.decorations = decorations;
318
+ this.innerDecorations = innerDecorations;
319
+ rerenderComponent({ node, decorations, innerDecorations });
320
+ return true;
321
+ }
322
+ /**
323
+ * Select the node.
324
+ * Add the `selected` prop and the `ProseMirror-selectednode` class.
325
+ */
326
+ selectNode() {
327
+ this.renderer.updateProps({
328
+ selected: true
329
+ });
330
+ this.renderer.element.classList.add("ProseMirror-selectednode");
331
+ }
332
+ /**
333
+ * Deselect the node.
334
+ * Remove the `selected` prop and the `ProseMirror-selectednode` class.
335
+ */
336
+ deselectNode() {
337
+ this.renderer.updateProps({
338
+ selected: false
339
+ });
340
+ this.renderer.element.classList.remove("ProseMirror-selectednode");
341
+ }
342
+ getDecorationClasses() {
343
+ return this.decorations.flatMap((item) => item.type.attrs.class).join(" ");
344
+ }
345
+ destroy() {
346
+ this.renderer.destroy();
347
+ this.editor.off("selectionUpdate", this.handleSelectionUpdate);
348
+ }
349
+ };
350
+ function VueNodeViewRenderer(component, options) {
351
+ return (props) => {
352
+ if (!props.editor.contentComponent) {
353
+ return {};
354
+ }
355
+ return new VueNodeView(component, props, options);
356
+ };
357
+ }
358
+
359
+ // src/index.ts
360
+ __reExport(index_exports, require("@tiptap/core"), module.exports);
361
+ // Annotate the CommonJS export names for ESM import in node:
362
+ 0 && (module.exports = {
363
+ Editor,
364
+ EditorContent,
365
+ NodeViewContent,
366
+ NodeViewWrapper,
367
+ VueNodeViewRenderer,
368
+ VueRenderer,
369
+ nodeViewProps,
370
+ ...require("@tiptap/core")
371
+ });
372
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/Editor.ts","../src/EditorContent.ts","../src/NodeViewContent.ts","../src/NodeViewWrapper.ts","../src/VueNodeViewRenderer.ts","../src/Vue.ts","../src/VueRenderer.ts"],"sourcesContent":["export { Editor } from './Editor.js'\nexport * from './EditorContent.js'\nexport * from './NodeViewContent.js'\nexport * from './NodeViewWrapper.js'\nexport * from './VueNodeViewRenderer.js'\nexport * from './VueRenderer.js'\nexport * from '@tiptap/core'\n","import { Editor as CoreEditor } from '@tiptap/core'\nimport type Vue from 'vue'\n\nexport class Editor extends CoreEditor {\n public contentComponent: Vue | null = null\n}\n","import type { Component, CreateElement, PropType } from 'vue'\nimport type Vue from 'vue'\n\nimport type { Editor } from './Editor.js'\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.view.dom?.parentNode) {\n return\n }\n\n element.append(...editor.view.dom.parentNode.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: 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.view.dom?.parentNode) {\n return\n }\n\n // TODO using the new editor.mount method might allow us to remove this\n const newElement = document.createElement('div')\n\n newElement.append(...editor.view.dom.parentNode.childNodes)\n\n editor.setOptions({\n element: newElement,\n })\n },\n}\n","import type { Component, CreateElement } from 'vue'\nimport type Vue 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: 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 type { Component, CreateElement } from 'vue'\nimport type Vue from 'vue'\n\nexport interface NodeViewWrapperInterface extends Vue {\n as: string\n decorationClasses: {\n value: string\n }\n onDragStart: () => void\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: 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 type { DecorationWithType, NodeViewProps, NodeViewRenderer, NodeViewRendererOptions } from '@tiptap/core'\nimport { NodeView } from '@tiptap/core'\nimport type { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport type { Decoration, DecorationSource, NodeView as ProseMirrorNodeView } from '@tiptap/pm/view'\nimport type { VueConstructor } from 'vue'\nimport { booleanProp, functionProp, objectProp } from 'vue-ts-types'\n\nimport type { Editor } from './Editor.js'\nimport { Vue } from './Vue.js'\nimport { VueRenderer } from './VueRenderer.js'\n\nexport const nodeViewProps = {\n editor: objectProp<NodeViewProps['editor']>().required,\n node: objectProp<NodeViewProps['node']>().required,\n decorations: objectProp<NodeViewProps['decorations']>().required,\n selected: booleanProp().required,\n extension: objectProp<NodeViewProps['extension']>().required,\n getPos: functionProp<NodeViewProps['getPos']>().required,\n updateAttributes: functionProp<NodeViewProps['updateAttributes']>().required,\n deleteNode: functionProp<NodeViewProps['deleteNode']>().required,\n}\n\nexport interface VueNodeViewRendererOptions extends NodeViewRendererOptions {\n update:\n | ((props: {\n oldNode: ProseMirrorNode\n oldDecorations: readonly Decoration[]\n oldInnerDecorations: DecorationSource\n newNode: ProseMirrorNode\n newDecorations: readonly Decoration[]\n innerDecorations: DecorationSource\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 = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations as DecorationWithType[],\n innerDecorations: this.innerDecorations,\n view: this.view,\n selected: false,\n extension: this.extension,\n HTMLAttributes: this.HTMLAttributes,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n } satisfies NodeViewProps\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.handleSelectionUpdate = this.handleSelectionUpdate.bind(this)\n this.editor.on('selectionUpdate', this.handleSelectionUpdate)\n\n this.renderer = new VueRenderer(Component, {\n parent: this.editor.contentComponent,\n propsData: props,\n })\n }\n\n /**\n * Return the DOM element.\n * This is the element that will be used to display the node view.\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 /**\n * Return the content DOM element.\n * This is the element that will be used to display the rich-text content of the node.\n */\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n return this.dom.querySelector('[data-node-view-content]') as HTMLElement | null\n }\n\n /**\n * On editor selection update, check if the node is selected.\n * If it is, call `selectNode`, otherwise call `deselectNode`.\n */\n handleSelectionUpdate() {\n const { from, to } = this.editor.state.selection\n const pos = this.getPos()\n\n if (typeof pos !== 'number') {\n return\n }\n\n if (from <= pos && to >= pos + this.node.nodeSize) {\n if (this.renderer.ref.$props.selected) {\n return\n }\n\n this.selectNode()\n } else {\n if (!this.renderer.ref.$props.selected) {\n return\n }\n\n this.deselectNode()\n }\n }\n\n /**\n * On update, update the React component.\n * To prevent unnecessary updates, the `update` option can be used.\n */\n update(node: ProseMirrorNode, decorations: readonly Decoration[], innerDecorations: DecorationSource): boolean {\n const rerenderComponent = (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 const oldInnerDecorations = this.innerDecorations\n\n this.node = node\n this.decorations = decorations\n this.innerDecorations = innerDecorations\n\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n oldInnerDecorations,\n innerDecorations,\n updateProps: () => rerenderComponent({ node, decorations, innerDecorations }),\n })\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (node === this.node && this.decorations === decorations && this.innerDecorations === innerDecorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n this.innerDecorations = innerDecorations\n\n rerenderComponent({ node, decorations, innerDecorations })\n\n return true\n }\n\n /**\n * Select the node.\n * Add the `selected` prop and the `ProseMirror-selectednode` class.\n */\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n this.renderer.element.classList.add('ProseMirror-selectednode')\n }\n\n /**\n * Deselect the node.\n * Remove the `selected` prop and the `ProseMirror-selectednode` class.\n */\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n this.renderer.element.classList.remove('ProseMirror-selectednode')\n }\n\n getDecorationClasses() {\n return (\n this.decorations\n // @ts-ignore\n .flatMap(item => item.type.attrs.class)\n .join(' ')\n )\n }\n\n destroy() {\n this.renderer.destroy()\n this.editor.off('selectionUpdate', this.handleSelectionUpdate)\n }\n}\n\nexport function VueNodeViewRenderer(\n component: Vue | VueConstructor,\n options?: Partial<VueNodeViewRendererOptions>,\n): NodeViewRenderer {\n return props => {\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 {} as unknown as ProseMirrorNodeView\n }\n\n return new VueNodeView(component, props, options)\n }\n}\n","import type { VueConstructor } from 'vue'\nimport VueDefault from 'vue'\n\n// With nodenext module resolution, TypeScript treats the default import as the module type.\n// We need to explicitly type it as VueConstructor to access static methods like extend and observable.\n// This is necessary because Vue 2's type definitions export Vue as VueConstructor, but nodenext\n// doesn't correctly infer the default export type.\nexport const Vue: VueConstructor = VueDefault as unknown as VueConstructor\n","import type { VueConstructor } from 'vue'\n\nimport { Vue } from './Vue.js'\n\n/**\n * The VueRenderer class is responsible for rendering a Vue component as a ProseMirror node view.\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.entries(props).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"],"mappings":"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","names":["CoreEditor","import_core","VueDefault"]}
@@ -0,0 +1,78 @@
1
+ import * as _tiptap_core from '@tiptap/core';
2
+ import { Editor as Editor$1, DecorationWithType, NodeViewRendererOptions, NodeViewRenderer } from '@tiptap/core';
3
+ export * from '@tiptap/core';
4
+ import { Component, VueConstructor } from 'vue';
5
+ import * as vue_ts_types_dist_types_js from 'vue-ts-types/dist/types.js';
6
+ import { Node } from '@tiptap/pm/model';
7
+ import { Decoration, DecorationSource } from '@tiptap/pm/view';
8
+
9
+ declare class Editor extends Editor$1 {
10
+ contentComponent: Vue | null;
11
+ }
12
+
13
+ interface EditorContentInterface extends Vue {
14
+ editor: Editor;
15
+ }
16
+ declare const EditorContent: Component;
17
+
18
+ interface NodeViewContentInterface extends Vue {
19
+ as: string;
20
+ }
21
+ declare const NodeViewContent: Component;
22
+
23
+ interface NodeViewWrapperInterface extends Vue {
24
+ as: string;
25
+ decorationClasses: {
26
+ value: string;
27
+ };
28
+ onDragStart: () => void;
29
+ }
30
+ declare const NodeViewWrapper: Component;
31
+
32
+ declare const nodeViewProps: {
33
+ editor: vue_ts_types_dist_types_js.RequiredPropOptions<_tiptap_core.Editor>;
34
+ node: vue_ts_types_dist_types_js.RequiredPropOptions<Node>;
35
+ decorations: vue_ts_types_dist_types_js.RequiredPropOptions<readonly DecorationWithType[]>;
36
+ selected: vue_ts_types_dist_types_js.RequiredPropOptions<boolean>;
37
+ extension: vue_ts_types_dist_types_js.RequiredPropOptions<_tiptap_core.Node<any, any>>;
38
+ getPos: vue_ts_types_dist_types_js.PropOptions<() => number | undefined> & {
39
+ required: true;
40
+ } & {
41
+ default?: (() => () => number | undefined) | undefined;
42
+ };
43
+ updateAttributes: vue_ts_types_dist_types_js.PropOptions<(attributes: Record<string, any>) => void> & {
44
+ required: true;
45
+ } & {
46
+ default?: (() => (attributes: Record<string, any>) => void) | undefined;
47
+ };
48
+ deleteNode: vue_ts_types_dist_types_js.PropOptions<() => void> & {
49
+ required: true;
50
+ } & {
51
+ default?: (() => () => void) | undefined;
52
+ };
53
+ };
54
+ interface VueNodeViewRendererOptions extends NodeViewRendererOptions {
55
+ update: ((props: {
56
+ oldNode: Node;
57
+ oldDecorations: readonly Decoration[];
58
+ oldInnerDecorations: DecorationSource;
59
+ newNode: Node;
60
+ newDecorations: readonly Decoration[];
61
+ innerDecorations: DecorationSource;
62
+ updateProps: () => void;
63
+ }) => boolean) | null;
64
+ }
65
+ declare function VueNodeViewRenderer(component: Vue | VueConstructor, options?: Partial<VueNodeViewRendererOptions>): NodeViewRenderer;
66
+
67
+ /**
68
+ * The VueRenderer class is responsible for rendering a Vue component as a ProseMirror node view.
69
+ */
70
+ declare class VueRenderer {
71
+ ref: Vue;
72
+ constructor(component: Vue | VueConstructor, props: any);
73
+ get element(): Element;
74
+ updateProps(props?: Record<string, any>): void;
75
+ destroy(): void;
76
+ }
77
+
78
+ export { Editor, EditorContent, type EditorContentInterface, NodeViewContent, type NodeViewContentInterface, NodeViewWrapper, type NodeViewWrapperInterface, VueNodeViewRenderer, type VueNodeViewRendererOptions, VueRenderer, nodeViewProps };
@@ -0,0 +1,78 @@
1
+ import * as _tiptap_core from '@tiptap/core';
2
+ import { Editor as Editor$1, DecorationWithType, NodeViewRendererOptions, NodeViewRenderer } from '@tiptap/core';
3
+ export * from '@tiptap/core';
4
+ import { Component, VueConstructor } from 'vue';
5
+ import * as vue_ts_types_dist_types_js from 'vue-ts-types/dist/types.js';
6
+ import { Node } from '@tiptap/pm/model';
7
+ import { Decoration, DecorationSource } from '@tiptap/pm/view';
8
+
9
+ declare class Editor extends Editor$1 {
10
+ contentComponent: Vue | null;
11
+ }
12
+
13
+ interface EditorContentInterface extends Vue {
14
+ editor: Editor;
15
+ }
16
+ declare const EditorContent: Component;
17
+
18
+ interface NodeViewContentInterface extends Vue {
19
+ as: string;
20
+ }
21
+ declare const NodeViewContent: Component;
22
+
23
+ interface NodeViewWrapperInterface extends Vue {
24
+ as: string;
25
+ decorationClasses: {
26
+ value: string;
27
+ };
28
+ onDragStart: () => void;
29
+ }
30
+ declare const NodeViewWrapper: Component;
31
+
32
+ declare const nodeViewProps: {
33
+ editor: vue_ts_types_dist_types_js.RequiredPropOptions<_tiptap_core.Editor>;
34
+ node: vue_ts_types_dist_types_js.RequiredPropOptions<Node>;
35
+ decorations: vue_ts_types_dist_types_js.RequiredPropOptions<readonly DecorationWithType[]>;
36
+ selected: vue_ts_types_dist_types_js.RequiredPropOptions<boolean>;
37
+ extension: vue_ts_types_dist_types_js.RequiredPropOptions<_tiptap_core.Node<any, any>>;
38
+ getPos: vue_ts_types_dist_types_js.PropOptions<() => number | undefined> & {
39
+ required: true;
40
+ } & {
41
+ default?: (() => () => number | undefined) | undefined;
42
+ };
43
+ updateAttributes: vue_ts_types_dist_types_js.PropOptions<(attributes: Record<string, any>) => void> & {
44
+ required: true;
45
+ } & {
46
+ default?: (() => (attributes: Record<string, any>) => void) | undefined;
47
+ };
48
+ deleteNode: vue_ts_types_dist_types_js.PropOptions<() => void> & {
49
+ required: true;
50
+ } & {
51
+ default?: (() => () => void) | undefined;
52
+ };
53
+ };
54
+ interface VueNodeViewRendererOptions extends NodeViewRendererOptions {
55
+ update: ((props: {
56
+ oldNode: Node;
57
+ oldDecorations: readonly Decoration[];
58
+ oldInnerDecorations: DecorationSource;
59
+ newNode: Node;
60
+ newDecorations: readonly Decoration[];
61
+ innerDecorations: DecorationSource;
62
+ updateProps: () => void;
63
+ }) => boolean) | null;
64
+ }
65
+ declare function VueNodeViewRenderer(component: Vue | VueConstructor, options?: Partial<VueNodeViewRendererOptions>): NodeViewRenderer;
66
+
67
+ /**
68
+ * The VueRenderer class is responsible for rendering a Vue component as a ProseMirror node view.
69
+ */
70
+ declare class VueRenderer {
71
+ ref: Vue;
72
+ constructor(component: Vue | VueConstructor, props: any);
73
+ get element(): Element;
74
+ updateProps(props?: Record<string, any>): void;
75
+ destroy(): void;
76
+ }
77
+
78
+ export { Editor, EditorContent, type EditorContentInterface, NodeViewContent, type NodeViewContentInterface, NodeViewWrapper, type NodeViewWrapperInterface, VueNodeViewRenderer, type VueNodeViewRendererOptions, VueRenderer, nodeViewProps };