{"version":3,"file":"Tree.cjs","sources":["../../../../../../packages/vue-components/vc-tree/src/Tree.tsx"],"sourcesContent":["import type { Key, VueNode } from '@antdv/types';\nimport type { NodeDragEventHandler, NodeMouseEventHandler } from './contextTypes';\nimport type { DragNodeEvent, EventDataNode, FlattenNode, ScrollTo } from './interface';\nimport type { CheckInfo, DraggableFn } from './props';\nimport type { TreeNodeRequiredProps } from './utils/treeUtil';\nimport { classNames, initDefaultProps, KeyCode, pickAttrs, warning } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onUnmounted,\n  reactive,\n  shallowRef,\n  toRaw,\n  watch,\n  watchEffect,\n} from 'vue';\nimport { TreeContext, useProvideKeysState } from './contextTypes';\nimport DropIndicator from './DropIndicator';\nimport NodeList, { MOTION_KEY, MotionEntity } from './NodeList';\nimport { treeProps } from './props';\nimport useMaxLevel from './useMaxLevel';\nimport {\n  arrAdd,\n  arrDel,\n  calcDropPosition,\n  calcSelectedKeys,\n  conductExpandParent,\n  getDragChildrenKeys,\n  parseCheckedKeys,\n  posToArr,\n} from './util';\nimport { conductCheck } from './utils/conductUtil';\nimport {\n  convertDataToEntities,\n  convertNodePropsToEventData,\n  convertTreeToData,\n  fillFieldNames,\n  flattenTreeData,\n  getTreeNodeProps,\n} from './utils/treeUtil';\n\nconst MAX_RETRY_TIMES = 10;\n\nexport interface DraggableConfig {\n  icon?: boolean | (() => VueNode) | VueNode;\n  nodeDraggable?: DraggableFn;\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'Tree',\n  inheritAttrs: false,\n  props: initDefaultProps(treeProps(), {\n    prefixCls: 'vc-tree',\n    showLine: false,\n    showIcon: true,\n    selectable: true,\n    multiple: false,\n    checkable: false,\n    disabled: false,\n    checkStrictly: false,\n    draggable: false,\n    expandAction: false,\n    defaultExpandParent: true,\n    autoExpandParent: false,\n    defaultExpandAll: false,\n    defaultExpandedKeys: [],\n    defaultCheckedKeys: [],\n    defaultSelectedKeys: [],\n    dropIndicatorRender: DropIndicator,\n    allowDrop: () => true,\n  }),\n\n  setup(props, { attrs, slots, expose }) {\n    const destroyed = shallowRef(false);\n    let delayedDragEnterLogic: Record<Key, number> = {};\n    const indent = shallowRef();\n    const selectedKeys = shallowRef<Key[]>([]);\n    const checkedKeys = shallowRef<Key[]>([]);\n    const halfCheckedKeys = shallowRef<Key[]>([]);\n    const loadedKeys = shallowRef<Key[]>([]);\n    const loadingKeys = shallowRef<Key[]>([]);\n    const expandedKeys = shallowRef<Key[]>([]);\n    const loadingRetryTimes: Record<Key, number> = {};\n    const dragState = reactive({\n      draggingNodeKey: null,\n      dragChildrenKeys: [],\n\n      // dropTargetKey is the key of abstract-drop-node\n      // the abstract-drop-node is the real drop node when drag and drop\n      // not the DOM drag over node\n      dropTargetKey: null,\n      dropPosition: null, // the drop position of abstract-drop-node, inside 0, top -1, bottom 1\n      dropContainerKey: null, // the container key of abstract-drop-node if dropPosition is -1 or 1\n      dropLevelOffset: null, // the drop level offset of abstract-drag-over-node\n      dropTargetPos: null, // the pos of abstract-drop-node\n      dropAllowed: true, // if drop to abstract-drop-node is allowed\n      // the abstract-drag-over-node\n      // if mouse is on the bottom of top dom node or no the top of the bottom dom node\n      // abstract-drag-over-node is the top node\n      dragOverNodeKey: null,\n    });\n    const treeData = shallowRef([]);\n    watch(\n      [() => props.treeData, () => props.children],\n      () => {\n        treeData.value\n          = props.treeData !== undefined\n            ? props.treeData.slice()\n            : convertTreeToData(toRaw(props.children));\n      },\n      {\n        immediate: true,\n        deep: true,\n      },\n    );\n    const keyEntities = shallowRef({});\n\n    const focused = shallowRef(false);\n    const activeKey = shallowRef<Key>(null);\n\n    const listChanging = shallowRef(false);\n\n    const fieldNames = computed(() => fillFieldNames(props.fieldNames));\n\n    const listRef = shallowRef();\n\n    let dragStartMousePosition = null;\n\n    let dragNode: DragNodeEvent = null;\n\n    let currentMouseOverDroppableNodeKey = null;\n\n    const treeNodeRequiredProps = computed<TreeNodeRequiredProps>(() => {\n      return {\n        expandedKeysSet: expandedKeysSet.value,\n        selectedKeysSet: selectedKeysSet.value,\n        loadedKeysSet: loadedKeysSet.value,\n        loadingKeysSet: loadingKeysSet.value,\n        checkedKeysSet: checkedKeysSet.value,\n        halfCheckedKeysSet: halfCheckedKeysSet.value,\n        dragOverNodeKey: dragState.dragOverNodeKey,\n        dropPosition: dragState.dropPosition,\n        keyEntities: keyEntities.value,\n      };\n    });\n    const expandedKeysSet = computed(() => {\n      return new Set(expandedKeys.value);\n    });\n    const selectedKeysSet = computed(() => {\n      return new Set(selectedKeys.value);\n    });\n    const loadedKeysSet = computed(() => {\n      return new Set(loadedKeys.value);\n    });\n    const loadingKeysSet = computed(() => {\n      return new Set(loadingKeys.value);\n    });\n    const checkedKeysSet = computed(() => {\n      return new Set(checkedKeys.value);\n    });\n    const halfCheckedKeysSet = computed(() => {\n      return new Set(halfCheckedKeys.value);\n    });\n\n    watchEffect(() => {\n      if (treeData.value) {\n        const entitiesMap = convertDataToEntities(treeData.value, {\n          fieldNames: fieldNames.value,\n        });\n        keyEntities.value = {\n          [MOTION_KEY]: MotionEntity,\n          ...entitiesMap.keyEntities,\n        };\n      }\n    });\n    let init = false; // 处理 defaultXxxx api, 仅仅首次有效\n\n    watch(\n      [() => props.expandedKeys, () => props.autoExpandParent, keyEntities],\n      ([_newKeys, newAutoExpandParent], [_oldKeys, oldAutoExpandParent]) => {\n        let keys = expandedKeys.value;\n        // ================ expandedKeys =================\n        if (\n          props.expandedKeys !== undefined\n          || (init && newAutoExpandParent !== oldAutoExpandParent)\n        ) {\n          keys\n            = props.autoExpandParent || (!init && props.defaultExpandParent)\n              ? conductExpandParent(props.expandedKeys, keyEntities.value)\n              : props.expandedKeys;\n        } else if (!init && props.defaultExpandAll) {\n          const cloneKeyEntities = { ...keyEntities.value };\n          delete cloneKeyEntities[MOTION_KEY];\n          keys = Object.keys(cloneKeyEntities).map(key => cloneKeyEntities[key].key);\n        } else if (!init && props.defaultExpandedKeys) {\n          keys\n            = props.autoExpandParent || props.defaultExpandParent\n              ? conductExpandParent(props.defaultExpandedKeys, keyEntities.value)\n              : props.defaultExpandedKeys;\n        }\n\n        if (keys)\n          expandedKeys.value = keys;\n\n        init = true;\n      },\n      { immediate: true },\n    );\n\n    // ================ flattenNodes =================\n    const flattenNodes = shallowRef([]);\n    watchEffect(() => {\n      flattenNodes.value = flattenTreeData(treeData.value, expandedKeys.value, fieldNames.value);\n    });\n    // ================ selectedKeys =================\n    watchEffect(() => {\n      if (props.selectable) {\n        if (props.selectedKeys !== undefined)\n          selectedKeys.value = calcSelectedKeys(props.selectedKeys, props);\n        else if (!init && props.defaultSelectedKeys)\n          selectedKeys.value = calcSelectedKeys(props.defaultSelectedKeys, props);\n      }\n    });\n    const { maxLevel, levelEntities } = useMaxLevel(keyEntities);\n    // ================= checkedKeys =================\n    watchEffect(() => {\n      if (props.checkable) {\n        let checkedKeyEntity;\n\n        if (props.checkedKeys !== undefined) {\n          checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {};\n        } else if (!init && props.defaultCheckedKeys) {\n          checkedKeyEntity = parseCheckedKeys(props.defaultCheckedKeys) || {};\n        } else if (treeData.value) {\n          // If `treeData` changed, we also need check it\n          checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {\n            checkedKeys: checkedKeys.value,\n            halfCheckedKeys: halfCheckedKeys.value,\n          };\n        }\n\n        if (checkedKeyEntity) {\n          let { checkedKeys: newCheckedKeys = [], halfCheckedKeys: newHalfCheckedKeys = [] }\n            = checkedKeyEntity;\n\n          if (!props.checkStrictly) {\n            const conductKeys = conductCheck(\n              newCheckedKeys,\n              true,\n              keyEntities.value,\n              maxLevel.value,\n              levelEntities.value,\n            );\n            ({ checkedKeys: newCheckedKeys, halfCheckedKeys: newHalfCheckedKeys } = conductKeys);\n          }\n\n          checkedKeys.value = newCheckedKeys;\n          halfCheckedKeys.value = newHalfCheckedKeys;\n        }\n      }\n    });\n\n    // ================= loadedKeys ==================\n    watchEffect(() => {\n      if (props.loadedKeys)\n        loadedKeys.value = props.loadedKeys;\n    });\n\n    const resetDragState = () => {\n      Object.assign(dragState, {\n        dragOverNodeKey: null,\n        dropPosition: null,\n        dropLevelOffset: null,\n        dropTargetKey: null,\n        dropContainerKey: null,\n        dropTargetPos: null,\n        dropAllowed: false,\n      });\n    };\n    const scrollTo: ScrollTo = (scroll) => {\n      listRef.value.scrollTo(scroll);\n    };\n    watch(\n      () => props.activeKey,\n      () => {\n        if (props.activeKey !== undefined)\n          activeKey.value = props.activeKey;\n      },\n      { immediate: true },\n    );\n    watch(\n      activeKey,\n      (val) => {\n        nextTick(() => {\n          if (val !== null)\n            scrollTo({ key: val });\n        });\n      },\n      { immediate: true, flush: 'post' },\n    );\n    // =========================== Expanded ===========================\n    /** Set uncontrolled `expandedKeys`. This will also auto update `flattenNodes`. */\n    const setExpandedKeys = (keys: Key[]) => {\n      if (props.expandedKeys === undefined)\n        expandedKeys.value = keys;\n    };\n\n    const cleanDragState = () => {\n      if (dragState.draggingNodeKey !== null) {\n        Object.assign(dragState, {\n          draggingNodeKey: null,\n          dropPosition: null,\n          dropContainerKey: null,\n          dropTargetKey: null,\n          dropLevelOffset: null,\n          dropAllowed: true,\n          dragOverNodeKey: null,\n        });\n      }\n      dragStartMousePosition = null;\n      currentMouseOverDroppableNodeKey = null;\n    };\n    // if onNodeDragEnd is called, onWindowDragEnd won't be called since stopPropagation() is called\n    const onNodeDragEnd: NodeDragEventHandler = (event, node) => {\n      const { onDragend } = props;\n\n      dragState.dragOverNodeKey = null;\n\n      cleanDragState();\n\n      onDragend?.({ event, node: node.eventData });\n\n      dragNode = null;\n    };\n\n    // since stopPropagation() is called in treeNode\n    // if onWindowDrag is called, whice means state is keeped, drag state should be cleared\n    const onWindowDragEnd = (event) => {\n      onNodeDragEnd(event, null, true);\n      window.removeEventListener('dragend', onWindowDragEnd);\n    };\n\n    const onNodeDragStart: NodeDragEventHandler = (event, node) => {\n      const { onDragstart } = props;\n      const { eventKey, eventData } = node;\n      dragNode = node;\n      dragStartMousePosition = {\n        x: event.clientX,\n        y: event.clientY,\n      };\n\n      const newExpandedKeys = arrDel(expandedKeys.value, eventKey);\n\n      dragState.draggingNodeKey = eventKey;\n      dragState.dragChildrenKeys = getDragChildrenKeys(eventKey, keyEntities.value);\n      indent.value = listRef.value.getIndentWidth();\n\n      setExpandedKeys(newExpandedKeys);\n      window.addEventListener('dragend', onWindowDragEnd);\n\n      if (onDragstart)\n        onDragstart({ event, node: eventData });\n    };\n\n    /**\n     * [Legacy] Select handler is smaller than node,\n     * so that this will trigger when drag enter node or select handler.\n     * This is a little tricky if customize css without padding.\n     * Better for use mouse move event to refresh drag state.\n     * But let's just keep it to avoid event trigger logic change.\n     */\n    const onNodeDragEnter = (event: DragEvent, node: DragNodeEvent) => {\n      const { onDragenter, onExpand, allowDrop, direction } = props;\n      const { pos, eventKey } = node;\n      // record the key of node which is latest entered, used in dragleave event.\n      if (currentMouseOverDroppableNodeKey !== eventKey)\n        currentMouseOverDroppableNodeKey = eventKey;\n\n      if (!dragNode) {\n        resetDragState();\n        return;\n      }\n      const {\n        dropPosition,\n        dropLevelOffset,\n        dropTargetKey,\n        dropContainerKey,\n        dropTargetPos,\n        dropAllowed,\n        dragOverNodeKey,\n      } = calcDropPosition(\n        event,\n        dragNode,\n        node,\n        indent.value,\n        dragStartMousePosition,\n        allowDrop,\n        flattenNodes.value,\n        keyEntities.value,\n        expandedKeysSet.value,\n        direction,\n      );\n\n      if (\n        // don't allow drop inside its children\n        dragState.dragChildrenKeys.includes(dropTargetKey)\n        // don't allow drop when drop is not allowed caculated by calcDropPosition\n        || !dropAllowed\n      ) {\n        resetDragState();\n        return;\n      }\n\n      // Side effect for delay drag\n      if (!delayedDragEnterLogic)\n        delayedDragEnterLogic = {};\n\n      Object.keys(delayedDragEnterLogic).forEach((key) => {\n        clearTimeout(delayedDragEnterLogic[key]);\n      });\n\n      if (dragNode.eventKey !== node.eventKey) {\n        // hoist expand logic here\n        // since if logic is on the bottom\n        // it will be blocked by abstract dragover node check\n        //   => if you dragenter from top, you mouse will still be consider as in the top node\n        delayedDragEnterLogic[pos] = window.setTimeout(() => {\n          if (dragState.draggingNodeKey === null) return;\n\n          let newExpandedKeys = expandedKeys.value.slice();\n          const entity = keyEntities.value[node.eventKey];\n\n          if (entity && (entity.children || []).length)\n            newExpandedKeys = arrAdd(expandedKeys.value, node.eventKey);\n\n          setExpandedKeys(newExpandedKeys);\n\n          if (onExpand) {\n            onExpand(newExpandedKeys, {\n              node: node.eventData,\n              expanded: true,\n              nativeEvent: event,\n            });\n          }\n        }, 800);\n      }\n\n      // Skip if drag node is self\n      if (dragNode.eventKey === dropTargetKey && dropLevelOffset === 0) {\n        resetDragState();\n        return;\n      }\n\n      // Update drag over node and drag state\n      Object.assign(dragState, {\n        dragOverNodeKey,\n        dropPosition,\n        dropLevelOffset,\n        dropTargetKey,\n        dropContainerKey,\n        dropTargetPos,\n        dropAllowed,\n      });\n\n      if (onDragenter) {\n        onDragenter({\n          event,\n          node: node.eventData,\n          expandedKeys: expandedKeys.value,\n        });\n      }\n    };\n\n    const onNodeDragOver = (event: DragEvent, node: DragNodeEvent) => {\n      const { onDragover, allowDrop, direction } = props;\n\n      if (!dragNode)\n        return;\n\n      const {\n        dropPosition,\n        dropLevelOffset,\n        dropTargetKey,\n        dropContainerKey,\n        dropAllowed,\n        dropTargetPos,\n        dragOverNodeKey,\n      } = calcDropPosition(\n        event,\n        dragNode,\n        node,\n        indent.value,\n        dragStartMousePosition,\n        allowDrop,\n        flattenNodes.value,\n        keyEntities.value,\n        expandedKeysSet.value,\n        direction,\n      );\n\n      if (dragState.dragChildrenKeys.includes(dropTargetKey) || !dropAllowed) {\n        // don't allow drop inside its children\n        // don't allow drop when drop is not allowed caculated by calcDropPosition\n        return;\n      }\n\n      // Update drag position\n\n      if (dragNode.eventKey === dropTargetKey && dropLevelOffset === 0) {\n        if (\n          !(\n            dragState.dropPosition === null\n            && dragState.dropLevelOffset === null\n            && dragState.dropTargetKey === null\n            && dragState.dropContainerKey === null\n            && dragState.dropTargetPos === null\n            && dragState.dropAllowed === false\n            && dragState.dragOverNodeKey === null\n          )\n        ) {\n          resetDragState();\n        }\n      } else if (\n        !(\n          dropPosition === dragState.dropPosition\n          && dropLevelOffset === dragState.dropLevelOffset\n          && dropTargetKey === dragState.dropTargetKey\n          && dropContainerKey === dragState.dropContainerKey\n          && dropTargetPos === dragState.dropTargetPos\n          && dropAllowed === dragState.dropAllowed\n          && dragOverNodeKey === dragState.dragOverNodeKey\n        )\n      ) {\n        Object.assign(dragState, {\n          dropPosition,\n          dropLevelOffset,\n          dropTargetKey,\n          dropContainerKey,\n          dropTargetPos,\n          dropAllowed,\n          dragOverNodeKey,\n        });\n      }\n\n      if (onDragover)\n        onDragover({ event, node: node.eventData });\n    };\n\n    const onNodeDragLeave: NodeDragEventHandler = (event, node) => {\n      // if it is outside the droppable area\n      // currentMouseOverDroppableNodeKey will be updated in dragenter event when into another droppable receiver.\n      if (\n        currentMouseOverDroppableNodeKey === node.eventKey\n        && !(event.currentTarget as any).contains(event.relatedTarget as Node)\n      ) {\n        resetDragState();\n        currentMouseOverDroppableNodeKey = null;\n      }\n\n      const { onDragleave } = props;\n\n      if (onDragleave)\n        onDragleave({ event, node: node.eventData });\n    };\n    const onNodeDrop = (event: DragEvent, _node, outsideTree = false) => {\n      const { dragChildrenKeys, dropPosition, dropTargetKey, dropTargetPos, dropAllowed }\n        = dragState;\n      if (!dropAllowed) return;\n\n      const { onDrop } = props;\n\n      dragState.dragOverNodeKey = null;\n      cleanDragState();\n\n      if (dropTargetKey === null) return;\n      const abstractDropNodeProps = {\n        ...getTreeNodeProps(dropTargetKey, toRaw(treeNodeRequiredProps.value)),\n        active: activeItem.value?.key === dropTargetKey,\n        data: keyEntities.value[dropTargetKey].node,\n      };\n      const dropToChild = dragChildrenKeys.includes(dropTargetKey);\n\n      warning(\n        !dropToChild,\n        'Can not drop to dragNode\\'s children node. Maybe this is a bug of ant-design-vue. Please report an issue.',\n      );\n\n      const posArr = posToArr(dropTargetPos);\n\n      const dropResult = {\n        event,\n        node: convertNodePropsToEventData(abstractDropNodeProps),\n        dragNode: dragNode ? dragNode.eventData : null,\n        dragNodesKeys: [dragNode.eventKey].concat(dragChildrenKeys),\n        dropToGap: dropPosition !== 0,\n        dropPosition: dropPosition + Number(posArr[posArr.length - 1]),\n      };\n\n      if (!outsideTree)\n        onDrop?.(dropResult);\n\n      dragNode = null;\n    };\n    const triggerExpandActionExpand: NodeMouseEventHandler = (e, treeNode) => {\n      const { expanded, key } = treeNode;\n\n      const node = flattenNodes.value.filter(nodeItem => nodeItem.key === key)[0];\n      const eventNode = convertNodePropsToEventData({\n        ...getTreeNodeProps(key, treeNodeRequiredProps.value),\n        data: node.data,\n      });\n      setExpandedKeys(expanded ? arrDel(expandedKeys.value, key) : arrAdd(expandedKeys.value, key));\n\n      onNodeExpand(e, eventNode);\n    };\n\n    const onNodeClick: NodeMouseEventHandler = (e, treeNode) => {\n      const { onClick, expandAction } = props;\n      if (expandAction === 'click')\n        triggerExpandActionExpand(e, treeNode);\n\n      if (onClick)\n        onClick(e, treeNode);\n    };\n\n    const onNodeDoubleClick: NodeMouseEventHandler = (e, treeNode) => {\n      const { onDblclick, expandAction } = props;\n      if (expandAction === 'doubleclick' || expandAction === 'dblclick')\n        triggerExpandActionExpand(e, treeNode);\n\n      if (onDblclick)\n        onDblclick(e, treeNode);\n    };\n\n    const onNodeSelect: NodeMouseEventHandler = (e, treeNode) => {\n      let newSelectedKeys = selectedKeys.value;\n      const { onSelect, multiple } = props;\n      const { selected } = treeNode;\n      const key = treeNode[fieldNames.value.key];\n      const targetSelected = !selected;\n\n      // Update selected keys\n      if (!targetSelected)\n        newSelectedKeys = arrDel(newSelectedKeys, key);\n      else if (!multiple)\n        newSelectedKeys = [key];\n      else\n        newSelectedKeys = arrAdd(newSelectedKeys, key);\n\n      // [Legacy] Not found related usage in doc or upper libs\n      const keyEntitiesValue = keyEntities.value;\n      const selectedNodes = newSelectedKeys\n        .map((selectedKey) => {\n          const entity = keyEntitiesValue[selectedKey];\n          if (!entity) return null;\n\n          return entity.node;\n        })\n        .filter(node => node);\n\n      if (props.selectedKeys === undefined)\n        selectedKeys.value = newSelectedKeys;\n\n      if (onSelect) {\n        onSelect(newSelectedKeys, {\n          event: 'select',\n          selected: targetSelected,\n          node: treeNode,\n          selectedNodes,\n          nativeEvent: e,\n        });\n      }\n    };\n\n    const onNodeCheck = (e: MouseEvent, treeNode: EventDataNode, checked: boolean) => {\n      const { checkStrictly, onCheck } = props;\n      const key = treeNode[fieldNames.value.key];\n\n      // Prepare trigger arguments\n      let checkedObj;\n      const eventObj: Partial<CheckInfo> = {\n        event: 'check',\n        node: treeNode,\n        checked,\n        nativeEvent: e,\n      };\n      const keyEntitiesValue = keyEntities.value;\n      if (checkStrictly) {\n        const newCheckedKeys = checked\n          ? arrAdd(checkedKeys.value, key)\n          : arrDel(checkedKeys.value, key);\n        const newHalfCheckedKeys = arrDel(halfCheckedKeys.value, key);\n        checkedObj = { checked: newCheckedKeys, halfChecked: newHalfCheckedKeys };\n\n        eventObj.checkedNodes = newCheckedKeys\n          .map(checkedKey => keyEntitiesValue[checkedKey])\n          .filter(entity => entity)\n          .map(entity => entity.node);\n\n        if (props.checkedKeys === undefined)\n          checkedKeys.value = newCheckedKeys;\n      } else {\n        // Always fill first\n        let { checkedKeys: newCheckedKeys, halfCheckedKeys: newHalfCheckedKeys } = conductCheck(\n          [...checkedKeys.value, key],\n          true,\n          keyEntitiesValue,\n          maxLevel.value,\n          levelEntities.value,\n        );\n\n        // If remove, we do it again to correction\n        if (!checked) {\n          const keySet = new Set(newCheckedKeys);\n          keySet.delete(key);\n          ({ checkedKeys: newCheckedKeys, halfCheckedKeys: newHalfCheckedKeys } = conductCheck(\n            Array.from(keySet),\n            { checked: false, halfCheckedKeys: newHalfCheckedKeys },\n            keyEntitiesValue,\n            maxLevel.value,\n            levelEntities.value,\n          ));\n        }\n\n        checkedObj = newCheckedKeys;\n\n        // [Legacy] This is used for vc-tree-select`\n        eventObj.checkedNodes = [];\n        eventObj.checkedNodesPositions = [];\n        eventObj.halfCheckedKeys = newHalfCheckedKeys;\n        newCheckedKeys.forEach((checkedKey) => {\n          const entity = keyEntitiesValue[checkedKey];\n          if (!entity) return;\n\n          const { node, pos } = entity;\n          eventObj.checkedNodes.push(node);\n          eventObj.checkedNodesPositions.push({ node, pos });\n        });\n        if (props.checkedKeys === undefined) {\n          checkedKeys.value = newCheckedKeys;\n          halfCheckedKeys.value = newHalfCheckedKeys;\n        }\n      }\n\n      if (onCheck)\n        onCheck(checkedObj, eventObj as CheckInfo);\n    };\n\n    const onNodeLoad = (treeNode: EventDataNode) => {\n      const key = treeNode[fieldNames.value.key];\n      const loadPromise = new Promise<void>((resolve, reject) => {\n        // We need to get the latest state of loading/loaded keys\n        const { loadData, onLoad } = props;\n\n        if (!loadData || loadedKeysSet.value.has(key) || loadingKeysSet.value.has(key))\n          return null;\n\n        // Process load data\n        const promise = loadData(treeNode);\n        promise\n          .then(() => {\n            const newLoadedKeys = arrAdd(loadedKeys.value, key);\n            const newLoadingKeys = arrDel(loadingKeys.value, key);\n\n            // onLoad should trigger before internal setState to avoid `loadData` trigger twice.\n            // https://github.com/ant-design/ant-design/issues/12464\n            if (onLoad) {\n              onLoad(newLoadedKeys, {\n                event: 'load',\n                node: treeNode,\n              });\n            }\n\n            if (props.loadedKeys === undefined)\n              loadedKeys.value = newLoadedKeys;\n\n            loadingKeys.value = newLoadingKeys;\n            resolve();\n          })\n          .catch((e) => {\n            const newLoadingKeys = arrDel(loadingKeys.value, key);\n            loadingKeys.value = newLoadingKeys;\n\n            // If exceed max retry times, we give up retry\n            loadingRetryTimes[key] = (loadingRetryTimes[key] || 0) + 1;\n            if (loadingRetryTimes[key] >= MAX_RETRY_TIMES) {\n              warning(false, 'Retry for `loadData` many times but still failed. No more retry.');\n              const newLoadedKeys = arrAdd(loadedKeys.value, key);\n              if (props.loadedKeys === undefined)\n                loadedKeys.value = newLoadedKeys;\n\n              resolve();\n            }\n\n            reject(e);\n          });\n\n        loadingKeys.value = arrAdd(loadingKeys.value, key);\n      });\n      // Not care warning if we ignore this\n      loadPromise.catch(() => {});\n\n      return loadPromise;\n    };\n    const onNodeMouseEnter: NodeMouseEventHandler = (event, node) => {\n      const { onMouseenter } = props;\n      if (onMouseenter)\n        onMouseenter({ event, node });\n    };\n\n    const onNodeMouseLeave: NodeMouseEventHandler = (event, node) => {\n      const { onMouseleave } = props;\n      if (onMouseleave)\n        onMouseleave({ event, node });\n    };\n\n    const onNodeContextMenu: NodeMouseEventHandler = (event, node) => {\n      const { onRightClick } = props;\n      if (onRightClick) {\n        event.preventDefault();\n        onRightClick({ event, node });\n      }\n    };\n\n    const onFocus = (e: FocusEvent) => {\n      focused.value = true;\n      props.onFocus?.(e);\n    };\n\n    const onBlur = (e: FocusEvent) => {\n      focused.value = false;\n      onActiveChange(null);\n\n      props.onBlur?.(e);\n    };\n\n    const onNodeExpand = (e: MouseEvent, treeNode: EventDataNode) => {\n      let newExpandedKeys = expandedKeys.value;\n      const { onExpand, loadData } = props;\n      const { expanded } = treeNode;\n      const key = treeNode[fieldNames.value.key];\n\n      // Do nothing when motion is in progress\n      if (listChanging.value)\n        return;\n\n      // Update selected keys\n      const index = newExpandedKeys.indexOf(key);\n      const targetExpanded = !expanded;\n\n      warning(\n        (expanded && index !== -1) || (!expanded && index === -1),\n        'Expand state not sync with index check',\n      );\n\n      if (targetExpanded)\n        newExpandedKeys = arrAdd(newExpandedKeys, key);\n      else\n        newExpandedKeys = arrDel(newExpandedKeys, key);\n\n      setExpandedKeys(newExpandedKeys);\n\n      if (onExpand) {\n        onExpand(newExpandedKeys, {\n          node: treeNode,\n          expanded: targetExpanded,\n          nativeEvent: e,\n        });\n      }\n\n      // Async Load data\n      if (targetExpanded && loadData) {\n        const loadPromise = onNodeLoad(treeNode);\n        if (loadPromise) {\n          loadPromise\n            .then(() => {\n              // [Legacy] Refresh logic\n              // const newFlattenTreeData = flattenTreeData(\n              //   treeData.value,\n              //   newExpandedKeys,\n              //   fieldNames.value,\n              // );\n              // flattenNodes.value = newFlattenTreeData;\n            })\n            .catch((e) => {\n              const expandedKeysToRestore = arrDel(expandedKeys.value, key);\n              setExpandedKeys(expandedKeysToRestore);\n              Promise.reject(e);\n            });\n        }\n      }\n    };\n\n    const onListChangeStart = () => {\n      listChanging.value = true;\n    };\n\n    const onListChangeEnd = () => {\n      setTimeout(() => {\n        listChanging.value = false;\n      });\n    };\n\n    // =========================== Keyboard ===========================\n    const onActiveChange = (newActiveKey: Key) => {\n      const { onActiveChange } = props;\n\n      if (activeKey.value === newActiveKey)\n        return;\n\n      if (props.activeKey !== undefined)\n        activeKey.value = newActiveKey;\n\n      if (newActiveKey !== null)\n        scrollTo({ key: newActiveKey });\n\n      if (onActiveChange)\n        onActiveChange(newActiveKey);\n    };\n\n    const activeItem = computed<FlattenNode>(() => {\n      if (activeKey.value === null)\n        return null;\n\n      return flattenNodes.value.find(({ key }) => key === activeKey.value) || null;\n    });\n\n    const offsetActiveKey = (offset: number) => {\n      let index = flattenNodes.value.findIndex(({ key }) => key === activeKey.value);\n      // Align with index\n      if (index === -1 && offset < 0)\n        index = flattenNodes.value.length;\n\n      index = (index + offset + flattenNodes.value.length) % flattenNodes.value.length;\n\n      const item = flattenNodes.value[index];\n      if (item) {\n        const { key } = item;\n        onActiveChange(key);\n      } else {\n        onActiveChange(null);\n      }\n    };\n    const activeItemEventNode = computed(() => {\n      return convertNodePropsToEventData({\n        ...getTreeNodeProps(activeKey.value, treeNodeRequiredProps.value),\n        data: activeItem.value.data,\n        active: true,\n      });\n    });\n    const onKeydown = (event) => {\n      const { checkable, selectable } = props;\n\n      // >>>>>>>>>> Direction\n      switch (event.which) {\n        case KeyCode.UP: {\n          offsetActiveKey(-1);\n          event.preventDefault();\n          break;\n        }\n        case KeyCode.DOWN: {\n          offsetActiveKey(1);\n          event.preventDefault();\n          break;\n        }\n      }\n\n      // >>>>>>>>>> Expand & Selection\n      const item = activeItem.value;\n      if (item && item.data) {\n        const expandable = item.data.isLeaf === false || !!(item.data.children || []).length;\n        const eventNode = activeItemEventNode.value;\n\n        switch (event.which) {\n          // >>> Expand\n          case KeyCode.LEFT: {\n            // Collapse if possible\n            if (expandable && expandedKeysSet.value.has(activeKey.value))\n              onNodeExpand({} as MouseEvent, eventNode);\n            else if (item.parent)\n              onActiveChange(item.parent.key);\n\n            event.preventDefault();\n            break;\n          }\n          case KeyCode.RIGHT: {\n            // Expand if possible\n            if (expandable && !expandedKeysSet.value.has(activeKey.value))\n              onNodeExpand({} as MouseEvent, eventNode);\n            else if (item.children && item.children.length)\n              onActiveChange(item.children[0].key);\n\n            event.preventDefault();\n            break;\n          }\n\n          // Selection\n          case KeyCode.ENTER:\n          case KeyCode.SPACE: {\n            if (\n              checkable\n              && !eventNode.disabled\n              && eventNode.checkable !== false\n              && !eventNode.disableCheckbox\n            ) {\n              onNodeCheck({} as MouseEvent, eventNode, !checkedKeysSet.value.has(activeKey.value));\n            }\n            else if (\n              !checkable\n              && selectable\n              && !eventNode.disabled\n              && eventNode.selectable !== false\n            ) {\n              onNodeSelect({} as MouseEvent, eventNode);\n            }\n\n            break;\n          }\n        }\n      }\n\n      props.onKeydown?.(event);\n    };\n    expose({\n      onNodeExpand,\n      scrollTo,\n      onKeydown,\n      selectedKeys: computed(() => selectedKeys.value),\n      checkedKeys: computed(() => checkedKeys.value),\n      halfCheckedKeys: computed(() => halfCheckedKeys.value),\n      loadedKeys: computed(() => loadedKeys.value),\n      loadingKeys: computed(() => loadingKeys.value),\n      expandedKeys: computed(() => expandedKeys.value),\n    });\n    onUnmounted(() => {\n      window.removeEventListener('dragend', onWindowDragEnd);\n      destroyed.value = true;\n    });\n    useProvideKeysState({\n      expandedKeys,\n      selectedKeys,\n      loadedKeys,\n      loadingKeys,\n      checkedKeys,\n      halfCheckedKeys,\n      expandedKeysSet,\n      selectedKeysSet,\n      loadedKeysSet,\n      loadingKeysSet,\n      checkedKeysSet,\n      halfCheckedKeysSet,\n      flattenNodes,\n    });\n    return () => {\n      const {\n        // focused,\n        // flattenNodes,\n        // keyEntities,\n        draggingNodeKey,\n        // activeKey,\n        dropLevelOffset,\n        dropContainerKey,\n        dropTargetKey,\n        dropPosition,\n        dragOverNodeKey,\n        // indent,\n      } = dragState;\n      const {\n        prefixCls,\n        showLine,\n        focusable,\n        tabindex = 0,\n        selectable,\n        showIcon,\n        icon = slots.icon,\n        switcherIcon,\n        draggable,\n        checkable,\n        checkStrictly,\n        disabled,\n        motion,\n        loadData,\n        filterTreeNode,\n        height,\n        itemHeight,\n        virtual,\n        dropIndicatorRender,\n        onContextmenu,\n        onScroll,\n        direction,\n        rootClassName,\n        rootStyle,\n      } = props;\n\n      const { class: className, style } = attrs;\n      const domProps = pickAttrs(\n        { ...props, ...attrs },\n        {\n          aria: true,\n          data: true,\n        },\n      );\n\n      // It's better move to hooks but we just simply keep here\n      let draggableConfig: DraggableConfig | false;\n      if (draggable) {\n        if (typeof draggable === 'object') {\n          draggableConfig = draggable;\n        } else if (typeof draggable === 'function') {\n          draggableConfig = {\n            nodeDraggable: draggable as DraggableFn,\n          };\n        } else {\n          draggableConfig = {};\n        }\n      } else {\n        draggableConfig = false;\n      }\n      return (\n        <TreeContext\n          value={{\n            prefixCls,\n            selectable,\n            showIcon,\n            icon,\n            switcherIcon,\n            draggable: draggableConfig,\n            draggingNodeKey,\n            checkable,\n            customCheckable: slots.checkable,\n            checkStrictly,\n            disabled,\n            keyEntities: keyEntities.value,\n            dropLevelOffset,\n            dropContainerKey,\n            dropTargetKey,\n            dropPosition,\n            dragOverNodeKey,\n            dragging: draggingNodeKey !== null,\n            indent: indent.value,\n            direction,\n            dropIndicatorRender,\n\n            loadData,\n            filterTreeNode,\n\n            onNodeClick,\n            onNodeDoubleClick,\n            onNodeExpand,\n            onNodeSelect,\n            onNodeCheck,\n            onNodeLoad,\n            onNodeMouseEnter,\n            onNodeMouseLeave,\n            onNodeContextMenu,\n            onNodeDragStart,\n            onNodeDragEnter,\n            onNodeDragOver,\n            onNodeDragLeave,\n            onNodeDragEnd,\n            onNodeDrop,\n            slots,\n          }}\n        >\n          <div\n            role=\"tree\"\n            class={classNames(prefixCls, className, rootClassName, {\n              [`${prefixCls}-show-line`]: showLine,\n              [`${prefixCls}-focused`]: focused.value,\n              [`${prefixCls}-active-focused`]: activeKey.value !== null,\n            })}\n            style={rootStyle}\n          >\n            <NodeList\n              ref={listRef}\n              prefixCls={prefixCls}\n              style={style}\n              disabled={disabled}\n              selectable={selectable}\n              checkable={!!checkable}\n              motion={motion}\n              height={height}\n              itemHeight={itemHeight}\n              virtual={virtual}\n              focusable={focusable}\n              focused={focused.value}\n              tabindex={tabindex}\n              activeItem={activeItem.value}\n              onFocus={onFocus}\n              onBlur={onBlur}\n              onKeydown={onKeydown}\n              onActiveChange={onActiveChange}\n              onListChangeStart={onListChangeStart}\n              onListChangeEnd={onListChangeEnd}\n              onContextmenu={onContextmenu}\n              onScroll={onScroll}\n              {...domProps}\n            />\n          </div>\n        </TreeContext>\n      );\n    };\n  },\n});\n"],"names":["MAX_RETRY_TIMES","defineComponent","compatConfig","MODE","name","inheritAttrs","props","initDefaultProps","treeProps","prefixCls","showLine","showIcon","selectable","multiple","checkable","disabled","checkStrictly","draggable","expandAction","defaultExpandParent","autoExpandParent","defaultExpandAll","defaultExpandedKeys","defaultCheckedKeys","defaultSelectedKeys","dropIndicatorRender","DropIndicator","allowDrop","setup","attrs","slots","expose","destroyed","shallowRef","delayedDragEnterLogic","indent","selectedKeys","checkedKeys","halfCheckedKeys","loadedKeys","loadingKeys","expandedKeys","loadingRetryTimes","dragState","reactive","draggingNodeKey","dragChildrenKeys","dropTargetKey","dropPosition","dropContainerKey","dropLevelOffset","dropTargetPos","dropAllowed","dragOverNodeKey","treeData","watch","children","value","undefined","slice","convertTreeToData","toRaw","immediate","deep","keyEntities","focused","activeKey","listChanging","fieldNames","computed","fillFieldNames","listRef","dragStartMousePosition","dragNode","currentMouseOverDroppableNodeKey","treeNodeRequiredProps","expandedKeysSet","selectedKeysSet","loadedKeysSet","loadingKeysSet","checkedKeysSet","halfCheckedKeysSet","Set","watchEffect","entitiesMap","convertDataToEntities","MOTION_KEY","MotionEntity","init","_newKeys","newAutoExpandParent","_oldKeys","oldAutoExpandParent","keys","conductExpandParent","cloneKeyEntities","Object","map","key","flattenNodes","flattenTreeData","calcSelectedKeys","maxLevel","levelEntities","useMaxLevel","checkedKeyEntity","parseCheckedKeys","newCheckedKeys","newHalfCheckedKeys","conductKeys","conductCheck","resetDragState","assign","scrollTo","scroll","val","nextTick","flush","setExpandedKeys","cleanDragState","onNodeDragEnd","event","node","onDragend","eventData","onWindowDragEnd","window","removeEventListener","onNodeDragStart","onDragstart","eventKey","x","clientX","y","clientY","newExpandedKeys","arrDel","getDragChildrenKeys","getIndentWidth","addEventListener","onNodeDragEnter","onDragenter","onExpand","direction","pos","calcDropPosition","includes","forEach","clearTimeout","setTimeout","entity","length","arrAdd","expanded","nativeEvent","onNodeDragOver","onDragover","onNodeDragLeave","currentTarget","contains","relatedTarget","onDragleave","onNodeDrop","_node","outsideTree","onDrop","abstractDropNodeProps","getTreeNodeProps","active","activeItem","data","dropToChild","warning","posArr","posToArr","dropResult","convertNodePropsToEventData","dragNodesKeys","concat","dropToGap","Number","triggerExpandActionExpand","e","treeNode","filter","nodeItem","eventNode","onNodeExpand","onNodeClick","onClick","onNodeDoubleClick","onDblclick","onNodeSelect","newSelectedKeys","onSelect","selected","targetSelected","keyEntitiesValue","selectedNodes","selectedKey","onNodeCheck","checked","onCheck","checkedObj","eventObj","halfChecked","checkedNodes","checkedKey","keySet","delete","Array","from","checkedNodesPositions","push","onNodeLoad","loadPromise","Promise","resolve","reject","loadData","onLoad","has","promise","then","newLoadedKeys","newLoadingKeys","catch","onNodeMouseEnter","onMouseenter","onNodeMouseLeave","onMouseleave","onNodeContextMenu","onRightClick","preventDefault","onFocus","onBlur","onActiveChange","index","indexOf","targetExpanded","expandedKeysToRestore","onListChangeStart","onListChangeEnd","newActiveKey","find","offsetActiveKey","offset","findIndex","item","activeItemEventNode","onKeydown","which","KeyCode","UP","DOWN","expandable","isLeaf","LEFT","parent","RIGHT","ENTER","SPACE","disableCheckbox","onUnmounted","useProvideKeysState","focusable","tabindex","icon","switcherIcon","motion","filterTreeNode","height","itemHeight","virtual","onContextmenu","onScroll","rootClassName","rootStyle","class","className","style","domProps","pickAttrs","aria","draggableConfig","nodeDraggable","_createVNode","TreeContext","customCheckable","dragging","default","classNames","NodeList"],"mappings":"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"}