{"version":3,"file":"ng-devui-tree.mjs","sources":["../../devui/tree/tree-factory.class.ts","../../devui/tree/pipe/filter-nodes.pipe.ts","../../devui/tree/tree-nodes.component.ts","../../devui/tree/tree-nodes.component.html","../../devui/tree/pipe/transfer-to-array.pipe.ts","../../devui/tree/tree.component.ts","../../devui/tree/tree.component.html","../../devui/tree/auto-focus.directive.ts","../../devui/tree/operable-tree.component.ts","../../devui/tree/operable-tree.component.html","../../devui/tree/tree.module.ts","../../devui/tree/ng-devui-tree.ts"],"sourcesContent":["import { forEach, isUndefined, omitBy, pickBy, reduce, trim, values } from 'lodash-es';\r\nimport { BehaviorSubject } from 'rxjs';\r\nexport interface Dictionary<T> {\r\n  [id: number]: T;\r\n}\r\nexport interface ITreeNodeData {\r\n  id?: number | string;\r\n  parentId?: number | string;\r\n  title?: string;\r\n  isOpen?: boolean;\r\n  data?: any;\r\n  isParent?: boolean;\r\n  loading?: boolean;\r\n  isMatch?: boolean;\r\n  isHide?: boolean;\r\n  isActive?: boolean;\r\n  isChecked?: boolean;\r\n  disabled?: boolean;\r\n\r\n  [prop: string]: any;\r\n\r\n  children?: [];\r\n}\r\n\r\nexport interface ITreeMap {\r\n  [index: number]: ITreeNodeData;\r\n}\r\n\r\nexport interface ITreeItem {\r\n  title?: string;\r\n  open?: boolean;\r\n  loading?: boolean;\r\n  isMatch?: boolean;\r\n  items?: ITreeItem[];\r\n  isParent?: boolean;\r\n  data?: any;\r\n  id?: number | string;\r\n  isHide?: boolean;\r\n  isActive?: boolean;\r\n  isChecked?: boolean;\r\n  halfChecked?: boolean;\r\n  disabled?: boolean;\r\n  showCheckbox?: boolean;\r\n  [prop: string]: any;\r\n\r\n  disableAdd?: boolean;\r\n  disableEdit?: boolean;\r\n  disableDelete?: boolean;\r\n  disableSelect?: boolean;\r\n  disableToggle?: boolean;\r\n}\r\n\r\nexport interface ITreeInput {\r\n  treeItems: Array<ITreeItem>;\r\n  parentId?: number | string;\r\n  treeNodeChildrenKey?: string;\r\n  treeNodeIdKey?: string;\r\n  checkboxDisabledKey?: string;\r\n  selectDisabledKey?: string;\r\n  toggleDisabledKey?: string;\r\n  treeNodeTitleKey?: string;\r\n  isVirtualScroll?: boolean;\r\n}\r\n\r\nexport class TreeNode implements ITreeNodeData {\r\n  constructor(public id, public parentId, public data) {}\r\n}\r\n\r\nexport class TreeFactory {\r\n  nodes: Dictionary<TreeNode>;\r\n  private idx: number;\r\n  private _checked = new Set<Object>();\r\n  private _treeRoot: TreeNode[] = [];\r\n  searchItem: string;\r\n  flattenNodes = new BehaviorSubject<TreeNode[]>([]);\r\n  virtualScroll: boolean;\r\n  canIdEmpty = true;\r\n  static create(isVirtualScroll) {\r\n    return new TreeFactory(isVirtualScroll);\r\n  }\r\n\r\n  // tree model with items\r\n  static fromTree({\r\n    treeItems,\r\n    isVirtualScroll = false,\r\n    treeNodeChildrenKey = 'items',\r\n    treeNodeIdKey = 'id',\r\n    checkboxDisabledKey = 'disabled',\r\n    selectDisabledKey = 'disabled', // 默认值与checkboxDisabledKey相同，为了兼容以前tree的disable情况\r\n    toggleDisabledKey = 'disabledToggle',\r\n    treeNodeTitleKey = 'title',\r\n  }: ITreeInput): TreeFactory {\r\n    const treeFactory = TreeFactory.create(isVirtualScroll);\r\n    treeFactory.mapTreeItems(\r\n      {\r\n        treeItems,\r\n        parentId: undefined,\r\n        treeNodeChildrenKey,\r\n        treeNodeIdKey,\r\n        checkboxDisabledKey,\r\n        selectDisabledKey,\r\n        toggleDisabledKey,\r\n        treeNodeTitleKey,\r\n      },\r\n      false\r\n    );\r\n    return treeFactory;\r\n  }\r\n\r\n  constructor(public isVirtualScroll) {\r\n    this.virtualScroll = isVirtualScroll;\r\n    this.idx = 0;\r\n    this.nodes = {};\r\n  }\r\n\r\n  mapTreeItems = (\r\n    {\r\n      treeItems,\r\n      parentId,\r\n      treeNodeChildrenKey = 'items',\r\n      treeNodeIdKey = 'id',\r\n      checkboxDisabledKey = 'disabled',\r\n      selectDisabledKey = 'disableSelect',\r\n      toggleDisabledKey = 'disableToggle',\r\n      treeNodeTitleKey = 'title',\r\n    }: ITreeInput,\r\n    renderTree = true\r\n  ) => {\r\n    forEach(treeItems, (item: ITreeItem) => {\r\n      const node = this.addNode(\r\n        {\r\n          id: item[treeNodeIdKey],\r\n          parentId,\r\n          title: item[treeNodeTitleKey],\r\n          isOpen: !!item.open,\r\n          data: item.data || {},\r\n          originItem: item,\r\n          isParent: !!item.isParent || !!(item[treeNodeChildrenKey] && item[treeNodeChildrenKey].length > 0),\r\n          loading: !!item.loading,\r\n          isMatch: !!item.isMatch,\r\n          isHide: !!item.isHide,\r\n          isChecked: !!item.isChecked,\r\n          halfChecked: !!item.halfChecked,\r\n          isActive: !!item.isActive,\r\n          disabled: !!item[checkboxDisabledKey],\r\n          disableSelect: !!item[selectDisabledKey],\r\n          disableToggle: !!item[toggleDisabledKey],\r\n          disableAdd: !!item.disableAdd,\r\n          disableEdit: !!item.disableEdit,\r\n          disableDelete: !!item.disableDelete,\r\n          children: [],\r\n          showCheckbox: item.showCheckbox,\r\n        },\r\n        undefined,\r\n        renderTree\r\n      );\r\n\r\n      if (item.isChecked) {\r\n        this._checked.add(node);\r\n      }\r\n\r\n      this.mapTreeItems(\r\n        {\r\n          treeItems: item[treeNodeChildrenKey] || [],\r\n          parentId: node.id,\r\n          treeNodeChildrenKey,\r\n          treeNodeIdKey,\r\n          checkboxDisabledKey,\r\n          selectDisabledKey,\r\n          toggleDisabledKey,\r\n          treeNodeTitleKey,\r\n        },\r\n        renderTree\r\n      );\r\n    });\r\n    return this;\r\n  };\r\n\r\n  addNode({ id, parentId, ...data }: ITreeNodeData, index?, renderTree = true): TreeNode {\r\n    let newId = id;\r\n    if (isUndefined(id)) {\r\n      this.idx++;\r\n      newId = this.idx;\r\n    }\r\n    const treeNode = new TreeNode(newId, parentId, data);\r\n    if (Object.prototype.hasOwnProperty.call(this.nodes, treeNode.id)) {\r\n      throw new Error(`Duplicated id: ${treeNode.id} detected, please specify unique ids in the tree.`);\r\n    }\r\n    this.nodes[treeNode.id] = treeNode;\r\n    this.addChildNode(this.nodes[parentId], treeNode, index);\r\n    // 兼容当前用户外部直接调用addNode方法创建节点\r\n    if (renderTree) {\r\n      this.renderFlattenTree();\r\n    }\r\n    return treeNode;\r\n  }\r\n\r\n  editNodeTitle(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.editable = true;\r\n  }\r\n\r\n  deleteNodeById(id: number | string, renderTree = true) {\r\n    const node = this.nodes[id];\r\n    if (!node) {\r\n      return;\r\n    }\r\n    const parentNode = this.nodes[node.parentId];\r\n    this.removeChildNode(parentNode, node);\r\n\r\n    const deleteItems = (nodeId) => {\r\n      this.maintainCheckedNodeList(this.nodes[nodeId], false);\r\n      const children = this.getChildrenById(nodeId);\r\n      this.nodes = omitBy(this.nodes, (_node) => {\r\n        return _node.id === nodeId;\r\n      }) as Dictionary<TreeNode>;\r\n      forEach(children, (child) => {\r\n        deleteItems(child.id);\r\n      });\r\n    };\r\n    deleteItems(id);\r\n    if (parentNode && (!parentNode.data.children || !parentNode.data.children.length)) {\r\n      parentNode.data.isParent = false;\r\n    }\r\n    if (renderTree) {\r\n      this.renderFlattenTree();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  toggleNodeById(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.isOpen = !this.nodes[id].data.isOpen;\r\n    this.renderFlattenTree();\r\n    return this;\r\n  }\r\n\r\n  openNodesById(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.isOpen = true;\r\n    if (this.nodes[id].parentId !== undefined) {\r\n      this.openNodesById(this.nodes[id].parentId);\r\n    }\r\n    this.renderFlattenTree();\r\n    return this;\r\n  }\r\n\r\n  closeNodesById(id: number | string, closeChildren = false) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.isOpen = false;\r\n    if (closeChildren) {\r\n      if (this.nodes[id] && this.nodes[id].data.children) {\r\n        this.nodes[id].data.children.forEach((node) => {\r\n          this.closeNodesById(node.id);\r\n        });\r\n      }\r\n    }\r\n    this.renderFlattenTree();\r\n    return this;\r\n  }\r\n\r\n  disabledNodesById(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.disabled = true;\r\n\r\n    const parentId = this.nodes[id].parentId;\r\n    this._disabledParentNodes(parentId);\r\n\r\n    const disabledNodes = (nodeId: number | string) => {\r\n      const children = this.getChildrenById(nodeId);\r\n      if (children.length > 0) {\r\n        children.forEach((child) => {\r\n          this.nodes[child.id].data.disabled = true;\r\n          disabledNodes(child.id);\r\n        });\r\n      }\r\n    };\r\n    disabledNodes(id);\r\n    return this;\r\n  }\r\n\r\n  private _disabledParentNodes(parentId: number | string | undefined) {\r\n    const children = this.getChildrenById(parentId);\r\n\r\n    if (children.length < 1) {\r\n      return;\r\n    }\r\n    const result = reduce(\r\n      children,\r\n      (status: boolean, child) => {\r\n        return status && child.data.disabled;\r\n      },\r\n      true\r\n    );\r\n\r\n    if (this.nodes[parentId]) {\r\n      this.nodes[parentId].data.disabled = result;\r\n    }\r\n  }\r\n\r\n  checkNodesById(\r\n    id: number | string,\r\n    checked: boolean,\r\n    checkableRelation: 'upward' | 'downward' | 'both' | 'none' = 'both'\r\n  ): Array<Object> {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.halfChecked = false;\r\n    this.nodes[id].data.isChecked = checked;\r\n    switch (checkableRelation) {\r\n    case 'upward':\r\n      this.checkParentNodes(this.nodes[id]);\r\n      break;\r\n    case 'downward':\r\n      this.checkChildNodes(this.nodes[id], checked, this.nodes[id].data.isHide);\r\n      break;\r\n    case 'both':\r\n      this.checkParentNodes(this.nodes[id]);\r\n      this.checkChildNodes(this.nodes[id], checked, this.nodes[id].data.isHide);\r\n      break;\r\n    case 'none':\r\n      break;\r\n    default:\r\n    }\r\n    this.maintainCheckedNodeList(this.nodes[id], checked);\r\n    return this.getCheckedNodes();\r\n  }\r\n\r\n  checkParentNodes(node: TreeNode) {\r\n    const { parentId } = node;\r\n    const parentNode = this.nodes[parentId];\r\n    if (parentNode) {\r\n      const childrenNode = this.getChildrenById(parentId);\r\n      if (childrenNode.every((childNode) => childNode.data.isChecked && !childNode.data.halfChecked)) {\r\n        parentNode.data.isChecked = true;\r\n        parentNode.data.halfChecked = false;\r\n      } else if (childrenNode.some((childNode) => childNode.data.halfChecked || childNode.data.isChecked)) {\r\n        parentNode.data.isChecked = true;\r\n        parentNode.data.halfChecked = true;\r\n      } else {\r\n        parentNode.data.isChecked = false;\r\n        parentNode.data.halfChecked = false;\r\n      }\r\n      this.maintainCheckedNodeList(parentNode, parentNode.data.isChecked);\r\n      this.checkParentNodes(parentNode);\r\n    }\r\n  }\r\n\r\n  private checkChildNodes(node: TreeNode, checked: boolean, hasHiddenAncestor = undefined) {\r\n    const { id } = node;\r\n    const childrenNode = this.getChildrenById(id);\r\n    if (childrenNode.length > 0) {\r\n      childrenNode.forEach((childNode) => {\r\n        const { id: childId } = childNode;\r\n        const { data: nodeData } = this.nodes[childId];\r\n        if (!nodeData.disabled) {\r\n          nodeData.isChecked = checked;\r\n          nodeData.halfChecked = false;\r\n          nodeData.hasHiddenAncestor = hasHiddenAncestor;\r\n          this.maintainCheckedNodeList(childNode, checked);\r\n        }\r\n        this.checkChildNodes(childNode, checked, nodeData.isHide);\r\n      });\r\n      const childrenFullCheckedCount = childrenNode.filter(({ data: nodeData }) => nodeData.isChecked).length;\r\n      const childrenCheckedCount = childrenNode.filter(({ data: nodeData }) => nodeData.isChecked || nodeData.halfChecked).length;\r\n      node.data.halfChecked = childrenCheckedCount > 0 && childrenNode.length > childrenFullCheckedCount;\r\n    }\r\n  }\r\n\r\n  getLineage(node: TreeNode): Array<string> {\r\n    const { parentId } = node;\r\n    if (parentId) {\r\n      const parentNode = this.nodes[parentId];\r\n      return [node.id, ...this.getLineage(parentNode)];\r\n    } else {\r\n      return [node.id];\r\n    }\r\n  }\r\n\r\n  getCheckedNodes(): Array<any> {\r\n    return Array.from(this._checked);\r\n  }\r\n\r\n  getCheckedNodesWithoutHide(hideInVirtualScroll = false): Array<any> {\r\n    return Array.from(this._checked).filter(\r\n      (item: any) => !((hideInVirtualScroll ? item.data.hideInVirtualScroll : item.data.isHide) || item.data.hasHiddenAncestor)\r\n    );\r\n  }\r\n\r\n  getActivatedNodes(): Array<any> {\r\n    const results = pickBy(this.nodes, (node) => node.data.isActive === true);\r\n    return values(results);\r\n  }\r\n\r\n  getDisabledNodes(): Array<any> {\r\n    const results = pickBy(this.nodes, (node) => node.data.disabled === true);\r\n    return values(results);\r\n  }\r\n\r\n  activeNodeById(id: number | string, isMultiple?: boolean) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    if (!isMultiple) {\r\n      this.deactivateAllNodes();\r\n    }\r\n    this.nodes[id].data.isActive = !this.nodes[id].data.isActive;\r\n  }\r\n\r\n  getChildrenById(id: number | string): Array<TreeNode> {\r\n    if (this.nodes[id]) {\r\n      return this.nodes[id].data.children || [];\r\n    } else if (id === undefined) {\r\n      return this._treeRoot;\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  startLoading(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.loading = true;\r\n  }\r\n\r\n  endLoading(id: number | string) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.loading = false;\r\n  }\r\n\r\n  getNodeById(id: number | string): any {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    return this.nodes[id].data;\r\n  }\r\n\r\n  getCompleteNodeById(id: number | string): any {\r\n    return this.nodes[id];\r\n  }\r\n\r\n  hideNodeById(id: number | string, hide: boolean) {\r\n    if (!this.nodes[id]) {\r\n      return;\r\n    }\r\n    this.nodes[id].data.isHide = hide;\r\n    this.renderFlattenTree();\r\n    return this;\r\n  }\r\n\r\n  private maintainCheckedNodeList(node: TreeNode, checked: boolean) {\r\n    if (checked && !node.data.halfChecked) {\r\n      this._checked.add(node);\r\n    } else {\r\n      this._checked.delete(node);\r\n    }\r\n  }\r\n\r\n  private dfs(target, tree, hideUnmatched?: boolean, keyword?, pattern?) {\r\n    if (!tree) {\r\n      return false;\r\n    }\r\n    if (!target) {\r\n      return false;\r\n    }\r\n    if (Array.isArray(tree)) {\r\n      return tree.map((treeNode) => {\r\n        return this.dfs(target, treeNode, hideUnmatched, keyword, pattern);\r\n      });\r\n    } else {\r\n      const treeNode = tree;\r\n      const treeChildren = this.getChildrenById(treeNode.id);\r\n      const key = keyword ? treeNode.data.originItem[keyword] : treeNode.data.title;\r\n      const selfMatched = pattern ? pattern.test(key) : key.toLowerCase().includes(target);\r\n      if (selfMatched) {\r\n        treeNode.data.isMatch = true;\r\n        treeNode.data.isCustomSearch = keyword;\r\n      }\r\n      // Test if children matches target recursively, do not hide children if parent is matched.\r\n      const childrenMatched = this.dfs(target, treeChildren, hideUnmatched && !selfMatched, keyword, pattern).some((_) => !!_);\r\n      if (selfMatched || childrenMatched) {\r\n        if (childrenMatched && treeChildren.length > 0) {\r\n          this.openNodesById(treeNode.id);\r\n        }\r\n        return true;\r\n      } else {\r\n        treeNode.data.isHide = hideUnmatched;\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n\r\n  public addChildNode(parentNode: TreeNode, childNode: TreeNode, index?) {\r\n    if (parentNode) {\r\n      if (Array.isArray(parentNode.data.children)) {\r\n        if (index !== undefined) {\r\n          parentNode.data.children.splice(index, 0, childNode);\r\n        } else {\r\n          parentNode.data.children.push(childNode);\r\n        }\r\n      } else {\r\n        parentNode.data.children = [childNode];\r\n      }\r\n    } else {\r\n      index !== undefined ? this._treeRoot.splice(index, 0, childNode) : this._treeRoot.push(childNode);\r\n    }\r\n    this.nodes[childNode.id] = childNode;\r\n  }\r\n\r\n  private removeChildNode(parentNode: TreeNode, childNode: TreeNode) {\r\n    if (parentNode) {\r\n      parentNode.data.children = parentNode.data.children.filter((node) => node.id !== childNode.id);\r\n    } else {\r\n      this._treeRoot = this._treeRoot.filter((node) => node.id !== childNode.id);\r\n    }\r\n  }\r\n\r\n  resetSearchResults() {\r\n    Object.keys(this.nodes).forEach((key) => {\r\n      const treeNode = this.nodes[key];\r\n      treeNode.data.isMatch = false;\r\n      treeNode.data.isHide = false;\r\n      treeNode.data.isCustomSearch = false;\r\n    });\r\n  }\r\n\r\n  public searchTree(target: string, hideUnmatched = false, keyword?, pattern?) {\r\n    this.searchItem = target;\r\n    const TrimmedTarget = trim(target);\r\n    this.resetSearchResults();\r\n    return this.dfs(TrimmedTarget.toLowerCase(), this._treeRoot, hideUnmatched, keyword, pattern);\r\n  }\r\n\r\n  get treeRoot() {\r\n    return this._treeRoot;\r\n  }\r\n\r\n  public deactivateAllNodes() {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      this.nodes[id].data.isActive = false;\r\n    }\r\n  }\r\n\r\n  public checkAllNodes(checked: boolean) {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      if (!this.nodes[id].data.disabled) {\r\n        this.nodes[id].data.halfChecked = false;\r\n        this.nodes[id].data.isChecked = checked;\r\n      }\r\n      this.maintainCheckedNodeList(this.nodes[id], this.nodes[id].data.isChecked);\r\n    }\r\n  }\r\n\r\n  public getNodeIndex(node: TreeNode) {\r\n    let parentNode;\r\n    let children;\r\n    if (node.parentId !== undefined) {\r\n      parentNode = this.getNodeById(node.parentId);\r\n      children = parentNode.children;\r\n    } else {\r\n      children = this.treeRoot;\r\n    }\r\n    for (let i = 0; i < children.length; i++) {\r\n      if (children[i].id === node.id) {\r\n        return i;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  public checkIsParent(childNodeId: number | string, parentNodeId: number | string) {\r\n    const realParentId = this.nodes[childNodeId].parentId;\r\n    if (realParentId === parentNodeId) {\r\n      return true;\r\n    } else if (realParentId !== undefined) {\r\n      return this.checkIsParent(realParentId, parentNodeId);\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  public getFlattenNodes() {\r\n    this.flattenNodes.next(this.flattenTree());\r\n  }\r\n\r\n  public flattenTree() {\r\n    const flattenTree = [];\r\n    const flatTree = (nodes) => {\r\n      for (let i = 0; i < nodes.length; i++) {\r\n        const hasParentId = this.canIdEmpty ? nodes[i].parentId : nodes[i].parentId !== undefined;\r\n        nodes[i].data.depth = hasParentId ? this.nodes[nodes[i].parentId].data.depth + 1 : 0;\r\n        nodes[i].data.hideInVirtualScroll =\r\n          nodes[i].data.isHide ||\r\n          (hasParentId ? this.nodes[nodes[i].parentId].data.hideInVirtualScroll || !this.nodes[nodes[i].parentId].data.isOpen : false);\r\n        nodes[i].data.isLast = i === nodes.length - 1;\r\n        flattenTree.push(nodes[i]);\r\n        if (nodes[i].data.children) {\r\n          flatTree(nodes[i].data.children);\r\n        }\r\n      }\r\n    };\r\n    flatTree(this.treeRoot);\r\n    return flattenTree;\r\n  }\r\n\r\n  public mergeTreeNodes(targetNode = this.treeRoot) {\r\n    const mergeToNode = (node) => {\r\n      if (!node) {\r\n        return;\r\n      }\r\n      if (node.data.children?.length === 1 && node.data.children[0]?.data?.children?.length !== 0) {\r\n        node.data.title = node.data.title + ' / ' + node.data.children[0]?.data?.title;\r\n        node.data.children = node.data.children[0]?.data?.children;\r\n        node.data.children.forEach((child) => {\r\n          child.parentId = node.id;\r\n        });\r\n        mergeToNode(node);\r\n      }\r\n      if (node.data.children?.length > 1) {\r\n        node.data.children.forEach((element) => {\r\n          mergeToNode(element);\r\n        });\r\n      }\r\n    };\r\n    if (targetNode === this.treeRoot) {\r\n      this.treeRoot.forEach((element) => {\r\n        mergeToNode(element);\r\n      });\r\n    } else {\r\n      mergeToNode(targetNode);\r\n    }\r\n  }\r\n\r\n  public renderFlattenTree() {\r\n    if (!this.virtualScroll) {\r\n      return;\r\n    }\r\n    this.getFlattenNodes();\r\n  }\r\n\r\n  public disableAllNodesChecked(disabled = true) {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      this.nodes[id].data.disabled = disabled;\r\n    }\r\n  }\r\n\r\n  public disableAllNodesSelected(disabled = true) {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      this.nodes[id].data.disableSelect = disabled;\r\n    }\r\n  }\r\n\r\n  public disableAllNodesToggled(disabled = true) {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      this.nodes[id].data.disableToggle = disabled;\r\n    }\r\n  }\r\n\r\n  public toggleAllNodes(toggle = true) {\r\n    for (const id of Object.keys(this.nodes)) {\r\n      this.nodes[id].data.isOpen = toggle;\r\n    }\r\n    if (this.isVirtualScroll) {\r\n      this.renderFlattenTree();\r\n    }\r\n  }\r\n\r\n  public transferToTreeNode(\r\n    originNode,\r\n    parentId?,\r\n    treeNodeChildrenKey = 'items',\r\n    treeNodeIdKey = 'id',\r\n    checkboxDisabledKey = 'disabled',\r\n    selectDisabledKey = 'disableSelect',\r\n    toggleDisabledKey = 'disableToggle',\r\n    treeNodeTitleKey = 'title'\r\n  ) {\r\n    const node = {\r\n      id: originNode[treeNodeIdKey],\r\n      parentId,\r\n      title: originNode[treeNodeTitleKey],\r\n      isOpen: !!originNode.open,\r\n      data: originNode.data || {},\r\n      originItem: originNode,\r\n      isParent: !!originNode.isParent || !!(originNode[treeNodeChildrenKey] && originNode[treeNodeChildrenKey].length > 0),\r\n      loading: !!originNode.loading,\r\n      isMatch: !!originNode.isMatch,\r\n      isHide: !!originNode.isHide,\r\n      isChecked: !!originNode.isChecked,\r\n      halfChecked: !!originNode.halfChecked,\r\n      isActive: !!originNode.isActive,\r\n      disabled: !!originNode[checkboxDisabledKey],\r\n      disableSelect: !!originNode[selectDisabledKey],\r\n      disableToggle: !!originNode[toggleDisabledKey],\r\n      disableAdd: !!originNode.disableAdd,\r\n      disableEdit: !!originNode.disableEdit,\r\n      disableDelete: !!originNode.disableDelete,\r\n      children: [],\r\n    };\r\n    return new TreeNode(node.id, node.parentId, { ...node });\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'filterNodesPipe' })\nexport class FilterNodesPipe implements PipeTransform {\n\n  constructor() {\n  }\n\n  transform(nodes, key) {\n    return nodes.filter(item => !item.data[key]);\n  }\n}\n","import {\n  Component,\n  Input,\n  TemplateRef\n} from '@angular/core';\nimport {\n  TreeFactory,\n  TreeNode\n} from './tree-factory.class';\n\n@Component({\n  selector: 'd-tree-nodes',\n  templateUrl: './tree-nodes.component.html',\n  styleUrls: ['./tree-nodes.component.scss'],\n  preserveWhitespaces: false,\n})\nexport class TreeNodesComponent {\n  @Input() treeList: Array<TreeNode>;\n  @Input() treeNodesRef: TemplateRef<any>;\n  @Input() treeFactory: TreeFactory;\n  @Input() virtualScroll = false;\n  trackByFn(index, item) {\n    return index;\n  }\n}\n","<ng-container *ngIf=\"virtualScroll\">\n  <ng-template\n    *cdkVirtualFor=\"let treeNode of treeList | filterNodesPipe: 'hideInVirtualScroll'; trackBy: trackByFn\"\n    [ngTemplateOutlet]=\"treeNodesRef\"\n    [ngTemplateOutletContext]=\"{\n      $implicit: this,\n      treeNode: treeNode,\n      treeFactory: treeFactory\n    }\"\n  >\n  </ng-template>\n</ng-container>\n<ng-container *ngIf=\"!virtualScroll\">\n  <ng-template\n    *ngFor=\"let treeNode of treeList; trackBy: trackByFn\"\n    [ngTemplateOutlet]=\"treeNodesRef\"\n    [ngTemplateOutletContext]=\"{\n      $implicit: this,\n      treeNode: treeNode,\n      treeFactory: treeFactory\n    }\"\n  >\n  </ng-template>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'transferToArrayPipe' })\nexport class TransferToArrayPipe implements PipeTransform {\n\n  constructor() {\n  }\n\n  transform(number) {\n    return Array(number).fill(0);\n  }\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewChildren\n} from '@angular/core';\nimport { I18nInterface, I18nService } from 'ng-devui/i18n';\nimport { DevConfigService, expandCollapseForDomDestroy, WithConfig } from 'ng-devui/utils';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Dictionary, ITreeItem, TreeFactory, TreeNode } from './tree-factory.class';\n@Component({\n  selector: 'd-tree',\n  templateUrl: './tree.component.html',\n  styleUrls: ['./tree.component.scss'],\n  preserveWhitespaces: false,\n  animations: [expandCollapseForDomDestroy],\n})\nexport class TreeComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  treeFactory: TreeFactory;\n  @Input() tree: Array<ITreeItem>;\n  @Input() treeNodesRef: TemplateRef<any>;\n  @Input() treeNodeIdKey: string;\n  @Input() treeNodeChildrenKey: string;\n  @Input() iconParentOpen: string;\n  @Input() iconParentClose: string;\n  @Input() iconLeaf: string;\n  @Input() loadingTemplateRef: TemplateRef<any>;\n  @Input() treeNodeTitleKey = 'title';\n  @Input() checkboxDisabledKey = 'disabled';\n  @Input() selectDisabledKey = 'disabled';\n  @Input() toggleDisabledKey = 'disableToggle';\n  @Input() virtualScroll = false;\n  @Input() virtualScrollHeight = '800px';\n  @Input() @WithConfig() showAnimation = true;\n  @Input() minBufferPx = 600;\n  @Input() maxBufferPx = 900;\n  @Input() itemSize = 30;\n  @Input() indent = '16px';\n  /**\n   * 默认不需要判断parentId是否undefined，有业务使用了空字符串作为非根目录的id，导致必须判断来区分，当业务整改后移除该判断\n   * @deprecated\n   */\n  @Input() canIdEmpty = true;\n  @Output() nodeSelected = new EventEmitter<TreeNode>();\n  @Output() nodeDblClicked = new EventEmitter<TreeNode>();\n  @Output() nodeRightClicked = new EventEmitter<{ node: TreeNode; event: MouseEvent }>();\n  @Output() nodeToggled = new EventEmitter<TreeNode>();\n  @Output() afterTreeInit = new EventEmitter<Dictionary<TreeNode>>();\n  @ViewChildren('treeNodeContent') treeNodeContent: QueryList<ElementRef>; // 获取content以取得tree宽度\n  @ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;\n  i18nCommonText: I18nInterface['common'];\n  i18nSubscription: Subscription;\n  treeNodes = [];\n  destroy$ = new Subject<void>();\n  afterInitAnimate = true;\n\n  constructor(private i18n: I18nService, private devConfigService: DevConfigService) {}\n\n  ngOnInit() {\n    this.initTree();\n    this.i18nCommonText = this.i18n.getI18nText().common;\n    this.i18nSubscription = this.i18n.langChange().subscribe((data) => {\n      this.i18nCommonText = data.common;\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes && changes.tree && !changes.tree.isFirstChange()) {\n      this.initTree();\n    }\n  }\n\n  initTree() {\n    this.treeFactory = TreeFactory.fromTree({\n      treeItems: this.tree,\n      isVirtualScroll: this.virtualScroll,\n      treeNodeChildrenKey: this.treeNodeChildrenKey,\n      treeNodeIdKey: this.treeNodeIdKey,\n      treeNodeTitleKey: this.treeNodeTitleKey,\n      checkboxDisabledKey: this.checkboxDisabledKey,\n      selectDisabledKey: this.selectDisabledKey,\n      toggleDisabledKey: this.toggleDisabledKey,\n    });\n    this.treeFactory.canIdEmpty = this.canIdEmpty;\n    if (this.virtualScroll) {\n      this.treeFactory.flattenNodes.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n        this.treeNodes = data;\n      });\n      this.treeFactory.getFlattenNodes();\n    }\n    this.afterTreeInit.emit(this.treeFactory.nodes);\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      this.afterInitAnimate = false;\n    });\n  }\n\n  contextmenuEvent(event, node) {\n    this.nodeRightClicked.emit({ node: node, event: event });\n  }\n\n  selectNode(event, treeNode: TreeNode) {\n    if (treeNode.data.disableSelect) {\n      return;\n    }\n    if (!this.isSelectableRegion(event.target)) {\n      return;\n    }\n    this.nodeSelected.emit(treeNode);\n    this.treeFactory.activeNodeById(treeNode.id);\n  }\n\n  toggleNode(event, treeNode: TreeNode) {\n    if (treeNode.data.disableToggle) {\n      return;\n    }\n    this.treeFactory.toggleNodeById(treeNode.id);\n    this.nodeToggled.emit(treeNode);\n  }\n\n  scrollToIndex(index: number) {\n    this.viewPort.scrollToIndex(index, 'smooth');\n  }\n\n  public appendTreeItems(treeItems: Array<ITreeItem>, parentId) {\n    if (!this.treeFactory.nodes[parentId]) {\n      throw new Error('parent node does not exist.');\n    }\n    this.treeFactory.mapTreeItems({\n      treeItems: treeItems,\n      parentId: parentId,\n      treeNodeChildrenKey: this.treeNodeChildrenKey,\n      treeNodeIdKey: this.treeNodeIdKey,\n      treeNodeTitleKey: this.treeNodeTitleKey,\n      checkboxDisabledKey: this.checkboxDisabledKey,\n      selectDisabledKey: this.selectDisabledKey,\n      toggleDisabledKey: this.toggleDisabledKey,\n    });\n  }\n  public nodeDblClick(event, node) {\n    this.nodeDblClicked.emit(node);\n  }\n\n  public isSelectableRegion(ele) {\n    if (ele && !ele.classList.contains('devui-tree-node__content--value-wrapper')\n      && !ele.classList.contains('devui-tree-node__content')\n      && !ele.classList.contains('devui-tree-node__title')\n      && !ele.classList.contains('devui-tree-node-highlight')\n      && ele.tagName !== 'D-HIGHLIGHT'\n      && ele.parentNode?.tagName !== 'D-HIGHLIGHT') {\n      return false;\n    }\n    return true;\n  }\n\n  ngOnDestroy() {\n    if (this.i18nSubscription) {\n      this.i18nSubscription.unsubscribe();\n    }\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<cdk-virtual-scroll-viewport\n  *ngIf=\"virtualScroll\"\n  class=\"devui-scrollbar devui-scroll-overlay\"\n  [itemSize]=\"itemSize\"\n  [minBufferPx]=\"minBufferPx\"\n  [maxBufferPx]=\"maxBufferPx\"\n  [style.height]=\"virtualScrollHeight\"\n>\n  <d-tree-nodes\n    [virtualScroll]=\"true\"\n    [treeList]=\"treeNodes\"\n    [treeNodesRef]=\"treeNodesRef ? treeNodesRef : virtualScrollRef\"\n    [treeFactory]=\"treeFactory\"\n  >\n  </d-tree-nodes>\n</cdk-virtual-scroll-viewport>\n\n<d-tree-nodes\n  *ngIf=\"!virtualScroll\"\n  [treeList]=\"treeFactory.treeRoot\"\n  [treeNodesRef]=\"treeNodesRef ? treeNodesRef : default\"\n  [treeFactory]=\"treeFactory\"\n>\n</d-tree-nodes>\n<!-- TODO: 虚拟滚动支持动效 -->\n<ng-template #virtualScrollRef let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\n  <div\n    class=\"devui-tree-node\"\n    [style.paddingLeft.px]=\"treeNode.data.depth * 24\"\n    [ngClass]=\"{\n      'devui-tree-node__open': treeNode.data.isOpen,\n      'devui-tree-node__customIcon': iconParentClose\n    }\"\n    #treeNodeContent\n  >\n    <div\n      class=\"devui-tree-vertical-line\"\n      *ngFor=\"let item of treeNode.data.depth | transferToArrayPipe; let i = index\"\n      [style.marginLeft.px]=\"i === 0 ? -16 : -16 - 24 * i\"\n      [ngStyle]=\"{ height: i === 0 && treeNode.data.isLast && !treeNode.data.isOpen ? '15px' : '30px' }\"\n    ></div>\n    <div\n      *ngIf=\"treeNode.data.depth\"\n      [ngStyle]=\"{ width: treeNode.data.isParent ? '8px' : '16px' }\"\n      class=\"devui-tree-horizontal-line\"\n    ></div>\n    <div\n      class=\"devui-tree-node__content\"\n      [class.active]=\"treeNode.data.isActive\"\n      [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\n      (click)=\"selectNode($event, treeNode)\"\n    >\n      <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\n        <span\n          (click)=\"toggleNode($event, treeNode)\"\n          *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\n          class=\"devui-tree-node__folder\"\n          [class.toggle-disabled]=\"treeNode.data.disableToggle\"\n        >\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"iconParentClose && !treeNode.data.isOpen\" [innerHTML]=\"iconParentClose\"></span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"iconParentOpen && treeNode.data.isOpen\" [innerHTML]=\"iconParentOpen\"></span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"!iconParentClose && !treeNode.data.isOpen\">\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <path\n                  d=\"M8.75,4 L8.75,7.25 L12,7.25 L12,8.75 L8.749,8.75 L8.75,12 L7.25,12 L7.249,8.75 L4,8.75 L4,7.25 L7.25,7.25 L7.25,4 L8.75,4 Z\"\n                ></path>\n              </g>\n            </svg>\n          </span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"!iconParentOpen && treeNode.data.isOpen\">\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon svg-icon-close\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <rect x=\"4\" y=\"7\" width=\"8\" height=\"2\"></rect>\n              </g>\n            </svg>\n          </span>\n        </span>\n        <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\n          <span *ngIf=\"!iconLeaf\" class=\"devui-leaf-icon-none\" [ngStyle]=\"{ width: indent }\"></span>\n          <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf\"></span>\n        </span>\n        <span\n          (dblclick)=\"nodeDblClick($event, treeNode)\"\n          (contextmenu)=\"contextmenuEvent($event, treeNode)\"\n          class=\"devui-tree-node__title\"\n          [class.select-disabled]=\"treeNode.data.disableSelect\"\n          title=\"{{ treeNode.data.title }}\"\n          >{{ treeNode.data.title }}</span\n        >\n        <span\n          dLoading\n          [showLoading]=\"treeNode.data.loading\"\n          [loadingTemplateRef]=\"loadingTemplateRef ? loadingTemplateRef : defaultLoadingTmpl\"\n        >\n        </span>\n      </div>\n    </div>\n  </div>\n</ng-template>\n<ng-template #default let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\n  <div\n    class=\"devui-tree-node devui-tree-without-virtual-scroll\"\n    [ngClass]=\"{\n      'devui-tree-node__open': treeNode.data.isOpen,\n      'devui-tree-node__customIcon': iconParentClose\n    }\"\n    #treeNodeContent\n  >\n    <div\n      class=\"devui-tree-node__content\"\n      [class.active]=\"treeNode.data.isActive\"\n      [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\n      (click)=\"selectNode($event, treeNode)\"\n    >\n      <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\n        <span\n          (click)=\"toggleNode($event, treeNode)\"\n          *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\n          class=\"devui-tree-node__folder\"\n          [class.toggle-disabled]=\"treeNode.data.disableToggle\"\n        >\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"iconParentClose && !treeNode.data.isOpen\" [innerHTML]=\"iconParentClose\"></span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"iconParentOpen && treeNode.data.isOpen\" [innerHTML]=\"iconParentOpen\"></span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"!iconParentClose && !treeNode.data.isOpen\">\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <path\n                  d=\"M8.75,4 L8.75,7.25 L12,7.25 L12,8.75 L8.749,8.75 L8.75,12 L7.25,12 L7.249,8.75 L4,8.75 L4,7.25 L7.25,7.25 L7.25,4 L8.75,4 Z\"\n                ></path>\n              </g>\n            </svg>\n          </span>\n          <span class=\"devui-tree-node__folder--icon\" *ngIf=\"!iconParentOpen && treeNode.data.isOpen\">\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon svg-icon-close\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <rect x=\"4\" y=\"7\" width=\"8\" height=\"2\"></rect>\n              </g>\n            </svg>\n          </span>\n        </span>\n        <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\n          <span *ngIf=\"!iconLeaf\" class=\"devui-leaf-icon-none\" [ngStyle]=\"{ width: indent }\"></span>\n          <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf\"></span>\n        </span>\n        <span\n          (dblclick)=\"nodeDblClick($event, treeNode)\"\n          (contextmenu)=\"contextmenuEvent($event, treeNode)\"\n          class=\"devui-tree-node__title\"\n          [class.select-disabled]=\"treeNode.data.disableSelect\"\n          title=\"{{ treeNode.data.title }}\"\n          >{{ treeNode.data.title }}</span\n        >\n        <span\n          dLoading\n          [showLoading]=\"treeNode.data.loading\"\n          [loadingTemplateRef]=\"loadingTemplateRef ? loadingTemplateRef : defaultLoadingTmpl\"\n        >\n        </span>\n      </div>\n    </div>\n    <div\n      *ngIf=\"treeNode.data.isOpen\"\n      class=\"devui-tree-node__children\"\n      @collapseForDomDestroy\n      [@.disabled]=\"afterInitAnimate || !showAnimation\"\n    >\n      <d-tree-nodes [treeList]=\"treeNode.data.children || []\" [treeNodesRef]=\"default\" [treeFactory]=\"treeFactory\"> </d-tree-nodes>\n    </div>\n  </div>\n</ng-template>\n\n<ng-template #defaultLoadingTmpl>\n  <span class=\"devui-loading-children\">{{ i18nCommonText?.loading }}</span>\n</ng-template>\n","import { Directive, ElementRef, OnInit } from '@angular/core';\n\n@Directive({\n  selector: '[dTreeAutoFocus]'\n})\nexport class AutofocusDirective implements OnInit {\n\n  constructor(private elementRef: ElementRef) { }\n\n  ngOnInit(): void {\n    setTimeout(() => {\n      this.elementRef.nativeElement.focus();\n      this.elementRef.nativeElement.select();\n    });\n  }\n\n}\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n  AfterViewInit,\r\n  Component,\r\n  ContentChild,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewChildren,\r\n} from '@angular/core';\r\nimport { I18nInterface, I18nService } from 'ng-devui/i18n';\r\nimport { DevConfigService, WithConfig, expandCollapseForDomDestroy } from 'ng-devui/utils';\r\nimport { difference } from 'lodash-es';\r\nimport { Subscription } from 'rxjs';\r\nimport { Dictionary, ITreeItem, ITreeNodeData, TreeNode } from './tree-factory.class';\r\nimport { TreeComponent } from './tree.component';\r\nimport { ICheckboxInput, IDropType } from './tree.types';\r\n\r\n@Component({\r\n  selector: 'd-operable-tree',\r\n  templateUrl: './operable-tree.component.html',\r\n  styleUrls: ['./operable-tree.component.scss'],\r\n  exportAs: 'dOperableTreeComponent',\r\n  preserveWhitespaces: false,\r\n  animations: [expandCollapseForDomDestroy],\r\n})\r\nexport class OperableTreeComponent implements OnInit, OnDestroy, AfterViewInit {\r\n  static ID_SEED = 0;\r\n  @Input() tree: Array<ITreeItem>;\r\n  @Input() treeNodeIdKey: string;\r\n  @Input() treeNodeChildrenKey: string;\r\n  @Input() checkboxDisabledKey: string;\r\n  @Input() selectDisabledKey: string;\r\n  @Input() toggleDisabledKey: string;\r\n  @Input() iconParentOpen: string;\r\n  @Input() iconParentClose: string;\r\n  @Input() iconLeaf: string;\r\n  /**\r\n   * @deprecated\r\n   */\r\n  @Input() showLoading: boolean;\r\n  @Input() loadingTemplateRef: TemplateRef<any>;\r\n  @Input() treeNodesRef: TemplateRef<any>;\r\n  @Input() checkable = true;\r\n  @Input() deletable = false;\r\n  @Input() addable = false;\r\n  @Input() editable = false;\r\n  @Input() draggable = false;\r\n  @Input() dropFromOutside = false;\r\n  @Input() disableMouseEvent: boolean;\r\n  @Input() checkboxInput: ICheckboxInput = {};\r\n  @Input() beforeAddNode: (node: TreeNode) => Promise<any>;\r\n  @Input() beforeDeleteNode: (node: TreeNode) => Promise<any>;\r\n  @Input() beforeEditNode: (node: TreeNode) => Promise<any>;\r\n  @Input() beforeSelectNode: (node: TreeNode) => Promise<any>;\r\n  @Input() beforeNodeDrop: (dragNodeId: string, dropNodeId: string, dropType: string, dragNodeIds?: string[]) => Promise<any>;\r\n  @Input() canActivateNode = true;\r\n  @Input() canActivateParentNode = true;\r\n  @Input() canActivateMultipleNode = false;\r\n  @Input() treeNodeTitleKey = 'title';\r\n  @Input() postAddNode: (node: TreeNode) => Promise<any>;\r\n  @Input() iconTemplatePosition: string;\r\n  @Input() virtualScroll = false;\r\n  @Input() virtualScrollHeight = '800px';\r\n  @Input() @WithConfig() showAnimation = true;\r\n  @Input() itemSize = 30;\r\n  @Input() minBufferPx = 600;\r\n  @Input() maxBufferPx = 900;\r\n  @Input() checkableRelation: 'upward' | 'downward' | 'both' | 'none' = 'both';\r\n  @Input() indent = '16px';\r\n  /**\r\n   * @deprecated\r\n   */\r\n  @Input() canIdEmpty = true;\r\n  @Input() operatorAlign: 'start' | 'end' = 'start';\r\n  @Output() nodeSelected = new EventEmitter<TreeNode | TreeNode[]>();\r\n  @Output() nodeDblClicked = new EventEmitter<TreeNode>();\r\n  @Output() nodeRightClicked = new EventEmitter<{ node: TreeNode; event: MouseEvent }>();\r\n  @Output() nodeToggled = new EventEmitter<TreeNode>();\r\n  @Output() afterTreeInit = new EventEmitter<Dictionary<TreeNode>>();\r\n  @Output() nodeDeleted = new EventEmitter<TreeNode>();\r\n  @Output() nodeChecked = new EventEmitter<any>();\r\n  @Output() currentNodeChecked = new EventEmitter<{ id: string | number; data: ITreeNodeData }>();\r\n  @Output() nodeEdited = new EventEmitter<TreeNode>();\r\n  @Output() editValueChange = new EventEmitter<{ value: string; callback: Function }>();\r\n  @Output() nodeDragStart = new EventEmitter<{ event: DragEvent; treeNode: TreeNode; treeNodes?: TreeNode[] }>();\r\n  @Output() nodeOnDrop = new EventEmitter<{ event: DragEvent; treeNode: TreeNode; dropType: IDropType; isFromOutside?: boolean }>();\r\n  @ViewChild('operableTree', { static: true }) operableTree: TreeComponent;\r\n  @ViewChild('operableTreeContainer', { static: true }) operableTreeEle: ElementRef;\r\n  @ViewChild('treeDropIndicator') treeDropIndicator: ElementRef;\r\n  @ContentChild('iconTemplate') iconTemplate;\r\n  @ContentChild('nodeTemplate') nodeTemplate;\r\n  @ContentChild('operatorTemplate') operatorTemplate;\r\n  @ContentChild('statusTemplate') statusTemplate;\r\n  @Input() dropType: IDropType = {\r\n    dropPrev: false,\r\n    dropNext: false,\r\n    dropInner: true,\r\n  };\r\n  private addingNode = false;\r\n  private mouseRightButton = 2;\r\n  private treeNodeDragoverResponder = {\r\n    node: null,\r\n    timeout: null,\r\n  };\r\n  @ViewChildren('treeNodeContent') treeNodeContent: QueryList<ElementRef>;\r\n  id: string;\r\n  i18nCommonText: I18nInterface['common'];\r\n  i18nSubscription: Subscription;\r\n  dragState = {\r\n    showIndicator: true,\r\n    dropType: null,\r\n    draggingNode: null,\r\n    indicatorTop: 0,\r\n    indicatorLeft: 0,\r\n    indicatorWidth: 0,\r\n  };\r\n  afterInitAnimate = true;\r\n  document: Document;\r\n  isOpenedOonDragOver = [];\r\n\r\n  constructor(@Inject(DOCUMENT) private doc: any, private i18n: I18nService, private devConfigService: DevConfigService) {\r\n    this.id = `d-operable-tree-${OperableTreeComponent.ID_SEED++}`;\r\n    this.document = this.doc;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.i18nCommonText = this.i18n.getI18nText().common;\r\n    this.i18nSubscription = this.i18n.langChange().subscribe((data) => {\r\n      this.i18nCommonText = data.common;\r\n    });\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    setTimeout(() => {\r\n      this.afterInitAnimate = false;\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.i18nSubscription) {\r\n      this.i18nSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  contextmenuEvent(event, node) {\r\n    this.nodeRightClicked.emit({ node: node, event: event });\r\n  }\r\n\r\n  copyStyle(source, target) {\r\n    ['id', 'class', 'style', 'draggable'].forEach((attr) => target.removeAttribute(attr));\r\n\r\n    const computedStyle = getComputedStyle(source);\r\n    for (let i = 0; i < computedStyle.length; i++) {\r\n      const key = computedStyle[i];\r\n      if (key.indexOf('transition') < 0) {\r\n        target.style[key] = computedStyle[key];\r\n      }\r\n    }\r\n    target.style.pointerEvents = 'none';\r\n\r\n    for (let i = 0; i < source.children.length; i++) {\r\n      this.copyStyle(source.children[i], target.children[i]);\r\n    }\r\n  }\r\n\r\n  multipleDragStyle(event, nodes, target) {\r\n    const num = nodes.length > 2 ? 2 : nodes.length - 1;\r\n    const cloneNodes = new Array(num).fill(null);\r\n    const container = this.document.createElement('div');\r\n    const cloneNode = target.cloneNode(true);\r\n    this.copyStyle(target, cloneNode);\r\n    cloneNode.style.position = 'absolute';\r\n    cloneNode.style.border = 'solid 1px var(--devui-connected-overlay-line, #526ecc)';\r\n    cloneNodes.push(cloneNode);\r\n    cloneNodes.forEach((node, index) => {\r\n      const child = node || cloneNode.cloneNode(true);\r\n      child.style.left = `${8 * (num - index)}px`;\r\n      child.style.top = `${4 * index}px`;\r\n      container.appendChild(child);\r\n    });\r\n    container.className = 'devui-tree-drag-ghost-container';\r\n    // setDragImage 只能对viewport内的 dom 起作用\r\n    this.document.body.appendChild(container);\r\n    event.dataTransfer.setDragImage(container, -16, 0);\r\n    setTimeout(() => container.remove());\r\n  }\r\n\r\n  onDragstart(event, treeNode) {\r\n    this.isOpenedOonDragOver = [];\r\n    this.dragState.draggingNode = event.target;\r\n    const result = { event, treeNode };\r\n    const data = {\r\n      type: 'operable-tree-node',\r\n      treeId: this.id,\r\n      nodeId: treeNode.id,\r\n      parentId: treeNode.parentId,\r\n      nodeTitle: treeNode.data.title,\r\n      isParent: treeNode.data.isParent,\r\n      isChecked: treeNode.data.isChecked,\r\n      halfChecked: treeNode.data.halfChecked,\r\n    };\r\n    if (this.canActivateMultipleNode) {\r\n      const activatedNodes = this.treeFactory.getActivatedNodes();\r\n      // 存在无激活项，直接拖拽单个节点情况\r\n      const availableNodes = activatedNodes.length ? activatedNodes : [treeNode];\r\n      (data as any).multipleData = availableNodes;\r\n      (result as any).treeNodes = availableNodes;\r\n      // 拖拽启用层叠样式，随拖拽个数变化\r\n      this.multipleDragStyle(event, availableNodes, event.target);\r\n    }\r\n    event.dataTransfer.setData('Text', JSON.stringify(data));\r\n    this.nodeDragStart.emit(result);\r\n  }\r\n\r\n  onDragover(event, droppable, treeNode) {\r\n    if (droppable) {\r\n      event.preventDefault();\r\n      event.dataTransfer.dropEffect = 'move';\r\n      if (\r\n        this.dropType.dropInner &&\r\n        (!this.treeNodeDragoverResponder.node ||\r\n          (this.treeNodeDragoverResponder.node && this.treeNodeDragoverResponder.node.id !== treeNode.id))\r\n      ) {\r\n        clearTimeout(this.treeNodeDragoverResponder.timeout);\r\n        this.treeNodeDragoverResponder.node = treeNode;\r\n        this.treeNodeDragoverResponder.timeout = setTimeout(() => {\r\n          if (treeNode.data.isParent && !treeNode.data.isOpen) {\r\n            this.isOpenedOonDragOver.push(treeNode.id);\r\n            this.treeFactory.openNodesById(treeNode.id);\r\n            this.nodeToggled.emit(treeNode);\r\n          }\r\n        }, 1000);\r\n      }\r\n      this.handlerDragState(event, treeNode);\r\n    }\r\n  }\r\n\r\n  handlerDragState(event, treeNode) {\r\n    let dropType;\r\n    const dropPrev = this.dropType.dropPrev;\r\n    const dropNext = this.dropType.dropNext;\r\n    const dropInner = this.dropType.dropInner;\r\n    const treePosition = this.operableTreeEle.nativeElement.getBoundingClientRect();\r\n    const nextRes = dropNext ? 0.45 : 1;\r\n    const innerNextRes = dropInner ? 0.25 : nextRes;\r\n    const prevPercent = dropPrev ? innerNextRes : -1;\r\n    const prevRes = dropPrev ? 0.55 : 0;\r\n    const innerPrevRes = dropInner ? 0.75 : prevRes;\r\n    const nextPercent = dropNext ? innerPrevRes : 1;\r\n    const targetPosition = event.currentTarget.getBoundingClientRect();\r\n    const dom =\r\n      event.currentTarget.querySelector('.devui-tree-drag-handle') || event.currentTarget.querySelector('.devui-tree-node__title');\r\n    const treeNodePosition = dom.getBoundingClientRect();\r\n    const distance = event.clientY - targetPosition.top;\r\n\r\n    if (distance < targetPosition.height * prevPercent) {\r\n      dropType = 'prev';\r\n    } else if (distance > targetPosition.height * nextPercent) {\r\n      dropType = 'next';\r\n    } else if (dropInner) {\r\n      dropType = 'inner';\r\n    } else {\r\n      dropType = 'none';\r\n    }\r\n\r\n    if (dropType === 'prev') {\r\n      this.dragState.indicatorTop = treeNodePosition.top - treePosition.top - 10;\r\n    }\r\n    if (dropType === 'next') {\r\n      this.dragState.indicatorTop = treeNodePosition.bottom - treePosition.top + 10;\r\n    }\r\n    if (dropType === 'inner') {\r\n      event.currentTarget.classList.add('devui-drop-inner');\r\n    } else {\r\n      event.currentTarget.classList.remove('devui-drop-inner');\r\n    }\r\n    this.dragState.indicatorLeft = treeNodePosition.left - treePosition.left;\r\n    this.dragState.indicatorWidth = treePosition.width - this.dragState.indicatorLeft;\r\n    this.dragState.dropType = dropType;\r\n    this.dragState.showIndicator = dropType === 'prev' || dropType === 'next';\r\n  }\r\n\r\n  onDragleave(event, treeNode) {\r\n    this.removeDraggingStyle(event.currentTarget);\r\n    if (this.treeNodeDragoverResponder.node && this.treeNodeDragoverResponder.node.id === treeNode.id) {\r\n      this.treeNodeDragoverResponder.node = null;\r\n      clearTimeout(this.treeNodeDragoverResponder.timeout);\r\n    }\r\n  }\r\n\r\n  removeDraggingStyle(target) {\r\n    this.dragState.showIndicator = false;\r\n    target.classList.remove('devui-drop-inner');\r\n  }\r\n\r\n  onDrop(event, dropNode) {\r\n    this.removeDraggingStyle(event.currentTarget);\r\n    if (!this.draggable && !this.dropFromOutside) {\r\n      return;\r\n    }\r\n    event.preventDefault();\r\n    const transferDataStr = event.dataTransfer.getData('Text');\r\n    if (transferDataStr) {\r\n      try {\r\n        const transferData = JSON.parse(transferDataStr);\r\n        if (typeof transferData === 'object' && transferData.type === 'operable-tree-node' && transferData.treeId === this.id) {\r\n          let dragResult = Promise.resolve(true);\r\n          const dragNodeId = transferData.nodeId;\r\n          const dragNodeIds: string[] = [];\r\n          const dropNodeId = dropNode.id;\r\n          // 使用对象存储选择状态，因为节点id为数字，避免产生长索引数组影响性能\r\n          const dragNodesCheckStatus = {};\r\n          const multipleData = transferData.multipleData;\r\n          if (this.canActivateMultipleNode && multipleData?.length > 1) {\r\n            // 多选时遍历所有被激活的节点确认是否为目标节点或其父节点并储存可用节点的选择状态\r\n            // 反序遍历用于先处理子节点以更新父子同时拖拽的状态\r\n            multipleData.reverse().forEach((node) => this.reverseSelection(node, dropNodeId, dragNodeIds, dragNodesCheckStatus));\r\n          } else {\r\n            const isParent = this.treeFactory.checkIsParent(dropNodeId, dragNodeId);\r\n            if (dragNodeId === dropNodeId || isParent) {\r\n              return;\r\n            }\r\n            this.treeFactory.checkNodesById(dragNodeId, false, 'upward');\r\n            dragNodesCheckStatus[dragNodeId] = { checked: transferData.isChecked, halfChecked: transferData.halfChecked };\r\n          }\r\n          if (this.beforeNodeDrop) {\r\n            dragResult = this.beforeNodeDrop(dragNodeId, dropNodeId, this.dragState.dropType, dragNodeIds);\r\n          }\r\n          dragResult\r\n            .then(() => {\r\n              this.setSelection(dropNode, dragNodeId, dragNodeIds, dragNodesCheckStatus);\r\n              if (this.nodeOnDrop.observers.length > 0) {\r\n                if (this.isOpenedOonDragOver.length) {\r\n                  const ids = this.treeFactory.getLineage(dropNode);\r\n                  this.isOpenedOonDragOver = difference(this.isOpenedOonDragOver, ids);\r\n                }\r\n                this.nodeOnDrop.emit({ event, treeNode: dropNode, dropType: this.dragState.dropType });\r\n              }\r\n            });\r\n        } else {\r\n          this.dropFormOutside(event, dropNode);\r\n        }\r\n      } catch (e) {\r\n        this.dropFormOutside(event, dropNode);\r\n      }\r\n    }\r\n  }\r\n\r\n  dropFormOutside(event, dropNode) {\r\n    if (this.dropFromOutside && this.nodeOnDrop.observers.length > 0) {\r\n      this.nodeOnDrop.emit({ event, treeNode: dropNode, dropType: this.dragState.dropType, isFromOutside: true });\r\n    }\r\n  }\r\n\r\n  @HostListener('dragend', [])\r\n  onDragend() {\r\n    this.isOpenedOonDragOver.forEach((id) => this.treeFactory.closeNodesById(id));\r\n    this.isOpenedOonDragOver = [];\r\n  }\r\n\r\n  reverseSelection(node, dropNodeId, dragNodeIds, dragNodesCheckStatus) {\r\n    const id = node.id;\r\n    const isParent = this.treeFactory.checkIsParent(dropNodeId, id);\r\n    if (!isParent && id !== dropNodeId) {\r\n      this.treeFactory.checkNodesById(id, false, 'upward');\r\n      // 获取更新后的node状态，不使用node旧数据避免父子同时拖拽状态被覆盖\r\n      const currentNode = this.treeFactory.getNodeById(id);\r\n      // 半选不保留，取最新状态，选中则保留原有状态\r\n      const checkedStatus = node.data.halfChecked ? currentNode.isChecked : node.data.isChecked;\r\n      dragNodesCheckStatus[id] = { checked: checkedStatus, halfChecked: currentNode.halfChecked };\r\n      dragNodeIds.push(id);\r\n    }\r\n  }\r\n\r\n  setSelection(dropNode, dragNodeId, dragNodeIds, dragNodesCheckStatus) {\r\n    let finalDragNodeIds = [dragNodeId];\r\n    if (this.canActivateMultipleNode && dragNodeIds?.length > 1) {\r\n      dragNodeIds.reverse().forEach((id) => this.handleDropNode(id, dropNode));\r\n      finalDragNodeIds = dragNodeIds;\r\n    } else {\r\n      this.handleDropNode(dragNodeId, dropNode);\r\n    }\r\n    this.treeFactory.renderFlattenTree();\r\n    // 移动结束后向上整理选择状态，恢复半选状态\r\n    finalDragNodeIds.forEach((id) => {\r\n      const node = this.treeFactory.getCompleteNodeById(id);\r\n      node.data.isChecked = dragNodesCheckStatus[id].checked;\r\n      node.data.halfChecked = dragNodesCheckStatus[id].halfChecked;\r\n      this.treeFactory.checkParentNodes(node);\r\n    });\r\n  }\r\n\r\n  handleDropNode(dragNodeId, dropNode) {\r\n    const movingNode = this.treeFactory.nodes[dragNodeId];\r\n    const movingNodeIndex = this.treeFactory.getNodeIndex(movingNode);\r\n    const dropNodeIndex = this.treeFactory.getNodeIndex(dropNode);\r\n    const hasParentId = this.canIdEmpty ? movingNode.parentId : movingNode.parentId !== undefined;\r\n    const originalParentNode = hasParentId ? this.treeFactory.nodes[movingNode.parentId] : this.treeFactory.treeRoot;\r\n\r\n    switch (this.dragState.dropType) {\r\n    case 'prev':\r\n      this.handlerDropSort(movingNodeIndex, dropNodeIndex, movingNode, dropNode, originalParentNode, 'prev');\r\n      break;\r\n    case 'next':\r\n      this.handlerDropSort(movingNodeIndex, dropNodeIndex, movingNode, dropNode, originalParentNode, 'next');\r\n      break;\r\n    case 'inner':\r\n      this.handlerDropInner(movingNodeIndex, movingNode, dropNode, originalParentNode);\r\n      break;\r\n    default:\r\n    }\r\n  }\r\n\r\n  handlerDropSort(oldIndex, newIndex, movingNode, dropNode, originalParentNode, type) {\r\n    const dropIndex = type === 'next' ? newIndex + 1 : newIndex;\r\n    movingNode.parentId = dropNode.parentId;\r\n    let parentNode;\r\n    if (dropNode.parentId === undefined) {\r\n      parentNode = this.treeFactory.treeRoot;\r\n      parentNode.splice(dropIndex, 0, movingNode);\r\n    } else {\r\n      parentNode = this.treeFactory.getNodeById(dropNode.parentId);\r\n      parentNode.children.splice(dropIndex, 0, movingNode);\r\n    }\r\n    if (dropNode.parentId === originalParentNode.id && newIndex < oldIndex) {\r\n      this.handlerOriginalParentNode(originalParentNode, oldIndex + 1);\r\n    } else {\r\n      this.handlerOriginalParentNode(originalParentNode, oldIndex);\r\n    }\r\n  }\r\n\r\n  handlerOriginalParentNode(originalParentNode, oldIndex) {\r\n    if (originalParentNode.id === undefined) {\r\n      originalParentNode.splice(oldIndex, 1);\r\n    } else {\r\n      originalParentNode.data.children.splice(oldIndex, 1);\r\n      if (!originalParentNode.data.children || !originalParentNode.data.children.length) {\r\n        originalParentNode.data.isParent = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  handlerDropInner(oldIndex, movingNode, dropNode, originalParentNode) {\r\n    movingNode.parentId = dropNode.id;\r\n    dropNode.data.isParent = true;\r\n    this.treeFactory.openNodesById(dropNode.id);\r\n    this.treeFactory.addChildNode(dropNode, movingNode);\r\n    this.handlerOriginalParentNode(originalParentNode, oldIndex);\r\n    this.nodeToggled.emit(dropNode);\r\n  }\r\n\r\n  selectNode(event, treeNode: TreeNode) {\r\n    if (treeNode.data.disableSelect) {\r\n      return;\r\n    }\r\n    if (!this.operableTree.isSelectableRegion(event.target)) {\r\n      return;\r\n    }\r\n    let selectResult = Promise.resolve(true);\r\n    if (this.beforeSelectNode) {\r\n      selectResult = this.beforeSelectNode(treeNode);\r\n    }\r\n    selectResult.then((canSelect) => {\r\n      if (!canSelect) {\r\n        return;\r\n      }\r\n      if (!this.canActivateNode) {\r\n        this.checkNode(event, treeNode);\r\n        return;\r\n      }\r\n      if (this.canActivateParentNode || (!this.canActivateParentNode && !treeNode.data.isParent)) {\r\n        const isMultiple = this.canActivateMultipleNode && (event.ctrlKey || event.shiftKey);\r\n        this.treeFactory.activeNodeById(treeNode.id, isMultiple);\r\n        if (isMultiple) {\r\n          this.nodeSelected.emit(this.treeFactory.getActivatedNodes());\r\n          return;\r\n        }\r\n      } else {\r\n        this.toggleNode(event, treeNode);\r\n        return;\r\n      }\r\n      this.nodeSelected.emit(treeNode);\r\n    });\r\n  }\r\n\r\n  toggleNode(event, treeNode: TreeNode) {\r\n    if (treeNode.data.disableToggle) {\r\n      return;\r\n    }\r\n    this.treeFactory.toggleNodeById(treeNode.id);\r\n    this.nodeToggled.emit(treeNode);\r\n  }\r\n\r\n  deleteNodes(event, treeNode: TreeNode) {\r\n    let delResult = Promise.resolve(true);\r\n    if (this.beforeDeleteNode) {\r\n      delResult = this.beforeDeleteNode(treeNode);\r\n    }\r\n\r\n    delResult.then((canDelete) => {\r\n      if (!canDelete) {\r\n        return;\r\n      }\r\n      this.treeFactory.deleteNodeById(treeNode.id);\r\n      this.nodeDeleted.emit(treeNode);\r\n    });\r\n  }\r\n\r\n  deleteNodesProxy = (event, treeNode: TreeNode) => {\r\n    this.deleteNodes(event, treeNode);\r\n  };\r\n\r\n  addChildNode(event, treeNode: TreeNode, newNode?) {\r\n    let addResult = Promise.resolve(newNode ? newNode : true);\r\n    if (this.beforeAddNode) {\r\n      addResult = this.beforeAddNode(treeNode);\r\n    }\r\n\r\n    addResult.then((nodeInfo) => {\r\n      if (!nodeInfo) {\r\n        return;\r\n      }\r\n      const node = this.treeFactory.addNode(\r\n        {\r\n          parentId: treeNode.id,\r\n          title: nodeInfo.title ? nodeInfo.title : '新增节点',\r\n          isParent: nodeInfo.isParent,\r\n          id: nodeInfo.id ? nodeInfo.id : undefined,\r\n          data: nodeInfo.data,\r\n        },\r\n        nodeInfo.index,\r\n        false\r\n      );\r\n      this.treeFactory.editNodeTitle(node.id);\r\n      this.addingNode = true;\r\n      treeNode.data.isParent = true;\r\n      this.treeFactory.openNodesById(treeNode.id);\r\n      return treeNode;\r\n    });\r\n  }\r\n\r\n  addChildNodeProxy = (event, treeNode: TreeNode, newNode?) => {\r\n    this.addChildNode(event, treeNode, newNode);\r\n  };\r\n\r\n  editNode(event, treeNode: TreeNode) {\r\n    let editResult = Promise.resolve(true);\r\n    if (this.beforeEditNode) {\r\n      editResult = this.beforeEditNode(treeNode);\r\n    }\r\n    editResult.then((canEdit) => {\r\n      if (!canEdit) {\r\n        return;\r\n      }\r\n      this.treeFactory.editNodeTitle(treeNode.id);\r\n    });\r\n  }\r\n\r\n  editNodeProxy = (event, treeNode: TreeNode) => {\r\n    this.editNode(event, treeNode);\r\n  };\r\n\r\n  public checkNodeById(checked: boolean, id: number | string) {\r\n    const results = this.treeFactory.checkNodesById(id, checked, this.checkableRelation);\r\n    this.nodeChecked.emit(results);\r\n    this.currentNodeChecked.emit({ id: id, data: this.treeFactory.getNodeById(id) });\r\n  }\r\n\r\n  onBlurEdit(treeNode) {\r\n    if (!treeNode.data.errTips) {\r\n      treeNode.data.editable = false;\r\n      return this.postEditNode(treeNode);\r\n    }\r\n  }\r\n\r\n  onInputChange(event, treeNode) {\r\n    const targe = event.target as HTMLInputElement;\r\n    this.editValueChange.emit({\r\n      value: targe.value,\r\n      callback: (validateInfo) => {\r\n        if (validateInfo && validateInfo.errTips) {\r\n          treeNode.data.errTips = validateInfo.errTips;\r\n          treeNode.data.errTipsPosition = validateInfo.errTipsPosition || 'top';\r\n        } else {\r\n          if (treeNode.data.errTips) {\r\n            delete treeNode.data.errTips;\r\n            delete treeNode.data.errTipsPosition;\r\n          }\r\n        }\r\n      },\r\n    });\r\n  }\r\n\r\n  treeNodeHover(treeNode, type) {\r\n    if (this.disableMouseEvent || treeNode.data.disableMouseEvent) {\r\n      return;\r\n    }\r\n    treeNode.data.isHover = type === 'enter';\r\n  }\r\n\r\n  isSelectedNode(node: any) {\r\n    if (this.checkable) {\r\n      return node.isChecked;\r\n    } else {\r\n      return node.isActive;\r\n    }\r\n  }\r\n\r\n  get nodes(): any[] {\r\n    return this.operableTree ? Object.keys(this.treeFactory.nodes).map((k) => this.treeFactory.nodes[k]) : [];\r\n  }\r\n\r\n  private postEditNode(treeNode) {\r\n    if (this.addingNode === true) {\r\n      this.addingNode = false;\r\n      if (typeof this.postAddNode === 'function') {\r\n        const originalId = treeNode.id;\r\n        return this.postAddNode(treeNode)\r\n          .then((nodeInfo) => {\r\n            // Swap id if id was modified by outer system\r\n            treeNode.id = nodeInfo.id ? nodeInfo.id : originalId;\r\n            delete this.treeFactory.nodes[originalId];\r\n            if (Object.prototype.hasOwnProperty.call(nodeInfo, 'data') && nodeInfo.data) {\r\n              if (Object.prototype.hasOwnProperty.call(treeNode, 'data') && Object.prototype.hasOwnProperty.call(treeNode.data, 'data')) {\r\n                treeNode.data.data = { ...treeNode.data.data, ...nodeInfo.data };\r\n              } else {\r\n                treeNode.data = Object.assign(treeNode.data, { data: nodeInfo.data });\r\n              }\r\n            }\r\n            this.treeFactory.nodes[treeNode.id] = treeNode;\r\n            return treeNode;\r\n          })\r\n          .catch((e, reaction = 'cancel') => {\r\n            switch (reaction) {\r\n            case 'justify': {\r\n              const parentNode = this.treeFactory.nodes[treeNode.parentId];\r\n              const title = treeNode.data.title;\r\n              this.treeFactory.deleteNodeById(treeNode.id);\r\n              this.addChildNode(null, parentNode, { title: title });\r\n              break;\r\n            }\r\n            case 'cancel':\r\n            default:\r\n              this.treeFactory.deleteNodeById(treeNode.id);\r\n            }\r\n            return Promise.reject(e);\r\n          });\r\n      }\r\n    } else {\r\n      this.nodeEdited.emit(treeNode);\r\n    }\r\n    return Promise.resolve(treeNode);\r\n  }\r\n\r\n  public appendTreeItems(treeItems: Array<ITreeItem>, parentId) {\r\n    if (!this.treeFactory.nodes[parentId]) {\r\n      throw new Error('parent node does not exist.');\r\n    }\r\n    this.treeFactory.mapTreeItems({\r\n      treeItems: treeItems,\r\n      parentId: parentId,\r\n      treeNodeChildrenKey: this.treeNodeChildrenKey,\r\n      treeNodeIdKey: this.treeNodeIdKey,\r\n      checkboxDisabledKey: this.checkboxDisabledKey,\r\n      selectDisabledKey: this.selectDisabledKey,\r\n      toggleDisabledKey: this.toggleDisabledKey,\r\n      treeNodeTitleKey: this.treeNodeTitleKey,\r\n    });\r\n  }\r\n\r\n  public get treeFactory() {\r\n    return this.operableTree.treeFactory;\r\n  }\r\n\r\n  public checkNode(checked, treeNode: TreeNode) {\r\n    if (!treeNode.data.disabled) {\r\n      treeNode.data.isChecked = !treeNode.data.isChecked;\r\n      this.checkNodeById(treeNode.data.isChecked, treeNode.id);\r\n    }\r\n  }\r\n  public nodeDblClick(event, node) {\r\n    this.nodeDblClicked.emit(node);\r\n  }\r\n\r\n  initTreeFinishEvent($event) {\r\n    this.afterTreeInit.emit($event);\r\n  }\r\n\r\n  eventTriggerBlur(event) {\r\n    (event.target as HTMLElement).blur();\r\n  }\r\n}\r\n","<div #operableTreeContainer style=\"position: relative\">\n  <d-tree\n    #operableTree\n    [tree]=\"tree\"\n    [virtualScroll]=\"virtualScroll\"\n    [treeNodeIdKey]=\"treeNodeIdKey\"\n    [treeNodeChildrenKey]=\"treeNodeChildrenKey\"\n    [treeNodesRef]=\"treeNodesRef ? treeNodesRef : virtualScroll ? operableTreeVirtualScrollRef : operableTreeNodeRef\"\n    [iconParentOpen]=\"iconParentOpen\"\n    [iconParentClose]=\"iconParentClose\"\n    [iconLeaf]=\"iconLeaf\"\n    [treeNodeTitleKey]=\"treeNodeTitleKey\"\n    [checkboxDisabledKey]=\"checkboxDisabledKey\"\n    [selectDisabledKey]=\"selectDisabledKey\"\n    [toggleDisabledKey]=\"toggleDisabledKey\"\n    [virtualScrollHeight]=\"virtualScrollHeight\"\n    [minBufferPx]=\"minBufferPx\"\n    [maxBufferPx]=\"maxBufferPx\"\n    [itemSize]=\"itemSize\"\n    [indent]=\"indent\"\n    [canIdEmpty]=\"canIdEmpty\"\n    (afterTreeInit)=\"initTreeFinishEvent($event)\"\n  >\n  </d-tree>\n  <div\n    *ngIf=\"dragState.showIndicator\"\n    #treeDropIndicator\n    class=\"devui-tree-indicator\"\n    [style.top.px]=\"dragState.indicatorTop\"\n    [style.width.px]=\"dragState.indicatorWidth\"\n    [style.left.px]=\"dragState.indicatorLeft\"\n  ></div>\n</div>\n<!-- TODO: 虚拟滚动支持动效 -->\n<ng-template #operableTreeVirtualScrollRef let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\n  <div\n    *ngIf=\"!treeNode.data.isHide\"\n    [id]=\"'devui-tree-node-' + treeNode.id\"\n    class=\"devui-tree-node devui-operable-tree-node\"\n    [style.paddingLeft.px]=\"treeNode.data.depth * 24\"\n    [ngClass]=\"{\n      selected: isSelectedNode(treeNode.data),\n      'devui-tree-node__open': treeNode.data.isOpen,\n      'devui-tree-node__customIcon': iconParentClose\n    }\"\n    #treeNodeContent\n  >\n    <div\n      class=\"devui-tree-vertical-line\"\n      *ngFor=\"let item of treeNode.data.depth | transferToArrayPipe; let i = index\"\n      [style.marginLeft.px]=\"i === 0 ? -16 : -16 - 24 * i\"\n      [ngStyle]=\"{ height: i === 0 && treeNode.data.isLast && !treeNode.data.isOpen ? '15px' : '30px' }\"\n    ></div>\n    <div\n      *ngIf=\"treeNode.data.depth\"\n      [ngStyle]=\"{ width: treeNode.data.isParent ? '8px' : '16px' }\"\n      class=\"devui-tree-horizontal-line\"\n    ></div>\n    <div\n      class=\"devui-tree-node__content\"\n      [class.active]=\"treeNode.data.isActive\"\n      [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\n      (mouseenter)=\"treeNodeHover(treeNode, 'enter')\"\n      (mouseleave)=\"treeNodeHover(treeNode, 'leave')\"\n      [draggable]=\"draggable && !treeNode?.data?.editable\"\n      (dragstart)=\"onDragstart($event, treeNode)\"\n      (dragover)=\"onDragover($event, draggable, treeNode)\"\n      (dragleave)=\"onDragleave($event, treeNode)\"\n      (drop)=\"onDrop($event, treeNode)\"\n      [class.disabled]=\"treeNode.data.disabled\"\n      (click)=\"selectNode($event, treeNode)\"\n    >\n      <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\n        <span\n          (click)=\"toggleNode($event, treeNode)\"\n          *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\n          class=\"devui-tree-node__folder\"\n          [class.toggle-disabled]=\"treeNode.data.disableToggle\"\n        >\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: iconParentClose && !treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n            [innerHTML]=\"iconParentClose | safe : 'html'\"\n          ></span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: iconParentOpen && treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n            [innerHTML]=\"iconParentOpen | safe : 'html'\"\n          ></span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: !iconParentOpen && !treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <path\n                  d=\"M8.75,4 L8.75,7.25 L12,7.25 L12,8.75 L8.749,8.75 L8.75,12 L7.25,12 L7.249,8.75 L4,8.75 L4,7.25 L7.25,7.25 L7.25,4 L8.75,4 Z\"\n                ></path>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: !iconParentOpen && treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon svg-icon-close\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <rect x=\"4\" y=\"7\" width=\"8\" height=\"2\"></rect>\n              </g>\n            </svg>\n          </span>\n        </span>\n        <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\n          <span *ngIf=\"!iconLeaf\" class=\"devui-leaf-icon-none\" [ngStyle]=\"{ width: indent }\"></span>\n          <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf | safe : 'html'\"></span>\n        </span>\n        <ng-container *ngIf=\"iconTemplate && iconTemplatePosition === 'before-checkbox'\">\n          <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <d-checkbox\n          *ngIf=\"checkable && (treeNode.data.showCheckbox === undefined ? true : treeNode.data.showCheckbox)\"\n          [showAnimation]=\"treeNode.data.isHover\"\n          [(ngModel)]=\"treeNode.data.isChecked\"\n          (ngModelChange)=\"checkNodeById($event, treeNode.id)\"\n          [halfchecked]=\"treeNode.data.halfChecked\"\n          [color]=\"checkboxInput?.color\"\n          [cssClass]=\"'devui-tree-node__checkbox'\"\n          [disabled]=\"treeNode.data.disabled\"\n          [showGlowStyle]=\"!virtualScroll\"\n        >\n        </d-checkbox>\n        <ng-container *ngIf=\"iconTemplate && (!iconTemplatePosition || iconTemplatePosition === 'after-checkbox')\">\n          <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"nodeTemplate\">\n          <ng-template [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <span\n          *ngIf=\"!nodeTemplate && !treeNode.data?.editable\"\n          (dblclick)=\"nodeDblClick($event, treeNode)\"\n          (contextmenu)=\"contextmenuEvent($event, treeNode)\"\n          class=\"devui-tree-node__title devui-tree-drag-handle\"\n          [class.select-disabled]=\"treeNode.data.disableSelect\"\n          title=\"{{ treeNode.data.title }}\"\n        >\n          <d-highlight\n            *ngIf=\"treeNode.data?.isMatch && !treeNode.data?.isCustomSearch\"\n            [value]=\"treeNode.data.title\"\n            [term]=\"treeFactory.searchItem\"\n          >\n          </d-highlight>\n          <span *ngIf=\"treeNode.data?.isMatch && treeNode.data?.isCustomSearch\" class=\"devui-tree-node-highlight\">{{\n            treeNode.data.title\n          }}</span>\n          <ng-container *ngIf=\"!treeNode.data?.isMatch\">{{ treeNode.data.title }}</ng-container>\n        </span>\n        <span class=\"devui-tree-node__edit\" *ngIf=\"!nodeTemplate && treeNode.data?.editable\">\n          <input\n            [class.error]=\"!!treeNode.data.errTips\"\n            class=\"devui-form-control devui-input-sm\"\n            type=\"text\"\n            dTreeAutoFocus\n            [(ngModel)]=\"treeNode.data.title\"\n            (blur)=\"onBlurEdit(treeNode)\"\n            (keyup.enter)=\"eventTriggerBlur($event)\"\n            (input)=\"onInputChange($event, treeNode)\"\n            dPopover\n            [content]=\"treeNode.data.errTips\"\n            [position]=\"treeNode.data.errTipsPosition\"\n            [appendToBody]=\"true\"\n            [visible]=\"!!treeNode.data.errTips\"\n            [popType]=\"'error'\"\n          />\n        </span>\n        <ng-container *ngIf=\"statusTemplate\">\n          <ng-template [ngTemplateOutlet]=\"statusTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode }\"> </ng-template>\n        </ng-container>\n        <span\n          dLoading\n          [showLoading]=\"treeNode.data.loading\"\n          [loadingTemplateRef]=\"loadingTemplateRef ? loadingTemplateRef : defaultLoadingTmpl\"\n        >\n        </span>\n        <div class=\"devui-tree-icons-container\">\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableAdd && (treeNode.data.isActive || treeNode.data.isHover) && addable\"\n            (click)=\"addChildNode($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <g fill-rule=\"nonzero\">\n                  <path\n                    d=\"M8,0 C12.418278,0 16,3.59071231 16,8 C16,12.418278 12.4092877,16 8,16 C3.581722,16 0,12.4092877 0,8 C0,3.581722 3.59071231,0 8,0 Z M8,1.5 C4.41577399,1.5 1.5,4.41351238 1.5,8 C1.5,11.584226 4.41351238,14.5 8,14.5 C11.584226,14.5 14.5,11.5864876 14.5,8 C14.5,4.41577399 11.5864876,1.5 8,1.5 Z M8,4.3 C8.38659932,4.3 8.7,4.61340068 8.7,5 L8.699,7.299 L11,7.3 C11.3865993,7.3 11.7,7.61340068 11.7,8 C11.7,8.38659932 11.3865993,8.7 11,8.7 L8.699,8.699 L8.7,11 C8.7,11.3865993 8.38659932,11.7 8,11.7 C7.61340068,11.7 7.3,11.3865993 7.3,11 L7.299,8.699 L5,8.7 C4.61340068,8.7 4.3,8.38659932 4.3,8 C4.3,7.61340068 4.61340068,7.3 5,7.3 L7.299,7.299 L7.3,5 C7.3,4.61340068 7.61340068,4.3 8,4.3 Z\"\n                  ></path>\n                </g>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableEdit && (treeNode.data.isActive || treeNode.data.isHover) && editable\"\n            (click)=\"editNode($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <path\n                  d=\"M12.3087741,0.74795609 L14.4300944,2.86927643 C14.9182498,3.3574318 14.9182498,4.14888802 14.4300944,4.63704339 L6.76529422,12.3018436 C6.6135568,12.453581 6.42531143,12.5637003 6.21868103,12.6215999 L3.29553945,13.4406895 C2.63078755,13.6269587 1.9408986,13.2390719 1.75462937,12.57432 C1.69358229,12.356457 1.69281139,12.1261099 1.75239888,11.9078433 L2.55548559,8.96616788 C2.61274771,8.75641893 2.7237298,8.5652334 2.87747239,8.41149081 L10.5410071,0.74795609 C11.0291625,0.259800726 11.8206187,0.259800726 12.3087741,0.74795609 Z M11.4248906,1.98539296 L3.98505387,9.42522967 L3.31563544,11.8772834 L5.75092262,11.1948948 L13.1926575,3.75315991 L11.4248906,1.98539296 Z\"\n                  fill-rule=\"nonzero\"\n                ></path>\n                <rect fill-rule=\"nonzero\" x=\"0\" y=\"14.5\" width=\"15\" height=\"1.5\" rx=\"0.75\"></rect>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableDelete && (treeNode.data.isActive || treeNode.data.isHover) && deletable\"\n            (click)=\"deleteNodes($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <g fill-rule=\"nonzero\">\n                  <path\n                    d=\"M13.0996399,1.27743711 C13.4935963,0.882043175 14.1784277,0.912988481 14.6292951,1.34651479 C15.0800797,1.78012228 15.1261817,2.45212782 14.7322253,2.84752174 L9.59690531,7.99860255 L14.7322253,13.1524782 C15.0903675,13.5119272 15.084825,14.0999809 14.7421763,14.5297048 L14.6292951,14.6534852 C14.1784277,15.0870115 13.4935963,15.1179567 13.0996399,14.7225628 L8,9.60284628 L2.90036004,14.7225628 C2.54221791,15.082012 1.94368316,15.0891145 1.49907515,14.7617204 L1.37070487,14.6534852 C0.919920289,14.2198777 0.873818322,13.5478721 1.26777466,13.1524782 L6.40166885,7.99860255 L1.26777466,2.84752174 C0.909632535,2.48807271 0.915174959,1.90001906 1.25782365,1.47029514 L1.37070487,1.34651479 C1.82157229,0.912988481 2.50640369,0.882043175 2.90036004,1.27743711 L8,6.39575625 L13.0996399,1.27743711 Z\"\n                  ></path>\n                </g>\n              </g>\n            </svg>\n          </span>\n          <ng-container *ngIf=\"operatorTemplate && (treeNode.data.isActive || treeNode.data.isHover)\">\n            <ng-template\n              [ngTemplateOutlet]=\"operatorTemplate\"\n              [ngTemplateOutletContext]=\"{\n                $implicit: this,\n                node: treeNode,\n                addNode: addChildNodeProxy,\n                editNode: editNodeProxy,\n                deleteNode: deleteNodesProxy\n              }\"\n            >\n            </ng-template>\n          </ng-container>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-template>\n<ng-template #operableTreeNodeRef let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\n  <div\n    class=\"devui-tree-node devui-operable-tree-node devui-tree-without-virtual-scroll\"\n    [style.display]=\"treeNode.data.isHide ? 'none' : ''\"\n    [ngClass]=\"{\n      selected: isSelectedNode(treeNode.data),\n      'devui-tree-node__open': treeNode.data.isOpen,\n      'devui-tree-node__customIcon': iconParentClose\n    }\"\n    #treeNodeContent\n  >\n    <div\n      class=\"devui-tree-node__content\"\n      [class.active]=\"treeNode.data.isActive\"\n      [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\n      (mouseenter)=\"treeNodeHover(treeNode, 'enter')\"\n      (mouseleave)=\"treeNodeHover(treeNode, 'leave')\"\n      [draggable]=\"draggable && !treeNode?.data?.editable\"\n      (dragstart)=\"onDragstart($event, treeNode)\"\n      (dragover)=\"onDragover($event, draggable, treeNode)\"\n      (dragleave)=\"onDragleave($event, treeNode)\"\n      (drop)=\"onDrop($event, treeNode)\"\n      [class.disabled]=\"treeNode.data.disabled\"\n      (click)=\"selectNode($event, treeNode)\"\n    >\n      <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\n        <span\n          (click)=\"toggleNode($event, treeNode)\"\n          *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\n          class=\"devui-tree-node__folder\"\n          [class.toggle-disabled]=\"treeNode.data.disableToggle\"\n        >\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: iconParentClose && !treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n            [innerHTML]=\"iconParentClose | safe : 'html'\"\n          ></span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: iconParentOpen && treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n            [innerHTML]=\"iconParentOpen | safe : 'html'\"\n          ></span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: !iconParentOpen && !treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <path\n                  d=\"M8.75,4 L8.75,7.25 L12,7.25 L12,8.75 L8.749,8.75 L8.75,12 L7.25,12 L7.249,8.75 L4,8.75 L4,7.25 L7.25,7.25 L7.25,4 L8.75,4 Z\"\n                ></path>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-node__folder--icon\"\n            [ngStyle]=\"{\n              display: !iconParentOpen && treeNode.data.isOpen ? 'inline-block' : 'none'\n            }\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n              class=\"svg-icon svg-icon-close\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"2\"></rect>\n                <rect x=\"4\" y=\"7\" width=\"8\" height=\"2\"></rect>\n              </g>\n            </svg>\n          </span>\n        </span>\n        <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\n          <span *ngIf=\"!iconLeaf\" class=\"devui-leaf-icon-none\" [ngStyle]=\"{ width: indent }\"></span>\n          <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf | safe : 'html'\"></span>\n        </span>\n        <ng-container *ngIf=\"iconTemplate && iconTemplatePosition === 'before-checkbox'\">\n          <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <d-checkbox\n          *ngIf=\"checkable && checkable && (treeNode.data.showCheckbox === undefined ? true : treeNode.data.showCheckbox)\"\n          [(ngModel)]=\"treeNode.data.isChecked\"\n          (ngModelChange)=\"checkNodeById($event, treeNode.id)\"\n          [halfchecked]=\"treeNode.data.halfChecked\"\n          [color]=\"checkboxInput?.color\"\n          [cssClass]=\"'devui-tree-node__checkbox'\"\n          [disabled]=\"treeNode.data.disabled\"\n          [showGlowStyle]=\"!virtualScroll\"\n        >\n        </d-checkbox>\n        <ng-container *ngIf=\"iconTemplate && (!iconTemplatePosition || iconTemplatePosition === 'after-checkbox')\">\n          <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"nodeTemplate\">\n          <ng-template [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data, completeNode: treeNode }\">\n          </ng-template>\n        </ng-container>\n        <span\n          *ngIf=\"!nodeTemplate && !treeNode.data?.editable\"\n          (dblclick)=\"nodeDblClick($event, treeNode)\"\n          (contextmenu)=\"contextmenuEvent($event, treeNode)\"\n          class=\"devui-tree-node__title devui-tree-drag-handle\"\n          [class.select-disabled]=\"treeNode.data.disableSelect\"\n          title=\"{{ treeNode.data.title }}\"\n        >\n          <d-highlight\n            *ngIf=\"treeNode.data?.isMatch && !treeNode.data?.isCustomSearch\"\n            [value]=\"treeNode.data.title\"\n            [term]=\"treeFactory.searchItem\"\n          >\n          </d-highlight>\n          <span *ngIf=\"treeNode.data?.isMatch && treeNode.data?.isCustomSearch\" class=\"devui-tree-node-highlight\">{{\n            treeNode.data.title\n          }}</span>\n          <ng-container *ngIf=\"!treeNode.data?.isMatch\">{{ treeNode.data.title }}</ng-container>\n        </span>\n        <span class=\"devui-tree-node__edit\" *ngIf=\"!nodeTemplate && treeNode.data?.editable\">\n          <input\n            [class.error]=\"!!treeNode.data.errTips\"\n            class=\"devui-form-control devui-input-sm\"\n            type=\"text\"\n            dTreeAutoFocus\n            [(ngModel)]=\"treeNode.data.title\"\n            (blur)=\"onBlurEdit(treeNode)\"\n            (keyup.enter)=\"eventTriggerBlur($event)\"\n            (input)=\"onInputChange($event, treeNode)\"\n            dPopover\n            [content]=\"treeNode.data.errTips\"\n            [position]=\"treeNode.data.errTipsPosition\"\n            [appendToBody]=\"true\"\n            [visible]=\"!!treeNode.data.errTips\"\n            [popType]=\"'error'\"\n          />\n        </span>\n        <ng-container *ngIf=\"statusTemplate\">\n          <ng-template [ngTemplateOutlet]=\"statusTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode }\"> </ng-template>\n        </ng-container>\n        <span\n          dLoading\n          [showLoading]=\"treeNode.data.loading\"\n          [loadingTemplateRef]=\"loadingTemplateRef ? loadingTemplateRef : defaultLoadingTmpl\"\n        >\n        </span>\n        <div class=\"devui-tree-icons-container\" [class.align-end]=\"operatorAlign === 'end'\">\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableAdd && (treeNode.data.isActive || treeNode.data.isHover) && addable\"\n            (click)=\"addChildNode($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <g fill-rule=\"nonzero\">\n                  <path\n                    d=\"M8,0 C12.418278,0 16,3.59071231 16,8 C16,12.418278 12.4092877,16 8,16 C3.581722,16 0,12.4092877 0,8 C0,3.581722 3.59071231,0 8,0 Z M8,1.5 C4.41577399,1.5 1.5,4.41351238 1.5,8 C1.5,11.584226 4.41351238,14.5 8,14.5 C11.584226,14.5 14.5,11.5864876 14.5,8 C14.5,4.41577399 11.5864876,1.5 8,1.5 Z M8,4.3 C8.38659932,4.3 8.7,4.61340068 8.7,5 L8.699,7.299 L11,7.3 C11.3865993,7.3 11.7,7.61340068 11.7,8 C11.7,8.38659932 11.3865993,8.7 11,8.7 L8.699,8.699 L8.7,11 C8.7,11.3865993 8.38659932,11.7 8,11.7 C7.61340068,11.7 7.3,11.3865993 7.3,11 L7.299,8.699 L5,8.7 C4.61340068,8.7 4.3,8.38659932 4.3,8 C4.3,7.61340068 4.61340068,7.3 5,7.3 L7.299,7.299 L7.3,5 C7.3,4.61340068 7.61340068,4.3 8,4.3 Z\"\n                  ></path>\n                </g>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableEdit && (treeNode.data.isActive || treeNode.data.isHover) && editable\"\n            (click)=\"editNode($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <path\n                  d=\"M12.3087741,0.74795609 L14.4300944,2.86927643 C14.9182498,3.3574318 14.9182498,4.14888802 14.4300944,4.63704339 L6.76529422,12.3018436 C6.6135568,12.453581 6.42531143,12.5637003 6.21868103,12.6215999 L3.29553945,13.4406895 C2.63078755,13.6269587 1.9408986,13.2390719 1.75462937,12.57432 C1.69358229,12.356457 1.69281139,12.1261099 1.75239888,11.9078433 L2.55548559,8.96616788 C2.61274771,8.75641893 2.7237298,8.5652334 2.87747239,8.41149081 L10.5410071,0.74795609 C11.0291625,0.259800726 11.8206187,0.259800726 12.3087741,0.74795609 Z M11.4248906,1.98539296 L3.98505387,9.42522967 L3.31563544,11.8772834 L5.75092262,11.1948948 L13.1926575,3.75315991 L11.4248906,1.98539296 Z\"\n                  fill-rule=\"nonzero\"\n                ></path>\n                <rect fill-rule=\"nonzero\" x=\"0\" y=\"14.5\" width=\"15\" height=\"1.5\" rx=\"0.75\"></rect>\n              </g>\n            </svg>\n          </span>\n          <span\n            class=\"devui-tree-icons\"\n            *ngIf=\"!treeNode.data.disableDelete && (treeNode.data.isActive || treeNode.data.isHover) && deletable\"\n            (click)=\"deleteNodes($event, treeNode)\"\n          >\n            <svg\n              width=\"16px\"\n              height=\"16px\"\n              viewBox=\"0 0 16 16\"\n              version=\"1.1\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            >\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <g fill-rule=\"nonzero\">\n                  <path\n                    d=\"M13.0996399,1.27743711 C13.4935963,0.882043175 14.1784277,0.912988481 14.6292951,1.34651479 C15.0800797,1.78012228 15.1261817,2.45212782 14.7322253,2.84752174 L9.59690531,7.99860255 L14.7322253,13.1524782 C15.0903675,13.5119272 15.084825,14.0999809 14.7421763,14.5297048 L14.6292951,14.6534852 C14.1784277,15.0870115 13.4935963,15.1179567 13.0996399,14.7225628 L8,9.60284628 L2.90036004,14.7225628 C2.54221791,15.082012 1.94368316,15.0891145 1.49907515,14.7617204 L1.37070487,14.6534852 C0.919920289,14.2198777 0.873818322,13.5478721 1.26777466,13.1524782 L6.40166885,7.99860255 L1.26777466,2.84752174 C0.909632535,2.48807271 0.915174959,1.90001906 1.25782365,1.47029514 L1.37070487,1.34651479 C1.82157229,0.912988481 2.50640369,0.882043175 2.90036004,1.27743711 L8,6.39575625 L13.0996399,1.27743711 Z\"\n                  ></path>\n                </g>\n              </g>\n            </svg>\n          </span>\n          <ng-container *ngIf=\"operatorTemplate && (treeNode.data.isActive || treeNode.data.isHover)\">\n            <ng-template\n              [ngTemplateOutlet]=\"operatorTemplate\"\n              [ngTemplateOutletContext]=\"{\n                $implicit: this,\n                node: treeNode,\n                addNode: addChildNodeProxy,\n                editNode: editNodeProxy,\n                deleteNode: deleteNodesProxy\n              }\"\n            >\n            </ng-template>\n          </ng-container>\n        </div>\n      </div>\n    </div>\n    <div\n      *ngIf=\"treeNode.data.isOpen\"\n      @collapseForDomDestroy\n      [@.disabled]=\"afterInitAnimate || !showAnimation\"\n      class=\"devui-tree-node__children\"\n    >\n      <d-tree-nodes [treeList]=\"treeNode.data.children || []\" [treeNodesRef]=\"operableTreeNodeRef\" [treeFactory]=\"treeFactory\">\n      </d-tree-nodes>\n    </div>\n  </div>\n</ng-template>\n\n<ng-template #defaultLoadingTmpl>\n  <span class=\"devui-loading-children\">{{ i18nCommonText?.loading }}</span>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckBoxModule } from 'ng-devui/checkbox';\nimport { LoadingModule } from 'ng-devui/loading';\nimport { OperableTreeComponent } from './operable-tree.component';\nimport { TreeNodesComponent } from './tree-nodes.component';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { PopoverModule } from 'ng-devui/popover';\nimport { HighlightModule, SafePipeModule} from 'ng-devui/utils';\nimport { AutofocusDirective } from './auto-focus.directive';\nimport { FilterNodesPipe } from './pipe/filter-nodes.pipe';\nimport { TransferToArrayPipe } from './pipe/transfer-to-array.pipe';\nimport { TreeComponent } from './tree.component';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, LoadingModule, CheckBoxModule, PopoverModule, SafePipeModule, HighlightModule, ScrollingModule],\n  exports: [TreeComponent, TreeNodesComponent, OperableTreeComponent],\n  declarations: [TreeComponent, TreeNodesComponent, OperableTreeComponent, AutofocusDirective, FilterNodesPipe, TransferToArrayPipe],\n  providers: [],\n})\nexport class TreeModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.FilterNodesPipe","i6.TreeNodesComponent","i7.TransferToArrayPipe","i4","i5","i8.TreeComponent","i9.TreeNodesComponent","i10.AutofocusDirective","i11.TransferToArrayPipe"],"mappings":"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"}