import { ReactElement, ReactNode } from 'react';
import { IdCollectionPredicate, ModelData, TreeFilter, AdditionalDefault } from 'bloko/common/tree/types';
import TreeSelectorDummy, { TreeSelectorDummyProps } from 'bloko/blocks/treeSelector/Dummy';
import { LabelComponentType, IconComponentType } from 'bloko/blocks/treeSelector/Dummy/types';
export { TreeSelectorDummy };
export interface TreeSelectorProps {
/** Дерево элементов. */
data: ModelData[];
/** Разрешает выбор только одного элемента. */
singleChoice?: boolean;
/** Разрешает выбор только элементов без потомков. */
leavesOnly?: boolean;
/** Компонент для вывода метки у элемента дерева */
LabelComponent?: LabelComponentType;
/** Компонент для вывода иконки у элемента дерева */
IconComponent?: IconComponentType;
/** Запрещённые ID. */
disabled?: string[];
/** Изначально выбранные ID. */
initialSelected?: string[];
/** Изначально открытые ID. */
initialExpanded?: string[];
/** Строка-фильтр для дерева, остаются только элементы с вхождением указанной строки. */
contentFilterQuery?: string;
/** Способ фильтрации дерева при поиске */
treeFilter?: TreeFilter;
/** Обработчик изменения состояния раскрытия элементов
* В аргументах получает список id раскрытых элементов `{Array} expanded` */
onExpand?: (expanded: string[]) => void;
/** Обработчик изменения набора выбранных ID.
* В аргументах получает `{String} id`, `{Boolean} isSelected`, `{Array} allSelected`. */
onChange?: (id: string, isSelected: boolean, allSelected: string[]) => void;
/** Обработчик изменения строки contentFilterQuery
* В аргументах получает список подходящих под запрос id */
onChangeFilterQuery?: (ids: string[], query: string) => void;
/** Показывать ли список выбранных */
showSelectedList?: boolean;
/** Свойства обертки дерева */
wrapperTreeProps?: JSX.IntrinsicElements['div'];
/** ID моделей которые предлагаются для выбора, если в поиске ничего не найдено */
suggestedNotFound?: string[];
/** Функция возвращает true для элементов, которые можно выбрать. При использовании
* вместе с параметром leavesOnly применяется только к элементам без потомков. */
checkSelectable?: IdCollectionPredicate;
}
interface TreeSelectorComponent {
(props: TreeSelectorProps): JSX.Element;
}
/**
* Компонент для работы с древовидной структурой данных.
* Получает дерево в виде JSON и изначально выбранные и открытые элементы,
* далее управляет ими сам. Если нужно ручное управление `selected`,
* см. компонент TreeSelectorDummy.
*/
declare const TreeSelector: TreeSelectorComponent;
export declare const isValidTreeSelectorElement: (child: ReactNode) => child is ReactElement, string | import("react").JSXElementConstructor>;
export declare const isValidTreeSelector: (child: ReactNode) => child is ReactElement | TreeSelectorProps, string | import("react").JSXElementConstructor>;
export default TreeSelector;