@handlewithcare/react-prosemirror 2.4.12 → 2.5.1
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/cjs/AbstractEditorView.js +4 -0
- package/dist/cjs/ReactEditorView.js +156 -0
- package/dist/cjs/StaticEditorView.js +86 -0
- package/dist/cjs/components/ChildNodeViews.js +58 -29
- package/dist/cjs/components/CustomNodeView.js +77 -137
- package/dist/cjs/{hooks/useNodePos.js → components/DefaultNodeView.js} +24 -26
- package/dist/cjs/components/DocNodeView.js +33 -41
- package/dist/cjs/components/MarkView.js +1 -2
- package/dist/cjs/components/NativeWidgetView.js +2 -3
- package/dist/cjs/components/NodeView.js +31 -21
- package/dist/cjs/components/ProseMirror.js +25 -17
- package/dist/cjs/components/ProseMirrorDoc.js +7 -27
- package/dist/cjs/components/ReactNodeView.js +98 -61
- package/dist/cjs/components/SeparatorHackView.js +1 -2
- package/dist/cjs/components/TextNodeView.js +4 -5
- package/dist/cjs/components/TrailingHackView.js +1 -2
- package/dist/cjs/components/WidgetView.js +2 -4
- package/dist/cjs/constants.js +33 -0
- package/dist/cjs/hooks/useEditor.js +33 -229
- package/dist/cjs/hooks/useEditorEffect.js +2 -2
- package/dist/cjs/hooks/useEditorEventCallback.js +8 -5
- package/dist/cjs/hooks/useIgnoreMutation.js +1 -1
- package/dist/cjs/hooks/useNodeViewDescriptor.js +123 -80
- package/dist/cjs/hooks/useReactKeys.js +1 -1
- package/dist/cjs/hooks/useSelectNode.js +9 -7
- package/dist/cjs/hooks/useStopEvent.js +1 -1
- package/dist/cjs/plugins/beforeInputPlugin.js +12 -0
- package/dist/cjs/testing/editorViewTestHelpers.js +0 -2
- package/dist/cjs/viewdesc.js +104 -25
- package/dist/esm/AbstractEditorView.js +1 -0
- package/dist/esm/ReactEditorView.js +156 -0
- package/dist/esm/StaticEditorView.js +76 -0
- package/dist/esm/components/ChildNodeViews.js +59 -31
- package/dist/esm/components/CustomNodeView.js +78 -138
- package/dist/esm/components/DefaultNodeView.js +16 -0
- package/dist/esm/components/DocNodeView.js +33 -41
- package/dist/esm/components/MarkView.js +1 -2
- package/dist/esm/components/NativeWidgetView.js +2 -3
- package/dist/esm/components/NodeView.js +32 -22
- package/dist/esm/components/ProseMirror.js +25 -17
- package/dist/esm/components/ProseMirrorDoc.js +7 -28
- package/dist/esm/components/ReactNodeView.js +99 -62
- package/dist/esm/components/SeparatorHackView.js +1 -2
- package/dist/esm/components/TextNodeView.js +4 -5
- package/dist/esm/components/TrailingHackView.js +1 -2
- package/dist/esm/components/WidgetView.js +2 -4
- package/dist/esm/constants.js +15 -0
- package/dist/esm/hooks/useEditor.js +29 -218
- package/dist/esm/hooks/useEditorEffect.js +2 -2
- package/dist/esm/hooks/useEditorEventCallback.js +8 -5
- package/dist/esm/hooks/useIgnoreMutation.js +1 -1
- package/dist/esm/hooks/useNodeViewDescriptor.js +125 -82
- package/dist/esm/hooks/useReactKeys.js +1 -1
- package/dist/esm/hooks/useSelectNode.js +9 -7
- package/dist/esm/hooks/useStopEvent.js +1 -1
- package/dist/esm/plugins/beforeInputPlugin.js +12 -0
- package/dist/esm/testing/editorViewTestHelpers.js +0 -2
- package/dist/esm/viewdesc.js +94 -18
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/AbstractEditorView.d.ts +27 -0
- package/dist/types/ReactEditorView.d.ts +80 -0
- package/dist/types/StaticEditorView.d.ts +24 -0
- package/dist/types/components/ChildNodeViews.d.ts +2 -2
- package/dist/types/components/CustomNodeView.d.ts +3 -3
- package/dist/types/components/DefaultNodeView.d.ts +3 -0
- package/dist/types/components/DocNodeView.d.ts +9 -17
- package/dist/types/components/MarkView.d.ts +2 -2
- package/dist/types/components/NativeWidgetView.d.ts +2 -2
- package/dist/types/components/NodeView.d.ts +5 -5
- package/dist/types/components/NodeViewComponentProps.d.ts +3 -4
- package/dist/types/components/ProseMirrorDoc.d.ts +14 -8
- package/dist/types/components/ReactNodeView.d.ts +4 -2
- package/dist/types/components/SeparatorHackView.d.ts +2 -2
- package/dist/types/components/TextNodeView.d.ts +4 -3
- package/dist/types/components/TrailingHackView.d.ts +2 -2
- package/dist/types/components/WidgetView.d.ts +2 -2
- package/dist/types/constants.d.ts +4 -0
- package/dist/types/contexts/EditorContext.d.ts +6 -4
- package/dist/types/contexts/IgnoreMutationContext.d.ts +2 -1
- package/dist/types/contexts/NodeViewContext.d.ts +3 -1
- package/dist/types/contexts/SelectNodeContext.d.ts +3 -1
- package/dist/types/contexts/StopEventContext.d.ts +2 -1
- package/dist/types/decorations/computeDocDeco.d.ts +3 -2
- package/dist/types/decorations/viewDecorations.d.ts +3 -2
- package/dist/types/hooks/useEditor.d.ts +5 -46
- package/dist/types/hooks/useNodeViewDescriptor.d.ts +18 -10
- package/dist/types/hooks/useReactKeys.d.ts +1 -1
- package/dist/types/hooks/useSelectNode.d.ts +2 -1
- package/dist/types/props.d.ts +3 -3
- package/dist/types/viewdesc.d.ts +29 -11
- package/package.json +7 -3
- package/dist/cjs/components/Editor.js +0 -28
- package/dist/cjs/components/NodeViews.js +0 -73
- package/dist/cjs/components/__tests__/LayoutGroup.test.js +0 -141
- package/dist/cjs/components/__tests__/ProseMirror.test.js +0 -255
- package/dist/cjs/contexts/NodeViewsContext.js +0 -10
- package/dist/cjs/hooks/__tests__/useEditorViewLayoutEffect.test.js +0 -107
- package/dist/cjs/hooks/__tests__/useNodeViews.test.js +0 -159
- package/dist/cjs/hooks/useClientOnly.js +0 -19
- package/dist/cjs/hooks/useEditorView.js +0 -100
- package/dist/cjs/hooks/useNodeViews.js +0 -100
- package/dist/cjs/nodeViews/createReactNodeViewConstructor.js +0 -244
- package/dist/cjs/nodeViews/phrasingContentTags.js +0 -57
- package/dist/cjs/plugins/__tests__/react.test.js +0 -139
- package/dist/cjs/plugins/react.js +0 -71
- package/dist/cjs/selection/SelectionDOMObserver.js +0 -171
- package/dist/cjs/selection/hasFocusAndSelection.js +0 -35
- package/dist/cjs/selection/selectionFromDOM.js +0 -77
- package/dist/cjs/selection/selectionToDOM.js +0 -226
- package/dist/cjs/ssr.js +0 -85
- package/dist/esm/components/Editor.js +0 -15
- package/dist/esm/components/NodeViews.js +0 -26
- package/dist/esm/components/__tests__/LayoutGroup.test.js +0 -98
- package/dist/esm/components/__tests__/ProseMirror.test.js +0 -207
- package/dist/esm/contexts/NodeViewsContext.js +0 -9
- package/dist/esm/hooks/__tests__/useEditorViewLayoutEffect.test.js +0 -98
- package/dist/esm/hooks/__tests__/useNodeViews.test.js +0 -116
- package/dist/esm/hooks/useClientOnly.js +0 -9
- package/dist/esm/hooks/useEditorView.js +0 -99
- package/dist/esm/hooks/useNodePos.js +0 -16
- package/dist/esm/hooks/useNodeViews.js +0 -53
- package/dist/esm/nodeViews/createReactNodeViewConstructor.js +0 -214
- package/dist/esm/nodeViews/phrasingContentTags.js +0 -49
- package/dist/esm/plugins/__tests__/react.test.js +0 -135
- package/dist/esm/plugins/react.js +0 -64
- package/dist/esm/selection/SelectionDOMObserver.js +0 -161
- package/dist/esm/selection/hasFocusAndSelection.js +0 -17
- package/dist/esm/selection/selectionFromDOM.js +0 -59
- package/dist/esm/selection/selectionToDOM.js +0 -196
- package/dist/esm/ssr.js +0 -82
- package/dist/types/components/Editor.d.ts +0 -7
- package/dist/types/components/NodeViews.d.ts +0 -6
- package/dist/types/components/__tests__/LayoutGroup.test.d.ts +0 -1
- package/dist/types/contexts/NodeViewsContext.d.ts +0 -19
- package/dist/types/hooks/__tests__/useEditorViewLayoutEffect.test.d.ts +0 -1
- package/dist/types/hooks/__tests__/useNodeViews.test.d.ts +0 -1
- package/dist/types/hooks/useClientOnly.d.ts +0 -1
- package/dist/types/hooks/useEditorView.d.ts +0 -23
- package/dist/types/hooks/useNodePos.d.ts +0 -9
- package/dist/types/hooks/useNodeViews.d.ts +0 -5
- package/dist/types/nodeViews/createReactNodeViewConstructor.d.ts +0 -48
- package/dist/types/nodeViews/phrasingContentTags.d.ts +0 -1
- package/dist/types/plugins/__tests__/react.test.d.ts +0 -1
- package/dist/types/plugins/react.d.ts +0 -21
- package/dist/types/selection/SelectionDOMObserver.d.ts +0 -33
- package/dist/types/selection/hasFocusAndSelection.d.ts +0 -3
- package/dist/types/selection/selectionFromDOM.d.ts +0 -4
- package/dist/types/selection/selectionToDOM.d.ts +0 -9
- package/dist/types/ssr.d.ts +0 -19
package/dist/esm/viewdesc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { Fragment } from "prosemirror-model";
|
|
2
2
|
import { browser } from "./browser.js";
|
|
3
|
-
import { domIndex, isEquivalentPosition } from "./
|
|
3
|
+
import { domIndex, isEquivalentPosition } from "./dom.js";
|
|
4
4
|
// View descriptions are data structures that describe the DOM that is
|
|
5
5
|
// used to represent the editor's content. They are used for:
|
|
6
6
|
//
|
|
@@ -82,7 +82,9 @@ export class ViewDesc {
|
|
|
82
82
|
return 0;
|
|
83
83
|
}
|
|
84
84
|
destroy() {
|
|
85
|
-
|
|
85
|
+
this.parent = undefined;
|
|
86
|
+
if (this.dom.pmViewDesc == this) this.dom.pmViewDesc = undefined;
|
|
87
|
+
for(let i = 0; i < this.children.length; i++)this.children[i].destroy();
|
|
86
88
|
}
|
|
87
89
|
posBeforeChild(child) {
|
|
88
90
|
for(let i = 0, pos = this.posAtStart;; i++){
|
|
@@ -332,7 +334,6 @@ export class ViewDesc {
|
|
|
332
334
|
let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);
|
|
333
335
|
let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);
|
|
334
336
|
const domSel = view.root.getSelection();
|
|
335
|
-
// @ts-expect-error - Internal method domSelectionRange
|
|
336
337
|
const selRange = view.domSelectionRange();
|
|
337
338
|
let brKludge = false;
|
|
338
339
|
// On Firefox, using Selection.collapse to put the cursor after a
|
|
@@ -542,15 +543,8 @@ export class NodeViewDesc extends ViewDesc {
|
|
|
542
543
|
outerDeco;
|
|
543
544
|
innerDeco;
|
|
544
545
|
nodeDOM;
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
deselectNode;
|
|
548
|
-
ignoreMutation;
|
|
549
|
-
constructor(parent, children, getPos, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, stopEvent, selectNode, deselectNode, ignoreMutation){
|
|
550
|
-
super(parent, children, getPos, dom, contentDOM), this.node = node, this.outerDeco = outerDeco, this.innerDeco = innerDeco, this.nodeDOM = nodeDOM, this.stopEvent = stopEvent, this.selectNode = selectNode, this.deselectNode = deselectNode, this.ignoreMutation = ignoreMutation;
|
|
551
|
-
}
|
|
552
|
-
updateOuterDeco() {
|
|
553
|
-
// pass
|
|
546
|
+
constructor(parent, children, getPos, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM){
|
|
547
|
+
super(parent, children, getPos, dom, contentDOM), this.node = node, this.outerDeco = outerDeco, this.innerDeco = innerDeco, this.nodeDOM = nodeDOM;
|
|
554
548
|
}
|
|
555
549
|
parseRule() {
|
|
556
550
|
// Experimental kludge to allow opt-in re-parsing of nodes
|
|
@@ -594,22 +588,46 @@ export class NodeViewDesc extends ViewDesc {
|
|
|
594
588
|
get border() {
|
|
595
589
|
return this.node.isLeaf ? 0 : 1;
|
|
596
590
|
}
|
|
591
|
+
updateChildren(_view, _pos) {
|
|
592
|
+
// Omitted to avoid reproducing lots of unused code.
|
|
593
|
+
// Overidden elsewhere in case this is ever vendored.
|
|
594
|
+
}
|
|
597
595
|
// If this desc must be updated to match the given node decoration,
|
|
598
596
|
// do so and return true.
|
|
599
|
-
update(
|
|
597
|
+
update(node, outerDeco, innerDeco, view) {
|
|
598
|
+
if (this.dirty == NODE_DIRTY || !node.sameMarkup(this.node)) return false;
|
|
599
|
+
this.updateInner(node, outerDeco, innerDeco, view);
|
|
600
600
|
return true;
|
|
601
601
|
}
|
|
602
|
+
updateInner(node, outerDeco, innerDeco, view) {
|
|
603
|
+
this.updateOuterDeco(outerDeco);
|
|
604
|
+
this.node = node;
|
|
605
|
+
this.innerDeco = innerDeco;
|
|
606
|
+
if (this.contentDOM) this.updateChildren(view, this.posAtStart);
|
|
607
|
+
this.dirty = NOT_DIRTY;
|
|
608
|
+
}
|
|
609
|
+
updateOuterDeco(outerDeco) {
|
|
610
|
+
this.outerDeco = outerDeco;
|
|
611
|
+
}
|
|
612
|
+
// Mark this node as being the selected node.
|
|
613
|
+
selectNode() {
|
|
614
|
+
if (this.nodeDOM.nodeType == 1) this.nodeDOM.classList.add("ProseMirror-selectednode");
|
|
615
|
+
if (this.contentDOM || !this.node.type.spec.draggable) this.dom.draggable = true;
|
|
616
|
+
}
|
|
617
|
+
// Remove selected node marking from this node.
|
|
618
|
+
deselectNode() {
|
|
619
|
+
if (this.nodeDOM.nodeType == 1) {
|
|
620
|
+
this.nodeDOM.classList.remove("ProseMirror-selectednode");
|
|
621
|
+
if (this.contentDOM || !this.node.type.spec.draggable) this.dom.removeAttribute("draggable");
|
|
622
|
+
}
|
|
623
|
+
}
|
|
602
624
|
get domAtom() {
|
|
603
625
|
return this.node.isAtom;
|
|
604
626
|
}
|
|
605
627
|
}
|
|
606
628
|
export class TextViewDesc extends NodeViewDesc {
|
|
607
629
|
constructor(parent, children, getPos, node, outerDeco, innerDeco, dom, nodeDOM){
|
|
608
|
-
super(parent, children, getPos, node, outerDeco, innerDeco, dom, null, nodeDOM
|
|
609
|
-
/* Text nodes can't have node selections */ }, ()=>{
|
|
610
|
-
/* Text nodes can't have node selections */ }, (mutation)=>{
|
|
611
|
-
return mutation.type != "characterData" && mutation.type != "selection";
|
|
612
|
-
});
|
|
630
|
+
super(parent, children, getPos, node, outerDeco, innerDeco, dom, null, nodeDOM);
|
|
613
631
|
}
|
|
614
632
|
parseRule() {
|
|
615
633
|
let skip = this.nodeDOM.parentNode;
|
|
@@ -619,6 +637,7 @@ export class TextViewDesc extends NodeViewDesc {
|
|
|
619
637
|
};
|
|
620
638
|
}
|
|
621
639
|
update(_node, _outerDeco, _innerDeco, _view) {
|
|
640
|
+
this.dirty = NOT_DIRTY;
|
|
622
641
|
return true;
|
|
623
642
|
}
|
|
624
643
|
inParent() {
|
|
@@ -662,6 +681,63 @@ export class TrailingHackViewDesc extends ViewDesc {
|
|
|
662
681
|
return this.dom.nodeName == "IMG";
|
|
663
682
|
}
|
|
664
683
|
}
|
|
684
|
+
// A separate subclass is used for customized node views, so that the
|
|
685
|
+
// extra checks only have to be made for nodes that are actually
|
|
686
|
+
// customized.
|
|
687
|
+
let CustomNodeViewDesc = class CustomNodeViewDesc extends NodeViewDesc {
|
|
688
|
+
spec;
|
|
689
|
+
constructor(parent, children, getPos, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec){
|
|
690
|
+
super(parent, children, getPos, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM), this.spec = spec;
|
|
691
|
+
}
|
|
692
|
+
// A custom `update` method gets to decide whether the update goes
|
|
693
|
+
// through. If it does, and there's a `contentDOM` node, our logic
|
|
694
|
+
// updates the children.
|
|
695
|
+
update(node, outerDeco, innerDeco, view) {
|
|
696
|
+
if (this.dirty == NODE_DIRTY) return false;
|
|
697
|
+
if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {
|
|
698
|
+
const result = this.spec.update(node, outerDeco, innerDeco);
|
|
699
|
+
if (result) this.updateInner(node, outerDeco, innerDeco, view);
|
|
700
|
+
return result;
|
|
701
|
+
} else if (!this.contentDOM && !node.isLeaf) {
|
|
702
|
+
return false;
|
|
703
|
+
} else {
|
|
704
|
+
return super.update(node, outerDeco, innerDeco, view);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
selectNode() {
|
|
708
|
+
this.spec.selectNode ? this.spec.selectNode() : super.selectNode();
|
|
709
|
+
}
|
|
710
|
+
deselectNode() {
|
|
711
|
+
this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();
|
|
712
|
+
}
|
|
713
|
+
setSelection(anchor, head, view, force) {
|
|
714
|
+
this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root) : super.setSelection(anchor, head, view, force);
|
|
715
|
+
}
|
|
716
|
+
destroy() {
|
|
717
|
+
if (this.spec.destroy) this.spec.destroy();
|
|
718
|
+
super.destroy();
|
|
719
|
+
}
|
|
720
|
+
stopEvent(event) {
|
|
721
|
+
return this.spec.stopEvent ? this.spec.stopEvent(event) : false;
|
|
722
|
+
}
|
|
723
|
+
ignoreMutation(mutation) {
|
|
724
|
+
return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
export class ReactNodeViewDesc extends CustomNodeViewDesc {
|
|
728
|
+
updateChildren(_view, _pos) {
|
|
729
|
+
// React has already updated the children.
|
|
730
|
+
}
|
|
731
|
+
updateOuterDeco(outerDeco) {
|
|
732
|
+
// React has already updated the decorations.
|
|
733
|
+
this.outerDeco = outerDeco;
|
|
734
|
+
}
|
|
735
|
+
destroy() {
|
|
736
|
+
// React has already destroyed the children (if needed).
|
|
737
|
+
this.children = [];
|
|
738
|
+
super.destroy();
|
|
739
|
+
}
|
|
740
|
+
}
|
|
665
741
|
function sameOuterDeco(a, b) {
|
|
666
742
|
if (a.length != b.length) return false;
|
|
667
743
|
// @ts-expect-error ...
|