import React, { createContext, forwardRef, ReactElement, ReactNode, useContext, useMemo, useState, } from "react"; import classNames from "classnames"; import { Popover } from "../Popover"; import { Icon, ICON_TYPE } from "../Icon"; import { MenuItem } from "./MenuItem"; import { PopperPlacement } from "../../types"; type MenuItemMenuContextType = { isOpen: boolean; setIsOpen: (isOpen: boolean) => void; }; const MenuItemMenuContext = createContext({ isOpen: false, setIsOpen: () => undefined, }); export const useMenuItemMenuContext = () => { return useContext(MenuItemMenuContext); }; export const MenuItemMenuCaretIcon = ({ className, }: { className?: string; }) => { return ( ); }; export const MenuItemMenuReference = forwardRef< HTMLDivElement, { children: ReactNode; onClick?: () => void; isSelected?: boolean; isHighlighted?: boolean; disabled?: boolean; className?: string; } >( ( { children, onClick, isSelected = false, isHighlighted = false, disabled = false, className, }, ref, ) => { const { setIsOpen } = useMenuItemMenuContext(); const onMouseEnter = () => { if (!disabled) { setIsOpen(true); } }; const onMouseLeave = () => { if (!disabled) { setIsOpen(false); } }; return ( {children} ); }, ); export const MenuItemMenuRoot = ({ referenceElement, children, placement = "right-start", popperModifiers = [], className, }: { referenceElement: ReactElement; children: ReactNode; placement?: PopperPlacement; popperModifiers?: Record[]; className?: string; }) => { const [isOpen, setIsOpen] = useState(false); const defaultOffsetModifier = [ { name: "offset", options: { offset: [0, 0], }, }, ]; const contextValue = useMemo(() => ({ isOpen, setIsOpen }), [ isOpen, setIsOpen, ]); return ( setIsOpen(true)} onMouseLeave={() => setIsOpen(false)} popperModifiers={[...defaultOffsetModifier, ...popperModifiers]} referenceElement={referenceElement} > {children} ); };