import { type ComponentType, type ReactElement, type ReactNode } from "react";
import { type IUiPagedVirtualListSkeletonItemProps } from "../@ui/UiPagedVirtualList/UiPagedVirtualList.js";
import { type ITab } from "../Tabs/Tabs.js";
import { type IAccessibilityConfigBase } from "../typings/accessibility.js";
/**
 * @internal
 */
export interface IDropdownListNoDataRenderProps {
    hasNoMatchingData: boolean;
}
/**
 * @internal
 */
export interface IRenderDropdownListItemProps<T> {
    rowIndex: number;
    item: T;
    width: number;
    height: number;
    isFirst: boolean;
    isLast: boolean;
    focused?: boolean;
}
/**
 * @internal
 */
export interface IDropdownListProps<T> {
    id?: string;
    items?: T[];
    itemHeight?: number;
    itemsCount?: number;
    title?: string;
    className?: string;
    tabsClassName?: string;
    height?: number;
    width?: number;
    maxHeight?: number;
    containerPadding?: number;
    onKeyDownSelect?: (item: T) => void;
    onKeyDownConfirm?: (item: T) => void;
    isLoading?: boolean;
    showSearch?: boolean;
    disableAutofocus?: boolean;
    searchFieldSize?: "small" | "normal";
    searchPlaceholder?: string;
    searchString?: string;
    searchLabel?: string;
    onSearch?: (searchString: string) => void;
    showTabs?: boolean;
    tabs?: ITab[];
    selectedTabId?: string;
    onTabSelect?: (tab: ITab) => void;
    mobileItemHeight?: number;
    isMobile?: boolean;
    renderNoData?: (props: IDropdownListNoDataRenderProps) => ReactNode;
    footer?: ReactNode | ((closeDropdown: () => void) => ReactNode);
    closeDropdown?: () => void;
    loadNextPage?: () => void;
    hasNextPage?: boolean;
    skeletonItemsCount?: number;
    shouldLoadNextPage?: (lastItemIndex: number, itemsCount: number, skeletonItemsCount: number) => boolean;
    isNextPageLoading?: boolean;
    SkeletonItem?: ComponentType<IUiPagedVirtualListSkeletonItemProps>;
    renderItem: (props: IRenderDropdownListItemProps<T>) => ReactElement;
    itemHeightGetter?: (index: number) => number;
    itemTitleGetter?: (item: T) => string;
    accessibilityConfig?: Pick<IAccessibilityConfigBase, "ariaLabel" | "ariaLabelledBy" | "role">;
    body?: ReactNode | ((closeDropdown: () => void) => ReactNode);
    onScroll?: () => void;
    /**
     * An item in the list that should be scrolled into view when the component renders.
     * By default, items are compared by object identity (i.e., ===).
     * To customize how the target item is found (e.g., by ID), provide a `scrollToItemKeyExtractor` as well.
     */
    scrollToItem?: T;
    /**
     * A function that extracts a unique key from each item for comparison with `scrollToItem`.
     * This is useful when the provided `scrollToItem` may not be the same object reference as items in the list.
     * If not provided, object identity (===) is used for comparison.
     */
    scrollToItemKeyExtractor?: (item: T) => string | number;
}
/**
 * @internal
 */
export declare const LOADING_HEIGHT = 100;
/**
 * @internal
 */
export declare const DEFAULT_ITEM_HEIGHT = 28;
/**
 * @internal
 */
export declare const DEFAULT_MOBILE_ITEM_HEIGHT = 40;
/**
 * Dropdown list component with paged virtual list implementation
 * @internal
 *
 */
export declare function DropdownList<T>({ id, title, className, tabsClassName, width, height, maxHeight, onKeyDownSelect, onKeyDownConfirm, isMobile, isLoading, items, itemsCount, itemHeight, containerPadding, mobileItemHeight, showSearch, disableAutofocus, searchString, searchLabel, searchPlaceholder, searchFieldSize, onSearch, showTabs, tabs, selectedTabId, onTabSelect, renderNoData, footer, closeDropdown, accessibilityConfig, renderItem, body, itemHeightGetter, itemTitleGetter, loadNextPage, hasNextPage, skeletonItemsCount, shouldLoadNextPage, isNextPageLoading, SkeletonItem, onScroll, scrollToItem, scrollToItemKeyExtractor }: IDropdownListProps<T>): ReactElement;
//# sourceMappingURL=DropdownList.d.ts.map