@prosekit/vue 0.3.8 → 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,11 +8,9 @@ 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';
13
+ import { config as default_alias_1 } from '@prosekit/dev/config-vitest';
16
14
  import { DefineComponent } from 'vue';
17
15
  import { DefineSetupFnComponent } from 'vue';
18
16
  import { Editor } from '@prosekit/core';
@@ -20,12 +18,9 @@ import type { EditorState } from '@prosekit/pm/state';
20
18
  import type { EditorView } from '@prosekit/pm/view';
21
19
  import { Extension } from '@prosekit/core';
22
20
  import { ExtractPropTypes } from 'vue';
23
- import type { InjectionKey } from 'vue';
24
21
  import { InlinePopoverProps } from '@prosekit/web/inline-popover';
25
22
  import { Keymap } from '@prosekit/core';
26
23
  import { MaybeRefOrGetter } from 'vue';
27
- import type { Node as Node_2 } from '@prosekit/pm/model';
28
- import type { NodeViewConstructor } from '@prosekit/pm/view';
29
24
  import { Options } from 'tsup';
30
25
  import { PopoverContentProps } from '@prosekit/web/popover';
31
26
  import { PopoverRootProps } from '@prosekit/web/popover';
@@ -33,17 +28,13 @@ import { PopoverTriggerProps } from '@prosekit/web/popover';
33
28
  import { Priority } from '@prosekit/core';
34
29
  import type { ProseMirrorNode } from '@prosekit/pm/model';
35
30
  import { PublicProps } from 'vue';
36
- import type { Ref } from 'vue';
37
- import { RendererElement } from 'vue';
38
- import { RendererNode } from 'vue';
39
31
  import { ResizableHandleProps } from '@prosekit/web/resizable';
40
32
  import { ResizableRootProps } from '@prosekit/web/resizable';
41
33
  import { ShallowRef } from 'vue';
42
34
  import { TooltipContentProps } from '@prosekit/web/tooltip';
43
35
  import { TooltipRootProps } from '@prosekit/web/tooltip';
44
36
  import { TooltipTriggerProps } from '@prosekit/web/tooltip';
45
- import { VNode } from 'vue';
46
- import type { VNodeRef } from 'vue';
37
+ import { VNodeRef } from 'vue';
47
38
 
48
39
  declare const AutocompleteEmpty: DefineSetupFnComponent<Partial<AutocompleteEmptyProps> & {
49
40
  class?: string;
@@ -85,15 +76,9 @@ export declare function createComponent<Props extends object>(tagName: string, d
85
76
  class?: string;
86
77
  }>;
87
78
 
88
- export declare type CreateVueNodeView = ReturnType<typeof useVueNodeViewCreator>;
89
-
90
79
  export declare const default_alias: Options | Options[] | ((overrideOptions: Options) => Options | Options[] | Promise<Options | Options[]>);
91
80
 
92
- export declare const default_alias_1: {
93
- test: {
94
- environment: "jsdom";
95
- };
96
- };
81
+ export { default_alias_1 }
97
82
 
98
83
  /**
99
84
  * Defines a node view using a Vue component.
@@ -104,21 +89,12 @@ declare function defineVueNodeView(options: VueNodeViewOptions): Extension;
104
89
  export { defineVueNodeView }
105
90
  export { defineVueNodeView as defineVueNodeView_alias_1 }
106
91
 
107
- /**
108
- * @internal
109
- */
110
- export declare function defineVueNodeViewFactory(nodeViewFactory: NodeViewFactory): Extension<any>;
111
-
112
92
  declare const InlinePopover: DefineSetupFnComponent<Partial<InlinePopoverProps> & {
113
93
  class?: string;
114
94
  }>;
115
95
  export { InlinePopover }
116
96
  export { InlinePopover as InlinePopover_alias_1 }
117
97
 
118
- export declare type NodeViewFactory = (options: VueNodeViewUserOptions) => NodeViewConstructor;
119
-
120
- export declare const nodeViewFactoryKey: InjectionKey<NodeViewFactory>;
121
-
122
98
  declare const PopoverContent: DefineSetupFnComponent<Partial<PopoverContentProps> & {
123
99
  class?: string;
124
100
  }>;
@@ -262,8 +238,6 @@ declare function useKeymap(keymap: MaybeRefOrGetter<Keymap>, options?: UseExtens
262
238
  export { useKeymap }
263
239
  export { useKeymap as useKeymap_alias_1 }
264
240
 
265
- export declare function useNodeViewFactory(): NodeViewFactory;
266
-
267
241
  /**
268
242
  * @internal
269
243
  */
@@ -278,17 +252,9 @@ declare function useStateUpdate(handler: (state: EditorState) => void, options?:
278
252
  export { useStateUpdate }
279
253
  export { useStateUpdate as useStateUpdate_alias_1 }
280
254
 
281
- export declare function useVueNodeViewCreator(renderVueRenderer: VueRendererResult['renderVueRenderer'], removeVueRenderer: VueRendererResult['removeVueRenderer']): NodeViewFactory;
282
-
283
- export declare function useVueRenderer(): VueRendererResult;
284
-
285
- export declare class VueNodeView extends CoreNodeView<VueNodeViewComponent> implements VueRenderer<VueNodeViewProps> {
286
- key: string;
287
- context: VueNodeViewProps;
288
- updateContext: () => void;
289
- render: () => VueRendererComponent;
290
- }
291
-
255
+ /**
256
+ * @public
257
+ */
292
258
  declare type VueNodeViewComponent = DefineComponent<VueNodeViewProps, any, any>;
293
259
  export { VueNodeViewComponent }
294
260
  export { VueNodeViewComponent as VueNodeViewComponent_alias_1 }
@@ -311,12 +277,15 @@ declare interface VueNodeViewOptions extends BaseNodeViewOptions {
311
277
  export { VueNodeViewOptions }
312
278
  export { VueNodeViewOptions as VueNodeViewOptions_alias_1 }
313
279
 
280
+ /**
281
+ * @public
282
+ */
314
283
  declare interface VueNodeViewProps {
315
284
  contentRef: VNodeRef;
316
285
  view: EditorView;
317
286
  getPos: () => number | undefined;
318
287
  setAttrs: (attrs: Attrs) => void;
319
- node: ShallowRef<Node_2>;
288
+ node: ShallowRef<ProseMirrorNode>;
320
289
  selected: ShallowRef<boolean>;
321
290
  decorations: ShallowRef<readonly Decoration[]>;
322
291
  innerDecorations: ShallowRef<DecorationSource>;
@@ -324,31 +293,9 @@ declare interface VueNodeViewProps {
324
293
  export { VueNodeViewProps }
325
294
  export { VueNodeViewProps as VueNodeViewProps_alias_1 }
326
295
 
327
- export declare type VueNodeViewSpec = CoreNodeViewSpec<VueNodeViewComponent>;
328
-
329
- export declare type VueNodeViewUserOptions = CoreNodeViewUserOptions<VueNodeViewComponent>;
330
-
331
- export declare interface VueRenderer<Context> {
332
- key: string;
333
- context: Context;
334
- render: () => VueRendererComponent;
335
- updateContext: () => void;
336
- }
337
-
338
- export declare type VueRendererComponent = DefineComponent<any, any, any>;
339
-
340
- export declare interface VueRendererResult {
341
- readonly portals: Ref<Record<string, VueRendererComponent>>;
342
- readonly renderVueRenderer: (renderer: VueRenderer<unknown>) => void;
343
- readonly removeVueRenderer: (renderer: VueRenderer<unknown>) => void;
344
- }
345
-
346
- export declare const VueViewsConsumer: DefineComponent< {}, () => null, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
347
-
348
- declare const VueViewsProvider: DefineComponent< {}, () => VNode<RendererNode, RendererElement, {
349
- [key: string]: any;
350
- }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
351
- export { VueViewsProvider }
352
- export { VueViewsProvider as VueViewsProvider_alias_1 }
296
+ /**
297
+ * @internal
298
+ */
299
+ export declare const VueViewsConsumer: DefineComponent<{}, () => null, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
353
300
 
354
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.8",
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.6.1",
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.1"
71
+ "@prosekit/web": "^0.2.3"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "vue": ">= 3.0.0"
@@ -81,9 +81,9 @@
81
81
  "devDependencies": {
82
82
  "@vue/test-utils": "^2.4.6",
83
83
  "tsup": "^8.1.0",
84
- "typescript": "^5.5.2",
85
- "vitest": "^1.6.0",
86
- "vue": "^3.4.29",
84
+ "typescript": "^5.5.3",
85
+ "vitest": "^2.0.0-beta.13",
86
+ "vue": "^3.4.31",
87
87
  "@prosekit/dev": "0.0.0"
88
88
  },
89
89
  "scripts": {