/**
 * Copyright (c) Adaptavist, Inc.
 */
import { GenericProps } from '@/src/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)`
     */
    itemKey?: string;
    /**
     * Used to specify selected item in the `Select` `Option`
     */
    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
     */
    current?: boolean;
    /**
     * Used to specify if an item is diabled or not
     */
    disabled?: boolean;
    /**
     * The children elements to render inside the item
     */
    children?: React.ReactNode;
    /**
     * The icon to display inside the item
     */
    icon?: ReactNode;
}
export interface IMenuChangeProps {
    /**
     * An individual menu item's key
     */
    itemKey: string;
    /**
     * The children elements to render inside the item
     */
    children?: React.ReactNode;
    /**
     * The function to run on selection / deselection of an item
     */
    onChange?: (props: IMenuChangeProps | string[]) => void;
    /**
     * Should the menu allow multiple selections.
     */
    isMultipleSelection?: boolean;
    /**
     * The currently selected item(s) in the menu
     */
    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 diabled or not
     */
    disabled?: boolean;
}
export interface IMenu extends 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.
     */
    disable?: string;
    hasBoxShadow?: boolean;
    /**
     * Should the menu allow multiple selections.
     */
    isMultipleSelection?: boolean;
    /**
     * The selected item(s) in the menu
     */
    selectedItem?: string | string[];
    /**
     * The current item(s) in the menu
     */
    currentItem?: string | string[];
    /**
     * The function to run on selection / deselection of an item
     */
    onChange?: (props: IMenuChangeProps | string[]) => void;
}
export interface IMenuItem extends Omit<HTMLAttributes<HTMLLIElement>, 'onChange'>, MenuOption, GenericProps {
}
export interface IHandleMultipleMenuItem extends Pick<IMenu, 'selectedItem' | 'onChange'> {
    /**
     * An individual menu item's key
     */
    itemKey: string;
}
