import { flip, FloatingPortal, offset, Placement, useFloating, } from "@floating-ui/react-dom-interactions"; import { Menu } from "@headlessui/react"; import clsx from "clsx"; import { motion } from "framer-motion"; import * as React from "react"; import { transformOriginByPlacement } from "utils/constants"; import { stopPropagation } from "utils/stop-propagation"; const MotionMenuItems = motion(Menu.Items); export interface DropdownProps { trigger?: React.ReactNode; children?: React.ReactNode; className?: string; placement?: Placement; } const Dropdown: React.VoidFunctionComponent = ({ children, className, trigger, placement: preferredPlacement, }) => { const { reference, floating, x, y, strategy, placement } = useFloating({ placement: preferredPlacement, middleware: [offset(5), flip()], }); const animationOrigin = transformOriginByPlacement[placement]; return ( {({ open }) => ( <> {trigger} {open ? ( {children} ) : null} )} ); }; export const DropdownItem: React.VoidFunctionComponent<{ icon?: React.ComponentType<{ className?: string }>; label?: React.ReactNode; disabled?: boolean; onClick?: () => void; }> = ({ icon: Icon, label, onClick, disabled }) => { return ( {({ active }) => ( )} ); }; export default Dropdown;