import { type KeyboardEvent, type ReactElement } from "react";
/**
 * Properties of List item component implementation
 *
 * @internal
 */
export interface IInvertableSelectRenderItemProps<T> {
    /**
     * Item of list
     */
    item: T;
    /**
     * Title of the item
     */
    title: string;
    /**
     * Indicate that item is selected
     */
    isSelected: boolean;
    /**
     * Add item to selection callback
     */
    onSelect: () => void;
    /**
     * Remove item from selection
     */
    onDeselect: () => void;
    /**
     * Select item only
     */
    onSelectOnly: () => void;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderLoadingProps {
    height?: number;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderErrorProps {
    error?: any;
    height?: number;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderNoDataProps {
    error?: any;
    height?: number;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderSearchBarProps {
    searchString?: string;
    searchPlaceholder?: string;
    onSearch: (searchString: string) => void;
    onEscKeyPress?: (e: KeyboardEvent) => void;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderStatusBarProps<T> {
    isInverted: boolean;
    getItemTitle: (item: T) => string;
    selectedItems: T[];
    selectedItemsLimit?: number;
}
/**
 * @internal
 */
export interface IInvertableSelectRenderActionsProps {
    checked: boolean;
    onChange: (value: boolean) => void;
    onToggle: () => void;
    totalItemsCount: number;
    isFiltered: boolean;
    isPartialSelection: boolean;
    isVisible: boolean;
}
/**
 * @internal
 */
export interface IInvertableSelectProps<T> {
    className?: string;
    width?: number;
    height?: number;
    adaptiveWidth?: boolean;
    adaptiveHeight?: boolean;
    isSingleSelect?: boolean;
    items: T[];
    totalItemsCount?: number;
    itemHeight?: number;
    getItemTitle: (item: T) => string;
    getItemKey: (item: T) => string;
    isInverted: boolean;
    selectedItems: T[];
    selectedItemsLimit?: number;
    onSelect?: (items: T[], isInverted: boolean) => void;
    numberOfHiddenSelectedItems?: number;
    searchString?: string;
    searchPlaceholder?: string;
    onSearch?: (search: string) => void;
    onEscKeyPress?: (e: KeyboardEvent) => void;
    error?: any;
    isLoading?: boolean;
    nextPageItemPlaceholdersCount?: number;
    isLoadingNextPage?: boolean;
    onLoadNextPage?: () => void;
    renderError?: (props: IInvertableSelectRenderErrorProps) => ReactElement;
    renderLoading?: (props: IInvertableSelectRenderLoadingProps) => ReactElement;
    renderSearchBar?: (props: IInvertableSelectRenderSearchBarProps) => ReactElement;
    renderNoData?: (props: IInvertableSelectRenderNoDataProps) => ReactElement;
    renderItem?: (props: IInvertableSelectRenderItemProps<T>) => ReactElement;
    renderStatusBar?: (props: IInvertableSelectRenderStatusBarProps<T>) => ReactElement;
    renderActions?: (props: IInvertableSelectRenderActionsProps) => ReactElement;
}
/**
 * @internal
 */
export declare function InvertableSelect<T>(props: IInvertableSelectProps<T>): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=InvertableSelect.d.ts.map