import React from 'react'; import { Theme } from '../../theme'; import { BaseComponentProps, Placement, SizeValue, Trigger } from '../../types'; import { ClassBaseBuilder } from '../../utils/className'; export type AutoCloseListeners = 'scroll' | 'resize' | 'click-item' | 'click-menu' | 'click-outside'; export interface DropdownMenuItem { id: string; content: string | JSX.Element; preventDefault?: boolean; onClick?: (item: DropdownMenuItem) => void; linkTo?: string; disabled?: boolean; destructive?: boolean; } export type DropdownItem = DropdownMenuItem | (() => JSX.Element); export interface DropdownProps extends BaseComponentProps { items: DropdownItem[]; width?: SizeValue; height?: SizeValue; placement?: Placement; trigger?: Trigger; searchable?: boolean; open?: boolean; closeOnWindowScroll?: boolean; closeOnWindowResize?: boolean; closeOnItemClick?: boolean; closeOnOutsideClick?: boolean; closeOnMenuClick?: boolean; disableAutoCloseWhenClosest?: string[]; customMenu?: (props: Omit) => JSX.Element; onOpen?: () => void; onClose?: () => void; onToggle?: (open: boolean) => void; onChange?: (item: DropdownMenuItem) => void; children: JSX.Element | React.ReactNode; } export type MenuProps = Pick, 'items' | 'height' | 'width' | 'placement' | 'searchable'> & { theme: Theme; classBuilder: ClassBaseBuilder; onChange?: DropdownProps['onChange']; };