diff --git a/packages/editor/patches/prosemirror-view+1.42.2.patch b/packages/editor/patches/prosemirror-view+1.42.2.patch index 4d18741e8..cd634230c 100644 --- a/packages/editor/patches/prosemirror-view+1.42.2.patch +++ b/packages/editor/patches/prosemirror-view+1.42.2.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/prosemirror-view/dist/index.cjs b/node_modules/prosemirror-view/dist/index.cjs -index a615cb7..c9b1f46 100644 +index a615cb7..9ba1d10 100644 --- a/node_modules/prosemirror-view/dist/index.cjs +++ b/node_modules/prosemirror-view/dist/index.cjs @@ -1005,8 +1005,8 @@ var ViewDesc = function () { @@ -12,7 +12,29 @@ index a615cb7..c9b1f46 100644 if (anchor != head) domSel.extend(headDOM.node, headDOM.offset); domSelExtended = true; } catch (_) {} -@@ -3647,7 +3647,7 @@ function handleDrop(view, event, dragging) { +@@ -2935,6 +2935,7 @@ var InputState = _createClass(function InputState() { + this.lastSelectionOrigin = null; + this.lastSelectionTime = 0; + this.lastIOSEnter = 0; ++ this.lastAndroidEnter = 0; + this.lastIOSEnterFallbackTimeout = -1; + this.lastFocus = 0; + this.lastTouch = 0; +@@ -3003,11 +3004,12 @@ function _dispatchEvent(view, event) { + } + editHandlers.keydown = function (view, _event) { + var event = _event; ++ if (android && event.keyCode == 13) view.input.lastAndroidEnter = Date.now(); + view.input.shiftKey = event.keyCode == 16 || event.shiftKey; + if (inOrNearComposition(view)) return; + view.input.lastKeyCode = event.keyCode; + view.input.lastKeyCodeTime = Date.now(); +- if (android && chrome && event.keyCode == 13) return; ++ if (android && chrome && event.keyCode == 13 && view.state.selection.empty) return; + if (event.keyCode != 229) view.domObserver.forceFlush(); + if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) { + var now = Date.now(); +@@ -3647,7 +3649,7 @@ function handleDrop(view, event, dragging) { }); tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end))); } @@ -21,17 +43,29 @@ index a615cb7..c9b1f46 100644 view.dispatch(tr.setMeta("uiEvent", "drop")); } handlers.focus = function (view) { -@@ -4881,7 +4881,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) { +@@ -3674,6 +3676,7 @@ handlers.blur = function (view, _event) { + }; + handlers.beforeinput = function (view, _event) { + var event = _event; ++ if (android && /^insert(Paragraph|LineBreak)/.test(event.inputType)) view.input.lastAndroidEnter = Date.now(); + if (android && event.inputType == "deleteContentBackward") { + view.domObserver.flushSoon(); + var domChangeCount = view.input.domChangeCount; +@@ -4881,10 +4884,11 @@ function readDOMChange(view, from, to, typeOver, addedNodes) { var inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA; if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(function (n) { return n.nodeName == "DIV" || n.nodeName == "P"; - })) || !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", ""))) && view.someProp("handleKeyDown", function (f) { -+ })) || change.endB > change.endA && !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", ""))) && view.someProp("handleKeyDown", function (f) { ++ })) || (!android || view.input.lastAndroidEnter > Date.now() - 225) && !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", ""))) && view.someProp("handleKeyDown", function (f) { return f(view, keyEvent(13, "Enter")); })) { view.input.lastIOSEnter = 0; ++ view.input.lastAndroidEnter = 0; + return; + } + if (view.state.selection.anchor > change.start && looksLikeBackspace(doc, change.start, change.endA, $from, $to) && view.someProp("handleKeyDown", function (f) { diff --git a/node_modules/prosemirror-view/dist/index.js b/node_modules/prosemirror-view/dist/index.js -index 61118ee..c8c510b 100644 +index 61118ee..8484889 100644 --- a/node_modules/prosemirror-view/dist/index.js +++ b/node_modules/prosemirror-view/dist/index.js @@ -1079,8 +1079,8 @@ class ViewDesc { @@ -44,7 +78,33 @@ index 61118ee..c8c510b 100644 if (anchor != head) domSel.extend(headDOM.node, headDOM.offset); domSelExtended = true; -@@ -3885,7 +3885,7 @@ function handleDrop(view, event, dragging) { +@@ -3098,6 +3098,7 @@ class InputState { + this.lastSelectionTime = 0; + this.lastIOSEnter = 0; + this.lastIOSEnterFallbackTimeout = -1; ++ this.lastAndroidEnter = 0; + this.lastFocus = 0; + this.lastTouch = 0; + this.lastChromeDelete = 0; +@@ -3175,6 +3176,8 @@ function dispatchEvent(view, event) { + } + editHandlers.keydown = (view, _event) => { + let event = _event; ++ if (android && event.keyCode == 13) ++ view.input.lastAndroidEnter = Date.now(); + view.input.shiftKey = event.keyCode == 16 || event.shiftKey; + if (inOrNearComposition(view)) + return; +@@ -3183,7 +3186,7 @@ editHandlers.keydown = (view, _event) => { + // Suppress enter key events on Chrome Android, because those tend + // to be part of a confused sequence of composition events fired, + // and handling them eagerly tends to corrupt the input. +- if (android && chrome && event.keyCode == 13) ++ if (android && chrome && event.keyCode == 13 && view.state.selection.empty) + return; + if (event.keyCode != 229) + view.domObserver.forceFlush(); +@@ -3885,7 +3888,7 @@ function handleDrop(view, event, dragging) { tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo); tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end))); } @@ -53,12 +113,26 @@ index 61118ee..c8c510b 100644 view.dispatch(tr.setMeta("uiEvent", "drop")); } handlers.focus = view => { -@@ -5193,7 +5193,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) { +@@ -3914,6 +3917,8 @@ handlers.blur = (view, _event) => { + }; + handlers.beforeinput = (view, _event) => { + let event = _event; ++ if (android && /^insert(Paragraph|LineBreak)/.test(event.inputType)) ++ view.input.lastAndroidEnter = Date.now(); + // We should probably do more with beforeinput events, but support + // is so spotty that I'm still waiting to see where they are going. + // Very specific hack to deal with backspace sometimes failing on +@@ -5193,11 +5198,12 @@ function readDOMChange(view, from, to, typeOver, addedNodes) { // as being an iOS enter press), just dispatch an Enter key instead. if (((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) || - (!inlineChange && $from.pos < parse.doc.content.size && -+ (change.endB > change.endA && !inlineChange && $from.pos < parse.doc.content.size && ++ ((!android || view.input.lastAndroidEnter > Date.now() - 225) && !inlineChange && $from.pos < parse.doc.content.size && (!$from.sameParent($to) || !$from.parent.inlineContent) && $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", "")))) && view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) { + view.input.lastIOSEnter = 0; ++ view.input.lastAndroidEnter = 0; + return; + } + // Same for backspace