From 543c4f50295a2bf52bacfa7ae3eee21d06b8a34a Mon Sep 17 00:00:00 2001 From: Hyko Date: Sun, 26 Apr 2026 15:53:21 -0400 Subject: [PATCH] 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 --- .../components/BlockEditor/Block.client.js | 27 +----- src/shared/components/BlockEditor/README.md | 14 +-- .../BlockEditor/inline/Toolbar.client.js | 90 ++++++++----------- 3 files changed, 50 insertions(+), 81 deletions(-) diff --git a/src/shared/components/BlockEditor/Block.client.js b/src/shared/components/BlockEditor/Block.client.js index 6c66bf7..adc78b0 100644 --- a/src/shared/components/BlockEditor/Block.client.js +++ b/src/shared/components/BlockEditor/Block.client.js @@ -159,7 +159,6 @@ function BlockActionsMenu({ const triggerRef = useRef(null); const { side } = useDropdownPlacement(open, triggerRef); const [submenuOpen, setSubmenuOpen] = useState(false); - const submenuTimerRef = useRef(null); const submenuTriggerRef = useRef(null); const submenuPanelRef = useRef(null); const [submenuSide, setSubmenuSide] = useState('below'); @@ -181,21 +180,6 @@ function BlockActionsMenu({ } }, [submenuOpen, transformOptions]); - function scheduleSubmenuClose() { - if (submenuTimerRef.current) clearTimeout(submenuTimerRef.current); - submenuTimerRef.current = setTimeout(() => setSubmenuOpen(false), 120); - } - function cancelSubmenuClose() { - if (submenuTimerRef.current) { - clearTimeout(submenuTimerRef.current); - submenuTimerRef.current = null; - } - } - - useEffect(() => () => { - if (submenuTimerRef.current) clearTimeout(submenuTimerRef.current); - }, []); - // Fermeture sur clic extérieur ou Escape. useEffect(() => { if (!open) return; @@ -256,14 +240,11 @@ function BlockActionsMenu({ >
{transformOptions.length > 0 && ( -
{ cancelSubmenuClose(); setSubmenuOpen(true); }} - onMouseLeave={scheduleSubmenuClose} - > +
setSubmenuOpen(prev => !prev)} className={`${ITEM_CLASS} ${submenuOpen ? 'bg-neutral-100 dark:bg-white/5 text-neutral-900 dark:text-white' : ''}`} > @@ -274,8 +255,6 @@ function BlockActionsMenu({
{transformOptions.map((d) => ( {open && ( -
+
{children}
)}