import { default as React } from 'react';
import { TUseValues } from '../../AHooks/useValues';
import { TCanCallback } from '../../AUtils/cbF';
import { TIcons } from '../AIcon/AIcon';
import { Resources } from '../AResource/AResource';
import { EDir4, TIdx } from '../ATypes/ATypes';
import { IATreeItem, IATreeSearchResult } from './ATree';
export type TTreeIconValue = TIcons | Exclude<React.ReactNode, string>;
export type TIconsConfig = {
    collapsed?: TTreeIconValue;
    expanded?: TTreeIconValue;
    iconGap?: number;
    iconPadding?: number;
    iconWidth?: number;
    noChild?: TTreeIconValue;
};
export type TSelectDisabled<T> = (item: T) => boolean | string | undefined;
export type TTreeItemDisabled = boolean | string | undefined;
export interface IATreeItemProps<T> {
    ContentRenderer: (props: IATreeItemProps<T>) => React.ReactNode;
    IndentRenderer?: TCanCallback<IATreeItemProps<T>, React.ReactNode>;
    RightStickyAddon?: TCanCallback<IATreeItemProps<T>, React.ReactNode>;
    TreeItemClassName?: TCanCallback<IATreeItemProps<T>, string>;
    TreeItemRenderer: (props: IATreeItemProps<T>) => React.ReactNode;
    TreeItemStyle?: TCanCallback<IATreeItemProps<T>, React.CSSProperties>;
    containerRef: React.RefObject<HTMLDivElement | null>;
    extIndents?: (props: IIndentProps<T>) => {
        collapsed?: React.ReactNode;
        expanded?: React.ReactNode;
        isLast?: React.ReactNode;
    };
    getItemId?: (item: T) => string;
    height: number;
    hoverdItem: T | null;
    icons: TCanCallback<IATreeItemProps<T>, TIconsConfig | undefined>;
    indents: EIndentState[];
    isChildOfDragItem?: (item: T) => boolean;
    isDragSrcItem?: boolean;
    isDraggable?: boolean;
    isEqual: (a: T, b: T) => boolean;
    isParentCheckHovered: boolean;
    isParentDisabled?: TTreeItemDisabled;
    isSelectMulti: boolean;
    item: T;
    itemId?: TIdx;
    onMouseLeave?: (e: React.MouseEvent<HTMLElement>, item: T) => void;
    onMouseOver?: (e: React.MouseEvent<HTMLElement>, item: T) => void;
    parentsInfo: IParentInfo<T>[];
    resources: typeof Resources.ATree;
    rightStickyProps?: React.HTMLAttributes<HTMLDivElement>;
    searchItemClassName?: TCanCallback<IATreeItemProps<T>, string>;
    searchItemStyle?: TCanCallback<IATreeItemProps<T>, React.CSSProperties>;
    selectDisabled?: TSelectDisabled<T>;
    selectUnused?: (item: T) => boolean;
    showCheckbox?: boolean;
    siblings: T[];
    treeItemTooltip?: TCanCallback<IATreeItemProps<T>, React.ReactNode | undefined>;
    treeItemTooltipDelay?: TCanCallback<IATreeItemProps<T>, number | undefined>;
    treeItemTooltipDirection?: TCanCallback<IATreeItemProps<T>, EDir4 | undefined>;
    treeItemTooltipDistance?: TCanCallback<IATreeItemProps<T>, number | undefined>;
    useExpand: TUseValues<T[]>;
    useExpandAnimation: boolean;
    useSearch: TUseValues<IATreeSearchResult<T> | undefined>;
    useSelect: TUseValues<T[]>;
}
declare enum EIndentState {
    Collapsed = "Collapsed",
    Expanded = "Expanded",
    IsLast = "IsLast"
}
export declare const ATreeItem: <T extends IATreeItem<T>>(props: IATreeItemProps<T>) => React.ReactNode;
export interface IIndentProps<T> {
    expandedItems: T[];
    iconWidth: number;
    idx: number;
    indent: EIndentState;
    isLast: boolean;
    item: T;
    siblings: T[];
}
export interface IParentInfo<T> {
    isExpanded: boolean;
    isLastChild: boolean;
    item: T;
    itemIdx: number;
}
export {};
