import { Slot, VNode } from 'vue'; import { VirtualListProps } from '../_components/virtual-list/interface'; import { Size } from '../_utils/constant'; export type TreeNodeKey = number | string; export type TreeEllipsis = boolean | 'performant-ellipsis'; export type TreeNodeDomEventName = 'click' | 'dblclick' | 'contextmenu' | 'mouseover' | 'mouseenter' | 'mouseleave' | 'mousemove' | 'mouseout' | 'mousedown' | 'mouseup' | 'pointerdown' | 'pointermove' | 'pointerup' | 'pointerenter' | 'pointerleave' | 'pointerover' | 'pointerout' | 'pointercancel' | 'touchstart' | 'touchmove' | 'touchend' | 'touchcancel' | 'keydown' | 'keyup' | 'keypress'; export type TreeNodeSwipeEventName = 'swipeStart' | 'swipe' | 'swipeEnd'; export type TreeNodeSwipeDirection = 'up' | 'down' | 'left' | 'right' | 'none'; export interface TreeNodeSwipeEventData { direction: TreeNodeSwipeDirection; } export type TreeNodeEventHandler = (node: TreeNodeData, event: T) => void; export type TreeNodeSwipeEventHandler = (node: TreeNodeData, event: TouchEvent, data: TreeNodeSwipeEventData) => void; export interface TreeNodeData { key?: string | number; title?: string; selectable?: boolean; disabled?: boolean; disableCheckbox?: boolean; checkable?: boolean; draggable?: boolean; isLeaf?: boolean; icon?: () => VNode; switcherIcon?: () => VNode; loadingIcon?: () => VNode; dragIcon?: () => VNode; children?: TreeNodeData[]; [other: string]: unknown; } export interface TreeNodeProps extends Omit { selectable: boolean; disabled: boolean; disableCheckbox: boolean; checkable: boolean; draggable: boolean; isLeaf: boolean; isTail: boolean; blockNode: boolean; showLine: boolean; level: number; lineless: boolean[]; } export interface Node extends TreeNodeProps { key: TreeNodeKey; treeNodeProps: TreeNodeProps; treeNodeData: TreeNodeData; parent?: Node; parentKey?: TreeNodeKey; pathParentKeys: TreeNodeKey[]; children?: Node[]; } export type FilterTreeNode = (node: TreeNodeData) => boolean; export interface TreeFieldNames { key?: string; title?: string; disabled?: string; children?: string; isLeaf?: string; disableCheckbox?: string; checkable?: string; icon?: string; [field: string]: string | undefined; } export type LoadMore = (node: TreeNodeData) => Promise; export type DropPosition = -1 | 0 | 1; export type CheckedStrategy = 'all' | 'parent' | 'child'; export type CheckableType = boolean | ((node: TreeNodeData, info: { level: number; isLeaf: boolean; }) => boolean); export interface TreeProps { size: Size; blockNode: boolean; switcher: boolean; defaultExpandAll: boolean; multiple: boolean; checkable: CheckableType; draggable: boolean; allowDrop?: (options: { dropNode: TreeNodeData; dropPosition: DropPosition; }) => boolean; selectable: CheckableType; checkStrictly: boolean; checkedStrategy: CheckedStrategy; defaultSelectedKeys?: TreeNodeKey[]; selectedKeys?: TreeNodeKey[]; defaultCheckedKeys?: TreeNodeKey[]; checkedKeys?: TreeNodeKey[]; halfCheckedKeys: TreeNodeKey[] | undefined; defaultExpandedKeys?: TreeNodeKey[]; expandedKeys?: TreeNodeKey[]; data: TreeNodeData[]; fieldNames?: TreeFieldNames; virtualListProps?: VirtualListProps; showLine: boolean; loadMore?: LoadMore; searchValue?: string; defaultExpandSelected?: boolean; defaultExpandChecked?: boolean; autoExpandParent?: boolean; onlyCheckLeaf: boolean; animation: boolean; ellipsis: TreeEllipsis; actionOnNodeClick?: 'expand'; disableSelectActionOnly: boolean; dragIcon?: Slot; switcherIcon?: Slot; loadingIcon?: Slot; extra?: Slot; title?: Slot; onSelect?: (selectedKeys: TreeNodeKey[], event: { selected?: boolean; selectedNodes: TreeNodeData[]; node?: TreeNodeData; e?: Event; }) => void; onCheck?: (checkedKeys: TreeNodeKey[], event: { checked?: boolean; checkedNodes: TreeNodeData[]; node?: TreeNodeData; halfCheckedKeys: TreeNodeKey[]; halfCheckedNodes: TreeNodeData[]; e?: Event; }) => void; onExpand?: (expandedKeys: TreeNodeKey[], event: { expanded: boolean; expandedNodes: TreeNodeData[]; node: TreeNodeData; e?: Event; }) => void; onDragStart?: (e: DragEvent, node: TreeNodeData) => void; onDragEnd?: (e: DragEvent, node: TreeNodeData) => void; onDragOver?: (e: DragEvent, node: TreeNodeData) => void; onDragLeave?: (e: DragEvent, node: TreeNodeData) => void; onDrop?: (event: { e: DragEvent; dragNode: TreeNodeData; dropNode: TreeNodeData; dropPosition: number; }) => void; onNodeClick?: TreeNodeEventHandler; onNodeDblclick?: TreeNodeEventHandler; onNodeContextmenu?: TreeNodeEventHandler; onNodeMouseover?: TreeNodeEventHandler; onNodeMouseenter?: TreeNodeEventHandler; onNodeMouseleave?: TreeNodeEventHandler; onNodeMousemove?: TreeNodeEventHandler; onNodeMouseout?: TreeNodeEventHandler; onNodeMousedown?: TreeNodeEventHandler; onNodeMouseup?: TreeNodeEventHandler; onNodePointerdown?: TreeNodeEventHandler; onNodePointermove?: TreeNodeEventHandler; onNodePointerup?: TreeNodeEventHandler; onNodePointerenter?: TreeNodeEventHandler; onNodePointerleave?: TreeNodeEventHandler; onNodePointerover?: TreeNodeEventHandler; onNodePointerout?: TreeNodeEventHandler; onNodePointercancel?: TreeNodeEventHandler; onNodeTouchstart?: TreeNodeEventHandler; onNodeTouchmove?: TreeNodeEventHandler; onNodeTouchend?: TreeNodeEventHandler; onNodeTouchcancel?: TreeNodeEventHandler; onNodeKeydown?: TreeNodeEventHandler; onNodeKeyup?: TreeNodeEventHandler; onNodeKeypress?: TreeNodeEventHandler; onNodeLongPress?: TreeNodeEventHandler; onNodeSwipeStart?: TreeNodeSwipeEventHandler; onNodeSwipe?: TreeNodeSwipeEventHandler; onNodeSwipeEnd?: TreeNodeSwipeEventHandler; filterTreeNode?: (node: TreeNodeData) => boolean; } export type Key2TreeNode = Map;