import type { VNode } from 'vue';
import type { Ref } from '@vue/composition-api';
import type { TNode, TScroll, TreeOptionData } from '../common';
import type TreeStore from '../_common/js/tree/tree-store';
import type TreeNode from '../_common/js/tree/tree-node';
import type { TypeTreeEventState } from '../_common/js/tree/types';
import type { VirtualScrollConfig } from '../hooks/useVirtualScrollNew';
import type { TdTreeProps, TreeInstanceFunctions, TreeNodeModel, TreeNodeState, TreeNodeValue } from './type';
export * from './type';
export declare type TypeVNode = VNode;
export declare type TreeProps<T extends TreeOptionData = TreeOptionData> = TdTreeProps<T> & {
    treeStore?: TreeStore;
};
export declare type TypeTreeProps<T extends TreeOptionData = TreeOptionData> = TdTreeProps<T>;
export declare type TypeTNodeState = TreeNodeValue;
export declare type TypeTNodeValue = TreeNodeState;
export declare type TypeTreeNode = TreeNode;
export declare type TypeTreeStore = TreeStore;
export declare type TypeValueMode = TreeProps['valueMode'];
export declare type TypeTNodeProp = boolean | string | TNode<TypeTreeNodeModel>;
export declare type TypeTreeNodeModel = TreeNodeModel<TreeOptionData>;
export declare type TypeTargetNode = TreeNodeValue | TypeTreeNode | TypeTreeNodeModel;
export declare type TypeVirtualScrollConfig = VirtualScrollConfig;
export declare type TypeTimer = ReturnType<typeof setTimeout>;
export interface TypeTreeRow extends TreeNode {
    __VIRTUAL_SCROLL_INDEX?: number;
}
export interface TypeEventState extends TypeTreeEventState {
    mouseEvent?: MouseEvent;
    event?: Event;
    path?: TypeTreeNode[];
    dragEvent?: DragEvent;
    dropPosition?: number;
}
export interface TypDragEventState extends TypeEventState {
    dragEvent?: DragEvent;
    dropPosition?: number;
}
export interface TypeMark {
    name: string;
    value: string;
    el?: HTMLElement;
}
export interface TypeLineModel {
    top: boolean;
    right: boolean;
    bottom: boolean;
    left: boolean;
}
export interface TypeTreeInstance extends Vue, TreeInstanceFunctions {
}
export interface TypeGetTNodeOption {
    node?: TreeNode;
    createElement?: Vue.CreateElement;
}
export interface TypeRenderTNodeOption {
    node?: TypeTreeNodeModel;
}
export interface TypeScopedSlots {
    empty?: (opts?: TypeRenderTNodeOption) => VNode;
    icon?: (opts?: TypeRenderTNodeOption) => VNode;
    label?: (opts?: TypeRenderTNodeOption) => VNode;
    line?: (opts?: TypeRenderTNodeOption) => VNode;
    operations?: (opts?: TypeRenderTNodeOption) => VNode;
}
export interface TypeDragHandle {
    handleDragStart: (state: TypDragEventState) => void;
    handleDragEnd: (state: TypDragEventState) => void;
    handleDragOver: (state: TypDragEventState) => void;
    handleDragLeave: (state: TypDragEventState) => void;
    handleDrop: (state: TypDragEventState) => void;
}
export interface TypeTreeScope {
    treeContentRef: Ref<HTMLDivElement>;
    treeProps?: TreeProps;
    scopedSlots?: TypeScopedSlots;
    drag?: TypeDragHandle;
    scrollProps?: Ref<TScroll>;
    virtualConfig?: TypeVirtualScrollConfig;
}
export interface TypeTreeState {
    scope: TypeTreeScope;
    store: TypeTreeStore;
    nodes: Ref<TreeNode[]>;
    isScrolling: Ref<boolean>;
    treeContentRef: Ref<HTMLDivElement>;
    mouseEvent?: Event;
    virtualConfig?: TypeVirtualScrollConfig;
}
export interface TypeTreeItemProps {
    node: TypeTreeNode;
    treeScope: TypeTreeScope;
    expandOnClickNode: boolean;
    rowIndex: number;
}
export interface TypeEventContext {
    node: TypeTreeNodeModel;
    e: MouseEvent;
}
export interface TypeExpandEventContext extends TypeEventContext {
    trigger: 'setItem' | 'node-click' | 'icon-click';
}
export interface TypeActiveEventContext extends TypeEventContext {
    trigger: 'setItem' | 'node-click';
}
export interface TypeChangeEventContext extends TypeEventContext {
    trigger: 'setItem' | 'node-click';
}
