import type { JSX } from "@solidjs/web"; /** * Context exposed by `` to `` / ``. * Mirrors `packages/react/src/menu/positioner/MenuPositionerContext.ts`. */ import { type Accessor, createContext, useContext } from "solid-js"; import type { MutableRef } from "../../internals/floating-ui/types"; export type MenuSide = | "top" | "right" | "bottom" | "left" | "inline-start" | "inline-end" | "none"; export type MenuAlign = "start" | "center" | "end"; export interface MenuPositionerContextValue { side: Accessor; align: Accessor; anchorHidden: Accessor; arrowRef: MutableRef; arrowStyles: Accessor; arrowUncentered: Accessor; /** Floating-tree node id assigned to this positioner. */ nodeId: Accessor; } export const MenuPositionerContext = createContext(null); export function useMenuPositionerContext(): MenuPositionerContextValue; export function useMenuPositionerContext( optional: true, ): MenuPositionerContextValue | null; export function useMenuPositionerContext( optional?: boolean, ): MenuPositionerContextValue | null { const ctx = useContext(MenuPositionerContext); if (ctx == null && !optional) { throw new Error( "Base UI: MenuPositionerContext is missing. Positioner children must be placed within .", ); } return ctx; }