ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
630 lines (628 loc) • 70.9 kB
JavaScript
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