refactor(BlockEditor): replace hover-based submenu open/close with click-toggle

- remove timer-based submenu close logic (scheduleSubmenuClose, cancelSubmenuClose, submenuTimerRef) from BlockActionsMenu
- replace onMouseEnter/onMouseLeave handlers with onClick toggle on submenu trigger
- remove SUBMENU_CLOSE_DELAY constant and hover handlers from inline Toolbar submenus
- update README to reflect click-to-open/close-on-outside-click behavior for all submenus
This commit is contained in:
2026-04-26 15:53:21 -04:00
parent d7e723770f
commit 543c4f5029
3 changed files with 50 additions and 81 deletions
+8 -6
View File
@@ -135,10 +135,11 @@ L'état actif est calculé à partir des marks **communes à toute la plage**
La toolbar est rendue en `position: absolute` à l'intérieur du container
relatif de l'éditeur et **suit la sélection lors du scroll**. Les sous-menus
(couleur, surlignage, lien) s'ouvrent **au survol** avec une fenêtre de
fermeture de 120 ms — même idiome que le sous-menu *Transformer ▸* du menu
d'actions, mais en drop-down (vers le bas) plutôt qu'à droite. Une petite
flèche `▾` après le glyphe principal indique la présence du sous-menu.
(couleur, surlignage, lien) s'ouvrent **au clic** sur leur trigger et restent
ouverts jusqu'à un clic extérieur ou `Escape` — même idiome que le sous-menu
*Transformer ▸* du menu d'actions, mais en drop-down (vers le bas) plutôt qu'à
droite. Une petite flèche `▾` après le glyphe principal indique la présence du
sous-menu.
## Popover de lien
@@ -178,8 +179,9 @@ Les icônes proviennent de [`src/shared/icons/index.js`](../../icons/index.js).
## Menu d'actions du bloc
- **Transformer ▸** — sous-menu qui s'ouvre au survol, listant les types de
blocs texte disponibles (paragraphe, titres 1 à 6, listes, citation, code)
- **Transformer ▸** — sous-menu qui s'ouvre au clic (et se ferme sur clic
extérieur ou `Escape`), listant les types de blocs texte disponibles
(paragraphe, titres 1 à 6, listes, citation, code)
avec une icône en boîte. Cliquer sur un type remplace le bloc courant en
conservant son contenu inline. L'item est masqué pour les blocs non-texte
(image, séparateur). Le filtrage respecte la prop `enabledBlocks`.