{"version":3,"file":"mtxTree.mjs","sources":["../../directives/nested-tree-node.directive.ts","../../directives/tree-node-def.directive.ts","../../directives/tree-node-outlet.directive.ts","../../directives/tree-node-padding.directive.ts","../../directives/tree-node-toggle.directive.ts","../../directives/tree-node.directive.ts","../../tree-utils.ts","../../tree.ts","../../tree.html","../../tree.config.ts","../../tree.module.ts","../../classes/tree-flat-data-source.class.ts","../../classes/tree-flattener.class.ts","../../classes/tree-nested-data-source.class.ts","../../mtxTree.ts"],"sourcesContent":["import { CdkTree } from '@angular/cdk/tree';\r\nimport { Directive, ElementRef, Inject, IterableDiffers } from '@angular/core';\r\nimport { MatNestedTreeNode } from '@angular/material/tree';\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxNestedTreenode]',\r\n  exportAs: 'mtxNestedTreenode'\r\n})\r\nexport class MtxNestedTreeNode<T, K> extends MatNestedTreeNode<T, K> {\r\n\tconstructor(\r\n\t\telementRef: ElementRef<HTMLElement>,\r\n\t\ttree: CdkTree<T, K>,\r\n\t\tdiffers: IterableDiffers,\r\n\t\t@Inject(-1) tabIndex: string\r\n\t){\r\n\t\tsuper(elementRef, tree, differs, tabIndex);\r\n\t}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\nimport { MatTreeNode, MatTreeNodeDef, MatNestedTreeNode, MatTreeNodePadding, MatTree, MatTreeNodeToggle, MatTreeNodeOutlet } from '@angular/material/tree';\r\n\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxTreeNodeDef]',\r\n  exportAs: 'mtxTreeNodeDef'\r\n})\r\nexport class MtxTreeNodeDef<T> extends MatTreeNodeDef<T>{\r\n\tconstructor(template: TemplateRef<any>){\r\n\t\tsuper(template);\r\n\t}\r\n}\r\n\r\n","import { Directive, Inject, Optional, ViewContainerRef } from '@angular/core';\r\nimport { MatTreeNodeOutlet } from '@angular/material/tree';\r\n\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxTreeNodeOutlet]',\r\n  exportAs: 'mtxTreeNodeOutlet'\r\n})\r\nexport class MtxTreeNodeOutlet extends MatTreeNodeOutlet {\r\n\tconstructor(\r\n\t\tviewContainer: ViewContainerRef,\r\n\t\t@Optional() @Inject('') node: any\r\n\t){\r\n\t\tsuper(viewContainer, node);\r\n\t}\r\n}\r\n\r\n","import { Directionality } from '@angular/cdk/bidi';\r\nimport { CdkTreeNode, CdkTree } from '@angular/cdk/tree';\r\nimport { Directive, ElementRef } from '@angular/core';\r\nimport { MatTreeNodePadding } from '@angular/material/tree';\r\n\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxTreeNodePadding]',\r\n  exportAs: 'mtxTreeNodePadding'\r\n})\r\nexport class MtxTreeNodePadding<T, K> extends MatTreeNodePadding<T, K> {\r\n\tconstructor( treeNode: CdkTreeNode<T, K>,  tree: CdkTree<T, K>,  element: ElementRef<HTMLElement>,  dir: Directionality){\r\n\t\tsuper(treeNode, tree, element, dir);\r\n\t}\r\n}\r\n\r\n","import { CdkTree, CdkTreeNode } from '@angular/cdk/tree';\r\nimport { Directive } from '@angular/core';\r\nimport { MatTreeNode, MatTreeNodeDef, MatNestedTreeNode, MatTreeNodePadding, MatTree, MatTreeNodeToggle, MatTreeNodeOutlet } from '@angular/material/tree';\r\n\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxTreeNodeToggle]',\r\n  exportAs: 'mtxTreeNodeToggle'\r\n})\r\nexport class MtxTreeNodeToggle<T, K> extends MatTreeNodeToggle<T, K> {\r\n\tconstructor(tree: CdkTree<T, K>,  treeNode: CdkTreeNode<T, K>){\r\n\t\tsuper(tree, treeNode);\r\n\t}\r\n}\r\n\r\n","import { CdkTree } from '@angular/cdk/tree';\r\nimport { Directive, ElementRef, Inject } from '@angular/core';\r\nimport { MatTreeNode } from '@angular/material/tree';\r\n\r\n@Directive({\r\n  selector: '[mtxTreeNode][mtxMatTreeNode]',\r\n  exportAs: 'mtxTreeNode'\r\n})\r\nexport class MtxTreeNode<T, K> extends MatTreeNode<T, K> {\r\n\tconstructor(\r\n\t\telementRef: ElementRef<HTMLElement>,\r\n\t\ttree: CdkTree<T, K>,\r\n\t\t@Inject(-1) tabIndex: string\r\n\t){\r\n\t\tsuper(elementRef, tree, tabIndex);\r\n\t}\r\n}\r\n\r\n","import { CollectionViewer, DataSource, SelectionChange } from \"@angular/cdk/collections\";\r\nimport { FlatTreeControl } from \"@angular/cdk/tree\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject, Observable, map, merge } from \"rxjs\";\r\n\r\nexport class DynamicFlatNode {\r\n\tconstructor(\r\n\t\tpublic name: string,\r\n\t\tpublic level = 1,\r\n\t\tpublic expandable = false,\r\n\t\tpublic isLoading = false,\r\n\t) { }\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class DynamicDatabase {\r\n\tdataMap = new Map<string, string[]>([]);\r\n\trootLevelNodes: string[] = [];\r\n\r\n\t/** Initial data from database */\r\n\tinitialData(): DynamicFlatNode[] {\r\n\t\treturn this.rootLevelNodes.map(name => new DynamicFlatNode(name, 0, true));\r\n\t}\r\n\r\n\tgetChildren(node: string): string[] | undefined {\r\n\t\treturn this.dataMap.get(node);\r\n\t}\r\n\r\n\tisExpandable(node: string): boolean {\r\n\t\treturn this.dataMap.has(node);\r\n\t}\r\n}\r\n\r\n/**\r\n * File database, it can build a tree structured Json object from string.\r\n * Each node in Json object represents a file or a directory. For a file, it has filename and type.\r\n * For a directory, it has filename and children (a list of files or directories).\r\n * The input will be a json object string, and the output is a list of `FileNode` with nested\r\n * structure.\r\n */\r\nexport class DynamicDataSource implements DataSource<DynamicFlatNode> {\r\n\tdataChange = new BehaviorSubject<DynamicFlatNode[]>([]);\r\n\r\n\tget data(): DynamicFlatNode[] {\r\n\t\treturn this.dataChange.value;\r\n\t}\r\n\tset data(value: DynamicFlatNode[]) {\r\n\t\tthis._treeControl.dataNodes = value;\r\n\t\tthis.dataChange.next(value);\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _treeControl: FlatTreeControl<DynamicFlatNode>,\r\n\t\tprivate _database: DynamicDatabase,\r\n\t) { }\r\n\r\n\tconnect(collectionViewer: CollectionViewer): Observable<DynamicFlatNode[]> {\r\n\t\tthis._treeControl.expansionModel.changed.subscribe(change => {\r\n\t\t\tif (\r\n\t\t\t\t(change as SelectionChange<DynamicFlatNode>).added ||\r\n\t\t\t\t(change as SelectionChange<DynamicFlatNode>).removed\r\n\t\t\t) {\r\n\t\t\t\tthis.handleTreeControl(change as SelectionChange<DynamicFlatNode>);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => this.data));\r\n\t}\r\n\r\n\tdisconnect(collectionViewer: CollectionViewer): void { }\r\n\r\n\t/** Handle expand/collapse behaviors */\r\n\thandleTreeControl(change: SelectionChange<DynamicFlatNode>) {\r\n\t\tif (change.added) {\r\n\t\t\tchange.added.forEach(node => this.toggleNode(node, true));\r\n\t\t}\r\n\t\tif (change.removed) {\r\n\t\t\tchange.removed\r\n\t\t\t\t.slice()\r\n\t\t\t\t.reverse()\r\n\t\t\t\t.forEach(node => this.toggleNode(node, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Toggle the node, remove from display list\r\n\t */\r\n\ttoggleNode(node: DynamicFlatNode, expand: boolean) {\r\n\t\tconst children = this._database.getChildren(node.name);\r\n\t\tconst index = this.data.indexOf(node);\r\n\t\tif (!children || index < 0) {\r\n\t\t\t// If no children, or cannot find the node, no op\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnode.isLoading = true;\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (expand) {\r\n\t\t\t\tconst nodes = children.map(name => new DynamicFlatNode(name, node.level + 1, this._database.isExpandable(name)));\r\n\t\t\t\tthis.data.splice(index + 1, 0, ...nodes);\r\n\t\t\t} else {\r\n\t\t\t\tlet count = 0;\r\n\t\t\t\tfor (\r\n\t\t\t\t\tlet i = index + 1;\r\n\t\t\t\t\ti < this.data.length && this.data[i].level > node.level;\r\n\t\t\t\t\ti++, count++\r\n\t\t\t\t) { }\r\n\t\t\t\tthis.data.splice(index + 1, count);\r\n\t\t\t}\r\n\r\n\t\t\t// notify the change\r\n\t\t\tthis.dataChange.next(this.data);\r\n\t\t\tnode.isLoading = false;\r\n\t\t}, 1000);\r\n\t}\r\n}\r\n\r\nexport const flattenNodes = (data: any[]): any[] => {\r\n\tconst result: any[] = [];\r\n\r\n\tconst flatten = (nodes: any[], level: number) => {\r\n\t\tnodes.forEach(node => {\r\n\t\t\tresult.push({ ...node, level });\r\n\t\t\tif (node.children) {\r\n\t\t\t\tflatten(node.children, level + 1);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tflatten(data, 0);\r\n\treturn result;\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { FlatTreeControl, NestedTreeControl } from '@angular/cdk/tree';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldModule, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTree, MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { delay } from 'rxjs/operators';\r\nimport { DynamicDatabase } from './tree-utils';\r\n\r\n@Component({\r\n\tselector: 'mtx-tree',\r\n\texportAs: '[mtxTree]',\r\n\ttemplateUrl: './tree.html',\r\n\tstyleUrls: ['./tree.scss'],\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tencapsulation: ViewEncapsulation.None,\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: MatTree,\r\n\t\t\tuseExisting: MtxTree,\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: MtxTree,\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t],\r\n\tanimations: [\r\n\t\ttrigger('expandCollapse', [\r\n\t\t\tstate('expanded', style({ height: '*', opacity: 1 })),\r\n\t\t\tstate('collapsed', style({ height: '0px', opacity: 0 })),\r\n\t\t\ttransition('expanded <=> collapsed', animate('300ms ease-in-out')),\r\n\t\t])\r\n\t],\r\n\thost: {\r\n\t\t'class': 'mtx-tree',\r\n\t\t'role': 'tree'\r\n\t},\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatToolbarModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatButtonModule,\r\n\t\tMatInputModule,\r\n\t\tMatIconModule,\r\n\t\tMatMenuModule,\r\n\t\tMatTreeModule,\r\n\t\tMatInputModule,\r\n\t\tMatCheckboxModule,\r\n\t\tDragDropModule,\r\n\t\tMatSuffix\r\n\t]\r\n})\r\nexport class MtxTree implements OnInit, ControlValueAccessor {\r\n\t@Input() data: any[] | Observable<any[]> = [];\r\n\t@Input() customFilterPlaceholder: string | any;\r\n\t@Input() nodeTemplate!: TemplateRef<any>;\r\n\t@Input() contextMenuTemplate!: TemplateRef<any>;\r\n\t@Input() customClasses!: string;\r\n\t@Input() enableFilter!: boolean;\r\n\t@Input() nested: boolean = false;\r\n\t@Input() showCheckbox: boolean = false;\r\n\t@Input() contextMenu: boolean = false;\r\n\t@Output() nodeSelect = new EventEmitter<any>();\r\n\t@Output() nodeExpand = new EventEmitter<any>();\r\n\t@Output() nodeCollapse = new EventEmitter<any>();\r\n\t@Output() nodeAction = new EventEmitter<any>();\r\n\r\n\t@ViewChild('treeContainer') treeContainer!: ElementRef;\r\n\ttreeControl!: FlatTreeControl<any>;\r\n\ttreeFlattener: MatTreeFlattener<any, any>;\r\n\tdataSource!: MatTreeFlatDataSource<any, any>;\r\n\tnestedTreeControl!: NestedTreeControl<any>;\r\n\tnestedDataSource!: MatTreeNestedDataSource<any>;\r\n\tchecklistSelection = new SelectionModel<any>(true);\r\n\terrorMessage!: string;\r\n\tisDisabled: boolean = false;\r\n\tcontextMenuNode: any;\r\n\tcontextMenuVisible: boolean = false;\r\n\tdragging: boolean = false;\r\n\texpandTimeout: any;\r\n\texpandDelay: number = 1000;\r\n\tvalidateDrop: boolean = false;\r\n\tcontextMenuPosition: { x: number, y: number } = { x: 0, y: 0 };\r\n\tfilterText: string = '';\r\n\tnodes = [];\r\n\toriginalTreeData: any;\r\n\tonChange = (value: any) => { };\r\n\tonTouched = () => { };\r\n\r\n\tconstructor(database: DynamicDatabase) {\r\n\t\tthis.treeFlattener = new MatTreeFlattener(\r\n\t\t\tthis.transformer,\r\n\t\t\tthis.getLevel,\r\n\t\t\tthis.isExpandable,\r\n\t\t\tthis.getChildren\r\n\t\t);\r\n\t\tthis.treeControl = new FlatTreeControl<any>(this.getLevel, this.isExpandable);\r\n\t\tthis.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\r\n\t\tthis.nestedTreeControl = new NestedTreeControl<any>(this.getChildren);\r\n\t\tthis.nestedDataSource = new MatTreeNestedDataSource<any>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (this.data) {\r\n\t\t\tif (this.data instanceof Observable) {\r\n\t\t\t\tthis.data.subscribe({\r\n\t\t\t\t\tnext: (data) => {\r\n\t\t\t\t\t\tif (!this.nested) {\r\n\t\t\t\t\t\t\tthis.dataSource.data = data;\r\n\t\t\t\t\t\t\tthis.treeControl.dataNodes = data;\r\n\t\t\t\t\t\t\tthis.originalTreeData = this.treeControl.dataNodes;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.nestedDataSource.data = data;\r\n\t\t\t\t\t\t\tthis.nestedTreeControl.dataNodes = data;\r\n\t\t\t\t\t\t\tthis.originalTreeData = this.nestedTreeControl.dataNodes;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: (err) => this.handleError(err),\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (!this.nested) {\r\n\t\t\t\t\t\tthis.dataSource.data = this.data;\r\n\t\t\t\t\t\tthis.treeControl.dataNodes = this.data;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.nestedDataSource.data = this.data;\r\n\t\t\t\t\t\tthis.nestedTreeControl.dataNodes = this.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.originalTreeData = this.data;\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.handleError(err);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttransformer = (node: any, level: number) => {\r\n\t\treturn {\r\n\t\t\t...node,\r\n\t\t\tlevel: level,\r\n\t\t\texpandable: !!node.children && node.children.length > 0\r\n\t\t};\r\n\t}\r\n\r\n\tgetLevel = (node: any) => node.level;\r\n\tisExpandable = (node: any) => node.expandable || (!!node.children && node.children.length > 0);\r\n\tgetChildren = (node: any): Observable<any[]> => new BehaviorSubject(node.children);\r\n\thasChild = (_: number, node: any) => node.expandable || (!!node.children && node.children.length > 0);\r\n\tisLeaf = (_: number, node: any) => { };\r\n\r\n\tvisibleNodes(): any[] {\r\n\t\tconst result: any[] = [];\r\n\t\tconst addExpandedChildren = (node: any, expanded: string[]) => {\r\n\t\t\tresult.push(node);\r\n\t\t\tif (expanded.includes(node.id)) {\r\n\t\t\t\tnode.children.map((child: any) => addExpandedChildren(child, expanded));\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.dataSource.data.forEach((node) => {\r\n\t\t\taddExpandedChildren(node, this.checklistSelection.selected);\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\tdrop(event: CdkDragDrop<any[], any[], any>): void {\r\n\t\tif (!event.isPointerOverContainer) return;\r\n\r\n\t\tconst visibleNodes = this.visibleNodes();\r\n\t\tconst changedData = JSON.parse(JSON.stringify(this.dataSource.data));\r\n\r\n\t\tif (event.previousContainer === event.container) {\r\n\t\t\tmoveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n\t\t} else {\r\n\t\t\ttransferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n\t\t}\r\n\t\tif (!this.nested) {\r\n\t\t\tthis.treeControl.dataNodes = this.dataSource.data;\r\n\t\t} else {\r\n\t\t\tthis.nestedTreeControl.dataNodes = this.nestedDataSource.data;\r\n\t\t}\r\n\t}\r\n\r\n\tdragStart() {\r\n\t\tthis.dragging = true;\r\n\t}\r\n\r\n\tdragEnd() {\r\n\t\tthis.dragging = false;\r\n\t}\r\n\r\n\tdragHover(node: any) {\r\n\t\tif (this.dragging) {\r\n\t\t\tclearTimeout(this.expandTimeout);\r\n\t\t\tthis.expandTimeout = setTimeout(() => {\r\n\t\t\t\tthis.treeControl.expand(node);\r\n\t\t\t}, this.expandDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tdragHoverEnd() {\r\n\t\tif (this.dragging) {\r\n\t\t\tclearTimeout(this.expandTimeout);\r\n\t\t}\r\n\t}\r\n\r\n\texpandNode(node: any): void {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tif (contextTreeControl.isExpandable(node)) {\r\n\t\t\tcontextTreeControl.expand(node);\r\n\t\t\tthis.nodeExpand.emit(node);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseNode(node: any): void {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tif (contextTreeControl.isExpandable(node)) {\r\n\t\t\tcontextTreeControl.collapse(node);\r\n\t\t\tthis.nodeCollapse.emit(node);\r\n\t\t}\r\n\t}\r\n\r\n\tloadNodeChildren(node: any): void {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tif (node.expandable && !node.children) {\r\n\t\t\tthis.loadChildren(node).subscribe(children => {\r\n\t\t\t\tnode.children = children;\r\n\t\t\t\tcontextTreeControl.dataNodes = this.dataSource.data;\r\n\t\t\t\tcontextTreeControl.expand(node);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tcontextTreeControl.expand(node);\r\n\t\t}\r\n\t}\r\n\r\n\tloadChildren(node: any): Observable<any[]> {\r\n\t\t// Simulating lazy loading with a delay\r\n\t\treturn of([]).pipe(delay(1000));\r\n\t}\r\n\r\n\tdescendantsAllSelected(node: any): boolean {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tconst descendants = contextTreeControl.getDescendants(node);\r\n\t\tconst descAllSelected = descendants.every((child: any) => this.checklistSelection.isSelected(child));\r\n\t\treturn descAllSelected;\r\n\t}\r\n\r\n\tdescendantsPartiallySelected(node: any): boolean {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tconst descendants = contextTreeControl.getDescendants(node);\r\n\t\tconst result = descendants.some((child: any) => this.checklistSelection.isSelected(child));\r\n\t\treturn result && !this.descendantsAllSelected(node);\r\n\t}\r\n\r\n\ttodoItemSelectionToggle(node: any): void {\r\n\t\tthis.checklistSelection.toggle(node);\r\n\t\tconst descendants = this.treeControl.getDescendants(node);\r\n\t\tthis.checklistSelection.isSelected(node)\r\n\t\t\t? this.checklistSelection.select(...descendants)\r\n\t\t\t: this.checklistSelection.deselect(...descendants);\r\n\r\n\t\tdescendants.every((child: any) => this.checklistSelection.isSelected(child));\r\n\t\tthis.checkAllParentsSelection(node);\r\n\t\tthis.nodeSelect.emit(node);\r\n\t\tthis.onChange(this.checklistSelection.selected);\r\n\t}\r\n\r\n\ttodoLeafItemSelectionToggle(node: any): void {\r\n\t\tthis.checklistSelection.toggle(node);\r\n\t\tthis.checkAllParentsSelection(node);\r\n\t\tthis.nodeSelect.emit(node);\r\n\t\tthis.onChange(this.checklistSelection.selected);\r\n\t}\r\n\r\n\tcheckAllParentsSelection(node: any): void {\r\n\t\tlet parent: any | null = this.getParentNode(node);\r\n\t\twhile (parent) {\r\n\t\t\tthis.checkRootNodeSelection(parent);\r\n\t\t\tparent = this.getParentNode(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckRootNodeSelection(node: any): void {\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tconst nodeSelected = this.checklistSelection.isSelected(node);\r\n\t\tconst descendants = contextTreeControl.getDescendants(node);\r\n\t\tconst descAllSelected = descendants.every((child: any) =>\r\n\t\t\tthis.checklistSelection.isSelected(child)\r\n\t\t);\r\n\t\tif (nodeSelected && !descAllSelected) {\r\n\t\t\tthis.checklistSelection.deselect(node);\r\n\t\t} else if (!nodeSelected && descAllSelected) {\r\n\t\t\tthis.checklistSelection.select(node);\r\n\t\t}\r\n\t}\r\n\r\n\tgetParentNode(node: any): any | null {\r\n\t\tlet parent: any | null = null;\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tcontextTreeControl.dataNodes.some((n: { children: string | any[]; }) => {\r\n\t\t\tif (n.children && n.children.indexOf(node) > -1) {\r\n\t\t\t\tparent = n;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\treturn parent;\r\n\t}\r\n\r\n\tclearFilter() {\r\n\t\tthis.filterText = '';\r\n\t\tthis.filterNodes(this.filterText);\r\n\t}\r\n\r\n\tfilterNodes(filterText: string): void {\r\n\t\tthis.filterText = filterText;\r\n\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\tif (!filterText) {\r\n\t\t\tif (!this.nested) {\r\n\t\t\t\tthis.dataSource.data = this.originalTreeData;\r\n\t\t\t} else {\r\n\t\t\t\tthis.nestedDataSource.data = this.originalTreeData;\r\n\t\t\t}\r\n\t\t\tcontextTreeControl.collapseAll();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst filterTree = (nodes: any[], filter: string): any[] => {\r\n\t\t\treturn nodes\r\n\t\t\t\t.map(node => ({ ...node }))\r\n\t\t\t\t.filter(node => {\r\n\t\t\t\t\tif (node.name.toLowerCase().includes(filter.toLowerCase())) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (node.children) {\r\n\t\t\t\t\t\tnode.children = filterTree(node.children, filter);\r\n\t\t\t\t\t\treturn node.children.length > 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst expandFilteredNodes = (nodes: any[]) => {\r\n\t\t\tfor (const node of nodes) {\r\n\t\t\t\tconst flatNode = contextTreeControl.dataNodes.find((n: { name: any; }) => n.name === node.name);\r\n\t\t\t\tif (flatNode) {\r\n\t\t\t\t\tcontextTreeControl.expand(flatNode);\r\n\t\t\t\t}\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\texpandFilteredNodes(node.children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst filteredData = filterTree(this.originalTreeData, filterText);\r\n\t\tif (!this.nested) {\r\n\t\t\tthis.dataSource.data = filteredData;\r\n\t\t} else {\r\n\t\t\tthis.nestedDataSource.data = filteredData\r\n\t\t}\r\n\t\texpandFilteredNodes(filteredData);\r\n\t}\r\n\r\n\tfilterTreeData(data: any[], filterText: string): any[] {\r\n\t\treturn data.filter(node => {\r\n\t\t\tconst match = node.name.toLowerCase().includes(filterText.toLowerCase());\r\n\t\t\tif (node.children) {\r\n\t\t\t\tnode.children = this.filterTreeData(node.children, filterText);\r\n\t\t\t}\r\n\t\t\treturn match || (node.children && node.children.length > 0);\r\n\t\t});\r\n\t}\r\n\r\n\tonNodeCheckboxChange(node: any) {\r\n\t\tnode.checked = !node.checked;\r\n\t}\r\n\r\n\tonContextMenu(event: MouseEvent, node: any): void {\r\n\t\tevent.preventDefault();\r\n\t\tthis.contextMenuVisible = true;\r\n\t\tconst scrollTop  = document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n    \tconst scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || 0;\r\n\r\n\t\tconsole.log(event.clientX, event.clientY);\r\n\t\tthis.contextMenuPosition = {\r\n\t\t\tx: event.layerX + scrollLeft + 20,\r\n\t\t\ty: event.layerY + scrollTop\r\n\t\t};\r\n\t\tthis.contextMenuNode = node;\r\n\t}\r\n\r\n\thideContextMenu(): void {\r\n\t\tthis.contextMenuVisible = false;\r\n\t}\r\n\r\n\taddNewNode(node:any){\r\n\t\tthis.hideContextMenu();\r\n\t}\r\n\tremoveNode(node:any){\r\n\t\tthis.hideContextMenu();\r\n\t}\r\n\tupdateNode(node:any){\r\n\t\tthis.hideContextMenu();\r\n\t}\r\n\r\n\twriteValue(value: any): void {\r\n\t\tif (value) {\r\n\t\t\tconst contextTreeControl = this.nested ? this.nestedTreeControl : this.treeControl;\r\n\t\t\tthis.checklistSelection.clear();\r\n\t\t\tvalue.forEach((node: any) => this.checklistSelection.select(node));\r\n\t\t\tcontextTreeControl.dataNodes = value;\r\n\t\t\tif (!this.nested) {\r\n\t\t\t\tthis.dataSource.data = value;\r\n\t\t\t} else {\r\n\t\t\t\tthis.nestedDataSource.data = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (value: any) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.isDisabled = isDisabled;\r\n\t}\r\n\r\n\tprivate handleError(error: any): void {\r\n\t\tconsole.error('Error loading data:', error);\r\n\t\tthis.errorMessage = 'Error loading data. Please try again later.';\r\n\t}\r\n\r\n\t@HostListener('document:click') clickOutside(): void {\r\n\t\tif(this.contextMenu){\r\n\t\t\tthis.hideContextMenu();\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"mtx-tree-container\" [ngClass]=\"customClasses\">\r\n\t<!-- Filter Input -->\r\n\t<div class=\"mtx-tree-filter\" *ngIf=\"enableFilter\">\r\n\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t<input\r\n\t\t\t\tmatInput\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\t[placeholder]=\"customFilterPlaceholder ? customFilterPlaceholder : 'Filter nodes...'\"\r\n\t\t\t\t[(ngModel)]=\"filterText\"\r\n\t\t\t\t(input)=\"filterNodes(filterText)\" />\r\n\t\t\t<mat-icon\r\n\t\t\t\t*ngIf=\"filterText.length\"\r\n\t\t\t\t(click)=\"clearFilter()\"\r\n\t\t\t\taria-label=\"Clear filter\"\r\n\t\t\t\tmatSuffix\r\n\t\t\t\tclass=\"clear-filter-icon\">\r\n\t\t\t\tclose\r\n\t\t\t</mat-icon>\r\n\t\t</mat-form-field>\r\n\t</div>\r\n\r\n\t<!-- Tree Structure -->\r\n\t<ng-container *ngIf=\"!nested; else nestedTreeStructureTmpl\">\r\n\t\t<mat-tree\r\n\t\t\t[dataSource]=\"dataSource\"\r\n\t\t\t[treeControl]=\"treeControl\"\r\n\t\t\tcdkDropList\r\n\t\t\t(cdkDropListDropped)=\"drop($event)\">\r\n\t\t\t<!-- Nested Tree Nodes -->\r\n\t\t\t<mat-tree-node\r\n\t\t\t\t*matTreeNodeDef=\"let node; when: hasChild\"\r\n\t\t\t\t[class.mtx-tree-node]=\"true\"\r\n\t\t\t\t[class.mtx-tree-node-disabled]=\"node.disabled\"\r\n\t\t\t\t[class.mtx-tree-node-expanded]=\"treeControl.isExpanded(node)\"\r\n\t\t\t\t[class.mtx-tree-node-collapsed]=\"!treeControl.isExpanded(node)\"\r\n\t\t\t\t[matTreeNodePadding]=\"{ level: treeControl.getLevel(node), indent: 20 }\"\r\n\t\t\t\tcdkDrag\r\n\t\t\t\t[cdkDragData]=\"node\"\r\n\t\t\t\t(mouseenter)=\"dragHover(node)\"\r\n    \t\t\t(mouseleave)=\"dragHoverEnd()\"\r\n    \t\t\t(cdkDragStarted)=\"dragStart()\"\r\n    \t\t\t(cdkDragReleased)=\"dragEnd()\"\r\n\t\t\t\t(contextmenu)=\"contextMenu ? onContextMenu($event, node) : null\">\r\n\t\t\t\t<!-- Node Toggle -->\r\n\t\t\t\t<div class=\"mtx-tree-node-content mtx-tree-nested-node-content\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tmatTreeNodeToggle\r\n\t\t\t\t\t\t[attr.aria-label]=\"'Toggle ' + node.name\"\r\n\t\t\t\t\t\t*ngIf=\"isExpandable(node)\">\r\n\t\t\t\t\t\t<mat-icon>{{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<ng-container *ngIf=\"showCheckbox; else nodeWithoutCheckboxTmpl\">\r\n\t\t\t\t\t\t<!-- Node Checkbox -->\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\tclass=\"mtx-tree-node-checkbox\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"node.selected\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"onNodeCheckboxChange(node)\"\r\n\t\t\t\t\t\t\t*ngIf=\"showCheckbox\">\r\n\t\t\t\t\t\t\t<!-- Node Template -->\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<ng-template #nodeWithoutCheckboxTmpl>\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-tree-node>\r\n\r\n\t\t\t<!-- Children nodes -->\r\n\t\t\t<mat-tree-node\r\n\t\t\t\t*matTreeNodeDef=\"let child; let index = index\"\r\n\t\t\t\t[matTreeNodePadding]=\"{ level: treeControl.getLevel(child), indent: 20 }\"\r\n\t\t\t\tcdkDrag\r\n\t\t\t\t[cdkDragData]=\"child\"\r\n\t\t\t\t(mouseenter)=\"dragHover(child)\"\r\n\t\t\t\t(mouseleave)=\"dragHoverEnd()\"\r\n\t\t\t\t(cdkDragStarted)=\"dragStart()\"\r\n\t\t\t\t(cdkDragReleased)=\"dragEnd()\"\r\n\t\t\t\t(contextmenu)=\"contextMenu ? onContextMenu($event, child) : null\">\r\n\t\t\t\t<div class=\"mat-tree-node-children\">\r\n\t\t\t\t\t<ng-container *ngIf=\"showCheckbox; else nodeWithoutCheckboxTmpl\">\r\n\t\t\t\t\t\t<!-- Node Checkbox -->\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\tclass=\"mtx-tree-node-checkbox\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"child.selected\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"onNodeCheckboxChange(child)\"\r\n\t\t\t\t\t\t\t*ngIf=\"showCheckbox\">\r\n\t\t\t\t\t\t\t<!-- Node Template -->\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: child }\"></ng-container>\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<ng-template #nodeWithoutCheckboxTmpl>\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: child }\"></ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-tree-node>\r\n\t\t</mat-tree>\r\n\t</ng-container>\r\n\r\n\t<ng-template #nestedTreeStructureTmpl>\r\n\t\t<mat-tree\r\n\t\t\t[dataSource]=\"nestedDataSource\"\r\n\t\t\t[treeControl]=\"nestedTreeControl\"\r\n\t\t\tcdkDropList\r\n\t\t\t(cdkDropListDropped)=\"drop($event)\">\r\n\t\t\t<!-- Nested Tree Nodes -->\r\n\t\t\t<mat-nested-tree-node\r\n\t\t\t\t*matTreeNodeDef=\"let node; when: hasChild\"\r\n\t\t\t\t[class.mtx-tree-node-disabled]=\"node.disabled\"\r\n\t\t\t\t[class.mtx-tree-node-expanded]=\"nestedTreeControl.isExpanded(node)\"\r\n\t\t\t\t[class.mtx-tree-node-collapsed]=\"!nestedTreeControl.isExpanded(node)\"\r\n\t\t\t\t[matTreeNodePadding]=\"{ level: treeControl.getLevel(node), indent: 20 }\"\r\n\t\t\t\tcdkDrag\r\n\t\t\t\t[cdkDragData]=\"node\"\r\n\t\t\t\t(mouseenter)=\"dragHover(node)\"\r\n\t\t\t\t(mouseleave)=\"dragHoverEnd()\"\r\n\t\t\t\t(cdkDragStarted)=\"dragStart()\"\r\n\t\t\t\t(cdkDragReleased)=\"dragEnd()\"\r\n\t\t\t\t(contextmenu)=\"contextMenu ? onContextMenu($event, node) : null\">\r\n\t\t\t\t<!-- Node Toggle -->\r\n\t\t\t\t<div class=\"mtx-tree-node-content mtx-tree-nested-node-content\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tmatTreeNodeToggle\r\n\t\t\t\t\t\t[attr.aria-label]=\"'Toggle ' + node.name\"\r\n\t\t\t\t\t\t*ngIf=\"isExpandable(node)\">\r\n\t\t\t\t\t\t<mat-icon>{{ nestedTreeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}</mat-icon>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"showCheckbox; else nodeWithoutCheckboxTmpl\">\r\n\t\t\t\t\t\t<!-- Node Checkbox -->\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\tclass=\"mtx-tree-node-checkbox\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"node.selected\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"onNodeCheckboxChange(node)\"\r\n\t\t\t\t\t\t\t*ngIf=\"showCheckbox\">\r\n\t\t\t\t\t\t\t<!-- Node Template -->\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<ng-template #nodeWithoutCheckboxTmpl>\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"nestedTreeControl.isExpanded(node)\">\r\n\t\t\t\t\t<ng-container matTreeNodeOutlet></ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-nested-tree-node>\r\n\r\n\t\t\t<!-- Leaf Nodes -->\r\n\t\t\t<mat-tree-node\r\n\t\t\t\t*matTreeNodeDef=\"let node;\"\r\n\t\t\t\t[class.mtx-tree-node]=\"true\"\r\n\t\t\t\t[class.mtx-tree-node-disabled]=\"node.disabled\"\r\n\t\t\t\t[matTreeNodePadding]=\"{ level: treeControl.getLevel(node), indent: 20 }\"\r\n\t\t\t\tcdkDrag\r\n\t\t\t\t[cdkDragData]=\"node\"\r\n\t\t\t\t(mouseenter)=\"dragHover(node)\"\r\n\t\t\t\t(mouseleave)=\"dragHoverEnd()\"\r\n\t\t\t\t(cdkDragStarted)=\"dragStart()\"\r\n\t\t\t\t(cdkDragReleased)=\"dragEnd()\"\r\n\t\t\t\t(contextmenu)=\"contextMenu ? onContextMenu($event, node) : null\">\r\n\t\t\t\t<div class=\"mtx-tree-node-content mtx-tree-leaf-node-content\">\r\n\t\t\t\t\t<ng-container *ngIf=\"showCheckbox; else nodeWithoutCheckboxTmpl\">\r\n\t\t\t\t\t\t<!-- Node Checkbox -->\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\tclass=\"mtx-tree-node-checkbox\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"node.selected\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"onNodeCheckboxChange(node)\"\r\n\t\t\t\t\t\t\t*ngIf=\"showCheckbox\">\r\n\t\t\t\t\t\t\t<!-- Node Template -->\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<ng-template #nodeWithoutCheckboxTmpl>\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"nodeTemplate ? nodeTemplate : defaultNodeTemplate; context: { $implicit: node }\"></ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-tree-node>\r\n\t\t</mat-tree>\r\n\t</ng-template>\r\n\r\n\t<!-- Context Menu -->\r\n\t<div\r\n\t\t*ngIf=\"contextMenu\"\r\n\t\tclass=\"mtx-context-menu\"\r\n\t\t[ngClass]=\"{ 'mtx-context-menu-show': contextMenuVisible }\"\r\n\t\t[style.top.px]=\"contextMenuPosition.y\"\r\n\t\t[style.left.px]=\"contextMenuPosition.x\"\r\n\t\t(click)=\"$event.stopPropagation()\">\r\n\t\t<ng-container *ngTemplateOutlet=\"defaultContextMenuTemplate; context: { $implicit: contextMenuNode }\"></ng-container>\r\n\t\t<ng-container *ngTemplateOutlet=\"contextMenuTemplate; context: { $implicit: contextMenuNode }\"></ng-container>\r\n\t</div>\r\n</div>\r\n\r\n<!-- Default ContextMenu Template -->\r\n<ng-template #defaultContextMenuTemplate let-node>\r\n\t<button class=\"mtx-context-menu-item\" (click)=\"addNewNode(node)\">Add Node</button>\r\n\t<button class=\"mtx-context-menu-item\" (click)=\"removeNode(node)\">Remove Node</button>\r\n\t<button class=\"mtx-context-menu-item\" (click)=\"updateNode(node)\">Update Node</button>\r\n</ng-template>\r\n\r\n<!-- Default Node Template -->\r\n<ng-template #defaultNodeTemplate let-node>\r\n\t<span>{{ node.name }}</span>\r\n</ng-template>\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface MtxTreeConfig {\r\n\t// Default data source\r\n\tdefaultData: any[];\r\n\r\n\t// Whether to show checkboxes\r\n\tshowCheckbox: boolean;\r\n\r\n\t// Default context menu template\r\n\tdefaultContextMenuTemplate: any;\r\n\r\n\t// Default node template\r\n\tdefaultNodeTemplate: any;\r\n\r\n\t// Default animation duration\r\n\tanimationDuration: number;\r\n\r\n\t// Default drag and drop options\r\n\tdragDropOptions: {\r\n\t\tdragStartDelay: number;\r\n\t\tdisabled: boolean;\r\n\t};\r\n\r\n\t// Default lazy loading options\r\n\tlazyLoadingOptions: {\r\n\t\tenabled: boolean;\r\n\t\tloadOnExpand: boolean;\r\n\t};\r\n\r\n\tenableFilter?: boolean;\r\n\tcontextMenu?:boolean;\r\n}\r\n\r\nexport const DEFAULT_MTX_TREE_CONFIG: MtxTreeConfig = {\r\n\tdefaultData: [],\r\n\tshowCheckbox: true,\r\n\tdefaultContextMenuTemplate: null,\r\n\tdefaultNodeTemplate: null,\r\n\tanimationDuration: 300,\r\n\tdragDropOptions: {\r\n\t\tdragStartDelay: 0,\r\n\t\tdisabled: false,\r\n\t},\r\n\tlazyLoadingOptions: {\r\n\t\tenabled: false,\r\n\t\tloadOnExpand: true,\r\n\t},\r\n\tenableFilter: false,\r\n\tcontextMenu:false\r\n};\r\n\r\nexport const MTX_TREE_CONFIG = new InjectionToken<MtxTreeConfig>('mtx-tree.config');\r\nexport const TREE_TRANSFORM_FUNCTION = new InjectionToken<(node: any, level: number) => any>('TREE_TRANSFORM_FUNCTION');\r\nexport const TREE_GET_LEVEL_FUNCTION = new InjectionToken<(node: any) => number>('TREE_GET_LEVEL_FUNCTION');\r\nexport const TREE_INITIAL_DATA = new InjectionToken<any[]>('TREE_INITIAL_DATA');\r\nexport const TREE_IS_EXPANDABLE = new InjectionToken<(node: any) => boolean>('TREE_IS_EXPANDABLE');\r\nexport const TREE_GET_CHILDREN = new InjectionToken<(node: any) => any[] | Observable<any[]> | null | undefined>('TREE_GET_CHILDREN');\r\n","import { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CdkTreeModule } from '@angular/cdk/tree';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\n\r\nimport {\r\n\tMtxNestedTreeNode,\r\n\tMtxTreeNode,\r\n\tMtxTreeNodeDef,\r\n\tMtxTreeNodeOutlet,\r\n\tMtxTreeNodePadding,\r\n\tMtxTreeNodeToggle\r\n} from './directives';\r\n\r\n\r\nimport { MtxTree } from './tree';\r\nimport { DEFAULT_MTX_TREE_CONFIG, MTX_TREE_CONFIG, TREE_GET_CHILDREN, TREE_GET_LEVEL_FUNCTION, TREE_INITIAL_DATA, TREE_IS_EXPANDABLE, TREE_TRANSFORM_FUNCTION } from './tree.config';\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tMtxTreeNode,\r\n\t\tMtxTreeNodeDef,\r\n\t\tMtxNestedTreeNode,\r\n\t\tMtxTreeNodePadding,\r\n\t\tMtxTreeNodeToggle,\r\n\t\tMtxTreeNodeOutlet\r\n\t],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tMatTreeModule,\r\n\t\tMatCheckboxModule,\r\n\t\tMatIconModule,\r\n\t\tMatButtonModule,\r\n\t\tMatMenuModule,\r\n\t\tMatInputModule,\r\n\t\tCdkTreeModule,\r\n\t\tDragDropModule,\r\n\t\tMtxTree\r\n\t],\r\n\texports: [\r\n\t\tMtxTree,\r\n\t\tMtxTreeNode,\r\n\t\tMtxTreeNodeDef,\r\n\t\tMtxNestedTreeNode,\r\n\t\tMtxTreeNodePadding,\r\n\t\tMtxTree,\r\n\t\tMtxTreeNodeToggle,\r\n\t\tMtxTreeNodeOutlet\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: MTX_TREE_CONFIG,\r\n\t\t\tuseValue: DEFAULT_MTX_TREE_CONFIG\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: TREE_GET_CHILDREN,\r\n\t\t\tuseValue: (node: any) => node.children // Provide your implementation of getChildren function here\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: TREE_IS_EXPANDABLE,\r\n\t\t\tuseValue: (node: any) => true // Provide your implementation of isExpandable function here\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: TREE_INITIAL_DATA,\r\n\t\t\tuseValue: [] // Provide initial data here if needed\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: TREE_GET_LEVEL_FUNCTION,\r\n\t\t\tuseValue: (node: any) => {\r\n\t\t\t  // Define your getLevel logic here\r\n\t\t\t  // Example: return level based on node properties\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: TREE_TRANSFORM_FUNCTION,\r\n\t\t\tuseValue: (node: any, level: number) => {\r\n\t\t\t  // Define your transformation logic here\r\n\t\t\t  // Example: return transformed node\r\n\t\t\t}\r\n\t\t},\r\n\t]\r\n})\r\nexport class MtxTreeModule { }\r\n","import { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';\r\nimport { TREE_INITIAL_DATA } from '../tree.config';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MtxTreeFlatDataSource<T, F, K> extends MatTreeFlatDataSource<T, F, K> {\r\n\tconstructor(\r\n\t\ttreeControl: FlatTreeControl<F, K>,\r\n\t\ttreeFlattener: MatTreeFlattener<T, F, K>,\r\n\t\t@Inject(TREE_INITIAL_DATA) private initialData: T[] | undefined\r\n\t){\r\n\t\tsuper(treeControl, treeFlattener, initialData);\r\n\t}\r\n}\r\n\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { MatTreeFlattener } from '@angular/material/tree';\r\nimport { Observable } from 'rxjs';\r\nimport { TREE_GET_CHILDREN, TREE_GET_LEVEL_FUNCTION, TREE_IS_EXPANDABLE, TREE_TRANSFORM_FUNCTION } from '../tree.config';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MtxTreeFlattener<T, F, K> extends MatTreeFlattener<T, F, K> {\r\n\tconstructor(\r\n\t\t@Inject(TREE_TRANSFORM_FUNCTION) public transformFunction: (node: T, level: number) => F,\r\n\t\t@Inject(TREE_GET_LEVEL_FUNCTION) public getLevel: (node: F) => number,\r\n\t\t@Inject(TREE_IS_EXPANDABLE) public isExpandable: (node: F) => boolean,\r\n\t\t@Inject(TREE_GET_CHILDREN) public getChildren: (node: T) => T[] | Observable<T[]> | null | undefined){\r\n\t\tsuper(transformFunction, getLevel, isExpandable, getChildren);\r\n\t}\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { MatTreeNestedDataSource } from '@angular/material/tree';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MtxTreeNestedDataSource<T> extends MatTreeNestedDataSource<T> {\r\n\tconstructor(){\r\n\t\tsuper();\r\n\t}\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DynamicDatabase","i2"],"mappings":"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"}