import { MenuListProps, MenuPopoverProps, MenuProps, SplitButtonProps } from '@fluentui/react-components';
import React, { MutableRefObject } from 'react';
import { ButtonEXProps } from '../types';
interface iMenuItemEXItem {
    type?: "item";
    title: string;
    onClick: (e: React.MouseEvent) => void;
    disabled?: boolean;
    icon?: JSX.Element;
    items?: iMenuItemEX[];
    checked?: boolean;
    /** render this control instead of the item IMPORTANT! pass in a key to this control */
    as?: JSX.Element;
}
interface iMenuItemEXSeparator {
    type: "separator";
}
interface iMenuItemEXGroup {
    type: "group";
    title: string;
    items: (iMenuItemEX & {
        type?: "separator" | "item";
    })[];
}
export type iMenuItemEX = iMenuItemEXItem | iMenuItemEXSeparator | iMenuItemEXGroup;
interface IPropsBase {
    menuProps?: Partial<MenuProps>;
    menuPopOverProps?: MenuPopoverProps;
    menuListProps?: MenuListProps;
    items: iMenuItemEX[];
    /** default 8 null/false to disable */
    filterThreshold?: number | false;
    /** default 8, null/false to disable */
    pageSize?: number | false;
    closeMenu?: MutableRefObject<() => void>;
}
interface IPropsNoSplit {
    trigger: JSX.Element | string | ButtonEXProps;
    SplitButton?: false;
}
interface IPropsSplit {
    trigger: SplitButtonProps;
    /** send to to render trigger element as primary action on a split button. Only works with trigger as JSX.Element for primary button */
    SplitButton: true;
}
export type iMenuExProps = IPropsBase & (IPropsNoSplit | IPropsSplit);
export declare const MenuEx: React.FunctionComponent<React.PropsWithChildren<iMenuExProps>>;
export {};
