@prosekit/vue 0.3.9 → 0.3.10

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.
@@ -8,9 +8,6 @@ import { BlockDragHandleProps } from '@prosekit/web/block-handle';
8
8
  import { BlockPopoverProps } from '@prosekit/web/block-handle';
9
9
  import { ComponentOptionsMixin } from 'vue';
10
10
  import { ComputedRef } from 'vue';
11
- import { CoreNodeView } from '@prosemirror-adapter/core';
12
- import type { CoreNodeViewSpec } from '@prosemirror-adapter/core';
13
- import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core';
14
11
  import type { Decoration } from '@prosekit/pm/view';
15
12
  import type { DecorationSource } from '@prosekit/pm/view';
16
13
  import { config as default_alias_1 } from '@prosekit/dev/config-vitest';
@@ -20,14 +17,10 @@ import { Editor } from '@prosekit/core';
20
17
  import type { EditorState } from '@prosekit/pm/state';
21
18
  import type { EditorView } from '@prosekit/pm/view';
22
19
  import { Extension } from '@prosekit/core';
23
- import { ExtensionTyping } from '@prosekit/core';
24
20
  import { ExtractPropTypes } from 'vue';
25
- import type { InjectionKey } from 'vue';
26
21
  import { InlinePopoverProps } from '@prosekit/web/inline-popover';
27
22
  import { Keymap } from '@prosekit/core';
28
23
  import { MaybeRefOrGetter } from 'vue';
29
- import type { Node as Node_2 } from '@prosekit/pm/model';
30
- import type { NodeViewConstructor } from '@prosekit/pm/view';
31
24
  import { Options } from 'tsup';
32
25
  import { PopoverContentProps } from '@prosekit/web/popover';
33
26
  import { PopoverRootProps } from '@prosekit/web/popover';
@@ -35,17 +28,13 @@ import { PopoverTriggerProps } from '@prosekit/web/popover';
35
28
  import { Priority } from '@prosekit/core';
36
29
  import type { ProseMirrorNode } from '@prosekit/pm/model';
37
30
  import { PublicProps } from 'vue';
38
- import type { Ref } from 'vue';
39
- import { RendererElement } from 'vue';
40
- import { RendererNode } from 'vue';
41
31
  import { ResizableHandleProps } from '@prosekit/web/resizable';
42
32
  import { ResizableRootProps } from '@prosekit/web/resizable';
43
33
  import { ShallowRef } from 'vue';
44
34
  import { TooltipContentProps } from '@prosekit/web/tooltip';
45
35
  import { TooltipRootProps } from '@prosekit/web/tooltip';
46
36
  import { TooltipTriggerProps } from '@prosekit/web/tooltip';
47
- import { VNode } from 'vue';
48
- import type { VNodeRef } from 'vue';
37
+ import { VNodeRef } from 'vue';
49
38
 
50
39
  declare const AutocompleteEmpty: DefineSetupFnComponent<Partial<AutocompleteEmptyProps> & {
51
40
  class?: string;
@@ -87,8 +76,6 @@ export declare function createComponent<Props extends object>(tagName: string, d
87
76
  class?: string;
88
77
  }>;
89
78
 
90
- export declare type CreateVueNodeView = ReturnType<typeof useVueNodeViewCreator>;
91
-
92
79
  export declare const default_alias: Options | Options[] | ((overrideOptions: Options) => Options | Options[] | Promise<Options | Options[]>);
93
80
 
94
81
  export { default_alias_1 }
@@ -102,21 +89,12 @@ declare function defineVueNodeView(options: VueNodeViewOptions): Extension;
102
89
  export { defineVueNodeView }
103
90
  export { defineVueNodeView as defineVueNodeView_alias_1 }
104
91
 
105
- /**
106
- * @internal
107
- */
108
- export declare function defineVueNodeViewFactory(nodeViewFactory: NodeViewFactory): Extension<ExtensionTyping<any, any, any>>;
109
-
110
92
  declare const InlinePopover: DefineSetupFnComponent<Partial<InlinePopoverProps> & {
111
93
  class?: string;
112
94
  }>;
113
95
  export { InlinePopover }
114
96
  export { InlinePopover as InlinePopover_alias_1 }
115
97
 
116
- export declare type NodeViewFactory = (options: VueNodeViewUserOptions) => NodeViewConstructor;
117
-
118
- export declare const nodeViewFactoryKey: InjectionKey<NodeViewFactory>;
119
-
120
98
  declare const PopoverContent: DefineSetupFnComponent<Partial<PopoverContentProps> & {
121
99
  class?: string;
122
100
  }>;
@@ -260,8 +238,6 @@ declare function useKeymap(keymap: MaybeRefOrGetter<Keymap>, options?: UseExtens
260
238
  export { useKeymap }
261
239
  export { useKeymap as useKeymap_alias_1 }
262
240
 
263
- export declare function useNodeViewFactory(): NodeViewFactory;
264
-
265
241
  /**
266
242
  * @internal
267
243
  */
@@ -276,17 +252,9 @@ declare function useStateUpdate(handler: (state: EditorState) => void, options?:
276
252
  export { useStateUpdate }
277
253
  export { useStateUpdate as useStateUpdate_alias_1 }
278
254
 
279
- export declare function useVueNodeViewCreator(renderVueRenderer: VueRendererResult['renderVueRenderer'], removeVueRenderer: VueRendererResult['removeVueRenderer']): NodeViewFactory;
280
-
281
- export declare function useVueRenderer(): VueRendererResult;
282
-
283
- export declare class VueNodeView extends CoreNodeView<VueNodeViewComponent> implements VueRenderer<VueNodeViewProps> {
284
- key: string;
285
- context: VueNodeViewProps;
286
- updateContext: () => void;
287
- render: () => VueRendererComponent;
288
- }
289
-
255
+ /**
256
+ * @public
257
+ */
290
258
  declare type VueNodeViewComponent = DefineComponent<VueNodeViewProps, any, any>;
291
259
  export { VueNodeViewComponent }
292
260
  export { VueNodeViewComponent as VueNodeViewComponent_alias_1 }
@@ -309,12 +277,15 @@ declare interface VueNodeViewOptions extends BaseNodeViewOptions {
309
277
  export { VueNodeViewOptions }
310
278
  export { VueNodeViewOptions as VueNodeViewOptions_alias_1 }
311
279
 
280
+ /**
281
+ * @public
282
+ */
312
283
  declare interface VueNodeViewProps {
313
284
  contentRef: VNodeRef;
314
285
  view: EditorView;
315
286
  getPos: () => number | undefined;
316
287
  setAttrs: (attrs: Attrs) => void;
317
- node: ShallowRef<Node_2>;
288
+ node: ShallowRef<ProseMirrorNode>;
318
289
  selected: ShallowRef<boolean>;
319
290
  decorations: ShallowRef<readonly Decoration[]>;
320
291
  innerDecorations: ShallowRef<DecorationSource>;
@@ -322,31 +293,9 @@ declare interface VueNodeViewProps {
322
293
  export { VueNodeViewProps }
323
294
  export { VueNodeViewProps as VueNodeViewProps_alias_1 }
324
295
 
325
- export declare type VueNodeViewSpec = CoreNodeViewSpec<VueNodeViewComponent>;
326
-
327
- export declare type VueNodeViewUserOptions = CoreNodeViewUserOptions<VueNodeViewComponent>;
328
-
329
- export declare interface VueRenderer<Context> {
330
- key: string;
331
- context: Context;
332
- render: () => VueRendererComponent;
333
- updateContext: () => void;
334
- }
335
-
336
- export declare type VueRendererComponent = DefineComponent<any, any, any>;
337
-
338
- export declare interface VueRendererResult {
339
- readonly portals: Ref<Record<string, VueRendererComponent>>;
340
- readonly renderVueRenderer: (renderer: VueRenderer<unknown>) => void;
341
- readonly removeVueRenderer: (renderer: VueRenderer<unknown>) => void;
342
- }
343
-
344
- export declare const VueViewsConsumer: DefineComponent< {}, () => null, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
345
-
346
- declare const VueViewsProvider: DefineComponent< {}, () => VNode<RendererNode, RendererElement, {
347
- [key: string]: any;
348
- }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
349
- export { VueViewsProvider }
350
- export { VueViewsProvider as VueViewsProvider_alias_1 }
296
+ /**
297
+ * @internal
298
+ */
299
+ export declare const VueViewsConsumer: DefineComponent<{}, () => null, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
351
300
 
352
301
  export { }
@@ -1,12 +1,12 @@
1
1
  export { ProseKit } from './_tsup-dts-rollup';
2
2
  export { ProseKitProps } from './_tsup-dts-rollup';
3
3
  export { defineVueNodeView } from './_tsup-dts-rollup';
4
+ export { VueNodeViewComponent } from './_tsup-dts-rollup';
4
5
  export { VueNodeViewOptions } from './_tsup-dts-rollup';
6
+ export { VueNodeViewProps } from './_tsup-dts-rollup';
7
+ export { useDocChange } from './_tsup-dts-rollup';
5
8
  export { useEditor } from './_tsup-dts-rollup';
6
9
  export { useExtension } from './_tsup-dts-rollup';
7
10
  export { UseExtensionOptions } from './_tsup-dts-rollup';
8
11
  export { useKeymap } from './_tsup-dts-rollup';
9
12
  export { useStateUpdate } from './_tsup-dts-rollup';
10
- export { useDocChange } from './_tsup-dts-rollup';
11
- export { VueNodeViewComponent } from './_tsup-dts-rollup';
12
- export { VueNodeViewProps } from './_tsup-dts-rollup';
@@ -5,174 +5,23 @@ import {
5
5
 
6
6
  // src/components/prosekit.ts
7
7
  import "@prosekit/core";
8
- import { defineComponent as defineComponent4, h as h3 } from "vue";
9
-
10
- // src/views/vue-views-provider.ts
11
- import { Fragment, defineComponent as defineComponent2, h as h2, provide } from "vue";
12
-
13
- // src/views/node-view/node-view-context.ts
14
- import { ProseKitError } from "@prosekit/core";
15
- import { inject } from "vue";
16
- var nodeViewFactoryKey = Symbol(
17
- "[ProseKit]useNodeViewFactory"
18
- );
19
- function useNodeViewFactory() {
20
- let nodeViewFactory = inject(nodeViewFactoryKey);
21
- if (!nodeViewFactory)
22
- throw new ProseKitError("Cannot find node view factory context.");
23
- return nodeViewFactory;
24
- }
25
-
26
- // src/views/node-view/vue-node-view.ts
27
- import { _getId } from "@prosekit/core";
28
- import { CoreNodeView } from "@prosemirror-adapter/core";
29
- import { Teleport, defineComponent, h, markRaw, shallowRef } from "vue";
30
- var VueNodeView = class extends CoreNodeView {
31
- constructor() {
32
- super(...arguments);
33
- this.key = _getId();
34
- this.context = {
35
- contentRef: (element) => {
36
- element && element instanceof HTMLElement && this.contentDOM && element.firstChild !== this.contentDOM && element.appendChild(this.contentDOM);
37
- },
38
- view: this.view,
39
- getPos: this.getPos,
40
- setAttrs: this.setAttrs,
41
- node: shallowRef(this.node),
42
- selected: shallowRef(this.selected),
43
- decorations: shallowRef(this.decorations),
44
- innerDecorations: shallowRef(this.innerDecorations)
45
- };
46
- this.updateContext = () => {
47
- Object.entries({
48
- node: this.node,
49
- selected: this.selected,
50
- decorations: this.decorations,
51
- innerDecorations: this.innerDecorations
52
- }).forEach(([key, value]) => {
53
- let prev = this.context[key];
54
- prev.value !== value && (prev.value = value);
55
- });
56
- };
57
- this.render = () => {
58
- let UserComponent = this.component;
59
- return markRaw(
60
- defineComponent({
61
- name: "ProsemirrorNodeView",
62
- setup: () => () => h(
63
- Teleport,
64
- {
65
- key: this.key,
66
- to: this.dom
67
- },
68
- h(UserComponent, this.context)
69
- )
70
- })
71
- );
72
- };
73
- }
74
- };
75
-
76
- // src/views/node-view/use-vue-node-view-creator.ts
77
- function useVueNodeViewCreator(renderVueRenderer, removeVueRenderer) {
78
- return (options) => (node, view, getPos, decorations, innerDecorations) => {
79
- let nodeView = new VueNodeView({
80
- node,
81
- view,
82
- getPos,
83
- decorations,
84
- innerDecorations,
85
- options: {
86
- ...options,
87
- onUpdate() {
88
- var _a;
89
- (_a = options.onUpdate) == null || _a.call(options), nodeView.updateContext();
90
- },
91
- selectNode() {
92
- var _a;
93
- (_a = options.selectNode) == null || _a.call(options), nodeView.updateContext();
94
- },
95
- deselectNode() {
96
- var _a;
97
- (_a = options.deselectNode) == null || _a.call(options), nodeView.updateContext();
98
- },
99
- destroy() {
100
- var _a;
101
- (_a = options.destroy) == null || _a.call(options), removeVueRenderer(nodeView);
102
- }
103
- }
104
- });
105
- return renderVueRenderer(nodeView), nodeView;
106
- };
107
- }
108
-
109
- // src/views/vue-renderer.ts
110
- import {
111
- getCurrentInstance,
112
- markRaw as markRaw2,
113
- onBeforeMount,
114
- onUnmounted,
115
- ref
116
- } from "vue";
117
- function useVueRenderer() {
118
- let portals = ref({}), instance = getCurrentInstance(), update = markRaw2({});
119
- return onBeforeMount(() => {
120
- update.updater = () => {
121
- instance == null || instance.update();
122
- };
123
- }), onUnmounted(() => {
124
- update.updater = void 0;
125
- }), {
126
- portals,
127
- renderVueRenderer: (renderer) => {
128
- var _a;
129
- portals.value[renderer.key] = renderer.render(), (_a = update.updater) == null || _a.call(update);
130
- },
131
- removeVueRenderer: (renderer) => {
132
- delete portals.value[renderer.key];
133
- }
134
- };
135
- }
136
-
137
- // src/views/vue-views-provider.ts
138
- var VueViewsProvider = defineComponent2({
139
- name: "VueViewsProvider",
140
- setup: (_, { slots }) => {
141
- let { portals, renderVueRenderer, removeVueRenderer } = useVueRenderer(), createVueNodeView = useVueNodeViewCreator(
142
- renderVueRenderer,
143
- removeVueRenderer
144
- );
145
- return provide(nodeViewFactoryKey, createVueNodeView), () => {
146
- var _a;
147
- return h2(Fragment, null, [
148
- (_a = slots.default) == null ? void 0 : _a.call(slots),
149
- Object.values(portals.value).map((x) => h2(x))
150
- ]);
151
- };
152
- }
153
- });
154
-
155
- // src/views/vue-views-comsumer.ts
156
- import { computed as computed2, defineComponent as defineComponent3 } from "vue";
8
+ import { ProsemirrorAdapterProvider } from "@prosemirror-adapter/vue";
9
+ import { defineComponent as defineComponent2, h as h2 } from "vue";
157
10
 
158
11
  // src/extensions/vue-node-view.ts
159
12
  import {
13
+ defineNodeViewComponent,
160
14
  defineNodeViewFactory
161
15
  } from "@prosekit/core";
162
- function defineVueNodeView(options) {
163
- let { name, ...userOptions } = options;
164
- return defineNodeViewFactory({
165
- group: "vue",
166
- name,
167
- args: userOptions
168
- });
169
- }
170
- function defineVueNodeViewFactory(nodeViewFactory) {
171
- return defineNodeViewFactory({
172
- group: "vue",
173
- factory: nodeViewFactory
174
- });
175
- }
16
+ import {
17
+ useNodeViewContext,
18
+ useNodeViewFactory
19
+ } from "@prosemirror-adapter/vue";
20
+ import {
21
+ computed as computed2,
22
+ defineComponent,
23
+ h
24
+ } from "vue";
176
25
 
177
26
  // src/hooks/use-extension.ts
178
27
  import "@prosekit/core";
@@ -209,54 +58,87 @@ function useExtension(extension, options) {
209
58
  );
210
59
  }
211
60
 
212
- // src/views/vue-views-comsumer.ts
213
- var VueViewsConsumer = defineComponent3({
61
+ // src/extensions/vue-node-view.ts
62
+ function withNodeViewProps(component) {
63
+ return defineComponent({
64
+ name: "NodeViewPropsWrapper",
65
+ setup: () => {
66
+ let props = useNodeViewContext();
67
+ return () => h(component, props);
68
+ }
69
+ });
70
+ }
71
+ var VueViewsConsumer = /* @__PURE__ */ defineComponent({
214
72
  name: "VueViewsConsumer",
215
73
  setup: () => {
216
74
  let nodeViewFactory = useNodeViewFactory(), extension = computed2(() => defineVueNodeViewFactory(nodeViewFactory));
217
75
  return useExtension(extension), () => null;
218
76
  }
219
77
  });
78
+ function defineVueNodeView(options) {
79
+ let { name, component, ...userOptions } = options, args = {
80
+ ...userOptions,
81
+ component: withNodeViewProps(component)
82
+ };
83
+ return defineNodeViewComponent({
84
+ group: "vue",
85
+ name,
86
+ args
87
+ });
88
+ }
89
+ function defineVueNodeViewFactory(factory) {
90
+ return defineNodeViewFactory({
91
+ group: "vue",
92
+ factory
93
+ });
94
+ }
220
95
 
221
96
  // src/components/prosekit.ts
222
- var ProseKit = defineComponent4(
223
- (props, { slots }) => (provideEditor(props.editor), () => h3(VueViewsProvider, null, () => {
97
+ var ProseKit = defineComponent2(
98
+ (props, { slots }) => (provideEditor(props.editor), () => h2(ProsemirrorAdapterProvider, null, () => {
224
99
  var _a;
225
100
  return [
226
- h3(VueViewsConsumer),
101
+ h2(VueViewsConsumer),
227
102
  (_a = slots.default) == null ? void 0 : _a.call(slots)
228
103
  ];
229
104
  })),
230
105
  { props: ["editor"] }
231
106
  );
232
107
 
108
+ // src/hooks/use-doc-change.ts
109
+ import { defineDocChangeHandler } from "@prosekit/core";
110
+ function useDocChange(handler, options) {
111
+ let extension = defineDocChangeHandler((view) => handler(view.state.doc));
112
+ return useExtension(extension, options);
113
+ }
114
+
233
115
  // src/hooks/use-editor.ts
234
116
  import {
235
- ProseKitError as ProseKitError2,
117
+ ProseKitError,
236
118
  defineMountHandler,
237
119
  defineUpdateHandler,
238
120
  union
239
121
  } from "@prosekit/core";
240
122
  import {
241
123
  onMounted,
242
- onUnmounted as onUnmounted2,
243
- shallowRef as shallowRef2,
124
+ onUnmounted,
125
+ shallowRef,
244
126
  triggerRef
245
127
  } from "vue";
246
128
  function useEditor(options) {
247
129
  var _a;
248
130
  let update = (_a = options == null ? void 0 : options.update) != null ? _a : !1, editor = useEditorContext();
249
131
  if (!editor)
250
- throw new ProseKitError2(
132
+ throw new ProseKitError(
251
133
  "useEditor must be used within the ProseKit component"
252
134
  );
253
- let editorRef = shallowRef2(editor);
135
+ let editorRef = shallowRef(editor);
254
136
  return update && onMounted(() => {
255
137
  let forceUpdate = () => triggerRef(editorRef), extension = union([
256
138
  defineMountHandler(forceUpdate),
257
139
  defineUpdateHandler(forceUpdate)
258
140
  ]), dispose = editor.use(extension);
259
- onUnmounted2(dispose);
141
+ onUnmounted(dispose);
260
142
  }), editorRef;
261
143
  }
262
144
 
@@ -274,13 +156,6 @@ function useStateUpdate(handler, options) {
274
156
  let extension = defineUpdateHandler2((view) => handler(view.state));
275
157
  return useExtension(extension, options);
276
158
  }
277
-
278
- // src/hooks/use-doc-change.ts
279
- import { defineDocChangeHandler } from "@prosekit/core";
280
- function useDocChange(handler, options) {
281
- let extension = defineDocChangeHandler((view) => handler(view.state.doc));
282
- return useExtension(extension, options);
283
- }
284
159
  export {
285
160
  ProseKit,
286
161
  defineVueNodeView,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/vue",
3
3
  "type": "module",
4
- "version": "0.3.9",
4
+ "version": "0.3.10",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",
@@ -65,10 +65,10 @@
65
65
  "dist"
66
66
  ],
67
67
  "dependencies": {
68
- "@prosemirror-adapter/core": "^0.2.6",
69
- "@prosekit/core": "^0.7.0",
68
+ "@prosemirror-adapter/vue": "^0.2.6",
69
+ "@prosekit/core": "^0.7.1",
70
70
  "@prosekit/pm": "^0.1.5",
71
- "@prosekit/web": "^0.2.2"
71
+ "@prosekit/web": "^0.2.3"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "vue": ">= 3.0.0"