import './SelectDropdown.css';
import { AtomMut } from '@reatom/framework';
import React from 'react';
import { FieldPropSize } from '../../FieldComponents';
import { PopoverPropOffset } from '../../Popover';
import { GetOptionPropsResult, OptionForCreate, OptionProps } from '../useSelect';
import { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';
import { CountedGroup } from '../types';
export declare const selectDropdownForm: readonly ["default", "brick", "round"];
export type SelectDropdownPropForm = typeof selectDropdownForm[number];
export declare const defaultSelectDropdownPropForm: "default";
type RenderItemProps<ITEM> = {
    item: ITEM;
    active: boolean;
    hovered: boolean;
    onClick: (e: React.MouseEvent) => void;
    onMouseEnter: (e: React.MouseEvent) => void;
    ref: React.Ref<HTMLDivElement>;
};
type Props<ITEM, GROUP> = PropsWithJsxAttributes<{
    size: FieldPropSize;
    controlRef: React.MutableRefObject<HTMLDivElement | null>;
    dropdownRef: React.Ref<HTMLDivElement>;
    getOptionActions(props: OptionProps<ITEM>): GetOptionPropsResult;
    form: SelectDropdownPropForm;
    openAtom: AtomMut<boolean>;
    offset?: PopoverPropOffset | 'none';
    isLoading?: boolean;
    renderItem: (props: RenderItemProps<ITEM>) => React.ReactNode | null;
    highlightedIndexAtom: AtomMut<number>;
    visibleItemsAtom: AtomMut<(OptionForCreate | CountedGroup<ITEM, GROUP>)[]>;
    getGroupLabel?: (group: GROUP) => string;
    labelForCreate?: ((label: string | undefined) => React.ReactNode) | React.ReactNode;
    labelForNotFound?: string;
    labelForEmptyItems?: string;
    notFound?: boolean;
    hasItemsAtom: AtomMut<boolean>;
    itemsRefs: React.RefObject<HTMLDivElement>[];
    virtualScroll?: boolean;
    onScrollToBottom?: (length: number) => void;
    valueAtom: AtomMut<ITEM[]>;
    getItemKeyAtom: AtomMut<(item: ITEM) => string | number>;
    onChangeAll: (e: React.SyntheticEvent, items: ITEM[]) => void;
    highlightIndex: (index: number) => void;
    onCreate: (e: React.SyntheticEvent) => void;
    onChange: (e: React.SyntheticEvent, item: ITEM) => void;
    inputValueAtom: AtomMut<string>;
    groupsCounterAtom: AtomMut<Record<string, [number, number]>>;
    dropdownZIndexAtom: AtomMut<number | undefined>;
    selectAllLabel: string;
}>;
type SelectDropdownComponent = <ITEM, GROUP>(props: Props<ITEM, GROUP>) => React.ReactElement | null;
export declare const SelectDropdown: SelectDropdownComponent;
export {};
