/**
 * Copyright (c) Adaptavist, Inc.
 */
import { GenericProps } from '../../utilities';
import { HTMLAttributes, ReactNode } from 'react';
export interface MenuOption {
    /**
     * If the item key is not provided, them temporary item key will be `item-(n-1)`. Default is `item-(n-1)`.
     */
    itemKey?: string;
    /**
     * Used to specify selected item in the `Select` 'Option'. Default is `false`.
     */
    selected?: boolean;
    /**
     * Used to decide if the item should show interactive effect. Use when the hover effect is not required and the item is not disabled. Default is `false`.
     */
    interactive?: boolean;
    /**
     * Used to specify selected item in navigation. Default is `false`.
     */
    current?: boolean;
    /**
     * Used to specify if an item is diabled or not. Default is `false`.
     */
    disabled?: boolean;
    /**
     * The children elements to render inside the item. Default is `an empty object`.
     */
    children?: React.ReactNode;
    /**
     * The icon to display inside the item. Default is `an empty string`.
     */
    icon?: ReactNode;
}
export interface IMenuChangeProps {
    /**
     * An individual menu item's key. Default is `item-(n-1)`.
     */
    itemKey: string;
    /**
     * The children elements to render inside the item. Default is `an empty object`.
     */
    children?: React.ReactNode;
    /**
     * The function to run on selection / deselection of an item. Default is `an empty object`.
     */
    onChange?: (props: IMenuChangeProps | string[]) => void;
    /**
     * Should the menu allow multiple selections. Default is `false`.
     */
    isMultipleSelection?: boolean;
    /**
     * The currently selected item(s) in the menu. Default is `an empty object or string`.
     */
    selectedItem?: string | string[];
    /**
     * Used to decide if the item should show interactive effect. Use when the hover effect is not required and the item is not disabled. Default is `false`.
     */
    interactive?: boolean;
    /**
     * Used to specify if an item is disabled or not. Default is `false`.
     */
    disabled?: boolean;
}
export declare type IMenu = Omit<HTMLAttributes<HTMLUListElement>, 'onChange'> & GenericProps & {
    /**
     * The item key would have to be provided and correspond to the `Menu Item`'s itemKey for that `Menu * Item` to be disable. Default is `an empty string`.
     */
    disable?: string;
    hasBoxShadow?: boolean;
    /**
     * Should the menu allow multiple selections. Default is `false`.
     */
    isMultipleSelection?: boolean;
    /**
     * The selected item(s) in the menu. Default is `an empty string or object`.
     */
    selectedItem?: string | string[];
    /**
     * The current item(s) in the menu. Default is `an empty string or object`.
     */
    currentItem?: string | string[];
    /**
     * The function to run on selection / deselection of an item. Default is `an empty object`.
     */
    onChange?: (props: IMenuChangeProps | string[]) => void;
};
export declare type IMenuItem = Omit<HTMLAttributes<HTMLLIElement>, 'onChange'> & MenuOption & GenericProps;
export declare type IHandleMultipleMenuItem = Pick<IMenu, 'selectedItem' | 'onChange'> & {
    /**
     * An individual menu item's key. Default is `an empty string`.
     */
    itemKey: string;
};
