{"version":3,"file":"moxa-formoxa-mx-tree.mjs","sources":["../../../../libs/formoxa/mx-tree/src/lib/store/mx-tree.store.ts","../../../../libs/formoxa/mx-tree/src/lib/components/mx-tree.component.ts","../../../../libs/formoxa/mx-tree/src/lib/components/mx-tree.component.html","../../../../libs/formoxa/mx-tree/src/moxa-formoxa-mx-tree.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, distinctUntilChanged, map } from 'rxjs';\nimport { DisplayControlObj, MxTreeNode, MxTreeState } from '../models/mx-tree.model';\n\n@Injectable({ providedIn: 'any' })\nexport class MxTreeStore {\n  private initialState: MxTreeState = { treeNodes: [], expansion: null, selection: null };\n  private _store = new BehaviorSubject<MxTreeState>(this.initialState);\n\n  readonly selectTreeNodes$ = this._store.asObservable().pipe(\n    map((state) => this.mergeTreeNodesExpansionAndSelection(state)),\n    distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n  );\n\n  get state() {\n    return this._store.getValue();\n  }\n\n  get treeNodes() {\n    return this.mergeTreeNodesExpansionAndSelection(this.state);\n  }\n\n  readonly dispatchState = {\n    compStateChange: (state: MxTreeState) => {\n      this.updateState({ ...this.state, ...state });\n    },\n    treeNode: (treeNodes: MxTreeNode<unknown>[]) => {\n      this.updateState({ ...this.state, treeNodes });\n    },\n    expandState: (expansion: DisplayControlObj) => {\n      this.updateState({ ...this.state, expansion: { ...this.state.expansion, ...expansion } });\n    },\n    selectionState: (selection: DisplayControlObj) => {\n      this.updateState({ ...this.state, selection: { ...this.state.selection, ...selection } });\n    },\n    clearExpandedAndSelectionState: () => {\n      this.updateState({ ...this.state, expansion: null, selection: null });\n    }\n  };\n\n  private mergeTreeNodesExpansionAndSelection(state: MxTreeState): MxTreeNode<unknown>[] {\n    const nodes = state.treeNodes;\n    const expansion = state.expansion;\n    const selection = state.selection;\n\n    if (nodes.length === 0 || (!expansion && !selection)) {\n      return state.treeNodes;\n    }\n\n    return nodes.map((node) => this.updateNodeState(node, expansion, selection));\n  }\n\n  private updateNodeState(\n    node: MxTreeNode<unknown>,\n    expansion: DisplayControlObj | null,\n    selection: DisplayControlObj | null\n  ): MxTreeNode<unknown> {\n    const newNode: MxTreeNode<unknown> = structuredClone(node);\n    if (newNode.children && newNode.children.length > 0) {\n      newNode.children = newNode.children.map((child) => this.updateNodeState(child, expansion, selection));\n    }\n\n    const nodeExpansion = expansion && expansion[newNode.key];\n    const nodeSelection = selection && selection[newNode.key];\n    if (typeof nodeExpansion === 'boolean') {\n      newNode.isExpanded = nodeExpansion;\n    }\n\n    if (typeof nodeSelection === 'boolean') {\n      newNode.isChecked = nodeSelection;\n    }\n\n    return newNode;\n  }\n\n  private updateState(value: MxTreeState) {\n    this._store.next(structuredClone(value));\n  }\n}\n","import { SelectionChange, SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  booleanAttribute,\n  numberAttribute\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { DisplayControlObj, MxTreeFlatNode, MxTreeNode } from '../models/mx-tree.model';\nimport { MxTreeStore } from '../store/mx-tree.store';\n\n@Component({\n  selector: 'mx-tree',\n  templateUrl: './mx-tree.component.html',\n  styleUrls: ['./mx-tree.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatTreeModule, MatIconModule, MatButtonModule, AsyncPipe, MatCheckboxModule, NgTemplateOutlet]\n})\nexport class MxTreeComponent implements OnInit, OnChanges {\n  @ContentChild('nodeActions') nodeActions: TemplateRef<any> | null = null;\n  @Input() data: MxTreeNode<unknown>[] = [];\n  @Input({ transform: booleanAttribute }) useSelection: boolean = false;\n  @Input({ transform: booleanAttribute }) useHighlight: boolean = false;\n  @Input({ transform: booleanAttribute }) hideGroupCheckbox: boolean = false;\n  @Input({ transform: numberAttribute }) maxSelected: number | null = null;\n\n  @Input()\n  set focusItem(value: MxTreeFlatNode<unknown> | null) {\n    this._focusItem = structuredClone(value);\n  }\n\n  @Output() changeNode = new EventEmitter<MxTreeNode<unknown>[]>();\n  @Output() focusNode = new EventEmitter<{ source: MxTreeNode<unknown>[]; changes: MxTreeNode<unknown>[] }>();\n  @Output() checkNode = new EventEmitter<{ source: MxTreeNode<unknown>[]; changes: MxTreeNode<unknown>[] }>();\n  @Output() expandNode = new EventEmitter<{ source: MxTreeNode<unknown>[]; changes: MxTreeNode<unknown>[] }>();\n\n  private _focusItem: MxTreeFlatNode<unknown> | null = null;\n  private _treeControl: FlatTreeControl<MxTreeFlatNode<unknown>>;\n  private _treeFlattener: MatTreeFlattener<MxTreeNode<unknown>, MxTreeFlatNode<unknown>>;\n  private _dataSource: MatTreeFlatDataSource<MxTreeNode<unknown>, MxTreeFlatNode<unknown>>;\n  private _flatNodeMap = new Map<MxTreeFlatNode<unknown>, MxTreeNode<unknown>>();\n  private _nestedNodeMap = new Map<MxTreeNode<unknown>, MxTreeFlatNode<unknown>>();\n  private _checkListSelection = new SelectionModel<MxTreeFlatNode<unknown>>(true);\n  private _lastLevelSelectedAmount = 0;\n  private _eventQueue: { eventType: 'checkNode' | 'expandNode'; changes: MxTreeNode<unknown>[] }[] = [];\n\n  readonly trackBy = (_: any, item: MxTreeFlatNode<unknown>) => item.key;\n\n  readonly getLevel = (node: MxTreeFlatNode<unknown>) => node.level;\n\n  readonly isExpandable = (node: MxTreeFlatNode<unknown>) => node.expandable;\n\n  readonly isFocused = (node: MxTreeFlatNode<unknown>) => node.key === this._focusItem?.key;\n\n  readonly getChildren = (node: MxTreeNode<unknown>): MxTreeNode<unknown>[] => node.children;\n\n  readonly hasChild = (_: number, _nodeData: MxTreeFlatNode<unknown>) => _nodeData.expandable;\n\n  readonly hasNoContent = (_: number, _nodeData: MxTreeFlatNode<unknown>) => _nodeData.item === null;\n\n  readonly transformer = (node: MxTreeNode<unknown>, level: number) => {\n    const existingNode = this.nestedNodeMap?.get(node);\n    const flatNode = existingNode && existingNode.item === node.item ? existingNode : <MxTreeFlatNode<unknown>>{};\n    flatNode.item = node.item;\n    flatNode.level = level;\n    flatNode.displayName = node.displayName;\n    flatNode.key = node.key;\n    flatNode.displayIcon = node.displayIcon;\n    flatNode.expandable = !!node.children?.length;\n    flatNode.showActions = node.showActions ?? true;\n    flatNode.isExpanded = node.isExpanded;\n    flatNode.isChecked = node.isChecked;\n    flatNode.isDisabled = node.isDisabled;\n    flatNode.childrenAmount = node.children?.length || 0;\n    flatNode.leafNodeAmount = this.getLeafNodeAmount(node);\n    this.flatNodeMap.set(flatNode, node);\n    this.nestedNodeMap.set(node, flatNode);\n    return flatNode;\n  };\n\n  readonly treeNodeState$ = this.compStore.selectTreeNodes$.pipe(\n    tap((t) => this.changeNode.next(t)),\n    tap((t) => (this._lastLevelSelectedAmount = t.reduce((acc, curr) => acc + this.getLeafNodeCheckedAmount(curr), 0))),\n    tap((t) => {\n      this._eventQueue.forEach((e) => {\n        if (e.eventType === 'checkNode') {\n          this.checkNode.emit({ source: t, changes: e.changes });\n        } else if (e.eventType === 'expandNode') {\n          this.expandNode.emit({ source: t, changes: e.changes });\n        }\n      });\n      this._eventQueue = [];\n    })\n  );\n\n  expansionChanged$!: Observable<SelectionChange<MxTreeFlatNode<unknown>>>;\n  selectionChanged$!: Observable<SelectionChange<MxTreeFlatNode<unknown>>>;\n\n  get dataSource(): MatTreeFlatDataSource<MxTreeNode<unknown>, MxTreeFlatNode<unknown>> {\n    return this._dataSource;\n  }\n\n  get treeControl(): FlatTreeControl<MxTreeFlatNode<unknown>> {\n    return this._treeControl;\n  }\n\n  get checkListSelection(): SelectionModel<MxTreeFlatNode<unknown>> {\n    return this._checkListSelection;\n  }\n\n  get flatNodeMap(): Map<MxTreeFlatNode<unknown>, MxTreeNode<unknown>> {\n    return this._flatNodeMap;\n  }\n\n  get nestedNodeMap(): Map<MxTreeNode<unknown>, MxTreeFlatNode<unknown>> {\n    return this._nestedNodeMap;\n  }\n\n  ngOnInit() {\n    this.expansionChanged$ = this._treeControl.expansionModel.changed.asObservable().pipe(\n      tap((e) => {\n        const expandChangeObj: DisplayControlObj = {};\n        e.added.forEach((node) => (expandChangeObj[node.key] = true));\n        e.removed.forEach((node) => (expandChangeObj[node.key] = false));\n        this._eventQueue.push({\n          eventType: 'expandNode',\n          changes: this.getNodeChangedState(e, 'isExpanded')\n        });\n        this.compStore.dispatchState.expandState(expandChangeObj);\n      })\n    );\n    this.selectionChanged$ = this.checkListSelection?.changed.asObservable().pipe(\n      tap((e) => {\n        const selectionChangeObj: DisplayControlObj = {};\n        e.added.forEach((node) => (selectionChangeObj[node.key] = true));\n        e.removed.forEach((node) => (selectionChangeObj[node.key] = false));\n        this._eventQueue.push({\n          eventType: 'checkNode',\n          changes: this.getNodeChangedState(e, 'isChecked')\n        });\n        this.compStore.dispatchState.selectionState(selectionChangeObj);\n      })\n    );\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('data' in changes || 'useSelection' in changes) {\n      this.updateTree();\n    }\n  }\n\n  updateTree(): void {\n    this.flatNodeMap.clear();\n    this.nestedNodeMap.clear();\n    this.checkListSelection.clear();\n    this.compStore.dispatchState.clearExpandedAndSelectionState();\n    this.compStore.dispatchState.treeNode(this.data);\n    this._dataSource.data = structuredClone(this.data);\n    this.updateCheckList();\n    this.updateExpandedList();\n  }\n\n  leafNodeClick(event: MouseEvent, node: MxTreeFlatNode<unknown>): void {\n    event.stopPropagation();\n    this.focus(event, node);\n  }\n\n  groupNodeClick(event: MouseEvent, node: MxTreeFlatNode<unknown>): void {\n    event.stopPropagation();\n    this.focus(event, node);\n  }\n\n  focus(event: MouseEvent, node: MxTreeFlatNode<unknown>) {\n    const nestedNode = this._flatNodeMap.get(node);\n    this._focusItem = structuredClone(node);\n    this.focusNode.emit({\n      source: this.compStore.treeNodes,\n      changes: nestedNode ? [nestedNode] : []\n    });\n    event.stopPropagation();\n  }\n\n  getNodeChangedState(\n    e: SelectionChange<MxTreeFlatNode<unknown>>,\n    key: keyof Pick<MxTreeNode<unknown>, 'isChecked' | 'isExpanded'>\n  ): MxTreeNode<unknown>[] {\n    const getNewState = (nodes: MxTreeFlatNode<unknown>[], value: boolean) => {\n      return nodes\n        .map((node) => {\n          const nestedNode = this.flatNodeMap.get(node);\n          return (\n            nestedNode && {\n              ...nestedNode,\n              [key]: value\n            }\n          );\n        })\n        .filter((i) => Boolean(i)) as MxTreeNode<unknown>[];\n    };\n    return [...getNewState(e.added, true), ...getNewState(e.removed, false)];\n  }\n\n  getNodeActionData(node: MxTreeFlatNode<unknown>) {\n    const delNodes: MxTreeFlatNode<unknown>[] = [];\n    if (!node.expandable) {\n      delNodes.push(node);\n    } else {\n      const nestedNode = this.flatNodeMap.get(node);\n      nestedNode?.children?.forEach((f) => this.getChildrenFlatNodes(delNodes, f));\n    }\n    return delNodes;\n  }\n\n  isLeafNodeCheckboxDisabled(node: MxTreeFlatNode<unknown>): boolean {\n    return (\n      (this.maxSelected !== null &&\n        this._lastLevelSelectedAmount >= this.maxSelected &&\n        !this.checkListSelection.isSelected(node)) ||\n      node.isDisabled ||\n      false\n    );\n  }\n\n  isGroupNodeCheckboxDisabled(node: MxTreeFlatNode<unknown>) {\n    if (this.maxSelected === null) return false;\n\n    const nestedNode = this.flatNodeMap?.get(node);\n    const leafNodeUncheckAmount = (nestedNode && node.leafNodeAmount - this.getLeafNodeCheckedAmount(nestedNode)) || 0;\n    const remainingAmount =\n      this._lastLevelSelectedAmount >= this.maxSelected ? 0 : this.maxSelected - this._lastLevelSelectedAmount;\n    return (\n      (this._lastLevelSelectedAmount >= this.maxSelected && !this.checkListSelection.isSelected(node)) ||\n      leafNodeUncheckAmount > remainingAmount ||\n      node.isDisabled\n    );\n  }\n\n  //#region:  Checkbox Control Methods\n\n  /** NOTE: Whether all the descendants of the node are selected. */\n  descendantsAllSelected(node: MxTreeFlatNode<unknown>): boolean {\n    const descendants = this._treeControl.getDescendants(node);\n    const descAllSelected =\n      descendants.length > 0 &&\n      descendants.every((child) => {\n        return this.checkListSelection.isSelected(child);\n      });\n    return descAllSelected;\n  }\n\n  /** NOTE: Whether part of the descendants are selected */\n  descendantsPartiallySelected(node: MxTreeFlatNode<unknown>): boolean {\n    const descendants = this._treeControl.getDescendants(node);\n    const result = descendants.some((child) => this.checkListSelection?.isSelected(child));\n    return result && !this.descendantsAllSelected(node);\n  }\n\n  /** NOTE: Toggle the to-do item selection. Select/deselect all the descendants node */\n  todoItemSelectionToggle(node: MxTreeFlatNode<unknown>): void {\n    this.checkListSelection.toggle(node);\n    const descendants = this._treeControl.getDescendants(node);\n    this.checkListSelection.isSelected(node)\n      ? this.checkListSelection.select(...descendants)\n      : this.checkListSelection.deselect(...descendants);\n\n    // Force update for the parent\n    descendants.forEach((child) => this.checkListSelection?.isSelected(child));\n    this.checkAllParentsSelection(node);\n  }\n\n  /** NOTE: Toggle a leaf to-do item selection. Check all the parents to see if they changed */\n  todoLeafItemSelectionToggle(node: MxTreeFlatNode<unknown>): void {\n    this.checkListSelection.toggle(node);\n    this.checkAllParentsSelection(node);\n  }\n\n  /* NOTE: Checks all the parents when a leaf node is selected/unselected */\n  checkAllParentsSelection(node: MxTreeFlatNode<unknown>): void {\n    let parent: MxTreeFlatNode<unknown> | null = this.getParentNode(node);\n    while (parent) {\n      this.checkRootNodeSelection(parent);\n      parent = this.getParentNode(parent);\n    }\n  }\n\n  /** NOTE: Check root node checked state and change it accordingly */\n  checkRootNodeSelection(node: MxTreeFlatNode<unknown>): void {\n    const nodeSelected = this.checkListSelection?.isSelected(node);\n    const descendants = this._treeControl.getDescendants(node);\n    const descAllSelected =\n      descendants.length > 0 &&\n      descendants.every((child) => {\n        return this.checkListSelection?.isSelected(child);\n      });\n    if (nodeSelected && !descAllSelected) {\n      this.checkListSelection?.deselect(node);\n    } else if (!nodeSelected && descAllSelected) {\n      this.checkListSelection?.select(node);\n    }\n  }\n\n  /* NOTE: Get the parent node of a node */\n  getParentNode(node: MxTreeFlatNode<unknown>): MxTreeFlatNode<unknown> | null {\n    const currentLevel = this.getLevel(node);\n\n    if (currentLevel < 1) {\n      return null;\n    }\n\n    const startIndex = this._treeControl.dataNodes.indexOf(node) - 1;\n\n    for (let i = startIndex; i >= 0; i--) {\n      const currentNode = this._treeControl.dataNodes[i];\n\n      if (this.getLevel(currentNode) < currentLevel) {\n        return currentNode;\n      }\n    }\n    return null;\n  }\n  //#endregion\n\n  private updateExpandedList() {\n    const flatNodes = this._treeFlattener.flattenNodes(this._dataSource.data);\n    const newExpandedList = flatNodes.filter((f) => f.isExpanded);\n    const expandedObj = this.getObj(this._treeControl.dataNodes, 'expansion');\n    newExpandedList.forEach((f) => this._treeControl.expand(f));\n    this.compStore.dispatchState.expandState(expandedObj);\n  }\n\n  private updateCheckList() {\n    const flatNodes = this._treeFlattener.flattenNodes(this._dataSource.data);\n    const newSelectionList = flatNodes.filter((f) => !f.expandable && f.isChecked);\n    const selectionObj = this.getObj(this.treeControl.dataNodes, 'selection');\n    newSelectionList.forEach((f) => this.todoLeafItemSelectionToggle(f));\n    this.compStore.dispatchState.selectionState(selectionObj);\n  }\n\n  private getChildrenFlatNodes(delNodes: MxTreeFlatNode<unknown>[], nestNode: MxTreeNode<unknown>) {\n    if (nestNode.children.length > 0) {\n      nestNode.children.forEach((node) => this.getChildrenFlatNodes(delNodes, node));\n    }\n    const flatNode = this.nestedNodeMap?.get(nestNode);\n    flatNode && delNodes.push(flatNode);\n  }\n\n  private getLeafNodeAmount(node: MxTreeNode<unknown>): number {\n    if (!node.children?.length) return 1; // Leaf Node\n    return node.children.reduce((p, c) => {\n      return p + this.getLeafNodeAmount(c);\n    }, 0);\n  }\n\n  private getLeafNodeCheckedAmount(node: MxTreeNode<unknown>): number {\n    if (!node.children?.length) {\n      // Leaf checked Node\n      const flatNode = this._nestedNodeMap.get(node);\n      if (flatNode) {\n        return this._checkListSelection.isSelected(flatNode) ? 1 : 0;\n      }\n      return node.isChecked ? 1 : 0;\n    }\n    return node.children.reduce((p, c) => {\n      return p + this.getLeafNodeCheckedAmount(c);\n    }, 0);\n  }\n\n  private getObj = (nodes: MxTreeFlatNode<unknown>[], type: 'expansion' | 'selection'): DisplayControlObj =>\n    nodes\n      .map((node) => ({ [node.key]: type === 'expansion' ? node.isExpanded : !!node.isChecked }))\n      .reduce((acc, cur) => ({ ...acc, ...cur }), {});\n\n  private keyStringSort = (a: string, b: string): number => (a === b ? 0 : a > b ? 1 : -1);\n\n  constructor(private compStore: MxTreeStore) {\n    this._treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);\n    this._treeControl = new FlatTreeControl<MxTreeFlatNode<unknown>>(this.getLevel, this.isExpandable);\n    this._dataSource = new MatTreeFlatDataSource(this._treeControl, this._treeFlattener);\n  }\n}\n","@if (expansionChanged$ | async) {}\n@if (selectionChanged$ | async) {}\n@if (treeNodeState$ | async) {\n  <mat-tree\n    class=\"tree-wrapper\"\n    [class.selection]=\"useSelection\"\n    [class.highlight]=\"useHighlight\"\n    [dataSource]=\"dataSource\"\n    [treeControl]=\"treeControl\"\n    [trackBy]=\"trackBy\"\n  >\n    <!-- SECTION: Parent Node -->\n    <mat-tree-node\n      *matTreeNodeDef=\"let node; when: hasChild\"\n      matTreeNodePadding\n      class=\"tree-node-group-wrapper\"\n      (click)=\"groupNodeClick($event, node); useSelection && useHighlight && todoItemSelectionToggle(node)\"\n      [class.tree-node-selected]=\"useSelection && useHighlight && isFocused(node)\"\n    >\n      <div class=\"tree-node-inner-wrapper\">\n        <button mat-icon-button matTreeNodeToggle>\n          <mat-icon\n            class=\"mat-icon-rtl-mirror\"\n            [svgIcon]=\"treeControl.isExpanded(node) ? 'icon:keyboard_arrow_down' : 'icon:navigate_next'\"\n          ></mat-icon>\n        </button>\n        @if (useSelection && !hideGroupCheckbox) {\n          <mat-checkbox\n            [checked]=\"descendantsAllSelected(node)\"\n            [disabled]=\"isGroupNodeCheckboxDisabled(node)\"\n            [indeterminate]=\"descendantsPartiallySelected(node)\"\n            (click)=\"$event.stopPropagation()\"\n            (change)=\"todoItemSelectionToggle(node)\"\n          ></mat-checkbox>\n        }\n        <div\n          class=\"tree-node-label-wrapper\"\n          (click)=\"useSelection && !useHighlight && !isGroupNodeCheckboxDisabled(node) && todoItemSelectionToggle(node)\"\n        >\n          <span class=\"tree-node-label gl-body-md\"\n            >{{ node.displayName }}\n            @if (useSelection) {\n              <span> ({{ node.childrenAmount }}) </span>\n            }\n          </span>\n        </div>\n        @if (node.showActions) {\n          <div class=\"tree-node-actions-wrapper\">\n            <ng-container\n              *ngTemplateOutlet=\"nodeActions; context: { $implicit: getNodeActionData(node) }\"\n            ></ng-container>\n          </div>\n        }\n      </div>\n    </mat-tree-node>\n    <!-- SECTION: Leaf Node -->\n    <mat-tree-node\n      *matTreeNodeDef=\"let node\"\n      matTreeNodeToggle\n      matTreeNodePadding\n      class=\"tree-node-wrapper\"\n      (click)=\"leafNodeClick($event, node); useHighlight && todoItemSelectionToggle(node)\"\n      [class.tree-node-selected]=\"isFocused(node)\"\n    >\n      <div class=\"tree-node-inner-wrapper\">\n        @if (useSelection || !node.displayIcon) {\n          <button mat-icon-button disabled></button>\n        }\n        @if (useSelection) {\n          <mat-checkbox\n            [disabled]=\"isLeafNodeCheckboxDisabled(node)\"\n            [checked]=\"checkListSelection.isSelected(node)\"\n            (click)=\"$event.stopPropagation()\"\n            (change)=\"todoLeafItemSelectionToggle(node)\"\n          >\n          </mat-checkbox>\n        }\n        <div\n          class=\"tree-node-label-wrapper\"\n          (click)=\"useSelection && !useHighlight && !isLeafNodeCheckboxDisabled(node) && todoItemSelectionToggle(node)\"\n        >\n          @if (node.displayIcon) {\n            <mat-icon class=\"tree-node-leaf-node-icon\" [svgIcon]=\"node.displayIcon\"></mat-icon>\n          }\n          <span class=\"tree-node-label gl-body-md\">{{ node.displayName }}</span>\n        </div>\n        @if (node.showActions) {\n          <div class=\"tree-node-actions-wrapper\">\n            <ng-container\n              *ngTemplateOutlet=\"nodeActions; context: { $implicit: getNodeActionData(node) }\"\n            ></ng-container>\n          </div>\n        }\n      </div>\n    </mat-tree-node>\n  </mat-tree>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.MxTreeStore"],"mappings":"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"}