From 130060464ddaa9a1828f1acea7375eb3bd48c3d1 Mon Sep 17 00:00:00 2001 From: Eugeny Date: Sun, 24 May 2026 01:54:21 +0300 Subject: [PATCH 1/2] fix(blockSelection): prevent character duplication when replacing selected blocks --- src/components/modules/blockSelection.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/modules/blockSelection.ts b/src/components/modules/blockSelection.ts index a6edcb8c8..a65445d17 100644 --- a/src/components/modules/blockSelection.ts +++ b/src/components/modules/blockSelection.ts @@ -252,7 +252,9 @@ export default class BlockSelection extends Module { * * @see https://developer.mozilla.org/ru/docs/Web/API/KeyboardEvent/key */ - Caret.insertContentAtCaretPosition(eventKey.length > 1 ? '' : eventKey); + if (eventKey.length > 1) { + Caret.insertContentAtCaretPosition(''); + } // eslint-disable-next-line @typescript-eslint/no-magic-numbers }, 20)(); } From 3ab5f94c546496bc4764a6804e9d1bc11d9dccff Mon Sep 17 00:00:00 2001 From: Eugeny Date: Mon, 25 May 2026 00:52:15 +0300 Subject: [PATCH 2/2] fix(blockEvents): Allow Shift+printable key input to replace selected blocks --- src/components/modules/blockEvents.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/modules/blockEvents.ts b/src/components/modules/blockEvents.ts index 40e0973e2..3f00f3557 100644 --- a/src/components/modules/blockEvents.ts +++ b/src/components/modules/blockEvents.ts @@ -93,7 +93,10 @@ export default class BlockEvents extends Module { * - close Toolbar * - clear block highlighting */ - if (_.isPrintableKey(event.keyCode)) { + + const isPrintableKey = _.isPrintableKey(event.keyCode); + + if (isPrintableKey) { this.Editor.Toolbar.close(); /** @@ -101,7 +104,7 @@ export default class BlockEvents extends Module { * * @type {boolean} */ - const isShortcut = event.ctrlKey || event.metaKey || event.altKey || event.shiftKey; + const isShortcut = event.ctrlKey || event.metaKey || event.altKey || (event.shiftKey && !isPrintableKey); if (!isShortcut) { this.Editor.BlockSelection.clearSelection(event); @@ -660,15 +663,16 @@ export default class BlockEvents extends Module { const toolboxItemSelected = (event.keyCode === _.keyCodes.ENTER && this.Editor.Toolbar.toolbox.opened), blockSettingsItemSelected = (event.keyCode === _.keyCodes.ENTER && this.Editor.BlockSettings.opened), inlineToolbarItemSelected = (event.keyCode === _.keyCodes.ENTER && this.Editor.InlineToolbar.opened), - flippingToolbarItems = event.keyCode === _.keyCodes.TAB; + flippingToolbarItems = event.keyCode === _.keyCodes.TAB, + shiftKeyEventEmitted = event.shiftKey && !_.isPrintableKey(event.keyCode); /** * Do not close Toolbar in cases: - * 1. ShiftKey pressed (or combination with shiftKey) + * 1. ShiftKey event emitted * 2. When Toolbar is opened and Tab leafs its Tools * 3. When Toolbar's component is opened and some its item selected */ - return !(event.shiftKey || + return !(shiftKeyEventEmitted || flippingToolbarItems || toolboxItemSelected || blockSettingsItemSelected ||