@prosekit/svelte 0.8.9 → 0.9.0-beta.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/dist/build/components/prosekit/prosekit.svelte +4 -7
- package/dist/build/components/view-renderer/index.d.ts +2 -0
- package/dist/build/components/view-renderer/index.d.ts.map +1 -0
- package/dist/build/components/view-renderer/index.js +1 -0
- package/dist/build/components/view-renderer/view-renderer.svelte +23 -0
- package/dist/build/extensions/svelte-mark-view.d.ts +6 -4
- package/dist/build/extensions/svelte-mark-view.d.ts.map +1 -1
- package/dist/build/extensions/svelte-mark-view.js +30 -24
- package/dist/build/extensions/svelte-node-view.d.ts +6 -4
- package/dist/build/extensions/svelte-node-view.d.ts.map +1 -1
- package/dist/build/extensions/svelte-node-view.js +30 -24
- package/package.json +8 -8
- package/src/components/prosekit/prosekit.svelte +4 -7
- package/src/components/view-renderer/index.ts +1 -0
- package/src/components/view-renderer/view-renderer.svelte +23 -0
- package/src/extensions/svelte-mark-view.ts +39 -39
- package/src/extensions/svelte-node-view.ts +39 -39
- package/dist/build/components/mark-view-consumer/index.d.ts +0 -6
- package/dist/build/components/mark-view-consumer/index.d.ts.map +0 -1
- package/dist/build/components/mark-view-consumer/index.js +0 -5
- package/dist/build/components/mark-view-consumer/mark-view-consumer.svelte +0 -12
- package/dist/build/components/mark-view-wrapper/index.d.ts +0 -4
- package/dist/build/components/mark-view-wrapper/index.d.ts.map +0 -1
- package/dist/build/components/mark-view-wrapper/index.js +0 -2
- package/dist/build/components/mark-view-wrapper/mark-view-wrapper.svelte +0 -17
- package/dist/build/components/mark-view-wrapper/props.d.ts +0 -6
- package/dist/build/components/mark-view-wrapper/props.d.ts.map +0 -1
- package/dist/build/components/mark-view-wrapper/props.js +0 -1
- package/dist/build/components/node-view-consumer/index.d.ts +0 -6
- package/dist/build/components/node-view-consumer/index.d.ts.map +0 -1
- package/dist/build/components/node-view-consumer/index.js +0 -5
- package/dist/build/components/node-view-consumer/node-view-consumer.svelte +0 -12
- package/dist/build/components/node-view-wrapper/index.d.ts +0 -4
- package/dist/build/components/node-view-wrapper/index.d.ts.map +0 -1
- package/dist/build/components/node-view-wrapper/index.js +0 -2
- package/dist/build/components/node-view-wrapper/node-view-wrapper.svelte +0 -22
- package/dist/build/components/node-view-wrapper/props.d.ts +0 -6
- package/dist/build/components/node-view-wrapper/props.d.ts.map +0 -1
- package/dist/build/components/node-view-wrapper/props.js +0 -1
- package/src/components/mark-view-consumer/index.ts +0 -8
- package/src/components/mark-view-consumer/mark-view-consumer.svelte +0 -12
- package/src/components/mark-view-wrapper/index.ts +0 -6
- package/src/components/mark-view-wrapper/mark-view-wrapper.svelte +0 -17
- package/src/components/mark-view-wrapper/props.ts +0 -7
- package/src/components/node-view-consumer/index.ts +0 -8
- package/src/components/node-view-consumer/node-view-consumer.svelte +0 -12
- package/src/components/node-view-wrapper/index.ts +0 -6
- package/src/components/node-view-wrapper/node-view-wrapper.svelte +0 -22
- package/src/components/node-view-wrapper/props.ts +0 -7
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { Editor } from '@prosekit/core'
|
|
3
|
-
import { useProsemirrorAdapterProvider } from '@prosemirror-adapter/svelte'
|
|
4
3
|
import { setEditorContext } from '../../contexts/editor-context.js'
|
|
5
|
-
import {
|
|
6
|
-
import { NodeViewConsumer } from '../node-view-consumer/index.js'
|
|
4
|
+
import { ViewRenderer } from '../view-renderer/index.js'
|
|
7
5
|
|
|
8
6
|
export let editor: Editor
|
|
9
7
|
|
|
10
8
|
setEditorContext(editor)
|
|
11
|
-
useProsemirrorAdapterProvider()
|
|
12
9
|
</script>
|
|
13
10
|
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
11
|
+
<ViewRenderer {editor}>
|
|
12
|
+
<slot />
|
|
13
|
+
</ViewRenderer>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/view-renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ViewRenderer } from './view-renderer.svelte';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { union, type Editor } from '@prosekit/core'
|
|
3
|
+
import { useSvelteRenderer } from '@prosemirror-adapter/svelte'
|
|
4
|
+
import { getAllContexts } from 'svelte'
|
|
5
|
+
import { readable } from 'svelte/store'
|
|
6
|
+
import { defineSvelteMarkViewFactory } from '../../extensions/svelte-mark-view.js'
|
|
7
|
+
import { defineSvelteNodeViewFactory } from '../../extensions/svelte-node-view.js'
|
|
8
|
+
import { useEditorExtension } from '../../hooks/use-editor-extension.js'
|
|
9
|
+
|
|
10
|
+
export let editor: Editor
|
|
11
|
+
|
|
12
|
+
const { renderSvelteRenderer, removeSvelteRenderer } = useSvelteRenderer()
|
|
13
|
+
const context = getAllContexts()
|
|
14
|
+
|
|
15
|
+
const extension = union([
|
|
16
|
+
defineSvelteMarkViewFactory(renderSvelteRenderer, removeSvelteRenderer, context),
|
|
17
|
+
defineSvelteNodeViewFactory(renderSvelteRenderer, removeSvelteRenderer, context),
|
|
18
|
+
])
|
|
19
|
+
|
|
20
|
+
useEditorExtension(editor, readable(extension))
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<slot />
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type Extension } from '@prosekit/core';
|
|
2
|
-
import type { MarkViewConstructor } from '@prosekit/pm/view';
|
|
3
2
|
import type { CoreMarkViewUserOptions } from '@prosemirror-adapter/core';
|
|
4
|
-
import type
|
|
5
|
-
import type
|
|
3
|
+
import { type MarkViewContext, type SvelteRendererResult } from '@prosemirror-adapter/svelte';
|
|
4
|
+
import { type Component } from 'svelte';
|
|
6
5
|
/**
|
|
7
6
|
* @public
|
|
8
7
|
*/
|
|
@@ -23,11 +22,14 @@ export interface SvelteMarkViewOptions extends CoreMarkViewUserOptions<SvelteMar
|
|
|
23
22
|
*/
|
|
24
23
|
name: string;
|
|
25
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export declare function defineSvelteMarkViewFactory(renderSvelteRenderer: SvelteRendererResult['renderSvelteRenderer'], removeSvelteRenderer: SvelteRendererResult['removeSvelteRenderer'], context: Map<any, any>): Extension;
|
|
26
29
|
/**
|
|
27
30
|
* Defines a mark view using a Svelte component.
|
|
28
31
|
*
|
|
29
32
|
* @public
|
|
30
33
|
*/
|
|
31
34
|
export declare function defineSvelteMarkView(options: SvelteMarkViewOptions): Extension;
|
|
32
|
-
export declare function defineSvelteMarkViewFactory(factory: (options: SvelteMarkViewUserOptions) => MarkViewConstructor): Extension;
|
|
33
35
|
//# sourceMappingURL=svelte-mark-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte-mark-view.d.ts","sourceRoot":"","sources":["../../../src/extensions/svelte-mark-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"svelte-mark-view.d.ts","sourceRoot":"","sources":["../../../src/extensions/svelte-mark-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElE;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;CAAG;AAE/D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB,CAAC,uBAAuB,CAAC;IAC7F;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAkBD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,oBAAoB,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,EAClE,oBAAoB,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,EAClE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GACrB,SAAS,CAMX;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,SAAS,CAWX"}
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import { defineMarkViewComponent, defineMarkViewFactory, definePlugin } from '@prosekit/core';
|
|
2
|
-
import {
|
|
2
|
+
import { AbstractSvelteMarkView, buildSvelteMarkViewCreator, } from '@prosemirror-adapter/svelte';
|
|
3
|
+
import { flushSync, mount, unmount } from 'svelte';
|
|
3
4
|
const isServer = typeof window === 'undefined';
|
|
5
|
+
class ProseKitSvelteMarkView extends AbstractSvelteMarkView {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.render = (options) => {
|
|
9
|
+
const UserComponent = this.component;
|
|
10
|
+
const props = this.context;
|
|
11
|
+
const component = mount(UserComponent, {
|
|
12
|
+
target: this.dom,
|
|
13
|
+
context: options.context,
|
|
14
|
+
props,
|
|
15
|
+
});
|
|
16
|
+
flushSync();
|
|
17
|
+
return () => unmount(component);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export function defineSvelteMarkViewFactory(renderSvelteRenderer, removeSvelteRenderer, context) {
|
|
25
|
+
const factory = buildSvelteMarkViewCreator(renderSvelteRenderer, removeSvelteRenderer, ProseKitSvelteMarkView, context);
|
|
26
|
+
return defineMarkViewFactory({
|
|
27
|
+
group: 'svelte',
|
|
28
|
+
factory,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
4
31
|
/**
|
|
5
32
|
* Defines a mark view using a Svelte component.
|
|
6
33
|
*
|
|
@@ -11,30 +38,9 @@ export function defineSvelteMarkView(options) {
|
|
|
11
38
|
if (isServer) {
|
|
12
39
|
return definePlugin([]);
|
|
13
40
|
}
|
|
14
|
-
const { name, component, ...userOptions } = options;
|
|
15
|
-
const args = {
|
|
16
|
-
...userOptions,
|
|
17
|
-
component: wrapComponent(component),
|
|
18
|
-
};
|
|
19
41
|
return defineMarkViewComponent({
|
|
20
42
|
group: 'svelte',
|
|
21
|
-
name,
|
|
22
|
-
args,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function wrapComponent(component) {
|
|
26
|
-
// `MarkViewWrapper` is an object during SSR
|
|
27
|
-
if (!MarkViewWrapper || typeof MarkViewWrapper !== 'function') {
|
|
28
|
-
return component;
|
|
29
|
-
}
|
|
30
|
-
const MarkViewPropsWrapper = (internals, props) => {
|
|
31
|
-
return MarkViewWrapper(internals, { ...props, component });
|
|
32
|
-
};
|
|
33
|
-
return MarkViewPropsWrapper;
|
|
34
|
-
}
|
|
35
|
-
export function defineSvelteMarkViewFactory(factory) {
|
|
36
|
-
return defineMarkViewFactory({
|
|
37
|
-
group: 'svelte',
|
|
38
|
-
factory,
|
|
43
|
+
name: options.name,
|
|
44
|
+
args: options,
|
|
39
45
|
});
|
|
40
46
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type Extension } from '@prosekit/core';
|
|
2
|
-
import type { NodeViewConstructor } from '@prosekit/pm/view';
|
|
3
2
|
import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core';
|
|
4
|
-
import type
|
|
5
|
-
import type
|
|
3
|
+
import { type NodeViewContext, type SvelteRendererResult } from '@prosemirror-adapter/svelte';
|
|
4
|
+
import { type Component } from 'svelte';
|
|
6
5
|
/**
|
|
7
6
|
* @public
|
|
8
7
|
*/
|
|
@@ -23,11 +22,14 @@ export interface SvelteNodeViewOptions extends CoreNodeViewUserOptions<SvelteNod
|
|
|
23
22
|
*/
|
|
24
23
|
name: string;
|
|
25
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export declare function defineSvelteNodeViewFactory(renderSvelteRenderer: SvelteRendererResult['renderSvelteRenderer'], removeSvelteRenderer: SvelteRendererResult['removeSvelteRenderer'], context: Map<any, any>): Extension;
|
|
26
29
|
/**
|
|
27
30
|
* Defines a node view using a Svelte component.
|
|
28
31
|
*
|
|
29
32
|
* @public
|
|
30
33
|
*/
|
|
31
34
|
export declare function defineSvelteNodeView(options: SvelteNodeViewOptions): Extension;
|
|
32
|
-
export declare function defineSvelteNodeViewFactory(factory: (options: SvelteNodeViewUserOptions) => NodeViewConstructor): Extension;
|
|
33
35
|
//# sourceMappingURL=svelte-node-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte-node-view.d.ts","sourceRoot":"","sources":["../../../src/extensions/svelte-node-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"svelte-node-view.d.ts","sourceRoot":"","sources":["../../../src/extensions/svelte-node-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElE;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;CAAG;AAE/D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB,CAAC,uBAAuB,CAAC;IAC7F;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAkBD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,oBAAoB,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,EAClE,oBAAoB,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,EAClE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GACrB,SAAS,CAMX;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,SAAS,CAWX"}
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import { defineNodeViewComponent, defineNodeViewFactory, definePlugin } from '@prosekit/core';
|
|
2
|
-
import {
|
|
2
|
+
import { AbstractSvelteNodeView, buildSvelteNodeViewCreator, } from '@prosemirror-adapter/svelte';
|
|
3
|
+
import { flushSync, mount, unmount } from 'svelte';
|
|
3
4
|
const isServer = typeof window === 'undefined';
|
|
5
|
+
class ProseKitSvelteNodeView extends AbstractSvelteNodeView {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.render = (options) => {
|
|
9
|
+
const UserComponent = this.component;
|
|
10
|
+
const props = this.context;
|
|
11
|
+
const component = mount(UserComponent, {
|
|
12
|
+
target: this.dom,
|
|
13
|
+
context: options.context,
|
|
14
|
+
props,
|
|
15
|
+
});
|
|
16
|
+
flushSync();
|
|
17
|
+
return () => unmount(component);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export function defineSvelteNodeViewFactory(renderSvelteRenderer, removeSvelteRenderer, context) {
|
|
25
|
+
const factory = buildSvelteNodeViewCreator(renderSvelteRenderer, removeSvelteRenderer, ProseKitSvelteNodeView, context);
|
|
26
|
+
return defineNodeViewFactory({
|
|
27
|
+
group: 'svelte',
|
|
28
|
+
factory,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
4
31
|
/**
|
|
5
32
|
* Defines a node view using a Svelte component.
|
|
6
33
|
*
|
|
@@ -11,30 +38,9 @@ export function defineSvelteNodeView(options) {
|
|
|
11
38
|
if (isServer) {
|
|
12
39
|
return definePlugin([]);
|
|
13
40
|
}
|
|
14
|
-
const { name, component, ...userOptions } = options;
|
|
15
|
-
const args = {
|
|
16
|
-
...userOptions,
|
|
17
|
-
component: wrapComponent(component),
|
|
18
|
-
};
|
|
19
41
|
return defineNodeViewComponent({
|
|
20
42
|
group: 'svelte',
|
|
21
|
-
name,
|
|
22
|
-
args,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function wrapComponent(component) {
|
|
26
|
-
// `NodeViewWrapper` is an object during SSR
|
|
27
|
-
if (!NodeViewWrapper || typeof NodeViewWrapper !== 'function') {
|
|
28
|
-
return component;
|
|
29
|
-
}
|
|
30
|
-
const NodeViewPropsWrapper = (internals, props) => {
|
|
31
|
-
return NodeViewWrapper(internals, { ...props, component });
|
|
32
|
-
};
|
|
33
|
-
return NodeViewPropsWrapper;
|
|
34
|
-
}
|
|
35
|
-
export function defineSvelteNodeViewFactory(factory) {
|
|
36
|
-
return defineNodeViewFactory({
|
|
37
|
-
group: 'svelte',
|
|
38
|
-
factory,
|
|
43
|
+
name: options.name,
|
|
44
|
+
args: options,
|
|
39
45
|
});
|
|
40
46
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosekit/svelte",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.0-beta.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Svelte components and utilities for ProseKit",
|
|
7
7
|
"author": {
|
|
@@ -76,11 +76,11 @@
|
|
|
76
76
|
"src"
|
|
77
77
|
],
|
|
78
78
|
"dependencies": {
|
|
79
|
-
"@prosemirror-adapter/core": "^0.
|
|
80
|
-
"@prosemirror-adapter/svelte": "^0.5.
|
|
81
|
-
"@prosekit/
|
|
82
|
-
"@prosekit/web": "^0.
|
|
83
|
-
"@prosekit/
|
|
79
|
+
"@prosemirror-adapter/core": "^0.5.2",
|
|
80
|
+
"@prosemirror-adapter/svelte": "^0.5.2",
|
|
81
|
+
"@prosekit/pm": "^0.1.15",
|
|
82
|
+
"@prosekit/web": "^0.8.0-beta.0",
|
|
83
|
+
"@prosekit/core": "^0.12.0-beta.0"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
86
|
"svelte": ">= 5.0.0"
|
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@sveltejs/package": "^2.5.7",
|
|
95
95
|
"@types/node": "^24.10.13",
|
|
96
|
-
"svelte": "^5.
|
|
97
|
-
"svelte-check": "^4.4.
|
|
96
|
+
"svelte": "^5.55.0",
|
|
97
|
+
"svelte-check": "^4.4.5",
|
|
98
98
|
"tsx": "^4.21.0",
|
|
99
99
|
"typescript": "~5.9.3",
|
|
100
100
|
"@prosekit/config-ts": "0.0.0"
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { Editor } from '@prosekit/core'
|
|
3
|
-
import { useProsemirrorAdapterProvider } from '@prosemirror-adapter/svelte'
|
|
4
3
|
import { setEditorContext } from '../../contexts/editor-context.ts'
|
|
5
|
-
import {
|
|
6
|
-
import { NodeViewConsumer } from '../node-view-consumer/index.ts'
|
|
4
|
+
import { ViewRenderer } from '../view-renderer/index.ts'
|
|
7
5
|
|
|
8
6
|
export let editor: Editor
|
|
9
7
|
|
|
10
8
|
setEditorContext(editor)
|
|
11
|
-
useProsemirrorAdapterProvider()
|
|
12
9
|
</script>
|
|
13
10
|
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
11
|
+
<ViewRenderer {editor}>
|
|
12
|
+
<slot />
|
|
13
|
+
</ViewRenderer>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ViewRenderer } from './view-renderer.svelte'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { union, type Editor } from '@prosekit/core'
|
|
3
|
+
import { useSvelteRenderer } from '@prosemirror-adapter/svelte'
|
|
4
|
+
import { getAllContexts } from 'svelte'
|
|
5
|
+
import { readable } from 'svelte/store'
|
|
6
|
+
import { defineSvelteMarkViewFactory } from '../../extensions/svelte-mark-view.ts'
|
|
7
|
+
import { defineSvelteNodeViewFactory } from '../../extensions/svelte-node-view.ts'
|
|
8
|
+
import { useEditorExtension } from '../../hooks/use-editor-extension.ts'
|
|
9
|
+
|
|
10
|
+
export let editor: Editor
|
|
11
|
+
|
|
12
|
+
const { renderSvelteRenderer, removeSvelteRenderer } = useSvelteRenderer()
|
|
13
|
+
const context = getAllContexts()
|
|
14
|
+
|
|
15
|
+
const extension = union([
|
|
16
|
+
defineSvelteMarkViewFactory(renderSvelteRenderer, removeSvelteRenderer, context),
|
|
17
|
+
defineSvelteNodeViewFactory(renderSvelteRenderer, removeSvelteRenderer, context),
|
|
18
|
+
])
|
|
19
|
+
|
|
20
|
+
useEditorExtension(editor, readable(extension))
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<slot />
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { defineMarkViewComponent, defineMarkViewFactory, definePlugin, type Extension } from '@prosekit/core'
|
|
2
|
-
import type { MarkViewConstructor } from '@prosekit/pm/view'
|
|
3
2
|
import type { CoreMarkViewUserOptions } from '@prosemirror-adapter/core'
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import {
|
|
4
|
+
AbstractSvelteMarkView,
|
|
5
|
+
buildSvelteMarkViewCreator,
|
|
6
|
+
type MarkViewContext,
|
|
7
|
+
type SvelteRendererResult,
|
|
8
|
+
} from '@prosemirror-adapter/svelte'
|
|
9
|
+
import { flushSync, mount, unmount, type Component } from 'svelte'
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* @public
|
|
@@ -30,6 +32,35 @@ export interface SvelteMarkViewOptions extends CoreMarkViewUserOptions<SvelteMar
|
|
|
30
32
|
|
|
31
33
|
const isServer = typeof window === 'undefined'
|
|
32
34
|
|
|
35
|
+
class ProseKitSvelteMarkView extends AbstractSvelteMarkView<SvelteMarkViewComponent> {
|
|
36
|
+
render = (options: { context: Map<unknown, unknown> }) => {
|
|
37
|
+
const UserComponent = this.component
|
|
38
|
+
const props: SvelteMarkViewProps = this.context
|
|
39
|
+
const component = mount(UserComponent, {
|
|
40
|
+
target: this.dom,
|
|
41
|
+
context: options.context,
|
|
42
|
+
props,
|
|
43
|
+
})
|
|
44
|
+
flushSync()
|
|
45
|
+
return () => unmount(component)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export function defineSvelteMarkViewFactory(
|
|
53
|
+
renderSvelteRenderer: SvelteRendererResult['renderSvelteRenderer'],
|
|
54
|
+
removeSvelteRenderer: SvelteRendererResult['removeSvelteRenderer'],
|
|
55
|
+
context: Map<any, any>,
|
|
56
|
+
): Extension {
|
|
57
|
+
const factory = buildSvelteMarkViewCreator(renderSvelteRenderer, removeSvelteRenderer, ProseKitSvelteMarkView, context)
|
|
58
|
+
return defineMarkViewFactory<SvelteMarkViewOptions>({
|
|
59
|
+
group: 'svelte',
|
|
60
|
+
factory,
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
33
64
|
/**
|
|
34
65
|
* Defines a mark view using a Svelte component.
|
|
35
66
|
*
|
|
@@ -43,40 +74,9 @@ export function defineSvelteMarkView(
|
|
|
43
74
|
return definePlugin([])
|
|
44
75
|
}
|
|
45
76
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const args: SvelteMarkViewUserOptions = {
|
|
49
|
-
...userOptions,
|
|
50
|
-
component: wrapComponent(component),
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return defineMarkViewComponent<SvelteMarkViewUserOptions>({
|
|
54
|
-
group: 'svelte',
|
|
55
|
-
name,
|
|
56
|
-
args,
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function wrapComponent(
|
|
61
|
-
component: SvelteMarkViewComponent,
|
|
62
|
-
): Component<any, any> {
|
|
63
|
-
// `MarkViewWrapper` is an object during SSR
|
|
64
|
-
if (!MarkViewWrapper || typeof MarkViewWrapper !== 'function') {
|
|
65
|
-
return component
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const MarkViewPropsWrapper: Component = (internals, props) => {
|
|
69
|
-
return MarkViewWrapper(internals, { ...props, component })
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return MarkViewPropsWrapper
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function defineSvelteMarkViewFactory(
|
|
76
|
-
factory: (options: SvelteMarkViewUserOptions) => MarkViewConstructor,
|
|
77
|
-
): Extension {
|
|
78
|
-
return defineMarkViewFactory<SvelteMarkViewUserOptions>({
|
|
77
|
+
return defineMarkViewComponent<SvelteMarkViewOptions>({
|
|
79
78
|
group: 'svelte',
|
|
80
|
-
|
|
79
|
+
name: options.name,
|
|
80
|
+
args: options,
|
|
81
81
|
})
|
|
82
82
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { defineNodeViewComponent, defineNodeViewFactory, definePlugin, type Extension } from '@prosekit/core'
|
|
2
|
-
import type { NodeViewConstructor } from '@prosekit/pm/view'
|
|
3
2
|
import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core'
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import {
|
|
4
|
+
AbstractSvelteNodeView,
|
|
5
|
+
buildSvelteNodeViewCreator,
|
|
6
|
+
type NodeViewContext,
|
|
7
|
+
type SvelteRendererResult,
|
|
8
|
+
} from '@prosemirror-adapter/svelte'
|
|
9
|
+
import { flushSync, mount, unmount, type Component } from 'svelte'
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* @public
|
|
@@ -30,6 +32,35 @@ export interface SvelteNodeViewOptions extends CoreNodeViewUserOptions<SvelteNod
|
|
|
30
32
|
|
|
31
33
|
const isServer = typeof window === 'undefined'
|
|
32
34
|
|
|
35
|
+
class ProseKitSvelteNodeView extends AbstractSvelteNodeView<SvelteNodeViewComponent> {
|
|
36
|
+
render = (options: { context: Map<unknown, unknown> }) => {
|
|
37
|
+
const UserComponent = this.component
|
|
38
|
+
const props: SvelteNodeViewProps = this.context
|
|
39
|
+
const component = mount(UserComponent, {
|
|
40
|
+
target: this.dom,
|
|
41
|
+
context: options.context,
|
|
42
|
+
props,
|
|
43
|
+
})
|
|
44
|
+
flushSync()
|
|
45
|
+
return () => unmount(component)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export function defineSvelteNodeViewFactory(
|
|
53
|
+
renderSvelteRenderer: SvelteRendererResult['renderSvelteRenderer'],
|
|
54
|
+
removeSvelteRenderer: SvelteRendererResult['removeSvelteRenderer'],
|
|
55
|
+
context: Map<any, any>,
|
|
56
|
+
): Extension {
|
|
57
|
+
const factory = buildSvelteNodeViewCreator(renderSvelteRenderer, removeSvelteRenderer, ProseKitSvelteNodeView, context)
|
|
58
|
+
return defineNodeViewFactory<SvelteNodeViewOptions>({
|
|
59
|
+
group: 'svelte',
|
|
60
|
+
factory,
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
33
64
|
/**
|
|
34
65
|
* Defines a node view using a Svelte component.
|
|
35
66
|
*
|
|
@@ -43,40 +74,9 @@ export function defineSvelteNodeView(
|
|
|
43
74
|
return definePlugin([])
|
|
44
75
|
}
|
|
45
76
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const args: SvelteNodeViewUserOptions = {
|
|
49
|
-
...userOptions,
|
|
50
|
-
component: wrapComponent(component),
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return defineNodeViewComponent<SvelteNodeViewUserOptions>({
|
|
54
|
-
group: 'svelte',
|
|
55
|
-
name,
|
|
56
|
-
args,
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function wrapComponent(
|
|
61
|
-
component: SvelteNodeViewComponent,
|
|
62
|
-
): Component<any, any> {
|
|
63
|
-
// `NodeViewWrapper` is an object during SSR
|
|
64
|
-
if (!NodeViewWrapper || typeof NodeViewWrapper !== 'function') {
|
|
65
|
-
return component
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const NodeViewPropsWrapper: Component = (internals, props) => {
|
|
69
|
-
return NodeViewWrapper(internals, { ...props, component })
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return NodeViewPropsWrapper
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function defineSvelteNodeViewFactory(
|
|
76
|
-
factory: (options: SvelteNodeViewUserOptions) => NodeViewConstructor,
|
|
77
|
-
): Extension {
|
|
78
|
-
return defineNodeViewFactory<SvelteNodeViewUserOptions>({
|
|
77
|
+
return defineNodeViewComponent<SvelteNodeViewOptions>({
|
|
79
78
|
group: 'svelte',
|
|
80
|
-
|
|
79
|
+
name: options.name,
|
|
80
|
+
args: options,
|
|
81
81
|
})
|
|
82
82
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/mark-view-consumer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIvC;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAW,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useMarkViewFactory, type MarkViewFactory } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import { readable } from 'svelte/store'
|
|
4
|
-
import { defineSvelteMarkViewFactory } from '../../extensions/svelte-mark-view.js'
|
|
5
|
-
import { useExtension } from '../../hooks/use-extension.js'
|
|
6
|
-
|
|
7
|
-
const markViewFactory: MarkViewFactory = useMarkViewFactory()
|
|
8
|
-
const extension = defineSvelteMarkViewFactory(markViewFactory)
|
|
9
|
-
useExtension(readable(extension))
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<slot />
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/mark-view-wrapper/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAW,SAAS,CAAC,oBAAoB,CAAC,CAAA"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useMarkViewContext } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import type { SvelteMarkViewProps } from '../../extensions/svelte-mark-view.js'
|
|
4
|
-
import type { MarkViewWrapperProps } from './props.js'
|
|
5
|
-
|
|
6
|
-
const { component: MarkViewComponent }: MarkViewWrapperProps = $props()
|
|
7
|
-
|
|
8
|
-
const markViewProps: SvelteMarkViewProps = {
|
|
9
|
-
contentRef: useMarkViewContext('contentRef'),
|
|
10
|
-
view: useMarkViewContext('view'),
|
|
11
|
-
mark: useMarkViewContext('mark'),
|
|
12
|
-
}
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
{#if MarkViewComponent}
|
|
16
|
-
<MarkViewComponent {...markViewProps} />
|
|
17
|
-
{/if}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../../src/components/mark-view-wrapper/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE/E,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAA;CAC3C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/node-view-consumer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIvC;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAW,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useNodeViewFactory, type NodeViewFactory } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import { readable } from 'svelte/store'
|
|
4
|
-
import { defineSvelteNodeViewFactory } from '../../extensions/svelte-node-view.js'
|
|
5
|
-
import { useExtension } from '../../hooks/use-extension.js'
|
|
6
|
-
|
|
7
|
-
const nodeViewFactory: NodeViewFactory = useNodeViewFactory()
|
|
8
|
-
const extension = defineSvelteNodeViewFactory(nodeViewFactory)
|
|
9
|
-
useExtension(readable(extension))
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<slot />
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/node-view-wrapper/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAW,SAAS,CAAC,oBAAoB,CAAC,CAAA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useNodeViewContext } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import type { SvelteNodeViewProps } from '../../extensions/svelte-node-view.js'
|
|
4
|
-
import type { NodeViewWrapperProps } from './props.js'
|
|
5
|
-
|
|
6
|
-
const { component: NodeViewComponent }: NodeViewWrapperProps = $props()
|
|
7
|
-
|
|
8
|
-
const nodeViewProps: SvelteNodeViewProps = {
|
|
9
|
-
contentRef: useNodeViewContext('contentRef'),
|
|
10
|
-
view: useNodeViewContext('view'),
|
|
11
|
-
getPos: useNodeViewContext('getPos'),
|
|
12
|
-
setAttrs: useNodeViewContext('setAttrs'),
|
|
13
|
-
node: useNodeViewContext('node'),
|
|
14
|
-
selected: useNodeViewContext('selected'),
|
|
15
|
-
decorations: useNodeViewContext('decorations'),
|
|
16
|
-
innerDecorations: useNodeViewContext('innerDecorations'),
|
|
17
|
-
}
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
{#if NodeViewComponent}
|
|
21
|
-
<NodeViewComponent {...nodeViewProps} />
|
|
22
|
-
{/if}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../../src/components/node-view-wrapper/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE/E,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAA;CAC3C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useMarkViewFactory, type MarkViewFactory } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import { readable } from 'svelte/store'
|
|
4
|
-
import { defineSvelteMarkViewFactory } from '../../extensions/svelte-mark-view.ts'
|
|
5
|
-
import { useExtension } from '../../hooks/use-extension.ts'
|
|
6
|
-
|
|
7
|
-
const markViewFactory: MarkViewFactory = useMarkViewFactory()
|
|
8
|
-
const extension = defineSvelteMarkViewFactory(markViewFactory)
|
|
9
|
-
useExtension(readable(extension))
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<slot />
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useMarkViewContext } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import type { SvelteMarkViewProps } from '../../extensions/svelte-mark-view.ts'
|
|
4
|
-
import type { MarkViewWrapperProps } from './props.ts'
|
|
5
|
-
|
|
6
|
-
const { component: MarkViewComponent }: MarkViewWrapperProps = $props()
|
|
7
|
-
|
|
8
|
-
const markViewProps: SvelteMarkViewProps = {
|
|
9
|
-
contentRef: useMarkViewContext('contentRef'),
|
|
10
|
-
view: useMarkViewContext('view'),
|
|
11
|
-
mark: useMarkViewContext('mark'),
|
|
12
|
-
}
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
{#if MarkViewComponent}
|
|
16
|
-
<MarkViewComponent {...markViewProps} />
|
|
17
|
-
{/if}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useNodeViewFactory, type NodeViewFactory } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import { readable } from 'svelte/store'
|
|
4
|
-
import { defineSvelteNodeViewFactory } from '../../extensions/svelte-node-view.ts'
|
|
5
|
-
import { useExtension } from '../../hooks/use-extension.ts'
|
|
6
|
-
|
|
7
|
-
const nodeViewFactory: NodeViewFactory = useNodeViewFactory()
|
|
8
|
-
const extension = defineSvelteNodeViewFactory(nodeViewFactory)
|
|
9
|
-
useExtension(readable(extension))
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<slot />
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { useNodeViewContext } from '@prosemirror-adapter/svelte'
|
|
3
|
-
import type { SvelteNodeViewProps } from '../../extensions/svelte-node-view.ts'
|
|
4
|
-
import type { NodeViewWrapperProps } from './props.ts'
|
|
5
|
-
|
|
6
|
-
const { component: NodeViewComponent }: NodeViewWrapperProps = $props()
|
|
7
|
-
|
|
8
|
-
const nodeViewProps: SvelteNodeViewProps = {
|
|
9
|
-
contentRef: useNodeViewContext('contentRef'),
|
|
10
|
-
view: useNodeViewContext('view'),
|
|
11
|
-
getPos: useNodeViewContext('getPos'),
|
|
12
|
-
setAttrs: useNodeViewContext('setAttrs'),
|
|
13
|
-
node: useNodeViewContext('node'),
|
|
14
|
-
selected: useNodeViewContext('selected'),
|
|
15
|
-
decorations: useNodeViewContext('decorations'),
|
|
16
|
-
innerDecorations: useNodeViewContext('innerDecorations'),
|
|
17
|
-
}
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
{#if NodeViewComponent}
|
|
21
|
-
<NodeViewComponent {...nodeViewProps} />
|
|
22
|
-
{/if}
|