import * as React from 'react';
import { BoxProps } from '../../layouts/Box';
import { Props } from '../../utils/types';
import { SearchProps } from '../Search/Search.types';
export declare type Ref<T> = ((instance: T | null) => void) | React.MutableRefObject<T | null> | null;
declare type Div = React.ComponentPropsWithoutRef<'div'>;
export interface Selection {
    /**
     * @since 10.19.0
     */
    event: React.MouseEvent<HTMLElement, MouseEvent> | React.KeyboardEvent<HTMLElement>;
    /**
     * @since 10.19.0
     */
    group: boolean;
    /**
     * @since 10.19.0
     */
    item: any;
    /**
     * @since 10.19.0
     */
    action: 'selected' | 'unselected';
}
export interface Reorder {
    /**
     * @since 10.19.0
     */
    draggableId: string;
    /**
     * @since 10.19.0
     */
    source: {
        index: number;
        droppableId: string;
    };
    /**
     * @since 10.19.0
     */
    destination: {
        index: number;
        droppableId: string;
    };
}
export interface MenuProps extends Omit<Div, 'onSelect' | 'onDragEnd'> {
    /**
     * @since 10.19.0
     */
    circular?: boolean;
    /**
     * @since 10.19.0
     */
    multiple?: boolean;
    /**
     * @since 10.19.0
     */
    onDragEnd?: (result: Reorder) => void;
    /**
     * @since 10.19.0
     */
    onScrollBottom?: (e: React.UIEvent<HTMLDivElement, UIEvent>) => void;
    /**
     * @since 10.19.0
     */
    onSelect?: (selection: Selection) => any;
}
export interface MenuRef {
    /**
     * @since 10.19.0
     */
    el: HTMLDivElement | null;
    /**
     * @since 10.19.0
     */
    highlight: (item: HTMLElement, shouldScroll?: boolean) => void;
    /**
     * @since 10.19.0
     */
    highlightFirst: (shouldScroll?: boolean) => void;
    /**
     * @since 10.19.0
     */
    highlightLast: (shouldScroll?: boolean) => void;
    /**
     * @since 10.19.0
     */
    highlightSelected: (shouldScroll?: boolean) => void;
    /**
     * @since 10.19.0
     */
    highlightSuggested: (shouldScroll?: boolean) => void;
    /**
     * @since 10.19.0
     */
    highlighted: () => any;
    /**
     * @since 10.19.0
     */
    next: (circular?: boolean) => void;
    /**
     * @since 10.19.0
     */
    prev: (circular?: boolean) => void;
    /**
     * @since 10.19.0
     */
    select: (event: React.MouseEvent<HTMLElement, MouseEvent> | React.KeyboardEvent<HTMLElement>) => void;
}
export interface ItemProps {
    /**
     * @since 10.19.0
     */
    item: any;
    /**
     * @since 10.19.0
     */
    selected?: boolean;
    /**
     * @since 10.19.0
     */
    suggested?: boolean;
    /**
     * @since 10.19.0
     */
    disabled?: boolean;
}
export interface ItemWithDraggingProps extends ItemProps {
    /**
     * @since 10.19.0
     */
    droppableIn: string | string[];
    /**
     * @since 10.19.0
     */
    draggableId: string;
    /**
     * @since 10.19.0
     */
    draggableIndex: number;
}
export interface GroupProps {
    /**
     * @since 10.19.0
     */
    clickable?: boolean;
    /**
     * @since 10.19.0
     */
    item?: any;
}
export interface OptionsProps {
    /**
     * @since 10.19.0
     */
    children?: React.ReactNode;
    /**
     * @since 10.19.0
     */
    className?: string;
}
export interface MenuSearchProps extends SearchProps, Props {
    /**
     * @since 10.19.0
     */
    i18nScope?: string;
}
export interface HeaderProps extends Props {
    /**
     * @since 10.19.0
     */
    tabIndex?: number;
}
export interface DroppableProps {
    /**
     * @since 10.19.0
     */
    id: string;
    /**
     * @since 10.19.0
     */
    children: React.ReactNode;
}
export interface FooterProps extends Omit<BoxProps, 'as'> {
}
export interface MenuContext {
    /**
     * @since 10.19.0
     */
    currentlyDroppableIn: string[];
    /**
     * @since 10.19.0
     */
    onHoverItem: (el?: HTMLDivElement) => void;
    /**
     * @since 10.19.0
     */
    onScrollBottom: (e: React.UIEvent<HTMLDivElement, UIEvent>) => void;
    /**
     * @since 10.19.0
     */
    onSelect: (selection: Selection) => void;
}
export {};
