{"version":3,"file":"ephraim-haber-angular-tree-component.mjs","sources":["../../../projects/angular-tree-component/src/lib/mobx-angular/tree-mobx-autorun.directive.ts","../../../projects/angular-tree-component/src/lib/constants/keys.ts","../../../projects/angular-tree-component/src/lib/models/tree-options.model.ts","../../../projects/angular-tree-component/src/lib/constants/events.ts","../../../projects/angular-tree-component/src/lib/models/tree-node.model.ts","../../../projects/angular-tree-component/src/lib/models/tree.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-dragged-element.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-virtual-scroll.model.ts","../../../projects/angular-tree-component/src/lib/components/loading.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drop.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-drop-slot.component.ts","../../../projects/angular-tree-component/src/lib/mobx-angular/mobx-proxy.ts","../../../projects/angular-tree-component/src/lib/directives/tree-animate-open.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-content.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drag.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-expander.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-checkbox.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-wrapper.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-collection.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-viewport.component.ts","../../../projects/angular-tree-component/src/lib/components/tree.component.ts","../../../projects/angular-tree-component/src/lib/angular-tree-component.module.ts","../../../projects/angular-tree-component/src/public-api.ts","../../../projects/angular-tree-component/src/ephraim-haber-angular-tree-component.ts"],"sourcesContent":["import { Directive, ViewContainerRef, TemplateRef, OnInit, OnDestroy, Input, EmbeddedViewRef } from '@angular/core';\nimport { autorun } from 'mobx';\n\n@Directive({\n  selector: '[treeMobxAutorun]',\n  standalone: false,\n})\nexport class TreeMobxAutorunDirective implements OnInit, OnDestroy {\n  protected templateBindings = {};\n  protected dispose: any;\n  protected view: EmbeddedViewRef<any>;\n  @Input() treeMobxAutorun;\n\n  constructor(\n    protected templateRef: TemplateRef<any>,\n    protected viewContainer: ViewContainerRef,\n  ) {}\n\n  ngOnInit() {\n    this.view = this.viewContainer.createEmbeddedView(this.templateRef);\n\n    if (this.dispose) {\n      this.dispose();\n    }\n\n    if (this.shouldDetach()) {\n      this.view.detach();\n    }\n    this.autoDetect(this.view);\n  }\n\n  shouldDetach() {\n    return this.treeMobxAutorun && this.treeMobxAutorun.detach;\n  }\n\n  autoDetect(view: EmbeddedViewRef<any>) {\n    this.dispose = autorun(() => view.detectChanges());\n  }\n\n  ngOnDestroy() {\n    if (this.dispose) {\n      this.dispose();\n    }\n  }\n}\n","export const KEYS = {\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  ENTER: 13,\n  SPACE: 32,\n  CONTEXT_MENU: 32,\n};\n","import { TreeNode } from './tree-node.model';\nimport { TreeModel } from './tree.model';\nimport { KEYS } from '../constants/keys';\nimport { ITreeOptions } from '../defs/api';\n\nexport interface IActionHandler {\n  (tree: TreeModel, node: TreeNode, $event: any, ...rest);\n}\n\nexport const TREE_ACTIONS = {\n  TOGGLE_ACTIVE: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(),\n  TOGGLE_ACTIVE_MULTI: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(true),\n  TOGGLE_SELECTED: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleSelected(),\n  ACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(true),\n  DEACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(false),\n  SELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(true),\n  DESELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(false),\n  FOCUS: (tree: TreeModel, node: TreeNode, $event: any) => node.focus(),\n  TOGGLE_EXPANDED: (tree: TreeModel, node: TreeNode, $event: any) => node.hasChildren && node.toggleExpanded(),\n  EXPAND: (tree: TreeModel, node: TreeNode, $event: any) => node.expand(),\n  COLLAPSE: (tree: TreeModel, node: TreeNode, $event: any) => node.collapse(),\n  DRILL_DOWN: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillDown(),\n  DRILL_UP: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillUp(),\n  NEXT_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusNextNode(),\n  PREVIOUS_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusPreviousNode(),\n  MOVE_NODE: (tree: TreeModel, node: TreeNode, $event: any, { from, to }: { from: any; to: any }) => {\n    // default action assumes from = node, to = {parent, index}\n    if ($event.ctrlKey) {\n      tree.copyNode(from, to);\n    } else {\n      tree.moveNode(from, to);\n    }\n  },\n};\n\nconst defaultActionMapping: IActionMapping = {\n  mouse: {\n    click: TREE_ACTIONS.TOGGLE_ACTIVE,\n    dblClick: null,\n    contextMenu: null,\n    expanderClick: TREE_ACTIONS.TOGGLE_EXPANDED,\n    checkboxClick: TREE_ACTIONS.TOGGLE_SELECTED,\n    drop: TREE_ACTIONS.MOVE_NODE,\n  },\n  keys: {\n    [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\n    [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\n    [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\n    [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\n    [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\n    [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE,\n  },\n};\n\nexport interface IActionMapping {\n  mouse?: {\n    click?: IActionHandler;\n    dblClick?: IActionHandler;\n    contextMenu?: IActionHandler;\n    expanderClick?: IActionHandler;\n    checkboxClick?: IActionHandler;\n    dragStart?: IActionHandler;\n    drag?: IActionHandler;\n    dragEnd?: IActionHandler;\n    dragOver?: IActionHandler;\n    dragLeave?: IActionHandler;\n    dragEnter?: IActionHandler;\n    drop?: IActionHandler;\n    mouseOver?: IActionHandler;\n    mouseOut?: IActionHandler;\n  };\n  keys?: {\n    [key: number]: IActionHandler;\n  };\n}\n\nexport class TreeOptions {\n  get hasChildrenField(): string {\n    return this.options.hasChildrenField || 'hasChildren';\n  }\n  get childrenField(): string {\n    return this.options.childrenField || 'children';\n  }\n  get displayField(): string {\n    return this.options.displayField || 'name';\n  }\n  get idField(): string {\n    return this.options.idField || 'id';\n  }\n  get isExpandedField(): string {\n    return this.options.isExpandedField || 'isExpanded';\n  }\n  get getChildren(): any {\n    return this.options.getChildren;\n  }\n  get levelPadding(): number {\n    return this.options.levelPadding || 0;\n  }\n  get useVirtualScroll(): boolean {\n    return this.options.useVirtualScroll;\n  }\n  get animateExpand(): boolean {\n    return this.options.animateExpand;\n  }\n  get animateSpeed(): number {\n    return this.options.animateSpeed || 1;\n  }\n  get animateAcceleration(): number {\n    return this.options.animateAcceleration || 1.2;\n  }\n  get scrollOnActivate(): boolean {\n    return this.options.scrollOnActivate === undefined ? true : this.options.scrollOnActivate;\n  }\n  get rtl(): boolean {\n    return !!this.options.rtl;\n  }\n  get rootId(): any {\n    return this.options.rootId;\n  }\n  get useCheckbox(): boolean {\n    return this.options.useCheckbox;\n  }\n  get useTriState(): boolean {\n    return this.options.useTriState === undefined ? true : this.options.useTriState;\n  }\n  get scrollContainer(): HTMLElement {\n    return this.options.scrollContainer;\n  }\n  get allowDragoverStyling(): boolean {\n    return this.options.allowDragoverStyling === undefined ? true : this.options.allowDragoverStyling;\n  }\n  actionMapping: IActionMapping;\n\n  constructor(private options: ITreeOptions = {}) {\n    this.actionMapping = {\n      mouse: {\n        click: this.options?.actionMapping?.mouse?.click ?? defaultActionMapping.mouse.click,\n        dblClick: this.options?.actionMapping?.mouse?.dblClick ?? defaultActionMapping.mouse.dblClick,\n        contextMenu: this.options?.actionMapping?.mouse?.contextMenu ?? defaultActionMapping.mouse.contextMenu,\n        expanderClick: this.options?.actionMapping?.mouse?.expanderClick ?? defaultActionMapping.mouse.expanderClick,\n        checkboxClick: this.options?.actionMapping?.mouse?.checkboxClick ?? defaultActionMapping.mouse.checkboxClick,\n        drop: this.options?.actionMapping?.mouse?.drop ?? defaultActionMapping.mouse.drop,\n        dragStart: this.options?.actionMapping?.mouse?.dragStart ?? undefined,\n        drag: this.options?.actionMapping?.mouse?.drag ?? undefined,\n        dragEnd: this.options?.actionMapping?.mouse?.dragEnd ?? undefined,\n        dragOver: this.options?.actionMapping?.mouse?.dragOver ?? undefined,\n        dragLeave: this.options?.actionMapping?.mouse?.dragLeave ?? undefined,\n        dragEnter: this.options?.actionMapping?.mouse?.dragEnter ?? undefined,\n        mouseOver: this.options?.actionMapping?.mouse?.mouseOver ?? undefined,\n        mouseOut: this.options?.actionMapping?.mouse?.mouseOut ?? undefined,\n      },\n      keys: {\n        [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\n        [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\n        [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\n        [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\n        [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\n        [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE,\n      },\n    };\n\n    if (this.options?.actionMapping?.keys) {\n      this.actionMapping.keys = {\n        ...this.actionMapping.keys,\n        ...this.options.actionMapping.keys,\n      };\n    }\n\n    if (options.rtl) {\n      this.actionMapping.keys[KEYS.RIGHT] =\n        <IActionHandler>options.actionMapping?.keys[KEYS.RIGHT] || TREE_ACTIONS.DRILL_UP;\n      this.actionMapping.keys[KEYS.LEFT] =\n        <IActionHandler>options.actionMapping?.keys[KEYS.LEFT] || TREE_ACTIONS.DRILL_DOWN;\n    }\n  }\n\n  getNodeClone(node: TreeNode): any {\n    if (this.options.getNodeClone) {\n      return this.options.getNodeClone(node);\n    }\n\n    // remove id from clone\n    // keeping ie11 compatibility\n    const nodeClone = Object.assign({}, node.data);\n    if (nodeClone.id) {\n      delete nodeClone.id;\n    }\n    return nodeClone;\n  }\n\n  allowDrop(element, to, $event?): boolean {\n    if (this.options.allowDrop instanceof Function) {\n      return this.options.allowDrop(element, to, $event);\n    } else {\n      return this.options.allowDrop === undefined ? true : this.options.allowDrop;\n    }\n  }\n\n  allowDrag(node: TreeNode): boolean {\n    if (this.options.allowDrag instanceof Function) {\n      return this.options.allowDrag(node);\n    } else {\n      return this.options.allowDrag;\n    }\n  }\n\n  nodeClass(node: TreeNode): string {\n    return this.options.nodeClass ? this.options.nodeClass(node) : '';\n  }\n\n  nodeHeight(node: TreeNode): number {\n    if (node.data.virtual) {\n      return 0;\n    }\n\n    let nodeHeight = this.options.nodeHeight || 22;\n\n    if (typeof nodeHeight === 'function') {\n      nodeHeight = nodeHeight(node);\n    }\n\n    // account for drop slots:\n    return nodeHeight + (node.index === 0 ? 2 : 1) * this.dropSlotHeight;\n  }\n\n  get dropSlotHeight(): number {\n    return typeof this.options.dropSlotHeight === 'number' ? this.options.dropSlotHeight : 2;\n  }\n}\n","export const TREE_EVENTS = {\n  toggleExpanded: 'toggleExpanded',\n  activate: 'activate',\n  deactivate: 'deactivate',\n  nodeActivate: 'nodeActivate',\n  nodeDeactivate: 'nodeDeactivate',\n  select: 'select',\n  deselect: 'deselect',\n  focus: 'focus',\n  blur: 'blur',\n  initialized: 'initialized',\n  updateData: 'updateData',\n  moveNode: 'moveNode',\n  copyNode: 'copyNode',\n  event: 'event',\n  loadNodeChildren: 'loadNodeChildren',\n  changeFilter: 'changeFilter',\n  stateChange: 'stateChange',\n};\n","import { observable, computed, reaction, autorun, action, IReactionDisposer } from 'mobx';\nimport { TreeModel } from './tree.model';\nimport { TreeOptions } from './tree-options.model';\nimport { ITreeNode } from '../defs/api';\nimport { TREE_EVENTS } from '../constants/events';\n\nexport class TreeNode implements ITreeNode {\n  private handler: IReactionDisposer;\n  @computed get isHidden() {\n    return this.treeModel.isHidden(this);\n  }\n  @computed get isExpanded() {\n    return this.treeModel.isExpanded(this);\n  }\n  @computed get isActive() {\n    return this.treeModel.isActive(this);\n  }\n  @computed get isFocused() {\n    return this.treeModel.isNodeFocused(this);\n  }\n  @computed get isSelected() {\n    if (this.isSelectable()) {\n      return this.treeModel.isSelected(this);\n    } else {\n      return this.children.some((node: TreeNode) => node.isSelected);\n    }\n  }\n  @computed get isAllSelected() {\n    if (this.isSelectable()) {\n      return this.treeModel.isSelected(this);\n    } else {\n      return this.children.every((node: TreeNode) => node.isAllSelected);\n    }\n  }\n  @computed get isPartiallySelected() {\n    return this.isSelected && !this.isAllSelected;\n  }\n\n  @observable children: TreeNode[];\n  @observable index: number;\n  @observable position = 0;\n  @observable height: number;\n  @computed get level(): number {\n    return this.parent ? this.parent.level + 1 : 0;\n  }\n  @computed get path(): string[] {\n    return this.parent ? [...this.parent.path, this.id] : [];\n  }\n\n  get elementRef(): any {\n    throw `Element Ref is no longer supported since introducing virtual scroll\\n\n      You may use a template to obtain a reference to the element`;\n  }\n\n  private _originalNode: any;\n  get originalNode() {\n    return this._originalNode;\n  }\n\n  constructor(\n    public data: any,\n    public parent: TreeNode,\n    public treeModel: TreeModel,\n    index: number,\n  ) {\n    if (this.id === undefined || this.id === null) {\n      this.id = uuid();\n    } // Make sure there's a unique id without overriding existing ids to work with immutable data structures\n    this.index = index;\n\n    if (this.getField('children')) {\n      this._initChildren();\n    }\n    this.autoLoadChildren();\n  }\n\n  // helper get functions:\n  get hasChildren(): boolean {\n    return !!(this.getField('hasChildren') || (this.children && this.children.length > 0));\n  }\n  get isCollapsed(): boolean {\n    return !this.isExpanded;\n  }\n  get isLeaf(): boolean {\n    return !this.hasChildren;\n  }\n  get isRoot(): boolean {\n    return this.parent.data.virtual;\n  }\n  get realParent(): TreeNode {\n    return this.isRoot ? null : this.parent;\n  }\n\n  // proxy functions:\n  get options(): TreeOptions {\n    return this.treeModel.options;\n  }\n  fireEvent(event) {\n    this.treeModel.fireEvent(event);\n  }\n\n  // field accessors:\n  get displayField() {\n    return this.getField('display');\n  }\n\n  get id() {\n    return this.getField('id');\n  }\n\n  set id(value) {\n    this.setField('id', value);\n  }\n\n  getField(key) {\n    return this.data[this.options[`${key}Field`]];\n  }\n\n  setField(key, value) {\n    this.data[this.options[`${key}Field`]] = value;\n  }\n\n  // traversing:\n  _findAdjacentSibling(steps, skipHidden = false) {\n    const siblings = this._getParentsChildren(skipHidden);\n    const index = siblings.indexOf(this);\n\n    return siblings.length > index + steps ? siblings[index + steps] : null;\n  }\n\n  findNextSibling(skipHidden = false) {\n    return this._findAdjacentSibling(+1, skipHidden);\n  }\n\n  findPreviousSibling(skipHidden = false) {\n    return this._findAdjacentSibling(-1, skipHidden);\n  }\n\n  getVisibleChildren() {\n    return this.visibleChildren;\n  }\n\n  @computed get visibleChildren() {\n    return (this.children || []).filter((node) => !node.isHidden);\n  }\n\n  getFirstChild(skipHidden = false) {\n    let children = skipHidden ? this.visibleChildren : this.children;\n\n    return children != null && children.length ? children[0] : null;\n  }\n\n  getLastChild(skipHidden = false) {\n    let children = skipHidden ? this.visibleChildren : this.children;\n\n    return children != null && children.length ? children[children.length - 1] : null;\n  }\n\n  findNextNode(goInside = true, skipHidden = false) {\n    return (\n      (goInside && this.isExpanded && this.getFirstChild(skipHidden)) ||\n      this.findNextSibling(skipHidden) ||\n      (this.parent && this.parent.findNextNode(false, skipHidden))\n    );\n  }\n\n  findPreviousNode(skipHidden = false) {\n    let previousSibling = this.findPreviousSibling(skipHidden);\n    if (!previousSibling) {\n      return this.realParent;\n    }\n    return previousSibling._getLastOpenDescendant(skipHidden);\n  }\n\n  _getLastOpenDescendant(skipHidden = false) {\n    const lastChild = this.getLastChild(skipHidden);\n    return this.isCollapsed || !lastChild ? this : lastChild._getLastOpenDescendant(skipHidden);\n  }\n\n  private _getParentsChildren(skipHidden = false): any[] {\n    const children = this.parent && (skipHidden ? this.parent.getVisibleChildren() : this.parent.children);\n\n    return children || [];\n  }\n\n  private getIndexInParent(skipHidden = false) {\n    return this._getParentsChildren(skipHidden).indexOf(this);\n  }\n\n  isDescendantOf(node: TreeNode) {\n    if (this === node) return true;\n    else return this.parent && this.parent.isDescendantOf(node);\n  }\n\n  getNodePadding(): string {\n    return this.options.levelPadding * (this.level - 1) + 'px';\n  }\n\n  getClass(): string {\n    return [this.options.nodeClass(this), `tree-node-level-${this.level}`].join(' ');\n  }\n\n  onDrop($event) {\n    this.mouseAction('drop', $event.event, {\n      from: $event.element,\n      to: { parent: this, index: 0, dropOnNode: true },\n    });\n  }\n\n  allowDrop = (element, $event?) => {\n    return this.options.allowDrop(element, { parent: this, index: 0 }, $event);\n  };\n\n  allowDragoverStyling = () => {\n    return this.options.allowDragoverStyling;\n  };\n\n  allowDrag() {\n    return this.options.allowDrag(this);\n  }\n\n  // helper methods:\n  loadNodeChildren() {\n    if (!this.options.getChildren) {\n      return Promise.resolve(); // Not getChildren method - for using redux\n    }\n    return Promise.resolve(this.options.getChildren(this))\n      .then((children) => {\n        if (children) {\n          this.setField('children', children);\n          this._initChildren();\n          if (this.options.useTriState && this.treeModel.isSelected(this)) {\n            this.setIsSelected(true);\n          }\n          this.children.forEach((child) => {\n            if (child.getField('isExpanded') && child.hasChildren) {\n              child.expand();\n            }\n          });\n        }\n      })\n      .then(() => {\n        this.fireEvent({\n          eventName: TREE_EVENTS.loadNodeChildren,\n          node: this,\n        });\n      });\n  }\n\n  expand() {\n    if (!this.isExpanded) {\n      this.toggleExpanded();\n    }\n\n    return this;\n  }\n\n  collapse() {\n    if (this.isExpanded) {\n      this.toggleExpanded();\n    }\n\n    return this;\n  }\n\n  doForAll(fn: (node: ITreeNode) => any) {\n    Promise.resolve(fn(this)).then(() => {\n      if (this.children) {\n        this.children.forEach((child) => child.doForAll(fn));\n      }\n    });\n  }\n\n  expandAll() {\n    this.doForAll((node) => node.expand());\n  }\n\n  collapseAll() {\n    this.doForAll((node) => node.collapse());\n  }\n\n  ensureVisible() {\n    if (this.realParent) {\n      this.realParent.expand();\n      this.realParent.ensureVisible();\n    }\n\n    return this;\n  }\n\n  toggleExpanded() {\n    this.setIsExpanded(!this.isExpanded);\n\n    return this;\n  }\n\n  setIsExpanded(value) {\n    if (this.hasChildren) {\n      this.treeModel.setExpandedNode(this, value);\n    }\n\n    return this;\n  }\n\n  autoLoadChildren() {\n    this.handler = reaction(\n      () => this.isExpanded,\n      (isExpanded) => {\n        if (!this.children && this.hasChildren && isExpanded) {\n          this.loadNodeChildren();\n        }\n      },\n      { fireImmediately: true },\n    );\n  }\n\n  dispose() {\n    if (this.children) {\n      this.children.forEach((child) => child.dispose());\n    }\n    if (this.handler) {\n      this.handler();\n    }\n    this.parent = null;\n    this.children = null;\n  }\n\n  setIsActive(value, multi = false) {\n    this.treeModel.setActiveNode(this, value, multi);\n    if (value) {\n      this.focus(this.options.scrollOnActivate);\n    }\n\n    return this;\n  }\n\n  isSelectable() {\n    return this.isLeaf || !this.children || !this.options.useTriState;\n  }\n\n  @action setIsSelected(value) {\n    if (this.isSelectable()) {\n      this.treeModel.setSelectedNode(this, value);\n    } else {\n      this.visibleChildren.forEach((child) => child.setIsSelected(value));\n    }\n\n    return this;\n  }\n\n  toggleSelected() {\n    this.setIsSelected(!this.isSelected);\n\n    return this;\n  }\n\n  toggleActivated(multi = false) {\n    this.setIsActive(!this.isActive, multi);\n\n    return this;\n  }\n\n  setActiveAndVisible(multi = false) {\n    this.setIsActive(true, multi).ensureVisible();\n\n    setTimeout(this.scrollIntoView.bind(this));\n\n    return this;\n  }\n\n  scrollIntoView(force = false) {\n    this.treeModel.virtualScroll.scrollIntoView(this, force);\n  }\n\n  focus(scroll = true) {\n    let previousNode = this.treeModel.getFocusedNode();\n    this.treeModel.setFocusedNode(this);\n    if (scroll) {\n      this.scrollIntoView();\n    }\n    if (previousNode) {\n      this.fireEvent({ eventName: TREE_EVENTS.blur, node: previousNode });\n    }\n    this.fireEvent({ eventName: TREE_EVENTS.focus, node: this });\n\n    return this;\n  }\n\n  blur() {\n    let previousNode = this.treeModel.getFocusedNode();\n    this.treeModel.setFocusedNode(null);\n    if (previousNode) {\n      this.fireEvent({ eventName: TREE_EVENTS.blur, node: this });\n    }\n\n    return this;\n  }\n\n  setIsHidden(value) {\n    this.treeModel.setIsHidden(this, value);\n  }\n\n  hide() {\n    this.setIsHidden(true);\n  }\n\n  show() {\n    this.setIsHidden(false);\n  }\n\n  mouseAction(actionName: string, $event, data: any = null) {\n    this.treeModel.setFocus(true);\n\n    const actionMapping = this.options.actionMapping.mouse;\n    const mouseAction = actionMapping[actionName];\n\n    if (mouseAction) {\n      mouseAction(this.treeModel, this, $event, data);\n    }\n  }\n\n  getSelfHeight() {\n    return this.options.nodeHeight(this);\n  }\n\n  @action _initChildren() {\n    this.children = this.getField('children').map((c, index) => new TreeNode(c, this, this.treeModel, index));\n  }\n}\n\nfunction uuid() {\n  return Math.floor(Math.random() * 10000000000000);\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { observable, computed, action, autorun } from 'mobx';\nimport { Subscription } from 'rxjs';\nimport { TreeNode } from './tree-node.model';\nimport { TreeOptions } from './tree-options.model';\nimport { TreeVirtualScroll } from './tree-virtual-scroll.model';\nimport { ITreeModel, IDType, IDTypeDictionary } from '../defs/api';\nimport { TREE_EVENTS } from '../constants/events';\n\n@Injectable()\nexport class TreeModel implements ITreeModel, OnDestroy {\n  static focusedTree = null;\n\n  options: TreeOptions = new TreeOptions();\n  nodes: any[];\n  eventNames = Object.keys(TREE_EVENTS);\n  virtualScroll: TreeVirtualScroll;\n\n  @observable roots: TreeNode[];\n  @observable expandedNodeIds: IDTypeDictionary = {};\n  @observable selectedLeafNodeIds: IDTypeDictionary = {};\n  @observable activeNodeIds: IDTypeDictionary = {};\n  @observable hiddenNodeIds: IDTypeDictionary = {};\n  @observable focusedNodeId: IDType = null;\n  @observable virtualRoot: TreeNode;\n\n  private firstUpdate = true;\n  private events: any;\n  private subscriptions: Subscription[] = [];\n\n  // events\n  fireEvent(event) {\n    event.treeModel = this;\n    this.events[event.eventName].emit(event);\n    this.events.event.emit(event);\n  }\n\n  subscribe(eventName, fn) {\n    const subscription = this.events[eventName].subscribe(fn);\n    this.subscriptions.push(subscription);\n  }\n\n  // getters\n  getFocusedNode(): TreeNode {\n    return this.focusedNode;\n  }\n\n  getActiveNode(): TreeNode {\n    return this.activeNodes[0];\n  }\n\n  getActiveNodes(): TreeNode[] {\n    return this.activeNodes;\n  }\n\n  getVisibleRoots() {\n    return this.virtualRoot.visibleChildren;\n  }\n\n  getFirstRoot(skipHidden = false) {\n    const root = skipHidden ? this.getVisibleRoots() : this.roots;\n    return root != null && root.length ? root[0] : null;\n  }\n\n  getLastRoot(skipHidden = false) {\n    const root = skipHidden ? this.getVisibleRoots() : this.roots;\n    return root != null && root.length ? root[root.length - 1] : null;\n  }\n\n  get isFocused() {\n    return TreeModel.focusedTree === this;\n  }\n\n  isNodeFocused(node) {\n    return this.focusedNode === node;\n  }\n\n  isEmptyTree(): boolean {\n    return this.roots && this.roots.length === 0;\n  }\n\n  @computed get focusedNode() {\n    return this.focusedNodeId ? this.getNodeById(this.focusedNodeId) : null;\n  }\n\n  @computed get expandedNodes() {\n    const nodes = Object.keys(this.expandedNodeIds)\n      .filter((id) => this.expandedNodeIds[id])\n      .map((id) => this.getNodeById(id));\n\n    return nodes.filter(Boolean);\n  }\n\n  @computed get activeNodes() {\n    const nodes = Object.keys(this.activeNodeIds)\n      .filter((id) => this.activeNodeIds[id])\n      .map((id) => this.getNodeById(id));\n\n    return nodes.filter(Boolean);\n  }\n\n  @computed get hiddenNodes() {\n    const nodes = Object.keys(this.hiddenNodeIds)\n      .filter((id) => this.hiddenNodeIds[id])\n      .map((id) => this.getNodeById(id));\n\n    return nodes.filter(Boolean);\n  }\n\n  @computed get selectedLeafNodes() {\n    const nodes = Object.keys(this.selectedLeafNodeIds)\n      .filter((id) => this.selectedLeafNodeIds[id])\n      .map((id) => this.getNodeById(id));\n\n    return nodes.filter(Boolean);\n  }\n\n  // locating nodes\n  getNodeByPath(path: any[], startNode = null): TreeNode {\n    if (!path) return null;\n\n    startNode = startNode || this.virtualRoot;\n    if (path.length === 0) return startNode;\n\n    if (!startNode.children) return null;\n\n    const childId = path.shift();\n    const childNode = startNode.children.find((c) => c.id === childId);\n\n    if (!childNode) return null;\n\n    return this.getNodeByPath(path, childNode);\n  }\n\n  getNodeById(id) {\n    const idStr = id.toString();\n\n    return this.getNodeBy((node) => node.id.toString() === idStr);\n  }\n\n  getNodeBy(predicate, startNode = null) {\n    startNode = startNode || this.virtualRoot;\n\n    if (!startNode.children) return null;\n\n    const found = startNode.children.find(predicate);\n\n    if (found) {\n      // found in children\n      return found;\n    } else {\n      // look in children's children\n      for (let child of startNode.children) {\n        const foundInChildren = this.getNodeBy(predicate, child);\n        if (foundInChildren) return foundInChildren;\n      }\n    }\n  }\n\n  isExpanded(node) {\n    return this.expandedNodeIds[node.id];\n  }\n\n  isHidden(node) {\n    return this.hiddenNodeIds[node.id];\n  }\n\n  isActive(node) {\n    return this.activeNodeIds[node.id];\n  }\n\n  isSelected(node) {\n    return this.selectedLeafNodeIds[node.id];\n  }\n\n  ngOnDestroy() {\n    this.dispose();\n    this.unsubscribeAll();\n  }\n\n  dispose() {\n    // Dispose reactions of the replaced nodes\n    if (this.virtualRoot) {\n      this.virtualRoot.dispose();\n    }\n  }\n\n  unsubscribeAll() {\n    this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n    this.subscriptions = [];\n  }\n\n  // actions\n  @action setData({ nodes, options = null, events = null }: { nodes: any; options: any; events: any }) {\n    if (options) {\n      this.options = new TreeOptions(options);\n    }\n    if (events) {\n      this.events = events;\n    }\n    if (nodes) {\n      this.nodes = nodes;\n    }\n\n    this.update();\n  }\n\n  @action update() {\n    // Rebuild tree:\n    let virtualRootConfig = {\n      id: this.options.rootId,\n      virtual: true,\n      [this.options.childrenField]: this.nodes,\n    };\n\n    this.dispose();\n\n    this.virtualRoot = new TreeNode(virtualRootConfig, null, this, 0);\n\n    this.roots = this.virtualRoot.children;\n\n    // Fire event:\n    if (this.firstUpdate) {\n      if (this.roots) {\n        this.firstUpdate = false;\n        this._calculateExpandedNodes();\n      }\n    } else {\n      this.fireEvent({ eventName: TREE_EVENTS.updateData });\n    }\n  }\n\n  @action setFocusedNode(node) {\n    this.focusedNodeId = node ? node.id : null;\n  }\n\n  @action setFocus(value) {\n    TreeModel.focusedTree = value ? this : null;\n  }\n\n  @action doForAll(fn) {\n    this.roots.forEach((root) => root.doForAll(fn));\n  }\n\n  @action focusNextNode() {\n    let previousNode = this.getFocusedNode();\n    let nextNode = previousNode ? previousNode.findNextNode(true, true) : this.getFirstRoot(true);\n    if (nextNode) nextNode.focus();\n  }\n\n  @action focusPreviousNode() {\n    let previousNode = this.getFocusedNode();\n    let nextNode = previousNode ? previousNode.findPreviousNode(true) : this.getLastRoot(true);\n    if (nextNode) nextNode.focus();\n  }\n\n  @action focusDrillDown() {\n    let previousNode = this.getFocusedNode();\n    if (previousNode && previousNode.isCollapsed && previousNode.hasChildren) {\n      previousNode.toggleExpanded();\n    } else {\n      let nextNode = previousNode ? previousNode.getFirstChild(true) : this.getFirstRoot(true);\n      if (nextNode) nextNode.focus();\n    }\n  }\n\n  @action focusDrillUp() {\n    let previousNode = this.getFocusedNode();\n    if (!previousNode) return;\n    if (previousNode.isExpanded) {\n      previousNode.toggleExpanded();\n    } else {\n      let nextNode = previousNode.realParent;\n      if (nextNode) nextNode.focus();\n    }\n  }\n\n  @action setActiveNode(node, value, multi = false) {\n    if (multi) {\n      this._setActiveNodeMulti(node, value);\n    } else {\n      this._setActiveNodeSingle(node, value);\n    }\n\n    if (value) {\n      node.focus(this.options.scrollOnActivate);\n      this.fireEvent({ eventName: TREE_EVENTS.activate, node });\n      this.fireEvent({ eventName: TREE_EVENTS.nodeActivate, node }); // For IE11\n    } else {\n      this.fireEvent({ eventName: TREE_EVENTS.deactivate, node });\n      this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node }); // For IE11\n    }\n  }\n\n  @action setSelectedNode(node, value) {\n    this.selectedLeafNodeIds = Object.assign({}, this.selectedLeafNodeIds, {\n      [node.id]: value,\n    });\n\n    if (value) {\n      node.focus();\n      this.fireEvent({ eventName: TREE_EVENTS.select, node });\n    } else {\n      this.fireEvent({ eventName: TREE_EVENTS.deselect, node });\n    }\n  }\n\n  @action setExpandedNode(node, value) {\n    this.expandedNodeIds = Object.assign({}, this.expandedNodeIds, {\n      [node.id]: value,\n    });\n    this.fireEvent({\n      eventName: TREE_EVENTS.toggleExpanded,\n      node,\n      isExpanded: value,\n    });\n  }\n\n  @action expandAll() {\n    this.roots.forEach((root) => root.expandAll());\n  }\n\n  @action collapseAll() {\n    this.roots.forEach((root) => root.collapseAll());\n  }\n\n  @action setIsHidden(node, value) {\n    this.hiddenNodeIds = Object.assign({}, this.hiddenNodeIds, {\n      [node.id]: value,\n    });\n  }\n\n  @action setHiddenNodeIds(nodeIds) {\n    this.hiddenNodeIds = nodeIds.reduce(\n      (hiddenNodeIds, id) =>\n        Object.assign(hiddenNodeIds, {\n          [id]: true,\n        }),\n      {},\n    );\n  }\n\n  performKeyAction(node, $event) {\n    const keyAction = this.options.actionMapping.keys[$event.keyCode];\n    if (keyAction) {\n      $event.preventDefault();\n      keyAction(this, node, $event);\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  @action filterNodes(filter, autoShow = true) {\n    let filterFn;\n\n    if (!filter) {\n      return this.clearFilter();\n    }\n\n    // support function and string filter\n    if (filter && typeof filter.valueOf() === 'string') {\n      filterFn = (node) => node.displayField.toLowerCase().indexOf(filter.toLowerCase()) !== -1;\n    } else if (filter && typeof filter === 'function') {\n      filterFn = filter;\n    } else {\n      console.error(\"Don't know what to do with filter\", filter);\n      console.error('Should be either a string or function');\n      return;\n    }\n\n    const ids = {};\n    this.roots.forEach((node) => this._filterNode(ids, node, filterFn, autoShow));\n    this.hiddenNodeIds = ids;\n    this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\n  }\n\n  @action clearFilter() {\n    this.hiddenNodeIds = {};\n    this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\n  }\n\n  @action moveNode(node, to) {\n    const fromIndex = node.getIndexInParent();\n    const fromParent = node.parent;\n\n    if (!this.canMoveNode(node, to, fromIndex)) return;\n\n    const fromChildren = fromParent.getField('children');\n\n    // If node doesn't have children - create children array\n    if (!to.parent.getField('children')) {\n      to.parent.setField('children', []);\n    }\n    const toChildren = to.parent.getField('children');\n\n    const originalNode = fromChildren.splice(fromIndex, 1)[0];\n\n    // Compensate for index if already removed from parent:\n    let toIndex = fromParent === to.parent && to.index > fromIndex ? to.index - 1 : to.index;\n\n    toChildren.splice(toIndex, 0, originalNode);\n\n    fromParent.treeModel.update();\n    if (to.parent.treeModel !== fromParent.treeModel) {\n      to.parent.treeModel.update();\n    }\n\n    this.fireEvent({\n      eventName: TREE_EVENTS.moveNode,\n      node: originalNode,\n      to: { parent: to.parent.data, index: toIndex },\n      from: { parent: fromParent.data, index: fromIndex },\n    });\n  }\n\n  @action copyNode(node, to) {\n    const fromIndex = node.getIndexInParent();\n\n    if (!this.canMoveNode(node, to, fromIndex)) return;\n\n    // If node doesn't have children - create children array\n    if (!to.parent.getField('children')) {\n      to.parent.setField('children', []);\n    }\n    const toChildren = to.parent.getField('children');\n\n    const nodeCopy = this.options.getNodeClone(node);\n\n    toChildren.splice(to.index, 0, nodeCopy);\n\n    node.treeModel.update();\n    if (to.parent.treeModel !== node.treeModel) {\n      to.parent.treeModel.update();\n    }\n\n    this.fireEvent({\n      eventName: TREE_EVENTS.copyNode,\n      node: nodeCopy,\n      to: { parent: to.parent.data, index: to.index },\n    });\n  }\n\n  getState() {\n    return {\n      expandedNodeIds: this.expandedNodeIds,\n      selectedLeafNodeIds: this.selectedLeafNodeIds,\n      activeNodeIds: this.activeNodeIds,\n      hiddenNodeIds: this.hiddenNodeIds,\n      focusedNodeId: this.focusedNodeId,\n    };\n  }\n\n  @action setState(state) {\n    if (!state) return;\n\n    Object.assign(this, {\n      expandedNodeIds: state.expandedNodeIds || {},\n      selectedLeafNodeIds: state.selectedLeafNodeIds || {},\n      activeNodeIds: state.activeNodeIds || {},\n      hiddenNodeIds: state.hiddenNodeIds || {},\n      focusedNodeId: state.focusedNodeId,\n    });\n  }\n\n  subscribeToState(fn) {\n    autorun(() => fn(this.getState()));\n  }\n\n  canMoveNode(node, to, fromIndex = undefined) {\n    const fromNodeIndex = fromIndex || node.getIndexInParent();\n\n    // same node:\n    if (node.parent === to.parent && fromIndex === to.index) {\n      return false;\n    }\n\n    return !to.parent.isDescendantOf(node);\n  }\n\n  calculateExpandedNodes() {\n    this._calculateExpandedNodes();\n  }\n\n  // private methods\n  private _filterNode(ids, node, filterFn, autoShow) {\n    // if node passes function then it's visible\n    let isVisible = filterFn(node);\n\n    if (node.children) {\n      // if one of node's children passes filter then this node is also visible\n      node.children.forEach((child) => {\n        if (this._filterNode(ids, child, filterFn, autoShow)) {\n          isVisible = true;\n        }\n      });\n    }\n\n    // mark node as hidden\n    if (!isVisible) {\n      ids[node.id] = true;\n    }\n    // auto expand parents to make sure the filtered nodes are visible\n    if (autoShow && isVisible) {\n      node.ensureVisible();\n    }\n    return isVisible;\n  }\n\n  private _calculateExpandedNodes(startNode = null) {\n    startNode = startNode || this.virtualRoot;\n\n    if (startNode.data[this.options.isExpandedField]) {\n      this.expandedNodeIds = Object.assign({}, this.expandedNodeIds, {\n        [startNode.id]: true,\n      });\n    }\n    if (startNode.children) {\n      startNode.children.forEach((child) => this._calculateExpandedNodes(child));\n    }\n  }\n\n  private _setActiveNodeSingle(node, value) {\n    // Deactivate all other nodes:\n    this.activeNodes\n      .filter((activeNode) => activeNode !== node)\n      .forEach((activeNode) => {\n        this.fireEvent({ eventName: TREE_EVENTS.deactivate, node: activeNode });\n        this.fireEvent({\n          eventName: TREE_EVENTS.nodeDeactivate,\n          node: activeNode,\n        }); // For IE11\n      });\n\n    if (value) {\n      this.activeNodeIds = { [node.id]: true };\n    } else {\n      this.activeNodeIds = {};\n    }\n  }\n\n  private _setActiveNodeMulti(node, value) {\n    this.activeNodeIds = Object.assign({}, this.activeNodeIds, {\n      [node.id]: value,\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TreeDraggedElement {\n  _draggedElement: any = null;\n\n  set(draggedElement: any) {\n    this._draggedElement = draggedElement;\n  }\n\n  get(): any {\n    return this._draggedElement;\n  }\n\n  isDragging() {\n    return !!this.get();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { observable, computed, action, autorun, reaction } from 'mobx';\nimport { TreeModel } from './tree.model';\nimport { TREE_EVENTS } from '../constants/events';\n\nconst Y_OFFSET = 500; // Extra pixels outside the viewport, in each direction, to render nodes in\nconst Y_EPSILON = 150; // Minimum pixel change required to recalculate the rendered nodes\n\n@Injectable()\nexport class TreeVirtualScroll {\n  private _dispose: any;\n\n  @observable yBlocks = 0;\n  @observable x = 0;\n  @observable viewportHeight = null;\n  viewport = null;\n\n  @computed get y() {\n    return this.yBlocks * Y_EPSILON;\n  }\n\n  @computed get totalHeight() {\n    return this.treeModel.virtualRoot ? this.treeModel.virtualRoot.height : 0;\n  }\n\n  constructor(private treeModel: TreeModel) {\n    treeModel.virtualScroll = this;\n    this._dispose = [autorun(() => this.fixScroll())];\n  }\n\n  fireEvent(event) {\n    this.treeModel.fireEvent(event);\n  }\n\n  init() {\n    const fn = this.recalcPositions.bind(this);\n\n    fn();\n    this._dispose = [\n      ...this._dispose,\n      reaction(() => this.treeModel.roots, fn),\n      reaction(() => this.treeModel.expandedNodeIds, fn),\n      reaction(() => this.treeModel.hiddenNodeIds, fn),\n    ];\n    this.treeModel.subscribe(TREE_EVENTS.loadNodeChildren, fn);\n  }\n\n  isEnabled() {\n    return this.treeModel.options.useVirtualScroll;\n  }\n\n  @action private _setYBlocks(value) {\n    this.yBlocks = value;\n  }\n\n  @action recalcPositions() {\n    this.treeModel.virtualRoot.height = this._getPositionAfter(this.treeModel.getVisibleRoots(), 0);\n  }\n\n  private _getPositionAfter(nodes, startPos) {\n    let position = startPos;\n\n    nodes.forEach((node) => {\n      node.position = position;\n      position = this._getPositionAfterNode(node, position);\n    });\n    return position;\n  }\n\n  private _getPositionAfterNode(node, startPos) {\n    let position = node.getSelfHeight() + startPos;\n\n    if (node.children && node.isExpanded) {\n      // TBD: consider loading component as well\n      position = this._getPositionAfter(node.visibleChildren, position);\n    }\n    node.height = position - startPos;\n    return position;\n  }\n\n  clear() {\n    this._dispose.forEach((d) => d());\n  }\n\n  @action setViewport(viewport) {\n    Object.assign(this, {\n      viewport,\n      x: viewport.scrollLeft,\n      yBlocks: Math.round(viewport.scrollTop / Y_EPSILON),\n      viewportHeight: viewport.getBoundingClientRect ? viewport.getBoundingClientRect().height : 0,\n    });\n  }\n\n  @action scrollIntoView(node, force, scrollToMiddle = true) {\n    if (node.options.scrollContainer) {\n      const scrollContainer = node.options.scrollContainer;\n      const scrollContainerHeight = scrollContainer.getBoundingClientRect().height;\n      const scrollContainerTop = scrollContainer.getBoundingClientRect().top;\n      const nodeTop = this.viewport.getBoundingClientRect().top + node.position - scrollContainerTop;\n\n      if (\n        force || // force scroll to node\n        nodeTop < scrollContainer.scrollTop || // node is above scroll container\n        nodeTop + node.getSelfHeight() > scrollContainer.scrollTop + scrollContainerHeight\n      ) {\n        // node is below container\n        scrollContainer.scrollTop = scrollToMiddle\n          ? nodeTop - scrollContainerHeight / 2 // scroll to middle\n          : nodeTop; // scroll to start\n      }\n    } else {\n      if (\n        force || // force scroll to node\n        node.position < this.y || // node is above viewport\n        node.position + node.getSelfHeight() > this.y + this.viewportHeight\n      ) {\n        // node is below viewport\n        if (this.viewport) {\n          this.viewport.scrollTop = scrollToMiddle\n            ? node.position - this.viewportHeight / 2 // scroll to middle\n            : node.position; // scroll to start\n\n          this._setYBlocks(Math.floor(this.viewport.scrollTop / Y_EPSILON));\n        }\n      }\n    }\n  }\n\n  getViewportNodes(nodes) {\n    if (!nodes) return [];\n\n    const visibleNodes = nodes.filter((node) => !node.isHidden);\n\n    if (!this.isEnabled()) return visibleNodes;\n\n    if (!this.viewportHeight || !visibleNodes.length) return [];\n\n    // When loading children async this method is called before their height and position is calculated.\n    // In that case firstIndex === 0 and lastIndex === visibleNodes.length - 1 (e.g. 1000),\n    // which means that it loops through every visibleNodes item and push them into viewportNodes array.\n    // We can prevent nodes from being pushed to the array and wait for the appropriate calculations to take place\n    const lastVisibleNode = visibleNodes.slice(-1)[0];\n    if (!lastVisibleNode.height && lastVisibleNode.position === 0) return [];\n\n    // Search for first node in the viewport using binary search\n    // Look for first node that starts after the beginning of the viewport (with buffer)\n    // Or that ends after the beginning of the viewport\n    const firstIndex = binarySearch(visibleNodes, (node) => {\n      return node.position + Y_OFFSET > this.y || node.position + node.height > this.y;\n    });\n\n    // Search for last node in the viewport using binary search\n    // Look for first node that starts after the end of the viewport (with buffer)\n    const lastIndex = binarySearch(\n      visibleNodes,\n      (node) => {\n        return node.position - Y_OFFSET > this.y + this.viewportHeight;\n      },\n      firstIndex,\n    );\n\n    const viewportNodes = [];\n\n    for (let i = firstIndex; i <= lastIndex; i++) {\n      viewportNodes.push(visibleNodes[i]);\n    }\n\n    return viewportNodes;\n  }\n\n  fixScroll() {\n    const maxY = Math.max(0, this.totalHeight - this.viewportHeight);\n\n    if (this.y < 0) this._setYBlocks(0);\n    if (this.y > maxY) this._setYBlocks(maxY / Y_EPSILON);\n  }\n}\n\nfunction binarySearch(nodes, condition, firstIndex = 0) {\n  let index = firstIndex;\n  let toIndex = nodes.length - 1;\n\n  while (index !== toIndex) {\n    let midIndex = Math.floor((index + toIndex) / 2);\n\n    if (condition(nodes[midIndex])) {\n      toIndex = midIndex;\n    } else {\n      if (index === midIndex) index = toIndex;\n      else index = midIndex;\n    }\n  }\n  return index;\n}\n","import { Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  selector: 'tree-loading-component',\n  template: `\n    <span *ngIf=\"!template\">loading...</span>\n    <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n  `,\n  standalone: false,\n})\nexport class LoadingComponent {\n  @Input() template: TemplateRef<any>;\n  @Input() node: TreeNode;\n}\n","import {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output,\n  Renderer2,\n} from '@angular/core';\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\n\nconst DRAG_OVER_CLASS = 'is-dragging-over';\nconst DRAG_DISABLED_CLASS = 'is-dragging-over-disabled';\n\n@Directive({\n  selector: '[treeDrop]',\n  standalone: false,\n})\nexport class TreeDropDirective implements AfterViewInit, OnDestroy {\n  @Input() allowDragoverStyling = true;\n  @Output('treeDrop') onDropCallback = new EventEmitter();\n  @Output('treeDropDragOver') onDragOverCallback = new EventEmitter();\n  @Output('treeDropDragLeave') onDragLeaveCallback = new EventEmitter();\n  @Output('treeDropDragEnter') onDragEnterCallback = new EventEmitter();\n  private readonly dragOverEventHandler: (ev: DragEvent) => void;\n  private readonly dragEnterEventHandler: (ev: DragEvent) => void;\n  private readonly dragLeaveEventHandler: (ev: DragEvent) => void;\n\n  private _allowDrop = (element, $event) => true;\n\n  @Input() set treeAllowDrop(allowDrop) {\n    if (allowDrop instanceof Function) {\n      this._allowDrop = allowDrop;\n    } else this._allowDrop = (element, $event) => allowDrop;\n  }\n\n  allowDrop($event) {\n    return this._allowDrop(this.treeDraggedElement.get(), $event);\n  }\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private treeDraggedElement: TreeDraggedElement,\n    private ngZone: NgZone,\n  ) {\n    this.dragOverEventHandler = this.onDragOver.bind(this);\n    this.dragEnterEventHandler = this.onDragEnter.bind(this);\n    this.dragLeaveEventHandler = this.onDragLeave.bind(this);\n  }\n\n  ngAfterViewInit() {\n    let el: HTMLElement = this.el.nativeElement;\n    this.ngZone.runOutsideAngular(() => {\n      el.addEventListener('dragover', this.dragOverEventHandler);\n      el.addEventListener('dragenter', this.dragEnterEventHandler);\n      el.addEventListener('dragleave', this.dragLeaveEventHandler);\n    });\n  }\n\n  ngOnDestroy() {\n    let el: HTMLElement = this.el.nativeElement;\n    el.removeEventListener('dragover', this.dragOverEventHandler);\n    el.removeEventListener('dragenter', this.dragEnterEventHandler);\n    el.removeEventListener('dragleave', this.dragLeaveEventHandler);\n  }\n\n  onDragOver($event) {\n    if (!this.allowDrop($event)) {\n      if (this.allowDragoverStyling) {\n        return this.addDisabledClass();\n      }\n      return;\n    }\n\n    this.onDragOverCallback.emit({\n      event: $event,\n      element: this.treeDraggedElement.get(),\n    });\n\n    $event.preventDefault();\n    if (this.allowDragoverStyling) {\n      this.addClass();\n    }\n  }\n\n  onDragEnter($event) {\n    if (!this.allowDrop($event)) return;\n\n    $event.preventDefault();\n    this.onDragEnterCallback.emit({\n      event: $event,\n      element: this.treeDraggedElement.get(),\n    });\n  }\n\n  onDragLeave($event) {\n    if (!this.allowDrop($event)) {\n      if (this.allowDragoverStyling) {\n        return this.removeDisabledClass();\n      }\n      return;\n    }\n    this.onDragLeaveCallback.emit({\n      event: $event,\n      element: this.treeDraggedElement.get(),\n    });\n\n    if (this.allowDragoverStyling) {\n      this.removeClass();\n    }\n  }\n\n  @HostListener('drop', ['$event']) onDrop($event) {\n    if (!this.allowDrop($event)) return;\n\n    $event.preventDefault();\n    this.onDropCallback.emit({\n      event: $event,\n      element: this.treeDraggedElement.get(),\n    });\n\n    if (this.allowDragoverStyling) {\n      this.removeClass();\n    }\n    this.treeDraggedElement.set(null);\n  }\n\n  private addClass() {\n    this.renderer.addClass(this.el.nativeElement, DRAG_OVER_CLASS);\n  }\n\n  private removeClass() {\n    this.renderer.removeClass(this.el.nativeElement, DRAG_OVER_CLASS);\n  }\n\n  private addDisabledClass() {\n    this.renderer.addClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\n  }\n\n  private removeDisabledClass() {\n    this.renderer.removeClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\n  }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  selector: 'TreeNodeDropSlot, tree-node-drop-slot',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <div\n      class=\"node-drop-slot\"\n      (treeDrop)=\"onDrop($event)\"\n      [treeAllowDrop]=\"allowDrop.bind(this)\"\n      [allowDragoverStyling]=\"true\"\n    ></div>\n  `,\n  standalone: false,\n})\nexport class TreeNodeDropSlot {\n  @Input() node: TreeNode;\n  @Input() dropIndex: number;\n\n  onDrop($event) {\n    this.node.mouseAction('drop', $event.event, {\n      from: $event.element,\n      to: { parent: this.node, index: this.dropIndex },\n    });\n  }\n\n  allowDrop(element, $event) {\n    return this.node.options.allowDrop(element, { parent: this.node, index: this.dropIndex }, $event);\n  }\n}\n","import { action as mobxAction } from 'mobx';\nimport { computed as mobxComputed } from 'mobx';\nimport { observable as mobxObservable } from 'mobx';\n\n// Re-export mobx operators to be able to use inside components with AOT:\nexport function actionInternal(...args) {\n  return (mobxAction as any)(...args);\n}\nexport const action: typeof mobxAction = Object.assign(actionInternal, mobxAction) as any;\n\nfunction computedInternal(...args) {\n  return (mobxComputed as any)(...args);\n}\nexport const computed: typeof mobxComputed = Object.assign(computedInternal, mobxComputed) as any;\n\nfunction observableInternal(...args) {\n  return (mobxObservable as any)(...args);\n}\n\nexport const observable: typeof mobxObservable = Object.assign(observableInternal, mobxObservable) as any;\n","import { Directive, Input, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\n\nconst EASE_ACCELERATION = 1.005;\n\n@Directive({\n  selector: '[treeAnimateOpen]',\n  standalone: false,\n})\nexport class TreeAnimateOpenDirective {\n  private _isOpen: boolean;\n\n  @Input('treeAnimateOpenSpeed') animateSpeed: number;\n  @Input('treeAnimateOpenAcceleration') animateAcceleration: number;\n  @Input('treeAnimateOpenEnabled') isEnabled: boolean;\n\n  @Input('treeAnimateOpen')\n  set isOpen(value: boolean) {\n    if (value) {\n      this._show();\n      if (this.isEnabled && this._isOpen === false) {\n        this._animateOpen();\n      }\n    } else {\n      this.isEnabled ? this._animateClose() : this._hide();\n    }\n    this._isOpen = !!value;\n  }\n\n  private innerElement: any;\n\n  constructor(\n    private renderer: Renderer2,\n    private templateRef: TemplateRef<any>,\n    private viewContainerRef: ViewContainerRef,\n  ) {}\n\n  private _show() {\n    if (this.innerElement) return;\n\n    // create child view\n    this.innerElement = this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0];\n  }\n\n  private _hide() {\n    this.viewContainerRef.clear();\n    this.innerElement = null;\n  }\n\n  private _animateOpen() {\n    let delta = this.animateSpeed;\n    let ease = this.animateAcceleration;\n    let maxHeight = 0;\n\n    // set height to 0\n    this.renderer.setStyle(this.innerElement, 'max-height', `0`);\n\n    // increase maxHeight until height doesn't change\n    setTimeout(() => {\n      // Allow inner element to create its content\n      const i = setInterval(() => {\n        if (!this._isOpen || !this.innerElement) return clearInterval(i);\n\n        maxHeight += delta;\n        const roundedMaxHeight = Math.round(maxHeight);\n\n        this.renderer.setStyle(this.innerElement, 'max-height', `${roundedMaxHeight}px`);\n        const height = this.innerElement.getBoundingClientRect ? this.innerElement.getBoundingClientRect().height : 0; // TBD use renderer\n\n        delta *= ease;\n        ease *= EASE_ACCELERATION;\n        if (height < roundedMaxHeight) {\n          // Make maxHeight auto because animation finished and container might change height later on\n          this.renderer.setStyle(this.innerElement, 'max-height', null);\n          clearInterval(i);\n        }\n      }, 17);\n    });\n  }\n\n  private _animateClose() {\n    if (!this.innerElement) return;\n\n    let delta = this.animateSpeed;\n    let ease = this.animateAcceleration;\n    let height = this.innerElement.getBoundingClientRect().height; // TBD use renderer\n\n    // slowly decrease maxHeight to 0, starting from current height\n    const i = setInterval(() => {\n      if (this._isOpen || !this.innerElement) return clearInterval(i);\n\n      height -= delta;\n      this.renderer.setStyle(this.innerElement, 'max-height', `${height}px`);\n      delta *= ease;\n      ease *= EASE_ACCELERATION;\n\n      if (height <= 0) {\n        // after animation complete - remove child element\n        this.viewContainerRef.clear();\n        this.innerElement = null;\n        clearInterval(i);\n      }\n    }, 17);\n  }\n}\n","import { Component, Input, ViewEncapsulation, TemplateRef } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  selector: 'tree-node-content',\n  encapsulation: ViewEncapsulation.None,\n  template: ` <span *ngIf=\"!template\">{{ node.displayField }}</span>\n    <ng-container\n      [ngTemplateOutlet]=\"template\"\n      [ngTemplateOutletContext]=\"{ $implicit: node, node: node, index: index }\"\n    >\n    </ng-container>`,\n  standalone: false,\n})\nexport class TreeNodeContent {\n  @Input() node: TreeNode;\n  @Input() index: number;\n  @Input() template: TemplateRef<any>;\n}\n","import {\n  AfterViewInit,\n  Directive,\n  DoCheck,\n  ElementRef,\n  HostListener,\n  Input,\n  NgZone,\n  OnDestroy,\n  Renderer2,\n} from '@angular/core';\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\n\nconst DRAG_OVER_CLASS = 'is-dragging-over';\n\n@Directive({\n  selector: '[treeDrag]',\n  standalone: false,\n})\nexport class TreeDragDirective implements AfterViewInit, DoCheck, OnDestroy {\n  @Input('treeDrag') draggedElement;\n  @Input() treeDragEnabled;\n  private readonly dragEventHandler: (ev: DragEvent) => void;\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private treeDraggedElement: TreeDraggedElement,\n    private ngZone: NgZone,\n  ) {\n    this.dragEventHandler = this.onDrag.bind(this);\n  }\n\n  ngAfterViewInit() {\n    let el: HTMLElement = this.el.nativeElement;\n    this.ngZone.runOutsideAngular(() => {\n      el.addEventListener('drag', this.dragEventHandler);\n    });\n  }\n\n  ngDoCheck() {\n    this.renderer.setAttribute(this.el.nativeElement, 'draggable', this.treeDragEnabled ? 'true' : 'false');\n  }\n\n  ngOnDestroy() {\n    let el: HTMLElement = this.el.nativeElement;\n    el.removeEventListener('drag', this.dragEventHandler);\n  }\n\n  @HostListener('dragstart', ['$event']) onDragStart(ev) {\n    // setting the data is required by firefox\n    ev.dataTransfer.setData('text', ev.target.id);\n    this.treeDraggedElement.set(this.draggedElement);\n    if (this.draggedElement.mouseAction) {\n      this.draggedElement.mouseAction('dragStart', ev);\n    }\n  }\n\n  onDrag(ev) {\n    if (this.draggedElement.mouseAction) {\n      this.draggedElement.mouseAction('drag', ev);\n    }\n  }\n\n  @HostListener('dragend') onDragEnd() {\n    if (this.draggedElement.mouseAction) {\n      this.draggedElement.mouseAction('dragEnd');\n    }\n    this.treeDraggedElement.set(null);\n  }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  selector: 'tree-node-expander',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <span\n        *ngIf=\"node.hasChildren\"\n        [class.toggle-children-wrapper-expanded]=\"node.isExpanded\"\n        [class.toggle-children-wrapper-collapsed]=\"node.isCollapsed\"\n        class=\"toggle-children-wrapper\"\n        (click)=\"node.mouseAction('expanderClick', $event)\"\n      >\n        <span class=\"toggle-children\"></span>\n      </span>\n      <span *ngIf=\"!node.hasChildren\" class=\"toggle-children-placeholder\"> </span>\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeExpanderComponent {\n  @Input() node: TreeNode;\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  selector: 'tree-node-checkbox',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <input\n        class=\"tree-node-checkbox\"\n        type=\"checkbox\"\n        (click)=\"node.mouseAction('checkboxClick', $event)\"\n        [checked]=\"node.isSelected\"\n        [indeterminate]=\"node.isPartiallySelected\"\n      />\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeCheckboxComponent {\n  @Input() node: TreeNode;\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TreeNode } from '../models/tree-node.model';\n\n@Component({\n  selector: 'tree-node-wrapper',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <div *ngIf=\"!templates.treeNodeWrapperTemplate\" class=\"node-wrapper\" [style.padding-left]=\"node.getNodePadding()\">\n      <tree-node-checkbox *ngIf=\"node.options.useCheckbox\" [node]=\"node\"></tree-node-checkbox>\n      <tree-node-expander [node]=\"node\"></tree-node-expander>\n      <div\n        class=\"node-content-wrapper\"\n        [class.node-content-wrapper-active]=\"node.isActive\"\n        [class.node-content-wrapper-focused]=\"node.isFocused\"\n        (click)=\"node.mouseAction('click', $event)\"\n        (dblclick)=\"node.mouseAction('dblClick', $event)\"\n        (mouseover)=\"node.mouseAction('mouseOver', $event)\"\n        (mouseout)=\"node.mouseAction('mouseOut', $event)\"\n        (contextmenu)=\"node.mouseAction('contextMenu', $event)\"\n        (treeDrop)=\"node.onDrop($event)\"\n        (treeDropDragOver)=\"node.mouseAction('dragOver', $event)\"\n        (treeDropDragLeave)=\"node.mouseAction('dragLeave', $event)\"\n        (treeDropDragEnter)=\"node.mouseAction('dragEnter', $event)\"\n        [treeAllowDrop]=\"node.allowDrop\"\n        [allowDragoverStyling]=\"node.allowDragoverStyling()\"\n        [treeDrag]=\"node\"\n        [treeDragEnabled]=\"node.allowDrag()\"\n      >\n        <tree-node-content [node]=\"node\" [index]=\"index\" [template]=\"templates.treeNodeTemplate\"> </tree-node-content>\n      </div>\n    </div>\n    <ng-container\n      [ngTemplateOutlet]=\"templates.treeNodeWrapperTemplate\"\n      [ngTemplateOutletContext]=\"{\n        $implicit: node,\n        node: node,\n        index: index,\n        templates: templates,\n      }\"\n    >\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeWrapperComponent {\n  @Input() node: TreeNode;\n  @Input() index: number;\n  @Input() templates: any;\n}\n","import { Component, Input, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core';\nimport { reaction } from 'mobx';\nimport { observable, computed, action } from '../mobx-angular/mobx-proxy';\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\nimport { TreeNode } from '../models/tree-node.model';\nimport { TreeModel } from '../models/tree.model';\n\n@Component({\n  selector: 'tree-node-children',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <div\n        [class.tree-children]=\"true\"\n        [class.tree-children-no-padding]=\"node.options.levelPadding\"\n        *treeAnimateOpen=\"\n          node.isExpanded;\n          speed: node.options.animateSpeed;\n          acceleration: node.options.animateAcceleration;\n          enabled: node.options.animateExpand\n        \"\n      >\n        <tree-node-collection\n          *ngIf=\"node.children\"\n          [nodes]=\"node.children\"\n          [templates]=\"templates\"\n          [treeModel]=\"node.treeModel\"\n        >\n        </tree-node-collection>\n        <tree-loading-component\n          [style.padding-left]=\"node.getNodePadding()\"\n          class=\"tree-node-loading\"\n          *ngIf=\"!node.children\"\n          [template]=\"templates.loadingTemplate\"\n          [node]=\"node\"\n        ></tree-loading-component>\n      </div>\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeChildrenComponent {\n  @Input() node: TreeNode;\n  @Input() templates: any;\n}\n\n@Component({\n  selector: 'tree-node-collection',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <div [style.margin-top]=\"marginTop\">\n        <tree-node\n          *ngFor=\"let node of viewportNodes; let i = index; trackBy: trackNode\"\n          [node]=\"node\"\n          [index]=\"i\"\n          [templates]=\"templates\"\n        >\n        </tree-node>\n      </div>\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeCollectionComponent implements OnInit, OnDestroy {\n  @Input()\n  get nodes() {\n    return this._nodes;\n  }\n  set nodes(nodes) {\n    this.setNodes(nodes);\n  }\n\n  @Input() treeModel: TreeModel;\n\n  @observable _nodes;\n  private virtualScroll: TreeVirtualScroll; // Cannot inject this, because we might be inside treeNodeTemplateFull\n  @Input() templates;\n\n  @observable viewportNodes: TreeNode[];\n\n  @computed get marginTop(): string {\n    const firstNode = this.viewportNodes && this.viewportNodes.length && this.viewportNodes[0];\n    const relativePosition =\n      firstNode && firstNode.parent\n        ? firstNode.position - firstNode.parent.position - firstNode.parent.getSelfHeight()\n        : 0;\n\n    return `${relativePosition}px`;\n  }\n\n  _dispose = [];\n\n  @action setNodes(nodes) {\n    this._nodes = nodes;\n  }\n\n  ngOnInit() {\n    this.virtualScroll = this.treeModel.virtualScroll;\n    this._dispose = [\n      // return node indexes so we can compare structurally,\n      reaction(\n        () => {\n          return this.virtualScroll.getViewportNodes(this.nodes).map((n) => n.index);\n        },\n        (nodeIndexes) => {\n          this.viewportNodes = nodeIndexes.map((i) => this.nodes[i]);\n        },\n        { compareStructural: true, fireImmediately: true } as any,\n      ),\n      reaction(\n        () => this.nodes,\n        (nodes) => {\n          this.viewportNodes = this.virtualScroll.getViewportNodes(nodes);\n        },\n      ),\n    ];\n  }\n\n  ngOnDestroy() {\n    this._dispose.forEach((d) => d());\n  }\n\n  trackNode(index, node) {\n    return node.id;\n  }\n}\n\n@Component({\n  selector: 'TreeNode, tree-node',\n  encapsulation: ViewEncapsulation.None,\n  styles: [],\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <div\n        *ngIf=\"!templates.treeNodeFullTemplate\"\n        [class]=\"node.getClass()\"\n        [class.tree-node]=\"true\"\n        [class.tree-node-expanded]=\"node.isExpanded && node.hasChildren\"\n        [class.tree-node-collapsed]=\"node.isCollapsed && node.hasChildren\"\n        [class.tree-node-leaf]=\"node.isLeaf\"\n        [class.tree-node-active]=\"node.isActive\"\n        [class.tree-node-focused]=\"node.isFocused\"\n      >\n        <tree-node-drop-slot *ngIf=\"index === 0\" [dropIndex]=\"node.index\" [node]=\"node.parent\"></tree-node-drop-slot>\n\n        <tree-node-wrapper [node]=\"node\" [index]=\"index\" [templates]=\"templates\"></tree-node-wrapper>\n\n        <tree-node-children [node]=\"node\" [templates]=\"templates\"></tree-node-children>\n        <tree-node-drop-slot [dropIndex]=\"node.index + 1\" [node]=\"node.parent\"></tree-node-drop-slot>\n      </div>\n      <ng-container\n        [ngTemplateOutlet]=\"templates.treeNodeFullTemplate\"\n        [ngTemplateOutletContext]=\"{\n          $implicit: node,\n          node: node,\n          index: index,\n          templates: templates,\n        }\"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeNodeComponent {\n  @Input() node: TreeNode;\n  @Input() index: number;\n  @Input() templates: any;\n}\n","import { Component, ElementRef, AfterViewInit, OnInit, OnDestroy } from '@angular/core';\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\nimport { TREE_EVENTS } from '../constants/events';\n\n@Component({\n  selector: 'tree-viewport',\n  styles: [],\n  providers: [TreeVirtualScroll],\n  template: `\n    <ng-container *treeMobxAutorun=\"{ dontDetach: true }\">\n      <div [style.height]=\"getTotalHeight()\">\n        <ng-content></ng-content>\n      </div>\n    </ng-container>\n  `,\n  standalone: false,\n})\nexport class TreeViewportComponent implements AfterViewInit, OnInit, OnDestroy {\n  setViewport = this.throttle(() => {\n    this.virtualScroll.setViewport(this.elementRef.nativeElement);\n  }, 17);\n\n  private readonly scrollEventHandler: ($event: Event) => void;\n\n  constructor(\n    private elementRef: ElementRef,\n    public virtualScroll: TreeVirtualScroll,\n  ) {\n    this.scrollEventHandler = this.setViewport.bind(this);\n  }\n\n  ngOnInit() {\n    this.virtualScroll.init();\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      this.setViewport();\n      this.virtualScroll.fireEvent({ eventName: TREE_EVENTS.initialized });\n    });\n    let el: HTMLElement = this.elementRef.nativeElement;\n    el.addEventListener('scroll', this.scrollEventHandler);\n  }\n\n  ngOnDestroy() {\n    this.virtualScroll.clear();\n    let el: HTMLElement = this.elementRef.nativeElement;\n    el.removeEventListener('scroll', this.scrollEventHandler);\n  }\n\n  getTotalHeight() {\n    return (this.virtualScroll.isEnabled() && this.virtualScroll.totalHeight + 'px') || 'auto';\n  }\n\n  private throttle(func, timeFrame) {\n    let lastTime = 0;\n    return function () {\n      let now = Date.now();\n      if (now - lastTime >= timeFrame) {\n        func();\n        lastTime = now;\n      }\n    };\n  }\n}\n","import {\n  Component,\n  ContentChild,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { TreeModel } from '../models/tree.model';\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\nimport { TreeOptions } from '../models/tree-options.model';\nimport { ITreeOptions } from '../defs/api';\nimport { TreeViewportComponent } from './tree-viewport.component';\n\n@Component({\n  selector: 'Tree, tree-root',\n  providers: [TreeModel],\n  styles: [],\n  template: `\n    <tree-viewport #viewport>\n      <div\n        class=\"angular-tree-component\"\n        [class.node-dragging]=\"treeDraggedElement.isDragging()\"\n        [class.angular-tree-component-rtl]=\"treeModel.options.rtl\"\n      >\n        <tree-node-collection\n          *ngIf=\"treeModel.roots\"\n          [nodes]=\"treeModel.roots\"\n          [treeModel]=\"treeModel\"\n          [templates]=\"{\n            loadingTemplate: loadingTemplate,\n            treeNodeTemplate: treeNodeTemplate,\n            treeNodeWrapperTemplate: treeNodeWrapperTemplate,\n            treeNodeFullTemplate: treeNodeFullTemplate,\n          }\"\n        >\n        </tree-node-collection>\n        <tree-node-drop-slot\n          class=\"empty-tree-drop-slot\"\n          *ngIf=\"treeModel.isEmptyTree()\"\n          [dropIndex]=\"0\"\n          [node]=\"treeModel.virtualRoot\"\n        >\n        </tree-node-drop-slot>\n      </div>\n    </tree-viewport>\n  `,\n  standalone: false,\n})\nexport class TreeComponent implements OnChanges {\n  _nodes: any[];\n  _options: TreeOptions;\n\n  @ContentChild('loadingTemplate', { static: false })\n  loadingTemplate: TemplateRef<any>;\n  @ContentChild('treeNodeTemplate', { static: false })\n  treeNodeTemplate: TemplateRef<any>;\n  @ContentChild('treeNodeWrapperTemplate', { static: false })\n  treeNodeWrapperTemplate: TemplateRef<any>;\n  @ContentChild('treeNodeFullTemplate', { static: false })\n  treeNodeFullTemplate: TemplateRef<any>;\n  @ViewChild('viewport', { static: false })\n  viewportComponent: TreeViewportComponent;\n\n  // Will be handled in ngOnChanges\n  @Input() set nodes(nodes: any[]) {}\n\n  @Input() set options(options: ITreeOptions) {}\n\n  @Input() set focused(value: boolean) {\n    this.treeModel.setFocus(value);\n  }\n\n  @Input() set state(state) {\n    this.treeModel.setState(state);\n  }\n\n  @Output() toggleExpanded;\n  @Output() activate;\n  @Output() deactivate;\n  @Output() nodeActivate;\n  @Output() nodeDeactivate;\n  @Output() select;\n  @Output() deselect;\n  @Output() focus;\n  @Output() blur;\n  @Output() updateData;\n  @Output() initialized;\n  @Output() moveNode;\n  @Output() copyNode;\n  @Output() loadNodeChildren;\n  @Output() changeFilter;\n  @Output() event;\n  @Output() stateChange;\n\n  constructor(\n    public treeModel: TreeModel,\n    public treeDraggedElement: TreeDraggedElement,\n  ) {\n    treeModel.eventNames.forEach((name) => (this[name] = new EventEmitter()));\n    treeModel.subscribeToState((state) => this.stateChange.emit(state));\n  }\n\n  @HostListener('body: keydown', ['$event'])\n  onKeydown($event) {\n    if (!this.treeModel.isFocused) return;\n    if (['input', 'textarea'].includes(document.activeElement.tagName.toLowerCase())) return;\n\n    const focusedNode = this.treeModel.getFocusedNode();\n\n    this.treeModel.performKeyAction(focusedNode, $event);\n  }\n\n  @HostListener('body: mousedown', ['$event'])\n  onMousedown($event) {\n    function isOutsideClick(startElement: Element, nodeName: string) {\n      return !startElement\n        ? true\n        : startElement.localName === nodeName\n          ? false\n          : isOutsideClick(startElement.parentElement, nodeName);\n    }\n\n    if (isOutsideClick($event.target, 'tree-root')) {\n      this.treeModel.setFocus(false);\n    }\n  }\n\n  ngOnChanges(changes) {\n    if (changes.options || changes.nodes) {\n      this.treeModel.setData({\n        options: changes.options && changes.options.currentValue,\n        nodes: changes.nodes && changes.nodes.currentValue,\n        events: this.pick(this, this.treeModel.eventNames),\n      });\n    }\n  }\n\n  sizeChanged() {\n    this.viewportComponent.setViewport();\n  }\n\n  private pick(object, keys) {\n    return keys.reduce((obj, key) => {\n      if (object && object.hasOwnProperty(key)) {\n        obj[key] = object[key];\n      }\n      return obj;\n    }, {});\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeMobxAutorunDirective } from './mobx-angular/tree-mobx-autorun.directive';\n\nimport { IActionHandler, IActionMapping, TREE_ACTIONS } from './models/tree-options.model';\nimport { IAllowDragFn, IAllowDropFn, ITreeOptions, ITreeState } from './defs/api';\nimport { KEYS } from './constants/keys';\nimport { TreeModel } from './models/tree.model';\nimport { TreeNode } from './models/tree-node.model';\nimport { TreeDraggedElement } from './models/tree-dragged-element.model';\nimport { TreeVirtualScroll } from './models/tree-virtual-scroll.model';\nimport { LoadingComponent } from './components/loading.component';\nimport { TreeComponent } from './components/tree.component';\nimport { TreeNodeComponent } from './components/tree-node-collection.component';\nimport { TreeNodeContent } from './components/tree-node-content.component';\nimport { TreeNodeDropSlot } from './components/tree-node-drop-slot.component';\nimport { TreeNodeExpanderComponent } from './components/tree-node-expander.component';\nimport { TreeNodeChildrenComponent } from './components/tree-node-collection.component';\nimport { TreeNodeCollectionComponent } from './components/tree-node-collection.component';\nimport { TreeNodeWrapperComponent } from './components/tree-node-wrapper.component';\nimport { TreeViewportComponent } from './components/tree-viewport.component';\nimport { TreeNodeCheckboxComponent } from './components/tree-node-checkbox.component';\nimport { TreeDropDirective } from './directives/tree-drop.directive';\nimport { TreeDragDirective } from './directives/tree-drag.directive';\nimport { TreeAnimateOpenDirective } from './directives/tree-animate-open.directive';\n\n@NgModule({\n  declarations: [\n    TreeComponent,\n    TreeNodeComponent,\n    TreeNodeContent,\n    LoadingComponent,\n    TreeDropDirective,\n    TreeDragDirective,\n    TreeNodeExpanderComponent,\n    TreeNodeChildrenComponent,\n    TreeNodeDropSlot,\n    TreeNodeCollectionComponent,\n    TreeViewportComponent,\n    TreeNodeWrapperComponent,\n    TreeNodeCheckboxComponent,\n    TreeAnimateOpenDirective,\n    TreeMobxAutorunDirective,\n  ],\n  exports: [\n    TreeComponent,\n    TreeNodeComponent,\n    TreeNodeContent,\n    LoadingComponent,\n    TreeDropDirective,\n    TreeDragDirective,\n    TreeNodeExpanderComponent,\n    TreeNodeChildrenComponent,\n    TreeNodeDropSlot,\n    TreeNodeCollectionComponent,\n    TreeViewportComponent,\n    TreeNodeWrapperComponent,\n    TreeNodeCheckboxComponent,\n    TreeAnimateOpenDirective,\n    TreeMobxAutorunDirective,\n  ],\n  imports: [CommonModule],\n  providers: [],\n})\nexport class TreeModule {}\n\nexport {\n  TreeModel,\n  TreeNode,\n  TreeDraggedElement,\n  TreeVirtualScroll,\n  ITreeOptions,\n  TREE_ACTIONS,\n  KEYS,\n  IActionMapping,\n  IActionHandler,\n  IAllowDropFn,\n  IAllowDragFn,\n  LoadingComponent,\n  TreeAnimateOpenDirective,\n  TreeComponent,\n  TreeNodeComponent,\n  TreeNodeWrapperComponent,\n  TreeNodeContent,\n  TreeDropDirective,\n  TreeDragDirective,\n  TreeNodeExpanderComponent,\n  TreeNodeChildrenComponent,\n  TreeNodeDropSlot,\n  TreeNodeCollectionComponent,\n  TreeViewportComponent,\n  TreeNodeCheckboxComponent,\n  ITreeState,\n  TreeMobxAutorunDirective,\n};\n","/*\n * Public API Surface of angular-tree-component\n */\n\nexport * from './lib/angular-tree-component.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["__decorate","computed","observable","action","i1.TreeModel","DRAG_OVER_CLASS","i1.TreeDraggedElement","i1.TreeDropDirective","mobxAction","mobxComputed","mobxObservable","i2.TreeMobxAutorunDirective","i1.TreeMobxAutorunDirective","i2.TreeNodeContent","i3.TreeDropDirective","i4.TreeDragDirective","i5.TreeNodeExpanderComponent","i6.TreeNodeCheckboxComponent","i2.LoadingComponent","i3.TreeAnimateOpenDirective","i4.TreeMobxAutorunDirective","i5.TreeNodeDropSlot","i6.TreeNodeWrapperComponent","i1.TreeVirtualScroll","i2.TreeDraggedElement","i3","i4.TreeNodeDropSlot","i5.TreeNodeCollectionComponent","i6.TreeViewportComponent"],"mappings":"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"}