prosemirror-view 1.38.1 → 1.39.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/CHANGELOG.md +12 -0
- package/dist/index.cjs +9 -3
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +9 -4
- package/package.json +1 -1
- package/src/domchange.ts +3 -2
- package/src/index.ts +6 -1
- package/src/input.ts +7 -2
- package/src/viewdesc.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## 1.39.1 (2025-04-04)
|
|
2
|
+
|
|
3
|
+
## 1.39.0 (2025-04-04)
|
|
4
|
+
|
|
5
|
+
### Bug fixes
|
|
6
|
+
|
|
7
|
+
Fix an issue where, with some types of schemas, pressing Enter on Android with a Chinese keyboard wouldn't properly detect the Enter press.
|
|
8
|
+
|
|
9
|
+
### New features
|
|
10
|
+
|
|
11
|
+
The new `dragCopies` prop can be used to configure whether a drag event inside the editor copies or moves content.
|
|
12
|
+
|
|
1
13
|
## 1.38.1 (2025-03-04)
|
|
2
14
|
|
|
3
15
|
### Bug fixes
|
package/dist/index.cjs
CHANGED
|
@@ -3420,6 +3420,12 @@ var Dragging = _createClass(function Dragging(slice, move, node) {
|
|
|
3420
3420
|
this.node = node;
|
|
3421
3421
|
});
|
|
3422
3422
|
var dragCopyModifier = mac ? "altKey" : "ctrlKey";
|
|
3423
|
+
function dragMoves(view, event) {
|
|
3424
|
+
var moves = view.someProp("dragCopies", function (test) {
|
|
3425
|
+
return !test(event);
|
|
3426
|
+
});
|
|
3427
|
+
return moves != null ? moves : !event[dragCopyModifier];
|
|
3428
|
+
}
|
|
3423
3429
|
handlers.dragstart = function (view, _event) {
|
|
3424
3430
|
var event = _event;
|
|
3425
3431
|
var mouseDown = view.input.mouseDown;
|
|
@@ -3443,7 +3449,7 @@ handlers.dragstart = function (view, _event) {
|
|
|
3443
3449
|
event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML);
|
|
3444
3450
|
event.dataTransfer.effectAllowed = "copyMove";
|
|
3445
3451
|
if (!brokenClipboardAPI) event.dataTransfer.setData("text/plain", text);
|
|
3446
|
-
view.dragging = new Dragging(slice,
|
|
3452
|
+
view.dragging = new Dragging(slice, dragMoves(view, event), node);
|
|
3447
3453
|
};
|
|
3448
3454
|
handlers.dragend = function (view) {
|
|
3449
3455
|
var dragging = view.dragging;
|
|
@@ -3470,7 +3476,7 @@ editHandlers.drop = function (view, _event) {
|
|
|
3470
3476
|
} else {
|
|
3471
3477
|
slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse);
|
|
3472
3478
|
}
|
|
3473
|
-
var move = !!(dragging &&
|
|
3479
|
+
var move = !!(dragging && dragMoves(view, event));
|
|
3474
3480
|
if (view.someProp("handleDrop", function (f) {
|
|
3475
3481
|
return f(view, event, slice || prosemirrorModel.Slice.empty, move);
|
|
3476
3482
|
})) {
|
|
@@ -4662,7 +4668,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
4662
4668
|
var nextSel;
|
|
4663
4669
|
if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(function (n) {
|
|
4664
4670
|
return n.nodeName == "DIV" || n.nodeName == "P";
|
|
4665
|
-
})) || !inlineChange && $from.pos < parse.doc.content.size && !$from.sameParent($to) && (nextSel = prosemirrorState.Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) && nextSel.head
|
|
4671
|
+
})) || !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && (nextSel = prosemirrorState.Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) && nextSel.head > $from.pos) && view.someProp("handleKeyDown", function (f) {
|
|
4666
4672
|
return f(view, keyEvent(13, "Enter"));
|
|
4667
4673
|
})) {
|
|
4668
4674
|
view.input.lastIOSEnter = 0;
|
package/dist/index.d.cts
CHANGED
|
@@ -699,6 +699,12 @@ interface EditorProps<P = any> {
|
|
|
699
699
|
*/
|
|
700
700
|
handleScrollToSelection?: (this: P, view: EditorView) => boolean;
|
|
701
701
|
/**
|
|
702
|
+
Determines whether an in-editor drag event should copy or move
|
|
703
|
+
the selection. When not given, the event's `altKey` property is
|
|
704
|
+
used on macOS, `ctrlKey` on other platforms.
|
|
705
|
+
*/
|
|
706
|
+
dragCopies?: (event: DragEvent) => boolean;
|
|
707
|
+
/**
|
|
702
708
|
Can be used to override the way a selection is created when
|
|
703
709
|
reading a DOM selection between the given anchor and head.
|
|
704
710
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -699,6 +699,12 @@ interface EditorProps<P = any> {
|
|
|
699
699
|
*/
|
|
700
700
|
handleScrollToSelection?: (this: P, view: EditorView) => boolean;
|
|
701
701
|
/**
|
|
702
|
+
Determines whether an in-editor drag event should copy or move
|
|
703
|
+
the selection. When not given, the event's `altKey` property is
|
|
704
|
+
used on macOS, `ctrlKey` on other platforms.
|
|
705
|
+
*/
|
|
706
|
+
dragCopies?: (event: DragEvent) => boolean;
|
|
707
|
+
/**
|
|
702
708
|
Can be used to override the way a selection is created when
|
|
703
709
|
reading a DOM selection between the given anchor and head.
|
|
704
710
|
*/
|
package/dist/index.js
CHANGED
|
@@ -3676,6 +3676,10 @@ class Dragging {
|
|
|
3676
3676
|
}
|
|
3677
3677
|
}
|
|
3678
3678
|
const dragCopyModifier = mac ? "altKey" : "ctrlKey";
|
|
3679
|
+
function dragMoves(view, event) {
|
|
3680
|
+
let moves = view.someProp("dragCopies", test => !test(event));
|
|
3681
|
+
return moves != null ? moves : !event[dragCopyModifier];
|
|
3682
|
+
}
|
|
3679
3683
|
handlers.dragstart = (view, _event) => {
|
|
3680
3684
|
let event = _event;
|
|
3681
3685
|
let mouseDown = view.input.mouseDown;
|
|
@@ -3705,7 +3709,7 @@ handlers.dragstart = (view, _event) => {
|
|
|
3705
3709
|
event.dataTransfer.effectAllowed = "copyMove";
|
|
3706
3710
|
if (!brokenClipboardAPI)
|
|
3707
3711
|
event.dataTransfer.setData("text/plain", text);
|
|
3708
|
-
view.dragging = new Dragging(slice,
|
|
3712
|
+
view.dragging = new Dragging(slice, dragMoves(view, event), node);
|
|
3709
3713
|
};
|
|
3710
3714
|
handlers.dragend = view => {
|
|
3711
3715
|
let dragging = view.dragging;
|
|
@@ -3732,7 +3736,7 @@ editHandlers.drop = (view, _event) => {
|
|
|
3732
3736
|
else {
|
|
3733
3737
|
slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse);
|
|
3734
3738
|
}
|
|
3735
|
-
let move = !!(dragging &&
|
|
3739
|
+
let move = !!(dragging && dragMoves(view, event));
|
|
3736
3740
|
if (view.someProp("handleDrop", f => f(view, event, slice || Slice.empty, move))) {
|
|
3737
3741
|
event.preventDefault();
|
|
3738
3742
|
return;
|
|
@@ -5017,9 +5021,10 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
5017
5021
|
// as being an iOS enter press), just dispatch an Enter key instead.
|
|
5018
5022
|
if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&
|
|
5019
5023
|
(!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) ||
|
|
5020
|
-
(!inlineChange && $from.pos < parse.doc.content.size &&
|
|
5024
|
+
(!inlineChange && $from.pos < parse.doc.content.size &&
|
|
5025
|
+
(!$from.sameParent($to) || !$from.parent.inlineContent) &&
|
|
5021
5026
|
(nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&
|
|
5022
|
-
nextSel.head
|
|
5027
|
+
nextSel.head > $from.pos)) &&
|
|
5023
5028
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
5024
5029
|
view.input.lastIOSEnter = 0;
|
|
5025
5030
|
return;
|
package/package.json
CHANGED
package/src/domchange.ts
CHANGED
|
@@ -181,9 +181,10 @@ export function readDOMChange(view: EditorView, from: number, to: number, typeOv
|
|
|
181
181
|
// as being an iOS enter press), just dispatch an Enter key instead.
|
|
182
182
|
if (((browser.ios && view.input.lastIOSEnter > Date.now() - 225 &&
|
|
183
183
|
(!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) ||
|
|
184
|
-
(!inlineChange && $from.pos < parse.doc.content.size &&
|
|
184
|
+
(!inlineChange && $from.pos < parse.doc.content.size &&
|
|
185
|
+
(!$from.sameParent($to) || !$from.parent.inlineContent) &&
|
|
185
186
|
(nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&
|
|
186
|
-
nextSel.head
|
|
187
|
+
nextSel.head > $from.pos)) &&
|
|
187
188
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
188
189
|
view.input.lastIOSEnter = 0
|
|
189
190
|
return
|
package/src/index.ts
CHANGED
|
@@ -51,7 +51,7 @@ export class EditorView {
|
|
|
51
51
|
private prevDirectPlugins: readonly Plugin[] = []
|
|
52
52
|
private pluginViews: PluginView[] = []
|
|
53
53
|
/// @internal
|
|
54
|
-
domObserver
|
|
54
|
+
declare domObserver: DOMObserver
|
|
55
55
|
/// Holds `true` when a hack node is needed in Firefox to prevent the
|
|
56
56
|
/// [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)
|
|
57
57
|
/// @internal
|
|
@@ -673,6 +673,11 @@ export interface EditorProps<P = any> {
|
|
|
673
673
|
/// handlers or the default behavior should be tried.
|
|
674
674
|
handleScrollToSelection?: (this: P, view: EditorView) => boolean
|
|
675
675
|
|
|
676
|
+
/// Determines whether an in-editor drag event should copy or move
|
|
677
|
+
/// the selection. When not given, the event's `altKey` property is
|
|
678
|
+
/// used on macOS, `ctrlKey` on other platforms.
|
|
679
|
+
dragCopies?: (event: DragEvent) => boolean
|
|
680
|
+
|
|
676
681
|
/// Can be used to override the way a selection is created when
|
|
677
682
|
/// reading a DOM selection between the given anchor and head.
|
|
678
683
|
createSelectionBetween?: (this: P, view: EditorView, anchor: ResolvedPos, head: ResolvedPos) => Selection | null
|
package/src/input.ts
CHANGED
|
@@ -660,6 +660,11 @@ export class Dragging {
|
|
|
660
660
|
|
|
661
661
|
const dragCopyModifier: keyof DragEvent = browser.mac ? "altKey" : "ctrlKey"
|
|
662
662
|
|
|
663
|
+
function dragMoves(view: EditorView, event: DragEvent) {
|
|
664
|
+
let moves = view.someProp("dragCopies", test => !test(event))
|
|
665
|
+
return moves != null ? moves : !event[dragCopyModifier]
|
|
666
|
+
}
|
|
667
|
+
|
|
663
668
|
handlers.dragstart = (view, _event) => {
|
|
664
669
|
let event = _event as DragEvent
|
|
665
670
|
let mouseDown = view.input.mouseDown
|
|
@@ -687,7 +692,7 @@ handlers.dragstart = (view, _event) => {
|
|
|
687
692
|
// See https://github.com/ProseMirror/prosemirror/issues/1156
|
|
688
693
|
event.dataTransfer.effectAllowed = "copyMove"
|
|
689
694
|
if (!brokenClipboardAPI) event.dataTransfer.setData("text/plain", text)
|
|
690
|
-
view.dragging = new Dragging(slice,
|
|
695
|
+
view.dragging = new Dragging(slice, dragMoves(view, event), node)
|
|
691
696
|
}
|
|
692
697
|
|
|
693
698
|
handlers.dragend = view => {
|
|
@@ -716,7 +721,7 @@ editHandlers.drop = (view, _event) => {
|
|
|
716
721
|
slice = parseFromClipboard(view, getText(event.dataTransfer),
|
|
717
722
|
brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse)
|
|
718
723
|
}
|
|
719
|
-
let move = !!(dragging &&
|
|
724
|
+
let move = !!(dragging && dragMoves(view, event))
|
|
720
725
|
if (view.someProp("handleDrop", f => f(view, event, slice || Slice.empty, move))) {
|
|
721
726
|
event.preventDefault()
|
|
722
727
|
return
|
package/src/viewdesc.ts
CHANGED
|
@@ -135,7 +135,7 @@ const NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3
|
|
|
135
135
|
// basic structure and shared methods.
|
|
136
136
|
export class ViewDesc {
|
|
137
137
|
dirty = NOT_DIRTY
|
|
138
|
-
node
|
|
138
|
+
declare node: Node | null
|
|
139
139
|
|
|
140
140
|
constructor(
|
|
141
141
|
public parent: ViewDesc | undefined,
|