import { type ComponentProps, type ElementType, type ReactNode, type SyntheticEvent } from 'react';
import type { SyncFunctionComponent } from '../../types/SyncFunctionComponent';
import { type TreeListData } from '../types';
export type TreeItemProps<TComponent extends ElementType = ElementType> = {
    /**
     * Название класса, применяется к корневому компоненту.
     */
    className?: string;
    /**
     * Уникальный префикс для идентификаторов в рамках дерева
     */
    prefixId?: string;
    /**
     * Если true, item выделяется как активный.
     */
    isSelected: boolean;
    /**
     * Содержимое, которое будет отображено внутри элемента списка.
     */
    label: ReactNode;
    /**
     * Подзаголовок, который будет отображено под элементом списка.
     */
    note?: ReactNode;
    /**
     * Render-props, позволяет более гибко настраивать содержимое item
     */
    renderItem?: SyncFunctionComponent<Omit<TreeListData, 'children'>>;
    /**
     * Содержимое, отображающееся при раскрытии элемента.
     * При наличии children item будет отображен как родительский элемент.
     */
    children?: ReactNode;
    /**
     * Компонент, используемый для корневого узла элемента списка. Либо строка для использования элемента HTML, либо компонент.
     * @default 'div'
     */
    component?: TComponent;
    /**
     * Уровень вложенности в дереве.
     */
    level: number;
    /**
     * Если true, то элемент будет не доступен для взаимодействия
     * @default 'false'
     */
    isDisabled?: boolean;
    /**
     * Текст тултипа при заблокированном состоянии элемента дерева
     */
    disabledReason?: string;
    /**
     * Если true, то список можно будет развернуть даже если установлен `isDisabled=true`
     * @default 'false'
     */
    isNotBlockingExpandList?: boolean;
    /**
     * Если true, то вложенный список будет раскрыт
     * @default 'false'
     */
    isDefaultExpanded?: boolean;
    /**
     * Флаг для переопределения внутреннего состояния открыто/закрыто
     */
    isForceExpanded?: boolean;
    /**
     * Функция, которая запускается при нажатии на элемент списка.
     */
    onClick?: (event: SyntheticEvent) => void;
} & Omit<ComponentProps<TComponent>, ''>;
