{"version":3,"file":"axulus-uikit-tree.mjs","sources":["../../src/app/components/tree/tree.ts","../../src/app/components/tree/axulus-uikit-tree.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  NgModule,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { BlockableUI, PrimeNGConfig, PrimeTemplate, SharedModule, TranslationKeys, TreeDragDropService, TreeNode } from '@axulus/uikit/api';\nimport { DomHandler } from '@axulus/uikit/dom';\nimport { RippleModule } from '@axulus/uikit/ripple';\nimport { Scroller, ScrollerModule, ScrollerOptions } from '@axulus/uikit/scroller';\nimport { ObjectUtils } from '@axulus/uikit/utils';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'p-treeNode',\n  template: `\n    <ng-template [ngIf]=\"node\">\n      <li\n        *ngIf=\"tree.droppableNodes\"\n        class=\"p-treenode-droppoint\"\n        [ngClass]=\"{ 'p-treenode-droppoint-active': draghoverPrev }\"\n        (drop)=\"onDropPoint($event, -1)\"\n        (dragover)=\"onDropPointDragOver($event)\"\n        (dragenter)=\"onDropPointDragEnter($event, -1)\"\n        (dragleave)=\"onDropPointDragLeave($event)\"\n      ></li>\n      <li\n        *ngIf=\"!tree.horizontal\"\n        [ngClass]=\"['p-treenode', node.styleClass || '', isLeaf() ? 'p-treenode-leaf' : '']\"\n        [ngStyle]=\"{ height: itemSize + 'px' }\"\n        [style]=\"node.style\"\n      >\n        <div\n          class=\"p-treenode-content\"\n          [style.paddingLeft]=\"level * indentation + 'rem'\"\n          (click)=\"onNodeClick($event)\"\n          (contextmenu)=\"onNodeRightClick($event)\"\n          (touchend)=\"onNodeTouchEnd()\"\n          (drop)=\"onDropNode($event)\"\n          (dragover)=\"onDropNodeDragOver($event)\"\n          (dragenter)=\"onDropNodeDragEnter($event)\"\n          (dragleave)=\"onDropNodeDragLeave($event)\"\n          [draggable]=\"tree.draggableNodes\"\n          (dragstart)=\"onDragStart($event)\"\n          (dragend)=\"onDragStop($event)\"\n          [attr.tabindex]=\"0\"\n          [ngClass]=\"{\n            'p-treenode-selectable': tree.selectionMode && node.selectable !== false,\n            'p-treenode-dragover': draghoverNode,\n            'p-highlight': isSelected()\n          }\"\n          role=\"treeitem\"\n          (keydown)=\"onKeyDown($event)\"\n          [attr.aria-posinset]=\"this.index + 1\"\n          [attr.aria-expanded]=\"this.node.expanded\"\n          [attr.aria-selected]=\"isSelected()\"\n          [attr.aria-label]=\"node.label\"\n        >\n          <button\n            type=\"button\"\n            [attr.aria-label]=\"tree.togglerAriaLabel\"\n            class=\"p-tree-toggler p-link\"\n            (click)=\"toggle($event)\"\n            pRipple\n            tabindex=\"-1\"\n          >\n            <span\n              class=\"p-tree-toggler-icon pi pi-fw\"\n              [ngClass]=\"{ 'pi-chevron-right': !node.expanded, 'pi-chevron-down': node.expanded }\"\n            ></span>\n          </button>\n          <div\n            class=\"p-checkbox p-component\"\n            [ngClass]=\"{ 'p-checkbox-disabled': node.selectable === false }\"\n            *ngIf=\"tree.selectionMode == 'checkbox'\"\n            [attr.aria-checked]=\"isSelected()\"\n          >\n            <div class=\"p-checkbox-box\" [ngClass]=\"{ 'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected }\">\n              <span class=\"p-checkbox-icon pi\" [ngClass]=\"{ 'pi-check': isSelected(), 'pi-minus': node.partialSelected }\"></span>\n            </div>\n          </div>\n          <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n          <span class=\"p-treenode-label\">\n            <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n            <span *ngIf=\"tree.getTemplateForNode(node)\">\n              <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n            </span>\n          </span>\n        </div>\n        <ul\n          class=\"p-treenode-children\"\n          style=\"display: none;\"\n          *ngIf=\"!tree.virtualScroll && node.children && node.expanded\"\n          [style.display]=\"node.expanded ? 'block' : 'none'\"\n          role=\"group\"\n        >\n          <p-treeNode\n            *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy\"\n            [node]=\"childNode\"\n            [parentNode]=\"node\"\n            [firstChild]=\"firstChild\"\n            [lastChild]=\"lastChild\"\n            [index]=\"index\"\n            [itemSize]=\"itemSize\"\n            [level]=\"level + 1\"\n          ></p-treeNode>\n        </ul>\n      </li>\n      <li\n        *ngIf=\"tree.droppableNodes && lastChild\"\n        class=\"p-treenode-droppoint\"\n        [ngClass]=\"{ 'p-treenode-droppoint-active': draghoverNext }\"\n        (drop)=\"onDropPoint($event, 1)\"\n        (dragover)=\"onDropPointDragOver($event)\"\n        (dragenter)=\"onDropPointDragEnter($event, 1)\"\n        (dragleave)=\"onDropPointDragLeave($event)\"\n      ></li>\n      <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\n        <tbody>\n          <tr>\n            <td class=\"p-treenode-connector\" *ngIf=\"!root\">\n              <table class=\"p-treenode-connector-table\">\n                <tbody>\n                  <tr>\n                    <td [ngClass]=\"{ 'p-treenode-connector-line': !firstChild }\"></td>\n                  </tr>\n                  <tr>\n                    <td [ngClass]=\"{ 'p-treenode-connector-line': !lastChild }\"></td>\n                  </tr>\n                </tbody>\n              </table>\n            </td>\n            <td class=\"p-treenode\" [ngClass]=\"{ 'p-treenode-collapsed': !node.expanded }\">\n              <div\n                class=\"p-treenode-content\"\n                tabindex=\"0\"\n                [ngClass]=\"{ 'p-treenode-selectable': tree.selectionMode, 'p-highlight': isSelected() }\"\n                (click)=\"onNodeClick($event)\"\n                (contextmenu)=\"onNodeRightClick($event)\"\n                (touchend)=\"onNodeTouchEnd()\"\n                (keydown)=\"onNodeKeydown($event)\"\n              >\n                <span\n                  [attr.aria-label]=\"tree.togglerAriaLabel\"\n                  class=\"p-tree-toggler pi pi-fw\"\n                  [ngClass]=\"{ 'pi-plus': !node.expanded, 'pi-minus': node.expanded }\"\n                  *ngIf=\"!isLeaf()\"\n                  (click)=\"toggle($event)\"\n                ></span>\n                <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\n                <span class=\"p-treenode-label\">\n                  <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\n                  <span *ngIf=\"tree.getTemplateForNode(node)\">\n                    <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\n                  </span>\n                </span>\n              </div>\n            </td>\n            <td\n              class=\"p-treenode-children-container\"\n              *ngIf=\"node.children && node.expanded\"\n              [style.display]=\"node.expanded ? 'table-cell' : 'none'\"\n            >\n              <div class=\"p-treenode-children\">\n                <p-treeNode\n                  *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; trackBy: tree.trackBy\"\n                  [node]=\"childNode\"\n                  [firstChild]=\"firstChild\"\n                  [lastChild]=\"lastChild\"\n                ></p-treeNode>\n              </div>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </ng-template>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'p-element'\n  }\n})\nexport class UITreeNode implements OnInit {\n  static ICON_CLASS: string = 'p-treenode-icon ';\n\n  @Input() rowNode: any;\n\n  @Input() node: TreeNode;\n\n  @Input() parentNode: TreeNode;\n\n  @Input() root: boolean;\n\n  @Input() index: number;\n\n  @Input() firstChild: boolean;\n\n  @Input() lastChild: boolean;\n\n  @Input() level: number;\n\n  @Input() indentation: number;\n\n  @Input() itemSize: number;\n\n  tree: Tree;\n\n  constructor(@Inject(forwardRef(() => Tree)) tree) {\n    this.tree = tree as Tree;\n  }\n\n  draghoverPrev: boolean;\n\n  draghoverNext: boolean;\n\n  draghoverNode: boolean;\n\n  ngOnInit() {\n    this.node.parent = this.parentNode;\n    if (this.parentNode) {\n      this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));\n    }\n  }\n\n  getIcon() {\n    let icon: string;\n\n    if (this.node.icon) icon = this.node.icon;\n    else icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;\n\n    return UITreeNode.ICON_CLASS + ' ' + icon;\n  }\n\n  isLeaf() {\n    return this.tree.isNodeLeaf(this.node);\n  }\n\n  toggle(event: Event) {\n    if (this.node.expanded) this.collapse(event);\n    else this.expand(event);\n  }\n\n  expand(event: Event) {\n    this.node.expanded = true;\n    if (this.tree.virtualScroll) {\n      this.tree.updateSerializedValue();\n    }\n    this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });\n  }\n\n  collapse(event: Event) {\n    this.node.expanded = false;\n    if (this.tree.virtualScroll) {\n      this.tree.updateSerializedValue();\n    }\n    this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });\n  }\n\n  onNodeClick(event: MouseEvent) {\n    this.tree.onNodeClick(event, this.node);\n  }\n\n  onNodeKeydown(event: KeyboardEvent) {\n    if (event.which === 13) {\n      this.tree.onNodeClick(event, this.node);\n    }\n  }\n\n  onNodeTouchEnd() {\n    this.tree.onNodeTouchEnd();\n  }\n\n  onNodeRightClick(event: MouseEvent) {\n    this.tree.onNodeRightClick(event, this.node);\n  }\n\n  isSelected() {\n    return this.tree.isSelected(this.node);\n  }\n\n  onDropPoint(event: Event, position: number) {\n    event.preventDefault();\n    let dragNode = this.tree.dragNode;\n    let dragNodeIndex = this.tree.dragNodeIndex;\n    let dragNodeScope = this.tree.dragNodeScope;\n    let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? position === 1 || dragNodeIndex !== this.index - 1 : true;\n\n    if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {\n      let dropParams = { ...this.createDropPointEventMetadata(position) };\n\n      if (this.tree.validateDrop) {\n        this.tree.onNodeDrop.emit({\n          originalEvent: event,\n          dragNode: dragNode,\n          dropNode: this.node,\n          index: this.index,\n          accept: () => {\n            this.processPointDrop(dropParams);\n          }\n        });\n      } else {\n        this.processPointDrop(dropParams);\n        this.tree.onNodeDrop.emit({\n          originalEvent: event,\n          dragNode: dragNode,\n          dropNode: this.node,\n          index: this.index\n        });\n      }\n    }\n\n    this.draghoverPrev = false;\n    this.draghoverNext = false;\n  }\n\n  processPointDrop(event) {\n    let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;\n    event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);\n    let dropIndex = this.index;\n\n    if (event.position < 0) {\n      dropIndex =\n        event.dragNodeSubNodes === newNodeList ? (event.dragNodeIndex > event.index ? event.index : event.index - 1) : event.index;\n      newNodeList.splice(dropIndex, 0, event.dragNode);\n    } else {\n      dropIndex = newNodeList.length;\n      newNodeList.push(event.dragNode);\n    }\n\n    this.tree.dragDropService.stopDrag({\n      node: event.dragNode,\n      subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,\n      index: event.dragNodeIndex\n    });\n  }\n\n  createDropPointEventMetadata(position) {\n    return {\n      dragNode: this.tree.dragNode,\n      dragNodeIndex: this.tree.dragNodeIndex,\n      dragNodeSubNodes: this.tree.dragNodeSubNodes,\n      dropNode: this.node,\n      index: this.index,\n      position: position\n    };\n  }\n\n  onDropPointDragOver(event) {\n    event.dataTransfer.dropEffect = 'move';\n    event.preventDefault();\n  }\n\n  onDropPointDragEnter(event: Event, position: number) {\n    if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n      if (position < 0) this.draghoverPrev = true;\n      else this.draghoverNext = true;\n    }\n  }\n\n  onDropPointDragLeave(event: Event) {\n    this.draghoverPrev = false;\n    this.draghoverNext = false;\n  }\n\n  onDragStart(event) {\n    if (this.tree.draggableNodes && this.node.draggable !== false) {\n      event.dataTransfer.setData('text', 'data');\n\n      this.tree.dragDropService.startDrag({\n        tree: this,\n        node: this.node,\n        subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n        index: this.index,\n        scope: this.tree.draggableScope\n      });\n    } else {\n      event.preventDefault();\n    }\n  }\n\n  onDragStop(event) {\n    this.tree.dragDropService.stopDrag({\n      node: this.node,\n      subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n      index: this.index\n    });\n  }\n\n  onDropNodeDragOver(event) {\n    event.dataTransfer.dropEffect = 'move';\n    if (this.tree.droppableNodes) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  onDropNode(event) {\n    if (this.tree.droppableNodes && this.node.droppable !== false) {\n      let dragNode = this.tree.dragNode;\n\n      if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {\n        let dropParams = { ...this.createDropNodeEventMetadata() };\n\n        if (this.tree.validateDrop) {\n          this.tree.onNodeDrop.emit({\n            originalEvent: event,\n            dragNode: dragNode,\n            dropNode: this.node,\n            index: this.index,\n            accept: () => {\n              this.processNodeDrop(dropParams);\n            }\n          });\n        } else {\n          this.processNodeDrop(dropParams);\n          this.tree.onNodeDrop.emit({\n            originalEvent: event,\n            dragNode: dragNode,\n            dropNode: this.node,\n            index: this.index\n          });\n        }\n      }\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    this.draghoverNode = false;\n  }\n\n  createDropNodeEventMetadata() {\n    return {\n      dragNode: this.tree.dragNode,\n      dragNodeIndex: this.tree.dragNodeIndex,\n      dragNodeSubNodes: this.tree.dragNodeSubNodes,\n      dropNode: this.node\n    };\n  }\n\n  processNodeDrop(event) {\n    let dragNodeIndex = event.dragNodeIndex;\n    event.dragNodeSubNodes.splice(dragNodeIndex, 1);\n\n    if (event.dropNode.children) event.dropNode.children.push(event.dragNode);\n    else event.dropNode.children = [event.dragNode];\n\n    this.tree.dragDropService.stopDrag({\n      node: event.dragNode,\n      subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,\n      index: dragNodeIndex\n    });\n  }\n\n  onDropNodeDragEnter(event) {\n    if (\n      this.tree.droppableNodes &&\n      this.node.droppable !== false &&\n      this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)\n    ) {\n      this.draghoverNode = true;\n    }\n  }\n\n  onDropNodeDragLeave(event) {\n    if (this.tree.droppableNodes) {\n      let rect = event.currentTarget.getBoundingClientRect();\n      if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {\n        this.draghoverNode = false;\n      }\n    }\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    const nodeElement = (<HTMLDivElement>event.target).parentElement.parentElement;\n\n    if (\n      nodeElement.nodeName !== 'P-TREENODE' ||\n      (this.tree.contextMenu && this.tree.contextMenu.containerViewChild.nativeElement.style.display === 'block')\n    ) {\n      return;\n    }\n\n    switch (event.which) {\n      //down arrow\n      case 40:\n        const listElement = this.tree.droppableNodes ? nodeElement.children[1].children[1] : nodeElement.children[0].children[1];\n        if (listElement && listElement.children.length > 0) {\n          this.focusNode(listElement.children[0]);\n        } else {\n          const nextNodeElement = nodeElement.nextElementSibling;\n          if (nextNodeElement) {\n            this.focusNode(nextNodeElement);\n          } else {\n            let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);\n            if (nextSiblingAncestor) {\n              this.focusNode(nextSiblingAncestor);\n            }\n          }\n        }\n\n        event.preventDefault();\n        break;\n\n      //up arrow\n      case 38:\n        if (nodeElement.previousElementSibling) {\n          this.focusNode(this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n        } else {\n          let parentNodeElement = this.getParentNodeElement(nodeElement);\n          if (parentNodeElement) {\n            this.focusNode(parentNodeElement);\n          }\n        }\n\n        event.preventDefault();\n        break;\n\n      //right arrow\n      case 39:\n        if (!this.node.expanded && !this.tree.isNodeLeaf(this.node)) {\n          this.expand(event);\n        }\n\n        event.preventDefault();\n        break;\n\n      //left arrow\n      case 37:\n        if (this.node.expanded) {\n          this.collapse(event);\n        } else {\n          let parentNodeElement = this.getParentNodeElement(nodeElement);\n          if (parentNodeElement) {\n            this.focusNode(parentNodeElement);\n          }\n        }\n\n        event.preventDefault();\n        break;\n\n      //enter\n      case 13:\n        this.tree.onNodeClick(event, this.node);\n        event.preventDefault();\n        break;\n\n      default:\n        //no op\n        break;\n    }\n  }\n\n  findNextSiblingOfAncestor(nodeElement) {\n    let parentNodeElement = this.getParentNodeElement(nodeElement);\n    if (parentNodeElement) {\n      if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;\n      else return this.findNextSiblingOfAncestor(parentNodeElement);\n    } else {\n      return null;\n    }\n  }\n\n  findLastVisibleDescendant(nodeElement) {\n    const listElement = <HTMLElement>Array.from(nodeElement.children).find((el) => DomHandler.hasClass(el, 'p-treenode'));\n    const childrenListElement = listElement.children[1];\n    if (childrenListElement && childrenListElement.children.length > 0) {\n      const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n      return this.findLastVisibleDescendant(lastChildElement);\n    } else {\n      return nodeElement;\n    }\n  }\n\n  getParentNodeElement(nodeElement) {\n    const parentNodeElement = nodeElement.parentElement.parentElement.parentElement;\n\n    return parentNodeElement.tagName === 'P-TREENODE' ? parentNodeElement : null;\n  }\n\n  focusNode(element) {\n    if (this.tree.droppableNodes) element.children[1].children[0].focus();\n    else element.children[0].children[0].focus();\n  }\n}\n\n@Component({\n  selector: 'p-tree',\n  template: `\n    <div\n      [ngClass]=\"{\n        'p-tree p-component': true,\n        'p-tree-selectable': selectionMode,\n        'p-treenode-dragover': dragHover,\n        'p-tree-loading': loading,\n        'p-tree-flex-scrollable': scrollHeight === 'flex'\n      }\"\n      [ngStyle]=\"style\"\n      [class]=\"styleClass\"\n      *ngIf=\"!horizontal\"\n      (drop)=\"onDrop($event)\"\n      (dragover)=\"onDragOver($event)\"\n      (dragenter)=\"onDragEnter()\"\n      (dragleave)=\"onDragLeave($event)\"\n    >\n      <div class=\"p-tree-loading-overlay p-component-overlay\" *ngIf=\"loading\">\n        <i [class]=\"'p-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n      </div>\n      <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n      <div *ngIf=\"filter\" class=\"p-tree-filter-container\">\n        <input\n          #filter\n          type=\"text\"\n          autocomplete=\"off\"\n          class=\"p-tree-filter p-inputtext p-component\"\n          [attr.placeholder]=\"filterPlaceholder\"\n          (keydown.enter)=\"$event.preventDefault()\"\n          (input)=\"_filter($event.target.value)\"\n        />\n        <span class=\"p-tree-filter-icon pi pi-search\"></span>\n      </div>\n\n      <p-scroller\n        #scroller\n        *ngIf=\"virtualScroll\"\n        [items]=\"serializedValue\"\n        styleClass=\"p-tree-wrapper\"\n        [style]=\"{ height: scrollHeight }\"\n        [itemSize]=\"virtualScrollItemSize || _virtualNodeHeight\"\n        [lazy]=\"lazy\"\n        (onScroll)=\"onScroll.emit($event)\"\n        (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\n        (onLazyLoad)=\"onLazyLoad.emit($event)\"\n        [options]=\"virtualScrollOptions\"\n      >\n        <ng-template pTemplate=\"content\" let-items let-scrollerOptions=\"options\">\n          <ul\n            *ngIf=\"items\"\n            class=\"p-tree-container\"\n            [ngClass]=\"scrollerOptions.contentStyleClass\"\n            [style]=\"scrollerOptions.contentStyle\"\n            role=\"tree\"\n            [attr.aria-label]=\"ariaLabel\"\n            [attr.aria-labelledby]=\"ariaLabelledBy\"\n          >\n            <p-treeNode\n              *ngFor=\"let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n              [level]=\"rowNode.level\"\n              [rowNode]=\"rowNode\"\n              [node]=\"rowNode.node\"\n              [firstChild]=\"firstChild\"\n              [lastChild]=\"lastChild\"\n              [index]=\"getIndex(scrollerOptions, index)\"\n              [itemSize]=\"scrollerOptions.itemSize\"\n              [indentation]=\"indentation\"\n            ></p-treeNode>\n          </ul>\n        </ng-template>\n        <ng-container *ngIf=\"loaderTemplate\">\n          <ng-template pTemplate=\"loader\" let-scrollerOptions=\"options\">\n            <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\n          </ng-template>\n        </ng-container>\n      </p-scroller>\n      <ng-container *ngIf=\"!virtualScroll\">\n        <div #wrapper class=\"p-tree-wrapper\" [style.max-height]=\"scrollHeight\">\n          <ul\n            class=\"p-tree-container\"\n            *ngIf=\"getRootNode()\"\n            role=\"tree\"\n            [attr.aria-label]=\"ariaLabel\"\n            [attr.aria-labelledby]=\"ariaLabelledBy\"\n          >\n            <p-treeNode\n              *ngFor=\"let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\n              [node]=\"node\"\n              [firstChild]=\"firstChild\"\n              [lastChild]=\"lastChild\"\n              [index]=\"index\"\n              [level]=\"0\"\n            ></p-treeNode>\n          </ul>\n        </div>\n      </ng-container>\n\n      <div class=\"p-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n        <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\">\n          {{ emptyMessageLabel }}\n        </ng-container>\n        <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n      </div>\n      <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n    </div>\n    <div\n      [ngClass]=\"{ 'p-tree p-tree-horizontal p-component': true, 'p-tree-selectable': selectionMode }\"\n      [ngStyle]=\"style\"\n      [class]=\"styleClass\"\n      *ngIf=\"horizontal\"\n    >\n      <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n      <div class=\"p-tree-loading-mask p-component-overlay\" *ngIf=\"loading\">\n        <i [class]=\"'p-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n      </div>\n      <table *ngIf=\"value && value[0]\">\n        <p-treeNode [node]=\"value[0]\" [root]=\"true\"></p-treeNode>\n      </table>\n      <div class=\"p-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n        <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\">\n          {{ emptyMessageLabel }}\n        </ng-container>\n        <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n      </div>\n      <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.Default,\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./tree.css'],\n  host: {\n    class: 'p-element'\n  }\n})\nexport class Tree implements OnInit, AfterContentInit, OnChanges, OnDestroy, BlockableUI {\n  @Input() value: TreeNode[];\n\n  @Input() selectionMode: string;\n\n  @Input() selection: any;\n\n  @Input() style: any;\n\n  @Input() styleClass: string;\n\n  @Input() contextMenu: any;\n\n  @Input() layout: string = 'vertical';\n\n  @Input() draggableScope: any;\n\n  @Input() droppableScope: any;\n\n  @Input() draggableNodes: boolean;\n\n  @Input() droppableNodes: boolean;\n\n  @Input() metaKeySelection: boolean = true;\n\n  @Input() propagateSelectionUp: boolean = true;\n\n  @Input() propagateSelectionDown: boolean = true;\n\n  @Input() loading: boolean;\n\n  @Input() loadingIcon: string = 'pi pi-spinner';\n\n  @Input() emptyMessage: string = '';\n\n  @Input() ariaLabel: string;\n\n  @Input() togglerAriaLabel: string;\n\n  @Input() ariaLabelledBy: string;\n\n  @Input() validateDrop: boolean;\n\n  @Input() filter: boolean;\n\n  @Input() filterBy: string = 'label';\n\n  @Input() filterMode: string = 'lenient';\n\n  @Input() filterPlaceholder: string;\n\n  @Input() filteredNodes: TreeNode[];\n\n  @Input() filterLocale: string;\n\n  @Input() scrollHeight: string;\n\n  @Input() lazy: boolean = false;\n\n  @Input() virtualScroll: boolean;\n\n  @Input() virtualScrollItemSize: number;\n\n  @Input() virtualScrollOptions: ScrollerOptions;\n\n  @Input() indentation: number = 1.5;\n\n  @Input() _templateMap: any;\n\n  @Input() trackBy: Function = (index: number, item: any) => item;\n\n  @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onNodeDrop: EventEmitter<any> = new EventEmitter();\n\n  @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n  @Output() onScroll: EventEmitter<any> = new EventEmitter();\n\n  @Output() onScrollIndexChange: EventEmitter<any> = new EventEmitter();\n\n  @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n  @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n  @ViewChild('filter') filterViewChild: ElementRef;\n\n  @ViewChild('scroller') scroller: Scroller;\n\n  @ViewChild('wrapper') wrapperViewChild: ElementRef;\n\n  /* @deprecated */\n  _virtualNodeHeight: number;\n  @Input() get virtualNodeHeight(): number {\n    return this._virtualNodeHeight;\n  }\n  set virtualNodeHeight(val: number) {\n    this._virtualNodeHeight = val;\n    console.warn('The virtualNodeHeight property is deprecated, use virtualScrollItemSize property instead.');\n  }\n\n  serializedValue: any[];\n\n  headerTemplate: TemplateRef<any>;\n\n  footerTemplate: TemplateRef<any>;\n\n  loaderTemplate: TemplateRef<any>;\n\n  emptyMessageTemplate: TemplateRef<any>;\n\n  public nodeTouched: boolean;\n\n  public dragNodeTree: Tree;\n\n  public dragNode: TreeNode;\n\n  public dragNodeSubNodes: TreeNode[];\n\n  public dragNodeIndex: number;\n\n  public dragNodeScope: any;\n\n  public dragHover: boolean;\n\n  public dragStartSubscription: Subscription;\n\n  public dragStopSubscription: Subscription;\n\n  constructor(public el: ElementRef, @Optional() public dragDropService: TreeDragDropService, public config: PrimeNGConfig) {}\n\n  ngOnInit() {\n    if (this.droppableNodes) {\n      this.dragStartSubscription = this.dragDropService.dragStart$.subscribe((event) => {\n        this.dragNodeTree = event.tree;\n        this.dragNode = event.node;\n        this.dragNodeSubNodes = event.subNodes;\n        this.dragNodeIndex = event.index;\n        this.dragNodeScope = event.scope;\n      });\n\n      this.dragStopSubscription = this.dragDropService.dragStop$.subscribe((event) => {\n        this.dragNodeTree = null;\n        this.dragNode = null;\n        this.dragNodeSubNodes = null;\n        this.dragNodeIndex = null;\n        this.dragNodeScope = null;\n        this.dragHover = false;\n      });\n    }\n  }\n\n  ngOnChanges(simpleChange: SimpleChanges) {\n    if (simpleChange.value) {\n      this.updateSerializedValue();\n    }\n  }\n\n  get horizontal(): boolean {\n    return this.layout == 'horizontal';\n  }\n\n  get emptyMessageLabel(): string {\n    return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n  }\n\n  ngAfterContentInit() {\n    if (this.templates.length) {\n      this._templateMap = {};\n    }\n\n    this.templates.forEach((item) => {\n      switch (item.getType()) {\n        case 'header':\n          this.headerTemplate = item.template;\n          break;\n\n        case 'empty':\n          this.emptyMessageTemplate = item.template;\n          break;\n\n        case 'footer':\n          this.footerTemplate = item.template;\n          break;\n\n        case 'loader':\n          this.loaderTemplate = item.template;\n          break;\n\n        default:\n          this._templateMap[item.name] = item.template;\n          break;\n      }\n    });\n  }\n\n  updateSerializedValue() {\n    this.serializedValue = [];\n    this.serializeNodes(null, this.getRootNode(), 0, true);\n  }\n\n  serializeNodes(parent, nodes, level, visible) {\n    if (nodes && nodes.length) {\n      for (let node of nodes) {\n        node.parent = parent;\n        const rowNode = {\n          node: node,\n          parent: parent,\n          level: level,\n          visible: visible && (parent ? parent.expanded : true)\n        };\n        this.serializedValue.push(rowNode);\n\n        if (rowNode.visible && node.expanded) {\n          this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n        }\n      }\n    }\n  }\n\n  onNodeClick(event, node: TreeNode) {\n    let eventTarget = <Element>event.target;\n    if (DomHandler.hasClass(eventTarget, 'p-tree-toggler') || DomHandler.hasClass(eventTarget, 'p-tree-toggler-icon')) {\n      return;\n    } else if (this.selectionMode) {\n      if (node.selectable === false) {\n        return;\n      }\n\n      if (this.hasFilteredNodes()) {\n        node = this.getNodeWithKey(node.key, this.value);\n\n        if (!node) {\n          return;\n        }\n      }\n\n      let index = this.findIndexInSelection(node);\n      let selected = index >= 0;\n\n      if (this.isCheckboxSelectionMode()) {\n        if (selected) {\n          if (this.propagateSelectionDown) this.propagateDown(node, false);\n          else this.selection = this.selection.filter((val, i) => i != index);\n\n          if (this.propagateSelectionUp && node.parent) {\n            this.propagateUp(node.parent, false);\n          }\n\n          this.selectionChange.emit(this.selection);\n          this.onNodeUnselect.emit({ originalEvent: event, node: node });\n        } else {\n          if (this.propagateSelectionDown) this.propagateDown(node, true);\n          else this.selection = [...(this.selection || []), node];\n\n          if (this.propagateSelectionUp && node.parent) {\n            this.propagateUp(node.parent, true);\n          }\n\n          this.selectionChange.emit(this.selection);\n          this.onNodeSelect.emit({ originalEvent: event, node: node });\n        }\n      } else {\n        let metaSelection = this.nodeTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n          let metaKey = event.metaKey || event.ctrlKey;\n\n          if (selected && metaKey) {\n            if (this.isSingleSelectionMode()) {\n              this.selectionChange.emit(null);\n            } else {\n              this.selection = this.selection.filter((val, i) => i != index);\n              this.selectionChange.emit(this.selection);\n            }\n\n            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n          } else {\n            if (this.isSingleSelectionMode()) {\n              this.selectionChange.emit(node);\n            } else if (this.isMultipleSelectionMode()) {\n              this.selection = !metaKey ? [] : this.selection || [];\n              this.selection = [...this.selection, node];\n              this.selectionChange.emit(this.selection);\n            }\n\n            this.onNodeSelect.emit({ originalEvent: event, node: node });\n          }\n        } else {\n          if (this.isSingleSelectionMode()) {\n            if (selected) {\n              this.selection = null;\n              this.onNodeUnselect.emit({ originalEvent: event, node: node });\n            } else {\n              this.selection = node;\n              this.onNodeSelect.emit({ originalEvent: event, node: node });\n            }\n          } else {\n            if (selected) {\n              this.selection = this.selection.filter((val, i) => i != index);\n              this.onNodeUnselect.emit({ originalEvent: event, node: node });\n            } else {\n              this.selection = [...(this.selection || []), node];\n              this.onNodeSelect.emit({ originalEvent: event, node: node });\n            }\n          }\n\n          this.selectionChange.emit(this.selection);\n        }\n      }\n    }\n\n    this.nodeTouched = false;\n  }\n\n  onNodeTouchEnd() {\n    this.nodeTouched = true;\n  }\n\n  onNodeRightClick(event: MouseEvent, node: TreeNode) {\n    if (this.contextMenu) {\n      let eventTarget = <Element>event.target;\n\n      if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {\n        return;\n      } else {\n        let index = this.findIndexInSelection(node);\n        let selected = index >= 0;\n\n        if (!selected) {\n          if (this.isSingleSelectionMode()) this.selectionChange.emit(node);\n          else this.selectionChange.emit([node]);\n        }\n\n        this.contextMenu.show(event);\n        this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });\n      }\n    }\n  }\n\n  findIndexInSelection(node: TreeNode) {\n    let index: number = -1;\n\n    if (this.selectionMode && this.selection) {\n      if (this.isSingleSelectionMode()) {\n        let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;\n        index = areNodesEqual ? 0 : -1;\n      } else {\n        for (let i = 0; i < this.selection.length; i++) {\n          let selectedNode = this.selection[i];\n          let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;\n          if (areNodesEqual) {\n            index = i;\n            break;\n          }\n        }\n      }\n    }\n\n    return index;\n  }\n\n  syncNodeOption(node, parentNodes, option, value?: any) {\n    // to synchronize the node option between the filtered nodes and the original nodes(this.value)\n    const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;\n    if (_node) {\n      _node[option] = value || node[option];\n    }\n  }\n\n  hasFilteredNodes() {\n    return this.filter && this.filteredNodes && this.filteredNodes.length;\n  }\n\n  getNodeWithKey(key: string, nodes: TreeNode[]) {\n    for (let node of nodes) {\n      if (node.key === key) {\n        return node;\n      }\n\n      if (node.children) {\n        let matchedNode = this.getNodeWithKey(key, node.children);\n        if (matchedNode) {\n          return matchedNode;\n        }\n      }\n    }\n  }\n\n  propagateUp(node: TreeNode, select: boolean) {\n    if (node.children && node.children.length) {\n      let selectedCount: number = 0;\n      let childPartialSelected: boolean = false;\n      for (let child of node.children) {\n        if (this.isSelected(child)) {\n          selectedCount++;\n        } else if (child.partialSelected) {\n          childPartialSelected = true;\n        }\n      }\n\n      if (select && selectedCount == node.children.length) {\n        this.selection = [...(this.selection || []), node];\n        node.partialSelected = false;\n      } else {\n        if (!select) {\n          let index = this.findIndexInSelection(node);\n          if (index >= 0) {\n            this.selection = this.selection.filter((val, i) => i != index);\n          }\n        }\n\n        if (childPartialSelected || (selectedCount > 0 && selectedCount != node.children.length)) node.partialSelected = true;\n        else node.partialSelected = false;\n      }\n\n      this.syncNodeOption(node, this.filteredNodes, 'partialSelected');\n    }\n\n    let parent = node.parent;\n    if (parent) {\n      this.propagateUp(parent, select);\n    }\n  }\n\n  propagateDown(node: TreeNode, select: boolean) {\n    let index = this.findIndexInSelection(node);\n\n    if (select && index == -1) {\n      this.selection = [...(this.selection || []), node];\n    } else if (!select && index > -1) {\n      this.selection = this.selection.filter((val, i) => i != index);\n    }\n\n    node.partialSelected = false;\n\n    this.syncNodeOption(node, this.filteredNodes, 'partialSelected');\n\n    if (node.children && node.children.length) {\n      for (let child of node.children) {\n        this.propagateDown(child, select);\n      }\n    }\n  }\n\n  isSelected(node: TreeNode) {\n    return this.findIndexInSelection(node) != -1;\n  }\n\n  isSingleSelectionMode() {\n    return this.selectionMode && this.selectionMode == 'single';\n  }\n\n  isMultipleSelectionMode() {\n    return this.selectionMode && this.selectionMode == 'multiple';\n  }\n\n  isCheckboxSelectionMode() {\n    return this.selectionMode && this.selectionMode == 'checkbox';\n  }\n\n  isNodeLeaf(node) {\n    return node.leaf == false ? false : !(node.children && node.children.length);\n  }\n\n  getRootNode() {\n    return this.filteredNodes ? this.filteredNodes : this.value;\n  }\n\n  getTemplateForNode(node: TreeNode): TemplateRef<any> {\n    if (this._templateMap) return node.type ? this._templateMap[node.type] : this._templateMap['default'];\n    else return null;\n  }\n\n  onDragOver(event) {\n    if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n      event.dataTransfer.dropEffect = 'move';\n      event.preventDefault();\n    }\n  }\n\n  onDrop(event) {\n    if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n      event.preventDefault();\n      let dragNode = this.dragNode;\n\n      if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n        let dragNodeIndex = this.dragNodeIndex;\n        this.value = this.value || [];\n\n        if (this.validateDrop) {\n          this.onNodeDrop.emit({\n            originalEvent: event,\n            dragNode: dragNode,\n            dropNode: null,\n            index: dragNodeIndex,\n            accept: () => {\n              this.processTreeDrop(dragNode, dragNodeIndex);\n            }\n          });\n        } else {\n          this.onNodeDrop.emit({\n            originalEvent: event,\n            dragNode: dragNode,\n            dropNode: null,\n            index: dragNodeIndex\n          });\n\n          this.processTreeDrop(dragNode, dragNodeIndex);\n        }\n      }\n    }\n  }\n\n  processTreeDrop(dragNode, dragNodeIndex) {\n    this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n    this.value.push(dragNode);\n    this.dragDropService.stopDrag({\n      node: dragNode\n    });\n  }\n\n  onDragEnter() {\n    if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n      this.dragHover = true;\n    }\n  }\n\n  onDragLeave(event) {\n    if (this.droppableNodes) {\n      let rect = event.currentTarget.getBoundingClientRect();\n      if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {\n        this.dragHover = false;\n      }\n    }\n  }\n\n  allowDrop(dragNode: TreeNode, dropNode: TreeNode, dragNodeScope: any): boolean {\n    if (!dragNode) {\n      //prevent random html elements to be dragged\n      return false;\n    } else if (this.isValidDragScope(dragNodeScope)) {\n      let allow: boolean = true;\n      if (dropNode) {\n        if (dragNode === dropNode) {\n          allow = false;\n        } else {\n          let parent = dropNode.parent;\n          while (parent != null) {\n            if (parent === dragNode) {\n              allow = false;\n              break;\n            }\n            parent = parent.parent;\n          }\n        }\n      }\n\n      return allow;\n    } else {\n      return false;\n    }\n  }\n\n  isValidDragScope(dragScope: any): boolean {\n    let dropScope = this.droppableScope;\n\n    if (dropScope) {\n      if (typeof dropScope === 'string') {\n        if (typeof dragScope === 'string') return dropScope === dragScope;\n        else if (dragScope instanceof Array) return (<Array<any>>dragScope).indexOf(dropScope) != -1;\n      } else if (dropScope instanceof Array) {\n        if (typeof dragScope === 'string') {\n          return (<Array<any>>dropScope).indexOf(dragScope) != -1;\n        } else if (dragScope instanceof Array) {\n          for (let s of dropScope) {\n            for (let ds of dragScope) {\n              if (s === ds) {\n                return true;\n              }\n            }\n          }\n        }\n      }\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  public _filter(value) {\n    let filterValue = value;\n    if (filterValue === '') {\n      this.filteredNodes = null;\n    } else {\n      this.filteredNodes = [];\n      const searchFields: string[] = this.filterBy.split(',');\n      const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);\n      const isStrictMode = this.filterMode === 'strict';\n      for (let node of this.value) {\n        let copyNode = { ...node };\n        let paramsWithoutNode = { searchFields, filterText, isStrictMode };\n        if (\n          (isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n          (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))\n        ) {\n          this.filteredNodes.push(copyNode);\n        }\n      }\n    }\n\n    this.updateSerializedValue();\n    this.onFilter.emit({\n      filter: filterValue,\n      filteredValue: this.filteredNodes\n    });\n  }\n\n  public resetFilter() {\n    this.filteredNodes = null;\n\n    if (this.filterViewChild && this.filterViewChild.nativeElement) {\n      this.filterViewChild.nativeElement.value = '';\n    }\n  }\n\n  public scrollToVirtualIndex(index: number) {\n    this.virtualScroll && this.scroller.scrollToIndex(index);\n  }\n\n  public scrollTo(options) {\n    if (this.virtualScroll) {\n      this.scroller.scrollTo(options);\n    } else if (this.wrapperViewChild && this.wrapperViewChild.nativeElement) {\n      if (this.wrapperViewChild.nativeElement.scrollTo) {\n        this.wrapperViewChild.nativeElement.scrollTo(options);\n      } else {\n        this.wrapperViewChild.nativeElement.scrollLeft = options.left;\n        this.wrapperViewChild.nativeElement.scrollTop = options.top;\n      }\n    }\n  }\n\n  findFilteredNodes(node, paramsWithoutNode) {\n    if (node) {\n      let matched = false;\n      if (node.children) {\n        let childNodes = [...node.children];\n        node.children = [];\n        for (let childNode of childNodes) {\n          let copyChildNode = { ...childNode };\n          if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n            matched = true;\n            node.children.push(copyChildNode);\n          }\n        }\n      }\n\n      if (matched) {\n        node.expanded = true;\n        return true;\n      }\n    }\n  }\n\n  isFilterMatched(node, { searchFields, filterText, isStrictMode }) {\n    let matched = false;\n    for (let field of searchFields) {\n      let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);\n      if (fieldValue.indexOf(filterText) > -1) {\n        matched = true;\n      }\n    }\n\n    if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n      matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;\n    }\n\n    return matched;\n  }\n\n  getIndex(options, index) {\n    const getItemOptions = options['getItemOptions'];\n    return getItemOptions ? getItemOptions(index).index : index;\n  }\n\n  getBlockableElement(): HTMLElement {\n    return this.el.nativeElement.children[0];\n  }\n\n  ngOnDestroy() {\n    if (this.dragStartSubscription) {\n      this.dragStartSubscription.unsubscribe();\n    }\n\n    if (this.dragStopSubscription) {\n      this.dragStopSubscription.unsubscribe();\n    }\n  }\n}\n@NgModule({\n  imports: [CommonModule, SharedModule, RippleModule, ScrollerModule],\n  exports: [Tree, UITreeNode, SharedModule, ScrollerModule],\n  declarations: [Tree, UITreeNode]\n})\nexport class TreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}