@prosekit/react 0.3.10 → 0.3.11
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/_tsup-dts-rollup.d.ts +4 -58
- package/dist/prosekit-react.d.ts +3 -3
- package/dist/prosekit-react.js +48 -184
- package/package.json +4 -4
@@ -13,10 +13,6 @@ import { BlockDragHandleProps } from '@prosekit/web/block-handle';
|
|
13
13
|
import { BlockPopoverElement } from '@prosekit/web/block-handle';
|
14
14
|
import { BlockPopoverProps } from '@prosekit/web/block-handle';
|
15
15
|
import { ComponentType } from 'react';
|
16
|
-
import { Context } from 'react';
|
17
|
-
import { CoreNodeView } from '@prosemirror-adapter/core';
|
18
|
-
import type { CoreNodeViewSpec } from '@prosemirror-adapter/core';
|
19
|
-
import type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core';
|
20
16
|
import type { Decoration } from '@prosekit/pm/view';
|
21
17
|
import type { DecorationSource } from '@prosekit/pm/view';
|
22
18
|
import { config as default_alias_1 } from '@prosekit/dev/config-vitest';
|
@@ -24,15 +20,12 @@ import { Editor } from '@prosekit/core';
|
|
24
20
|
import type { EditorState } from '@prosekit/pm/state';
|
25
21
|
import type { EditorView } from '@prosekit/pm/view';
|
26
22
|
import { Extension } from '@prosekit/core';
|
27
|
-
import { ExtensionTyping } from '@prosekit/core';
|
28
23
|
import { FC } from 'react';
|
29
24
|
import { ForwardRefExoticComponent } from 'react';
|
30
25
|
import { HTMLAttributes } from 'react';
|
31
26
|
import { InlinePopoverElement } from '@prosekit/web/inline-popover';
|
32
27
|
import { InlinePopoverProps } from '@prosekit/web/inline-popover';
|
33
28
|
import { Keymap } from '@prosekit/core';
|
34
|
-
import type { Node as Node_2 } from '@prosekit/pm/model';
|
35
|
-
import type { NodeViewConstructor } from '@prosekit/pm/view';
|
36
29
|
import { Options } from 'tsup';
|
37
30
|
import { PopoverContentElement } from '@prosekit/web/popover';
|
38
31
|
import { PopoverContentProps } from '@prosekit/web/popover';
|
@@ -44,7 +37,6 @@ import { Priority } from '@prosekit/core';
|
|
44
37
|
import type { ProseMirrorNode } from '@prosekit/pm/model';
|
45
38
|
import { Provider } from 'react';
|
46
39
|
import { ReactNode } from 'react';
|
47
|
-
import { ReactPortal } from 'react';
|
48
40
|
import { RefAttributes } from 'react';
|
49
41
|
import { ResizableHandleElement } from '@prosekit/web/resizable';
|
50
42
|
import { ResizableHandleProps } from '@prosekit/web/resizable';
|
@@ -83,12 +75,6 @@ export { BlockPopover as BlockPopover_alias_1 }
|
|
83
75
|
|
84
76
|
export declare function createComponent<Props extends object, CustomElement extends HTMLElement>(tagName: string, displayName: string, defaultProps: Props): ForwardRefExoticComponent<Partial<Props> & RefAttributes<CustomElement> & HTMLAttributes<CustomElement>>;
|
85
77
|
|
86
|
-
export declare const createNodeViewContext: Context<NodeViewFactory | null>;
|
87
|
-
|
88
|
-
declare type CreateReactNodeView = ReturnType<typeof useReactNodeViewCreator>;
|
89
|
-
export { CreateReactNodeView }
|
90
|
-
export { CreateReactNodeView as CreateReactNodeView_alias_1 }
|
91
|
-
|
92
78
|
export declare const default_alias: Options | Options[] | ((overrideOptions: Options) => Options | Options[] | Promise<Options | Options[]>);
|
93
79
|
|
94
80
|
export { default_alias_1 }
|
@@ -102,11 +88,6 @@ declare function defineReactNodeView(options: ReactNodeViewOptions): Extension;
|
|
102
88
|
export { defineReactNodeView }
|
103
89
|
export { defineReactNodeView as defineReactNodeView_alias_1 }
|
104
90
|
|
105
|
-
/**
|
106
|
-
* @internal
|
107
|
-
*/
|
108
|
-
export declare function defineReactNodeViewFactory(nodeViewFactory: NodeViewFactory): Extension<ExtensionTyping<any, any, any>>;
|
109
|
-
|
110
91
|
/**
|
111
92
|
* @internal
|
112
93
|
*/
|
@@ -116,8 +97,6 @@ declare const InlinePopover: ForwardRefExoticComponent<Partial<InlinePopoverProp
|
|
116
97
|
export { InlinePopover }
|
117
98
|
export { InlinePopover as InlinePopover_alias_1 }
|
118
99
|
|
119
|
-
export declare type NodeViewFactory = (options: ReactNodeViewUserOptions) => NodeViewConstructor;
|
120
|
-
|
121
100
|
declare const PopoverContent: ForwardRefExoticComponent<Partial<PopoverContentProps> & RefAttributes<PopoverContentElement> & HTMLAttributes<PopoverContentElement>>;
|
122
101
|
export { PopoverContent }
|
123
102
|
export { PopoverContent as PopoverContent_alias_1 }
|
@@ -155,13 +134,6 @@ declare interface ProseKitProps {
|
|
155
134
|
export { ProseKitProps }
|
156
135
|
export { ProseKitProps as ProseKitProps_alias_1 }
|
157
136
|
|
158
|
-
export declare class ReactNodeView extends CoreNodeView<ReactNodeViewComponent> implements ReactRenderer<ReactNodeViewProps> {
|
159
|
-
key: string;
|
160
|
-
context: ReactNodeViewProps;
|
161
|
-
updateContext: () => void;
|
162
|
-
render: () => ReactPortal;
|
163
|
-
}
|
164
|
-
|
165
137
|
/**
|
166
138
|
* @public
|
167
139
|
*/
|
@@ -195,7 +167,7 @@ declare interface ReactNodeViewProps {
|
|
195
167
|
view: EditorView;
|
196
168
|
getPos: () => number | undefined;
|
197
169
|
setAttrs: (attrs: Attrs) => void;
|
198
|
-
node:
|
170
|
+
node: ProseMirrorNode;
|
199
171
|
selected: boolean;
|
200
172
|
decorations: readonly Decoration[];
|
201
173
|
innerDecorations: DecorationSource;
|
@@ -203,31 +175,11 @@ declare interface ReactNodeViewProps {
|
|
203
175
|
export { ReactNodeViewProps }
|
204
176
|
export { ReactNodeViewProps as ReactNodeViewProps_alias_1 }
|
205
177
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
export declare interface ReactRenderer<Context> {
|
211
|
-
key: string;
|
212
|
-
context: Context;
|
213
|
-
render: () => ReactPortal;
|
214
|
-
updateContext: () => void;
|
215
|
-
}
|
216
|
-
|
217
|
-
export declare interface ReactRendererResult {
|
218
|
-
readonly portals: Record<string, ReactPortal>;
|
219
|
-
readonly renderReactRenderer: (nodeView: ReactRenderer<unknown>, update?: boolean) => void;
|
220
|
-
readonly removeReactRenderer: (nodeView: ReactRenderer<unknown>) => void;
|
221
|
-
}
|
222
|
-
|
178
|
+
/**
|
179
|
+
* @internal
|
180
|
+
*/
|
223
181
|
export declare const ReactViewsConsumer: FC;
|
224
182
|
|
225
|
-
declare const ReactViewsProvider: FC<{
|
226
|
-
children: ReactNode;
|
227
|
-
}>;
|
228
|
-
export { ReactViewsProvider }
|
229
|
-
export { ReactViewsProvider as ReactViewsProvider_alias_1 }
|
230
|
-
|
231
183
|
declare const ResizableHandle: ForwardRefExoticComponent<Partial<ResizableHandleProps> & RefAttributes<ResizableHandleElement> & HTMLAttributes<ResizableHandleElement>>;
|
232
184
|
export { ResizableHandle }
|
233
185
|
export { ResizableHandle as ResizableHandle_alias_1 }
|
@@ -314,17 +266,11 @@ declare function useKeymap(keymap: Keymap, options?: UseExtensionOptions): void;
|
|
314
266
|
export { useKeymap }
|
315
267
|
export { useKeymap as useKeymap_alias_1 }
|
316
268
|
|
317
|
-
export declare function useNodeViewFactory(): NodeViewFactory;
|
318
|
-
|
319
269
|
/**
|
320
270
|
* @internal
|
321
271
|
*/
|
322
272
|
export declare function usePriorityExtension<T extends Extension = Extension>(extension: T | null, priority?: Priority | null): T | null;
|
323
273
|
|
324
|
-
export declare function useReactNodeViewCreator(renderReactRenderer: ReactRendererResult['renderReactRenderer'], removeReactRenderer: ReactRendererResult['removeReactRenderer']): (options: ReactNodeViewUserOptions) => NodeViewConstructor;
|
325
|
-
|
326
|
-
export declare function useReactRenderer(): ReactRendererResult;
|
327
|
-
|
328
274
|
/**
|
329
275
|
* Calls the given handler whenever the editor state changes.
|
330
276
|
*
|
package/dist/prosekit-react.d.ts
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
export { ProseKit } from './_tsup-dts-rollup';
|
2
2
|
export { ProseKitProps } from './_tsup-dts-rollup';
|
3
3
|
export { defineReactNodeView } from './_tsup-dts-rollup';
|
4
|
+
export { ReactNodeViewComponent } from './_tsup-dts-rollup';
|
4
5
|
export { ReactNodeViewOptions } from './_tsup-dts-rollup';
|
6
|
+
export { ReactNodeViewProps } 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
13
|
export { PropsWithClassName } from './_tsup-dts-rollup';
|
12
|
-
export { ReactNodeViewComponent } from './_tsup-dts-rollup';
|
13
|
-
export { ReactNodeViewProps } from './_tsup-dts-rollup';
|
package/dist/prosekit-react.js
CHANGED
@@ -5,29 +5,19 @@ import {
|
|
5
5
|
|
6
6
|
// src/components/prosekit.ts
|
7
7
|
import "@prosekit/core";
|
8
|
-
import {
|
9
|
-
|
10
|
-
// src/views/react-views-consumer.ts
|
11
|
-
import { useMemo as useMemo2 } from "react";
|
8
|
+
import { ProsemirrorAdapterProvider } from "@prosemirror-adapter/react";
|
9
|
+
import { createElement as createElement2 } from "react";
|
12
10
|
|
13
11
|
// src/extensions/react-node-view.ts
|
14
12
|
import {
|
13
|
+
defineNodeViewComponent,
|
15
14
|
defineNodeViewFactory
|
16
15
|
} from "@prosekit/core";
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
args: userOptions
|
23
|
-
});
|
24
|
-
}
|
25
|
-
function defineReactNodeViewFactory(nodeViewFactory) {
|
26
|
-
return defineNodeViewFactory({
|
27
|
-
group: "react",
|
28
|
-
factory: nodeViewFactory
|
29
|
-
});
|
30
|
-
}
|
16
|
+
import {
|
17
|
+
useNodeViewContext,
|
18
|
+
useNodeViewFactory
|
19
|
+
} from "@prosemirror-adapter/react";
|
20
|
+
import { createElement, useMemo as useMemo2 } from "react";
|
31
21
|
|
32
22
|
// src/hooks/use-extension.ts
|
33
23
|
import "@prosekit/core";
|
@@ -60,18 +50,13 @@ function useExtension(extension, options) {
|
|
60
50
|
);
|
61
51
|
}
|
62
52
|
|
63
|
-
// src/
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if (!nodeViewFactory)
|
70
|
-
throw new ProseKitError("Cannot find node view factory context.");
|
71
|
-
return nodeViewFactory;
|
53
|
+
// src/extensions/react-node-view.ts
|
54
|
+
function withNodeViewProps(component) {
|
55
|
+
return function() {
|
56
|
+
let props = useNodeViewContext();
|
57
|
+
return createElement(component, props);
|
58
|
+
};
|
72
59
|
}
|
73
|
-
|
74
|
-
// src/views/react-views-consumer.ts
|
75
60
|
var ReactViewsConsumer = () => {
|
76
61
|
let nodeViewFactory = useNodeViewFactory(), extension = useMemo2(
|
77
62
|
() => defineReactNodeViewFactory(nodeViewFactory),
|
@@ -79,177 +64,67 @@ var ReactViewsConsumer = () => {
|
|
79
64
|
);
|
80
65
|
return useExtension(extension), null;
|
81
66
|
};
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
// src/views/node-view/use-react-node-view-creator.ts
|
87
|
-
import { useCallback } from "react";
|
88
|
-
|
89
|
-
// src/views/node-view/react-node-view.ts
|
90
|
-
import { _getId } from "@prosekit/core";
|
91
|
-
import { CoreNodeView } from "@prosemirror-adapter/core";
|
92
|
-
import { createElement } from "react";
|
93
|
-
import { createPortal } from "react-dom";
|
94
|
-
var ReactNodeView = class extends CoreNodeView {
|
95
|
-
constructor() {
|
96
|
-
super(...arguments);
|
97
|
-
this.key = _getId();
|
98
|
-
this.context = {
|
99
|
-
contentRef: (element) => {
|
100
|
-
element && this.contentDOM && element.firstChild !== this.contentDOM && element.appendChild(this.contentDOM);
|
101
|
-
},
|
102
|
-
view: this.view,
|
103
|
-
getPos: this.getPos,
|
104
|
-
setAttrs: this.setAttrs,
|
105
|
-
node: this.node,
|
106
|
-
selected: this.selected,
|
107
|
-
decorations: this.decorations,
|
108
|
-
innerDecorations: this.innerDecorations
|
109
|
-
};
|
110
|
-
this.updateContext = () => {
|
111
|
-
Object.assign(this.context, {
|
112
|
-
node: this.node,
|
113
|
-
selected: this.selected,
|
114
|
-
decorations: this.decorations,
|
115
|
-
innerDecorations: this.innerDecorations
|
116
|
-
});
|
117
|
-
};
|
118
|
-
this.render = () => {
|
119
|
-
let UserComponent = this.component;
|
120
|
-
return createPortal(
|
121
|
-
createElement(UserComponent, this.context),
|
122
|
-
this.dom,
|
123
|
-
this.key
|
124
|
-
);
|
125
|
-
};
|
126
|
-
}
|
127
|
-
};
|
128
|
-
|
129
|
-
// src/views/node-view/use-react-node-view-creator.ts
|
130
|
-
function useReactNodeViewCreator(renderReactRenderer, removeReactRenderer) {
|
131
|
-
return useCallback(
|
132
|
-
(options) => (node, view, getPos, decorations, innerDecorations) => {
|
133
|
-
let nodeView = new ReactNodeView({
|
134
|
-
node,
|
135
|
-
view,
|
136
|
-
getPos,
|
137
|
-
decorations,
|
138
|
-
innerDecorations,
|
139
|
-
options: {
|
140
|
-
...options,
|
141
|
-
onUpdate() {
|
142
|
-
var _a;
|
143
|
-
(_a = options.onUpdate) == null || _a.call(options), renderReactRenderer(nodeView);
|
144
|
-
},
|
145
|
-
selectNode() {
|
146
|
-
var _a;
|
147
|
-
(_a = options.selectNode) == null || _a.call(options), renderReactRenderer(nodeView);
|
148
|
-
},
|
149
|
-
deselectNode() {
|
150
|
-
var _a;
|
151
|
-
(_a = options.deselectNode) == null || _a.call(options), renderReactRenderer(nodeView);
|
152
|
-
},
|
153
|
-
destroy() {
|
154
|
-
var _a;
|
155
|
-
(_a = options.destroy) == null || _a.call(options), removeReactRenderer(nodeView);
|
156
|
-
}
|
157
|
-
}
|
158
|
-
});
|
159
|
-
return renderReactRenderer(nodeView, !1), nodeView;
|
160
|
-
},
|
161
|
-
[removeReactRenderer, renderReactRenderer]
|
162
|
-
);
|
163
|
-
}
|
164
|
-
|
165
|
-
// src/views/react-renderer.ts
|
166
|
-
import { useCallback as useCallback2, useEffect as useEffect2, useRef, useState } from "react";
|
167
|
-
import { flushSync } from "react-dom";
|
168
|
-
function useReactRenderer() {
|
169
|
-
let [portals, setPortals] = useState({}), mountedRef = useRef(!1);
|
170
|
-
useEffect2(() => (requestAnimationFrame(() => {
|
171
|
-
mountedRef.current = !0;
|
172
|
-
}), () => {
|
173
|
-
mountedRef.current = !1;
|
174
|
-
}), []);
|
175
|
-
let maybeFlushSync = useCallback2((fn) => {
|
176
|
-
mountedRef.current ? flushSync(fn) : fn();
|
177
|
-
}, []), renderReactRenderer = useCallback2(
|
178
|
-
(nodeView, update = !0) => {
|
179
|
-
maybeFlushSync(() => {
|
180
|
-
update && nodeView.updateContext(), setPortals((prev) => ({
|
181
|
-
...prev,
|
182
|
-
[nodeView.key]: nodeView.render()
|
183
|
-
}));
|
184
|
-
});
|
185
|
-
},
|
186
|
-
[maybeFlushSync]
|
187
|
-
), removeReactRenderer = useCallback2(
|
188
|
-
(nodeView) => {
|
189
|
-
maybeFlushSync(() => {
|
190
|
-
setPortals((prev) => {
|
191
|
-
let next = { ...prev };
|
192
|
-
return delete next[nodeView.key], next;
|
193
|
-
});
|
194
|
-
});
|
195
|
-
},
|
196
|
-
[maybeFlushSync]
|
197
|
-
);
|
198
|
-
return {
|
199
|
-
portals,
|
200
|
-
renderReactRenderer,
|
201
|
-
removeReactRenderer
|
67
|
+
function defineReactNodeView(options) {
|
68
|
+
let { name, component, ...userOptions } = options, args = {
|
69
|
+
...userOptions,
|
70
|
+
component: withNodeViewProps(component)
|
202
71
|
};
|
72
|
+
return defineNodeViewComponent({
|
73
|
+
group: "react",
|
74
|
+
name,
|
75
|
+
args
|
76
|
+
});
|
77
|
+
}
|
78
|
+
function defineReactNodeViewFactory(factory) {
|
79
|
+
return defineNodeViewFactory({
|
80
|
+
group: "react",
|
81
|
+
factory
|
82
|
+
});
|
203
83
|
}
|
204
|
-
|
205
|
-
// src/views/react-views-provider.ts
|
206
|
-
var ReactViewsProvider = ({
|
207
|
-
children
|
208
|
-
}) => {
|
209
|
-
let { renderReactRenderer, removeReactRenderer, portals } = useReactRenderer(), createReactNodeView = useReactNodeViewCreator(
|
210
|
-
renderReactRenderer,
|
211
|
-
removeReactRenderer
|
212
|
-
), memoizedPortals = useMemo3(() => Object.values(portals), [portals]);
|
213
|
-
return createElement2(
|
214
|
-
createNodeViewContext.Provider,
|
215
|
-
{ value: createReactNodeView },
|
216
|
-
children,
|
217
|
-
memoizedPortals
|
218
|
-
);
|
219
|
-
};
|
220
84
|
|
221
85
|
// src/components/prosekit.ts
|
222
86
|
var ProseKit = (props) => {
|
223
87
|
let { editor, children } = props;
|
224
|
-
return
|
225
|
-
|
88
|
+
return createElement2(
|
89
|
+
ProsemirrorAdapterProvider,
|
226
90
|
null,
|
227
|
-
|
91
|
+
createElement2(
|
228
92
|
EditorContextProvider,
|
229
93
|
{ value: editor },
|
230
|
-
|
94
|
+
createElement2(ReactViewsConsumer),
|
231
95
|
children
|
232
96
|
)
|
233
97
|
);
|
234
98
|
};
|
235
99
|
|
100
|
+
// src/hooks/use-doc-change.ts
|
101
|
+
import { defineDocChangeHandler } from "@prosekit/core";
|
102
|
+
import { useMemo as useMemo3 } from "react";
|
103
|
+
function useDocChange(handler, options) {
|
104
|
+
let extension = useMemo3(
|
105
|
+
() => defineDocChangeHandler((view) => handler(view.state.doc)),
|
106
|
+
[handler]
|
107
|
+
);
|
108
|
+
return useExtension(extension, options);
|
109
|
+
}
|
110
|
+
|
236
111
|
// src/hooks/use-editor.ts
|
237
112
|
import {
|
238
|
-
ProseKitError
|
113
|
+
ProseKitError,
|
239
114
|
defineMountHandler,
|
240
115
|
defineUpdateHandler,
|
241
116
|
union
|
242
117
|
} from "@prosekit/core";
|
243
|
-
import { useEffect as
|
118
|
+
import { useEffect as useEffect2, useReducer } from "react";
|
244
119
|
function useEditor(options) {
|
245
120
|
var _a;
|
246
121
|
let update = (_a = options == null ? void 0 : options.update) != null ? _a : !1, editor = useEditorContext();
|
247
122
|
if (!editor)
|
248
|
-
throw new
|
123
|
+
throw new ProseKitError(
|
249
124
|
"useEditor must be used within the ProseKit component"
|
250
125
|
);
|
251
126
|
let forceUpdate = useForceUpdate();
|
252
|
-
return
|
127
|
+
return useEffect2(() => {
|
253
128
|
if (update) {
|
254
129
|
let extension = union([
|
255
130
|
defineMountHandler(forceUpdate),
|
@@ -282,17 +157,6 @@ function useStateUpdate(handler, options) {
|
|
282
157
|
);
|
283
158
|
return useExtension(extension, options);
|
284
159
|
}
|
285
|
-
|
286
|
-
// src/hooks/use-doc-change.ts
|
287
|
-
import { defineDocChangeHandler } from "@prosekit/core";
|
288
|
-
import { useMemo as useMemo6 } from "react";
|
289
|
-
function useDocChange(handler, options) {
|
290
|
-
let extension = useMemo6(
|
291
|
-
() => defineDocChangeHandler((view) => handler(view.state.doc)),
|
292
|
-
[handler]
|
293
|
-
);
|
294
|
-
return useExtension(extension, options);
|
295
|
-
}
|
296
160
|
export {
|
297
161
|
ProseKit,
|
298
162
|
defineReactNodeView,
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@prosekit/react",
|
3
3
|
"type": "module",
|
4
|
-
"version": "0.3.
|
4
|
+
"version": "0.3.11",
|
5
5
|
"private": false,
|
6
6
|
"author": {
|
7
7
|
"name": "ocavue",
|
@@ -65,11 +65,11 @@
|
|
65
65
|
"dist"
|
66
66
|
],
|
67
67
|
"dependencies": {
|
68
|
-
"@prosemirror-adapter/
|
68
|
+
"@prosemirror-adapter/react": "^0.2.6",
|
69
69
|
"react-merge-refs": "^2.1.1",
|
70
|
-
"@prosekit/core": "^0.7.0",
|
71
70
|
"@prosekit/pm": "^0.1.5",
|
72
|
-
"@prosekit/
|
71
|
+
"@prosekit/core": "^0.7.1",
|
72
|
+
"@prosekit/web": "^0.2.3"
|
73
73
|
},
|
74
74
|
"peerDependencies": {
|
75
75
|
"react": ">= 18.2.0",
|