@prosekit/vue 0.6.7 → 0.6.8
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/{create-component-BREKWlWW.js → create-component.js} +3 -4
- package/dist/create-component.js.map +1 -0
- package/dist/{create-emits-B8725q2G.d.ts → create-emits.d.ts} +1 -1
- package/dist/create-emits.d.ts.map +1 -0
- package/dist/{editor-context-BfHHplRP.js → editor-context.js} +2 -3
- package/dist/editor-context.js.map +1 -0
- package/dist/prosekit-vue-autocomplete.d.ts +1 -1
- package/dist/prosekit-vue-autocomplete.js +2 -6
- package/dist/prosekit-vue-autocomplete.js.map +1 -1
- package/dist/prosekit-vue-block-handle.d.ts +1 -1
- package/dist/prosekit-vue-block-handle.js +2 -5
- package/dist/prosekit-vue-block-handle.js.map +1 -1
- package/dist/prosekit-vue-drop-indicator.d.ts +1 -1
- package/dist/prosekit-vue-drop-indicator.js +2 -3
- package/dist/prosekit-vue-drop-indicator.js.map +1 -1
- package/dist/prosekit-vue-inline-popover.d.ts +1 -1
- package/dist/prosekit-vue-inline-popover.js +2 -3
- package/dist/prosekit-vue-inline-popover.js.map +1 -1
- package/dist/prosekit-vue-popover.d.ts +1 -1
- package/dist/prosekit-vue-popover.js +2 -5
- package/dist/prosekit-vue-popover.js.map +1 -1
- package/dist/prosekit-vue-resizable.d.ts +1 -1
- package/dist/prosekit-vue-resizable.js +2 -4
- package/dist/prosekit-vue-resizable.js.map +1 -1
- package/dist/prosekit-vue-table-handle.d.ts +1 -1
- package/dist/prosekit-vue-table-handle.js +2 -11
- package/dist/prosekit-vue-table-handle.js.map +1 -1
- package/dist/prosekit-vue-tooltip.d.ts +1 -1
- package/dist/prosekit-vue-tooltip.js +2 -5
- package/dist/prosekit-vue-tooltip.js.map +1 -1
- package/dist/prosekit-vue.d.ts +1 -1
- package/dist/prosekit-vue.d.ts.map +1 -1
- package/dist/prosekit-vue.js +112 -122
- package/dist/prosekit-vue.js.map +1 -1
- package/package.json +11 -11
- package/src/components/prosekit.ts +8 -10
- package/src/components/view-renderer.ts +34 -0
- package/src/extensions/vue-mark-view.ts +33 -48
- package/src/extensions/vue-node-view.ts +33 -48
- package/dist/create-component-BREKWlWW.js.map +0 -1
- package/dist/create-emits-B8725q2G.d.ts.map +0 -1
- package/dist/editor-context-BfHHplRP.js.map +0 -1
- package/src/extensions/helpers.ts +0 -3
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { defineNodeViewComponent, defineNodeViewFactory, type Extension } from '@prosekit/core'
|
|
2
|
-
import type { NodeViewConstructor } from '@prosekit/pm/view'
|
|
3
2
|
import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core'
|
|
4
3
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
AbstractVueNodeView,
|
|
5
|
+
buildVueNodeViewCreator,
|
|
7
6
|
type NodeViewContext,
|
|
8
|
-
type
|
|
9
|
-
type
|
|
7
|
+
type VueRendererComponent,
|
|
8
|
+
type VueRendererResult,
|
|
10
9
|
} from '@prosemirror-adapter/vue'
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
import { useExtension } from '../hooks/use-extension.ts'
|
|
14
|
-
|
|
15
|
-
import { renderNothing } from './helpers.ts'
|
|
10
|
+
import { defineComponent, h, markRaw, Teleport, type DefineComponent } from 'vue'
|
|
16
11
|
|
|
17
12
|
/**
|
|
18
13
|
* @public
|
|
@@ -36,30 +31,36 @@ export interface VueNodeViewOptions extends CoreNodeViewUserOptions<VueNodeViewC
|
|
|
36
31
|
name: string
|
|
37
32
|
}
|
|
38
33
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const props
|
|
44
|
-
return (
|
|
45
|
-
}
|
|
46
|
-
|
|
34
|
+
class ProseKitVueNodeView extends AbstractVueNodeView<VueNodeViewComponent> {
|
|
35
|
+
render = (): VueRendererComponent => {
|
|
36
|
+
const UserComponent = this.component
|
|
37
|
+
const render = () => {
|
|
38
|
+
const props = this.context
|
|
39
|
+
return h(Teleport, { key: this.key, to: this.dom }, [h(UserComponent, props)])
|
|
40
|
+
}
|
|
41
|
+
const RendererComponent: VueRendererComponent = defineComponent({
|
|
42
|
+
name: 'ProsemirrorNodeView',
|
|
43
|
+
setup: () => {
|
|
44
|
+
return render
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
return markRaw(RendererComponent)
|
|
48
|
+
}
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
/**
|
|
50
52
|
* @internal
|
|
51
53
|
*/
|
|
52
|
-
export
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
})
|
|
54
|
+
export function defineVueNodeViewFactory(
|
|
55
|
+
renderVueRenderer: VueRendererResult['renderVueRenderer'],
|
|
56
|
+
removeVueRenderer: VueRendererResult['removeVueRenderer'],
|
|
57
|
+
): Extension {
|
|
58
|
+
const factory = buildVueNodeViewCreator(renderVueRenderer, removeVueRenderer, ProseKitVueNodeView)
|
|
59
|
+
return defineNodeViewFactory<VueNodeViewOptions>({
|
|
60
|
+
group: 'vue',
|
|
61
|
+
factory,
|
|
62
|
+
})
|
|
63
|
+
}
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
66
|
* Defines a node view using a Vue component.
|
|
@@ -67,25 +68,9 @@ export const VueNodeViewsConsumer: DefineComponent = /* @__PURE__ */ defineCompo
|
|
|
67
68
|
* @public
|
|
68
69
|
*/
|
|
69
70
|
export function defineVueNodeView(options: VueNodeViewOptions): Extension {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const args: VueNodeViewUserOptions = {
|
|
73
|
-
...userOptions,
|
|
74
|
-
component: withNodeViewProps(component),
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return defineNodeViewComponent<VueNodeViewUserOptions>({
|
|
71
|
+
return defineNodeViewComponent<VueNodeViewOptions>({
|
|
78
72
|
group: 'vue',
|
|
79
|
-
name,
|
|
80
|
-
args,
|
|
81
|
-
})
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function defineVueNodeViewFactory(
|
|
85
|
-
factory: (options: VueNodeViewUserOptions) => NodeViewConstructor,
|
|
86
|
-
) {
|
|
87
|
-
return defineNodeViewFactory<VueNodeViewUserOptions>({
|
|
88
|
-
group: 'vue',
|
|
89
|
-
factory,
|
|
73
|
+
name: options.name,
|
|
74
|
+
args: options,
|
|
90
75
|
})
|
|
91
76
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-component-BREKWlWW.js","names":[],"sources":["../src/components/create-component.ts"],"sourcesContent":["import { defineComponent, h, onMounted, ref, watchEffect, type DefineSetupFnComponent, type EmitsOptions, type HTMLAttributes } from 'vue'\n\nimport { useEditorContext } from '../injection/editor-context.ts'\n\nexport function createComponent<\n Props extends { [PropName in keyof Props]: unknown },\n Emits extends EmitsOptions,\n>(\n tagName: string,\n displayName: string,\n propNames: string[],\n eventNames: string[],\n): DefineSetupFnComponent<Partial<Props> & HTMLAttributes, Emits> {\n const hasEditor = propNames.includes('editor')\n\n const Component = defineComponent<any, any>(\n (props: Record<string, unknown>, { slots, emit }) => {\n const editor = useEditorContext()\n\n const mounted = ref(false)\n\n onMounted(() => {\n mounted.value = true\n })\n\n const elementRef = ref<HTMLElement | null>(null)\n\n watchEffect((onCleanup) => {\n const element = elementRef.value\n if (!element) return\n\n const eventHandlers: Record<string, (event: Event) => void> = {}\n for (const eventName of eventNames) {\n const extractDetail = eventName.endsWith('Change')\n eventHandlers[eventName] = (event: Event) => {\n emit(\n eventName,\n extractDetail ? (event as CustomEvent).detail : event,\n )\n }\n }\n\n for (const [eventName, handler] of Object.entries(eventHandlers)) {\n element.addEventListener(eventName, handler)\n }\n\n onCleanup(() => {\n for (const [eventName, handler] of Object.entries(eventHandlers)) {\n element.removeEventListener(eventName, handler)\n }\n })\n })\n\n return () => {\n const properties: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(props)) {\n if (value !== undefined && !key.startsWith('.')) {\n properties[propNames.includes(key) ? '.' + key : key] = value\n }\n }\n\n // Try to add the editor prop if it's missing.\n if (hasEditor && editor && !properties['editor']) {\n properties.editor = editor\n }\n\n // Ensure web components work after SSR hydration.\n properties.key = mounted.value ? 1 : 0\n\n properties.ref = elementRef\n\n return h(tagName, properties, slots.default?.())\n }\n },\n {\n name: displayName,\n props: propNames,\n emits: eventNames,\n },\n )\n\n return Component\n}\n"],"mappings":";;;;AAIA,SAAgB,gBAId,SACA,aACA,WACA,YACgE;CAChE,MAAM,YAAY,UAAU,SAAS,SAAS;AAqE9C,QAnEkB,iBACf,OAAgC,EAAE,OAAO,WAAW;EACnD,MAAM,SAAS,kBAAkB;EAEjC,MAAM,UAAU,IAAI,MAAM;AAE1B,kBAAgB;AACd,WAAQ,QAAQ;IAChB;EAEF,MAAM,aAAa,IAAwB,KAAK;AAEhD,eAAa,cAAc;GACzB,MAAM,UAAU,WAAW;AAC3B,OAAI,CAAC,QAAS;GAEd,MAAM,gBAAwD,EAAE;AAChE,QAAK,MAAM,aAAa,YAAY;IAClC,MAAM,gBAAgB,UAAU,SAAS,SAAS;AAClD,kBAAc,cAAc,UAAiB;AAC3C,UACE,WACA,gBAAiB,MAAsB,SAAS,MACjD;;;AAIL,QAAK,MAAM,CAAC,WAAW,YAAY,OAAO,QAAQ,cAAc,CAC9D,SAAQ,iBAAiB,WAAW,QAAQ;AAG9C,mBAAgB;AACd,SAAK,MAAM,CAAC,WAAW,YAAY,OAAO,QAAQ,cAAc,CAC9D,SAAQ,oBAAoB,WAAW,QAAQ;KAEjD;IACF;AAEF,eAAa;GACX,MAAM,aAAsC,EAAE;AAE9C,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,KAAI,UAAU,UAAa,CAAC,IAAI,WAAW,IAAI,CAC7C,YAAW,UAAU,SAAS,IAAI,GAAG,MAAM,MAAM,OAAO;AAK5D,OAAI,aAAa,UAAU,CAAC,WAAW,UACrC,YAAW,SAAS;AAItB,cAAW,MAAM,QAAQ,QAAQ,IAAI;AAErC,cAAW,MAAM;AAEjB,UAAO,EAAE,SAAS,YAAY,MAAM,WAAW,CAAC;;IAGpD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACR,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-emits-B8725q2G.d.ts","names":[],"sources":["../src/components/create-emits.ts"],"mappings":";KAAY,WAAA,sCAC2B,MAAA,GAAS,WAAA,4BAE1B,MAAA,IAClB,KAAA,EAAO,SAAA,6BAAsC,MAAA,CAAO,SAAA,cAChD,MAAA,CAAO,SAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editor-context-BfHHplRP.js","names":[],"sources":["../src/injection/editor-context.ts"],"sourcesContent":["import type { Editor, Extension } from '@prosekit/core'\nimport { inject, provide, type InjectionKey } from 'vue'\n\nconst symbol = Symbol('prosekit-vue-editor-context') as InjectionKey<Editor>\n\n/**\n * @internal\n */\nexport function provideEditor(editor: Editor): void {\n provide(symbol, editor)\n}\n\n/**\n * @internal\n */\nexport function useEditorContext<E extends Extension>(): Editor<E> | undefined {\n return inject(symbol, undefined)\n}\n"],"mappings":";;;AAGA,MAAM,SAAS,OAAO,8BAA8B;;;;AAKpD,SAAgB,cAAc,QAAsB;AAClD,SAAQ,QAAQ,OAAO;;;;;AAMzB,SAAgB,mBAA+D;AAC7E,QAAO,OAAO,QAAQ,OAAU"}
|