UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

630 lines (628 loc) 70.9 kB
import { __decorate } from "tslib"; import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling'; import { NgForOf, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Host, Input, Optional, Output, ViewChild, booleanAttribute, forwardRef, inject } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { treeCollapseMotion } from 'ng-zorro-antd/core/animation'; import { WithConfig } from 'ng-zorro-antd/core/config'; import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation'; import { NzTreeBase, NzTreeBaseService, NzTreeHigherOrderServiceToken, flattenTreeData } from 'ng-zorro-antd/core/tree'; import { NzTreeNodeBuiltinComponent } from './tree-node.component'; import { NzTreeService } from './tree.service'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/core/tree"; import * as i2 from "ng-zorro-antd/core/config"; import * as i3 from "@angular/cdk/bidi"; import * as i4 from "ng-zorro-antd/core/no-animation"; export function NzTreeServiceFactory() { const higherOrderService = inject(NzTreeHigherOrderServiceToken, { skipSelf: true, optional: true }); const treeService = inject(NzTreeService); return higherOrderService ?? treeService; } const NZ_CONFIG_MODULE_NAME = 'tree'; export class NzTreeComponent extends NzTreeBase { writeValue(value) { this.handleNzData(value); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } /** * Render all properties of nzTree * * @param changes: all changes from @Input */ renderTreeProperties(changes) { let useDefaultExpandedKeys = false; let expandAll = false; const { nzData, nzExpandedKeys, nzSelectedKeys, nzCheckedKeys, nzCheckStrictly, nzExpandAll, nzMultiple, nzSearchValue } = changes; if (nzExpandAll) { useDefaultExpandedKeys = true; expandAll = this.nzExpandAll; } if (nzMultiple) { this.nzTreeService.isMultiple = this.nzMultiple; } if (nzCheckStrictly) { this.nzTreeService.isCheckStrictly = this.nzCheckStrictly; } if (nzData) { this.handleNzData(this.nzData); } if (nzCheckedKeys) { this.handleCheckedKeys(this.nzCheckedKeys); } if (nzCheckStrictly) { this.handleCheckedKeys(null); } if (nzExpandedKeys || nzExpandAll) { useDefaultExpandedKeys = true; this.handleExpandedKeys(expandAll || this.nzExpandedKeys); } if (nzSelectedKeys) { this.handleSelectedKeys(this.nzSelectedKeys, this.nzMultiple); } if (nzSearchValue) { if (!(nzSearchValue.firstChange && !this.nzSearchValue)) { useDefaultExpandedKeys = false; this.handleSearchValue(nzSearchValue.currentValue, this.nzSearchFunc); this.nzSearchValueChange.emit(this.nzTreeService.formatEvent('search', null, null)); } } // flatten data const currentExpandedKeys = this.getExpandedNodeList().map(v => v.key); const newExpandedKeys = useDefaultExpandedKeys ? expandAll || this.nzExpandedKeys : currentExpandedKeys; this.handleFlattenNodes(this.nzTreeService.rootNodes, newExpandedKeys); } trackByFlattenNode(_, node) { return node.key; } // Deal with properties /** * nzData * * @param value */ handleNzData(value) { if (Array.isArray(value)) { const data = this.coerceTreeNodes(value); this.nzTreeService.initTree(data); } } handleFlattenNodes(data, expandKeys = []) { this.nzTreeService.flattenTreeData(data, expandKeys); } handleCheckedKeys(keys) { this.nzTreeService.conductCheck(keys, this.nzCheckStrictly); } handleExpandedKeys(keys = []) { this.nzTreeService.conductExpandedKeys(keys); } handleSelectedKeys(keys, isMulti) { this.nzTreeService.conductSelectedKeys(keys, isMulti); } handleSearchValue(value, searchFunc) { const dataList = flattenTreeData(this.nzTreeService.rootNodes, true).map(v => v.data); const checkIfMatched = (node) => { if (searchFunc) { return searchFunc(node.origin); } return !value || !node.title.toLowerCase().includes(value.toLowerCase()) ? false : true; }; dataList.forEach(v => { v.isMatched = checkIfMatched(v); v.canHide = !v.isMatched; if (!v.isMatched) { v.setExpanded(false); this.nzTreeService.setExpandedNodeList(v); } else { // expand this.nzTreeService.expandNodeAllParentBySearch(v); } this.nzTreeService.setMatchedNodeList(v); }); } /** * Handle emit event * * @param event * handle each event */ eventTriggerChanged(event) { const node = event.node; switch (event.eventName) { case 'expand': this.renderTree(); this.nzExpandChange.emit(event); break; case 'click': this.nzClick.emit(event); break; case 'dblclick': this.nzDblClick.emit(event); break; case 'contextmenu': this.nzContextMenu.emit(event); break; case 'check': // Render checked state with nodes' property `isChecked` this.nzTreeService.setCheckedNodeList(node); if (!this.nzCheckStrictly) { this.nzTreeService.conduct(node); } // Cause check method will rerender list, so we need recover it and next the new event to user const eventNext = this.nzTreeService.formatEvent('check', node, event.event); this.nzCheckBoxChange.emit(eventNext); const checkedKeys = this.nzTreeService.getCheckedNodeKeys(); this.nzCheckedKeysChange.emit(checkedKeys); break; case 'dragstart': // if node is expanded if (node.isExpanded) { node.setExpanded(!node.isExpanded); this.renderTree(); } this.nzOnDragStart.emit(event); break; case 'dragenter': const selectedNode = this.nzTreeService.getSelectedNode(); if (selectedNode && selectedNode.key !== node.key && !node.isExpanded && !node.isLeaf) { node.setExpanded(true); this.renderTree(); } this.nzOnDragEnter.emit(event); break; case 'dragover': this.nzOnDragOver.emit(event); break; case 'dragleave': this.nzOnDragLeave.emit(event); break; case 'dragend': this.nzOnDragEnd.emit(event); break; case 'drop': this.renderTree(); this.nzOnDrop.emit(event); break; } } /** * Click expand icon */ renderTree() { this.handleFlattenNodes(this.nzTreeService.rootNodes, this.getExpandedNodeList().map(v => v.key)); this.cdr.markForCheck(); } // Handle emit event end constructor(nzTreeService, nzConfigService, cdr, directionality, noAnimation) { super(nzTreeService); this.nzConfigService = nzConfigService; this.cdr = cdr; this.directionality = directionality; this.noAnimation = noAnimation; this._nzModuleName = NZ_CONFIG_MODULE_NAME; this.nzShowIcon = false; this.nzHideUnMatched = false; this.nzBlockNode = false; this.nzExpandAll = false; this.nzSelectMode = false; this.nzCheckStrictly = false; this.nzShowExpand = true; this.nzShowLine = false; this.nzCheckable = false; this.nzAsyncData = false; this.nzDraggable = false; this.nzMultiple = false; this.nzVirtualItemSize = 28; this.nzVirtualMaxBufferPx = 500; this.nzVirtualMinBufferPx = 28; this.nzVirtualHeight = null; this.nzData = []; this.nzExpandedKeys = []; this.nzSelectedKeys = []; this.nzCheckedKeys = []; this.nzSearchValue = ''; this.nzFlattenNodes = []; this.beforeInit = true; this.dir = 'ltr'; this.nzExpandedKeysChange = new EventEmitter(); this.nzSelectedKeysChange = new EventEmitter(); this.nzCheckedKeysChange = new EventEmitter(); this.nzSearchValueChange = new EventEmitter(); this.nzClick = new EventEmitter(); this.nzDblClick = new EventEmitter(); this.nzContextMenu = new EventEmitter(); this.nzCheckBoxChange = new EventEmitter(); this.nzExpandChange = new EventEmitter(); this.nzOnDragStart = new EventEmitter(); this.nzOnDragEnter = new EventEmitter(); this.nzOnDragOver = new EventEmitter(); this.nzOnDragLeave = new EventEmitter(); this.nzOnDrop = new EventEmitter(); this.nzOnDragEnd = new EventEmitter(); this.HIDDEN_STYLE = { width: 0, height: 0, display: 'flex', overflow: 'hidden', opacity: 0, border: 0, padding: 0, margin: 0 }; this.HIDDEN_NODE_STYLE = { position: 'absolute', pointerEvents: 'none', visibility: 'hidden', height: 0, overflow: 'hidden' }; this.destroy$ = new Subject(); this.onChange = () => null; this.onTouched = () => null; } ngOnInit() { this.nzTreeService.flattenNodes$.pipe(takeUntil(this.destroy$)).subscribe(data => { this.nzFlattenNodes = !!this.nzVirtualHeight && this.nzHideUnMatched && this.nzSearchValue?.length > 0 ? data.filter(d => !d.canHide) : data; this.cdr.markForCheck(); }); this.dir = this.directionality.value; this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction) => { this.dir = direction; this.cdr.detectChanges(); }); } ngOnChanges(changes) { this.renderTreeProperties(changes); } ngAfterViewInit() { this.beforeInit = false; } ngOnDestroy() { this.destroy$.next(true); this.destroy$.complete(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: NzTreeComponent, deps: [{ token: i1.NzTreeBaseService }, { token: i2.NzConfigService }, { token: i0.ChangeDetectorRef }, { token: i3.Directionality, optional: true }, { token: i4.NzNoAnimationDirective, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.1", type: NzTreeComponent, isStandalone: true, selector: "nz-tree", inputs: { nzShowIcon: ["nzShowIcon", "nzShowIcon", booleanAttribute], nzHideUnMatched: ["nzHideUnMatched", "nzHideUnMatched", booleanAttribute], nzBlockNode: ["nzBlockNode", "nzBlockNode", booleanAttribute], nzExpandAll: ["nzExpandAll", "nzExpandAll", booleanAttribute], nzSelectMode: ["nzSelectMode", "nzSelectMode", booleanAttribute], nzCheckStrictly: ["nzCheckStrictly", "nzCheckStrictly", booleanAttribute], nzShowExpand: ["nzShowExpand", "nzShowExpand", booleanAttribute], nzShowLine: ["nzShowLine", "nzShowLine", booleanAttribute], nzCheckable: ["nzCheckable", "nzCheckable", booleanAttribute], nzAsyncData: ["nzAsyncData", "nzAsyncData", booleanAttribute], nzDraggable: ["nzDraggable", "nzDraggable", booleanAttribute], nzMultiple: ["nzMultiple", "nzMultiple", booleanAttribute], nzExpandedIcon: "nzExpandedIcon", nzVirtualItemSize: "nzVirtualItemSize", nzVirtualMaxBufferPx: "nzVirtualMaxBufferPx", nzVirtualMinBufferPx: "nzVirtualMinBufferPx", nzVirtualHeight: "nzVirtualHeight", nzTreeTemplate: "nzTreeTemplate", nzBeforeDrop: "nzBeforeDrop", nzData: "nzData", nzExpandedKeys: "nzExpandedKeys", nzSelectedKeys: "nzSelectedKeys", nzCheckedKeys: "nzCheckedKeys", nzSearchValue: "nzSearchValue", nzSearchFunc: "nzSearchFunc" }, outputs: { nzExpandedKeysChange: "nzExpandedKeysChange", nzSelectedKeysChange: "nzSelectedKeysChange", nzCheckedKeysChange: "nzCheckedKeysChange", nzSearchValueChange: "nzSearchValueChange", nzClick: "nzClick", nzDblClick: "nzDblClick", nzContextMenu: "nzContextMenu", nzCheckBoxChange: "nzCheckBoxChange", nzExpandChange: "nzExpandChange", nzOnDragStart: "nzOnDragStart", nzOnDragEnter: "nzOnDragEnter", nzOnDragOver: "nzOnDragOver", nzOnDragLeave: "nzOnDragLeave", nzOnDrop: "nzOnDrop", nzOnDragEnd: "nzOnDragEnd" }, host: { properties: { "class.ant-select-tree": "nzSelectMode", "class.ant-select-tree-show-line": "nzSelectMode && nzShowLine", "class.ant-select-tree-icon-hide": "nzSelectMode && !nzShowIcon", "class.ant-select-tree-block-node": "nzSelectMode && nzBlockNode", "class.ant-tree": "!nzSelectMode", "class.ant-tree-rtl": "dir === 'rtl'", "class.ant-tree-show-line": "!nzSelectMode && nzShowLine", "class.ant-tree-icon-hide": "!nzSelectMode && !nzShowIcon", "class.ant-tree-block-node": "!nzSelectMode && nzBlockNode", "class.draggable-tree": "nzDraggable" } }, providers: [ NzTreeService, { provide: NzTreeBaseService, useFactory: NzTreeServiceFactory }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NzTreeComponent), multi: true } ], queries: [{ propertyName: "nzTreeTemplateChild", first: true, predicate: ["nzTreeTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, read: CdkVirtualScrollViewport }], exportAs: ["nzTree"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: ` <div> <input [ngStyle]="HIDDEN_STYLE" /> </div> <div class="ant-tree-treenode" [ngStyle]="HIDDEN_NODE_STYLE"> <div class="ant-tree-indent"> <div class="ant-tree-indent-unit"></div> </div> </div> <div class="ant-tree-list" [class.ant-select-tree-list]="nzSelectMode" style="position: relative"> <cdk-virtual-scroll-viewport *ngIf="nzVirtualHeight" [class.ant-select-tree-list-holder-inner]="nzSelectMode" [class.ant-tree-list-holder-inner]="!nzSelectMode" [itemSize]="nzVirtualItemSize" [minBufferPx]="nzVirtualMinBufferPx" [maxBufferPx]="nzVirtualMaxBufferPx" [style.height]="nzVirtualHeight" > <ng-container *cdkVirtualFor="let node of nzFlattenNodes; trackBy: trackByFlattenNode"> <ng-template [ngTemplateOutlet]="nodeTemplate" [ngTemplateOutletContext]="{ $implicit: node }"></ng-template> </ng-container> </cdk-virtual-scroll-viewport> <div *ngIf="!nzVirtualHeight" [class.ant-select-tree-list-holder-inner]="nzSelectMode" [class.ant-tree-list-holder-inner]="!nzSelectMode" [@.disabled]="beforeInit || !!noAnimation?.nzNoAnimation" [nzNoAnimation]="noAnimation?.nzNoAnimation" [@treeCollapseMotion]="nzFlattenNodes.length" > <ng-container *ngFor="let node of nzFlattenNodes; trackBy: trackByFlattenNode"> <ng-template [ngTemplateOutlet]="nodeTemplate" [ngTemplateOutletContext]="{ $implicit: node }"></ng-template> </ng-container> </div> </div> <ng-template #nodeTemplate let-treeNode> <nz-tree-node builtin [icon]="treeNode.icon" [title]="treeNode.title" [isLoading]="treeNode.isLoading" [isSelected]="treeNode.isSelected" [isDisabled]="treeNode.isDisabled" [isMatched]="treeNode.isMatched" [isExpanded]="treeNode.isExpanded" [isLeaf]="treeNode.isLeaf" [isStart]="treeNode.isStart" [isEnd]="treeNode.isEnd" [isChecked]="treeNode.isChecked" [isHalfChecked]="treeNode.isHalfChecked" [isDisableCheckbox]="treeNode.isDisableCheckbox" [isSelectable]="treeNode.isSelectable" [canHide]="treeNode.canHide" [nzTreeNode]="treeNode" [nzSelectMode]="nzSelectMode" [nzShowLine]="nzShowLine" [nzExpandedIcon]="nzExpandedIcon" [nzDraggable]="nzDraggable" [nzCheckable]="nzCheckable" [nzShowExpand]="nzShowExpand" [nzAsyncData]="nzAsyncData" [nzSearchValue]="nzSearchValue" [nzHideUnMatched]="nzHideUnMatched" [nzBeforeDrop]="nzBeforeDrop" [nzShowIcon]="nzShowIcon" [nzTreeTemplate]="nzTreeTemplate || nzTreeTemplateChild" (nzExpandChange)="eventTriggerChanged($event)" (nzClick)="eventTriggerChanged($event)" (nzDblClick)="eventTriggerChanged($event)" (nzContextMenu)="eventTriggerChanged($event)" (nzCheckBoxChange)="eventTriggerChanged($event)" (nzOnDragStart)="eventTriggerChanged($event)" (nzOnDragEnter)="eventTriggerChanged($event)" (nzOnDragOver)="eventTriggerChanged($event)" (nzOnDragLeave)="eventTriggerChanged($event)" (nzOnDragEnd)="eventTriggerChanged($event)" (nzOnDrop)="eventTriggerChanged($event)" ></nz-tree-node> </ng-template> `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NzNoAnimationDirective, selector: "[nzNoAnimation]", inputs: ["nzNoAnimation"], exportAs: ["nzNoAnimation"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: NzTreeNodeBuiltinComponent, selector: "nz-tree-node[builtin]", inputs: ["icon", "title", "isLoading", "isSelected", "isDisabled", "isMatched", "isExpanded", "isLeaf", "isChecked", "isHalfChecked", "isDisableCheckbox", "isSelectable", "canHide", "isStart", "isEnd", "nzTreeNode", "nzShowLine", "nzShowExpand", "nzCheckable", "nzAsyncData", "nzHideUnMatched", "nzNoAnimation", "nzSelectMode", "nzShowIcon", "nzExpandedIcon", "nzTreeTemplate", "nzBeforeDrop", "nzSearchValue", "nzDraggable"], outputs: ["nzClick", "nzDblClick", "nzContextMenu", "nzCheckBoxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTreeBuiltinNode"] }], animations: [treeCollapseMotion], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } __decorate([ WithConfig() ], NzTreeComponent.prototype, "nzShowIcon", void 0); __decorate([ WithConfig() ], NzTreeComponent.prototype, "nzHideUnMatched", void 0); __decorate([ WithConfig() ], NzTreeComponent.prototype, "nzBlockNode", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: NzTreeComponent, decorators: [{ type: Component, args: [{ selector: 'nz-tree', exportAs: 'nzTree', animations: [treeCollapseMotion], template: ` <div> <input [ngStyle]="HIDDEN_STYLE" /> </div> <div class="ant-tree-treenode" [ngStyle]="HIDDEN_NODE_STYLE"> <div class="ant-tree-indent"> <div class="ant-tree-indent-unit"></div> </div> </div> <div class="ant-tree-list" [class.ant-select-tree-list]="nzSelectMode" style="position: relative"> <cdk-virtual-scroll-viewport *ngIf="nzVirtualHeight" [class.ant-select-tree-list-holder-inner]="nzSelectMode" [class.ant-tree-list-holder-inner]="!nzSelectMode" [itemSize]="nzVirtualItemSize" [minBufferPx]="nzVirtualMinBufferPx" [maxBufferPx]="nzVirtualMaxBufferPx" [style.height]="nzVirtualHeight" > <ng-container *cdkVirtualFor="let node of nzFlattenNodes; trackBy: trackByFlattenNode"> <ng-template [ngTemplateOutlet]="nodeTemplate" [ngTemplateOutletContext]="{ $implicit: node }"></ng-template> </ng-container> </cdk-virtual-scroll-viewport> <div *ngIf="!nzVirtualHeight" [class.ant-select-tree-list-holder-inner]="nzSelectMode" [class.ant-tree-list-holder-inner]="!nzSelectMode" [@.disabled]="beforeInit || !!noAnimation?.nzNoAnimation" [nzNoAnimation]="noAnimation?.nzNoAnimation" [@treeCollapseMotion]="nzFlattenNodes.length" > <ng-container *ngFor="let node of nzFlattenNodes; trackBy: trackByFlattenNode"> <ng-template [ngTemplateOutlet]="nodeTemplate" [ngTemplateOutletContext]="{ $implicit: node }"></ng-template> </ng-container> </div> </div> <ng-template #nodeTemplate let-treeNode> <nz-tree-node builtin [icon]="treeNode.icon" [title]="treeNode.title" [isLoading]="treeNode.isLoading" [isSelected]="treeNode.isSelected" [isDisabled]="treeNode.isDisabled" [isMatched]="treeNode.isMatched" [isExpanded]="treeNode.isExpanded" [isLeaf]="treeNode.isLeaf" [isStart]="treeNode.isStart" [isEnd]="treeNode.isEnd" [isChecked]="treeNode.isChecked" [isHalfChecked]="treeNode.isHalfChecked" [isDisableCheckbox]="treeNode.isDisableCheckbox" [isSelectable]="treeNode.isSelectable" [canHide]="treeNode.canHide" [nzTreeNode]="treeNode" [nzSelectMode]="nzSelectMode" [nzShowLine]="nzShowLine" [nzExpandedIcon]="nzExpandedIcon" [nzDraggable]="nzDraggable" [nzCheckable]="nzCheckable" [nzShowExpand]="nzShowExpand" [nzAsyncData]="nzAsyncData" [nzSearchValue]="nzSearchValue" [nzHideUnMatched]="nzHideUnMatched" [nzBeforeDrop]="nzBeforeDrop" [nzShowIcon]="nzShowIcon" [nzTreeTemplate]="nzTreeTemplate || nzTreeTemplateChild" (nzExpandChange)="eventTriggerChanged($event)" (nzClick)="eventTriggerChanged($event)" (nzDblClick)="eventTriggerChanged($event)" (nzContextMenu)="eventTriggerChanged($event)" (nzCheckBoxChange)="eventTriggerChanged($event)" (nzOnDragStart)="eventTriggerChanged($event)" (nzOnDragEnter)="eventTriggerChanged($event)" (nzOnDragOver)="eventTriggerChanged($event)" (nzOnDragLeave)="eventTriggerChanged($event)" (nzOnDragEnd)="eventTriggerChanged($event)" (nzOnDrop)="eventTriggerChanged($event)" ></nz-tree-node> </ng-template> `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ NzTreeService, { provide: NzTreeBaseService, useFactory: NzTreeServiceFactory }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NzTreeComponent), multi: true } ], host: { '[class.ant-select-tree]': `nzSelectMode`, '[class.ant-select-tree-show-line]': `nzSelectMode && nzShowLine`, '[class.ant-select-tree-icon-hide]': `nzSelectMode && !nzShowIcon`, '[class.ant-select-tree-block-node]': `nzSelectMode && nzBlockNode`, '[class.ant-tree]': `!nzSelectMode`, '[class.ant-tree-rtl]': `dir === 'rtl'`, '[class.ant-tree-show-line]': `!nzSelectMode && nzShowLine`, '[class.ant-tree-icon-hide]': `!nzSelectMode && !nzShowIcon`, '[class.ant-tree-block-node]': `!nzSelectMode && nzBlockNode`, '[class.draggable-tree]': `nzDraggable` }, imports: [ NgStyle, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, NgIf, CdkVirtualForOf, NgTemplateOutlet, NzNoAnimationDirective, NgForOf, NzTreeNodeBuiltinComponent ], standalone: true }] }], ctorParameters: () => [{ type: i1.NzTreeBaseService }, { type: i2.NzConfigService }, { type: i0.ChangeDetectorRef }, { type: i3.Directionality, decorators: [{ type: Optional }] }, { type: i4.NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] }], propDecorators: { nzShowIcon: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzHideUnMatched: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzBlockNode: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzExpandAll: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzSelectMode: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzCheckStrictly: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzShowExpand: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzShowLine: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzCheckable: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzAsyncData: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzDraggable: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzMultiple: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzExpandedIcon: [{ type: Input }], nzVirtualItemSize: [{ type: Input }], nzVirtualMaxBufferPx: [{ type: Input }], nzVirtualMinBufferPx: [{ type: Input }], nzVirtualHeight: [{ type: Input }], nzTreeTemplate: [{ type: Input }], nzBeforeDrop: [{ type: Input }], nzData: [{ type: Input }], nzExpandedKeys: [{ type: Input }], nzSelectedKeys: [{ type: Input }], nzCheckedKeys: [{ type: Input }], nzSearchValue: [{ type: Input }], nzSearchFunc: [{ type: Input }], nzTreeTemplateChild: [{ type: ContentChild, args: ['nzTreeTemplate', { static: true }] }], cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport, { read: CdkVirtualScrollViewport }] }], nzExpandedKeysChange: [{ type: Output }], nzSelectedKeysChange: [{ type: Output }], nzCheckedKeysChange: [{ type: Output }], nzSearchValueChange: [{ type: Output }], nzClick: [{ type: Output }], nzDblClick: [{ type: Output }], nzContextMenu: [{ type: Output }], nzCheckBoxChange: [{ type: Output }], nzExpandChange: [{ type: Output }], nzOnDragStart: [{ type: Output }], nzOnDragEnter: [{ type: Output }], nzOnDragOver: [{ type: Output }], nzOnDragLeave: [{ type: Output }], nzOnDrop: [{ type: Output }], nzOnDragEnd: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL3RyZWUvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLElBQUksRUFDSixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBZ0MsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUdMLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsNkJBQTZCLEVBSTdCLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUdqQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUUvQyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xD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LGFBQWE7c0JBQS9CLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSxXQUFXO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBOZ0Zvck9mLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyB0cmVlQ29sbGFwc2VNb3Rpb24gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvYW5pbWF0aW9uJztcbmltcG9ydCB7IE56Q29uZmlnS2V5LCBOekNvbmZpZ1NlcnZpY2UsIFdpdGhDb25maWcgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IE56Tm9BbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvbm8tYW5pbWF0aW9uJztcbmltcG9ydCB7XG4gIE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50LFxuICBOekZvcm1hdEVtaXRFdmVudCxcbiAgTnpUcmVlQmFzZSxcbiAgTnpUcmVlQmFzZVNlcnZpY2UsXG4gIE56VHJlZUhpZ2hlck9yZGVyU2VydmljZVRva2VuLFxuICBOelRyZWVOb2RlLFxuICBOelRyZWVOb2RlS2V5LFxuICBOelRyZWVOb2RlT3B0aW9ucyxcbiAgZmxhdHRlblRyZWVEYXRhXG59IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90cmVlJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IE56VHJlZU5vZGVCdWlsdGluQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE56VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBOelRyZWVTZXJ2aWNlRmFjdG9yeSgpOiBOelRyZWVCYXNlU2VydmljZSB7XG4gIGNvbnN0IGhpZ2hlck9yZGVyU2VydmljZSA9IGluamVjdChOelRyZWVIaWdoZXJPcmRlclNlcnZpY2VUb2tlbiwgeyBza2lwU2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvbnN0IHRyZWVTZXJ2aWNlID0gaW5qZWN0KE56VHJlZVNlcnZpY2UpO1xuICByZXR1cm4gaGlnaGVyT3JkZXJTZXJ2aWNlID8/IHRyZWVTZXJ2aWNlO1xufVxuXG5jb25zdCBOWl9DT05GSUdfTU9EVUxFX05BTUU6IE56Q29uZmlnS2V5ID0gJ3RyZWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei10cmVlJyxcbiAgZXhwb3J0QXM6ICduelRyZWUnLFxuICBhbmltYXRpb25zOiBbdHJlZUNvbGxhcHNlTW90aW9uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2PlxuICAgICAgPGlucHV0IFtuZ1N0eWxlXT1cIkhJRERFTl9TVFlMRVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFudC10cmVlLXRyZWVub2RlXCIgW25nU3R5bGVdPVwiSElEREVOX05PREVfU1RZTEVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbnQtdHJlZS1pbmRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFudC10cmVlLWluZGVudC11bml0XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYW50LXRyZWUtbGlzdFwiIFtjbGFzcy5hbnQtc2VsZWN0LXRyZWU