@handlewithcare/react-prosemirror 2.4.10 → 2.4.12
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/README.md +16 -0
- package/dist/cjs/components/Editor.js +28 -0
- package/dist/cjs/components/NodeViews.js +73 -0
- package/dist/cjs/{contexts/__tests__/DeferredLayoutEffects.test.js → components/__tests__/LayoutGroup.test.js} +2 -2
- package/dist/cjs/components/__tests__/ProseMirror.test.js +136 -263
- package/dist/cjs/contexts/NodeViewsContext.js +10 -0
- package/dist/cjs/hooks/__tests__/useEditorViewLayoutEffect.test.js +27 -28
- package/dist/cjs/hooks/__tests__/useNodeViews.test.js +159 -0
- package/dist/cjs/hooks/useEditor.js +2 -4
- package/dist/cjs/hooks/useEditorView.js +100 -0
- package/dist/cjs/hooks/useNodePos.js +69 -0
- package/dist/cjs/hooks/useNodeViews.js +100 -0
- package/dist/cjs/nodeViews/createReactNodeViewConstructor.js +244 -0
- package/dist/cjs/nodeViews/phrasingContentTags.js +57 -0
- package/dist/cjs/plugins/__tests__/react.test.js +139 -0
- package/dist/cjs/plugins/react.js +71 -0
- package/dist/esm/components/Editor.js +15 -0
- package/dist/esm/components/NodeViews.js +26 -0
- package/dist/esm/{contexts/__tests__/DeferredLayoutEffects.test.js → components/__tests__/LayoutGroup.test.js} +2 -2
- package/dist/esm/components/__tests__/ProseMirror.test.js +135 -267
- package/dist/esm/contexts/NodeViewsContext.js +9 -0
- package/dist/esm/hooks/__tests__/useEditorViewLayoutEffect.test.js +27 -28
- package/dist/esm/hooks/__tests__/useNodeViews.test.js +116 -0
- package/dist/esm/hooks/useEditor.js +2 -4
- package/dist/esm/hooks/useEditorView.js +99 -0
- package/dist/esm/hooks/useNodePos.js +16 -0
- package/dist/esm/hooks/useNodeViews.js +53 -0
- package/dist/esm/nodeViews/createReactNodeViewConstructor.js +214 -0
- package/dist/esm/nodeViews/phrasingContentTags.js +49 -0
- package/dist/esm/plugins/__tests__/react.test.js +135 -0
- package/dist/esm/plugins/react.js +64 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/components/Editor.d.ts +7 -0
- package/dist/types/components/NodeViews.d.ts +6 -0
- package/dist/types/components/__tests__/LayoutGroup.test.d.ts +1 -0
- package/dist/types/contexts/NodeViewsContext.d.ts +19 -0
- package/dist/types/decorations/ReactWidgetType.d.ts +1 -0
- package/dist/types/hooks/__tests__/useNodeViews.test.d.ts +1 -0
- package/dist/types/hooks/useEditorView.d.ts +23 -0
- package/dist/types/hooks/useNodePos.d.ts +9 -0
- package/dist/types/hooks/useNodeViews.d.ts +5 -0
- package/dist/types/nodeViews/createReactNodeViewConstructor.d.ts +48 -0
- package/dist/types/nodeViews/phrasingContentTags.d.ts +1 -0
- package/dist/types/plugins/__tests__/react.test.d.ts +1 -0
- package/dist/types/plugins/react.d.ts +21 -0
- package/dist/types/props.d.ts +27 -27
- package/package.json +1 -1
- package/dist/cjs/components/__tests__/ProseMirror.composition.test.js +0 -398
- package/dist/cjs/components/__tests__/ProseMirror.domchange.test.js +0 -270
- package/dist/cjs/components/__tests__/ProseMirror.draw-decoration.test.js +0 -1010
- package/dist/cjs/components/__tests__/ProseMirror.draw.test.js +0 -337
- package/dist/cjs/components/__tests__/ProseMirror.node-view.test.js +0 -315
- package/dist/cjs/components/__tests__/ProseMirror.selection.test.js +0 -444
- package/dist/cjs/plugins/__tests__/reactKeys.test.js +0 -81
- package/dist/esm/components/__tests__/ProseMirror.composition.test.js +0 -395
- package/dist/esm/components/__tests__/ProseMirror.domchange.test.js +0 -266
- package/dist/esm/components/__tests__/ProseMirror.draw-decoration.test.js +0 -967
- package/dist/esm/components/__tests__/ProseMirror.draw.test.js +0 -294
- package/dist/esm/components/__tests__/ProseMirror.node-view.test.js +0 -272
- package/dist/esm/components/__tests__/ProseMirror.selection.test.js +0 -440
- package/dist/esm/plugins/__tests__/reactKeys.test.js +0 -77
|
@@ -6,7 +6,6 @@ const _react = require("@testing-library/react");
|
|
|
6
6
|
const _react1 = /*#__PURE__*/ _interopRequireDefault(require("react"));
|
|
7
7
|
const _layoutGroupJs = require("../../components/LayoutGroup.js");
|
|
8
8
|
const _editorContextJs = require("../../contexts/EditorContext.js");
|
|
9
|
-
const _editorStateContextJs = require("../../contexts/EditorStateContext.js");
|
|
10
9
|
const _useEditorEffectJs = require("../useEditorEffect.js");
|
|
11
10
|
function _interopRequireDefault(obj) {
|
|
12
11
|
return obj && obj.__esModule ? obj : {
|
|
@@ -15,8 +14,10 @@ function _interopRequireDefault(obj) {
|
|
|
15
14
|
}
|
|
16
15
|
function TestComponent(param) {
|
|
17
16
|
let { effect , dependencies =[] } = param;
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
(0, _useEditorEffectJs.useEditorEffect)(effect, [
|
|
18
|
+
effect,
|
|
19
|
+
...dependencies
|
|
20
|
+
]);
|
|
20
21
|
return null;
|
|
21
22
|
}
|
|
22
23
|
describe("useEditorViewLayoutEffect", ()=>{
|
|
@@ -28,15 +29,14 @@ describe("useEditorViewLayoutEffect", ()=>{
|
|
|
28
29
|
const unregisterEventListener = ()=>{};
|
|
29
30
|
(0, _react.render)(/*#__PURE__*/ _react1.default.createElement(_layoutGroupJs.LayoutGroup, null, /*#__PURE__*/ _react1.default.createElement(_editorContextJs.EditorContext.Provider, {
|
|
30
31
|
value: {
|
|
31
|
-
|
|
32
|
+
editorView,
|
|
33
|
+
editorState,
|
|
32
34
|
registerEventListener,
|
|
33
35
|
unregisterEventListener
|
|
34
36
|
}
|
|
35
|
-
}, /*#__PURE__*/ _react1.default.createElement(_editorStateContextJs.EditorStateContext.Provider, {
|
|
36
|
-
value: editorState
|
|
37
37
|
}, /*#__PURE__*/ _react1.default.createElement(TestComponent, {
|
|
38
38
|
effect: effect
|
|
39
|
-
}))))
|
|
39
|
+
}))));
|
|
40
40
|
expect(effect).toHaveBeenCalled();
|
|
41
41
|
expect(effect).toHaveBeenCalledWith(editorView);
|
|
42
42
|
});
|
|
@@ -46,27 +46,28 @@ describe("useEditorViewLayoutEffect", ()=>{
|
|
|
46
46
|
const editorState = {};
|
|
47
47
|
const registerEventListener = ()=>{};
|
|
48
48
|
const unregisterEventListener = ()=>{};
|
|
49
|
-
const contextValue = {
|
|
50
|
-
view: editorView,
|
|
51
|
-
registerEventListener,
|
|
52
|
-
unregisterEventListener
|
|
53
|
-
};
|
|
54
49
|
const { rerender } = (0, _react.render)(/*#__PURE__*/ _react1.default.createElement(_layoutGroupJs.LayoutGroup, null, /*#__PURE__*/ _react1.default.createElement(_editorContextJs.EditorContext.Provider, {
|
|
55
|
-
value:
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
value: {
|
|
51
|
+
editorView,
|
|
52
|
+
editorState,
|
|
53
|
+
registerEventListener,
|
|
54
|
+
unregisterEventListener
|
|
55
|
+
}
|
|
58
56
|
}, /*#__PURE__*/ _react1.default.createElement(TestComponent, {
|
|
59
57
|
effect: effect,
|
|
60
58
|
dependencies: []
|
|
61
|
-
}))
|
|
59
|
+
}))));
|
|
62
60
|
rerender(/*#__PURE__*/ _react1.default.createElement(_layoutGroupJs.LayoutGroup, null, /*#__PURE__*/ _react1.default.createElement(_editorContextJs.EditorContext.Provider, {
|
|
63
|
-
value:
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
value: {
|
|
62
|
+
editorView,
|
|
63
|
+
editorState,
|
|
64
|
+
registerEventListener,
|
|
65
|
+
unregisterEventListener
|
|
66
|
+
}
|
|
66
67
|
}, /*#__PURE__*/ _react1.default.createElement(TestComponent, {
|
|
67
68
|
effect: effect,
|
|
68
69
|
dependencies: []
|
|
69
|
-
}))))
|
|
70
|
+
}))));
|
|
70
71
|
expect(effect).toHaveBeenCalledTimes(1);
|
|
71
72
|
});
|
|
72
73
|
it("should re-run the effect if dependencies change", ()=>{
|
|
@@ -77,32 +78,30 @@ describe("useEditorViewLayoutEffect", ()=>{
|
|
|
77
78
|
const unregisterEventListener = ()=>{};
|
|
78
79
|
const { rerender } = (0, _react.render)(/*#__PURE__*/ _react1.default.createElement(_layoutGroupJs.LayoutGroup, null, /*#__PURE__*/ _react1.default.createElement(_editorContextJs.EditorContext.Provider, {
|
|
79
80
|
value: {
|
|
80
|
-
|
|
81
|
+
editorView,
|
|
82
|
+
editorState,
|
|
81
83
|
registerEventListener,
|
|
82
84
|
unregisterEventListener
|
|
83
85
|
}
|
|
84
|
-
}, /*#__PURE__*/ _react1.default.createElement(_editorStateContextJs.EditorStateContext.Provider, {
|
|
85
|
-
value: editorState
|
|
86
86
|
}, /*#__PURE__*/ _react1.default.createElement(TestComponent, {
|
|
87
87
|
effect: effect,
|
|
88
88
|
dependencies: [
|
|
89
89
|
"one"
|
|
90
90
|
]
|
|
91
|
-
}))))
|
|
91
|
+
}))));
|
|
92
92
|
rerender(/*#__PURE__*/ _react1.default.createElement(_layoutGroupJs.LayoutGroup, null, /*#__PURE__*/ _react1.default.createElement(_editorContextJs.EditorContext.Provider, {
|
|
93
93
|
value: {
|
|
94
|
-
|
|
94
|
+
editorView,
|
|
95
|
+
editorState,
|
|
95
96
|
registerEventListener,
|
|
96
97
|
unregisterEventListener
|
|
97
98
|
}
|
|
98
|
-
}, /*#__PURE__*/ _react1.default.createElement(_editorStateContextJs.EditorStateContext.Provider, {
|
|
99
|
-
value: editorState
|
|
100
99
|
}, /*#__PURE__*/ _react1.default.createElement(TestComponent, {
|
|
101
100
|
effect: effect,
|
|
102
101
|
dependencies: [
|
|
103
102
|
"two"
|
|
104
103
|
]
|
|
105
|
-
}))))
|
|
104
|
+
}))));
|
|
106
105
|
expect(effect).toHaveBeenCalledTimes(2);
|
|
107
106
|
});
|
|
108
107
|
});
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _react = require("@testing-library/react");
|
|
6
|
+
const _prosemirrorModel = require("prosemirror-model");
|
|
7
|
+
const _prosemirrorState = require("prosemirror-state");
|
|
8
|
+
const _react1 = /*#__PURE__*/ _interopRequireWildcard(require("react"));
|
|
9
|
+
const _proseMirrorJs = require("../../components/ProseMirror.js");
|
|
10
|
+
const _reactJs = require("../../plugins/react.js");
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
12
|
+
if (typeof WeakMap !== "function") return null;
|
|
13
|
+
var cacheBabelInterop = new WeakMap();
|
|
14
|
+
var cacheNodeInterop = new WeakMap();
|
|
15
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
16
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
17
|
+
})(nodeInterop);
|
|
18
|
+
}
|
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
20
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
24
|
+
return {
|
|
25
|
+
default: obj
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
29
|
+
if (cache && cache.has(obj)) {
|
|
30
|
+
return cache.get(obj);
|
|
31
|
+
}
|
|
32
|
+
var newObj = {};
|
|
33
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
34
|
+
for(var key in obj){
|
|
35
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
36
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
37
|
+
if (desc && (desc.get || desc.set)) {
|
|
38
|
+
Object.defineProperty(newObj, key, desc);
|
|
39
|
+
} else {
|
|
40
|
+
newObj[key] = obj[key];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
newObj.default = obj;
|
|
45
|
+
if (cache) {
|
|
46
|
+
cache.set(obj, newObj);
|
|
47
|
+
}
|
|
48
|
+
return newObj;
|
|
49
|
+
}
|
|
50
|
+
// Mock `ReactDOM.flushSync` to call `act` to flush updates from DOM mutations.
|
|
51
|
+
jest.mock("react-dom", ()=>({
|
|
52
|
+
...jest.requireActual("react-dom"),
|
|
53
|
+
flushSync: (fn)=>(0, _react.act)(fn)
|
|
54
|
+
}));
|
|
55
|
+
const schema = new _prosemirrorModel.Schema({
|
|
56
|
+
nodes: {
|
|
57
|
+
doc: {
|
|
58
|
+
content: "block+"
|
|
59
|
+
},
|
|
60
|
+
list: {
|
|
61
|
+
group: "block",
|
|
62
|
+
content: "list_item+"
|
|
63
|
+
},
|
|
64
|
+
list_item: {
|
|
65
|
+
content: "inline*"
|
|
66
|
+
},
|
|
67
|
+
text: {
|
|
68
|
+
group: "inline"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
const state = _prosemirrorState.EditorState.create({
|
|
73
|
+
doc: schema.topNodeType.create(null, schema.nodes.list.createAndFill()),
|
|
74
|
+
schema,
|
|
75
|
+
plugins: [
|
|
76
|
+
(0, _reactJs.react)()
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
describe("useNodeViews", ()=>{
|
|
80
|
+
it("should render node views", ()=>{
|
|
81
|
+
function List(param) {
|
|
82
|
+
let { children } = param;
|
|
83
|
+
return /*#__PURE__*/ _react1.default.createElement(_react1.default.Fragment, null, /*#__PURE__*/ _react1.default.createElement("span", {
|
|
84
|
+
contentEditable: false
|
|
85
|
+
}, "list"), /*#__PURE__*/ _react1.default.createElement("ul", null, children));
|
|
86
|
+
}
|
|
87
|
+
function ListItem(param) {
|
|
88
|
+
let { children } = param;
|
|
89
|
+
return /*#__PURE__*/ _react1.default.createElement(_react1.default.Fragment, null, /*#__PURE__*/ _react1.default.createElement("span", {
|
|
90
|
+
contentEditable: false
|
|
91
|
+
}, "list item"), /*#__PURE__*/ _react1.default.createElement("li", null, children));
|
|
92
|
+
}
|
|
93
|
+
const nodeViews = {
|
|
94
|
+
list: ()=>({
|
|
95
|
+
component: List,
|
|
96
|
+
dom: document.createElement("div"),
|
|
97
|
+
contentDOM: document.createElement("div")
|
|
98
|
+
}),
|
|
99
|
+
list_item: ()=>({
|
|
100
|
+
component: ListItem,
|
|
101
|
+
dom: document.createElement("div"),
|
|
102
|
+
contentDOM: document.createElement("div")
|
|
103
|
+
})
|
|
104
|
+
};
|
|
105
|
+
function TestEditor() {
|
|
106
|
+
const [mount, setMount] = (0, _react1.useState)(null);
|
|
107
|
+
return /*#__PURE__*/ _react1.default.createElement(_proseMirrorJs.ProseMirror, {
|
|
108
|
+
mount: mount,
|
|
109
|
+
nodeViews: nodeViews,
|
|
110
|
+
defaultState: state
|
|
111
|
+
}, /*#__PURE__*/ _react1.default.createElement("div", {
|
|
112
|
+
ref: setMount
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
(0, _react.render)(/*#__PURE__*/ _react1.default.createElement(TestEditor, null));
|
|
116
|
+
expect(_react.screen.getByText("list")).toBeTruthy();
|
|
117
|
+
expect(_react.screen.getByText("list item")).toBeTruthy();
|
|
118
|
+
});
|
|
119
|
+
it("should render child node views as children of their parents", ()=>{
|
|
120
|
+
const TestContext = /*#__PURE__*/ (0, _react1.createContext)("default");
|
|
121
|
+
function List(param) {
|
|
122
|
+
let { children } = param;
|
|
123
|
+
return /*#__PURE__*/ _react1.default.createElement(TestContext.Provider, {
|
|
124
|
+
value: "overriden"
|
|
125
|
+
}, /*#__PURE__*/ _react1.default.createElement("ul", null, children));
|
|
126
|
+
}
|
|
127
|
+
function ListItem(param) {
|
|
128
|
+
let { children } = param;
|
|
129
|
+
const testContextValue = (0, _react1.useContext)(TestContext);
|
|
130
|
+
return /*#__PURE__*/ _react1.default.createElement(_react1.default.Fragment, null, /*#__PURE__*/ _react1.default.createElement("span", {
|
|
131
|
+
contentEditable: false
|
|
132
|
+
}, testContextValue), /*#__PURE__*/ _react1.default.createElement("li", null, children));
|
|
133
|
+
}
|
|
134
|
+
const nodeViews = {
|
|
135
|
+
list: ()=>({
|
|
136
|
+
component: List,
|
|
137
|
+
dom: document.createElement("div"),
|
|
138
|
+
contentDOM: document.createElement("div")
|
|
139
|
+
}),
|
|
140
|
+
list_item: ()=>({
|
|
141
|
+
component: ListItem,
|
|
142
|
+
dom: document.createElement("div"),
|
|
143
|
+
contentDOM: document.createElement("div")
|
|
144
|
+
})
|
|
145
|
+
};
|
|
146
|
+
function TestEditor() {
|
|
147
|
+
const [mount, setMount] = (0, _react1.useState)(null);
|
|
148
|
+
return /*#__PURE__*/ _react1.default.createElement(_proseMirrorJs.ProseMirror, {
|
|
149
|
+
mount: mount,
|
|
150
|
+
nodeViews: nodeViews,
|
|
151
|
+
defaultState: state
|
|
152
|
+
}, /*#__PURE__*/ _react1.default.createElement("div", {
|
|
153
|
+
ref: setMount
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
(0, _react.render)(/*#__PURE__*/ _react1.default.createElement(TestEditor, null));
|
|
157
|
+
expect(_react.screen.getByText("overriden")).toBeTruthy();
|
|
158
|
+
});
|
|
159
|
+
});
|
|
@@ -68,10 +68,8 @@ let ReactEditorView = class ReactEditorView extends _prosemirrorview.EditorView
|
|
|
68
68
|
const cleanup = (0, _ssr.setSsrStubs)();
|
|
69
69
|
super(place, {
|
|
70
70
|
state: _prosemirrorstate.EditorState.create({
|
|
71
|
-
schema: props.state.schema
|
|
72
|
-
|
|
73
|
-
}),
|
|
74
|
-
plugins: props.plugins
|
|
71
|
+
schema: props.state.schema
|
|
72
|
+
})
|
|
75
73
|
});
|
|
76
74
|
cleanup();
|
|
77
75
|
this.ready = props.ready;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useEditorView", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>useEditorView
|
|
8
|
+
});
|
|
9
|
+
const _prosemirrorModel = require("prosemirror-model");
|
|
10
|
+
const _prosemirrorState = require("prosemirror-state");
|
|
11
|
+
const _prosemirrorView = require("prosemirror-view");
|
|
12
|
+
const _react = require("react");
|
|
13
|
+
const _reactDom = require("react-dom");
|
|
14
|
+
const _useComponentEventListenersJs = require("./useComponentEventListeners.js");
|
|
15
|
+
const EMPTY_SCHEMA = new _prosemirrorModel.Schema({
|
|
16
|
+
nodes: {
|
|
17
|
+
doc: {
|
|
18
|
+
content: "text*"
|
|
19
|
+
},
|
|
20
|
+
text: {
|
|
21
|
+
inline: true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const EMPTY_STATE = _prosemirrorState.EditorState.create({
|
|
26
|
+
schema: EMPTY_SCHEMA
|
|
27
|
+
});
|
|
28
|
+
let didWarnValueDefaultValue = false;
|
|
29
|
+
function useEditorView(mount, options) {
|
|
30
|
+
if (process.env.NODE_ENV !== "production") {
|
|
31
|
+
if (options.defaultState !== undefined && options.state !== undefined && !didWarnValueDefaultValue) {
|
|
32
|
+
console.error("A component contains a ProseMirror editor with both value and defaultValue props. " + "ProseMirror editors must be either controlled or uncontrolled " + "(specify either the state prop, or the defaultState prop, but not both). " + "Decide between using a controlled or uncontrolled ProseMirror editor " + "and remove one of these props. More info: " + "https://reactjs.org/link/controlled-components");
|
|
33
|
+
didWarnValueDefaultValue = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const defaultState = options.defaultState ?? EMPTY_STATE;
|
|
37
|
+
const [_state, setState] = (0, _react.useState)(defaultState);
|
|
38
|
+
const state = options.state ?? _state;
|
|
39
|
+
const { componentEventListenersPlugin , registerEventListener , unregisterEventListener } = (0, _useComponentEventListenersJs.useComponentEventListeners)();
|
|
40
|
+
const plugins = (0, _react.useMemo)(()=>[
|
|
41
|
+
...options.plugins ?? [],
|
|
42
|
+
componentEventListenersPlugin
|
|
43
|
+
], [
|
|
44
|
+
options.plugins,
|
|
45
|
+
componentEventListenersPlugin
|
|
46
|
+
]);
|
|
47
|
+
function dispatchTransaction(tr) {
|
|
48
|
+
(0, _reactDom.flushSync)(()=>{
|
|
49
|
+
if (!options.state) {
|
|
50
|
+
setState((s)=>s.apply(tr));
|
|
51
|
+
}
|
|
52
|
+
if (options.dispatchTransaction) {
|
|
53
|
+
options.dispatchTransaction.call(this, tr);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const directEditorProps = {
|
|
58
|
+
...options,
|
|
59
|
+
state,
|
|
60
|
+
plugins,
|
|
61
|
+
dispatchTransaction
|
|
62
|
+
};
|
|
63
|
+
const [_view, setView] = (0, _react.useState)(null);
|
|
64
|
+
const view = options.view ?? _view;
|
|
65
|
+
(0, _react.useLayoutEffect)(()=>{
|
|
66
|
+
return ()=>{
|
|
67
|
+
if (_view) {
|
|
68
|
+
_view.destroy();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}, [
|
|
72
|
+
_view
|
|
73
|
+
]);
|
|
74
|
+
// This effect runs on every render and handles the view lifecycle.
|
|
75
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
+
(0, _react.useLayoutEffect)(()=>{
|
|
77
|
+
if (_view) {
|
|
78
|
+
if (_view.dom === mount) {
|
|
79
|
+
_view.setProps(directEditorProps);
|
|
80
|
+
} else {
|
|
81
|
+
setView(null);
|
|
82
|
+
}
|
|
83
|
+
} else if (mount) {
|
|
84
|
+
setView(new _prosemirrorView.EditorView({
|
|
85
|
+
mount
|
|
86
|
+
}, directEditorProps));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
return (0, _react.useMemo)(()=>({
|
|
90
|
+
editorState: state,
|
|
91
|
+
editorView: view,
|
|
92
|
+
registerEventListener,
|
|
93
|
+
unregisterEventListener
|
|
94
|
+
}), [
|
|
95
|
+
state,
|
|
96
|
+
_view,
|
|
97
|
+
registerEventListener,
|
|
98
|
+
unregisterEventListener
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
NodePosProvider: ()=>NodePosProvider,
|
|
13
|
+
useNodePos: ()=>useNodePos
|
|
14
|
+
});
|
|
15
|
+
const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
|
|
16
|
+
const _reactJs = require("../plugins/react.js");
|
|
17
|
+
const _useEditorStateJs = require("./useEditorState.js");
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
19
|
+
if (typeof WeakMap !== "function") return null;
|
|
20
|
+
var cacheBabelInterop = new WeakMap();
|
|
21
|
+
var cacheNodeInterop = new WeakMap();
|
|
22
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
23
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
24
|
+
})(nodeInterop);
|
|
25
|
+
}
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
27
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
28
|
+
return obj;
|
|
29
|
+
}
|
|
30
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
31
|
+
return {
|
|
32
|
+
default: obj
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
36
|
+
if (cache && cache.has(obj)) {
|
|
37
|
+
return cache.get(obj);
|
|
38
|
+
}
|
|
39
|
+
var newObj = {};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
const NodePosContext = /*#__PURE__*/ (0, _react.createContext)(null);
|
|
58
|
+
function NodePosProvider(param) {
|
|
59
|
+
let { nodeKey , children } = param;
|
|
60
|
+
const editorState = (0, _useEditorStateJs.useEditorState)();
|
|
61
|
+
const pluginState = _reactJs.reactPluginKey.getState(editorState);
|
|
62
|
+
if (!pluginState) return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, children);
|
|
63
|
+
return /*#__PURE__*/ _react.default.createElement(NodePosContext.Provider, {
|
|
64
|
+
value: pluginState.keyToPos.get(nodeKey) ?? 0
|
|
65
|
+
}, children);
|
|
66
|
+
}
|
|
67
|
+
function useNodePos() {
|
|
68
|
+
return (0, _react.useContext)(NodePosContext);
|
|
69
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useNodeViews", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>useNodeViews
|
|
8
|
+
});
|
|
9
|
+
const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
|
|
10
|
+
const _nodeViewsJs = require("../components/NodeViews.js");
|
|
11
|
+
const _createReactNodeViewConstructorJs = require("../nodeViews/createReactNodeViewConstructor.js");
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
13
|
+
if (typeof WeakMap !== "function") return null;
|
|
14
|
+
var cacheBabelInterop = new WeakMap();
|
|
15
|
+
var cacheNodeInterop = new WeakMap();
|
|
16
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
17
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
18
|
+
})(nodeInterop);
|
|
19
|
+
}
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
21
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
22
|
+
return obj;
|
|
23
|
+
}
|
|
24
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
25
|
+
return {
|
|
26
|
+
default: obj
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
30
|
+
if (cache && cache.has(obj)) {
|
|
31
|
+
return cache.get(obj);
|
|
32
|
+
}
|
|
33
|
+
var newObj = {};
|
|
34
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
35
|
+
for(var key in obj){
|
|
36
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
37
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
38
|
+
if (desc && (desc.get || desc.set)) {
|
|
39
|
+
Object.defineProperty(newObj, key, desc);
|
|
40
|
+
} else {
|
|
41
|
+
newObj[key] = obj[key];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
newObj.default = obj;
|
|
46
|
+
if (cache) {
|
|
47
|
+
cache.set(obj, newObj);
|
|
48
|
+
}
|
|
49
|
+
return newObj;
|
|
50
|
+
}
|
|
51
|
+
function useNodeViews(nodeViews) {
|
|
52
|
+
const [portals, setPortals] = (0, _react.useState)({});
|
|
53
|
+
const registerPortal = (0, _react.useCallback)((view, getPos, portal)=>{
|
|
54
|
+
const nearestAncestorKey = (0, _createReactNodeViewConstructorJs.findNodeKeyUp)(view, getPos());
|
|
55
|
+
setPortals((oldPortals)=>{
|
|
56
|
+
const oldChildPortals = oldPortals[nearestAncestorKey] ?? [];
|
|
57
|
+
const newChildPortals = oldChildPortals.concat({
|
|
58
|
+
getPos,
|
|
59
|
+
portal
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
...oldPortals,
|
|
63
|
+
[nearestAncestorKey]: newChildPortals
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
return ()=>{
|
|
67
|
+
setPortals((oldPortals)=>{
|
|
68
|
+
const oldChildPortals = oldPortals[nearestAncestorKey] ?? [];
|
|
69
|
+
const newChildPortals = oldChildPortals.filter((param)=>{
|
|
70
|
+
let { portal: p } = param;
|
|
71
|
+
return p !== portal;
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
...oldPortals,
|
|
75
|
+
[nearestAncestorKey]: newChildPortals
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
}, []);
|
|
80
|
+
const wrappedNodeViews = (0, _react.useMemo)(()=>{
|
|
81
|
+
const nodeViewEntries = Object.entries(nodeViews ?? {});
|
|
82
|
+
const wrappedNodeViewEntries = nodeViewEntries.map((param)=>{
|
|
83
|
+
let [name, constructor] = param;
|
|
84
|
+
return [
|
|
85
|
+
name,
|
|
86
|
+
(0, _createReactNodeViewConstructorJs.createReactNodeViewConstructor)(constructor, registerPortal)
|
|
87
|
+
];
|
|
88
|
+
});
|
|
89
|
+
return Object.fromEntries(wrappedNodeViewEntries);
|
|
90
|
+
}, [
|
|
91
|
+
nodeViews,
|
|
92
|
+
registerPortal
|
|
93
|
+
]);
|
|
94
|
+
return {
|
|
95
|
+
nodeViews: wrappedNodeViews,
|
|
96
|
+
nodeViewsComponent: /*#__PURE__*/ _react.default.createElement(_nodeViewsJs.NodeViews, {
|
|
97
|
+
portals: portals
|
|
98
|
+
})
|
|
99
|
+
};
|
|
100
|
+
}
|