From a6c322f61749067e9d853ea159ce4b06ceeca1d2 Mon Sep 17 00:00:00 2001 From: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Date: Thu, 2 Jul 2026 13:52:45 +0300 Subject: [PATCH 1/2] Fix backspace after slash deleting a rich-text widget --- .changeset/rich-text-insert-menu-backspace.md | 5 +++++ .../ui/apos/components/TheAposCommandMenu.vue | 4 ++++ .../components/AposRichTextWidgetEditor.vue | 11 ++++++++++- .../apos/components/AposTiptapInsertItem.vue | 17 +++-------------- .../ui/apos/lib/remove-slash.js | 18 ++++++++++++++++++ 5 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 .changeset/rich-text-insert-menu-backspace.md create mode 100644 packages/apostrophe/modules/@apostrophecms/rich-text-widget/ui/apos/lib/remove-slash.js diff --git a/.changeset/rich-text-insert-menu-backspace.md b/.changeset/rich-text-insert-menu-backspace.md new file mode 100644 index 0000000000..4993e8412f --- /dev/null +++ b/.changeset/rich-text-insert-menu-backspace.md @@ -0,0 +1,5 @@ +--- +"apostrophe": patch +--- + +Fixed pressing Backspace right after typing `/` in a rich text widget deleting the entire widget. Backspace now removes the slash and closes the insert menu. Global command menu shortcuts also no longer fire for key events already handled and prevented by other UI components. diff --git a/packages/apostrophe/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue b/packages/apostrophe/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue index 6003a5830d..2ebb4ffe22 100644 --- a/packages/apostrophe/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +++ b/packages/apostrophe/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue @@ -97,6 +97,10 @@ export default { : properties.itemName || 'default'; }, keyboardShortcutListener(event) { + // Keys already handled by more specific UI must not trigger shortcuts + if (event.defaultPrevented) { + return; + } if (event.target.nodeName !== 'INPUT' && event.target.nodeName !== 'TEXTAREA' && document.activeElement.contentEditable !== 'true') { const key = [ [ 'ALT', event.altKey ], diff --git a/packages/apostrophe/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue b/packages/apostrophe/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue index df58ce31c0..7dc500a506 100644 --- a/packages/apostrophe/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +++ b/packages/apostrophe/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue @@ -52,6 +52,7 @@ :editor="editor" role="listbox" tabindex="0" + @keydown="closeInsertMenu" >