import { ReactNode } from 'react';
import { IconType } from './OptionIcon';
import { Mode } from '../../contexts/DashboardBehaviour/types';
export declare type ListSelectOptions<T> = {
    label: string;
    value: T;
};
export declare type ListSelect<T> = {
    showClearBtn?: boolean;
    onChange: (value: T, itemIndex: number) => void;
    selected: T;
    options: ListSelectOptions<T>[];
};
export declare type ListViewItem<T> = {
    title: string | ReactNode;
    id: string;
    subtext?: JSX.Element | string;
    highlight?: boolean;
    onClick?: (index: number) => void;
    editIcon?: boolean;
    icon?: IconType;
    select?: ListSelect<T>;
    renderRight?: () => JSX.Element;
    preventDelete?: boolean;
    context?: any;
};
export declare type ListItemProps<T> = {
    testId?: string;
    index: number;
    totalItemsCount: number;
    item: ListViewItem<T>;
    onOrderChange?: (index: number, movedTo: number) => void;
    onDeleteItem?: (itemIndex: number, context: any) => void;
    onToggleHidden?: (args: {
        itemIndex: number;
    }) => void;
    isHidden?: (args: {
        itemIndex: number;
    }) => boolean;
    mode: Mode;
    showHiddenToggle?: boolean;
    purpose?: string;
};
export declare type ListItemState = {
    type: 'idle';
} | {
    type: 'preview';
    container: HTMLElement;
    rect: DOMRect;
} | {
    type: 'dragging';
};
