From ff10c2ffea2475ba8fb49f919cf597542bdfc2b6 Mon Sep 17 00:00:00 2001 From: Hyko Date: Sun, 26 Apr 2026 15:45:18 -0400 Subject: [PATCH] fix(ui): prevent inline toolbar from hiding when interacting with submenus - keep toolbar visible when focus moves to an element inside `[data-inline-toolbar]` - unpin toolbar on cleanup when submenu closes to avoid stale pinned state --- src/shared/components/BlockEditor/BlockEditor.client.js | 4 ++++ src/shared/components/BlockEditor/inline/Toolbar.client.js | 1 + 2 files changed, 5 insertions(+) diff --git a/src/shared/components/BlockEditor/BlockEditor.client.js b/src/shared/components/BlockEditor/BlockEditor.client.js index 34f6f3f..f74f1e6 100644 --- a/src/shared/components/BlockEditor/BlockEditor.client.js +++ b/src/shared/components/BlockEditor/BlockEditor.client.js @@ -579,6 +579,10 @@ export default function BlockEditor({ // passe sur l'input/bouton et la sélection peut paraître hors-bloc : // on garde la toolbar visible. if (toolbarPinnedRef.current) return; + if (typeof document !== 'undefined') { + const active = document.activeElement; + if (active instanceof Element && active.closest('[data-inline-toolbar]')) return; + } const sel = typeof window !== 'undefined' ? window.getSelection() : null; if (!sel || sel.rangeCount === 0 || sel.isCollapsed) { setToolbar(null); diff --git a/src/shared/components/BlockEditor/inline/Toolbar.client.js b/src/shared/components/BlockEditor/inline/Toolbar.client.js index b0bb379..0ae20cb 100644 --- a/src/shared/components/BlockEditor/inline/Toolbar.client.js +++ b/src/shared/components/BlockEditor/inline/Toolbar.client.js @@ -47,6 +47,7 @@ export default function InlineToolbar({ rect, activeMarks, onToggleMark, onSetMa useEffect(() => { onPinChange?.(openSubmenu !== null); + return () => { onPinChange?.(false); }; }, [openSubmenu, onPinChange]); useLayoutEffect(() => {