{"version":3,"file":"ng2-tree.mjs","sources":["../../../src/tree.events.ts","../../../src/draggable/draggable.events.ts","../../../src/draggable/node-draggable.service.ts","../../../src/utils/fn.utils.ts","../../../src/tree.service.ts","../../../src/rxjs-imports.ts","../../../src/tree.types.ts","../../../src/tree.ts","../../../src/menu/menu.events.ts","../../../src/utils/event.utils.ts","../../../src/tree-controller.ts","../../../src/editable/editable.events.ts","../../../src/menu/node-menu.service.ts","../../../src/draggable/captured-node.ts","../../../src/draggable/node-draggable.directive.ts","../../../src/editable/node-editable.directive.ts","../../../src/menu/node-menu.component.ts","../../../src/utils/safe-html.pipe.ts","../../../src/tree-internal.component.ts","../../../src/tree.component.ts","../../../src/tree.module.ts","../../../src/ng2-tree.ts"],"sourcesContent":["import { Tree } from './tree';\nimport { RenamableNode } from './tree.types';\n\nexport class NodeEvent {\n  public constructor(public node: Tree) {}\n}\n\nexport class NodeSelectedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeUnselectedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeDestructiveEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeMovedEvent extends NodeDestructiveEvent {\n  public constructor(node: Tree, public previousParent: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeRemovedEvent extends NodeDestructiveEvent {\n  public constructor(node: Tree, public lastIndex: number) {\n    super(node);\n  }\n}\n\nexport class NodeCreatedEvent extends NodeDestructiveEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeRenamedEvent extends NodeDestructiveEvent {\n  public constructor(node: Tree, public oldValue: string | RenamableNode, public newValue: string | RenamableNode) {\n    super(node);\n  }\n}\n\nexport class NodeExpandedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeCollapsedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class MenuItemSelectedEvent extends NodeEvent {\n  public constructor(node: Tree, public selectedItem: string) {\n    super(node);\n  }\n}\n\nexport class LoadNextLevelEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeCheckedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeUncheckedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n\nexport class NodeIndeterminedEvent extends NodeEvent {\n  public constructor(node: Tree) {\n    super(node);\n  }\n}\n","import { ElementRef } from '@angular/core';\nimport { CapturedNode } from './captured-node';\n\nexport class NodeDraggableEvent {\n  public constructor(public captured: CapturedNode, public target: ElementRef) {}\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CapturedNode } from './captured-node';\nimport { NodeDraggableEvent } from './draggable.events';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class NodeDraggableService {\n  public draggableNodeEvents$: Subject<NodeDraggableEvent> = new Subject<NodeDraggableEvent>();\n\n  private capturedNode: CapturedNode;\n\n  public fireNodeDragged(captured: CapturedNode, target: ElementRef): void {\n    if (!captured.tree || captured.tree.isStatic()) {\n      return;\n    }\n\n    this.draggableNodeEvents$.next(new NodeDraggableEvent(captured, target));\n  }\n\n  public captureNode(node: CapturedNode): void {\n    this.capturedNode = node;\n  }\n\n  public getCapturedNode(): CapturedNode {\n    return this.capturedNode;\n  }\n\n  public releaseCapturedNode(): void {\n    this.capturedNode = null;\n  }\n}\n","export function isEmpty(value: any[] | string): boolean {\n  if (typeof value === 'string') {\n    return !/\\S/.test(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value.length === 0;\n  }\n\n  return isNil(value);\n}\n\nexport function trim(value: string): string {\n  return isNil(value) ? '' : value.trim();\n}\n\nexport function has(value: any, prop: string): boolean {\n  return value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, prop);\n}\n\nexport function isFunction(value: any) {\n  return typeof value === 'function';\n}\n\nexport function get(value: any, path: string, defaultValue?: any) {\n  let result = value;\n\n  for (const prop of path.split('.')) {\n    if (!result || !Reflect.has(result, prop)) {\n      return defaultValue;\n    }\n\n    result = result[prop];\n  }\n\n  return isNil(result) || result === value ? defaultValue : result;\n}\n\nexport function omit(value: any, propsToSkip: string | string[]): any {\n  if (!value) {\n    return value;\n  }\n\n  const normalizedPropsToSkip = typeof propsToSkip === 'string' ? [propsToSkip] : propsToSkip;\n\n  return Object.keys(value).reduce((result, prop) => {\n    if (includes(normalizedPropsToSkip, prop)) {\n      return result;\n    }\n    return Object.assign(result, { [prop]: value[prop] });\n  }, {});\n}\n\nexport function size(value: any[]): number {\n  return isEmpty(value) ? 0 : value.length;\n}\n\nexport function once(fn: Once): Once {\n  let result;\n\n  return (...args: any[]) => {\n    if (fn) {\n      result = fn(...args);\n      fn = null;\n    }\n    return result;\n  };\n}\n\nexport function defaultsDeep(target: any, ...sources: any[]): any {\n  return [target].concat(sources).reduce((result: any, source: any) => {\n    if (!source) {\n      return result;\n    }\n\n    Object.keys(source).forEach(prop => {\n      if (isNil(result[prop])) {\n        result[prop] = source[prop];\n        return;\n      }\n\n      if (typeof result[prop] === 'object' && !Array.isArray(result[prop])) {\n        result[prop] = defaultsDeep(result[prop], source[prop]);\n        return;\n      }\n    });\n\n    return result;\n  }, {});\n}\n\nexport function includes(target: string | any[], value: any): boolean {\n  if (isNil(target)) {\n    return false;\n  }\n\n  const index = typeof target === 'string' ? target.indexOf(value as string) : target.indexOf(value);\n  return index > -1;\n}\n\nexport function isNil(value: any): boolean {\n  return value === undefined || value === null;\n}\n\nexport type Once = (...args: any[]) => any;\n","import {\n  LoadNextLevelEvent,\n  MenuItemSelectedEvent,\n  NodeCheckedEvent,\n  NodeCollapsedEvent,\n  NodeCreatedEvent,\n  NodeExpandedEvent,\n  NodeIndeterminedEvent,\n  NodeMovedEvent,\n  NodeRemovedEvent,\n  NodeRenamedEvent,\n  NodeSelectedEvent,\n  NodeUncheckedEvent,\n  NodeUnselectedEvent\n} from './tree.events';\nimport { RenamableNode } from './tree.types';\nimport { Tree } from './tree';\nimport { TreeController } from './tree-controller';\nimport { ElementRef, Inject, Injectable } from '@angular/core';\nimport { NodeDraggableService } from './draggable/node-draggable.service';\nimport { NodeDraggableEvent } from './draggable/draggable.events';\nimport { isEmpty } from './utils/fn.utils';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\nexport class TreeService {\n  public nodeMoved$: Subject<NodeMovedEvent> = new Subject<NodeMovedEvent>();\n  public nodeRemoved$: Subject<NodeRemovedEvent> = new Subject<NodeRemovedEvent>();\n  public nodeRenamed$: Subject<NodeRenamedEvent> = new Subject<NodeRenamedEvent>();\n  public nodeCreated$: Subject<NodeCreatedEvent> = new Subject<NodeCreatedEvent>();\n  public nodeSelected$: Subject<NodeSelectedEvent> = new Subject<NodeSelectedEvent>();\n  public nodeUnselected$: Subject<NodeUnselectedEvent> = new Subject<NodeUnselectedEvent>();\n  public nodeExpanded$: Subject<NodeExpandedEvent> = new Subject<NodeExpandedEvent>();\n  public nodeCollapsed$: Subject<NodeCollapsedEvent> = new Subject<NodeCollapsedEvent>();\n  public menuItemSelected$: Subject<MenuItemSelectedEvent> = new Subject<MenuItemSelectedEvent>();\n  public loadNextLevel$: Subject<LoadNextLevelEvent> = new Subject<LoadNextLevelEvent>();\n  public nodeChecked$: Subject<NodeCheckedEvent> = new Subject<NodeCheckedEvent>();\n  public nodeUnchecked$: Subject<NodeUncheckedEvent> = new Subject<NodeUncheckedEvent>();\n  public nodeIndetermined$: Subject<NodeIndeterminedEvent> = new Subject<NodeIndeterminedEvent>();\n\n  private controllers: Map<string | number, TreeController> = new Map();\n\n  public constructor(@Inject(NodeDraggableService) private nodeDraggableService: NodeDraggableService) {\n    this.nodeRemoved$.subscribe((e: NodeRemovedEvent) => e.node.removeItselfFromParent());\n  }\n\n  public unselectStream(tree: Tree): Observable<NodeSelectedEvent> {\n    return this.nodeSelected$.pipe(filter((e: NodeSelectedEvent) => tree !== e.node));\n  }\n\n  public fireNodeRemoved(tree: Tree): void {\n    this.nodeRemoved$.next(new NodeRemovedEvent(tree, tree.positionInParent));\n  }\n\n  public fireNodeCreated(tree: Tree): void {\n    this.nodeCreated$.next(new NodeCreatedEvent(tree));\n  }\n\n  public fireNodeSelected(tree: Tree): void {\n    this.nodeSelected$.next(new NodeSelectedEvent(tree));\n  }\n\n  public fireNodeUnselected(tree: Tree): void {\n    this.nodeUnselected$.next(new NodeUnselectedEvent(tree));\n  }\n\n  public fireNodeRenamed(oldValue: RenamableNode | string, tree: Tree): void {\n    this.nodeRenamed$.next(new NodeRenamedEvent(tree, oldValue, tree.value));\n  }\n\n  public fireNodeMoved(tree: Tree, parent: Tree): void {\n    this.nodeMoved$.next(new NodeMovedEvent(tree, parent));\n  }\n\n  public fireMenuItemSelected(tree: Tree, selectedItem: string): void {\n    this.menuItemSelected$.next(new MenuItemSelectedEvent(tree, selectedItem));\n  }\n\n  public fireNodeSwitchFoldingType(tree: Tree): void {\n    if (tree.isNodeExpanded()) {\n      this.fireNodeExpanded(tree);\n      if (this.shouldFireLoadNextLevel(tree)) {\n        this.fireLoadNextLevel(tree);\n      }\n    } else if (tree.isNodeCollapsed()) {\n      this.fireNodeCollapsed(tree);\n    }\n  }\n\n  private fireNodeExpanded(tree: Tree): void {\n    this.nodeExpanded$.next(new NodeExpandedEvent(tree));\n  }\n\n  private fireNodeCollapsed(tree: Tree): void {\n    this.nodeCollapsed$.next(new NodeCollapsedEvent(tree));\n  }\n\n  private fireLoadNextLevel(tree: Tree): void {\n    this.loadNextLevel$.next(new LoadNextLevelEvent(tree));\n  }\n\n  public fireNodeChecked(tree: Tree): void {\n    this.nodeChecked$.next(new NodeCheckedEvent(tree));\n  }\n\n  public fireNodeUnchecked(tree: Tree): void {\n    this.nodeUnchecked$.next(new NodeUncheckedEvent(tree));\n  }\n\n  public draggedStream(tree: Tree, element: ElementRef): Observable<NodeDraggableEvent> {\n    return this.nodeDraggableService.draggableNodeEvents$.pipe(\n      filter((e: NodeDraggableEvent) => e.target === element),\n      filter((e: NodeDraggableEvent) => !e.captured.tree.hasChild(tree))\n    );\n  }\n\n  public setController(id: string | number, controller: TreeController): void {\n    this.controllers.set(id, controller);\n  }\n\n  public deleteController(id: string | number): void {\n    if (this.controllers.has(id)) {\n      this.controllers.delete(id);\n    }\n  }\n\n  public getController(id: string | number): TreeController {\n    if (this.controllers.has(id)) {\n      return this.controllers.get(id);\n    }\n\n    return null;\n  }\n\n  public hasController(id: string | number): boolean {\n    return this.controllers.has(id);\n  }\n\n  private shouldFireLoadNextLevel(tree: Tree): boolean {\n    const shouldLoadNextLevel =\n      tree.node.emitLoadNextLevel &&\n      !tree.node.loadChildren &&\n      !tree.childrenAreBeingLoaded() &&\n      isEmpty(tree.children);\n\n    if (shouldLoadNextLevel) {\n      tree.loadingChildrenRequested();\n    }\n\n    return shouldLoadNextLevel;\n  }\n\n  public fireNodeIndetermined(tree: Tree): void {\n    this.nodeIndetermined$.next(new NodeIndeterminedEvent(tree));\n  }\n}\n","import { filter, merge } from 'rxjs/operators';\nimport { of } from 'rxjs';\n\n// This forces angular compiler to generate a \"rxjs-imports.metadata.json\"\n// with a valid metadata instead of \"[null]\"\nexport const noop = () => {};\n","import { defaultsDeep, get, omit } from './utils/fn.utils';\nimport { NodeMenuItem } from './menu/node-menu.component';\n\nexport class FoldingType {\n  public static Expanded: FoldingType = new FoldingType('node-expanded');\n  public static Collapsed: FoldingType = new FoldingType('node-collapsed');\n  public static Empty: FoldingType = new FoldingType('node-empty');\n  public static Leaf: FoldingType = new FoldingType('node-leaf');\n\n  public constructor(private _cssClass: string) {}\n\n  public get cssClass(): string {\n    return this._cssClass;\n  }\n}\n\nexport type ChildrenLoadingFunction = (callback: (children: TreeModel[]) => void) => void;\n\nexport interface TreeModel {\n  value: string | RenamableNode;\n  id?: string | number;\n  children?: TreeModel[];\n  loadChildren?: ChildrenLoadingFunction;\n  settings?: TreeModelSettings;\n  emitLoadNextLevel?: boolean;\n  _status?: TreeStatus;\n  _foldingType?: FoldingType;\n  [additionalData: string]: any;\n}\n\nexport interface CssClasses {\n  /* The class or classes that should be added to the expanded node */\n  expanded?: string;\n\n  /* The class or classes that should be added to the collapsed node */\n  collapsed?: string;\n\n  /* The class or classes that should be added to the empty node */\n  empty?: string;\n\n  /* The class or classes that should be added to the expanded to the leaf */\n  leaf?: string;\n}\n\nexport interface Templates {\n  /* A template for a node */\n  node?: string;\n\n  /* A template for a leaf node */\n  leaf?: string;\n\n  /* A template for left menu html element */\n  leftMenu?: string;\n}\n\nexport class TreeModelSettings {\n  /* cssClasses - set custom css classes which will be used for a tree */\n  public cssClasses?: CssClasses;\n\n  /* Templates - set custom html templates to be used in a tree */\n  public templates?: Templates;\n\n  /**\n   * \"leftMenu\" property when set to true makes left menu available.\n   * @name TreeModelSettings#leftMenu\n   * @type boolean\n   * @default false\n   */\n  public leftMenu?: boolean;\n\n  /**\n   * \"rightMenu\" property when set to true makes right menu available.\n   * @name TreeModelSettings#rightMenu\n   * @type boolean\n   * @default true\n   */\n  public rightMenu?: boolean;\n\n  /**\n   * \"menu\" property when set will be available as custom context menu.\n   * @name TreeModelSettings#MenuItems\n   * @type NodeMenuItem\n   */\n  public menuItems?: NodeMenuItem[];\n\n  /**\n   * \"static\" property when set to true makes it impossible to drag'n'drop tree or call a menu on it.\n   * @name TreeModelSettings#static\n   * @type boolean\n   * @default false\n   */\n  public static?: boolean;\n\n  public isCollapsedOnInit?: boolean;\n\n  public checked?: boolean;\n\n  public selectionAllowed?: boolean;\n\n  public keepNodesInDOM?: boolean;\n\n  public static readonly NOT_CASCADING_SETTINGS = ['selectionAllowed'];\n\n  public static merge(child: TreeModel, parent: TreeModel): TreeModelSettings {\n    const parentCascadingSettings = omit(get(parent, 'settings'), TreeModelSettings.NOT_CASCADING_SETTINGS);\n    return defaultsDeep({}, get(child, 'settings'), parentCascadingSettings, {\n      static: false,\n      leftMenu: false,\n      rightMenu: true,\n      isCollapsedOnInit: false,\n      checked: false,\n      keepNodesInDOM: false,\n      selectionAllowed: true\n    });\n  }\n}\n\nexport class Ng2TreeSettings {\n  /**\n   * Indicates root visibility in the tree. When true - root is invisible.\n   * @name Ng2TreeSettings#rootIsVisible\n   * @type boolean\n   */\n  rootIsVisible? = true;\n  showCheckboxes? = false;\n  enableCheckboxes? = true;\n}\n\nexport enum TreeStatus {\n  New,\n  Modified,\n  IsBeingRenamed\n}\n\nexport interface RenamableNode {\n  /**\n   * Set new value of the renamable node. Implementation of this method is up to user.\n   * @param {string} name - A new value of the node.\n   */\n  setName(name: string): void;\n\n  /**\n   * Get string representation of the node. Implementation of this method is up to user.\n   * @returns {string} - A node string representation.\n   */\n  toString(): string;\n}\n","import { defaultsDeep, get, has, includes, isEmpty, isFunction, isNil, omit, once, size, trim } from './utils/fn.utils';\n\nimport {\n  ChildrenLoadingFunction,\n  FoldingType,\n  RenamableNode,\n  TreeModel,\n  TreeModelSettings,\n  TreeStatus\n} from './tree.types';\nimport { NodeMenuItem } from './menu/node-menu.component';\n\nimport * as uuidv4 from 'uuid/v4';\nimport { Observable, Observer, of } from 'rxjs';\n\nenum ChildrenLoadingState {\n  NotStarted,\n  Loading,\n  Completed\n}\n\nexport class Tree {\n  private _children: Tree[];\n  private _loadChildren: ChildrenLoadingFunction;\n  private _childrenLoadingState: ChildrenLoadingState = ChildrenLoadingState.NotStarted;\n  private _childrenAsyncOnce: () => Observable<Tree[]> = once(() => {\n    return new Observable((observer: Observer<Tree[]>) => {\n      setTimeout(() => {\n        this._childrenLoadingState = ChildrenLoadingState.Loading;\n        this._loadChildren((children: TreeModel[]) => {\n          this._children = (children || []).map((child: TreeModel) => new Tree(child, this));\n          this._childrenLoadingState = ChildrenLoadingState.Completed;\n          observer.next(this.children);\n          observer.complete();\n        });\n      });\n    });\n  });\n\n  public node: TreeModel;\n  public parent: Tree;\n\n  // STATIC METHODS ----------------------------------------------------------------------------------------------------\n\n  /**\n   * Check that value passed is not empty (it doesn't consist of only whitespace symbols).\n   * @param {string} value - A value that should be checked.\n   * @returns {boolean} - A flag indicating that value is empty or not.\n   * @static\n   */\n  public static isValueEmpty(value: string): boolean {\n    return isEmpty(trim(value));\n  }\n\n  /**\n   * Check whether a given value can be considered RenamableNode.\n   * @param {any} value - A value to check.\n   * @returns {boolean} - A flag indicating whether given value is Renamable node or not.\n   * @static\n   */\n  public static isRenamable(value: any): value is RenamableNode {\n    return (\n      has(value, 'setName') &&\n      isFunction(value.setName) &&\n      (has(value, 'toString') && isFunction(value.toString) && value.toString !== Object.toString)\n    );\n  }\n\n  private static cloneTreeShallow(origin: Tree): Tree {\n    const tree = new Tree(Object.assign({}, origin.node));\n    tree._children = origin._children;\n    return tree;\n  }\n\n  private static applyNewValueToRenamable(value: RenamableNode, newValue: string): RenamableNode {\n    const renamableValue: RenamableNode = Object.assign({}, value as RenamableNode);\n    renamableValue.setName(newValue);\n    return renamableValue;\n  }\n\n  /**\n   * Build an instance of Tree from an object implementing TreeModel interface.\n   * @param {TreeModel} model - A model that is used to build a tree.\n   * @param {Tree} [parent] - An optional parent if you want to build a tree from the model that should be a child of an existing Tree instance.\n   * @param {boolean} [isBranch] - An option that makes a branch from created tree. Branch can have children.\n   */\n  public constructor(node: TreeModel, parent: Tree = null, isBranch: boolean = false) {\n    this.buildTreeFromModel(node, parent, isBranch || Array.isArray(node.children));\n  }\n\n  private buildTreeFromModel(model: TreeModel, parent: Tree, isBranch: boolean): void {\n    this.parent = parent;\n    this.node = Object.assign(\n      omit(model, 'children') as TreeModel,\n      { settings: TreeModelSettings.merge(model, get(parent, 'node')) },\n      { emitLoadNextLevel: model.emitLoadNextLevel === true }\n    ) as TreeModel;\n\n    if (isFunction(this.node.loadChildren)) {\n      this._loadChildren = this.node.loadChildren;\n    } else {\n      get(model, 'children', []).forEach((child: TreeModel, index: number) => {\n        this._addChild(new Tree(child, this), index);\n      });\n    }\n\n    if (!Array.isArray(this._children)) {\n      this._children = this.node.loadChildren || isBranch ? [] : null;\n    }\n  }\n\n  public hasDeferredChildren(): boolean {\n    return typeof this._loadChildren === 'function';\n  }\n  /* Setting the children loading state to Loading since a request was dispatched to the client */\n  public loadingChildrenRequested(): void {\n    this._childrenLoadingState = ChildrenLoadingState.Loading;\n  }\n\n  /**\n   * Check whether children of the node are being loaded.\n   * Makes sense only for nodes that define `loadChildren` function.\n   * @returns {boolean} A flag indicating that children are being loaded.\n   */\n  public childrenAreBeingLoaded(): boolean {\n    return this._childrenLoadingState === ChildrenLoadingState.Loading;\n  }\n\n  /**\n   * Check whether children of the node were loaded.\n   * Makes sense only for nodes that define `loadChildren` function.\n   * @returns {boolean} A flag indicating that children were loaded.\n   */\n  public childrenWereLoaded(): boolean {\n    return this._childrenLoadingState === ChildrenLoadingState.Completed;\n  }\n\n  private canLoadChildren(): boolean {\n    return (\n      this._childrenLoadingState === ChildrenLoadingState.NotStarted &&\n      this.foldingType === FoldingType.Expanded &&\n      !!this._loadChildren\n    );\n  }\n\n  /**\n   * Check whether children of the node should be loaded and not loaded yet.\n   * Makes sense only for nodes that define `loadChildren` function.\n   * @returns {boolean} A flag indicating that children should be loaded for the current node.\n   */\n  public childrenShouldBeLoaded(): boolean {\n    return !this.childrenWereLoaded() && (!!this._loadChildren || this.node.emitLoadNextLevel === true);\n  }\n\n  /**\n   * Get children of the current tree.\n   * @returns {Tree[]} The children of the current tree.\n   */\n  public get children(): Tree[] {\n    return this._children;\n  }\n\n  /**\n   * By getting value from this property you start process of loading node's children using `loadChildren` function.\n   * Once children are loaded `loadChildren` function won't be called anymore and loaded for the first time children are emitted in case of subsequent calls.\n   * @returns {Observable<Tree[]>} An observable which emits children once they are loaded.\n   */\n  public get childrenAsync(): Observable<Tree[]> {\n    if (this.canLoadChildren()) {\n      return this._childrenAsyncOnce();\n    }\n    return of(this.children);\n  }\n\n  /**\n   * By calling this method you start process of loading node's children using `loadChildren` function.\n   */\n  public reloadChildren(): void {\n    if (this.childrenShouldBeLoaded()) {\n      this._childrenLoadingState = ChildrenLoadingState.Loading;\n      this._loadChildren((children: TreeModel[]) => {\n        this._children = children && children.map((child: TreeModel) => new Tree(child, this));\n        this._childrenLoadingState = ChildrenLoadingState.Completed;\n      });\n    }\n  }\n\n  /**\n   * By calling this method you will remove all current children of a treee and create new.\n   */\n  public setChildren(children: Array<TreeModel>): void {\n    this._children = children && children.map((child: TreeModel) => new Tree(child, this));\n    if (this.childrenShouldBeLoaded()) {\n      this._childrenLoadingState = ChildrenLoadingState.Completed;\n    }\n  }\n\n  /**\n   * Create a new node in the current tree.\n   * @param {boolean} isBranch - A flag that indicates whether a new node should be a \"Branch\". \"Leaf\" node will be created by default\n   * @param {TreeModel} model - Tree model of the new node which will be inserted. Empty node will be created by default and it will fire edit mode of this node\n   * @returns {Tree} A newly created child node.\n   */\n  public createNode(isBranch: boolean, model: TreeModel = { value: '' }): Tree {\n    const tree = new Tree(model, this, isBranch);\n    if (!model.id) {\n      tree.markAsNew();\n    }\n\n    tree.id = tree.id || uuidv4();\n\n    if (this.childrenShouldBeLoaded() && !(this.childrenAreBeingLoaded() || this.childrenWereLoaded())) {\n      return null;\n    }\n    if (this.isLeaf()) {\n      return this.addSibling(tree);\n    } else {\n      return this.addChild(tree);\n    }\n  }\n\n  /**\n   * Get the value of the current node\n   * @returns {(string|RenamableNode)} The value of the node.\n   */\n  public get value(): any {\n    return this.node.value;\n  }\n\n  public set checked(checked: boolean) {\n    this.node.settings = Object.assign({}, this.node.settings, { checked });\n  }\n\n  public get checked(): boolean {\n    return !!get(this.node.settings, 'checked');\n  }\n\n  public get checkedChildren(): Tree[] {\n    return this.hasLoadedChildern() ? this.children.filter(child => child.checked) : [];\n  }\n\n  public set selectionAllowed(selectionAllowed: boolean) {\n    this.node.settings = Object.assign({}, this.node.settings, { selectionAllowed });\n  }\n\n  public get selectionAllowed(): boolean {\n    const value = get(this.node.settings, 'selectionAllowed');\n    return isNil(value) ? true : !!value;\n  }\n\n  hasLoadedChildern() {\n    return !isEmpty(this.children);\n  }\n\n  loadedChildrenAmount() {\n    return size(this.children);\n  }\n\n  checkedChildrenAmount() {\n    return size(this.checkedChildren);\n  }\n\n  /**\n   * Set the value of the current node\n   * @param {(string|RenamableNode)} value - The new value of the node.\n   */\n  public set value(value: any) {\n    if (typeof value !== 'string' && !Tree.isRenamable(value)) {\n      return;\n    }\n\n    const stringifiedValue = '' + value;\n    if (Tree.isRenamable(this.value)) {\n      this.node.value = Tree.applyNewValueToRenamable(this.value as RenamableNode, stringifiedValue);\n    } else {\n      this.node.value = Tree.isValueEmpty(stringifiedValue) ? this.node.value : stringifiedValue;\n    }\n  }\n\n  /**\n   * Add a sibling node for the current node. This won't work if the current node is a root.\n   * @param {Tree} sibling - A node that should become a sibling.\n   * @param [number] position - Position in which sibling will be inserted. By default it will be inserted at the last position in a parent.\n   * @returns {Tree} A newly inserted sibling, or null if you are trying to make a sibling for the root.\n   */\n  public addSibling(sibling: Tree, position?: number): Tree {\n    if (Array.isArray(get(this.parent, 'children'))) {\n      return this.parent.addChild(sibling, position);\n    }\n    return null;\n  }\n\n  /**\n   * Add a child node for the current node.\n   * @param {Tree} child - A node that should become a child.\n   * @param [number] position - Position in which child will be inserted. By default it will be inserted at the last position in a parent.\n   * @returns {Tree} A newly inserted child.\n   */\n  public addChild(child: Tree, position?: number): Tree {\n    const newborn = this._addChild(Tree.cloneTreeShallow(child), position);\n\n    this._setFoldingType();\n    if (this.isNodeCollapsed()) {\n      this.switchFoldingType();\n    }\n\n    return newborn;\n  }\n\n  private _addChild(child: Tree, position: number = size(this._children) || 0): Tree {\n    child.parent = this;\n\n    if (Array.isArray(this._children)) {\n      this._children.splice(position, 0, child);\n    } else {\n      this._children = [child];\n    }\n\n    return child;\n  }\n\n  /**\n   * Swap position of the current node with the given sibling. If node passed as a parameter is not a sibling - nothing happens.\n   * @param {Tree} sibling - A sibling with which current node shold be swapped.\n   */\n  public swapWithSibling(sibling: Tree): void {\n    if (!this.hasSibling(sibling)) {\n      return;\n    }\n\n    const siblingIndex = sibling.positionInParent;\n    const thisTreeIndex = this.positionInParent;\n\n    this.parent._children[siblingIndex] = this;\n    this.parent._children[thisTreeIndex] = sibling;\n  }\n\n  /**\n   * Get a node's position in its parent.\n   * @returns {number} The position inside a parent.\n   */\n  public get positionInParent(): number {\n    if (this.isRoot()) {\n      return -1;\n    }\n\n    return this.parent.children ? this.parent.children.indexOf(this) : -1;\n  }\n\n  /**\n   * Check whether or not this tree is static.\n   * @returns {boolean} A flag indicating whether or not this tree is static.\n   */\n  public isStatic(): boolean {\n    return get(this.node.settings, 'static', false);\n  }\n\n  /**\n   * Check whether or not this tree has a left menu.\n   * @returns {boolean} A flag indicating whether or not this tree has a left menu.\n   */\n  public hasLeftMenu(): boolean {\n    return !get(this.node.settings, 'static', false) && get(this.node.settings, 'leftMenu', false);\n  }\n\n  /**\n   * Check whether or not this tree has a right menu.\n   * @returns {boolean} A flag indicating whether or not this tree has a right menu.\n   */\n  public hasRightMenu(): boolean {\n    return !get(this.node.settings, 'static', false) && get(this.node.settings, 'rightMenu', false);\n  }\n\n  /**\n   * Check whether this tree is \"Leaf\" or not.\n   * @returns {boolean} A flag indicating whether or not this tree is a \"Leaf\".\n   */\n  public isLeaf(): boolean {\n    return !this.isBranch();\n  }\n\n  /**\n   * Get menu items of the current tree.\n   * @returns {NodeMenuItem[]} The menu items of the current tree.\n   */\n  public get menuItems(): NodeMenuItem[] {\n    return get(this.node.settings, 'menuItems');\n  }\n\n  /**\n   * Check whether or not this tree has a custom menu.\n   * @returns {boolean} A flag indicating whether or not this tree has a custom menu.\n   */\n  public hasCustomMenu(): boolean {\n    return !this.isStatic() && !!get(this.node.settings, 'menuItems', false);\n  }\n  /**\n   * Check whether this tree is \"Branch\" or not. \"Branch\" is a node that has children.\n   * @returns {boolean} A flag indicating whether or not this tree is a \"Branch\".\n   */\n  public isBranch(): boolean {\n    return this.node.emitLoadNextLevel === true || Array.isArray(this._children);\n  }\n\n  /**\n   * Check whether this tree has children.\n   * @returns {boolean} A flag indicating whether or not this tree has children.\n   */\n  public hasChildren(): boolean {\n    return !isEmpty(this._children) || this.childrenShouldBeLoaded();\n  }\n\n  /**\n   * Check whether this tree is a root or not. The root is the tree (node) that doesn't have parent (or technically its parent is null).\n   * @returns {boolean} A flag indicating whether or not this tree is the root.\n   */\n  public isRoot(): boolean {\n    return isNil(this.parent);\n  }\n\n  /**\n   * Check whether provided tree is a sibling of the current tree. Sibling trees (nodes) are the trees that have the same parent.\n   * @param {Tree} tree - A tree that should be tested on a siblingness.\n   * @returns {boolean} A flag indicating whether or not provided tree is the sibling of the current one.\n   */\n  public hasSibling(tree: Tree): boolean {\n    return !this.isRoot() && includes(this.parent.children, tree);\n  }\n\n  /**\n   * Check whether provided tree is a child of the current tree.\n   * This method tests that provided tree is a <strong>direct</strong> child of the current tree.\n   * @param {Tree} tree - A tree that should be tested (child candidate).\n   * @returns {boolean} A flag indicating whether provided tree is a child or not.\n   */\n  public hasChild(tree: Tree): boolean {\n    return includes(this._children, tree);\n  }\n\n  /**\n   * Remove given tree from the current tree.\n   * The given tree will be removed only in case it is a direct child of the current tree (@see {@link hasChild}).\n   * @param {Tree} tree - A tree that should be removed.\n   */\n  public removeChild(tree: Tree): void {\n    if (!this.hasChildren()) {\n      return;\n    }\n\n    const childIndex = this._children.findIndex((child: Tree) => child === tree);\n    if (childIndex >= 0) {\n      this._children.splice(childIndex, 1);\n    }\n    this._setFoldingType();\n  }\n\n  /**\n   * Remove current tree from its parent.\n   */\n  public removeItselfFromParent(): void {\n    if (!this.parent) {\n      return;\n    }\n\n    this.parent.removeChild(this);\n  }\n\n  /**\n   * Switch folding type of the current tree. \"Leaf\" node cannot switch its folding type cause it doesn't have children, hence nothing to fold.\n   * If node is a \"Branch\" and it is expanded, then by invoking current method state of the tree should be switched to \"collapsed\" and vice versa.\n   */\n  public switchFoldingType(): void {\n    if (this.isLeaf() || !this.hasChildren()) {\n      return;\n    }\n\n    this.disableCollapseOnInit();\n\n    this.node._foldingType = this.isNodeExpanded() ? FoldingType.Collapsed : FoldingType.Expanded;\n  }\n\n  /**\n   * Check that tree is expanded.\n   * @returns {boolean} A flag indicating whether current tree is expanded. Always returns false for the \"Leaf\" tree and for an empty tree.\n   */\n  public isNodeExpanded(): boolean {\n    return this.foldingType === FoldingType.Expanded;\n  }\n\n  /**\n   * Check that tree is collapsed.\n   * @returns {boolean} A flag indicating whether current tree is collapsed. Always returns false for the \"Leaf\" tree and for an empty tree.\n   */\n  public isNodeCollapsed(): boolean {\n    return this.foldingType === FoldingType.Collapsed;\n  }\n\n  /**\n   * Set a current folding type: expanded, collapsed or leaf.\n   */\n  private _setFoldingType(): void {\n    if (this.childrenShouldBeLoaded()) {\n      this.node._foldingType = FoldingType.Collapsed;\n    } else if (this._children && !isEmpty(this._children)) {\n      this.node._foldingType = this.isCollapsedOnInit() ? FoldingType.Collapsed : FoldingType.Expanded;\n    } else if (Array.isArray(this._children)) {\n      this.node._foldingType = FoldingType.Empty;\n    } else {\n      this.node._foldingType = FoldingType.Leaf;\n    }\n  }\n\n  /**\n   * Get a current folding type: expanded, collapsed or leaf.\n   * @returns {FoldingType} A folding type of the current tree.\n   */\n  public get foldingType(): FoldingType {\n    if (!this.node._foldingType) {\n      this._setFoldingType();\n    }\n    return this.node._foldingType;\n  }\n\n  /**\n   * Get a css class for element which displayes folding state - expanded, collapsed or leaf\n   * @returns {string} A string icontaining css class (classes)\n   */\n  public get foldingCssClass(): string {\n    return this.getCssClassesFromSettings() || this.foldingType.cssClass;\n  }\n\n  private getCssClassesFromSettings(): string {\n    if (!this.node._foldingType) {\n      this._setFoldingType();\n    }\n\n    if (this.node._foldingType === FoldingType.Collapsed) {\n      return get(this.node.settings, 'cssClasses.collapsed', null);\n    } else if (this.node._foldingType === FoldingType.Expanded) {\n      return get(this.node.settings, 'cssClasses.expanded', null);\n    } else if (this.node._foldingType === FoldingType.Empty) {\n      return get(this.node.settings, 'cssClasses.empty', null);\n    }\n\n    return get(this.node.settings, 'cssClasses.leaf', null);\n  }\n\n  /**\n   * Get a html template to render before every node's name.\n   * @returns {string} A string representing a html template.\n   */\n  public get nodeTemplate(): string {\n    return this.getTemplateFromSettings();\n  }\n\n  private getTemplateFromSettings(): string {\n    if (this.isLeaf()) {\n      return get(this.node.settings, 'templates.leaf', '');\n    } else {\n      return get(this.node.settings, 'templates.node', '');\n    }\n  }\n\n  /**\n   * Get a html template to render for an element activatin left menu of a node.\n   * @returns {string} A string representing a html template.\n   */\n  public get leftMenuTemplate(): string {\n    if (this.hasLeftMenu()) {\n      return get(this.node.settings, 'templates.leftMenu', '<span></span>');\n    }\n    return '';\n  }\n\n  public disableCollapseOnInit() {\n    if (this.node.settings) {\n      this.node.settings.isCollapsedOnInit = false;\n    }\n  }\n\n  public isCollapsedOnInit() {\n    return !!get(this.node.settings, 'isCollapsedOnInit');\n  }\n\n  public keepNodesInDOM() {\n    return get(this.node.settings, 'keepNodesInDOM');\n  }\n\n  /**\n   * Check that current tree is newly created (added by user via menu for example). Tree that was built from the TreeModel is not marked as new.\n   * @returns {boolean} A flag whether the tree is new.\n   */\n  public isNew(): boolean {\n    return this.node._status === TreeStatus.New;\n  }\n\n  public get id(): number | string {\n    return get(this.node, 'id');\n  }\n\n  public set id(id: number | string) {\n    this.node.id = id;\n  }\n\n  /**\n   * Mark current tree as new (@see {@link isNew}).\n   */\n  public markAsNew(): void {\n    this.node._status = TreeStatus.New;\n  }\n\n  /**\n   * Check that current tree is being renamed (it is in the process of its value renaming initiated by a user).\n   * @returns {boolean} A flag whether the tree is being renamed.\n   */\n  public isBeingRenamed(): boolean {\n    return this.node._status === TreeStatus.IsBeingRenamed;\n  }\n\n  /**\n   * Mark current tree as being renamed (@see {@link isBeingRenamed}).\n   */\n  public markAsBeingRenamed(): void {\n    this.node._status = TreeStatus.IsBeingRenamed;\n  }\n\n  /**\n   * Check that current tree is modified (for example it was renamed).\n   * @returns {boolean} A flag whether the tree is modified.\n   */\n  public isModified(): boolean {\n    return this.node._status === TreeStatus.Modified;\n  }\n\n  /**\n   * Mark current tree as modified (@see {@link isModified}).\n   */\n  public markAsModified(): void {\n    this.node._status = TreeStatus.Modified;\n  }\n\n  /**\n   * Makes a clone of an underlying TreeModel instance\n   * @returns {TreeModel} a clone of an underlying TreeModel instance\n   */\n  public toTreeModel(): TreeModel {\n    const model = defaultsDeep(this.isLeaf() ? {} : { children: [] }, this.node);\n\n    if (this.children) {\n      this.children.forEach(child => {\n        model.children.push(child.toTreeModel());\n      });\n    }\n\n    return model;\n  }\n}\n","export enum NodeMenuItemAction {\n  NewFolder,\n  NewTag,\n  Rename,\n  Remove,\n  Custom\n}\n\nexport enum NodeMenuAction {\n  Close\n}\n\nexport interface NodeMenuEvent {\n  sender: HTMLElement;\n  action: NodeMenuAction;\n}\n\nexport interface NodeMenuItemSelectedEvent {\n  nodeMenuItemAction: NodeMenuItemAction;\n  nodeMenuItemSelected?: string;\n}\n","export enum Keys {\n  Escape = 27\n}\n\nexport enum MouseButtons {\n  Left = 0,\n  Right = 2\n}\n\nexport function isLeftButtonClicked(e: MouseEvent): boolean {\n  return e.button === MouseButtons.Left;\n}\n\nexport function isRightButtonClicked(e: MouseEvent): boolean {\n  return e.button === MouseButtons.Right;\n}\n\nexport function isEscapePressed(e: KeyboardEvent): boolean {\n  return e.keyCode === Keys.Escape;\n}\n","import { TreeService } from './tree.service';\nimport { Tree } from './tree';\nimport { TreeModel } from './tree.types';\nimport { NodeMenuItemAction } from './menu/menu.events';\nimport { TreeInternalComponent } from './tree-internal.component';\nimport { MouseButtons } from './utils/event.utils';\nimport { get } from './utils/fn.utils';\n\nexport class TreeController {\n  private tree: Tree;\n  private treeService: TreeService;\n\n  constructor(private component: TreeInternalComponent) {\n    this.tree = this.component.tree;\n    this.treeService = this.component.treeService;\n  }\n\n  public select(): void {\n    if (!this.isSelected()) {\n      this.component.onNodeSelected({ button: MouseButtons.Left });\n    }\n  }\n\n  public unselect(): void {\n    if (this.isSelected()) {\n      this.component.onNodeUnselected({ button: MouseButtons.Left });\n    }\n  }\n\n  public isSelected(): boolean {\n    return this.component.isSelected;\n  }\n\n  public expand(): void {\n    if (this.isCollapsed()) {\n      this.component.onSwitchFoldingType();\n    }\n  }\n\n  public expandToParent(tree: any = this.tree): void {\n    if (tree) {\n      const controller = this.treeService.getController(tree.id);\n      if (controller) {\n        requestAnimationFrame(() => {\n          controller.expand();\n          this.expandToParent(tree.parent);\n        });\n      }\n    }\n  }\n\n  public isExpanded(): boolean {\n    return this.tree.isNodeExpanded();\n  }\n\n  public collapse(): void {\n    if (this.isExpanded()) {\n      this.component.onSwitchFoldingType();\n    }\n  }\n\n  public isCollapsed(): boolean {\n    return this.tree.isNodeCollapsed();\n  }\n\n  public toTreeModel(): TreeModel {\n    return this.tree.toTreeModel();\n  }\n\n  public rename(newValue: string): void {\n    this.tree.markAsBeingRenamed();\n    this.component.applyNewValue({ type: 'keyup', value: newValue });\n  }\n\n  public remove(): void {\n    this.component.onMenuItemSelected({ nodeMenuItemAction: NodeMenuItemAction.Remove });\n  }\n\n  public addChild(newNode: TreeModel): void {\n    if (this.tree.hasDeferredChildren() && !this.tree.childrenWereLoaded()) {\n      return;\n    }\n\n    const newTree = this.tree.createNode(Array.isArray(newNode.children), newNode);\n    this.treeService.fireNodeCreated(newTree);\n  }\n\n  public addChildAsync(newNode: TreeModel): Promise<Tree> {\n    if (this.tree.hasDeferredChildren() && !this.tree.childrenWereLoaded()) {\n      return Promise.reject(\n        new Error('This node loads its children asynchronously, hence child cannot be added this way')\n      );\n    }\n\n    const newTree = this.tree.createNode(Array.isArray(newNode.children), newNode);\n    this.treeService.fireNodeCreated(newTree);\n\n    // This will give TreeInternalComponent to set up a controller for the node\n    return new Promise(resolve => {\n      setTimeout(() => {\n        resolve(newTree);\n      });\n    });\n  }\n\n  public changeNodeId(id: string | number) {\n    if (!id) {\n      throw Error('You should supply an id!');\n    }\n\n    if (this.treeService.hasController(id)) {\n      throw Error(`Controller already exists for the given id: ${id}`);\n    }\n\n    this.treeService.deleteController(this.tree.id);\n    this.tree.id = id;\n    this.treeService.setController(this.tree.id, this);\n  }\n\n  public reloadChildren(): void {\n    this.tree.reloadChildren();\n  }\n\n  public setChildren(children: TreeModel[]): void {\n    if (!this.tree.isLeaf()) {\n      this.tree.setChildren(children);\n    }\n  }\n\n  public startRenaming(): void {\n    this.tree.markAsBeingRenamed();\n  }\n\n  public check(): void {\n    this.component.onNodeChecked();\n  }\n\n  public uncheck(): void {\n    this.component.onNodeUnchecked();\n  }\n\n  public isChecked(): boolean {\n    return this.tree.checked;\n  }\n\n  public isIndetermined(): boolean {\n    return get(this.component, 'checkboxElementRef.nativeElement.indeterminate');\n  }\n\n  public allowSelection() {\n    this.tree.selectionAllowed = true;\n  }\n\n  public forbidSelection() {\n    this.tree.selectionAllowed = false;\n  }\n\n  public isSelectionAllowed(): boolean {\n    return this.tree.selectionAllowed;\n  }\n}\n","export type NodeEditableEventType = 'blur' | 'keyup';\n\nexport enum NodeEditableEventAction {\n  Cancel\n}\n\nexport interface NodeEditableEvent {\n  value: string;\n  type: NodeEditableEventType;\n  action?: NodeEditableEventAction;\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { NodeMenuAction, NodeMenuEvent } from './menu.events';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\nexport class NodeMenuService {\n  public nodeMenuEvents$: Subject<NodeMenuEvent> = new Subject<NodeMenuEvent>();\n\n  public fireMenuEvent(sender: HTMLElement, action: NodeMenuAction): void {\n    const nodeMenuEvent: NodeMenuEvent = { sender, action };\n    this.nodeMenuEvents$.next(nodeMenuEvent);\n  }\n\n  public hideMenuStream(treeElementRef: ElementRef): Observable<any> {\n    return this.nodeMenuEvents$.pipe(\n      filter((e: NodeMenuEvent) => treeElementRef.nativeElement !== e.sender),\n      filter((e: NodeMenuEvent) => e.action === NodeMenuAction.Close)\n    );\n  }\n\n  public hideMenuForAllNodesExcept(treeElementRef: ElementRef): void {\n    this.nodeMenuEvents$.next({\n      sender: treeElementRef.nativeElement,\n      action: NodeMenuAction.Close\n    });\n  }\n}\n","import { Tree } from '../tree';\nimport { ElementRef } from '@angular/core';\n\nexport class CapturedNode {\n  public constructor(private anElement: ElementRef, private aTree: Tree) {}\n\n  public canBeDroppedAt(element: ElementRef): boolean {\n    return !this.sameAs(element) && !this.contains(element);\n  }\n\n  public contains(other: ElementRef): boolean {\n    return this.element.nativeElement.contains(other.nativeElement);\n  }\n\n  public sameAs(other: ElementRef): boolean {\n    return this.element === other;\n  }\n\n  public get element(): ElementRef {\n    return this.anElement;\n  }\n\n  public get tree(): Tree {\n    return this.aTree;\n  }\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { NodeDraggableService } from './node-draggable.service';\nimport { CapturedNode } from './captured-node';\nimport { Tree } from '../tree';\n\n@Directive({\n  selector: '[nodeDraggable]'\n})\nexport class NodeDraggableDirective implements OnDestroy, OnInit {\n  public static DATA_TRANSFER_STUB_DATA = 'some browsers enable drag-n-drop only when dataTransfer has data';\n\n  @Input() public nodeDraggable: ElementRef;\n\n  @Input() public tree: Tree;\n\n  private nodeNativeElement: HTMLElement;\n  private disposersForDragListeners: (() => void)[] = [];\n\n  public constructor(\n    @Inject(ElementRef) public element: ElementRef,\n    @Inject(NodeDraggableService) private nodeDraggableService: NodeDraggableService,\n    @Inject(Renderer2) private renderer: Renderer2\n  ) {\n    this.nodeNativeElement = element.nativeElement;\n  }\n\n  public ngOnInit(): void {\n    if (!this.tree.isStatic()) {\n      this.renderer.setAttribute(this.nodeNativeElement, 'draggable', 'true');\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'dragenter', this.handleDragEnter.bind(this))\n      );\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'dragover', this.handleDragOver.bind(this))\n      );\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'dragstart', this.handleDragStart.bind(this))\n      );\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'dragleave', this.handleDragLeave.bind(this))\n      );\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'drop', this.handleDrop.bind(this))\n      );\n      this.disposersForDragListeners.push(\n        this.renderer.listen(this.nodeNativeElement, 'dragend', this.handleDragEnd.bind(this))\n      );\n    }\n  }\n\n  public ngOnDestroy(): void {\n    /* tslint:disable:typedef */\n    this.disposersForDragListeners.forEach(dispose => dispose());\n    /* tslint:enable:typedef */\n  }\n\n  private handleDragStart(e: DragEvent): any {\n    if (e.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.nodeDraggableService.captureNode(new CapturedNode(this.nodeDraggable, this.tree));\n\n    e.dataTransfer.setData('text', NodeDraggableDirective.DATA_TRANSFER_STUB_DATA);\n    e.dataTransfer.effectAllowed = 'move';\n  }\n\n  private handleDragOver(e: DragEvent): any {\n    e.preventDefault();\n    e.dataTransfer.dropEffect = 'move';\n  }\n\n  private handleDragEnter(e: DragEvent): any {\n    e.preventDefault();\n    if (this.containsElementAt(e)) {\n      this.addClass('over-drop-target');\n    }\n  }\n\n  private handleDragLeave(e: DragEvent): any {\n    if (!this.containsElementAt(e)) {\n      this.removeClass('over-drop-target');\n    }\n  }\n\n  private handleDrop(e: DragEvent): any {\n    e.preventDefault();\n    if (e.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.removeClass('over-drop-target');\n\n    if (!this.isDropPossible(e)) {\n      return false;\n    }\n\n    if (this.nodeDraggableService.getCapturedNode()) {\n      return this.notifyThatNodeWasDropped();\n    }\n  }\n\n  private isDropPossible(e: DragEvent): boolean {\n    const capturedNode = this.nodeDraggableService.getCapturedNode();\n    return capturedNode && capturedNode.canBeDroppedAt(this.nodeDraggable) && this.containsElementAt(e);\n  }\n\n  private handleDragEnd(e: DragEvent): any {\n    this.removeClass('over-drop-target');\n    this.nodeDraggableService.releaseCapturedNode();\n  }\n\n  private containsElementAt(e: DragEvent): boolean {\n    const { x = e.clientX, y = e.clientY } = e;\n    return this.nodeNativeElement.contains(document.elementFromPoint(x, y));\n  }\n\n  private addClass(className: string): void {\n    const classList: DOMTokenList = this.nodeNativeElement.classList;\n    classList.add(className);\n  }\n\n  private removeClass(className: string): void {\n    const classList: DOMTokenList = this.nodeNativeElement.classList;\n    classList.remove(className);\n  }\n\n  private notifyThatNodeWasDropped(): void {\n    this.nodeDraggableService.fireNodeDragged(this.nodeDraggableService.getCapturedNode(), this.nodeDraggable);\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  OnInit,\n  Output,\n  Renderer2\n} from '@angular/core';\nimport { NodeEditableEvent, NodeEditableEventAction } from './editable.events';\n\n@Directive({\n  selector: '[nodeEditable]'\n})\nexport class NodeEditableDirective implements OnInit {\n  /* tslint:disable:no-input-rename */\n  @Input('nodeEditable') public nodeValue: string;\n  /* tslint:enable:no-input-rename */\n\n  @Output() public valueChanged: EventEmitter<NodeEditableEvent> = new EventEmitter<NodeEditableEvent>(false);\n\n  public constructor(\n    @Inject(Renderer2) private renderer: Renderer2,\n    @Inject(ElementRef) private elementRef: ElementRef\n  ) {}\n\n  public ngOnInit(): void {\n    const nativeElement = this.elementRef.nativeElement;\n\n    if (nativeElement) {\n      nativeElement.focus();\n    }\n\n    this.renderer.setProperty(nativeElement, 'value', this.nodeValue);\n  }\n\n  @HostListener('keyup.enter', ['$event.target.value'])\n  public applyNewValue(newNodeValue: string): void {\n    this.valueChanged.emit({ type: 'keyup', value: newNodeValue });\n  }\n\n  @HostListener('blur', ['$event.target.value'])\n  public applyNewValueByLoosingFocus(newNodeValue: string): void {\n    this.valueChanged.emit({ type: 'blur', value: newNodeValue });\n  }\n\n  @HostListener('keyup.esc')\n  public cancelEditing(): void {\n    this.valueChanged.emit({\n      type: 'keyup',\n      value: this.nodeValue,\n      action: NodeEditableEventAction.Cancel\n    });\n  }\n}\n","import { Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\nimport { NodeMenuService } from './node-menu.service';\nimport { NodeMenuAction, NodeMenuItemAction, NodeMenuItemSelectedEvent } from './menu.events';\nimport { isEscapePressed, isLeftButtonClicked } from '../utils/event.utils';\n\n@Component({\n  selector: 'node-menu',\n  template: `\n    <div class=\"node-menu\">\n      <ul class=\"node-menu-content\" #menuContainer>\n        <li class=\"node-menu-item\" *ngFor=\"let menuItem of availableMenuItems\"\n          (click)=\"onMenuItemSelected($event, menuItem)\">\n          <div class=\"node-menu-item-icon {{menuItem.cssClass}}\"></div>\n          <span class=\"node-menu-item-value\">{{menuItem.name}}</span>\n        </li>\n      </ul>\n    </div>\n  `\n})\nexport class NodeMenuComponent implements OnInit, OnDestroy {\n  @Output()\n  public menuItemSelected: EventEmitter<NodeMenuItemSelectedEvent> = new EventEmitter<NodeMenuItemSelectedEvent>();\n\n  @Input() public menuItems: NodeMenuItem[];\n\n  @ViewChild('menuContainer', { static: false })\n  public menuContainer: any;\n\n  public availableMenuItems: NodeMenuItem[] = [\n    {\n      name: 'New tag',\n      action: NodeMenuItemAction.NewTag,\n      cssClass: 'new-tag'\n    },\n    {\n      name: 'New folder',\n      action: NodeMenuItemAction.NewFolder,\n      cssClass: 'new-folder'\n    },\n    {\n      name: 'Rename',\n      action: NodeMenuItemAction.Rename,\n      cssClass: 'rename'\n    },\n    {\n      name: 'Remove',\n      action: NodeMenuItemAction.Remove,\n      cssClass: 'remove'\n    }\n  ];\n\n  private disposersForGlobalListeners: (() => void)[] = [];\n\n  public constructor(\n    @Inject(Renderer2) private renderer: Renderer2,\n    @Inject(NodeMenuService) private nodeMenuService: NodeMenuService\n  ) {}\n\n  public ngOnInit(): void {\n    this.availableMenuItems = this.menuItems || this.availableMenuItems;\n    this.disposersForGlobalListeners.push(this.renderer.listen('document', 'keyup', this.closeMenu.bind(this)));\n    this.disposersForGlobalListeners.push(this.renderer.listen('document', 'mousedown', this.closeMenu.bind(this)));\n  }\n\n  public ngOnDestroy(): void {\n    this.disposersForGlobalListeners.forEach((dispose: () => void) => dispose());\n  }\n\n  public onMenuItemSelected(e: MouseEvent, selectedMenuItem: NodeMenuItem): void {\n    if (isLeftButtonClicked(e)) {\n      this.menuItemSelected.emit({\n        nodeMenuItemAction: selectedMenuItem.action,\n        nodeMenuItemSelected: selectedMenuItem.name\n      });\n\n      this.nodeMenuService.fireMenuEvent(e.target as HTMLElement, NodeMenuAction.Close);\n    }\n  }\n\n  private closeMenu(e: MouseEvent | KeyboardEvent): void {\n    const mouseClicked = e instanceof MouseEvent;\n    // Check if the click is fired on an element inside a menu\n    const containingTarget =\n      this.menuContainer.nativeElement !== e.target && this.menuContainer.nativeElement.contains(e.target);\n\n    if ((mouseClicked && !containingTarget) || isEscapePressed(e as KeyboardEvent)) {\n      this.nodeMenuService.fireMenuEvent(e.target as HTMLElement, NodeMenuAction.Close);\n    }\n  }\n}\n\nexport interface NodeMenuItem {\n  name: string;\n  action: NodeMenuItemAction;\n  cssClass?: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({ name: 'safeHtml' })\nexport class SafeHtmlPipe implements PipeTransform {\n  public constructor(private sanitizer: DomSanitizer) {}\n\n  public transform(value: string): SafeHtml {\n    // return value;\n    return this.sanitizer.bypassSecurityTrustHtml(value);\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\n\nimport * as TreeTypes from './tree.types';\nimport { Ng2TreeSettings } from './tree.types';\nimport { Tree } from './tree';\nimport { TreeController } from './tree-controller';\nimport { NodeMenuService } from './menu/node-menu.service';\nimport { NodeMenuItemAction, NodeMenuItemSelectedEvent } from './menu/menu.events';\nimport { NodeEditableEvent, NodeEditableEventAction } from './editable/editable.events';\nimport { NodeCheckedEvent, NodeEvent } from './tree.events';\nimport { TreeService } from './tree.service';\nimport * as EventUtils from './utils/event.utils';\nimport { NodeDraggableEvent } from './draggable/draggable.events';\nimport { get, isNil } from './utils/fn.utils';\nimport { Subscription } from 'rxjs';\nimport { merge, of } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n  selector: 'tree-internal',\n  template: `\n  <ul class=\"tree\" *ngIf=\"tree\" [ngClass]=\"{rootless: isRootHidden()}\">\n    <li>\n      <div class=\"value-container\"\n        [ngClass]=\"{rootless: isRootHidden()}\"\n        [class.selected]=\"isSelected\"\n        (contextmenu)=\"showRightMenu($event)\"\n        [nodeDraggable]=\"nodeElementRef\"\n        [tree]=\"tree\">\n\n        <div class=\"folding\" (click)=\"onSwitchFoldingType()\" [ngClass]=\"tree.foldingCssClass\"></div>\n\n        <div class=\"node-checkbox\" *ngIf=\"settings.showCheckboxes\">\n        <input checkbox  type=\"checkbox\" [disabled]=\"isReadOnly\" [checked]=\"this.tree.checked\" (change)=\"switchNodeCheckStatus()\" #checkbox />\n         </div>\n\n        <div class=\"node-value\"\n          *ngIf=\"!shouldShowInputForTreeValue()\"\n          [class.node-selected]=\"isSelected\"\n          (click)=\"onNodeSelected($event)\">\n            <div *ngIf=\"tree.nodeTemplate\" class=\"node-template\" [innerHTML]=\"tree.nodeTemplate | safeHtml\"></div>\n            <span *ngIf=\"!template\" class=\"node-name\" [innerHTML]=\"tree.value | safeHtml\"></span>\n            <span class=\"loading-children\" *ngIf=\"tree.childrenAreBeingLoaded()\"></span>\n            <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: tree.node }\"></ng-template>\n        </div>\n\n        <input type=\"text\" class=\"node-value\"\n           *ngIf=\"shouldShowInputForTreeValue()\"\n           [nodeEditable]=\"tree.value\"\n           (valueChanged)=\"applyNewValue($event)\"/>\n\n        <div class=\"node-left-menu\" *ngIf=\"tree.hasLeftMenu()\" (click)=\"showLeftMenu($event)\" [innerHTML]=\"tree.leftMenuTemplate\">\n        </div>\n        <node-menu *ngIf=\"tree.hasLeftMenu() && isLeftMenuVisible && !hasCustomMenu()\"\n          (menuItemSelected)=\"onMenuItemSelected($event)\">\n        </node-menu>\n      </div>\n\n      <node-menu *ngIf=\"isRightMenuVisible && !hasCustomMenu()\"\n           (menuItemSelected)=\"onMenuItemSelected($event)\">\n      </node-menu>\n\n      <node-menu *ngIf=\"hasCustomMenu() && (isRightMenuVisible || isLeftMenuVisible)\"\n           [menuItems]=\"tree.menuItems\"\n           (menuItemSelected)=\"onMenuItemSelected($event)\">\n      </node-menu>\n\n      <div *ngIf=\"tree.keepNodesInDOM()\" [ngStyle]=\"{'display': tree.isNodeExpanded() ? 'block' : 'none'}\">\n        <tree-internal *ngFor=\"let child of tree.childrenAsync | async\" [tree]=\"child\" [template]=\"template\" [settings]=\"settings\"></tree-internal>\n      </div>\n      <ng-template [ngIf]=\"tree.isNodeExpanded() && !tree.keepNodesInDOM()\">\n        <tree-internal *ngFor=\"let child of tree.childrenAsync | async\" [tree]=\"child\" [template]=\"template\" [settings]=\"settings\"></tree-internal>\n      </ng-template>\n    </li>\n  </ul>\n  `\n})\nexport class TreeInternalComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  @Input() public tree: Tree;\n\n  @Input() public settings: TreeTypes.Ng2TreeSettings;\n\n  @Input() public template: TemplateRef<any>;\n\n  public isSelected = false;\n  public isRightMenuVisible = false;\n  public isLeftMenuVisible = false;\n  public isReadOnly = false;\n  public controller: TreeController;\n\n  @ViewChild('checkbox', { static: false })\n  public checkboxElementRef: ElementRef;\n\n  private subscriptions: Subscription[] = [];\n\n  public constructor(\n    private nodeMenuService: NodeMenuService,\n    public treeService: TreeService,\n    public nodeElementRef: ElementRef\n  ) {}\n\n  public ngAfterViewInit(): void {\n    if (this.tree.checked && !(this.tree as any).firstCheckedFired) {\n      (this.tree as any).firstCheckedFired = true;\n      this.treeService.fireNodeChecked(this.tree);\n    }\n  }\n\n  public ngOnInit(): void {\n    const nodeId = get(this.tree, 'node.id', '');\n    if (nodeId) {\n      this.controller = new TreeController(this);\n      this.treeService.setController(nodeId, this.controller);\n    }\n\n    this.settings = this.settings || new Ng2TreeSettings();\n    this.isReadOnly = !get(this.settings, 'enableCheckboxes', true);\n\n    if (this.tree.isRoot() && this.settings.rootIsVisible === false) {\n      this.tree.disableCollapseOnInit();\n    }\n\n    this.subscriptions.push(\n      this.nodeMenuService.hideMenuStream(this.nodeElementRef).subscribe(() => {\n        this.isRightMenuVisible = false;\n        this.isLeftMenuVisible = false;\n      })\n    );\n\n    this.subscriptions.push(this.treeService.unselectStream(this.tree).subscribe(() => (this.isSelected = false)));\n\n    this.subscriptions.push(\n      this.treeService.draggedStream(this.tree, this.nodeElementRef).subscribe((e: NodeDraggableEvent) => {\n        if (this.tree.hasSibling(e.captured.tree)) {\n          this.swapWithSibling(e.captured.tree, this.tree);\n        } else if (this.tree.isBranch()) {\n          this.moveNodeToThisTreeAndRemoveFromPreviousOne(e, this.tree);\n        } else {\n          this.moveNodeToParentTreeAndRemoveFromPreviousOne(e, this.tree);\n        }\n      })\n    );\n\n    this.subscriptions.push(\n      merge(this.treeService.nodeChecked$, this.treeService.nodeUnchecked$)\n        .pipe(filter((e: NodeCheckedEvent) => this.eventContainsId(e) && this.tree.hasChild(e.node)))\n        .subscribe((e: NodeCheckedEvent) => this.updateCheckboxState())\n    );\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    this.controller = new TreeController(this);\n  }\n\n  public ngOnDestroy(): void {\n    if (get(this.tree, 'node.id', '')) {\n      this.treeService.deleteController(this.tree.node.id);\n    }\n\n    this.subscriptions.forEach(sub => sub && sub.unsubscribe());\n  }\n\n  private swapWithSibling(sibling: Tree, tree: Tree): void {\n    tree.swapWithSibling(sibling);\n    this.treeService.fireNodeMoved(sibling, sibling.parent);\n  }\n\n  private moveNodeToThisTreeAndRemoveFromPreviousOne(e: NodeDraggableEvent, tree: Tree): void {\n    this.treeService.fireNodeRemoved(e.captured.tree);\n    const addedChild = tree.addChild(e.captured.tree);\n    this.treeService.fireNodeMoved(addedChild, e.captured.tree.parent);\n  }\n\n  private moveNodeToParentTreeAndRemoveFromPreviousOne(e: NodeDraggableEvent, tree: Tree): void {\n    this.treeService.fireNodeRemoved(e.captured.tree);\n    const addedSibling = tree.addSibling(e.captured.tree, tree.positionInParent);\n    this.treeService.fireNodeMoved(addedSibling, e.captured.tree.parent);\n  }\n\n  public onNodeSelected(e: { button: number }): void {\n    if (!this.tree.selectionAllowed) {\n      return;\n    }\n\n    if (EventUtils.isLeftButtonClicked(e as MouseEvent)) {\n      this.isSelected = true;\n      this.treeService.fireNodeSelected(this.tree);\n    }\n  }\n\n  public onNodeUnselected(e: { button: number }): void {\n    if (!this.tree.selectionAllowed) {\n      return;\n    }\n\n    if (EventUtils.isLeftButtonClicked(e as MouseEvent)) {\n      this.isSelected = false;\n      this.treeService.fireNodeUnselected(this.tree);\n    }\n  }\n\n  public showRightMenu(e: MouseEvent): void {\n    if (!this.tree.hasRightMenu()) {\n      return;\n    }\n\n    if (EventUtils.isRightButtonClicked(e)) {\n      this.isRightMenuVisible = !this.isRightMenuVisible;\n      this.nodeMenuService.hideMenuForAllNodesExcept(this.nodeElementRef);\n    }\n    e.preventDefault();\n  }\n\n  public showLeftMenu(e: MouseEvent): void {\n    if (!this.tree.hasLeftMenu()) {\n      return;\n    }\n\n    if (EventUtils.isLeftButtonClicked(e)) {\n      this.isLeftMenuVisible = !this.isLeftMenuVisible;\n      this.nodeMenuService.hideMenuForAllNodesExcept(this.nodeElementRef);\n      if (this.isLeftMenuVisible) {\n        e.preventDefault();\n      }\n    }\n  }\n\n  public onMenuItemSelected(e: NodeMenuItemSelectedEvent): void {\n    switch (e.nodeMenuItemAction) {\n      case NodeMenuItemAction.NewTag:\n        this.onNewSelected(e);\n        break;\n      case NodeMenuItemAction.NewFolder:\n        this.onNewSelected(e);\n        break;\n      case NodeMenuItemAction.Rename:\n        this.onRenameSelected();\n        break;\n      case NodeMenuItemAction.Remove:\n        this.onRemoveSelected();\n        break;\n      case NodeMenuItemAction.Custom:\n        this.onCustomSelected();\n        this.treeService.fireMenuItemSelected(this.tree, e.nodeMenuItemSelected);\n        break;\n      default:\n        throw new Error(`Chosen menu item doesn't exist`);\n    }\n  }\n\n  private onNewSelected(e: NodeMenuItemSelectedEvent): void {\n    this.tree.createNode(e.nodeMenuItemAction === NodeMenuItemAction.NewFolder);\n    this.isRightMenuVisible = false;\n    this.isLeftMenuVisible = false;\n  }\n\n  private onRenameSelected(): void {\n    this.tree.markAsBeingRenamed();\n    this.isRightMenuVisible = false;\n    this.isLeftMenuVisible = false;\n  }\n\n  private onRemoveSelected(): void {\n    this.treeService.deleteController(get(this.tree, 'node.id', ''));\n    this.treeService.fireNodeRemoved(this.tree);\n  }\n\n  private onCustomSelected(): void {\n    this.isRightMenuVisible = false;\n    this.isLeftMenuVisible = false;\n  }\n\n  public onSwitchFoldingType(): void {\n    this.tree.switchFoldingType();\n    this.treeService.fireNodeSwitchFoldingType(this.tree);\n  }\n\n  public applyNewValue(e: NodeEditableEvent): void {\n    if ((e.action === NodeEditableEventAction.Cancel || this.tree.isNew()) && Tree.isValueEmpty(e.value)) {\n      return this.treeService.fireNodeRemoved(this.tree);\n    }\n\n    if (this.tree.isNew()) {\n      this.tree.value = e.value;\n      this.treeService.fireNodeCreated(this.tree);\n    }\n\n    if (this.tree.isBeingRenamed()) {\n      const oldValue = this.tree.value;\n      this.tree.value = e.value;\n      this.treeService.fireNodeRenamed(oldValue, this.tree);\n    }\n\n    this.tree.markAsModified();\n  }\n\n  public shouldShowInputForTreeValue(): boolean {\n    return this.tree.isNew() || this.tree.isBeingRenamed();\n  }\n\n  public isRootHidden(): boolean {\n    return this.tree.isRoot() && !this.settings.rootIsVisible;\n  }\n\n  public hasCustomMenu(): boolean {\n    return this.tree.hasCustomMenu();\n  }\n\n  public switchNodeCheckStatus() {\n    if (!this.tree.checked) {\n      this.onNodeChecked();\n    } else {\n      this.onNodeUnchecked();\n    }\n  }\n\n  public onNodeChecked(): void {\n    if (!this.checkboxElementRef) {\n      return;\n    }\n\n    this.checkboxElementRef.nativeElement.indeterminate = false;\n    this.treeService.fireNodeChecked(this.tree);\n    this.executeOnChildController(controller => controller.check());\n    this.tree.checked = true;\n  }\n\n  public onNodeUnchecked(): void {\n    if (!this.checkboxElementRef) {\n      return;\n    }\n\n    this.checkboxElementRef.nativeElement.indeterminate = false;\n    this.treeService.fireNodeUnchecked(this.tree);\n    this.executeOnChildController(controller => controller.uncheck());\n    this.tree.checked = false;\n  }\n\n  private executeOnChildController(executor: (controller: TreeController) => void) {\n    if (this.tree.hasLoadedChildern()) {\n      this.tree.children.forEach((child: Tree) => {\n        const controller = this.treeService.getController(child.id);\n        if (!isNil(controller)) {\n          executor(controller);\n        }\n      });\n    }\n  }\n\n  updateCheckboxState(): void {\n    // Calling setTimeout so the value of isChecked will be updated and after that I'll check the children status.\n    setTimeout(() => {\n      const checkedChildrenAmount = this.tree.checkedChildrenAmount();\n      if (checkedChildrenAmount === 0) {\n        this.checkboxElementRef.nativeElement.indeterminate = false;\n        this.tree.checked = false;\n        this.treeService.fireNodeUnchecked(this.tree);\n      } else if (checkedChildrenAmount === this.tree.loadedChildrenAmount()) {\n        this.checkboxElementRef.nativeElement.indeterminate = false;\n        this.tree.checked = true;\n        this.treeService.fireNodeChecked(this.tree);\n      } else {\n        this.tree.checked = false;\n        this.checkboxElementRef.nativeElement.indeterminate = true;\n        this.treeService.fireNodeIndetermined(this.tree);\n      }\n    });\n  }\n\n  private eventContainsId(event: NodeEvent): boolean {\n    if (!event.node.id) {\n      console.warn(\n        '\"Node with checkbox\" feature requires a unique id assigned to every node, please consider to add it.'\n      );\n      return false;\n    }\n    return true;\n  }\n}\n","import {\n  Component,\n  ContentChild,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { TreeService } from './tree.service';\nimport * as TreeTypes from './tree.types';\n\nimport { MenuItemSelectedEvent, NodeCheckedEvent, NodeEvent, NodeUncheckedEvent } from './tree.events';\n\nimport { Tree } from './tree';\nimport { TreeController } from './tree-controller';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'tree',\n  template: `<tree-internal #rootComponent [tree]=\"tree\" [settings]=\"settings\" [template]=\"template\"></tree-internal>`,\n  providers: [TreeService]\n})\nexport class TreeComponent implements OnInit, OnChanges, OnDestroy {\n  private static EMPTY_TREE: Tree = new Tree({ value: '' });\n\n  /* tslint:disable:no-input-rename */\n  @Input('tree') public treeModel: TreeTypes.TreeModel;\n  /* tslint:enable:no-input-rename */\n\n  @Input() public settings: TreeTypes.Ng2TreeSettings;\n\n  @Output() public nodeCreated: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeRemoved: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeRenamed: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeSelected: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeUnselected: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeMoved: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeExpanded: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeCollapsed: EventEmitter<any> = new EventEmitter();\n\n  @Output() public loadNextLevel: EventEmitter<any> = new EventEmitter();\n\n  @Output() public nodeChecked: EventEmitter<NodeCheckedEvent> = new EventEmitter();\n\n  @Output() public nodeUnchecked: EventEmitter<NodeUncheckedEvent> = new EventEmitter();\n\n  @Output() public menuItemSelected: EventEmitter<any> = new EventEmitter();\n\n  public tree: Tree;\n\n  @ViewChild('rootComponent', { static: false })\n  public rootComponent;\n\n  @ContentChild(TemplateRef, { static: false })\n  public template;\n\n  private subscriptions: Subscription[] = [];\n\n  public constructor(@Inject(TreeService) private treeService: TreeService) {}\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (!this.treeModel) {\n      this.tree = TreeComponent.EMPTY_TREE;\n    } else {\n      this.tree = new Tree(this.treeModel);\n    }\n  }\n\n  public ngOnInit(): void {\n    this.subscriptions.push(\n      this.treeService.nodeRemoved$.subscribe((e: NodeEvent) => {\n        this.nodeRemoved.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeRenamed$.subscribe((e: NodeEvent) => {\n        this.nodeRenamed.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeCreated$.subscribe((e: NodeEvent) => {\n        this.nodeCreated.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeSelected$.subscribe((e: NodeEvent) => {\n        this.nodeSelected.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeUnselected$.subscribe((e: NodeEvent) => {\n        this.nodeUnselected.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeMoved$.subscribe((e: NodeEvent) => {\n        this.nodeMoved.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeExpanded$.subscribe((e: NodeEvent) => {\n        this.nodeExpanded.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeCollapsed$.subscribe((e: NodeEvent) => {\n        this.nodeCollapsed.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.menuItemSelected$.subscribe((e: MenuItemSelectedEvent) => {\n        this.menuItemSelected.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.loadNextLevel$.subscribe((e: NodeEvent) => {\n        this.loadNextLevel.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeChecked$.subscribe((e: NodeCheckedEvent) => {\n        this.nodeChecked.emit(e);\n      })\n    );\n\n    this.subscriptions.push(\n      this.treeService.nodeUnchecked$.subscribe((e: NodeUncheckedEvent) => {\n        this.nodeUnchecked.emit(e);\n      })\n    );\n  }\n\n  public getController(): TreeController {\n    return this.rootComponent.controller;\n  }\n\n  public getControllerByNodeId(id: number | string): TreeController {\n    return this.treeService.getController(id);\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach(sub => sub && sub.unsubscribe());\n  }\n}\n","import './rxjs-imports';\n\nimport { NgModule } from '@angular/core';\nimport { TreeComponent } from './tree.component';\nimport { TreeInternalComponent } from './tree-internal.component';\nimport { CommonModule } from '@angular/common';\nimport { NodeDraggableDirective } from './draggable/node-draggable.directive';\nimport { NodeDraggableService } from './draggable/node-draggable.service';\nimport { NodeEditableDirective } from './editable/node-editable.directive';\nimport { NodeMenuComponent } from './menu/node-menu.component';\nimport { NodeMenuService } from './menu/node-menu.service';\nimport { TreeService } from './tree.service';\nimport { SafeHtmlPipe } from './utils/safe-html.pipe';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    NodeDraggableDirective,\n    TreeComponent,\n    NodeEditableDirective,\n    NodeMenuComponent,\n    TreeInternalComponent,\n    SafeHtmlPipe\n  ],\n  exports: [TreeComponent],\n  providers: [NodeDraggableService, NodeMenuService, TreeService]\n})\nexport class TreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","EventUtils.isLeftButtonClicked","EventUtils.isRightButtonClicked","i1.NodeMenuService","i2.TreeService","i4.NodeDraggableDirective","i5.NodeEditableDirective","i6.NodeMenuComponent","i7.SafeHtmlPipe","i1.TreeInternalComponent"],"mappings":"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"}