From 828cca7386149c0a83ecf3334b523cbb0e7e76c3 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Wed, 20 Dec 2023 16:16:57 +0200
Subject: [PATCH] fix fake cursor on backspace

---
 .../src/config/plugins/FakeCursorPlugin.js    | 45 +++++++++++--------
 wax-prosemirror-core/src/styles/styles.css    |  2 +-
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/wax-prosemirror-core/src/config/plugins/FakeCursorPlugin.js b/wax-prosemirror-core/src/config/plugins/FakeCursorPlugin.js
index c53bd01f9..b4cb4734a 100644
--- a/wax-prosemirror-core/src/config/plugins/FakeCursorPlugin.js
+++ b/wax-prosemirror-core/src/config/plugins/FakeCursorPlugin.js
@@ -11,27 +11,34 @@ export default props => {
       init: (_, state) => {},
       apply(tr, prev, _, newState) {
         let createDecoration;
-        const widget = document.createElement('span');
-        widget.setAttribute('id', 'fake-cursor');
 
-        if (newState.selection.from === newState.selection.to) {
-          createDecoration = DecorationSet.create(newState.doc, [
-            Decoration.widget(newState.selection.from, widget, {
-              key: 'fakecursor',
-            }),
-          ]);
-        }
-        setTimeout(() => {
-          widget.setAttribute('contenteditable', true);
-          if (
-            navigator.userAgent.includes('Firefox') &&
-            newState.selection.$from.nodeBefore === null
-          ) {
-            widget.setAttribute('style', 'visibility:hidden');
-          } else {
-            widget.setAttribute('style', 'display:none');
+        if (
+          tr.steps.length === 0 ||
+          (tr.steps[0] && tr.steps[0].from === tr.steps[0].to)
+        ) {
+          const widget = document.createElement('span');
+          widget.setAttribute('id', 'fake-cursor');
+
+          if (newState.selection.from === newState.selection.to) {
+            createDecoration = DecorationSet.create(newState.doc, [
+              Decoration.widget(newState.selection.from, widget, {
+                key: 'fakecursor',
+              }),
+            ]);
           }
-        });
+          setTimeout(() => {
+            widget.setAttribute('contenteditable', true);
+            if (
+              navigator.userAgent.includes('Firefox') &&
+              newState.selection.$from.nodeBefore === null
+            ) {
+              widget.setAttribute('style', 'visibility:hidden');
+            } else {
+              widget.setAttribute('style', 'display:none');
+            }
+          });
+        }
+
         return {
           createDecoration,
         };
diff --git a/wax-prosemirror-core/src/styles/styles.css b/wax-prosemirror-core/src/styles/styles.css
index 802fced80..c8a9e456b 100644
--- a/wax-prosemirror-core/src/styles/styles.css
+++ b/wax-prosemirror-core/src/styles/styles.css
@@ -235,7 +235,7 @@ img.ProseMirror-separator {
 }
 
 span#fake-cursor::before {
-  display: inline;
+  display: inline-flex;
   content: '';
   border-right: 1px solid black;
   height: 23px;
-- 
GitLab