import { OverrideComponentProps, mergeRefs } from "@kobalte/utils"; import { type Component, type ValidComponent, splitProps } from "solid-js"; import createPreventScroll from "solid-prevent-scroll"; import type { ElementOf, PolymorphicProps } from "../polymorphic"; import { MenuContentBase, type MenuContentBaseCommonProps, type MenuContentBaseOptions, type MenuContentBaseRenderProps, } from "./menu-content-base"; import { useMenuContext } from "./menu-context"; import { useMenuRootContext } from "./menu-root-context"; export interface MenuContentOptions extends MenuContentBaseOptions {} export interface MenuContentCommonProps extends MenuContentBaseCommonProps {} export interface MenuContentRenderProps extends MenuContentCommonProps, MenuContentBaseRenderProps {} export type MenuContentProps< T extends ValidComponent | HTMLElement = HTMLElement, > = MenuContentOptions & Partial>>; export function MenuContent( props: PolymorphicProps>, ) { let ref: HTMLElement | undefined; const rootContext = useMenuRootContext(); const context = useMenuContext(); const [local, others] = splitProps(props as MenuContentProps, ["ref"]); createPreventScroll({ element: () => ref ?? null, enabled: () => context.contentPresent() && rootContext.preventScroll(), }); return ( > > ref={mergeRefs((el) => { ref = el; }, local.ref)} {...others} /> ); }