import {flip, offset, shift, useFloating} from '@floating-ui/react' import {Popover, PopoverButton, PopoverPanel, Transition} from '@headlessui/react' import {ChevronDownIcon, ChevronUpIcon, EllipsisHorizontalIcon} from '@heroicons/react/24/solid' import clsx from 'clsx' import {toKey} from 'common/parsing' import {Fragment, ReactNode} from 'react' import {Col} from 'web/components/layout/col' import {Row} from 'web/components/layout/row' import {useT} from 'web/lib/locale' export type DropdownItem = { name: string icon?: ReactNode onClick: () => void | Promise } export default function DropdownMenu(props: { items: DropdownItem[] icon?: ReactNode menuWidth?: string buttonClass?: string className?: string menuItemsClass?: string buttonDisabled?: boolean selectedItemName?: string closeOnClick?: boolean withinOverflowContainer?: boolean buttonContent?: (open: boolean) => ReactNode }) { const { items, menuItemsClass, menuWidth, buttonClass, className, buttonDisabled, selectedItemName, closeOnClick, withinOverflowContainer, buttonContent, } = props const {refs, floatingStyles} = useFloating({ strategy: withinOverflowContainer ? 'fixed' : 'absolute', middleware: [offset(8), flip(), shift({padding: 8})], }) const icon = props.icon ??