@milkdown/vue 6.4.1 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.es.js CHANGED
@@ -1,36 +1,34 @@
1
- var R = Object.defineProperty;
2
- var S = (o, e, t) => e in o ? R(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
- var g = (o, e, t) => (S(o, typeof e != "symbol" ? e + "" : e, t), t);
4
- import { inject as y, ref as u, onMounted as j, onUnmounted as C, defineComponent as v, createVNode as l, provide as k, h as K, markRaw as M, Teleport as U, shallowReactive as B, getCurrentInstance as A, onBeforeMount as L, effect as _, isVNode as q } from "vue";
5
- import { editorViewCtx as G, rootCtx as T } from "@milkdown/core";
6
- import { vueRendererCallOutOfScope as z } from "@milkdown/exception";
7
- import { Mark as F, Node as I } from "@milkdown/prose/model";
8
- import { customAlphabet as H } from "nanoid";
9
- const E = Symbol(), J = (o) => {
10
- const e = y(E, () => {
11
- throw z();
12
- }), { dom: t, loading: n, editor: s } = y(O, {}), a = u(!1);
1
+ var x = Object.defineProperty;
2
+ var S = (o, e, t) => e in o ? x(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
+ var p = (o, e, t) => (S(o, typeof e != "symbol" ? e + "" : e, t), t);
4
+ import { inject as v, ref as c, onMounted as j, onUnmounted as E, defineComponent as m, createVNode as l, provide as k, h as K, markRaw as M, Teleport as U, shallowReactive as B, getCurrentInstance as A, onBeforeMount as L, effect as _, isVNode as q } from "vue";
5
+ import { vueRendererCallOutOfScope as G } from "@milkdown/exception";
6
+ import { Mark as T, Node as I } from "@milkdown/prose/model";
7
+ import { customAlphabet as z } from "nanoid";
8
+ const C = Symbol(), F = (o) => {
9
+ const e = v(C, () => {
10
+ throw G();
11
+ }), { dom: t, loading: n, editor: a } = v(O, {}), s = c(!1);
13
12
  j(() => {
14
13
  if (!t.value)
15
14
  return;
16
- const r = o(t.value, e);
17
- !r || a.value || (n.value = !0, a.value = !0, r.create().then((i) => {
18
- s.value = i;
15
+ const i = o(t.value, e);
16
+ !i || s.value || (n.value = !0, s.value = !0, i.create().then((r) => {
17
+ a.value = r;
19
18
  }).finally(() => {
20
- n.value = !1, a.value = !1;
21
- }).catch((i) => console.error(i)));
22
- }), C(() => {
23
- var d, c, m;
24
- const r = (d = s.value) == null ? void 0 : d.action((f) => f.get(G)), i = (c = s.value) == null ? void 0 : c.action((f) => f.get(T));
25
- (m = i == null ? void 0 : i.firstChild) == null || m.remove(), r == null || r.destroy();
19
+ n.value = !1, s.value = !1;
20
+ }).catch((r) => console.error(r)));
21
+ }), E(() => {
22
+ var i;
23
+ (i = a.value) == null || i.destroy();
26
24
  });
27
- }, V = v({
25
+ }, V = m({
28
26
  name: "milkdown-dom-root",
29
27
  setup: (o, {
30
28
  slots: e
31
29
  }) => {
32
- J(o.editor);
33
- const t = y(O, {});
30
+ F(o.editor);
31
+ const t = v(O, {});
34
32
  return o.editorRef && (o.editorRef.get = () => t.editor.value, o.editorRef.dom = () => t.dom.value), () => {
35
33
  var n;
36
34
  return l("div", {
@@ -40,30 +38,30 @@ const E = Symbol(), J = (o) => {
40
38
  }
41
39
  });
42
40
  V.props = ["editor", "editorRef"];
43
- const b = Symbol(), ae = () => y(b), x = v({
41
+ const b = Symbol(), ie = () => v(b), N = m({
44
42
  name: "milkdown-node-container",
45
43
  setup: ({
46
44
  node: o,
47
45
  view: e,
48
46
  getPos: t,
49
47
  decorations: n,
50
- ctx: s,
51
- as: a
52
- }, r) => (k(b, {
53
- ctx: s,
48
+ ctx: a,
49
+ as: s
50
+ }, i) => (k(b, {
51
+ ctx: a,
54
52
  node: o,
55
53
  view: e,
56
54
  getPos: t,
57
55
  decorations: n
58
56
  }), () => {
59
- var i, d;
60
- return K(a, {
57
+ var r, d;
58
+ return K(s, {
61
59
  "data-view-container": !0
62
- }, (d = (i = r.slots).default) == null ? void 0 : d.call(i));
60
+ }, (d = (r = i.slots).default) == null ? void 0 : d.call(r));
63
61
  })
64
62
  });
65
- x.props = ["ctx", "editor", "node", "view", "getPos", "decorations", "as"];
66
- const N = v({
63
+ N.props = ["ctx", "editor", "node", "view", "getPos", "decorations", "as"];
64
+ const R = m({
67
65
  name: "milkdown-content",
68
66
  setup: ({
69
67
  isInline: o
@@ -73,20 +71,20 @@ const N = v({
73
71
  "data-view-content": !0
74
72
  }, null)
75
73
  });
76
- N.props = ["isInline"];
77
- const Q = H("abcedfghicklmn", 10), W = (o, e, t) => (n, s = {}) => (a) => (r, i, d, c) => new X(a, n, o, e, t, s, r, i, d, c);
74
+ R.props = ["isInline"];
75
+ const H = z("abcedfghicklmn", 10), J = (o, e, t) => (n, a = {}) => (s) => (i, r, d, f) => new Q(s, n, o, e, t, a, i, r, d, f);
78
76
  var P, D;
79
- class X {
80
- constructor(e, t, n, s, a, r, i, d, c, m) {
81
- g(this, "getPortal", () => {
77
+ class Q {
78
+ constructor(e, t, n, a, s, i, r, d, f, g) {
79
+ p(this, "getPortal", () => {
82
80
  const e = this.component, t = this.options.as ? this.options.as : this.isInlineOrMark ? "span" : "div";
83
- return M(v({
81
+ return M(m({
84
82
  name: "milkdown-portal",
85
83
  setup: () => () => l(U, {
86
84
  key: this.key,
87
85
  to: this.teleportDOM
88
86
  }, {
89
- default: () => [l(x, {
87
+ default: () => [l(N, {
90
88
  as: t,
91
89
  ctx: this.ctx,
92
90
  node: this.node,
@@ -95,7 +93,7 @@ class X {
95
93
  decorations: this.decorations
96
94
  }, {
97
95
  default: () => [l(e, null, {
98
- default: () => [l(N, {
96
+ default: () => [l(R, {
99
97
  isInline: this.isInlineOrMark
100
98
  }, null)]
101
99
  })]
@@ -103,14 +101,14 @@ class X {
103
101
  })
104
102
  }));
105
103
  });
106
- g(this, "selectNode", (P = this.options) == null ? void 0 : P.selectNode);
107
- g(this, "deselectNode", (D = this.options) == null ? void 0 : D.deselectNode);
108
- this.ctx = e, this.component = t, this.rootInstance = n, this.addPortal = s, this.removePortalByKey = a, this.options = r, this.view = d, this.getPos = c, this.key = Q(), this.node = u(i), this.decorations = u(m);
109
- const f = r.as ? r.as : this.isInlineOrMark ? "span" : "div";
110
- this.teleportDOM = document.createElement(f), this.renderPortal();
104
+ p(this, "selectNode", (P = this.options) == null ? void 0 : P.selectNode);
105
+ p(this, "deselectNode", (D = this.options) == null ? void 0 : D.deselectNode);
106
+ this.ctx = e, this.component = t, this.rootInstance = n, this.addPortal = a, this.removePortalByKey = s, this.options = i, this.view = d, this.getPos = f, this.key = H(), this.node = c(r), this.decorations = c(g);
107
+ const y = i.as ? i.as : this.isInlineOrMark ? "span" : "div";
108
+ this.teleportDOM = document.createElement(y), this.renderPortal();
111
109
  }
112
110
  get isInlineOrMark() {
113
- return this.node.value instanceof F || this.node.value.isInline;
111
+ return this.node.value instanceof T || this.node.value.isInline;
114
112
  }
115
113
  get dom() {
116
114
  return this.teleportDOM.firstElementChild || this.teleportDOM;
@@ -136,9 +134,9 @@ class X {
136
134
  }
137
135
  update(e, t, n) {
138
136
  return (() => {
139
- var r, i;
137
+ var i, r;
140
138
  if (this.options.update) {
141
- const d = (i = (r = this.options).update) == null ? void 0 : i.call(r, e, t, n);
139
+ const d = (r = (i = this.options).update) == null ? void 0 : r.call(i, e, t, n);
142
140
  if (d != null)
143
141
  return d;
144
142
  }
@@ -146,10 +144,10 @@ class X {
146
144
  })();
147
145
  }
148
146
  }
149
- function Y(o) {
147
+ function W(o) {
150
148
  return typeof o == "function" || Object.prototype.toString.call(o) === "[object Object]" && !q(o);
151
149
  }
152
- const O = Symbol(), Z = `
150
+ const O = Symbol(), X = `
153
151
  @milkdown/vue:
154
152
  Passing ref to VueEditor will soon be deprecated, please use:
155
153
 
@@ -163,63 +161,63 @@ effect(() => {
163
161
  })
164
162
 
165
163
  <VueEditor editor={editor} />
166
- `, $ = `
164
+ `, Y = `
167
165
  @milkdown/vue:
168
166
  Passing editor directly to VueEditor will soon be deprecated, please use:
169
167
 
170
168
  const { editor } = useEditor(/* creator */);
171
169
 
172
170
  <VueEditor editor={editor} />
173
- `, ee = v({
171
+ `, Z = m({
174
172
  name: "milkdown-vue-root",
175
173
  setup: (o) => {
176
- const e = B([]), t = A(), n = u(null);
174
+ const e = B([]), t = A(), n = c(null);
177
175
  L(() => {
178
176
  n.value = t.ctx._;
179
- }), C(() => {
177
+ }), E(() => {
180
178
  n.value = null;
181
179
  });
182
- const s = M((h, p) => {
183
- e.push([p, h]);
184
- }), a = M((h) => {
185
- const p = e.findIndex((w) => w[0] === h);
186
- e.splice(p, 1);
187
- }), r = W(n, s, a);
188
- k(E, r);
189
- const i = Object.hasOwnProperty.call(o.editor, "getInstance"), {
180
+ const a = M((u, h) => {
181
+ e.push([h, u]);
182
+ }), s = M((u) => {
183
+ const h = e.findIndex((w) => w[0] === u);
184
+ e.splice(h, 1);
185
+ }), i = J(n, a, s);
186
+ k(C, i);
187
+ const r = Object.hasOwnProperty.call(o.editor, "getInstance"), {
190
188
  getEditorCallback: d,
191
- dom: c,
192
- editor: m,
193
- loading: f
194
- } = i ? o.editor.editor : o.editor;
189
+ dom: f,
190
+ editor: g,
191
+ loading: y
192
+ } = r ? o.editor.editor : o.editor;
195
193
  return _(() => {
196
- i && console.warn($), o.editorRef && console.warn(Z);
194
+ r && console.warn(Y), o.editorRef && console.warn(X);
197
195
  }), k(O, {
198
- dom: c,
199
- editor: m,
200
- loading: f
196
+ dom: f,
197
+ editor: g,
198
+ loading: y
201
199
  }), () => {
202
- const h = e.map(([p, w]) => l(w, {
203
- key: p
200
+ const u = e.map(([h, w]) => l(w, {
201
+ key: h
204
202
  }, null));
205
203
  return l(V, {
206
204
  editorRef: o.editorRef,
207
205
  editor: d.value
208
- }, Y(h) ? h : {
209
- default: () => [h]
206
+ }, W(u) ? u : {
207
+ default: () => [u]
210
208
  });
211
209
  };
212
210
  }
213
211
  });
214
- ee.props = ["editor", "editorRef"];
215
- const de = (o) => {
216
- const e = u(null), t = u(), n = u(!0), s = u((...a) => o(...a));
212
+ Z.props = ["editor", "editorRef"];
213
+ const re = (o) => {
214
+ const e = c(null), t = c(), n = c(!0), a = c((...s) => o(...s));
217
215
  return {
218
216
  loading: n,
219
217
  getInstance: () => t.value,
220
218
  getDom: () => e.value,
221
219
  editor: {
222
- getEditorCallback: s,
220
+ getEditorCallback: a,
223
221
  dom: e,
224
222
  editor: t,
225
223
  loading: n
@@ -227,12 +225,12 @@ const de = (o) => {
227
225
  };
228
226
  };
229
227
  export {
230
- N as Content,
231
- ee as VueEditor,
232
- x as VueNodeContainer,
228
+ R as Content,
229
+ Z as VueEditor,
230
+ N as VueNodeContainer,
233
231
  O as editorInfoCtxKey,
234
232
  b as nodeMetadata,
235
- de as useEditor,
236
- ae as useNodeCtx
233
+ re as useEditor,
234
+ ie as useNodeCtx
237
235
  };
238
236
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/useGetEditor.ts","../src/EditorComponent.tsx","../src/VueNode.tsx","../src/VueNodeView.tsx","../src/Editor.tsx","../src/useEditor.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, editorViewCtx, rootCtx } from '@milkdown/core';\nimport { vueRendererCallOutOfScope } from '@milkdown/exception';\nimport { MarkViewConstructor, NodeViewConstructor } from '@milkdown/prose/view';\nimport { DefineComponent, inject, InjectionKey, onMounted, onUnmounted, ref } from 'vue';\n\nimport { editorInfoCtxKey } from '.';\nimport { EditorInfoCtx, GetEditor, RenderOptions, RenderVue } from './types';\n\nexport const rendererKey: InjectionKey<\n (component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => NodeViewConstructor | MarkViewConstructor\n> = Symbol();\n\nexport const useGetEditor = (getEditor: GetEditor) => {\n const renderVue = inject<RenderVue>(rendererKey, () => {\n throw vueRendererCallOutOfScope();\n });\n const { dom, loading, editor: editorRef } = inject(editorInfoCtxKey, {} as EditorInfoCtx);\n const lock = ref(false);\n\n onMounted(() => {\n if (!dom.value) return;\n\n const editor = getEditor(dom.value, renderVue);\n if (!editor) return;\n\n if (lock.value) return;\n\n loading.value = true;\n lock.value = true;\n\n editor\n .create()\n .then((editor) => {\n editorRef.value = editor;\n return;\n })\n .finally(() => {\n loading.value = false;\n lock.value = false;\n })\n .catch((e) => console.error(e));\n });\n onUnmounted(() => {\n const view = editorRef.value?.action((ctx) => ctx.get(editorViewCtx));\n const root = editorRef.value?.action((ctx) => ctx.get(rootCtx)) as HTMLElement;\n\n root?.firstChild?.remove();\n view?.destroy();\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Editor } from '@milkdown/core';\nimport { defineComponent, h, inject } from 'vue';\n\nimport { editorInfoCtxKey } from './Editor';\nimport { EditorInfoCtx, GetEditor } from './types';\nimport { useGetEditor } from './useGetEditor';\n\nexport const EditorComponent = defineComponent<{ editor: GetEditor; editorRef?: EditorRef }>({\n name: 'milkdown-dom-root',\n setup: (props, { slots }) => {\n useGetEditor(props.editor);\n const ctx = inject(editorInfoCtxKey, {} as EditorInfoCtx);\n\n if (props.editorRef) {\n props.editorRef.get = () => ctx.editor.value;\n props.editorRef.dom = () => ctx.dom.value;\n }\n\n return () => <div ref={ctx.dom}>{slots['default']?.()}</div>;\n },\n});\nEditorComponent['props'] = ['editor', 'editorRef'];\n\nexport type EditorRef = { get: () => Editor | undefined; dom: () => HTMLDivElement | null };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { Mark, Node } from '@milkdown/prose/model';\nimport { Decoration, EditorView } from '@milkdown/prose/view';\nimport { defineComponent, h, inject, InjectionKey, provide, Ref } from 'vue';\n\nexport type NodeContext<T extends Node | Mark = Node | Mark> = {\n ctx: Ctx;\n node: Ref<T>;\n view: EditorView;\n getPos: T extends Mark ? boolean : T extends Node ? () => number : boolean | (() => number);\n decorations: Ref<readonly Decoration[]>;\n};\n\nexport const nodeMetadata: InjectionKey<NodeContext> = Symbol();\n\nexport type UseNodeCtx = <T extends Node | Mark = Node | Mark>() => NodeContext<T>;\nexport const useNodeCtx: UseNodeCtx = () => inject(nodeMetadata) as NodeContext<never>;\n\nexport const VueNodeContainer = defineComponent<NodeContext & { as: string }>({\n name: 'milkdown-node-container',\n setup: ({ node, view, getPos, decorations, ctx, as }, context) => {\n provide(nodeMetadata, {\n ctx,\n node,\n view,\n getPos,\n decorations,\n });\n return () => h(as, { 'data-view-container': true }, context.slots['default']?.());\n },\n});\nVueNodeContainer['props'] = ['ctx', 'editor', 'node', 'view', 'getPos', 'decorations', 'as'];\n\nexport const Content = defineComponent<{ isInline?: boolean }>({\n name: 'milkdown-content',\n setup: ({ isInline }) => {\n return () => (isInline ? <span data-view-content /> : <div data-view-content />);\n },\n});\nContent['props'] = ['isInline'];\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { Mark, Node } from '@milkdown/prose/model';\nimport type {\n Decoration,\n DecorationSource,\n EditorView,\n MarkViewConstructor,\n NodeView,\n NodeViewConstructor,\n} from '@milkdown/prose/view';\nimport { customAlphabet } from 'nanoid';\nimport { ComponentInternalInstance, DefineComponent, defineComponent, h, markRaw, Ref, ref, Teleport } from 'vue';\n\nimport { Content, VueNodeContainer } from './VueNode';\n\nconst nanoid = customAlphabet('abcedfghicklmn', 10);\n\nexport type RenderOptions = Partial<\n {\n as: string;\n update?: (node: Node, decorations: readonly Decoration[], innerDecorations: DecorationSource) => boolean;\n } & Pick<NodeView, 'ignoreMutation' | 'deselectNode' | 'selectNode' | 'destroy'>\n>;\n\nexport const createVueView =\n (\n rootInstance: Ref<null | ComponentInternalInstance>,\n addPortal: (portal: DefineComponent, key: string) => void,\n removePortalByKey: (key: string) => void,\n ) =>\n (\n component: DefineComponent,\n options: RenderOptions = {},\n ): ((ctx: Ctx) => NodeViewConstructor | MarkViewConstructor) =>\n (ctx) =>\n (node, view, getPos, decorations) =>\n new VueNodeView(\n ctx,\n component,\n rootInstance,\n addPortal,\n removePortalByKey,\n options,\n node,\n view,\n getPos,\n decorations,\n );\n\nexport class VueNodeView implements NodeView {\n teleportDOM: HTMLElement;\n key: string;\n\n get isInlineOrMark() {\n return this.node.value instanceof Mark || this.node.value.isInline;\n }\n\n private node: Ref<Node | Mark>;\n private decorations: Ref<readonly Decoration[]>;\n\n constructor(\n private ctx: Ctx,\n private component: DefineComponent,\n private rootInstance: Ref<null | ComponentInternalInstance>,\n private addPortal: (portal: DefineComponent, key: string) => void,\n private removePortalByKey: (key: string) => void,\n private options: RenderOptions,\n node: Node | Mark,\n private view: EditorView,\n private getPos: boolean | (() => number),\n decorations: readonly Decoration[],\n ) {\n this.key = nanoid();\n this.node = ref(node);\n this.decorations = ref(decorations);\n const elementName = options.as ? options.as : this.isInlineOrMark ? 'span' : 'div';\n this.teleportDOM = document.createElement(elementName);\n this.renderPortal();\n }\n\n get dom() {\n return (this.teleportDOM.firstElementChild || this.teleportDOM) as HTMLElement;\n }\n\n get contentDOM() {\n if (this.node instanceof Node && this.node.isLeaf) {\n return undefined;\n }\n\n return this.teleportDOM.querySelector<HTMLElement>('[data-view-content]') || this.dom;\n }\n\n getPortal = (): DefineComponent => {\n const CustomComponent = this.component;\n const elementName = this.options.as ? this.options.as : this.isInlineOrMark ? 'span' : 'div';\n return markRaw(\n defineComponent({\n name: 'milkdown-portal',\n setup: () => {\n return () => (\n <Teleport key={this.key} to={this.teleportDOM}>\n <VueNodeContainer\n as={elementName}\n ctx={this.ctx}\n node={this.node}\n view={this.view}\n getPos={this.getPos}\n decorations={this.decorations}\n >\n <CustomComponent>\n <Content isInline={this.isInlineOrMark} />\n </CustomComponent>\n </VueNodeContainer>\n </Teleport>\n );\n },\n }) as DefineComponent,\n );\n };\n\n renderPortal() {\n if (!this.teleportDOM) return;\n\n const Portal = this.getPortal();\n this.addPortal(Portal, this.key);\n const instance = this.rootInstance.value;\n if (instance) {\n instance.update();\n }\n }\n\n destroy() {\n this.options.destroy?.();\n this.teleportDOM.remove();\n this.removePortalByKey(this.key);\n }\n\n ignoreMutation(mutation: MutationRecord) {\n if (this.options.ignoreMutation) {\n return this.options.ignoreMutation(mutation);\n }\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n\n if (this.node instanceof Node) {\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n }\n\n if ((mutation as unknown as { type: string }).type === 'selection') {\n return false;\n }\n\n if (this.contentDOM === this.dom) {\n return false;\n }\n\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n\n return true;\n }\n\n update(node: Node, decorations: readonly Decoration[], innerDecorations: DecorationSource) {\n const innerUpdate = () => {\n if (this.options.update) {\n const result = this.options.update?.(node, decorations, innerDecorations);\n if (result != null) {\n return result;\n }\n }\n if (this.node.value.type !== node.type) {\n return false;\n }\n\n if (node === this.node.value && this.decorations.value === decorations) {\n return true;\n }\n\n this.node.value = node;\n this.decorations.value = decorations;\n return true;\n };\n\n const shouldUpdate = innerUpdate();\n\n return shouldUpdate;\n }\n\n selectNode = this.options?.selectNode;\n\n deselectNode = this.options?.deselectNode;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport {\n ComponentInternalInstance,\n DefineComponent,\n defineComponent,\n effect,\n getCurrentInstance,\n h,\n InjectionKey,\n markRaw,\n onBeforeMount,\n onUnmounted,\n provide,\n ref,\n shallowReactive,\n} from 'vue';\n\nimport { EditorComponent, EditorRef } from './EditorComponent';\nimport { EditorInfo, EditorInfoCtx } from './types';\nimport { rendererKey } from './useGetEditor';\nimport { createVueView } from './VueNodeView';\n\nexport const editorInfoCtxKey: InjectionKey<EditorInfoCtx> = Symbol();\n\nconst refDeprecatedInfo = `\n@milkdown/vue:\nPassing ref to VueEditor will soon be deprecated, please use:\n\nconst { editor, getInstance, getDom, loading } = useEditor(/* creator */);\n\neffect(() => {\n if (!loading) {\n const editor = getInstance();\n const rootDOM = getDom();\n }\n})\n\n<VueEditor editor={editor} />\n`;\n\nconst compositionDeprecatedInfo = `\n@milkdown/vue:\nPassing editor directly to VueEditor will soon be deprecated, please use:\n\nconst { editor } = useEditor(/* creator */);\n\n<VueEditor editor={editor} />\n`;\n\ntype PortalPair = [key: string, component: DefineComponent];\nexport const VueEditor = defineComponent<{ editor: EditorInfo; editorRef?: EditorRef }>({\n name: 'milkdown-vue-root',\n setup: (props) => {\n const portals = shallowReactive<PortalPair[]>([]);\n\n const instance = getCurrentInstance();\n\n const rootInstance = ref<null | ComponentInternalInstance>(null);\n\n onBeforeMount(() => {\n rootInstance.value = (instance as ComponentInternalInstance & { ctx: { _: ComponentInternalInstance } }).ctx\n ._ as ComponentInternalInstance;\n });\n\n onUnmounted(() => {\n rootInstance.value = null;\n });\n\n const addPortal = markRaw((component: DefineComponent, key: string) => {\n portals.push([key, component]);\n });\n const removePortalByKey = markRaw((key: string) => {\n const index = portals.findIndex((p) => p[0] === key);\n portals.splice(index, 1);\n });\n const renderVue = createVueView(rootInstance, addPortal, removePortalByKey);\n\n provide(rendererKey, renderVue);\n\n const usingDeprecatedCompositionAPI = Object.hasOwnProperty.call(props.editor, 'getInstance');\n\n const { getEditorCallback, dom, editor, loading } = usingDeprecatedCompositionAPI\n ? // @ts-expect-error deprecated old composition API\n (props.editor.editor as EditorInfo)\n : props.editor;\n\n effect(() => {\n if (usingDeprecatedCompositionAPI) {\n console.warn(compositionDeprecatedInfo);\n }\n if (props.editorRef) {\n console.warn(refDeprecatedInfo);\n }\n });\n\n provide(editorInfoCtxKey, {\n dom,\n editor,\n loading,\n });\n\n return () => {\n const portalElements = portals.map(([id, P]) => <P key={id} />);\n return (\n <EditorComponent editorRef={props.editorRef} editor={getEditorCallback.value}>\n {portalElements}\n </EditorComponent>\n );\n };\n },\n});\nVueEditor['props'] = ['editor', 'editorRef'];\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Editor } from '@milkdown/core';\nimport { ref } from 'vue';\n\nimport { GetEditor, UseEditorReturn } from './types';\n\nexport const useEditor = (getEditor: GetEditor): UseEditorReturn => {\n const dom = ref<HTMLDivElement | null>(null);\n const editor = ref<Editor>();\n const loading = ref(true);\n const getEditorCallback = ref<GetEditor>((...args) => getEditor(...args));\n\n return {\n loading,\n getInstance: () => editor.value,\n getDom: () => dom.value,\n editor: {\n getEditorCallback,\n dom,\n editor,\n loading,\n },\n };\n};\n"],"names":["EditorComponent","defineComponent","name","setup","props","slots","useGetEditor","editor","ctx","inject","editorInfoCtxKey","editorRef","get","value","dom","_createVNode","nodeMetadata","Symbol","useNodeCtx","VueNodeContainer","node","view","getPos","decorations","as","context","provide","h","Content","isInline","nanoid","customAlphabet","createVueView","rootInstance","addPortal","removePortalByKey","component","options","VueNodeView","constructor","getPortal","CustomComponent","elementName","isInlineOrMark","markRaw","key","teleportDOM","selectNode","deselectNode","ref","document","createElement","renderPortal","Mark","firstElementChild","contentDOM","Node","isLeaf","querySelector","Portal","instance","update","destroy","remove","ignoreMutation","mutation","isAtom","type","contains","target","innerDecorations","innerUpdate","result","refDeprecatedInfo","compositionDeprecatedInfo","VueEditor","portals","shallowReactive","getCurrentInstance","onBeforeMount","_","onUnmounted","push","index","findIndex","p","splice","renderVue","rendererKey","usingDeprecatedCompositionAPI","Object","hasOwnProperty","call","getEditorCallback","loading","effect","console","warn","portalElements","map","id","P"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/useGetEditor.ts","../src/EditorComponent.tsx","../src/VueNode.tsx","../src/VueNodeView.tsx","../src/Editor.tsx","../src/useEditor.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { vueRendererCallOutOfScope } from '@milkdown/exception';\nimport { MarkViewConstructor, NodeViewConstructor } from '@milkdown/prose/view';\nimport { DefineComponent, inject, InjectionKey, onMounted, onUnmounted, ref } from 'vue';\n\nimport { editorInfoCtxKey } from '.';\nimport { EditorInfoCtx, GetEditor, RenderOptions, RenderVue } from './types';\n\nexport const rendererKey: InjectionKey<\n (component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => NodeViewConstructor | MarkViewConstructor\n> = Symbol();\n\nexport const useGetEditor = (getEditor: GetEditor) => {\n const renderVue = inject<RenderVue>(rendererKey, () => {\n throw vueRendererCallOutOfScope();\n });\n const { dom, loading, editor: editorRef } = inject(editorInfoCtxKey, {} as EditorInfoCtx);\n const lock = ref(false);\n\n onMounted(() => {\n if (!dom.value) return;\n\n const editor = getEditor(dom.value, renderVue);\n if (!editor) return;\n\n if (lock.value) return;\n\n loading.value = true;\n lock.value = true;\n\n editor\n .create()\n .then((editor) => {\n editorRef.value = editor;\n return;\n })\n .finally(() => {\n loading.value = false;\n lock.value = false;\n })\n .catch((e) => console.error(e));\n });\n onUnmounted(() => {\n editorRef.value?.destroy();\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Editor } from '@milkdown/core';\nimport { defineComponent, h, inject } from 'vue';\n\nimport { editorInfoCtxKey } from './Editor';\nimport { EditorInfoCtx, GetEditor } from './types';\nimport { useGetEditor } from './useGetEditor';\n\nexport const EditorComponent = defineComponent<{ editor: GetEditor; editorRef?: EditorRef }>({\n name: 'milkdown-dom-root',\n setup: (props, { slots }) => {\n useGetEditor(props.editor);\n const ctx = inject(editorInfoCtxKey, {} as EditorInfoCtx);\n\n if (props.editorRef) {\n props.editorRef.get = () => ctx.editor.value;\n props.editorRef.dom = () => ctx.dom.value;\n }\n\n return () => <div ref={ctx.dom}>{slots['default']?.()}</div>;\n },\n});\nEditorComponent['props'] = ['editor', 'editorRef'];\n\nexport type EditorRef = { get: () => Editor | undefined; dom: () => HTMLDivElement | null };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { Mark, Node } from '@milkdown/prose/model';\nimport { Decoration, EditorView } from '@milkdown/prose/view';\nimport { defineComponent, h, inject, InjectionKey, provide, Ref } from 'vue';\n\nexport type NodeContext<T extends Node | Mark = Node | Mark> = {\n ctx: Ctx;\n node: Ref<T>;\n view: EditorView;\n getPos: T extends Mark ? boolean : T extends Node ? () => number : boolean | (() => number);\n decorations: Ref<readonly Decoration[]>;\n};\n\nexport const nodeMetadata: InjectionKey<NodeContext> = Symbol();\n\nexport type UseNodeCtx = <T extends Node | Mark = Node | Mark>() => NodeContext<T>;\nexport const useNodeCtx: UseNodeCtx = () => inject(nodeMetadata) as NodeContext<never>;\n\nexport const VueNodeContainer = defineComponent<NodeContext & { as: string }>({\n name: 'milkdown-node-container',\n setup: ({ node, view, getPos, decorations, ctx, as }, context) => {\n provide(nodeMetadata, {\n ctx,\n node,\n view,\n getPos,\n decorations,\n });\n return () => h(as, { 'data-view-container': true }, context.slots['default']?.());\n },\n});\nVueNodeContainer['props'] = ['ctx', 'editor', 'node', 'view', 'getPos', 'decorations', 'as'];\n\nexport const Content = defineComponent<{ isInline?: boolean }>({\n name: 'milkdown-content',\n setup: ({ isInline }) => {\n return () => (isInline ? <span data-view-content /> : <div data-view-content />);\n },\n});\nContent['props'] = ['isInline'];\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { Mark, Node } from '@milkdown/prose/model';\nimport type {\n Decoration,\n DecorationSource,\n EditorView,\n MarkViewConstructor,\n NodeView,\n NodeViewConstructor,\n} from '@milkdown/prose/view';\nimport { customAlphabet } from 'nanoid';\nimport { ComponentInternalInstance, DefineComponent, defineComponent, h, markRaw, Ref, ref, Teleport } from 'vue';\n\nimport { Content, VueNodeContainer } from './VueNode';\n\nconst nanoid = customAlphabet('abcedfghicklmn', 10);\n\nexport type RenderOptions = Partial<\n {\n as: string;\n update?: (node: Node, decorations: readonly Decoration[], innerDecorations: DecorationSource) => boolean;\n } & Pick<NodeView, 'ignoreMutation' | 'deselectNode' | 'selectNode' | 'destroy'>\n>;\n\nexport const createVueView =\n (\n rootInstance: Ref<null | ComponentInternalInstance>,\n addPortal: (portal: DefineComponent, key: string) => void,\n removePortalByKey: (key: string) => void,\n ) =>\n (\n component: DefineComponent,\n options: RenderOptions = {},\n ): ((ctx: Ctx) => NodeViewConstructor | MarkViewConstructor) =>\n (ctx) =>\n (node, view, getPos, decorations) =>\n new VueNodeView(\n ctx,\n component,\n rootInstance,\n addPortal,\n removePortalByKey,\n options,\n node,\n view,\n getPos,\n decorations,\n );\n\nexport class VueNodeView implements NodeView {\n teleportDOM: HTMLElement;\n key: string;\n\n get isInlineOrMark() {\n return this.node.value instanceof Mark || this.node.value.isInline;\n }\n\n private node: Ref<Node | Mark>;\n private decorations: Ref<readonly Decoration[]>;\n\n constructor(\n private ctx: Ctx,\n private component: DefineComponent,\n private rootInstance: Ref<null | ComponentInternalInstance>,\n private addPortal: (portal: DefineComponent, key: string) => void,\n private removePortalByKey: (key: string) => void,\n private options: RenderOptions,\n node: Node | Mark,\n private view: EditorView,\n private getPos: boolean | (() => number),\n decorations: readonly Decoration[],\n ) {\n this.key = nanoid();\n this.node = ref(node);\n this.decorations = ref(decorations);\n const elementName = options.as ? options.as : this.isInlineOrMark ? 'span' : 'div';\n this.teleportDOM = document.createElement(elementName);\n this.renderPortal();\n }\n\n get dom() {\n return (this.teleportDOM.firstElementChild || this.teleportDOM) as HTMLElement;\n }\n\n get contentDOM() {\n if (this.node instanceof Node && this.node.isLeaf) {\n return undefined;\n }\n\n return this.teleportDOM.querySelector<HTMLElement>('[data-view-content]') || this.dom;\n }\n\n getPortal = (): DefineComponent => {\n const CustomComponent = this.component;\n const elementName = this.options.as ? this.options.as : this.isInlineOrMark ? 'span' : 'div';\n return markRaw(\n defineComponent({\n name: 'milkdown-portal',\n setup: () => {\n return () => (\n <Teleport key={this.key} to={this.teleportDOM}>\n <VueNodeContainer\n as={elementName}\n ctx={this.ctx}\n node={this.node}\n view={this.view}\n getPos={this.getPos}\n decorations={this.decorations}\n >\n <CustomComponent>\n <Content isInline={this.isInlineOrMark} />\n </CustomComponent>\n </VueNodeContainer>\n </Teleport>\n );\n },\n }) as DefineComponent,\n );\n };\n\n renderPortal() {\n if (!this.teleportDOM) return;\n\n const Portal = this.getPortal();\n this.addPortal(Portal, this.key);\n const instance = this.rootInstance.value;\n if (instance) {\n instance.update();\n }\n }\n\n destroy() {\n this.options.destroy?.();\n this.teleportDOM.remove();\n this.removePortalByKey(this.key);\n }\n\n ignoreMutation(mutation: MutationRecord) {\n if (this.options.ignoreMutation) {\n return this.options.ignoreMutation(mutation);\n }\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n\n if (this.node instanceof Node) {\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n }\n\n if ((mutation as unknown as { type: string }).type === 'selection') {\n return false;\n }\n\n if (this.contentDOM === this.dom) {\n return false;\n }\n\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n\n return true;\n }\n\n update(node: Node, decorations: readonly Decoration[], innerDecorations: DecorationSource) {\n const innerUpdate = () => {\n if (this.options.update) {\n const result = this.options.update?.(node, decorations, innerDecorations);\n if (result != null) {\n return result;\n }\n }\n if (this.node.value.type !== node.type) {\n return false;\n }\n\n if (node === this.node.value && this.decorations.value === decorations) {\n return true;\n }\n\n this.node.value = node;\n this.decorations.value = decorations;\n return true;\n };\n\n const shouldUpdate = innerUpdate();\n\n return shouldUpdate;\n }\n\n selectNode = this.options?.selectNode;\n\n deselectNode = this.options?.deselectNode;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport {\n ComponentInternalInstance,\n DefineComponent,\n defineComponent,\n effect,\n getCurrentInstance,\n h,\n InjectionKey,\n markRaw,\n onBeforeMount,\n onUnmounted,\n provide,\n ref,\n shallowReactive,\n} from 'vue';\n\nimport { EditorComponent, EditorRef } from './EditorComponent';\nimport { EditorInfo, EditorInfoCtx } from './types';\nimport { rendererKey } from './useGetEditor';\nimport { createVueView } from './VueNodeView';\n\nexport const editorInfoCtxKey: InjectionKey<EditorInfoCtx> = Symbol();\n\nconst refDeprecatedInfo = `\n@milkdown/vue:\nPassing ref to VueEditor will soon be deprecated, please use:\n\nconst { editor, getInstance, getDom, loading } = useEditor(/* creator */);\n\neffect(() => {\n if (!loading) {\n const editor = getInstance();\n const rootDOM = getDom();\n }\n})\n\n<VueEditor editor={editor} />\n`;\n\nconst compositionDeprecatedInfo = `\n@milkdown/vue:\nPassing editor directly to VueEditor will soon be deprecated, please use:\n\nconst { editor } = useEditor(/* creator */);\n\n<VueEditor editor={editor} />\n`;\n\ntype PortalPair = [key: string, component: DefineComponent];\nexport const VueEditor = defineComponent<{ editor: EditorInfo; editorRef?: EditorRef }>({\n name: 'milkdown-vue-root',\n setup: (props) => {\n const portals = shallowReactive<PortalPair[]>([]);\n\n const instance = getCurrentInstance();\n\n const rootInstance = ref<null | ComponentInternalInstance>(null);\n\n onBeforeMount(() => {\n rootInstance.value = (instance as ComponentInternalInstance & { ctx: { _: ComponentInternalInstance } }).ctx\n ._ as ComponentInternalInstance;\n });\n\n onUnmounted(() => {\n rootInstance.value = null;\n });\n\n const addPortal = markRaw((component: DefineComponent, key: string) => {\n portals.push([key, component]);\n });\n const removePortalByKey = markRaw((key: string) => {\n const index = portals.findIndex((p) => p[0] === key);\n portals.splice(index, 1);\n });\n const renderVue = createVueView(rootInstance, addPortal, removePortalByKey);\n\n provide(rendererKey, renderVue);\n\n const usingDeprecatedCompositionAPI = Object.hasOwnProperty.call(props.editor, 'getInstance');\n\n const { getEditorCallback, dom, editor, loading } = usingDeprecatedCompositionAPI\n ? // @ts-expect-error deprecated old composition API\n (props.editor.editor as EditorInfo)\n : props.editor;\n\n effect(() => {\n if (usingDeprecatedCompositionAPI) {\n console.warn(compositionDeprecatedInfo);\n }\n if (props.editorRef) {\n console.warn(refDeprecatedInfo);\n }\n });\n\n provide(editorInfoCtxKey, {\n dom,\n editor,\n loading,\n });\n\n return () => {\n const portalElements = portals.map(([id, P]) => <P key={id} />);\n return (\n <EditorComponent editorRef={props.editorRef} editor={getEditorCallback.value}>\n {portalElements}\n </EditorComponent>\n );\n };\n },\n});\nVueEditor['props'] = ['editor', 'editorRef'];\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Editor } from '@milkdown/core';\nimport { ref } from 'vue';\n\nimport { GetEditor, UseEditorReturn } from './types';\n\nexport const useEditor = (getEditor: GetEditor): UseEditorReturn => {\n const dom = ref<HTMLDivElement | null>(null);\n const editor = ref<Editor>();\n const loading = ref(true);\n const getEditorCallback = ref<GetEditor>((...args) => getEditor(...args));\n\n return {\n loading,\n getInstance: () => editor.value,\n getDom: () => dom.value,\n editor: {\n getEditorCallback,\n dom,\n editor,\n loading,\n },\n };\n};\n"],"names":["EditorComponent","defineComponent","name","setup","props","slots","useGetEditor","editor","ctx","inject","editorInfoCtxKey","editorRef","get","value","dom","_createVNode","nodeMetadata","Symbol","useNodeCtx","VueNodeContainer","node","view","getPos","decorations","as","context","provide","h","Content","isInline","nanoid","customAlphabet","createVueView","rootInstance","addPortal","removePortalByKey","component","options","VueNodeView","constructor","getPortal","CustomComponent","elementName","isInlineOrMark","markRaw","key","teleportDOM","selectNode","deselectNode","ref","document","createElement","renderPortal","Mark","firstElementChild","contentDOM","Node","isLeaf","querySelector","Portal","instance","update","destroy","remove","ignoreMutation","mutation","isAtom","type","contains","target","innerDecorations","innerUpdate","result","refDeprecatedInfo","compositionDeprecatedInfo","VueEditor","portals","shallowReactive","getCurrentInstance","onBeforeMount","_","onUnmounted","push","index","findIndex","p","splice","renderVue","rendererKey","usingDeprecatedCompositionAPI","Object","hasOwnProperty","call","getEditorCallback","loading","effect","console","warn","portalElements","map","id","P"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGetEditor.d.ts","sourceRoot":"","sources":["../src/useGetEditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAA0B,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAU,YAAY,EAA+B,MAAM,KAAK,CAAC;AAGzF,OAAO,EAAiB,SAAS,EAAE,aAAa,EAAa,MAAM,SAAS,CAAC;AAE7E,eAAO,MAAM,WAAW,EAAE,YAAY,CAClC,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,mBAAmB,GAAG,mBAAmB,CACxG,CAAC;AAEb,eAAO,MAAM,YAAY,cAAe,SAAS,SAqChD,CAAC"}
1
+ {"version":3,"file":"useGetEditor.d.ts","sourceRoot":"","sources":["../src/useGetEditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAU,YAAY,EAA+B,MAAM,KAAK,CAAC;AAGzF,OAAO,EAAiB,SAAS,EAAE,aAAa,EAAa,MAAM,SAAS,CAAC;AAE7E,eAAO,MAAM,WAAW,EAAE,YAAY,CAClC,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,mBAAmB,GAAG,mBAAmB,CACxG,CAAC;AAEb,eAAO,MAAM,YAAY,cAAe,SAAS,SAiChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milkdown/vue",
3
- "version": "6.4.1",
3
+ "version": "6.5.0",
4
4
  "type": "module",
5
5
  "main": "./lib/index.es.js",
6
6
  "types": "./lib/index.d.ts",
@@ -16,8 +16,8 @@
16
16
  "vue"
17
17
  ],
18
18
  "dependencies": {
19
- "@milkdown/utils": "6.4.1",
20
- "@milkdown/exception": "6.4.1",
19
+ "@milkdown/utils": "6.5.0",
20
+ "@milkdown/exception": "6.5.0",
21
21
  "nanoid": "^4.0.0",
22
22
  "tslib": "^2.4.0"
23
23
  },
@@ -27,8 +27,8 @@
27
27
  "vue": "^3.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@milkdown/core": "6.4.1",
31
- "@milkdown/prose": "6.4.1",
30
+ "@milkdown/core": "6.5.0",
31
+ "@milkdown/prose": "6.5.0",
32
32
  "vue": "^3.2.38"
33
33
  },
34
34
  "nx": {
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { Ctx, editorViewCtx, rootCtx } from '@milkdown/core';
2
+ import { Ctx } from '@milkdown/core';
3
3
  import { vueRendererCallOutOfScope } from '@milkdown/exception';
4
4
  import { MarkViewConstructor, NodeViewConstructor } from '@milkdown/prose/view';
5
5
  import { DefineComponent, inject, InjectionKey, onMounted, onUnmounted, ref } from 'vue';
@@ -42,10 +42,6 @@ export const useGetEditor = (getEditor: GetEditor) => {
42
42
  .catch((e) => console.error(e));
43
43
  });
44
44
  onUnmounted(() => {
45
- const view = editorRef.value?.action((ctx) => ctx.get(editorViewCtx));
46
- const root = editorRef.value?.action((ctx) => ctx.get(rootCtx)) as HTMLElement;
47
-
48
- root?.firstChild?.remove();
49
- view?.destroy();
45
+ editorRef.value?.destroy();
50
46
  });
51
47
  };