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
This commit is contained in:
2026-04-25 17:56:29 -04:00
parent 60689b8c4d
commit 14c2c3d6bf
2 changed files with 6 additions and 2 deletions
@@ -146,7 +146,11 @@ const Block = forwardRef(function Block(
if (e.key === 'Backspace') { if (e.key === 'Backspace') {
const el = editableRef.current; 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(); e.preventDefault();
onBackspaceAtStart?.({ blockId: block.id, text: el.textContent ?? '' }); onBackspaceAtStart?.({ blockId: block.id, text: el.textContent ?? '' });
} }
+1 -1
View File
@@ -54,7 +54,7 @@ couleur, lien). Phase 3 : `table`.
- `> ` → citation - `> ` → citation
- ` ``` ` → bloc de code - ` ``` ` → bloc de code
- `---` → séparateur - `---` → 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 - `Entrée` sur un item de liste vide → sort de la liste
- `Ctrl/Cmd + Z` / `Ctrl/Cmd + Shift + Z` → undo / redo - `Ctrl/Cmd + Z` / `Ctrl/Cmd + Shift + Z` → undo / redo