import { useLayoutEffect, useRef, useState, type ReactNode, type RefObject } from "react"; import { createPortal } from "react-dom"; /** Move the live panel without resetting filters, report state or pending input. */ export function ScheduledConditionWorkspace({ docked, dockTarget, hidden, children }: { docked: boolean; dockTarget: RefObject; hidden: boolean; children: ReactNode; }) { const floating = useRef(null); const restoreFocus = useRef(false); const [host] = useState(() => { const element = document.createElement("div"); element.className = "h-full min-h-0 min-w-0"; return element; }); useLayoutEffect(() => { const target = docked ? dockTarget.current : floating.current; target?.append(host); // Moving the host can drop keyboard focus. Restore the corresponding control. if (restoreFocus.current && !hidden) host.querySelector("[data-condition-dock-toggle]")?.focus({ preventScroll: true }); return () => { restoreFocus.current = host.contains(document.activeElement); host.remove(); }; }, [dockTarget, docked, hidden, host]); return <>
{createPortal(children, host)} ; }