import { RefObject } from 'react';
import { BackendFactory, DragDropManager } from 'dnd-core';
import { DragNDropItem } from './drag-and-drop-list-item';
export type DragNDropListProps = {
    /**
     * An array of objects. Each object will be passed to the item-renderer
     */
    data: any[];
    /**
     * method to update data, invoked every time 2 elements are swapped
     */
    onDataChanged: (items: any[], previousIndex: number, currentIndex: number) => void;
    /**
     *  method to check the ability to drag the item
     */
    canDrag?: (listItem: DragNDropItem, index?: number) => boolean;
    /**
     *  method to check the ability to drop the item
     */
    canDrop?: (listItem: DragNDropItem, index?: number) => boolean;
    /**
     * method to inform about dragging is finished
     */
    onDragEnd?: (item: object, index: number) => any;
    /**
     * React component tobe rendered inside list-item component. Used to customize content of a single item
     */
    ListItemContent?: (...args: any[]) => any;
    /**
     * React component which will be used instead of standard list-item. See example with ListCards for more info
     */
    ListItemComponent?: (...args: any[]) => any;
    /**
     * className which will be attached to list-item
     */
    listItemClassName?: string;
    /**
     * Function which should return unique key when single item is provided
     */
    keyGetter?: (...args: any[]) => any;
    /**
     * bool flag indicating whether different ref should be used for dragging and dropping. Make sense only when you overwrite the whole list item with ListItemComponent
     */
    shouldUseSeparateDragRef?: boolean;
    /**
     * backend object to be used in DndProvider (right now used only int tests
     */
    backend?: BackendFactory;
    /**
     * react-dnd manager - helpful when the provider is already initilized in the component tree, and you can re-use it
     */
    dndManager?: DragDropManager;
    /** Type to be used for drag item. Should be used if different types must be used for several DND lists so that inter-group dnd would not work */
    dragItemType?: string;
    /** Any additional props to be passed to listItemComponent */
    additionalListItemProps?: {
        [key: string]: unknown;
    };
    /** ref of the container that holds DragNDrop list.
     * Needed to limit DNDProvider breaking native drag-n-drop. See https://github.com/react-dnd/react-dnd/issues/3304 for more info */
    dndContainerRef?: RefObject<HTMLElement>;
};
/** DragNDropList components implements a row list, items of which can be drag-n-dropped
 * as reordering mechanism. You can also customize how each row look like (See examples below)
 * @midnight-gray-supported
 * @alpine-light-supported
 */
export declare function DragNDropList({ data, onDataChanged, canDrag, canDrop, onDragEnd, ListItemContent, ListItemComponent, listItemClassName, keyGetter, shouldUseSeparateDragRef, backend, dndManager, dragItemType, additionalListItemProps, dndContainerRef, }: DragNDropListProps): import("react/jsx-runtime").JSX.Element | null;
