import type { ListImperativeAPI } from 'react-window';
export interface ListItemIcon {
    name?: string;
    url?: string;
    Component?: React.ComponentType;
}
export type ChildrenLoadingSpec = {
    count?: number;
    sections?: {
        name: string;
        count?: number;
    }[];
};
export type ListItem<T = any> = {
    id: string;
    name: string;
    data: T;
    section?: string;
    description?: string;
    detail?: string;
    badge?: string;
    dividerBefore?: boolean;
    contentColor?: string;
    trailingIcon?: {
        name: string;
        color?: string;
    };
    icon?: ListItemIcon;
    color?: string;
    colorDark?: string;
    children?: ListItem<T>[] | ((id: string, name: string) => Promise<ListItem<T>[]>);
    childrenLoading?: boolean | ChildrenLoadingSpec;
};
export type RenderItem<T extends ListItem> = {
    type: 'section';
    sectionName: string;
    first: boolean;
} | {
    type: 'item';
    item: T;
} | {
    type: 'skeleton';
} | {
    type: 'divider';
};
export declare const ROW_HEIGHT_ITEM = 32;
export declare const ROW_HEIGHT_ITEM_TWO_LINE = 44;
export declare const ROW_HEIGHT_SECTION = 30;
export declare const ROW_HEIGHT_SECTION_FIRST = 22;
export declare const ROW_HEIGHT_DIVIDER = 13;
export declare function getRenderItemHeight<T extends ListItem>(renderItem: RenderItem<T> | undefined): number;
export declare function buildRenderedItems<T extends ListItem>(items: T[], enableSections: boolean, loadingSkeleton?: boolean | ChildrenLoadingSpec): RenderItem<T>[];
export interface ListViewRowProps<T extends ListItem> {
    renderedItems: RenderItem<T>[];
    activeIndex: number;
    isLoading?: boolean;
    isDarkMode?: boolean;
    onItemClick: (item: T, index: number) => void;
    onItemHover?: (item: T) => void;
}
export interface ListViewHandle<T extends ListItem = ListItem> {
    renderedItems: RenderItem<T>[];
}
interface ListViewProps<T extends ListItem> {
    items: T[];
    activeIndex?: number;
    listRef?: React.RefObject<ListImperativeAPI | null>;
    onItemClick: (item: T, index: number) => void;
    onItemHover?: (item: T) => void;
    onScroll?: React.UIEventHandler<HTMLDivElement>;
    emptyStateMessage?: string;
    emptyStateIcon?: string;
    renderEmptyState?: () => React.ReactElement | null;
    isLoading?: boolean;
    enableSections?: boolean;
    loadingSkeleton?: boolean | ChildrenLoadingSpec;
}
export declare const ListView: <T extends ListItem>(props: ListViewProps<T> & {
    ref?: React.Ref<ListViewHandle<T>>;
}) => React.ReactElement | null;
export {};
//# sourceMappingURL=ListView.d.ts.map