{"version":3,"file":"ng-zorro-antd-core-tree.mjs","sources":["../../components/core/tree/nz-tree-base-node.ts","../../components/core/tree/nz-tree-base.definitions.ts","../../components/core/tree/nz-tree-base-util.ts","../../components/core/tree/nz-tree-base.service.ts","../../components/core/tree/nz-tree-service.resolver.ts","../../components/core/tree/nz-tree-base.ts","../../components/core/tree/public-api.ts","../../components/core/tree/ng-zorro-antd-core-tree.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzTreeNodeBaseComponent } from './nz-tree-base.definitions';\nimport { NzTreeBaseService } from './nz-tree-base.service';\n\nexport type NzTreeNodeKey = string | number;\n\nexport interface FlattenNode {\n  parent: FlattenNode | null;\n  children: FlattenNode[];\n  pos: string;\n  data: NzTreeNode;\n  isStart: boolean[];\n  isEnd: boolean[];\n}\n\nexport interface NzTreeNodeOptions {\n  title: string;\n  key: string;\n  icon?: string;\n  isLeaf?: boolean;\n  checked?: boolean;\n  selected?: boolean;\n  selectable?: boolean;\n  disabled?: boolean;\n  disableCheckbox?: boolean;\n  expanded?: boolean;\n  children?: NzTreeNodeOptions[];\n\n  [key: string]: NzSafeAny;\n}\n\nexport class NzTreeNode {\n  private _title: string = '';\n  key!: string;\n  level: number = 0;\n  origin!: NzTreeNodeOptions;\n  // Parent Node\n  parentNode: NzTreeNode | null = null;\n  private _icon: string = '';\n  private _children: NzTreeNode[] = [];\n  private _isLeaf: boolean = false;\n  private _isChecked: boolean = false;\n  private _isSelectable: boolean = false;\n  private _isDisabled: boolean = false;\n  private _isDisableCheckbox: boolean = false;\n  private _isExpanded: boolean = false;\n  private _isHalfChecked: boolean = false;\n  private _isSelected: boolean = false;\n  private _isLoading: boolean = false;\n  canHide: boolean = false;\n  isMatched: boolean = false;\n\n  service: NzTreeBaseService | null = null;\n  component!: NzTreeNodeBaseComponent;\n\n  /** New added in Tree for easy data access */\n  isStart?: boolean[];\n  isEnd?: boolean[];\n\n  get treeService(): NzTreeBaseService | null {\n    return this.service || (this.parentNode && this.parentNode.treeService);\n  }\n\n  /**\n   * Init nzTreeNode\n   *\n   * @param option option user's input\n   * @param parent parent node\n   * @param service base nzTreeService\n   */\n  constructor(\n    option: NzTreeNodeOptions | NzTreeNode,\n    parent: NzTreeNode | null = null,\n    service: NzTreeBaseService | null = null\n  ) {\n    if (option instanceof NzTreeNode) {\n      return option;\n    }\n    this.service = service || null;\n    this.origin = option;\n    this.key = option.key;\n    this.parentNode = parent;\n    this._title = option.title || '---';\n    this._icon = option.icon || '';\n    this._isLeaf = option.isLeaf || false;\n    this._children = [];\n    // option params\n    this._isChecked = option.checked || false;\n    this._isSelectable = option.disabled || option.selectable !== false;\n    this._isDisabled = option.disabled || false;\n    this._isDisableCheckbox = option.disableCheckbox || false;\n    this._isExpanded = option.isLeaf ? false : option.expanded || false;\n    this._isHalfChecked = false;\n    this._isSelected = (!option.disabled && option.selected) || false;\n    this._isLoading = false;\n    this.isMatched = false;\n\n    /**\n     * parent's checked status will affect children while initializing\n     */\n    if (parent) {\n      this.level = parent.level + 1;\n    } else {\n      this.level = 0;\n    }\n\n    const s = this.treeService;\n\n    /**\n     * post process of current treeNode\n     */\n    s?.treeNodePostProcessor?.(this);\n\n    /**\n     * instantiate children tree nodes\n     */\n    if (typeof option.children !== 'undefined' && option.children !== null) {\n      option.children.forEach(nodeOptions => {\n        if (\n          s &&\n          !s.isCheckStrictly &&\n          option.checked &&\n          !option.disabled &&\n          !nodeOptions.disabled &&\n          !nodeOptions.disableCheckbox\n        ) {\n          nodeOptions.checked = option.checked;\n        }\n        this._children.push(new NzTreeNode(nodeOptions, this));\n      });\n    }\n  }\n\n  /**\n   * auto generate\n   * get\n   * set\n   */\n  get title(): string {\n    return this._title;\n  }\n\n  set title(value: string) {\n    this._title = value;\n    this.update();\n  }\n\n  get icon(): string {\n    return this._icon;\n  }\n\n  set icon(value: string) {\n    this._icon = value;\n    this.update();\n  }\n\n  get children(): NzTreeNode[] {\n    return this._children;\n  }\n\n  set children(value: NzTreeNode[]) {\n    this._children = value;\n    this.update();\n  }\n\n  get isLeaf(): boolean {\n    return this._isLeaf;\n  }\n\n  set isLeaf(value: boolean) {\n    this._isLeaf = value;\n    this.update();\n  }\n\n  get isChecked(): boolean {\n    return this._isChecked;\n  }\n\n  set isChecked(value: boolean) {\n    this._isChecked = value;\n    this.origin.checked = value;\n    this.afterValueChange('isChecked');\n  }\n\n  get isHalfChecked(): boolean {\n    return this._isHalfChecked;\n  }\n\n  set isHalfChecked(value: boolean) {\n    this._isHalfChecked = value;\n    this.afterValueChange('isHalfChecked');\n  }\n\n  get isSelectable(): boolean {\n    return this._isSelectable;\n  }\n\n  set isSelectable(value: boolean) {\n    this._isSelectable = value;\n    this.update();\n  }\n\n  get isDisabled(): boolean {\n    return this._isDisabled;\n  }\n\n  set isDisabled(value: boolean) {\n    this._isDisabled = value;\n    this.update();\n  }\n\n  get isDisableCheckbox(): boolean {\n    return this._isDisableCheckbox;\n  }\n\n  set isDisableCheckbox(value: boolean) {\n    this._isDisableCheckbox = value;\n    this.update();\n  }\n\n  get isExpanded(): boolean {\n    return this._isExpanded;\n  }\n\n  set isExpanded(value: boolean) {\n    this._isExpanded = value;\n    this.origin.expanded = value;\n    this.afterValueChange('isExpanded');\n    this.afterValueChange('reRender');\n  }\n\n  get isSelected(): boolean {\n    return this._isSelected;\n  }\n\n  set isSelected(value: boolean) {\n    this._isSelected = value;\n    this.origin.selected = value;\n    this.afterValueChange('isSelected');\n  }\n\n  get isLoading(): boolean {\n    return this._isLoading;\n  }\n\n  set isLoading(value: boolean) {\n    this._isLoading = value;\n    this.update();\n  }\n\n  public setSyncChecked(checked: boolean = false, halfChecked: boolean = false): void {\n    this.setChecked(checked, halfChecked);\n    if (this.treeService && !this.treeService.isCheckStrictly) {\n      this.treeService.conduct(this);\n    }\n  }\n\n  public setChecked(checked: boolean = false, halfChecked: boolean = false): void {\n    this.origin.checked = checked;\n    this.isChecked = checked;\n    this.isHalfChecked = halfChecked;\n  }\n\n  public setExpanded(value: boolean): void {\n    this._isExpanded = value;\n    this.origin.expanded = value;\n    this.afterValueChange('isExpanded');\n  }\n\n  public getParentNode(): NzTreeNode | null {\n    return this.parentNode;\n  }\n\n  public getChildren(): NzTreeNode[] {\n    return this.children;\n  }\n\n  /**\n   * Support appending child nodes by position. Leaf node cannot be appended.\n   */\n  public addChildren(children: NzSafeAny[], childPos: number = -1): void {\n    if (!this.isLeaf) {\n      children.forEach(node => {\n        const refreshLevel = (n: NzTreeNode): void => {\n          n.getChildren().forEach(c => {\n            c.level = c.getParentNode()!.level + 1;\n            // flush origin\n            c.origin.level = c.level;\n            refreshLevel(c);\n          });\n        };\n        let child = node;\n        if (child instanceof NzTreeNode) {\n          child.parentNode = this;\n        } else {\n          child = new NzTreeNode(node, this);\n        }\n        child.level = this.level + 1;\n        child.origin.level = child.level;\n        refreshLevel(child);\n        try {\n          childPos === -1 ? this.children.push(child) : this.children.splice(childPos, 0, child);\n          // flush origin\n        } catch {\n          // noop\n        }\n      });\n      this.origin.children = this.getChildren().map(v => v.origin);\n      // remove loading state\n      this.isLoading = false;\n    }\n    this.afterValueChange('addChildren');\n    this.afterValueChange('reRender');\n  }\n\n  public clearChildren(): void {\n    // refresh checked state\n    this.afterValueChange('clearChildren');\n    this.children = [];\n    this.origin.children = [];\n    this.afterValueChange('reRender');\n  }\n\n  public remove(): void {\n    const parentNode = this.getParentNode();\n    if (parentNode) {\n      parentNode.children = parentNode.getChildren().filter(v => v.key !== this.key);\n      parentNode.origin.children = parentNode.origin.children!.filter(v => v.key !== this.key);\n      this.afterValueChange('remove');\n      this.afterValueChange('reRender');\n    }\n  }\n\n  public afterValueChange(key: string): void {\n    if (this.treeService) {\n      switch (key) {\n        case 'isChecked':\n          this.treeService.setCheckedNodeList(this);\n          break;\n        case 'isHalfChecked':\n          this.treeService.setHalfCheckedNodeList(this);\n          break;\n        case 'isExpanded':\n          this.treeService.setExpandedNodeList(this);\n          break;\n        case 'isSelected':\n          this.treeService.setNodeActive(this);\n          break;\n        case 'clearChildren':\n          this.treeService.afterRemove(this.getChildren());\n          break;\n        case 'remove':\n          this.treeService.afterRemove([this]);\n          break;\n        case 'reRender':\n          this.treeService.flattenTreeData(\n            this.treeService.rootNodes,\n            this.treeService.getExpandedNodeList().map(v => v.key!)\n          );\n          break;\n      }\n    }\n    this.update();\n  }\n\n  public update(): void {\n    if (this.component) {\n      this.component.markForCheck();\n    }\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NzTreeNode } from './nz-tree-base-node';\n\nexport interface NzFormatEmitEvent {\n  eventName: string;\n  node?: NzTreeNode | null;\n  event?: MouseEvent | DragEvent | null;\n  dragNode?: NzTreeNode;\n  selectedKeys?: NzTreeNode[];\n  checkedKeys?: NzTreeNode[];\n  matchedKeys?: NzTreeNode[];\n  nodes?: NzTreeNode[];\n  keys?: string[];\n}\n\nexport interface NzFormatBeforeDropEvent {\n  dragNode: NzTreeNode;\n  node: NzTreeNode;\n  pos: number;\n}\n\nexport interface NzTreeNodeBaseComponent {\n  markForCheck(): void;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { FlattenNode, NzTreeNode, NzTreeNodeKey } from './nz-tree-base-node';\n\nexport function isCheckDisabled(node: NzTreeNode): boolean {\n  const { isDisabled, isDisableCheckbox } = node;\n  return !!(isDisabled || isDisableCheckbox);\n}\n\nexport function isInArray(needle: NzSafeAny, haystack: NzSafeAny[]): boolean {\n  return haystack.length > 0 && haystack.indexOf(needle) > -1;\n}\n\nexport function getPosition(level: string | number, index: number): string {\n  return `${level}-${index}`;\n}\n\nexport function getKey(key: NzTreeNodeKey, pos: string): NzTreeNodeKey {\n  if (key !== null && key !== undefined) {\n    return key;\n  }\n  return pos;\n}\n\n/**\n * Flat nest tree data into flatten list. This is used for virtual list render.\n *\n * @param treeNodeList Origin data node list\n * @param expandedKeys\n * need expanded keys, provides `true` means all expanded (used in `rc-tree-select`).\n */\nexport function flattenTreeData(\n  treeNodeList: NzTreeNode[] = [],\n  expandedKeys: NzTreeNodeKey[] | true = []\n): FlattenNode[] {\n  const expandedKeySet = new Set(expandedKeys === true ? [] : expandedKeys);\n  const flattenList: FlattenNode[] = [];\n\n  function dig(list: NzTreeNode[], parent: FlattenNode | null = null): FlattenNode[] {\n    return list.map((treeNode, index) => {\n      const pos: string = getPosition(parent ? parent.pos : '0', index);\n      const mergedKey = getKey(treeNode.key, pos);\n      treeNode.isStart = [...(parent ? parent.isStart : []), index === 0];\n      treeNode.isEnd = [...(parent ? parent.isEnd : []), index === list.length - 1];\n      // Add FlattenDataNode into list\n      // TODO: only need data here.\n      const flattenNode: FlattenNode = {\n        parent,\n        pos,\n        children: [],\n        data: treeNode,\n        isStart: [...(parent ? parent.isStart : []), index === 0],\n        isEnd: [...(parent ? parent.isEnd : []), index === list.length - 1]\n      };\n\n      flattenList.push(flattenNode);\n\n      // Loop treeNode children\n      if (expandedKeys === true || expandedKeySet.has(mergedKey) || treeNode.isExpanded) {\n        flattenNode.children = dig(treeNode.children || [], flattenNode);\n      } else {\n        flattenNode.children = [];\n      }\n\n      return flattenNode;\n    });\n  }\n\n  dig(treeNodeList);\n  return flattenList;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzTreeNode, NzTreeNodeKey } from './nz-tree-base-node';\nimport { flattenTreeData, isCheckDisabled, isInArray } from './nz-tree-base-util';\nimport { NzFormatEmitEvent } from './nz-tree-base.definitions';\n\n@Injectable()\nexport class NzTreeBaseService {\n  DRAG_SIDE_RANGE = 0.25;\n  DRAG_MIN_GAP = 2;\n\n  isCheckStrictly: boolean = false;\n  isMultiple: boolean = false;\n  selectedNode!: NzTreeNode;\n  rootNodes: NzTreeNode[] = [];\n  flattenNodes$ = new BehaviorSubject<NzTreeNode[]>([]);\n  selectedNodeList: NzTreeNode[] = [];\n  expandedNodeList: NzTreeNode[] = [];\n  checkedNodeList: NzTreeNode[] = [];\n  halfCheckedNodeList: NzTreeNode[] = [];\n  matchedNodeList: NzTreeNode[] = [];\n  /**\n   * handle to post process a tree node when it's instantiating, note that its children haven't been initiated yet\n   */\n  treeNodePostProcessor?: (node: NzTreeNode) => void;\n\n  /**\n   * reset tree nodes will clear default node list\n   */\n  initTree(nzNodes: NzTreeNode[]): void {\n    this.rootNodes = nzNodes;\n    this.expandedNodeList = [];\n    this.selectedNodeList = [];\n    this.halfCheckedNodeList = [];\n    this.checkedNodeList = [];\n    this.matchedNodeList = [];\n  }\n\n  flattenTreeData(nzNodes: NzTreeNode[], expandedKeys: NzTreeNodeKey[] | true = []): void {\n    this.flattenNodes$.next(flattenTreeData(nzNodes, expandedKeys).map(item => item.data));\n  }\n\n  getSelectedNode(): NzTreeNode | null {\n    return this.selectedNode;\n  }\n\n  /**\n   * get some list\n   */\n  getSelectedNodeList(): NzTreeNode[] {\n    return this.conductNodeState('select');\n  }\n\n  /**\n   * get checked node keys\n   */\n  getCheckedNodeKeys(): NzTreeNodeKey[] {\n    const keys: NzTreeNodeKey[] = [];\n    const checkedNodes = this.getCheckedNodeList();\n\n    const calc = (nodes: NzTreeNode[]): void => {\n      nodes.forEach(node => {\n        keys.push(node.key);\n        if (node.children.length < 1) return;\n        calc(node.children);\n      });\n    };\n\n    calc(checkedNodes);\n\n    return keys;\n  }\n\n  /**\n   * return checked nodes\n   */\n  getCheckedNodeList(): NzTreeNode[] {\n    return this.conductNodeState('check');\n  }\n\n  getHalfCheckedNodeList(): NzTreeNode[] {\n    return this.conductNodeState('halfCheck');\n  }\n\n  /**\n   * return expanded nodes\n   */\n  getExpandedNodeList(): NzTreeNode[] {\n    return this.conductNodeState('expand');\n  }\n\n  /**\n   * return search matched nodes\n   */\n  getMatchedNodeList(): NzTreeNode[] {\n    return this.conductNodeState('match');\n  }\n\n  isArrayOfNzTreeNode(value: NzSafeAny[]): boolean {\n    return value.every(item => item instanceof NzTreeNode);\n  }\n\n  /**\n   * set drag node\n   */\n  setSelectedNode(node: NzTreeNode): void {\n    this.selectedNode = node;\n  }\n\n  /**\n   * set node selected status\n   */\n  setNodeActive(node: NzTreeNode): void {\n    if (!this.isMultiple && node.isSelected) {\n      this.selectedNodeList.forEach(n => {\n        if (node.key !== n.key) {\n          // reset other nodes\n          n.isSelected = false;\n        }\n      });\n      // single mode: remove pre node\n      this.selectedNodeList = [];\n    }\n    this.setSelectedNodeList(node, this.isMultiple);\n  }\n\n  /**\n   * add or remove node to selectedNodeList\n   */\n  setSelectedNodeList(node: NzTreeNode, isMultiple: boolean = false): void {\n    const index = this.getIndexOfArray(this.selectedNodeList, node.key);\n    if (isMultiple) {\n      if (node.isSelected && index === -1) {\n        this.selectedNodeList.push(node);\n      }\n    } else {\n      if (node.isSelected && index === -1) {\n        this.selectedNodeList = [node];\n      }\n    }\n    if (!node.isSelected) {\n      this.selectedNodeList = this.selectedNodeList.filter(n => n.key !== node.key);\n    }\n  }\n\n  /**\n   * merge checked nodes\n   */\n  setHalfCheckedNodeList(node: NzTreeNode): void {\n    const index = this.getIndexOfArray(this.halfCheckedNodeList, node.key);\n    if (node.isHalfChecked && index === -1) {\n      this.halfCheckedNodeList.push(node);\n    } else if (!node.isHalfChecked && index > -1) {\n      this.halfCheckedNodeList = this.halfCheckedNodeList.filter(n => node.key !== n.key);\n    }\n  }\n\n  setCheckedNodeList(node: NzTreeNode): void {\n    const index = this.getIndexOfArray(this.checkedNodeList, node.key);\n    if (node.isChecked && index === -1) {\n      this.checkedNodeList.push(node);\n    } else if (!node.isChecked && index > -1) {\n      this.checkedNodeList = this.checkedNodeList.filter(n => node.key !== n.key);\n    }\n  }\n\n  /**\n   * conduct checked/selected/expanded keys\n   */\n  conductNodeState(type: string = 'check'): NzTreeNode[] {\n    let resultNodesList: NzTreeNode[] = [];\n    switch (type) {\n      case 'select':\n        resultNodesList = this.selectedNodeList;\n        break;\n      case 'expand':\n        resultNodesList = this.expandedNodeList;\n        break;\n      case 'match':\n        resultNodesList = this.matchedNodeList;\n        break;\n      case 'check': {\n        resultNodesList = this.checkedNodeList;\n        const isIgnore = (node: NzTreeNode): boolean => {\n          const parentNode = node.getParentNode();\n          if (parentNode) {\n            if (this.checkedNodeList.findIndex(n => n.key === parentNode.key) > -1) {\n              return true;\n            } else {\n              return isIgnore(parentNode);\n            }\n          }\n          return false;\n        };\n        // merge checked\n        if (!this.isCheckStrictly) {\n          resultNodesList = this.checkedNodeList.filter(n => !isIgnore(n));\n        }\n        break;\n      }\n      case 'halfCheck':\n        if (!this.isCheckStrictly) {\n          resultNodesList = this.halfCheckedNodeList;\n        }\n        break;\n    }\n    return resultNodesList;\n  }\n\n  /**\n   * set expanded nodes\n   */\n  setExpandedNodeList(node: NzTreeNode): void {\n    if (node.isLeaf) {\n      return;\n    }\n    const index = this.getIndexOfArray(this.expandedNodeList, node.key);\n    if (node.isExpanded && index === -1) {\n      this.expandedNodeList.push(node);\n    } else if (!node.isExpanded && index > -1) {\n      this.expandedNodeList.splice(index, 1);\n    }\n  }\n\n  setMatchedNodeList(node: NzTreeNode): void {\n    const index = this.getIndexOfArray(this.matchedNodeList, node.key);\n    if (node.isMatched && index === -1) {\n      this.matchedNodeList.push(node);\n    } else if (!node.isMatched && index > -1) {\n      this.matchedNodeList.splice(index, 1);\n    }\n  }\n\n  /**\n   * check state\n   *\n   * @param isCheckStrictly\n   */\n  refreshCheckState(isCheckStrictly: boolean = false): void {\n    if (isCheckStrictly) {\n      return;\n    }\n    this.checkedNodeList.forEach(node => {\n      this.conduct(node, isCheckStrictly);\n    });\n  }\n\n  // reset other node checked state based current node\n  conduct(node: NzTreeNode, isCheckStrictly: boolean = false): void {\n    const isChecked = node.isChecked;\n    if (node && !isCheckStrictly) {\n      this.conductUp(node);\n      this.conductDown(node, isChecked);\n    }\n  }\n\n  /**\n   * 1、children half checked\n   * 2、children all checked, parent checked\n   * 3、no children checked\n   */\n  conductUp(node: NzTreeNode): void {\n    const parentNode = node.getParentNode();\n    if (parentNode) {\n      if (!isCheckDisabled(parentNode)) {\n        if (parentNode.children.every(child => isCheckDisabled(child) || (!child.isHalfChecked && child.isChecked))) {\n          parentNode.isChecked = true;\n          parentNode.isHalfChecked = false;\n        } else if (parentNode.children.some(child => child.isHalfChecked || child.isChecked)) {\n          parentNode.isChecked = false;\n          parentNode.isHalfChecked = true;\n        } else {\n          parentNode.isChecked = false;\n          parentNode.isHalfChecked = false;\n        }\n      }\n      this.setCheckedNodeList(parentNode);\n      this.setHalfCheckedNodeList(parentNode);\n      this.conductUp(parentNode);\n    }\n  }\n\n  /**\n   * reset child check state\n   */\n  conductDown(node: NzTreeNode, value: boolean): void {\n    if (!isCheckDisabled(node)) {\n      node.isChecked = value;\n      node.isHalfChecked = false;\n      this.setCheckedNodeList(node);\n      this.setHalfCheckedNodeList(node);\n      node.children.forEach(n => {\n        this.conductDown(n, value);\n      });\n    }\n  }\n\n  /**\n   * flush after delete node\n   */\n  afterRemove(nodes: NzTreeNode[]): void {\n    // to reset selectedNodeList & expandedNodeList\n    const loopNode = (node: NzTreeNode): void => {\n      // remove selected node\n      this.selectedNodeList = this.selectedNodeList.filter(n => n.key !== node.key);\n      // remove expanded node\n      this.expandedNodeList = this.expandedNodeList.filter(n => n.key !== node.key);\n      // remove checked node\n      this.checkedNodeList = this.checkedNodeList.filter(n => n.key !== node.key);\n      if (node.children) {\n        node.children.forEach(child => {\n          loopNode(child);\n        });\n      }\n    };\n    nodes.forEach(n => {\n      loopNode(n);\n    });\n    this.refreshCheckState(this.isCheckStrictly);\n  }\n\n  /**\n   * drag event\n   */\n  refreshDragNode(node: NzTreeNode): void {\n    if (node.children.length === 0) {\n      // until root\n      this.conductUp(node);\n    } else {\n      node.children.forEach(child => {\n        this.refreshDragNode(child);\n      });\n    }\n  }\n\n  // reset node level\n  resetNodeLevel(node: NzTreeNode): void {\n    const parentNode = node.getParentNode();\n    if (parentNode) {\n      node.level = parentNode.level + 1;\n    } else {\n      node.level = 0;\n    }\n    for (const child of node.children) {\n      this.resetNodeLevel(child);\n    }\n  }\n\n  calcDropPosition(event: DragEvent): number {\n    const { clientY } = event;\n    // to fix firefox undefined\n    const { top, bottom, height } = (event.target as Element).getBoundingClientRect();\n    const des = Math.max(height * this.DRAG_SIDE_RANGE, this.DRAG_MIN_GAP);\n\n    if (clientY <= top + des) {\n      return -1;\n    } else if (clientY >= bottom - des) {\n      return 1;\n    }\n\n    return 0;\n  }\n\n  /**\n   * drop\n   * 0: inner -1: pre 1: next\n   */\n  dropAndApply(targetNode: NzTreeNode, dragPos: number = -1): void {\n    if (!targetNode || dragPos > 1) {\n      return;\n    }\n    const treeService = targetNode.treeService;\n    const targetParent = targetNode.getParentNode();\n    const isSelectedRootNode = this.selectedNode.getParentNode();\n    // remove the dragNode\n    if (isSelectedRootNode) {\n      isSelectedRootNode.children = isSelectedRootNode.children.filter(n => n.key !== this.selectedNode.key);\n    } else {\n      this.rootNodes = this.rootNodes.filter(n => n.key !== this.selectedNode.key);\n    }\n    switch (dragPos) {\n      case 0:\n        targetNode.addChildren([this.selectedNode]);\n        this.resetNodeLevel(targetNode);\n        break;\n      case -1:\n      case 1: {\n        const tIndex = dragPos === 1 ? 1 : 0;\n        if (targetParent) {\n          targetParent.addChildren([this.selectedNode], targetParent.children.indexOf(targetNode) + tIndex);\n          const parentNode = this.selectedNode.getParentNode();\n          if (parentNode) {\n            this.resetNodeLevel(parentNode);\n          }\n        } else {\n          const targetIndex = this.rootNodes.indexOf(targetNode) + tIndex;\n          // Insert root node.\n          this.rootNodes.splice(targetIndex, 0, this.selectedNode);\n          this.rootNodes[targetIndex].parentNode = null;\n          this.resetNodeLevel(this.rootNodes[targetIndex]);\n        }\n        break;\n      }\n    }\n    // flush all nodes\n    this.rootNodes.forEach(child => {\n      if (!child.treeService) {\n        child.service = treeService;\n      }\n      this.refreshDragNode(child);\n    });\n  }\n\n  /**\n   * emit Structure\n   * eventName\n   * node\n   * event: MouseEvent / DragEvent\n   * dragNode\n   */\n  formatEvent(eventName: string, node: NzTreeNode | null, event: MouseEvent | DragEvent | null): NzFormatEmitEvent {\n    const emitStructure: NzFormatEmitEvent = {\n      eventName,\n      node,\n      event\n    };\n    switch (eventName) {\n      case 'dragstart':\n      case 'dragenter':\n      case 'dragover':\n      case 'dragleave':\n      case 'drop':\n      case 'dragend':\n        Object.assign(emitStructure, { dragNode: this.getSelectedNode() });\n        break;\n      case 'click':\n      case 'dblclick':\n        Object.assign(emitStructure, { selectedKeys: this.selectedNodeList });\n        Object.assign(emitStructure, { nodes: this.selectedNodeList });\n        Object.assign(emitStructure, { keys: this.selectedNodeList.map(n => n.key) });\n        break;\n      case 'check': {\n        const checkedNodeList = this.getCheckedNodeList();\n        Object.assign(emitStructure, { checkedKeys: checkedNodeList });\n        Object.assign(emitStructure, { nodes: checkedNodeList });\n        Object.assign(emitStructure, { keys: checkedNodeList.map(n => n.key) });\n        break;\n      }\n      case 'search':\n        Object.assign(emitStructure, { matchedKeys: this.getMatchedNodeList() });\n        Object.assign(emitStructure, { nodes: this.getMatchedNodeList() });\n        Object.assign(emitStructure, { keys: this.getMatchedNodeList().map(n => n.key) });\n        break;\n      case 'expand':\n        Object.assign(emitStructure, { nodes: this.expandedNodeList });\n        Object.assign(emitStructure, { keys: this.expandedNodeList.map(n => n.key) });\n        break;\n    }\n    return emitStructure;\n  }\n\n  /**\n   * New functions for flatten nodes\n   */\n\n  getIndexOfArray(list: NzTreeNode[], key: string): number {\n    return list.findIndex(v => v.key === key);\n  }\n\n  /**\n   * Render by nzCheckedKeys\n   * When keys equals null, just render with checkStrictly\n   *\n   * @param keys\n   * @param checkStrictly\n   */\n  conductCheck(keys: NzTreeNodeKey[] | null, checkStrictly: boolean): void {\n    this.checkedNodeList = [];\n    this.halfCheckedNodeList = [];\n    const calc = (nodes: NzTreeNode[]): void => {\n      nodes.forEach(node => {\n        if (keys === null) {\n          // render tree if no default checked keys found\n          node.isChecked = !!node.origin.checked;\n        } else {\n          if (isInArray(node.key, keys || [])) {\n            node.isChecked = true;\n            node.isHalfChecked = false;\n          } else {\n            node.isChecked = false;\n            node.isHalfChecked = false;\n          }\n        }\n        if (node.children.length > 0) {\n          calc(node.children);\n        }\n      });\n    };\n    calc(this.rootNodes);\n    this.refreshCheckState(checkStrictly);\n  }\n\n  conductExpandedKeys(keys: NzTreeNodeKey[] | true = []): void {\n    const expandedKeySet = new Set(keys === true ? [] : keys);\n    this.expandedNodeList = [];\n    const calc = (nodes: NzTreeNode[]): void => {\n      nodes.forEach(node => {\n        node.setExpanded(keys === true || expandedKeySet.has(node.key) || node.isExpanded === true);\n        if (node.isExpanded) {\n          this.setExpandedNodeList(node);\n        }\n        if (node.children.length > 0) {\n          calc(node.children);\n        }\n      });\n    };\n    calc(this.rootNodes);\n  }\n\n  conductSelectedKeys(keys: NzTreeNodeKey[], isMulti: boolean): void {\n    this.selectedNodeList.forEach(node => (node.isSelected = false));\n    this.selectedNodeList = [];\n    const calc = (nodes: NzTreeNode[]): boolean =>\n      nodes.every(node => {\n        if (isInArray(node.key, keys)) {\n          node.isSelected = true;\n          this.setSelectedNodeList(node);\n          if (!isMulti) {\n            // if not support multi select\n            return false;\n          }\n        } else {\n          node.isSelected = false;\n        }\n        if (node.children.length > 0) {\n          // Recursion\n          return calc(node.children);\n        }\n        return true;\n      });\n    calc(this.rootNodes);\n  }\n\n  /**\n   * Expand parent nodes by child node\n   *\n   * @param node\n   */\n  expandNodeAllParentBySearch(node: NzTreeNode): void {\n    const calc = (n: NzTreeNode | null): void => {\n      if (n) {\n        n.canHide = false;\n        n.setExpanded(true);\n        this.setExpandedNodeList(n);\n        if (n.getParentNode()) {\n          return calc(n.getParentNode());\n        }\n      }\n    };\n    calc(node.getParentNode());\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { InjectionToken } from '@angular/core';\n\nimport { NzTreeBaseService } from './nz-tree-base.service';\n\nexport const NzTreeHigherOrderServiceToken = new InjectionToken<NzTreeBaseService>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-tree-higher-order' : ''\n);\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzTreeNode } from './nz-tree-base-node';\nimport { NzTreeBaseService } from './nz-tree-base.service';\n\nexport class NzTreeBase {\n  constructor(public nzTreeService: NzTreeBaseService) {}\n\n  /**\n   * Coerces a value({@link any[]}) to a TreeNodes({@link NzTreeNode[]})\n   */\n  coerceTreeNodes(value: NzSafeAny[]): NzTreeNode[] {\n    let nodes: NzTreeNode[] = [];\n    if (!this.nzTreeService.isArrayOfNzTreeNode(value)) {\n      // has not been new NzTreeNode\n      nodes = value.map(item => new NzTreeNode(item, null, this.nzTreeService));\n    } else {\n      nodes = value.map((item: NzTreeNode) => {\n        item.service = this.nzTreeService;\n        return item;\n      });\n    }\n    return nodes;\n  }\n\n  /**\n   * Get all nodes({@link NzTreeNode})\n   */\n  getTreeNodes(): NzTreeNode[] {\n    return this.nzTreeService.rootNodes;\n  }\n\n  /**\n   * Get {@link NzTreeNode} with key\n   */\n  getTreeNodeByKey(key: string): NzTreeNode | null {\n    // flat tree nodes\n    const nodes: NzTreeNode[] = [];\n    const getNode = (node: NzTreeNode): void => {\n      nodes.push(node);\n      node.getChildren().forEach(n => {\n        getNode(n);\n      });\n    };\n    this.getTreeNodes().forEach(n => {\n      getNode(n);\n    });\n    return nodes.find(n => n.key === key) || null;\n  }\n\n  /**\n   * Get checked nodes(merged)\n   */\n  getCheckedNodeList(): NzTreeNode[] {\n    return this.nzTreeService.getCheckedNodeList();\n  }\n\n  /**\n   * Get selected nodes\n   */\n  getSelectedNodeList(): NzTreeNode[] {\n    return this.nzTreeService.getSelectedNodeList();\n  }\n\n  /**\n   * Get half checked nodes\n   */\n  getHalfCheckedNodeList(): NzTreeNode[] {\n    return this.nzTreeService.getHalfCheckedNodeList();\n  }\n\n  /**\n   * Get expanded nodes\n   */\n  getExpandedNodeList(): NzTreeNode[] {\n    return this.nzTreeService.getExpandedNodeList();\n  }\n\n  /**\n   * Get matched nodes(if nzSearchValue is not null)\n   */\n  getMatchedNodeList(): NzTreeNode[] {\n    return this.nzTreeService.getMatchedNodeList();\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './nz-tree-base-node';\nexport * from './nz-tree-base.definitions';\nexport * from './nz-tree-base.service';\nexport * from './nz-tree-service.resolver';\nexport * from './nz-tree-base';\nexport * from './nz-tree-base-util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}