{"version":3,"file":"ak-tree-view.mjs","sources":["../../../projects/tree/src/lib/events/drag-event.model.ts","../../../projects/tree/src/lib/node/node-transfert.event.ts","../../../projects/tree/src/lib/constants/css.enum.ts","../../../projects/tree/src/lib/utils.ts","../../../projects/tree/src/lib/node/node.model.ts","../../../projects/tree/src/lib/config.model.ts","../../../projects/tree/src/lib/node/node-to-transfert.directive.ts","../../../projects/tree/src/lib/services/converter.service.ts","../../../projects/tree/src/lib/tree.control.ts","../../../projects/tree/src/lib/node/node-toggler/node-toggler.component.ts","../../../projects/tree/src/lib/node/node-toggler/node-toggler.component.html","../../../projects/tree/src/lib/events/drop-event.model.ts","../../../projects/tree/src/lib/constants/attribute.enum.ts","../../../projects/tree/src/lib/node/node.directive.ts","../../../projects/tree/src/lib/view/drop-slot.directive.ts","../../../projects/tree/src/lib/node/node.component.ts","../../../projects/tree/src/lib/node/node.component.html","../../../projects/tree/src/lib/view/view-root/view-root.component.ts","../../../projects/tree/src/lib/view/view-root/view-root.component.html","../../../projects/tree/src/lib/view/view.component.ts","../../../projects/tree/src/lib/tree.module.ts","../../../projects/tree/src/public-api.ts","../../../projects/tree/src/ak-tree-view.ts"],"sourcesContent":["import { TreeNode } from \"../node/node.model\";\r\n\r\nexport class TreeDragEvent {\r\n  private _source?: Array<TreeNode>;\r\n  private _index?: number;\r\n  private _node: TreeNode;\r\n\r\n  constructor(node: TreeNode, index?: number, source?: Array<TreeNode>) {\r\n    this._source = source;\r\n    this._node = node;\r\n    this._index = index;\r\n  }\r\n\r\n  get node(): TreeNode {\r\n    return this._node;\r\n  }\r\n\r\n  get source(): Array<TreeNode> | undefined {\r\n    return this._source;\r\n  }\r\n\r\n  get index(): number | undefined {\r\n    return this._index;\r\n  }\r\n}\r\n","import { TreeDragEvent } from \"../events/drag-event.model\";\r\nimport { TreeNode } from \"./node.model\";\r\n\r\nexport class NodeTransfertStart {\r\n  public readonly $dragEvent: TreeDragEvent;\r\n  constructor(node: TreeNode) {\r\n    this.$dragEvent = new TreeDragEvent(node.clone());\r\n  }\r\n}\r\n\r\nexport class NodeTransfertEnd {\r\n  public readonly node: TreeNode;\r\n  constructor(node: TreeNode) {\r\n    this.node = node.clone();\r\n  }\r\n}\r\n","export enum CSS {\r\n  NODE = \"tree-node\",\r\n  NODE_LEVEL = \"tree-node-level-\",\r\n  NODE_WRAPPER = \"tree-node-wrapper\",\r\n  NODE_CONTAINER = \"tree-node-container\",\r\n  NODE_CONTAINER_LEFT = \"tree-node-container-left\",\r\n  NODE_CONTENT = \"tree-node-content\",\r\n  NODE_TOGGLER = \"tree-node-toggle-children\",\r\n  NODE_CHILDREN = \"tree-node-children\",\r\n  NODE_BRANCHLINE = \"tree-node-branchline\",\r\n  NODE_PARENT = \"tree-node-parent\",\r\n  NODE_LEAF = \"tree-node-leaf\",\r\n  DROP_SLOT = \"tree-node-drop-slot\",\r\n  NODE_MOVING = \"moving-state\",\r\n  DROP_SLOT_ACTIVE = \"active\",\r\n  DROP_SLOT_FOCUSED = \"focused\",\r\n  NODE_DRAGGABLE = \"draggable\",\r\n  DRAG_ENTER = \"dragenter\",\r\n  DRAG_OVER = \"dragover\",\r\n  DRAGGING = \"dragging\",\r\n}\r\n\r\nexport const TREE_CLASSES = [\r\n  CSS.NODE,\r\n  CSS.NODE_LEVEL,\r\n  CSS.NODE_WRAPPER,\r\n  CSS.NODE_CONTAINER,\r\n  CSS.NODE_CONTAINER_LEFT,\r\n  CSS.NODE_CONTENT,\r\n  CSS.NODE_TOGGLER,\r\n  CSS.NODE_CHILDREN,\r\n  CSS.NODE_PARENT,\r\n  CSS.NODE_LEAF,\r\n  CSS.DROP_SLOT,\r\n  CSS.NODE_MOVING,\r\n  CSS.DROP_SLOT_ACTIVE,\r\n  CSS.NODE_DRAGGABLE,\r\n  CSS.DRAG_OVER,\r\n  CSS.DRAGGING,\r\n] as string[];\r\n","export type Dictionary = {\r\n  [id: string]: boolean;\r\n};\r\n\r\nexport function uuid(): string {\r\n  return Date.now() + (Math.random() * 10000).toFixed();\r\n}\r\n\r\nexport function copy<T>(object: T): T {\r\n  return JSON.parse(JSON.stringify(object));\r\n}\r\n\r\nexport function isDefined(value: any): boolean {\r\n  return value !== undefined && value !== null;\r\n}\r\n","import { TREE_CLASSES } from \"../constants/css.enum\";\r\nimport { Config } from \"../config.model\";\r\nimport { copy, uuid } from \"../utils\";\r\n\r\nexport class TreeNode {\r\n  public readonly id: string;\r\n  private _data: any;\r\n  private _isExpanded!: boolean;\r\n  private _children!: TreeNode[];\r\n  private _hasLazyChildren: boolean;\r\n  private _isLoadingChildren: boolean;\r\n  private _classes: string[];\r\n\r\n  get classes(): string[] {\r\n    return this._classes;\r\n  }\r\n\r\n  get name(): string {\r\n    return this.data?.name || this.data?.title || this.data?.label;\r\n  }\r\n\r\n  get parent(): TreeNode | null | undefined {\r\n    return this._parent;\r\n  }\r\n\r\n  set parent(value: TreeNode | null | undefined) {\r\n    this._parent = value && value.isVirtualRoot ? null : value;\r\n  }\r\n\r\n  get isVirtualRoot(): boolean {\r\n    return !this._data && !this.parent;\r\n  }\r\n\r\n  get children(): Array<TreeNode> {\r\n    return this._children;\r\n  }\r\n\r\n  set children(values: Array<TreeNode>) {\r\n    this._children = values;\r\n  }\r\n\r\n  get data(): any {\r\n    return this._data;\r\n  }\r\n\r\n  set data(value: any) {\r\n    if (value) {\r\n      this._data = value;\r\n    }\r\n  }\r\n\r\n  get isRoot(): boolean {\r\n    return this.parent ? false : true;\r\n  }\r\n\r\n  get isLeaf(): boolean {\r\n    return this.children ? false : true;\r\n  }\r\n\r\n  get canHaveChildren(): boolean {\r\n    return this.hasLazyChildren || this.children ? true : false;\r\n  }\r\n\r\n  get hasChildren(): boolean {\r\n    return this.canHaveChildren && this.children?.length > 0;\r\n  }\r\n\r\n  get isChildrenEmpty(): boolean {\r\n    return !this.hasChildren;\r\n  }\r\n\r\n  get parentChildren(): Array<TreeNode> | undefined {\r\n    return this.parent?.children;\r\n  }\r\n\r\n  get hasLazyChildren(): boolean {\r\n    return this._hasLazyChildren;\r\n  }\r\n\r\n  get isLoadingChildren(): boolean {\r\n    return this._isLoadingChildren;\r\n  }\r\n\r\n  get isExpanded(): boolean {\r\n    return this._isExpanded;\r\n  }\r\n\r\n  get hideToggler(): boolean {\r\n    return this.config.hideToggler;\r\n  }\r\n\r\n  get padding(): number {\r\n    return this.config.nodePadding;\r\n  }\r\n\r\n  get isDraggable(): boolean {\r\n    return this.config.canDrag ? this.config.canDrag?.call(null, this) : true;\r\n  }\r\n\r\n  get isDroppable(): boolean {\r\n    return this.config.canDrop ? this.config.canDrop?.call(null, this) : true;\r\n  }\r\n\r\n  constructor(\r\n    data: any,\r\n    private _parent: TreeNode | null | undefined,\r\n    public readonly config: Config\r\n  ) {\r\n    this.id = uuid();\r\n    this._hasLazyChildren = data?.hasLazyChildren || false;\r\n    this._isLoadingChildren = false;\r\n    this._classes = [];\r\n\r\n    if (data) {\r\n      this._isExpanded = data.isExpanded || false;\r\n      const dataObject = copy(data);\r\n      this._data = dataObject;\r\n    }\r\n  }\r\n\r\n  public toggle(): void {\r\n    this._isExpanded ? this.collapse() : this.expand();\r\n  }\r\n\r\n  public expand(): void {\r\n    if (this.canHaveChildren) {\r\n      this._isExpanded = this._data.isExpanded = true;\r\n      this.config.onExpand?.call(null, this);\r\n      if (this.hasLazyChildren && !this._isLoadingChildren) {\r\n        this._isLoadingChildren = true;\r\n        (this.config.lazyChildrenLoader?.call(null, this) as Promise<any>).then(\r\n          async (children) => {\r\n            this.children = await TreeNode.toTreeNode(\r\n              children,\r\n              this.config,\r\n              this\r\n            );\r\n            this._isLoadingChildren = this._hasLazyChildren = false;\r\n          }\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  public collapse(): void {\r\n    if (this.canHaveChildren) {\r\n      this._isExpanded = this._data.isExpanded = false;\r\n      this.config.onCollapse?.call(null, this);\r\n    }\r\n  }\r\n\r\n  public exist(node: TreeNode): boolean {\r\n    if (!this._children) {\r\n      return false;\r\n    }\r\n\r\n    return this.executeExistCheck(this._children, node);\r\n  }\r\n\r\n  public clone(): TreeNode {\r\n    return this.executeClone(this);\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param classes List of classes to add\r\n   * @param onChildren Add classes to children\r\n   */\r\n  public addClasses(classes: string[], onChildren?: boolean): void {\r\n    if (classes) {\r\n      classes.forEach((name) => {\r\n        if (this._classes.indexOf(name) < 0 && !TREE_CLASSES.includes(name)) {\r\n          this._classes.push(name);\r\n        }\r\n      });\r\n\r\n      if (onChildren) {\r\n        this.children?.forEach((child) => {\r\n          child.addClasses(classes, onChildren);\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param classes List of classes to remove\r\n   * @param onChildren Remove classes to children\r\n   */\r\n  public removeClasses(classes: string[], onChildren?: boolean): void {\r\n    if (classes) {\r\n      this._classes = this._classes.filter((c) => !classes.includes(c));\r\n    }\r\n\r\n    if (onChildren) {\r\n      this.children?.forEach((child) => {\r\n        child.removeClasses(classes, onChildren);\r\n      });\r\n    }\r\n  }\r\n\r\n  public static async toTreeNode(\r\n    nodes: any[],\r\n    config: Config,\r\n    parent?: TreeNode | null | undefined\r\n  ): Promise<TreeNode[]> {\r\n    return new Promise(async (resolve) => {\r\n      let treeNodes = new Array<TreeNode>();\r\n      if (nodes && Array.isArray(nodes)) {\r\n        for (let i = 0; i < nodes.length; i++) {\r\n          const node = nodes[i];\r\n          const treeNode = new TreeNode(node, parent, config);\r\n          if (node.children) {\r\n            treeNode.children = await this.toTreeNode(\r\n              node.children,\r\n              config,\r\n              treeNode\r\n            );\r\n          }\r\n\r\n          treeNodes.push(treeNode);\r\n        }\r\n      }\r\n\r\n      resolve(treeNodes);\r\n    });\r\n  }\r\n\r\n  private executeClone(node: TreeNode): TreeNode {\r\n    const clone = new TreeNode(node.data, node.parent, this.config);\r\n    if (node.canHaveChildren) {\r\n      clone.children = [];\r\n    }\r\n\r\n    if (node.hasChildren && clone.children) {\r\n      node.children.forEach((child) => {\r\n        clone.children.push(this.executeClone(child));\r\n      });\r\n    }\r\n\r\n    return clone;\r\n  }\r\n\r\n  private executeExistCheck(nodes: TreeNode[], target: TreeNode): boolean {\r\n    let found = false;\r\n    for (const node of nodes) {\r\n      if (node.id === target.id) {\r\n        return true;\r\n      } else if (node.children) {\r\n        found = this.executeExistCheck(node.children, target);\r\n      }\r\n    }\r\n\r\n    return found;\r\n  }\r\n}\r\n","import { TreeConfig } from \"./config.interface\";\r\nimport { TreeNode } from \"./node/node.model\";\r\n\r\nexport class Config implements TreeConfig {\r\n  public readonly MIN_NODE_PADDING = 20;\r\n\r\n  lazyChildrenLoader?: (node: TreeNode) => Promise<any[]>;\r\n  canDrag?: (node: TreeNode) => boolean;\r\n  canDrop?: (node: TreeNode) => boolean;\r\n  onExpand?: (node: TreeNode) => void;\r\n  onCollapse?: (node: TreeNode) => void;\r\n\r\n  constructor(public userConfig: TreeConfig) {\r\n    this.lazyChildrenLoader = userConfig.lazyChildrenLoader;\r\n    this.canDrag = userConfig.canDrag;\r\n    this.canDrop = userConfig.canDrop;\r\n    this.onExpand = userConfig.onExpand;\r\n    this.onCollapse = userConfig.onCollapse;\r\n  }\r\n\r\n  get hasBranchline(): boolean {\r\n    return this.userConfig.branchline ? true : false;\r\n  }\r\n\r\n  get branchlinePadding(): number {\r\n    return this.userConfig.branchlinePadding || 0;\r\n  }\r\n\r\n  get nodePadding(): number {\r\n    const padding = this.userConfig?.nodePadding;\r\n    return padding && padding >= this.MIN_NODE_PADDING\r\n      ? padding\r\n      : this.MIN_NODE_PADDING;\r\n  }\r\n\r\n  get expandAfterDrop(): boolean {\r\n    return this.userConfig.expandAfterDrop ? true : false;\r\n  }\r\n\r\n  get hideToggler(): boolean {\r\n    return this.userConfig.hideToggler ? true : false;\r\n  }\r\n\r\n  get showDragHandler(): boolean {\r\n    return this.userConfig.showDragHandler ? true : false;\r\n  }\r\n\r\n  get slotFocusTimeOut(): number {\r\n    return this.userConfig.slotFocusTimeOut || 300;\r\n  }\r\n\r\n  get nodeOverTimeOut(): number {\r\n    return this.userConfig.nodeOverTimeOut || 600;\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Input,\r\n  OnInit,\r\n  Renderer2,\r\n} from \"@angular/core\";\r\nimport { TreeViewComponent } from \"../view/view.component\";\r\nimport { NodeTransfertEnd, NodeTransfertStart } from \"./node-transfert.event\";\r\nimport { CSS } from \"../constants/css.enum\";\r\nimport { DndEvent } from \"../dom.event\";\r\nimport { TreeNode } from \"./node.model\";\r\nimport { Config } from \"../config.model\";\r\n\r\n@Directive({\r\n  selector: \"[treeNodeToTransfert]\",\r\n})\r\nexport class NodeToTransfertDirective implements OnInit {\r\n  @Input() public tree!: TreeViewComponent;\r\n  @Input() public active: boolean;\r\n  @Input() public data: any;\r\n\r\n  private node!: TreeNode;\r\n\r\n  constructor(private renderer: Renderer2, private el: ElementRef) {\r\n    this.active = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.active) {\r\n      this.initTreeNode();\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragstart\", [\"$event\"])\r\n  private onDragStart($event: DndEvent): void {\r\n    $event.stopPropagation();\r\n    this.tree.startNodeTransfert(new NodeTransfertStart(this.node));\r\n    this.renderer.addClass(this.el.nativeElement, CSS.DRAGGING);\r\n  }\r\n\r\n  @HostListener(\"dragend\", [\"$event\"])\r\n  private onDragEnd($event: DragEvent): void {\r\n    $event.stopPropagation();\r\n    $event.preventDefault();\r\n    this.renderer.removeClass(this.el.nativeElement, CSS.DRAGGING);\r\n    this.tree.endNodeTransfert(new NodeTransfertEnd(this.node));\r\n  }\r\n\r\n  private async initTreeNode(): Promise<void> {\r\n    if (this.tree && this.data && !this.node) {\r\n      this.node = (\r\n        await TreeNode.toTreeNode([this.data], new Config(this.tree.config))\r\n      )[0];\r\n      this.renderer.setAttribute(this.el.nativeElement, \"draggable\", \"true\");\r\n    } else {\r\n      throw new Error(\"Missing tree or data\");\r\n    }\r\n  }\r\n}\r\n","import { TreeNode } from \"../node/node.model\";\r\n\r\nexport class ConverterService {\r\n  public static async toJSON(treeNodes?: TreeNode[]): Promise<Object[]> {\r\n    return new Promise(async (resolve) => {\r\n      const nodes = [];\r\n      if (treeNodes && Array.isArray(treeNodes)) {\r\n        for (let i = 0; i < treeNodes.length; i++) {\r\n          const treeNode = treeNodes[i];\r\n          const node = treeNode.data as any;\r\n          if (treeNode.children) {\r\n            node.children = await this.toJSON(treeNode.children);\r\n          }\r\n\r\n          nodes.push(node);\r\n        }\r\n      }\r\n\r\n      resolve(nodes);\r\n    });\r\n  }\r\n}\r\n","import { ConverterService } from \"./services/converter.service\";\r\nimport { MovingNode } from \"./node/dragged-node.interface\";\r\nimport { TreeDragEvent } from \"./events/drag-event.model\";\r\nimport { DropEvent } from \"./events/drop-event.interface\";\r\nimport { BehaviorSubject, Observable } from \"rxjs\";\r\nimport { TreeConfig } from \"./config.interface\";\r\nimport { TreeNode } from \"./node/node.model\";\r\nimport { Config } from \"./config.model\";\r\n\r\nexport class TreeControl {\r\n  private stateSubject: BehaviorSubject<TreeNode | null>;\r\n  private _movingNode: MovingNode | null | undefined;\r\n  public state$: Observable<TreeNode | null>;\r\n  private editableSubject: BehaviorSubject<boolean>;\r\n  public editable$: Observable<boolean>;\r\n  public nodeIsMovingSubject: BehaviorSubject<boolean>;\r\n  public nodeIsMoving$: Observable<boolean>;\r\n  private _config!: Config;\r\n\r\n  private $dragEvent!: TreeDragEvent | null;\r\n\r\n  get movingNode(): MovingNode | null | undefined {\r\n    return this._movingNode;\r\n  }\r\n\r\n  get config(): Config {\r\n    return this._config;\r\n  }\r\n\r\n  get dragEvent(): TreeDragEvent | null {\r\n    return this.$dragEvent;\r\n  }\r\n\r\n  get isEditMode(): boolean {\r\n    return this.editableSubject.value;\r\n  }\r\n\r\n  constructor() {\r\n    this.stateSubject = new BehaviorSubject<TreeNode | null>(null);\r\n    this.state$ = this.stateSubject.asObservable();\r\n\r\n    this.editableSubject = new BehaviorSubject<boolean>(false);\r\n    this.editable$ = this.editableSubject.asObservable();\r\n\r\n    this.nodeIsMovingSubject = new BehaviorSubject<boolean>(false);\r\n    this.nodeIsMoving$ = this.nodeIsMovingSubject.asObservable();\r\n  }\r\n\r\n  public init(nodes: any[], config: TreeConfig): void {\r\n    this._config = new Config(config);\r\n    this.buildTree(nodes);\r\n  }\r\n\r\n  public toggleEditMode(): void {\r\n    this.editableSubject.value\r\n      ? this.editableSubject.next(false)\r\n      : this.editableSubject.next(true);\r\n  }\r\n\r\n  public setMovingNode(movingNode?: MovingNode): void {\r\n    if (movingNode) {\r\n      this.nodeIsMovingSubject.next(true);\r\n      this._movingNode = movingNode;\r\n    } else {\r\n      this.nodeIsMovingSubject.next(false);\r\n      this._movingNode = null;\r\n    }\r\n  }\r\n\r\n  public setDragEvent($event: TreeDragEvent): void {\r\n    if (this.editableSubject.value) {\r\n      this.$dragEvent = $event;\r\n    }\r\n  }\r\n\r\n  public unSetDragEvent(): void {\r\n    if (this.editableSubject.value) {\r\n      this.$dragEvent = null;\r\n    }\r\n  }\r\n\r\n  public executeDropEvent($event: DropEvent): void {\r\n    if (!this.$dragEvent) {\r\n      throw new Error(\"Drag event is not set !\");\r\n    }\r\n\r\n    if (\r\n      $event.isMovingInArray &&\r\n      $event.sourceIndex !== undefined &&\r\n      $event.sourceIndex !== null\r\n    ) {\r\n      this.moveNodeInArray(\r\n        $event.sourceIndex,\r\n        $event.target.children,\r\n        $event.targetIndex\r\n      );\r\n    } else if ($event.isTransfertToArray) {\r\n      this.transfertNodeToArray($event.node, $event.target, $event.targetIndex);\r\n    } else if ($event.source) {\r\n      this.moveNodeToArray(\r\n        $event.node,\r\n        $event.source,\r\n        $event.target,\r\n        $event.targetIndex\r\n      );\r\n    }\r\n\r\n    this.setMovingNode();\r\n    this.unSetDragEvent();\r\n    setTimeout(() => {\r\n      if (this.config.expandAfterDrop) {\r\n        $event.node.expand();\r\n      }\r\n    }, 500);\r\n  }\r\n\r\n  public expandAll(): void {\r\n    this.expandOrCollapseAll(this.stateSubject.value, true);\r\n  }\r\n\r\n  public collapseAll(): void {\r\n    this.expandOrCollapseAll(this.stateSubject.value, false);\r\n  }\r\n\r\n  public deleteNode(node: TreeNode) {\r\n    if (node.parent?.children) {\r\n      this.removeNode(node, node.parent?.children);\r\n    } else if (this.stateSubject.value?.children) {\r\n      // Note : Removing node at root level\r\n      this.removeNode(node, this.stateSubject.value?.children);\r\n    }\r\n  }\r\n\r\n  public toJSON(): Promise<Object[]> {\r\n    return ConverterService.toJSON(this.stateSubject.value?.children);\r\n  }\r\n\r\n  public fromJSON(nodes: any[]): void {\r\n    this.buildTree(nodes);\r\n  }\r\n\r\n  /***\r\n   * To add node to root\r\n   */\r\n  public addNode(node: any, firstPosition?: boolean): void {\r\n    if (!node || Array.isArray(node)) {\r\n      throw new Error(\"Invalid input !\");\r\n    }\r\n\r\n    TreeNode.toTreeNode([node], this.config).then((nodes) => {\r\n      if (this.stateSubject.value) {\r\n        firstPosition\r\n          ? this.stateSubject.value.children.unshift(nodes[0])\r\n          : this.stateSubject.value.children.push(nodes[0]);\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * To check if a dragged element can be dropped to view\r\n   * @param element dragged element\r\n   * @returns\r\n   */\r\n  public isAuthorize(element: HTMLElement): boolean {\r\n    return this.isEditMode;\r\n  }\r\n\r\n  private buildTree(nodes: any[]): void {\r\n    TreeNode.toTreeNode(nodes, this.config).then((treeNodes) => {\r\n      const virtualRoot = new TreeNode(null, null, this.config);\r\n      virtualRoot.children = treeNodes;\r\n      this.stateSubject.next(virtualRoot);\r\n    });\r\n  }\r\n\r\n  private expandOrCollapseAll(node: TreeNode | null, isExpand: boolean): void {\r\n    node?.children?.forEach((n) => {\r\n      isExpand ? n.expand() : n.collapse();\r\n      if (n.hasChildren) {\r\n        this.expandOrCollapseAll(n, isExpand);\r\n      }\r\n    });\r\n  }\r\n\r\n  private moveNodeToArray(\r\n    node: TreeNode,\r\n    source: Array<TreeNode>,\r\n    target: TreeNode,\r\n    index: number\r\n  ): void {\r\n    this.removeNode(node, source);\r\n    this.transfertNodeToArray(node, target, index);\r\n  }\r\n\r\n  private moveNodeInArray(\r\n    sourceIndex: number,\r\n    target: Array<TreeNode>,\r\n    index: number\r\n  ): void {\r\n    const i = sourceIndex === 0 && index > 0 ? index - 1 : index;\r\n    target.splice(i, 0, target.splice(sourceIndex, 1)[0]);\r\n  }\r\n\r\n  private transfertNodeToArray(\r\n    node: TreeNode,\r\n    target: TreeNode,\r\n    index: number\r\n  ): void {\r\n    node.parent = target;\r\n    target.children.splice(index, 0, node);\r\n  }\r\n\r\n  private removeNode(node: TreeNode, source: Array<TreeNode>): void {\r\n    const i = source?.findIndex((n) => n.id === node.id);\r\n    if (i > -1) {\r\n      source.splice(i, 1);\r\n    }\r\n  }\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { CSS } from \"../../constants/css.enum\"\r\nimport { TreeNode } from \"../node.model\";\r\n\r\n@Component({\r\n  selector: \"tree-node-toggler\",\r\n  templateUrl: \"./node-toggler.component.html\",\r\n  styleUrls: [\"./node-toggler.component.scss\"],\r\n})\r\nexport class NodeTogglerComponent {\r\n  @Input() public node!: TreeNode;\r\n\r\n  readonly css: typeof CSS = CSS;\r\n}\r\n","<div\r\n  [ngClass]=\"css.NODE_TOGGLER\"\r\n  (click)=\"node.toggle()\"\r\n  *ngIf=\"node.canHaveChildren && !node.hideToggler\"\r\n>\r\n  <span class=\"arrow\" [ngClass]=\"{ 'arrow-down': node.isExpanded }\"></span>\r\n</div>\r\n","import { DropEvent } from \"./drop-event.interface\";\r\nimport { TreeNode } from \"../node/node.model\";\r\n\r\nexport class TreeDropEvent implements DropEvent {\r\n  private _node: TreeNode;\r\n  private _sourceIndex: number | undefined;\r\n  private _source: Array<TreeNode> | undefined;\r\n  private _target: TreeNode;\r\n  private _targetIndex: number;\r\n  private _isMovingInArray: boolean;\r\n\r\n  constructor(\r\n    target: TreeNode,\r\n    targetIndex: number,\r\n    node: TreeNode,\r\n    source?: Array<TreeNode>,\r\n    sourceIndex?: number\r\n  ) {\r\n    this._node = node;\r\n    this._source = source;\r\n    this._target = target;\r\n    this._targetIndex = targetIndex;\r\n    this._sourceIndex = sourceIndex;\r\n\r\n    this._isMovingInArray = this._target?.children?.find(\r\n      (n) => n.id === this._node.id\r\n    )\r\n      ? true\r\n      : false;\r\n  }\r\n\r\n  get node(): TreeNode {\r\n    return this._node;\r\n  }\r\n\r\n  get source(): Array<TreeNode> | undefined {\r\n    return this._source;\r\n  }\r\n\r\n  get sourceIndex(): number | undefined {\r\n    return this._sourceIndex;\r\n  }\r\n\r\n  /**\r\n   * Target parent node\r\n   */\r\n  get target(): TreeNode {\r\n    return this._target;\r\n  }\r\n\r\n  get isMovingDown(): boolean {\r\n    return this._sourceIndex ? this._sourceIndex < this._targetIndex : false;\r\n  }\r\n\r\n  get targetIndex(): number {\r\n    return this.isMovingDown && this.isMovingInArray\r\n      ? this._targetIndex - 1\r\n      : this._targetIndex;\r\n  }\r\n\r\n  get isTransfertToArray(): boolean {\r\n    return !this._source && !this._sourceIndex;\r\n  }\r\n\r\n  get isMovingInArray(): boolean {\r\n    return this._isMovingInArray && !this.isTransfertToArray;\r\n  }\r\n}\r\n","export enum Attribute {\r\n  DRAGGABLE = \"draggable\",\r\n  NODE_LEVEL = \"node-level\"\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  Renderer2,\r\n  SimpleChange,\r\n  SimpleChanges,\r\n} from \"@angular/core\";\r\nimport { TreeDropEvent } from \"../events/drop-event.model\";\r\nimport { Attribute } from \"../constants/attribute.enum\";\r\nimport { TreeNode } from \"../node/node.model\";\r\nimport { TreeControl } from \"../tree.control\";\r\nimport { CSS } from \"../constants/css.enum\";\r\n\r\n@Directive({\r\n  selector: \"[treeNode]\",\r\n})\r\nexport class NodeDirective implements OnInit, OnChanges {\r\n  @Output() nodeDrop: EventEmitter<TreeDropEvent>;\r\n  @Output() dragStart: EventEmitter<void>;\r\n  @Output() dragEnter: EventEmitter<void>;\r\n  @Output() dragEnd: EventEmitter<void>;\r\n  @Input() public control!: TreeControl;\r\n  @Input() public node!: TreeNode;\r\n  @Input() public level!: number;\r\n  @Input() public enable: boolean | null;\r\n\r\n  private isExpandedBeforeDrag!: boolean;\r\n  private overTimeout!: any | null;\r\n\r\n  get nodeOverTimeOut(): number {\r\n    return this.control.config.nodeOverTimeOut;\r\n  }\r\n\r\n  constructor(private renderer: Renderer2, private el: ElementRef) {\r\n    this.renderer.addClass(this.el.nativeElement, CSS.NODE);\r\n    this.dragEnter = new EventEmitter();\r\n    this.dragStart = new EventEmitter();\r\n    this.dragEnd = new EventEmitter();\r\n    this.nodeDrop = new EventEmitter();\r\n    this.enable = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.renderer.setAttribute(\r\n      this.el.nativeElement,\r\n      Attribute.NODE_LEVEL,\r\n      (this.level || 0).toString()\r\n    );\r\n\r\n    this.renderer.addClass(\r\n      this.el.nativeElement,\r\n      CSS.NODE_LEVEL + (this.level || 0).toString()\r\n    );\r\n\r\n    this.node.canHaveChildren\r\n      ? this.renderer.addClass(this.el.nativeElement, CSS.NODE_PARENT)\r\n      : this.renderer.addClass(this.el.nativeElement, CSS.NODE_LEAF);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const enableChange = changes.enable as SimpleChange;\r\n    if (enableChange.currentValue && this.node.isDraggable) {\r\n      this.renderer.setAttribute(\r\n        this.el.nativeElement,\r\n        Attribute.DRAGGABLE,\r\n        \"true\"\r\n      );\r\n      this.renderer.addClass(this.el.nativeElement, CSS.NODE_DRAGGABLE);\r\n    } else {\r\n      this.renderer.removeAttribute(this.el.nativeElement, Attribute.DRAGGABLE);\r\n      this.renderer.removeClass(this.el.nativeElement, CSS.NODE_DRAGGABLE);\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragstart\", [\"$event\"])\r\n  onDragStart(e: DragEvent | any): void {\r\n    e.stopPropagation();\r\n    this.control.setMovingNode({ id: this.node.id });\r\n    this.renderer.addClass(e.target, CSS.DRAGGING);\r\n    this.isExpandedBeforeDrag = this.node.isExpanded;\r\n    this.dragStart.emit();\r\n    this.node.collapse();\r\n\r\n    e.dataTransfer.setDragImage(\r\n      this.el.nativeElement.querySelector(`.${CSS.NODE_CONTAINER}`),\r\n      0,\r\n      0\r\n    );\r\n  }\r\n\r\n  @HostListener(\"dragend\", [\"$event\"])\r\n  onDragEnd(e: DragEvent | any): void {\r\n    this.renderer.removeClass(e.target, CSS.DRAGGING);\r\n    this.control.setMovingNode();\r\n    this.stopOverTimeOut();\r\n    this.dragEnd.emit();\r\n\r\n    if (this.draggedItemIsAuthorize(e)) {\r\n      if (this.isExpandedBeforeDrag) {\r\n        this.node.expand();\r\n      }\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragenter\", [\"$event\"])\r\n  onDragEnter(e: DragEvent | any): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n\r\n    if (this.draggedItemIsAuthorize(e)) {\r\n      this.dragEnter.emit();\r\n      this.renderer.addClass(this.el.nativeElement, CSS.DRAG_ENTER);\r\n      this.startOverTimeOut();\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragleave\", [\"$event\"])\r\n  dragLeave(e: DragEvent | any): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n    this.stopOverTimeOut();\r\n    if (this.draggedItemIsAuthorize(e)) {\r\n      this.renderer.removeClass(this.el.nativeElement, CSS.DRAG_ENTER);\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragover\", [\"$event\"])\r\n  dragOver(e: DragEvent | any): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n  }\r\n\r\n  @HostListener(\"drop\", [\"$event\"])\r\n  drop(e: DragEvent | any): void {\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n    if (this.draggedItemIsAuthorize(e)) {\r\n      this.renderer.removeClass(this.el.nativeElement, CSS.DRAG_ENTER);\r\n      if (\r\n        !this.node?.hasLazyChildren &&\r\n        this.node.children &&\r\n        this.control.dragEvent &&\r\n        this.node.isDroppable\r\n      ) {\r\n        this.node.expand();\r\n        this.nodeDrop.emit(\r\n          new TreeDropEvent(\r\n            this.node,\r\n            0,\r\n            this.control.dragEvent?.node,\r\n            this.control.dragEvent?.source,\r\n            this.control.dragEvent?.index\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private draggedItemIsAuthorize(e: DragEvent | any): boolean {\r\n    return this.enable === true && e.target.id !== this.control.movingNode?.id;\r\n  }\r\n\r\n  private startOverTimeOut(): void {\r\n    if (\r\n      !this.overTimeout &&\r\n      this.node.canHaveChildren &&\r\n      !this.node.isExpanded\r\n    ) {\r\n      this.overTimeout = setTimeout(() => {\r\n        this.node.expand();\r\n      }, this.nodeOverTimeOut);\r\n    }\r\n  }\r\n\r\n  private stopOverTimeOut(): void {\r\n    if (this.overTimeout) {\r\n      clearTimeout(this.overTimeout);\r\n      this.overTimeout = null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  Renderer2,\r\n} from \"@angular/core\";\r\nimport { TreeDropEvent } from \"../events/drop-event.model\";\r\nimport { TreeNode } from \"../node/node.model\";\r\nimport { TreeControl } from \"../tree.control\";\r\nimport { CSS } from \"../constants/css.enum\";\r\nimport { DndEvent } from \"../dom.event\";\r\n\r\n@Directive({\r\n  selector: \"[treeDropSlot]\",\r\n})\r\nexport class DropSlotDirective {\r\n  @Output() slotDrop: EventEmitter<TreeDropEvent>;\r\n  @Input() public parent!: TreeNode | null;\r\n  @Input() public control!: TreeControl;\r\n  @Input() public index!: number;\r\n\r\n  private overTimeout!: any | null;\r\n\r\n  get slotFocusTimeOut(): number {\r\n    return this.control.config.slotFocusTimeOut;\r\n  }\r\n\r\n  constructor(private renderer: Renderer2, private el: ElementRef) {\r\n    this.renderer.addClass(this.el.nativeElement, CSS.DROP_SLOT);\r\n    this.slotDrop = new EventEmitter();\r\n    this.index = 0;\r\n  }\r\n\r\n  @HostListener(\"dragover\", [\"$event\"])\r\n  dragOver(e: DragEvent): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n  }\r\n\r\n  @HostListener(\"dragenter\", [\"$event\"])\r\n  dragEnter(e: DragEvent): void {\r\n    if (this.draggedItemIsAuthorize()) {\r\n      this.renderer.addClass(this.el.nativeElement, CSS.DROP_SLOT_ACTIVE);\r\n      this.overTimeout = setTimeout(() => {\r\n        this.renderer.addClass(this.el.nativeElement, CSS.DROP_SLOT_FOCUSED);\r\n      }, this.slotFocusTimeOut);\r\n    }\r\n  }\r\n\r\n  @HostListener(\"dragleave\", [\"$event\"])\r\n  dragLeave(e: DragEvent): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n    this.desactivate();\r\n  }\r\n\r\n  @HostListener(\"drop\", [\"$event\"])\r\n  onDrop(e: DndEvent): void {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n    this.desactivate();\r\n\r\n    if (this.draggedItemIsAuthorize()) {\r\n      if (this.parent?.canHaveChildren && this.control.dragEvent) {\r\n        this.slotDrop.emit(\r\n          new TreeDropEvent(\r\n            this.parent,\r\n            this.index,\r\n            this.control.dragEvent?.node,\r\n            this.control.dragEvent?.source,\r\n            this.control.dragEvent?.index\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private draggedItemIsAuthorize(): boolean {\r\n    return this.control.isEditMode && this.parent?.isDroppable === true;\r\n  }\r\n\r\n  private desactivate(): void {\r\n    this.renderer.removeClass(this.el.nativeElement, CSS.DROP_SLOT_ACTIVE);\r\n    this.renderer.removeClass(this.el.nativeElement, CSS.DROP_SLOT_FOCUSED);\r\n    if (this.overTimeout) {\r\n      clearTimeout(this.overTimeout);\r\n      this.overTimeout = null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport { TreeDragEvent } from \"../events/drag-event.model\";\r\nimport { TreeDropEvent } from \"../events/drop-event.model\";\r\nimport { Templates } from \"../templates.interface\";\r\nimport { TreeControl } from \"../tree.control\";\r\nimport { CSS } from \"../constants/css.enum\";\r\nimport { TreeNode } from \"./node.model\";\r\n\r\n@Component({\r\n  selector: \"tree-node\",\r\n  templateUrl: \"./node.component.html\",\r\n  styleUrls: [\"./node.component.scss\"],\r\n})\r\nexport class NodeComponent {\r\n  @Output() slotDrop: EventEmitter<TreeDropEvent>;\r\n  @Output() dragEnter: EventEmitter<void>;\r\n  @Output() dragStart: EventEmitter<void>;\r\n  @Output() dragEnd: EventEmitter<void>;\r\n  @Input() parent!: TreeNode | null;\r\n  @Input() level!: number;\r\n  @Input() node!: TreeNode;\r\n  @Input() index!: number;\r\n  @Input() control!: TreeControl;\r\n  @Input() templates!: Templates;\r\n\r\n  @ViewChild(\"nodeRef\", { static: false }) nodeRef!: ElementRef;\r\n\r\n  readonly css: typeof CSS = CSS;\r\n\r\n  get lineMargin(): number {\r\n    return this.level * this.node.padding + this.node.config.branchlinePadding;\r\n  }\r\n\r\n  constructor() {\r\n    this.dragEnter = new EventEmitter();\r\n    this.slotDrop = new EventEmitter();\r\n    this.dragStart = new EventEmitter();\r\n    this.dragEnd = new EventEmitter();\r\n  }\r\n\r\n  trackBy(index: number, node: TreeNode): any {\r\n    return node.id;\r\n  }\r\n\r\n  onDragStart($event?: TreeDragEvent): void {\r\n    if (!$event && this.parent?.canHaveChildren) {\r\n      $event = new TreeDragEvent(this.node, this.index, this.parent.children);\r\n    }\r\n\r\n    if ($event) this.control?.setDragEvent($event);\r\n  }\r\n}\r\n","<div\r\n  [ngClass]=\"{\r\n    expanded: node.isExpanded,\r\n    'moving-state': control.nodeIsMoving$ | async\r\n  }\"\r\n  treeNode\r\n  [id]=\"node.id\"\r\n  (dragEnter)=\"dragEnter.emit()\"\r\n  (dragEnd)=\"control.unSetDragEvent(); dragEnd.emit()\"\r\n  (dragStart)=\"onDragStart(); dragStart.emit()\"\r\n  (nodeDrop)=\"slotDrop.emit($event)\"\r\n  [enable]=\"control.editable$ | async\"\r\n  [control]=\"control\"\r\n  [level]=\"level\"\r\n  [node]=\"node\"\r\n>\r\n  <div class=\"{{ css.NODE_WRAPPER }}\" [ngClass]=\"node.classes\">\r\n    <div\r\n      [ngClass]=\"css.NODE_CONTAINER\"\r\n      [style.margin-left.px]=\"level * node.padding\"\r\n    >\r\n      <div [ngClass]=\"css.NODE_CONTAINER_LEFT\">\r\n        <ng-container\r\n          *ngIf=\"templates.nodeLeft\"\r\n          [ngTemplateOutlet]=\"templates.nodeLeft\"\r\n          [ngTemplateOutletContext]=\"{ $implicit: node, index: index }\"\r\n        >\r\n        </ng-container>\r\n      </div>\r\n      <tree-node-toggler [node]=\"node\"></tree-node-toggler>\r\n      <div [ngClass]=\"css.NODE_CONTENT\">\r\n        <ng-container\r\n          *ngIf=\"templates.node; else defaultContent\"\r\n          [ngTemplateOutlet]=\"templates.node\"\r\n          [ngTemplateOutletContext]=\"{ $implicit: node, index: index }\"\r\n        >\r\n        </ng-container>\r\n        <ng-template #defaultContent>\r\n          {{ node.name }}\r\n        </ng-template>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div\r\n  [ngClass]=\"css.NODE_CHILDREN\"\r\n  *ngIf=\"node.canHaveChildren && node.isExpanded\"\r\n>\r\n  <div\r\n    [style.margin-left.px]=\"(level + 1) * node.padding\"\r\n    *ngIf=\"node.isLoadingChildren\"\r\n  >\r\n    <ng-container\r\n      *ngIf=\"templates.loading; else defaultLoading\"\r\n      [ngTemplateOutlet]=\"templates.loading\"\r\n    >\r\n    </ng-container>\r\n    <ng-template #defaultLoading>\r\n      <small>loading...</small>\r\n    </ng-template>\r\n  </div>\r\n  <div\r\n    [style.margin-left.px]=\"lineMargin\"\r\n    [ngClass]=\"css.NODE_BRANCHLINE\"\r\n    *ngIf=\"node.config.hasBranchline && !node.isLoadingChildren\"\r\n  ></div>\r\n  <div\r\n    treeDropSlot\r\n    [parent]=\"node\"\r\n    [control]=\"control\"\r\n    (slotDrop)=\"slotDrop.emit($event)\"\r\n    [style.margin-left.px]=\"(level + 1) * node.padding\"\r\n  ></div>\r\n  <tree-node\r\n    *ngFor=\"let childNode of node.children; let i = index; trackBy: trackBy\"\r\n    (slotDrop)=\"slotDrop.emit($event)\"\r\n    (dragEnter)=\"dragEnter.emit()\"\r\n    (dragStart)=\"dragStart.emit()\"\r\n    (dragEnd)=\"dragEnd.emit()\"\r\n    [control]=\"control\"\r\n    [parent]=\"node\"\r\n    [node]=\"childNode\"\r\n    [level]=\"level + 1\"\r\n    [index]=\"i\"\r\n    [templates]=\"templates\"\r\n  ></tree-node>\r\n</div>\r\n<div\r\n  treeDropSlot\r\n  [parent]=\"parent\"\r\n  [index]=\"index + 1\"\r\n  [control]=\"control\"\r\n  (slotDrop)=\"slotDrop.emit($event)\"\r\n  [style.margin-left.px]=\"level * node.padding\"\r\n></div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport {\r\n  NodeTransfertEnd,\r\n  NodeTransfertStart,\r\n} from \"../../node/node-transfert.event\";\r\nimport { TreeConfig } from \"../../config.interface\";\r\nimport { DropEvent } from \"../../events/drop-event.interface\";\r\nimport { TreeDropEvent } from \"../../events/drop-event.model\";\r\nimport { TreeNode } from \"../../node/node.model\";\r\nimport { Templates } from \"../../templates.interface\";\r\nimport { TreeControl } from \"../../tree.control\";\r\n\r\n@Component({\r\n  selector: \"tree-view-root\",\r\n  templateUrl: \"./view-root.component.html\",\r\n  styleUrls: [\"./view-root.component.scss\"],\r\n  providers: [TreeControl],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ViewRootComponent implements OnChanges {\r\n  @Output() dragEnter: EventEmitter<void>;\r\n  @Output() dragStart: EventEmitter<void>;\r\n  @Output() dragEnd: EventEmitter<void>;\r\n  @Output() drop: EventEmitter<DropEvent>;\r\n  @Input() templates!: Templates;\r\n  @Input() config!: TreeConfig;\r\n  @Input() nodes: any[];\r\n\r\n  public root$: Observable<TreeNode | null>;\r\n\r\n  constructor(public treeControl: TreeControl) {\r\n    this.root$ = this.treeControl.state$;\r\n    this.dragEnter = new EventEmitter();\r\n    this.dragStart = new EventEmitter();\r\n    this.dragEnd = new EventEmitter();\r\n    this.drop = new EventEmitter();\r\n    this.nodes = [];\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.nodes) {\r\n      this.treeControl.init(this.nodes, this.config);\r\n    }\r\n  }\r\n\r\n  onDrop($event: TreeDropEvent): void {\r\n    this.drop.emit($event);\r\n    this.treeControl.executeDropEvent($event);\r\n  }\r\n\r\n  public startNodeTransfert($event: NodeTransfertStart): void {\r\n    if ($event instanceof NodeTransfertStart) {\r\n      this.treeControl.setDragEvent($event.$dragEvent);\r\n      this.treeControl.setMovingNode({ id: $event.$dragEvent.node.id });\r\n    }\r\n  }\r\n\r\n  public endNodeTransfert($event: NodeTransfertEnd): void {\r\n    if ($event instanceof NodeTransfertEnd) {\r\n      this.treeControl.unSetDragEvent();\r\n      this.treeControl.setMovingNode();\r\n    }\r\n  }\r\n\r\n  public expandAll(): void {\r\n    this.treeControl.expandAll();\r\n  }\r\n\r\n  public collapseAll(): void {\r\n    this.treeControl.collapseAll();\r\n  }\r\n}\r\n","<div\r\n  class=\"tree-view-root\"\r\n  [ngClass]=\"{ empty: (root$ | async)?.isChildrenEmpty }\"\r\n>\r\n  <div\r\n    treeDropSlot\r\n    (slotDrop)=\"onDrop($event)\"\r\n    [control]=\"treeControl\"\r\n    [parent]=\"root$ | async\"\r\n  ></div>\r\n  <tree-node\r\n    *ngFor=\"let node of (root$ | async)?.children; let i = index\"\r\n    (dragStart)=\"dragStart.emit()\"\r\n    (dragEnter)=\"dragEnter.emit()\"\r\n    (dragEnd)=\"dragEnd.emit()\"\r\n    (slotDrop)=\"onDrop($event)\"\r\n    [control]=\"treeControl\"\r\n    [parent]=\"root$ | async\"\r\n    [node]=\"node\"\r\n    [level]=\"0\"\r\n    [index]=\"i\"\r\n    [templates]=\"templates\"\r\n  ></tree-node>\r\n</div>\r\n","import {\r\n  Component,\r\n  ContentChild,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport {\r\n  NodeTransfertEnd,\r\n  NodeTransfertStart,\r\n} from \"../node/node-transfert.event\";\r\nimport { ViewRootComponent } from \"./view-root/view-root.component\";\r\nimport { DropEvent } from \"../events/drop-event.interface\";\r\nimport { TreeConfig } from \"../config.interface\";\r\nimport { TreeNode } from \"../node/node.model\";\r\n\r\n@Component({\r\n  selector: \"tree-view\",\r\n  template: `<tree-view-root\r\n    (dragStart)=\"dragStart.emit()\"\r\n    (dragEnter)=\"dragEnter.emit()\"\r\n    (dragEnd)=\"dragEnd.emit()\"\r\n    (drop)=\"drop.emit($event)\"\r\n    [config]=\"config\"\r\n    [nodes]=\"nodes\"\r\n    [templates]=\"{\r\n      node: nodeTemplate,\r\n      loading: loadingTemplate,\r\n      nodeLeft: containerLeft\r\n    }\"\r\n  >\r\n  </tree-view-root>`,\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TreeViewComponent {\r\n  @ViewChild(ViewRootComponent, { static: false })\r\n  private root!: ViewRootComponent;\r\n  @ContentChild(\"node\", { static: false }) nodeTemplate!: TemplateRef<any>;\r\n  @ContentChild(\"containerLeft\", { static: false })\r\n  containerLeft!: TemplateRef<any>;\r\n  @ContentChild(\"loading\", { static: false })\r\n  loadingTemplate!: TemplateRef<any>;\r\n\r\n  @Output() dragEnter: EventEmitter<void>;\r\n  @Output() dragStart: EventEmitter<void>;\r\n  @Output() dragEnd: EventEmitter<void>;\r\n  @Output() drop: EventEmitter<DropEvent>;\r\n  @Input() config!: TreeConfig;\r\n  @Input() nodes!: any[];\r\n\r\n  constructor() {\r\n    this.dragEnter = new EventEmitter();\r\n    this.dragStart = new EventEmitter();\r\n    this.dragEnd = new EventEmitter();\r\n    this.drop = new EventEmitter();\r\n  }\r\n\r\n  public toggleEditMode(): void {\r\n    this.root.treeControl.toggleEditMode();\r\n  }\r\n\r\n  public deleteNode(node: TreeNode): void {\r\n    this.root.treeControl.deleteNode(node);\r\n  }\r\n\r\n  /***\r\n   * To add node to root\r\n   */\r\n  public addNode(node: any, firstPosition?: boolean): void {\r\n    this.root.treeControl.addNode(node, firstPosition);\r\n  }\r\n\r\n  public startNodeTransfert($event: NodeTransfertStart): void {\r\n    this.root.startNodeTransfert($event);\r\n  }\r\n\r\n  public endNodeTransfert($event: NodeTransfertEnd): void {\r\n    this.root.endNodeTransfert($event);\r\n  }\r\n\r\n  public expandAll(): void {\r\n    this.root.expandAll();\r\n  }\r\n\r\n  public collapseAll(): void {\r\n    this.root.collapseAll();\r\n  }\r\n\r\n  public toJSON(): Promise<Object[]> {\r\n    return this.root.treeControl.toJSON();\r\n  }\r\n\r\n  public fromJSON(nodes: any[]): void {\r\n    this.root.treeControl.fromJSON(nodes);\r\n  }\r\n}\r\n","import { NodeTogglerComponent } from \"./node/node-toggler/node-toggler.component\";\r\nimport { NodeToTransfertDirective } from \"./node/node-to-transfert.directive\";\r\nimport { ViewRootComponent } from \"./view/view-root/view-root.component\";\r\nimport { DropSlotDirective } from \"./view/drop-slot.directive\";\r\nimport { TreeViewComponent } from \"./view/view.component\";\r\nimport { NodeDirective } from \"./node/node.directive\";\r\nimport { NodeComponent } from \"./node/node.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from \"@angular/core\";\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NodeComponent,\r\n    TreeViewComponent,\r\n    DropSlotDirective,\r\n    NodeTogglerComponent,\r\n    NodeDirective,\r\n    NodeToTransfertDirective,\r\n    ViewRootComponent,\r\n  ],\r\n  imports: [CommonModule],\r\n  exports: [TreeViewComponent, NodeToTransfertDirective],\r\n})\r\nexport class TreeModule {}\r\n","/*\r\n * Public API Surface of tree\r\n */\r\nexport * from \"./lib/node/node-to-transfert.directive\";\r\nexport * from \"./lib/events/drop-event.interface\";\r\nexport * from \"./lib/view/view.component\";\r\nexport * from \"./lib/config.interface\";\r\nexport * from \"./lib/node/node.model\";\r\nexport * from \"./lib/tree.module\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}