\n @if (nzVirtualHeight) {\n
\n \n \n \n \n } @else {\n
\n @for (node of nzFlattenNodes; track trackByFlattenNode($index, node)) {\n \n }\n
\n }\n
\n `,\n providers: [\n NzTreeService,\n NzAnimationTreeCollapseService,\n {\n provide: NzTreeBaseService,\n useFactory: NzTreeServiceFactory\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NzTreeComponent),\n multi: true\n }\n ],\n host: {\n '[class.ant-select-tree]': `nzSelectMode`,\n '[class.ant-select-tree-show-line]': `nzSelectMode && nzShowLine`,\n '[class.ant-select-tree-icon-hide]': `nzSelectMode && !nzShowIcon`,\n '[class.ant-select-tree-block-node]': `nzSelectMode && nzBlockNode`,\n '[class.ant-tree]': `!nzSelectMode`,\n '[class.ant-tree-rtl]': `dir() === 'rtl'`,\n '[class.ant-tree-show-line]': `!nzSelectMode && nzShowLine`,\n '[class.ant-tree-icon-hide]': `!nzSelectMode && !nzShowIcon`,\n '[class.ant-tree-block-node]': `!nzSelectMode && nzBlockNode`,\n '[class.draggable-tree]': `nzDraggable`\n },\n imports: [\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n NzAnimationTreeCollapseDirective,\n NzTreeNodeBuiltinComponent\n ]\n})\nexport class NzTreeComponent extends NzTreeBase implements OnInit, OnChanges, ControlValueAccessor {\n readonly _nzModuleName: NzConfigKey = NZ_CONFIG_MODULE_NAME;\n\n protected readonly dir = inject(Directionality).valueSignal;\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n\n @Input({ transform: booleanAttribute }) @WithConfig() nzShowIcon: boolean = false;\n @Input({ transform: booleanAttribute }) @WithConfig() nzHideUnMatched: boolean = false;\n @Input({ transform: booleanAttribute }) @WithConfig() nzBlockNode: boolean = false;\n @Input({ transform: booleanAttribute }) nzExpandAll = false;\n @Input({ transform: booleanAttribute }) nzSelectMode = false;\n @Input({ transform: booleanAttribute }) nzCheckStrictly = false;\n @Input({ transform: booleanAttribute }) nzShowExpand: boolean = true;\n @Input({ transform: booleanAttribute }) nzShowLine = false;\n @Input({ transform: booleanAttribute }) nzCheckable = false;\n @Input({ transform: booleanAttribute }) nzAsyncData = false;\n @Input({ transform: booleanAttribute }) nzDraggable: boolean = false;\n @Input({ transform: booleanAttribute }) nzMultiple = false;\n @Input() nzExpandedIcon?: TemplateRef<{ $implicit: NzTreeNode; origin: NzTreeNodeOptions }>;\n @Input() nzVirtualItemSize = 28;\n @Input() nzVirtualMaxBufferPx = 500;\n @Input() nzVirtualMinBufferPx = 28;\n @Input() nzVirtualHeight: string | null = null;\n @Input() nzTreeTemplate?: TemplateRef<{ $implicit: NzTreeNode; origin: NzTreeNodeOptions }>;\n @Input() nzBeforeDrop?: (confirm: NzFormatBeforeDropEvent) => Observable