import React, { useRef, useState, forwardRef } from "react"; import styles from "./PopoverMenu.module.css"; import { useMenuTriggerState } from "@react-stately/menu"; import { useButton } from "@react-aria/button"; import { useMenu, useMenuItem, useMenuTrigger } from "@react-aria/menu"; import { useTreeState } from "@react-stately/tree"; import { Item } from "@react-stately/collections"; import { mergeProps } from "@react-aria/utils"; import { FocusScope } from "@react-aria/focus"; import { useFocus } from "@react-aria/interactions"; import { useOverlay, DismissButton, useOverlayPosition, OverlayContainer, } from "@react-aria/overlays"; import classNames from "classnames"; export function PopoverMenu({ children, placement, ...rest }) { const popoverMenuState = useMenuTriggerState(rest); const buttonRef = useRef(); const { menuTriggerProps, menuProps } = useMenuTrigger( {}, popoverMenuState, buttonRef ); const popoverRef = useRef(); const { overlayProps: positionProps } = useOverlayPosition({ targetRef: buttonRef, overlayRef: popoverRef, placement: placement || "top", offset: 5, isOpen: popoverMenuState.isOpen, }); if ( !Array.isArray(children) || children.length > 2 || typeof children[1] !== "function" ) { throw new Error( "PopoverMenu must have two props. The first being a button and the second being a render prop." ); } const [popoverTrigger, popover] = children; return (