From 14c2c3d6bfb05760cfd29dfc6ae6f2d34571d53e Mon Sep 17 00:00:00 2001 From: Hyko Date: Sat, 25 Apr 2026 17:56:29 -0400 Subject: [PATCH] fix(BlockEditor): prevent block merge when backspace pressed with active selection - skip merge-with-previous-block trigger if selection is not collapsed - update README to document the collapsed-selection guard on Backspace --- src/shared/components/BlockEditor/Block.client.js | 6 +++++- src/shared/components/BlockEditor/README.md | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/shared/components/BlockEditor/Block.client.js b/src/shared/components/BlockEditor/Block.client.js index bde06e7..8a7f822 100644 --- a/src/shared/components/BlockEditor/Block.client.js +++ b/src/shared/components/BlockEditor/Block.client.js @@ -146,7 +146,11 @@ const Block = forwardRef(function Block( if (e.key === 'Backspace') { const el = editableRef.current; - if (el && isCaretAtStart(el)) { + const sel = typeof window !== 'undefined' ? window.getSelection() : null; + // Si une sélection non-vide existe (ex. après Ctrl+A), laisser le + // navigateur supprimer le texte sélectionné — ne pas déclencher le + // merge avec le bloc précédent. + if (el && sel?.isCollapsed !== false && isCaretAtStart(el)) { e.preventDefault(); onBackspaceAtStart?.({ blockId: block.id, text: el.textContent ?? '' }); } diff --git a/src/shared/components/BlockEditor/README.md b/src/shared/components/BlockEditor/README.md index 931e5cf..9afd2d7 100644 --- a/src/shared/components/BlockEditor/README.md +++ b/src/shared/components/BlockEditor/README.md @@ -54,7 +54,7 @@ couleur, lien). Phase 3 : `table`. - `> ` → citation - ` ``` ` → bloc de code - `---` → séparateur -- `Backspace` au début d'un bloc typé → repasse en paragraphe ; au début d'un paragraphe, fusionne avec le bloc précédent +- `Backspace` au début d'un bloc typé → repasse en paragraphe ; au début d'un paragraphe, fusionne avec le bloc précédent (uniquement si la sélection est repliée — sinon le navigateur supprime le texte sélectionné, ex. après `Ctrl+A`) - `Entrée` sur un item de liste vide → sort de la liste - `Ctrl/Cmd + Z` / `Ctrl/Cmd + Shift + Z` → undo / redo