/**
 * `<Menu.Popup>` — the popup container rendered inside `<Menu.Positioner>`.
 * Mirrors `packages/react/src/menu/popup/MenuPopup.tsx`.
 *
 * Wraps `FloatingFocusManager` to trap focus while open (modal) or keep
 * focus reachable while open (non-modal). Carries role="menu" from
 * `useRole`.
 *
 * ### Port deviations
 *
 *  - `useHoverFloatingInteraction` keeps the popup open while the cursor
 *    is over the menu surface during hover-open sessions.
 *  - `finalFocus` accepts the same shape as React but the interaction-type
 *    callback form is not ported.
 */

import { dynamic } from "@solidjs/web";
import { createMemo, omit } from "solid-js";
import { composeRefs, userRef } from "../../internals/compose-refs.jsx";
import { FloatingFocusManager } from "../../internals/floating-ui/components/floating-focus-manager.jsx";
import { useHoverFloatingInteraction } from "../../internals/floating-ui/hooks/use-hover-floating-interaction.jsx";
import { mergeRootProps } from "../../internals/merge-root-props.jsx";
import { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { useMenuPositionerContext } from "../positioner/menu-positioner-context.jsx";
import { useMenuRootContext } from "../root/menu-root-context.jsx";
export function MenuPopup(props) {
  const root = useMenuRootContext();
  const positioner = useMenuPositionerContext();
  useHoverFloatingInteraction(root.floatingRootContext, {
    enabled: () => root.open(),
    closeDelay: () => 0
  });
  const setPopupRef = el => {
    root.popupRef.current = el;
  };
  const state = createMemo(() => ({
    open: root.open(),
    side: positioner.side(),
    align: positioner.align(),
    transitionStatus: root.transitionStatus(),
    nested: root.nested(),
    instant: root.instantType()
  }));
  const internal = {
    get "aria-labelledby"() {
      return root.activeTriggerElement()?.id ?? "";
    },
    get "aria-orientation"() {
      return root.orientation();
    },
    get "data-rootownerid"() {
      return root.rootId();
    },
    get "data-open"() {
      return state().open ? "" : undefined;
    },
    get "data-closed"() {
      return state().open ? undefined : "";
    },
    get "data-side"() {
      return state().side;
    },
    get "data-align"() {
      return state().align;
    },
    get "data-nested"() {
      return state().nested ? "" : undefined;
    },
    get "data-instant"() {
      return state().instant ? "" : undefined;
    },
    get "data-starting-style"() {
      return state().transitionStatus === "starting" ? "" : undefined;
    },
    get "data-ending-style"() {
      return state().transitionStatus === "ending" ? "" : undefined;
    }
  };
  const userClassStyle = resolveClassStyle(props, () => state());
  const userProps = omit(props, "as", "class", "style", "attrs", "finalFocus");
  let merged = mergeRootProps(root.interactions.getFloatingProps(), internal);
  merged = mergeRootProps(merged, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const Tag = dynamic(() => props.as ?? "div");
  const popupElement = <Tag {...merged} ref={composeRefs(setPopupRef, userRef(props))} />;
  return <FloatingFocusManager context={root.floatingRootContext} modal={root.modal()} disabled={!root.mounted()} initialFocus={!root.nested()} returnFocus={props.finalFocus ?? true} restoreFocus="popup">
			{popupElement}
		</FloatingFocusManager>;
}
//# sourceMappingURL=menu-popup.jsx.map
