@milkdown/vue 6.0.2 → 6.1.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/README.md +1 -1
- package/lib/Editor.d.ts +1 -1
- package/lib/Editor.d.ts.map +1 -1
- package/lib/VueNode.d.ts +2 -2
- package/lib/VueNode.d.ts.map +1 -1
- package/lib/VueNodeView.d.ts +3 -3
- package/lib/VueNodeView.d.ts.map +1 -1
- package/lib/index.es.js +1 -1
- package/lib/index.es.js.map +1 -1
- package/package.json +7 -8
- package/src/VueNode.tsx +2 -1
- package/src/VueNodeView.tsx +3 -2
package/README.md
CHANGED
package/lib/Editor.d.ts
CHANGED
|
@@ -25,6 +25,6 @@ export declare const VueEditor: DefineComponent<{
|
|
|
25
25
|
}>, {}>;
|
|
26
26
|
export declare const useEditor: (getEditor: GetEditor) => (container: HTMLDivElement, renderVue: (Component: AnyVueComponent, options?: Partial<{
|
|
27
27
|
as: string;
|
|
28
|
-
} & Pick<import("
|
|
28
|
+
} & Pick<import("@milkdown/prose/view").NodeView<any>, "update" | "selectNode" | "deselectNode" | "ignoreMutation" | "destroy">> | undefined) => (ctx: Ctx) => ViewFactory) => Editor;
|
|
29
29
|
export {};
|
|
30
30
|
//# sourceMappingURL=Editor.d.ts.map
|
package/lib/Editor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../src/Editor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAA0B,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACH,yBAAyB,EACzB,eAAe,EAWf,GAAG,EAGN,MAAM,KAAK,CAAC;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAiB,aAAa,EAAE,MAAM,eAAe,CAAC;AAK7D,aAAK,SAAS,GAAG,CACb,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,KAC5F,MAAM,CAAC;AAiCZ,eAAO,MAAM,eAAe;YAA6B,SAAS;;;YAAT,SAAS;;OAahE,CAAC;AAGH,oBAAY,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;CAAE,CAAC;AAO5F,eAAO,MAAM,eAAe,wCAE3B,CAAC;AAGF,eAAO,MAAM,SAAS;YAA6B,SAAS;;;YAAT,SAAS;;OAmC1D,CAAC;AAGH,eAAO,MAAM,SAAS,cAAe,SAAS,wDApGnB,eAAe;;
|
|
1
|
+
{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../src/Editor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAA0B,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACH,yBAAyB,EACzB,eAAe,EAWf,GAAG,EAGN,MAAM,KAAK,CAAC;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAiB,aAAa,EAAE,MAAM,eAAe,CAAC;AAK7D,aAAK,SAAS,GAAG,CACb,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,KAC5F,MAAM,CAAC;AAiCZ,eAAO,MAAM,eAAe;YAA6B,SAAS;;;YAAT,SAAS;;OAahE,CAAC;AAGH,oBAAY,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;CAAE,CAAC;AAO5F,eAAO,MAAM,eAAe,wCAE3B,CAAC;AAGF,eAAO,MAAM,SAAS;YAA6B,SAAS;;;YAAT,SAAS;;OAmC1D,CAAC;AAGH,eAAO,MAAM,SAAS,cAAe,SAAS,wDApGnB,eAAe;;uJAAoC,GAAG,KAAK,WAAW,WAsGhG,CAAC"}
|
package/lib/VueNode.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/// <reference types="prosemirror-model" />
|
|
2
1
|
import { Ctx } from '@milkdown/core';
|
|
3
|
-
import {
|
|
2
|
+
import { Mark, Node } from '@milkdown/prose/model';
|
|
3
|
+
import { Decoration, EditorView } from '@milkdown/prose/view';
|
|
4
4
|
import { InjectionKey } from 'vue';
|
|
5
5
|
export declare type NodeContext = {
|
|
6
6
|
ctx: Ctx;
|
package/lib/VueNode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueNode.d.ts","sourceRoot":"","sources":["../src/VueNode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VueNode.d.ts","sourceRoot":"","sources":["../src/VueNode.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAsB,YAAY,EAAW,MAAM,KAAK,CAAC;AAEhE,oBAAY,WAAW,GAAG;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,WAAW,CAAY,CAAC;AAEhE,eAAO,MAAM,gBAAgB;QAAuC,MAAM;;QAAN,MAAM;OAYxE,CAAC;AAGH,eAAO,MAAM,OAAO;;;;OAKlB,CAAC"}
|
package/lib/VueNodeView.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="prosemirror-model" />
|
|
2
1
|
import { Ctx } from '@milkdown/core';
|
|
3
|
-
import type {
|
|
4
|
-
import { Mark, Node } from '@milkdown/prose';
|
|
2
|
+
import type { ViewFactory } from '@milkdown/prose';
|
|
3
|
+
import { Mark, Node } from '@milkdown/prose/model';
|
|
4
|
+
import type { Decoration, DecorationSet, EditorView, NodeView } from '@milkdown/prose/view';
|
|
5
5
|
import { DefineComponent } from 'vue';
|
|
6
6
|
export declare type RenderOptions = Partial<{
|
|
7
7
|
as: string;
|
package/lib/VueNodeView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueNodeView.d.ts","sourceRoot":"","sources":["../src/VueNodeView.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VueNodeView.d.ts","sourceRoot":"","sources":["../src/VueNodeView.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAyC,MAAM,KAAK,CAAC;AAO7E,oBAAY,aAAa,GAAG,OAAO,CAC/B;IACI,EAAE,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC,CAC9F,CAAC;AAEF,eAAO,MAAM,aAAa,uBACD,eAAe,OAAO,MAAM,KAAK,IAAI,2BAA2B,MAAM,KAAK,IAAI,iBACxF,eAAe,YAAW,aAAa,WAAe,GAAG,KAAK,WAGiC,CAAC;AAEhH,qBAAa,WAAY,YAAW,QAAQ;IASpC,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IAhBvB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,cAAc,YAEjB;gBAGW,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,EACzD,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EACxC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,EAChC,WAAW,EAAE,UAAU,EAAE;IAQrC,IAAI,GAAG,YAEN;IAED,IAAI,UAAU,mBAMb;IAED,YAAY;IAiCZ,OAAO;IAKP,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IA6BhF,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,aAAa;IAoB7E,UAAU,kCAA4B;IAEtC,YAAY,kCAA8B;CAC7C"}
|
package/lib/index.es.js
CHANGED
|
@@ -7,7 +7,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7
7
|
var _a, _b;
|
|
8
8
|
import { defineComponent, provide, h, createVNode, Teleport, markRaw, shallowReactive, getCurrentInstance, onBeforeMount, onUnmounted, isVNode, ref, inject, onMounted } from "vue";
|
|
9
9
|
import { editorViewCtx, rootCtx } from "@milkdown/core";
|
|
10
|
-
import { Mark, Node } from "@milkdown/prose";
|
|
10
|
+
import { Mark, Node } from "@milkdown/prose/model";
|
|
11
11
|
import { customAlphabet } from "nanoid";
|
|
12
12
|
const nodeMetadata = Symbol();
|
|
13
13
|
const VueNodeContainer = defineComponent({
|
package/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/VueNode.tsx","../src/VueNodeView.tsx","../src/Editor.tsx"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { Decoration, EditorView, Mark, Node } from '@milkdown/prose';\nimport { defineComponent, h, InjectionKey, provide } from 'vue';\n\nexport type NodeContext = {\n ctx: Ctx;\n node: Node | Mark;\n view: EditorView;\n getPos: boolean | (() => number);\n decorations: Decoration[];\n};\n\nexport const nodeMetadata: InjectionKey<NodeContext> = Symbol();\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 type { Decoration, DecorationSet, EditorView, NodeView, ViewFactory } from '@milkdown/prose';\nimport { Mark, Node } from '@milkdown/prose';\nimport { customAlphabet } from 'nanoid';\nimport { DefineComponent, defineComponent, h, markRaw, Teleport } from 'vue';\n\nimport { getRootInstance } from '.';\nimport { Content, VueNodeContainer } from './VueNode';\n\nconst nanoid = customAlphabet('abcedfghicklmn', 10);\n\nexport type RenderOptions = Partial<\n {\n as: string;\n } & Pick<NodeView, 'ignoreMutation' | 'deselectNode' | 'selectNode' | 'destroy' | 'update'>\n>;\n\nexport const createVueView =\n (addPortal: (portal: DefineComponent, key: string) => void, removePortalByKey: (key: string) => void) =>\n (component: DefineComponent, options: RenderOptions = {}): ((ctx: Ctx) => ViewFactory) =>\n (ctx) =>\n (node, view, getPos, decorations) =>\n new VueNodeView(ctx, component, addPortal, removePortalByKey, options, node, view, getPos, decorations);\n\nexport class VueNodeView implements NodeView {\n teleportDOM: HTMLElement;\n key: string;\n\n get isInlineOrMark() {\n return this.node instanceof Mark || this.node.isInline;\n }\n\n constructor(\n private ctx: Ctx,\n private component: DefineComponent,\n private addPortal: (portal: DefineComponent, key: string) => void,\n private removePortalByKey: (key: string) => void,\n private options: RenderOptions,\n private node: Node | Mark,\n private view: EditorView,\n private getPos: boolean | (() => number),\n private decorations: Decoration[],\n ) {\n this.key = nanoid();\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;\n }\n\n get contentDOM() {\n if (this.node instanceof Node && this.node.isLeaf) {\n return null;\n }\n\n return this.teleportDOM.querySelector('[data-view-content]') || this.dom;\n }\n\n renderPortal() {\n if (!this.teleportDOM) return;\n\n const CustomComponent = this.component;\n const elementName = this.options.as ? this.options.as : this.isInlineOrMark ? 'span' : 'div';\n const Portal = 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 });\n this.addPortal(markRaw(Portal) as DefineComponent, this.key);\n const instance = getRootInstance();\n if (instance) {\n instance.update();\n }\n }\n\n destroy() {\n this.options.destroy?.();\n this.removePortalByKey(this.key);\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\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.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: Decoration[], innerDecorations: DecorationSet) {\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.type !== 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 return true;\n }\n\n selectNode = this.options?.selectNode;\n\n deselectNode = this.options?.deselectNode;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, Editor, editorViewCtx, rootCtx } from '@milkdown/core';\nimport { ViewFactory } from '@milkdown/prose';\nimport {\n ComponentInternalInstance,\n DefineComponent,\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n InjectionKey,\n markRaw,\n onBeforeMount,\n onMounted,\n onUnmounted,\n provide,\n Ref,\n ref,\n shallowReactive,\n} from 'vue';\n\nimport { AnyVueComponent } from './utils';\nimport { createVueView, RenderOptions } from './VueNodeView';\n\nconst rendererKey: InjectionKey<(component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory> =\n Symbol();\n\ntype GetEditor = (\n container: HTMLDivElement,\n renderVue: (Component: AnyVueComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory,\n) => Editor;\n\nconst useGetEditor = (getEditor: GetEditor) => {\n const divRef = ref<HTMLDivElement | null>(null);\n const renderVue = inject<(Component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory>(\n rendererKey,\n () => {\n throw new Error();\n },\n );\n const editorRef = markRaw<{ editor?: Editor }>({});\n onMounted(() => {\n if (!divRef.value) return;\n\n getEditor(divRef.value, renderVue)\n .create()\n .then((editor) => {\n editorRef.editor = editor;\n return;\n })\n .catch((e) => console.error(e));\n });\n onUnmounted(() => {\n const view = editorRef.editor?.action((ctx) => ctx.get(editorViewCtx));\n const root = editorRef.editor?.action((ctx) => ctx.get(rootCtx)) as HTMLElement;\n\n root?.firstChild?.remove();\n view?.destroy();\n });\n\n return { divRef, editorRef };\n};\n\nexport const EditorComponent = defineComponent<{ editor: GetEditor; editorRef?: Ref<EditorRef> }>({\n name: 'milkdown-dom-root',\n setup: (props, { slots }) => {\n const refs = useGetEditor(props.editor);\n if (props.editorRef) {\n props.editorRef.value = {\n get: () => refs.editorRef.editor,\n dom: () => refs.divRef.value,\n };\n }\n\n return () => <div ref={refs.divRef}>{slots['default']?.()}</div>;\n },\n});\nEditorComponent['props'] = ['editor', 'editorRef'];\n\nexport type EditorRef = { get: () => Editor | undefined; dom: () => HTMLDivElement | null };\n\nconst rootInstance: {\n instance: null | ComponentInternalInstance;\n} = {\n instance: null,\n};\nexport const getRootInstance = () => {\n return rootInstance.instance;\n};\n\ntype PortalPair = [key: string, component: DefineComponent];\nexport const VueEditor = defineComponent<{ editor: GetEditor; editorRef?: Ref<EditorRef> }>({\n name: 'milkdown-vue-root',\n setup: (props) => {\n const portals = shallowReactive<PortalPair[]>([]);\n\n const instance = getCurrentInstance();\n\n onBeforeMount(() => {\n rootInstance.instance = (instance as ComponentInternalInstance & { ctx: { _: ComponentInternalInstance } })\n .ctx._ as ComponentInternalInstance;\n });\n\n onUnmounted(() => {\n rootInstance.instance = 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(addPortal, removePortalByKey);\n provide(rendererKey, renderVue);\n\n return () => {\n const portalElements = portals.map(([id, P]) => <P key={id} />);\n return (\n <EditorComponent editorRef={props.editorRef} editor={props.editor}>\n {portalElements}\n </EditorComponent>\n );\n };\n },\n});\nVueEditor['props'] = ['editor', 'editorRef'];\n\nexport const useEditor = (getEditor: GetEditor) => {\n return (...args: Parameters<GetEditor>) => getEditor(...args);\n};\n"],"names":["nodeMetadata","Symbol","VueNodeContainer","defineComponent","name","setup","node","view","getPos","decorations","ctx","as","context","provide","h","slots","Content","isInline","nanoid","customAlphabet","createVueView","addPortal","removePortalByKey","component","options","VueNodeView","constructor","selectNode","deselectNode","key","elementName","isInlineOrMark","teleportDOM","document","createElement","renderPortal","Mark","dom","firstElementChild","contentDOM","Node","isLeaf","querySelector","CustomComponent","Portal","markRaw","instance","getRootInstance","update","destroy","ignoreMutation","mutation","isAtom","type","contains","target","innerDecorations","result","rendererKey","useGetEditor","getEditor","divRef","ref","renderVue","inject","Error","editorRef","onMounted","value","create","then","editor","catch","e","console","error","onUnmounted","action","get","editorViewCtx","root","rootCtx","firstChild","remove","EditorComponent","props","refs","rootInstance","VueEditor","portals","shallowReactive","getCurrentInstance","onBeforeMount","_","push","index","findIndex","p","splice","portalElements","map","id","P","useEditor","args"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/VueNode.tsx","../src/VueNodeView.tsx","../src/Editor.tsx"],"sourcesContent":["/* 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, InjectionKey, provide } from 'vue';\n\nexport type NodeContext = {\n ctx: Ctx;\n node: Node | Mark;\n view: EditorView;\n getPos: boolean | (() => number);\n decorations: Decoration[];\n};\n\nexport const nodeMetadata: InjectionKey<NodeContext> = Symbol();\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 type { ViewFactory } from '@milkdown/prose';\nimport { Mark, Node } from '@milkdown/prose/model';\nimport type { Decoration, DecorationSet, EditorView, NodeView } from '@milkdown/prose/view';\nimport { customAlphabet } from 'nanoid';\nimport { DefineComponent, defineComponent, h, markRaw, Teleport } from 'vue';\n\nimport { getRootInstance } from '.';\nimport { Content, VueNodeContainer } from './VueNode';\n\nconst nanoid = customAlphabet('abcedfghicklmn', 10);\n\nexport type RenderOptions = Partial<\n {\n as: string;\n } & Pick<NodeView, 'ignoreMutation' | 'deselectNode' | 'selectNode' | 'destroy' | 'update'>\n>;\n\nexport const createVueView =\n (addPortal: (portal: DefineComponent, key: string) => void, removePortalByKey: (key: string) => void) =>\n (component: DefineComponent, options: RenderOptions = {}): ((ctx: Ctx) => ViewFactory) =>\n (ctx) =>\n (node, view, getPos, decorations) =>\n new VueNodeView(ctx, component, addPortal, removePortalByKey, options, node, view, getPos, decorations);\n\nexport class VueNodeView implements NodeView {\n teleportDOM: HTMLElement;\n key: string;\n\n get isInlineOrMark() {\n return this.node instanceof Mark || this.node.isInline;\n }\n\n constructor(\n private ctx: Ctx,\n private component: DefineComponent,\n private addPortal: (portal: DefineComponent, key: string) => void,\n private removePortalByKey: (key: string) => void,\n private options: RenderOptions,\n private node: Node | Mark,\n private view: EditorView,\n private getPos: boolean | (() => number),\n private decorations: Decoration[],\n ) {\n this.key = nanoid();\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;\n }\n\n get contentDOM() {\n if (this.node instanceof Node && this.node.isLeaf) {\n return null;\n }\n\n return this.teleportDOM.querySelector('[data-view-content]') || this.dom;\n }\n\n renderPortal() {\n if (!this.teleportDOM) return;\n\n const CustomComponent = this.component;\n const elementName = this.options.as ? this.options.as : this.isInlineOrMark ? 'span' : 'div';\n const Portal = 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 });\n this.addPortal(markRaw(Portal) as DefineComponent, this.key);\n const instance = getRootInstance();\n if (instance) {\n instance.update();\n }\n }\n\n destroy() {\n this.options.destroy?.();\n this.removePortalByKey(this.key);\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\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.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: Decoration[], innerDecorations: DecorationSet) {\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.type !== 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 return true;\n }\n\n selectNode = this.options?.selectNode;\n\n deselectNode = this.options?.deselectNode;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, Editor, editorViewCtx, rootCtx } from '@milkdown/core';\nimport { ViewFactory } from '@milkdown/prose';\nimport {\n ComponentInternalInstance,\n DefineComponent,\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n InjectionKey,\n markRaw,\n onBeforeMount,\n onMounted,\n onUnmounted,\n provide,\n Ref,\n ref,\n shallowReactive,\n} from 'vue';\n\nimport { AnyVueComponent } from './utils';\nimport { createVueView, RenderOptions } from './VueNodeView';\n\nconst rendererKey: InjectionKey<(component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory> =\n Symbol();\n\ntype GetEditor = (\n container: HTMLDivElement,\n renderVue: (Component: AnyVueComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory,\n) => Editor;\n\nconst useGetEditor = (getEditor: GetEditor) => {\n const divRef = ref<HTMLDivElement | null>(null);\n const renderVue = inject<(Component: DefineComponent, options?: RenderOptions) => (ctx: Ctx) => ViewFactory>(\n rendererKey,\n () => {\n throw new Error();\n },\n );\n const editorRef = markRaw<{ editor?: Editor }>({});\n onMounted(() => {\n if (!divRef.value) return;\n\n getEditor(divRef.value, renderVue)\n .create()\n .then((editor) => {\n editorRef.editor = editor;\n return;\n })\n .catch((e) => console.error(e));\n });\n onUnmounted(() => {\n const view = editorRef.editor?.action((ctx) => ctx.get(editorViewCtx));\n const root = editorRef.editor?.action((ctx) => ctx.get(rootCtx)) as HTMLElement;\n\n root?.firstChild?.remove();\n view?.destroy();\n });\n\n return { divRef, editorRef };\n};\n\nexport const EditorComponent = defineComponent<{ editor: GetEditor; editorRef?: Ref<EditorRef> }>({\n name: 'milkdown-dom-root',\n setup: (props, { slots }) => {\n const refs = useGetEditor(props.editor);\n if (props.editorRef) {\n props.editorRef.value = {\n get: () => refs.editorRef.editor,\n dom: () => refs.divRef.value,\n };\n }\n\n return () => <div ref={refs.divRef}>{slots['default']?.()}</div>;\n },\n});\nEditorComponent['props'] = ['editor', 'editorRef'];\n\nexport type EditorRef = { get: () => Editor | undefined; dom: () => HTMLDivElement | null };\n\nconst rootInstance: {\n instance: null | ComponentInternalInstance;\n} = {\n instance: null,\n};\nexport const getRootInstance = () => {\n return rootInstance.instance;\n};\n\ntype PortalPair = [key: string, component: DefineComponent];\nexport const VueEditor = defineComponent<{ editor: GetEditor; editorRef?: Ref<EditorRef> }>({\n name: 'milkdown-vue-root',\n setup: (props) => {\n const portals = shallowReactive<PortalPair[]>([]);\n\n const instance = getCurrentInstance();\n\n onBeforeMount(() => {\n rootInstance.instance = (instance as ComponentInternalInstance & { ctx: { _: ComponentInternalInstance } })\n .ctx._ as ComponentInternalInstance;\n });\n\n onUnmounted(() => {\n rootInstance.instance = 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(addPortal, removePortalByKey);\n provide(rendererKey, renderVue);\n\n return () => {\n const portalElements = portals.map(([id, P]) => <P key={id} />);\n return (\n <EditorComponent editorRef={props.editorRef} editor={props.editor}>\n {portalElements}\n </EditorComponent>\n );\n };\n },\n});\nVueEditor['props'] = ['editor', 'editorRef'];\n\nexport const useEditor = (getEditor: GetEditor) => {\n return (...args: Parameters<GetEditor>) => getEditor(...args);\n};\n"],"names":["nodeMetadata","Symbol","VueNodeContainer","defineComponent","name","setup","node","view","getPos","decorations","ctx","as","context","provide","h","slots","Content","isInline","_createVNode","nanoid","customAlphabet","createVueView","addPortal","removePortalByKey","component","options","VueNodeView","constructor","selectNode","deselectNode","key","elementName","isInlineOrMark","teleportDOM","document","createElement","renderPortal","Mark","dom","firstElementChild","contentDOM","Node","isLeaf","querySelector","CustomComponent","Portal","markRaw","instance","getRootInstance","update","destroy","ignoreMutation","mutation","isAtom","type","contains","target","innerDecorations","result","rendererKey","useGetEditor","getEditor","divRef","ref","renderVue","inject","Error","editorRef","onMounted","value","create","then","editor","catch","e","console","error","onUnmounted","action","get","editorViewCtx","root","rootCtx","firstChild","remove","EditorComponent","props","refs","rootInstance","VueEditor","portals","shallowReactive","getCurrentInstance","onBeforeMount","_","push","index","findIndex","p","splice","portalElements","map","id","P","useEditor","args"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/vue",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.es.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"vue"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@milkdown/utils": "6.0
|
|
19
|
+
"@milkdown/utils": "6.1.0",
|
|
20
20
|
"nanoid": "^3.1.25",
|
|
21
21
|
"tslib": "^2.3.1"
|
|
22
22
|
},
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"vue": "^3.0.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@milkdown/core": "6.0
|
|
30
|
-
"@milkdown/prose": "6.0
|
|
29
|
+
"@milkdown/core": "6.1.0",
|
|
30
|
+
"@milkdown/prose": "6.1.0",
|
|
31
31
|
"vue": "^3.0.0"
|
|
32
32
|
},
|
|
33
33
|
"nx": {
|
|
@@ -57,8 +57,7 @@
|
|
|
57
57
|
"scripts": {
|
|
58
58
|
"start": "concurrently -n es,dts \"vite build --watch\" \"tsc --emitDeclarationOnly --watch\"",
|
|
59
59
|
"test": "vitest",
|
|
60
|
-
"tsc": "tsc --noEmit",
|
|
61
|
-
"build": "
|
|
62
|
-
}
|
|
63
|
-
"readme": "# @milkdown/vue\n\nVue integration for [milkdown](https://saul-mirone.github.io/milkdown/).\n\n# Example Usage\n\n```typescript\nimport { defineComponent } from 'vue';\nimport { Editor, rootCtx } from '@milkdown/core';\nimport { VueEditor, useEditor } from '@milkdown/vue';\nimport { commonmark } from '@milkdown/preset-commonmark';\nimport { nord } from '@milkdown/theme-nord';\n\nexport const MilkdownEditor = defineComponent(() => {\n const editor = useEditor((root) =>\n Editor.make()\n .config((ctx) => {\n ctx.set(rootCtx, root);\n })\n .use(nord)\n .use(commonmark),\n );\n\n return () => <VueEditor editor={editor} />;\n});\n```\n\n# License\n\nMilkdown is open sourced software licensed under [MIT license](https://github.com/Saul-Mirone/milkdown/blob/main/LICENSE).\n"
|
|
60
|
+
"tsc": "tsc --noEmit && echo",
|
|
61
|
+
"build": "tsc --emitDeclarationOnly && vite build"
|
|
62
|
+
}
|
|
64
63
|
}
|
package/src/VueNode.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { Ctx } from '@milkdown/core';
|
|
3
|
-
import {
|
|
3
|
+
import { Mark, Node } from '@milkdown/prose/model';
|
|
4
|
+
import { Decoration, EditorView } from '@milkdown/prose/view';
|
|
4
5
|
import { defineComponent, h, InjectionKey, provide } from 'vue';
|
|
5
6
|
|
|
6
7
|
export type NodeContext = {
|
package/src/VueNodeView.tsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { Ctx } from '@milkdown/core';
|
|
3
|
-
import type {
|
|
4
|
-
import { Mark, Node } from '@milkdown/prose';
|
|
3
|
+
import type { ViewFactory } from '@milkdown/prose';
|
|
4
|
+
import { Mark, Node } from '@milkdown/prose/model';
|
|
5
|
+
import type { Decoration, DecorationSet, EditorView, NodeView } from '@milkdown/prose/view';
|
|
5
6
|
import { customAlphabet } from 'nanoid';
|
|
6
7
|
import { DefineComponent, defineComponent, h, markRaw, Teleport } from 'vue';
|
|
7
8
|
|