import type { VNode } from 'vue';
import type TreeStore from '@ldesign/utils/es/tree/tree-store';
import type TreeNode from '@ldesign/utils/es/tree/tree-node';
import type { TypeTreeEventState } from '@ldesign/utils/es/tree/types';
import type { LNode, TreeOptionData } from '../../common';
import type { LdTreeProps, TreeInstanceFunctions, TreeNodeModel, TreeNodeState, TreeNodeValue } from './type';
export * from './type';
export type TypeVNode = VNode;
export type TreeProps = LdTreeProps;
export type TypeTreeProps = LdTreeProps;
export type TypeTNodeState = TreeNodeValue;
export type TypeTNodeValue = TreeNodeState;
export type TypeTreeNode = TreeNode;
export type TypeTreeStore = TreeStore;
export type TypeValueMode = TypeTreeProps['valueMode'];
export type TypeTNodeProp = boolean | string | LNode<TypeTreeNodeModel>;
export type TypeTreeNodeModel = TreeNodeModel<TreeOptionData>;
export type TypeTargetNode = TreeNodeValue | TypeTreeNode | TypeTreeNodeModel;
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 {
    treeProps?: TypeTreeProps;
    scopedSlots?: TypeScopedSlots;
    drag?: TypeDragHandle;
}
export interface TypeTreeCache {
    mouseEvent?: Event;
    scope: TypeTreeScope;
}
export interface TypeTreeState {
    store: TypeTreeStore;
    cache: TypeTreeCache;
}
export interface TypeTreeItemProps {
    node: TypeTreeNode;
    treeScope: TypeTreeScope;
    expandOnClickNode: boolean;
}
