import { Component, ComponentProps, ReactElement, MouseEvent, ReactNode } from 'react';
import Grid from '../Grid';
import '../Item/Item.less';
import './ItemList.less';
declare type ItemValue = string | number;
declare type ItemProps = {
    className?: string;
    onClick?: (e: MouseEvent<ReactElement>) => void;
    value?: ItemValue;
    view?: 'simple' | 'card';
    disabled?: boolean;
    hoverable?: boolean;
    footer?: ReactNode;
};
declare type ItemListProps = {
    /**
     * Add hover styles for `Item` inside `ItemList`.
     * @since 2.1.0
     */
    hoverable?: boolean;
    /**
     * Make elements the same height within one row.
     * @since 2.1.0
     */
    stretchable?: boolean;
    /**
     * Enable selectable view. For this mode, all children must have a unique value prop.
     * There are three modes:
     *
     * * true - it works as radio buttons
     * * 'multiple' - it works as checkboxes
     * * 'toggleable' - it works as checkboxes, but only one item can be selected
     *
     * It doesn't work with reorderable.
     * @since 2.3.0
     */
    selectable?: boolean | 'multiple' | 'toggleable';
    /**
     * A callback executed when some item is selected.
     * @since 2.3.0
     */
    onSelect?: (value: null | ItemValue | ItemValue[]) => void;
    /**
     * An initial value. It switches component into a controlled mode.
     * @since 2.3.0
     */
    value?: ItemValue | ItemValue[];
    /**
     * An initial value.
     * @since 2.3.0
     */
    defaultValue?: ItemValue | ItemValue[];
    /**
     * Enable reorderable view.
     * @since 0.0.49
     */
    reorderable?: boolean;
    /**
     * Reorder end handler.
     * @since 0.0.49
     */
    onReorderEnd?: () => void;
    /**
     * Content of the `ItemList`.
     * @since 0.0.48
     */
    children: Array<ReactElement<ItemProps> | null>;
    /**
     * @ignore
     */
    className?: string;
    /**
     * @ignore
     */
    baseClassName?: string;
} & Pick<ComponentProps<typeof Grid>, 'gap'>;
declare type ItemListState = {
    ReorderableGrid: null | any;
    ReorderableGridCol: null | any;
    value: null | ItemValue | ItemValue[];
};
/**
 * `ItemList` component is used for displaying list of [Items](#!/Item)
 * according to [Grid](#!/Grid) principle.
 * @since 0.0.48
 */
declare class ItemList extends Component<ItemListProps, ItemListState> {
    static defaultProps: {
        hoverable: boolean;
        stretchable: boolean;
        reorderable: boolean;
        selectable: boolean;
        baseClassName: string;
    };
    constructor(props: ItemListProps);
    static getDerivedStateFromProps({ selectable, value: propValue }: ItemListProps, state: ItemListState): {
        value: ItemValue | ItemValue[] | null;
    } | null;
    componentDidMount(): void;
    createItemProps: (item: ReactElement<ItemProps>) => ItemProps;
    renderNormal({ baseClassName, children, ...props }: ItemListProps): JSX.Element;
    someChild(predicate: (child: ReactElement<ItemProps>) => boolean): boolean;
    /**
     * There are some states where we can't manage hoverable state
     */
    canManageHoverableState(): boolean;
    isHoverable(): boolean;
    hasViewCard(): boolean;
    hasHoverableCard(): boolean;
    renderReorderable({ baseClassName, onReorderEnd, children, ...props }: ItemListProps): JSX.Element | null;
    render(): JSX.Element;
}
export default ItemList;
