diff --git a/src/shared/components/BlockEditor/Block.client.js b/src/shared/components/BlockEditor/Block.client.js index 1f6f313..4279aae 100644 --- a/src/shared/components/BlockEditor/Block.client.js +++ b/src/shared/components/BlockEditor/Block.client.js @@ -159,6 +159,26 @@ function BlockActionsMenu({ 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'); + + useLayoutEffect(() => { + if (!submenuOpen) return; + const trigger = submenuTriggerRef.current; + const panel = submenuPanelRef.current; + if (!trigger || !panel || typeof window === 'undefined') return; + const triggerRect = trigger.getBoundingClientRect(); + const panelHeight = panel.getBoundingClientRect().height; + const vh = window.innerHeight; + const spaceBelow = vh - triggerRect.top - DROPDOWN_VIEWPORT_MARGIN; + const spaceAbove = triggerRect.bottom - DROPDOWN_VIEWPORT_MARGIN; + if (panelHeight > spaceBelow && spaceAbove > spaceBelow) { + setSubmenuSide('above'); + } else { + setSubmenuSide('below'); + } + }, [submenuOpen, transformOptions]); function scheduleSubmenuClose() { if (submenuTimerRef.current) clearTimeout(submenuTimerRef.current); @@ -236,6 +256,7 @@ function BlockActionsMenu({