ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
1 lines • 54.9 kB
Source Map (JSON)
{"version":3,"file":"ng-zorro-antd-tree-view.mjs","sources":["../../components/tree-view/checkbox.ts","../../components/tree-view/utils.ts","../../components/tree-view/node-base.ts","../../components/tree-view/tree.ts","../../components/tree-view/indent.ts","../../components/tree-view/toggle.ts","../../components/tree-view/node.ts","../../components/tree-view/option.ts","../../components/tree-view/outlet.ts","../../components/tree-view/padding.ts","../../components/tree-view/tree-view.ts","../../components/tree-view/tree-virtual-scroll-view.ts","../../components/tree-view/tree-view.module.ts","../../components/tree-view/data-source.ts","../../components/tree-view/public-api.ts","../../components/tree-view/ng-zorro-antd-tree-view.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { BooleanInput } from 'ng-zorro-antd/core/types';\nimport { InputBoolean } from 'ng-zorro-antd/core/util';\n\n@Component({\n selector: 'nz-tree-node-checkbox:not([builtin])',\n template: ` <span class=\"ant-tree-checkbox-inner\"></span> `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n host: {\n class: 'ant-tree-checkbox',\n '[class.ant-tree-checkbox-checked]': `nzChecked`,\n '[class.ant-tree-checkbox-indeterminate]': `nzIndeterminate`,\n '[class.ant-tree-checkbox-disabled]': `nzDisabled`,\n '(click)': 'onClick($event)'\n }\n})\nexport class NzTreeNodeCheckboxComponent {\n static ngAcceptInputType_nzDisabled: BooleanInput;\n\n @Input() nzChecked?: boolean;\n @Input() nzIndeterminate?: boolean;\n @Input() @InputBoolean() nzDisabled?: boolean;\n @Output() readonly nzClick = new EventEmitter<MouseEvent>();\n\n onClick(e: MouseEvent): void {\n if (!this.nzDisabled) {\n this.nzClick.emit(e);\n }\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport const getParent = <T>(nodes: T[], node: T, getLevel: (dataNode: T) => number): T | null => {\n let index = nodes.indexOf(node);\n if (index < 0) {\n return null;\n }\n const level = getLevel(node);\n for (index--; index >= 0; index--) {\n const preLevel = getLevel(nodes[index]);\n if (preLevel + 1 === level) {\n return nodes[index];\n }\n if (preLevel + 1 < level) {\n return null;\n }\n }\n return null;\n};\n\nexport const getNextSibling = <T>(\n nodes: T[],\n node: T,\n getLevel: (dataNode: T) => number,\n _index?: number\n): T | null => {\n let index = typeof _index !== 'undefined' ? _index : nodes.indexOf(node);\n if (index < 0) {\n return null;\n }\n const level = getLevel(node);\n\n for (index++; index < nodes.length; index++) {\n const nextLevel = getLevel(nodes[index]);\n if (nextLevel < level) {\n return null;\n }\n if (nextLevel === level) {\n return nodes[index];\n }\n }\n return null;\n};\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CdkTreeNode } from '@angular/cdk/tree';\n\nexport abstract class NzNodeBase<T> extends CdkTreeNode<T> {\n abstract setIndents(indents: boolean[]): void;\n abstract isLeaf: boolean;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { DataSource } from '@angular/cdk/collections';\nimport { CdkTree, TreeControl } from '@angular/cdk/tree';\nimport {\n ChangeDetectorRef,\n Component,\n Host,\n Input,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n Optional,\n ViewContainerRef\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation';\nimport { BooleanInput, NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { InputBoolean } from 'ng-zorro-antd/core/util';\n\n@Component({ template: '' })\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class NzTreeView<T> extends CdkTree<T> implements OnInit, OnDestroy {\n static ngAcceptInputType_nzDirectoryTree: BooleanInput;\n static ngAcceptInputType_nzBlockNode: BooleanInput;\n\n private destroy$ = new Subject();\n dir: Direction = 'ltr';\n _dataSourceChanged = new Subject<void>();\n @Input('nzTreeControl') override treeControl!: TreeControl<T, NzSafeAny>;\n @Input('nzDataSource')\n override get dataSource(): DataSource<T> | Observable<T[]> | T[] {\n return super.dataSource;\n }\n override set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n super.dataSource = dataSource;\n }\n @Input() @InputBoolean() nzDirectoryTree = false;\n @Input() @InputBoolean() nzBlockNode = false;\n\n constructor(\n protected differs: IterableDiffers,\n protected changeDetectorRef: ChangeDetectorRef,\n @Host() @Optional() public noAnimation?: NzNoAnimationDirective,\n @Optional() private directionality?: Directionality\n ) {\n super(differs, changeDetectorRef);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n if (this.directionality) {\n this.dir = this.directionality.value;\n this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {\n this.dir = direction;\n this.changeDetectorRef.detectChanges();\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n override renderNodeChanges(\n data: T[] | readonly T[],\n dataDiffer?: IterableDiffer<T>,\n viewContainer?: ViewContainerRef,\n parentData?: T\n ): void {\n super.renderNodeChanges(data, dataDiffer, viewContainer, parentData);\n this._dataSourceChanged.next();\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, Input, OnDestroy } from '@angular/core';\nimport { animationFrameScheduler, asapScheduler, merge, Subscription } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\n\nimport { NzNodeBase } from './node-base';\nimport { NzTreeView } from './tree';\nimport { getNextSibling, getParent } from './utils';\n\n/**\n * [true, false, false, true] => 1001\n */\nfunction booleanArrayToString(arr: boolean[]): string {\n return arr.map(i => (i ? 1 : 0)).join('');\n}\n\nconst BUILD_INDENTS_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n selector: 'nz-tree-node-indents',\n template: `\n <span class=\"ant-tree-indent-unit\" [class.ant-tree-indent-unit-end]=\"!isEnd\" *ngFor=\"let isEnd of indents\"></span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ant-tree-indent'\n }\n})\nexport class NzTreeNodeIndentsComponent {\n @Input() indents: boolean[] = [];\n}\n\n@Directive({\n selector: 'nz-tree-node[nzTreeNodeIndentLine]',\n host: {\n class: 'ant-tree-show-line',\n '[class.ant-tree-treenode-leaf-last]': 'isLast && isLeaf'\n }\n})\nexport class NzTreeNodeIndentLineDirective<T> implements OnDestroy {\n isLast: boolean | 'unset' = 'unset';\n isLeaf = false;\n private preNodeRef: T | null = null;\n private nextNodeRef: T | null = null;\n private currentIndents: string = '';\n private changeSubscription: Subscription;\n\n constructor(private treeNode: NzNodeBase<T>, private tree: NzTreeView<T>, private cdr: ChangeDetectorRef) {\n this.buildIndents();\n this.checkLast();\n\n /**\n * The dependent data (TreeControl.dataNodes) can be set after node instantiation,\n * and setting the indents can cause frame rate loss if it is set too often.\n */\n this.changeSubscription = merge(this.treeNode._dataChanges, tree._dataSourceChanged)\n .pipe(auditTime(0, BUILD_INDENTS_SCHEDULER))\n .subscribe(() => {\n this.buildIndents();\n this.checkAdjacent();\n this.cdr.markForCheck();\n });\n }\n\n private getIndents(): boolean[] {\n const indents = [];\n const nodes = this.tree.treeControl.dataNodes;\n const getLevel = this.tree.treeControl.getLevel;\n let parent = getParent(nodes, this.treeNode.data, getLevel);\n while (parent) {\n const parentNextSibling = getNextSibling(nodes, parent, getLevel);\n if (parentNextSibling) {\n indents.unshift(true);\n } else {\n indents.unshift(false);\n }\n parent = getParent(nodes, parent, getLevel);\n }\n return indents;\n }\n\n private buildIndents(): void {\n if (this.treeNode.data) {\n const indents = this.getIndents();\n const diffString = booleanArrayToString(indents);\n if (diffString !== this.currentIndents) {\n this.treeNode.setIndents(this.getIndents());\n this.currentIndents = diffString;\n }\n }\n }\n\n /**\n * We need to add an class name for the last child node,\n * this result can also be affected when the adjacent nodes are changed.\n */\n private checkAdjacent(): void {\n const nodes = this.tree.treeControl.dataNodes;\n const index = nodes.indexOf(this.treeNode.data);\n const preNode = nodes[index - 1] || null;\n const nextNode = nodes[index + 1] || null;\n if (this.nextNodeRef !== nextNode || this.preNodeRef !== preNode) {\n this.checkLast(index);\n }\n this.preNodeRef = preNode;\n this.nextNodeRef = nextNode;\n }\n\n private checkLast(index?: number): void {\n const nodes = this.tree.treeControl.dataNodes;\n this.isLeaf = this.treeNode.isLeaf;\n this.isLast = !getNextSibling(nodes, this.treeNode.data, this.tree.treeControl.getLevel, index);\n }\n\n ngOnDestroy(): void {\n this.preNodeRef = null;\n this.nextNodeRef = null;\n this.changeSubscription.unsubscribe();\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CdkTreeNodeToggle } from '@angular/cdk/tree';\nimport { Directive, Input } from '@angular/core';\n\nimport { BooleanInput } from 'ng-zorro-antd/core/types';\n\n@Directive({\n selector: 'nz-tree-node-toggle[nzTreeNodeNoopToggle], [nzTreeNodeNoopToggle]',\n host: {\n class: 'ant-tree-switcher ant-tree-switcher-noop'\n }\n})\nexport class NzTreeNodeNoopToggleDirective {}\n\n@Directive({\n selector: 'nz-tree-node-toggle:not([nzTreeNodeNoopToggle]), [nzTreeNodeToggle]',\n providers: [{ provide: CdkTreeNodeToggle, useExisting: NzTreeNodeToggleDirective }],\n host: {\n class: 'ant-tree-switcher',\n '[class.ant-tree-switcher_open]': 'isExpanded',\n '[class.ant-tree-switcher_close]': '!isExpanded'\n }\n})\nexport class NzTreeNodeToggleDirective<T> extends CdkTreeNodeToggle<T> {\n static ngAcceptInputType_recursive: BooleanInput;\n\n @Input('nzTreeNodeToggleRecursive')\n override get recursive(): boolean {\n return this._recursive;\n }\n override set recursive(value: boolean) {\n this._recursive = coerceBooleanProperty(value);\n }\n\n get isExpanded(): boolean {\n return this._treeNode.isExpanded;\n }\n}\n\n@Directive({\n selector: '[nz-icon][nzTreeNodeToggleRotateIcon]',\n host: {\n class: 'ant-tree-switcher-icon'\n }\n})\nexport class NzTreeNodeToggleRotateIconDirective {}\n\n@Directive({\n selector: '[nz-icon][nzTreeNodeToggleActiveIcon]',\n host: {\n class: 'ant-tree-switcher-loading-icon'\n }\n})\nexport class NzTreeNodeToggleActiveIconDirective {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CdkTreeNode, CdkTreeNodeDef, CdkTreeNodeOutletContext } from '@angular/cdk/tree';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzNodeBase } from './node-base';\nimport { NzTreeView } from './tree';\n\nexport interface NzTreeVirtualNodeData<T> {\n data: T;\n context: CdkTreeNodeOutletContext<T>;\n nodeDef: CdkTreeNodeDef<T>;\n}\n\n@Component({\n selector: 'nz-tree-node:not([builtin])',\n exportAs: 'nzTreeNode',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: CdkTreeNode, useExisting: NzTreeNodeComponent },\n { provide: NzNodeBase, useExisting: NzTreeNodeComponent }\n ],\n template: `\n <nz-tree-node-indents [indents]=\"indents\" *ngIf=\"indents.length\"></nz-tree-node-indents>\n <ng-content select=\"nz-tree-node-toggle, [nz-tree-node-toggle]\"></ng-content>\n <nz-tree-node-toggle class=\"nz-tree-leaf-line-icon\" *ngIf=\"indents.length && isLeaf\" nzTreeNodeNoopToggle>\n <span class=\"ant-tree-switcher-leaf-line\"></span>\n </nz-tree-node-toggle>\n <ng-content select=\"nz-tree-node-checkbox\"></ng-content>\n <ng-content select=\"nz-tree-node-option\"></ng-content>\n <ng-content></ng-content>\n `,\n host: {\n '[class.ant-tree-treenode-switcher-open]': 'isExpanded',\n '[class.ant-tree-treenode-switcher-close]': '!isExpanded'\n }\n})\nexport class NzTreeNodeComponent<T> extends NzNodeBase<T> implements OnDestroy, OnInit {\n indents: boolean[] = [];\n disabled = false;\n selected = false;\n isLeaf = false;\n\n constructor(\n protected elementRef: ElementRef<HTMLElement>,\n protected tree: NzTreeView<T>,\n private renderer: Renderer2,\n private cdr: ChangeDetectorRef\n ) {\n super(elementRef, tree);\n this._elementRef.nativeElement.classList.add('ant-tree-treenode');\n }\n\n override ngOnInit(): void {\n this.isLeaf = !this.tree.treeControl.isExpandable(this.data);\n }\n\n disable(): void {\n this.disabled = true;\n this.updateDisabledClass();\n }\n\n enable(): void {\n this.disabled = false;\n this.updateDisabledClass();\n }\n\n select(): void {\n this.selected = true;\n this.updateSelectedClass();\n }\n\n deselect(): void {\n this.selected = false;\n this.updateSelectedClass();\n }\n\n setIndents(indents: boolean[]): void {\n this.indents = indents;\n this.cdr.markForCheck();\n }\n\n private updateSelectedClass(): void {\n if (this.selected) {\n this.renderer.addClass(this.elementRef.nativeElement, 'ant-tree-treenode-selected');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'ant-tree-treenode-selected');\n }\n }\n\n private updateDisabledClass(): void {\n if (this.disabled) {\n this.renderer.addClass(this.elementRef.nativeElement, 'ant-tree-treenode-disabled');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'ant-tree-treenode-disabled');\n }\n }\n}\n\n@Directive({\n selector: '[nzTreeNodeDef]',\n providers: [{ provide: CdkTreeNodeDef, useExisting: NzTreeNodeDefDirective }]\n})\nexport class NzTreeNodeDefDirective<T> extends CdkTreeNodeDef<T> {\n @Input('nzTreeNodeDefWhen') override when!: (index: number, nodeData: T) => boolean;\n}\n\n@Directive({\n selector: '[nzTreeVirtualScrollNodeOutlet]'\n})\nexport class NzTreeVirtualScrollNodeOutletDirective<T> implements OnChanges {\n private _viewRef: EmbeddedViewRef<NzSafeAny> | null = null;\n @Input() data!: NzTreeVirtualNodeData<T>;\n\n constructor(private _viewContainerRef: ViewContainerRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n const recreateView = this.shouldRecreateView(changes);\n if (recreateView) {\n const viewContainerRef = this._viewContainerRef;\n\n if (this._viewRef) {\n viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n }\n\n this._viewRef = this.data\n ? viewContainerRef.createEmbeddedView(this.data.nodeDef.template, this.data.context)\n : null;\n\n if (CdkTreeNode.mostRecentTreeNode && this._viewRef) {\n CdkTreeNode.mostRecentTreeNode.data = this.data.data;\n }\n } else if (this._viewRef && this.data.context) {\n this.updateExistingContext(this.data.context);\n }\n }\n\n private shouldRecreateView(changes: SimpleChanges): boolean {\n const ctxChange = changes.data;\n return ctxChange && this.hasContextShapeChanged(ctxChange);\n }\n\n private hasContextShapeChanged(ctxChange: SimpleChange): boolean {\n const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\n\n if (prevCtxKeys.length === currCtxKeys.length) {\n for (const propName of currCtxKeys) {\n if (prevCtxKeys.indexOf(propName) === -1) {\n return true;\n }\n }\n return ctxChange.previousValue?.data !== ctxChange.currentValue?.data;\n }\n return true;\n }\n\n private updateExistingContext(ctx: NzSafeAny): void {\n for (const propName of Object.keys(ctx)) {\n this._viewRef!.context[propName] = (this.data.context as NzSafeAny)[propName];\n }\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { NzDestroyService } from 'ng-zorro-antd/core/services';\nimport { BooleanInput } from 'ng-zorro-antd/core/types';\nimport { InputBoolean } from 'ng-zorro-antd/core/util';\n\nimport { NzTreeNodeComponent } from './node';\n\n@Component({\n selector: 'nz-tree-node-option',\n template: ` <span class=\"ant-tree-title\"><ng-content></ng-content></span> `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ant-tree-node-content-wrapper',\n '[class.ant-tree-node-content-wrapper-open]': 'isExpanded',\n '[class.ant-tree-node-selected]': 'nzSelected'\n },\n providers: [NzDestroyService]\n})\nexport class NzTreeNodeOptionComponent<T> implements OnChanges, OnInit {\n static ngAcceptInputType_nzSelected: BooleanInput;\n static ngAcceptInputType_nzDisabled: BooleanInput;\n\n @Input() @InputBoolean() nzSelected = false;\n @Input() @InputBoolean() nzDisabled = false;\n @Output() readonly nzClick = new EventEmitter<MouseEvent>();\n\n constructor(\n private ngZone: NgZone,\n private host: ElementRef<HTMLElement>,\n private destroy$: NzDestroyService,\n private treeNode: NzTreeNodeComponent<T>\n ) {}\n\n get isExpanded(): boolean {\n return this.treeNode.isExpanded;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { nzDisabled, nzSelected } = changes;\n if (nzDisabled) {\n if (nzDisabled.currentValue) {\n this.treeNode.disable();\n } else {\n this.treeNode.enable();\n }\n }\n\n if (nzSelected) {\n if (nzSelected.currentValue) {\n this.treeNode.select();\n } else {\n this.treeNode.deselect();\n }\n }\n }\n\n ngOnInit(): void {\n this.ngZone.runOutsideAngular(() =>\n fromEvent<MouseEvent>(this.host.nativeElement, 'click')\n .pipe(\n filter(() => !this.nzDisabled && this.nzClick.observers.length > 0),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n this.ngZone.run(() => this.nzClick.emit(event));\n })\n );\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CdkTreeNodeOutlet, CDK_TREE_NODE_OUTLET_NODE } from '@angular/cdk/tree';\nimport { Directive, Inject, Optional, ViewContainerRef } from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n@Directive({\n selector: '[nzTreeNodeOutlet]',\n providers: [\n {\n provide: CdkTreeNodeOutlet,\n useExisting: NzTreeNodeOutletDirective\n }\n ]\n})\nexport class NzTreeNodeOutletDirective implements CdkTreeNodeOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n @Inject(CDK_TREE_NODE_OUTLET_NODE) @Optional() public _node?: NzSafeAny\n ) {}\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NumberInput } from '@angular/cdk/coercion';\nimport { CdkTreeNodePadding } from '@angular/cdk/tree';\nimport { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[nzTreeNodePadding]',\n providers: [{ provide: CdkTreeNodePadding, useExisting: NzTreeNodePaddingDirective }]\n})\nexport class NzTreeNodePaddingDirective<T> extends CdkTreeNodePadding<T> {\n override _indent = 24;\n\n @Input('nzTreeNodePadding')\n override get level(): number {\n return this._level;\n }\n override set level(value: NumberInput) {\n this._setLevelInput(value);\n }\n\n @Input('nzTreeNodePaddingIndent')\n override get indent(): number | string {\n return this._indent;\n }\n override set indent(indent: number | string) {\n this._setIndentInput(indent);\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CdkTree } from '@angular/cdk/tree';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation } from '@angular/core';\n\nimport { treeCollapseMotion } from 'ng-zorro-antd/core/animation';\n\nimport { NzTreeNodeOutletDirective } from './outlet';\nimport { NzTreeView } from './tree';\n\n@Component({\n selector: 'nz-tree-view',\n exportAs: 'nzTreeView',\n template: `\n <div class=\"ant-tree-list-holder\">\n <div\n [@.disabled]=\"!_afterViewInit || noAnimation?.nzNoAnimation\"\n [@treeCollapseMotion]=\"_nodeOutlet.viewContainer.length\"\n class=\"ant-tree-list-holder-inner\"\n >\n <ng-container nzTreeNodeOutlet></ng-container>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: CdkTree, useExisting: NzTreeViewComponent },\n { provide: NzTreeView, useExisting: NzTreeViewComponent }\n ],\n host: {\n class: 'ant-tree',\n '[class.ant-tree-block-node]': 'nzDirectoryTree || nzBlockNode',\n '[class.ant-tree-directory]': 'nzDirectoryTree',\n '[class.ant-tree-rtl]': `dir === 'rtl'`\n },\n animations: [treeCollapseMotion]\n})\nexport class NzTreeViewComponent<T> extends NzTreeView<T> implements AfterViewInit {\n @ViewChild(NzTreeNodeOutletDirective, { static: true }) nodeOutlet!: NzTreeNodeOutletDirective;\n _afterViewInit = false;\n ngAfterViewInit(): void {\n Promise.resolve().then(() => {\n this._afterViewInit = true;\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CdkTree, CdkTreeNodeOutletContext } from '@angular/cdk/tree';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n TrackByFunction,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { NzTreeVirtualNodeData } from './node';\nimport { NzTreeNodeOutletDirective } from './outlet';\nimport { NzTreeView } from './tree';\n\nconst DEFAULT_SIZE = 28;\n\n@Component({\n selector: 'nz-tree-virtual-scroll-view',\n exportAs: 'nzTreeVirtualScrollView',\n template: `\n <div class=\"ant-tree-list\">\n <cdk-virtual-scroll-viewport\n class=\"ant-tree-list-holder\"\n [itemSize]=\"nzItemSize\"\n [minBufferPx]=\"nzMinBufferPx\"\n [maxBufferPx]=\"nzMaxBufferPx\"\n >\n <ng-container *cdkVirtualFor=\"let item of nodes; let i = index; trackBy: innerTrackBy\">\n <ng-template nzTreeVirtualScrollNodeOutlet [data]=\"item\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n <ng-container nzTreeNodeOutlet></ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NzTreeView, useExisting: NzTreeVirtualScrollViewComponent },\n { provide: CdkTree, useExisting: NzTreeVirtualScrollViewComponent }\n ],\n host: {\n class: 'ant-tree',\n '[class.ant-tree-block-node]': 'nzDirectoryTree || nzBlockNode',\n '[class.ant-tree-directory]': 'nzDirectoryTree',\n '[class.ant-tree-rtl]': `dir === 'rtl'`\n }\n})\nexport class NzTreeVirtualScrollViewComponent<T> extends NzTreeView<T> implements OnChanges {\n @ViewChild(NzTreeNodeOutletDirective, { static: true }) readonly nodeOutlet!: NzTreeNodeOutletDirective;\n @ViewChild(CdkVirtualScrollViewport, { static: true }) readonly virtualScrollViewport!: CdkVirtualScrollViewport;\n\n @Input() nzItemSize = DEFAULT_SIZE;\n @Input() nzMinBufferPx = DEFAULT_SIZE * 5;\n @Input() nzMaxBufferPx = DEFAULT_SIZE * 10;\n @Input() override trackBy!: TrackByFunction<T>;\n nodes: Array<NzTreeVirtualNodeData<T>> = [];\n innerTrackBy: TrackByFunction<NzTreeVirtualNodeData<T>> = i => i;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.trackBy) {\n if (typeof changes.trackBy.currentValue === 'function') {\n this.innerTrackBy = (index: number, n) => this.trackBy(index, n.data);\n } else {\n this.innerTrackBy = i => i;\n }\n }\n }\n\n override renderNodeChanges(data: T[] | readonly T[]): void {\n this.nodes = new Array(...data).map((n, i) => this.createNode(n, i));\n this._dataSourceChanged.next();\n }\n\n private createNode(nodeData: T, index: number): NzTreeVirtualNodeData<T> {\n const node = this._getNodeDef(nodeData, index);\n const context = new CdkTreeNodeOutletContext<T>(nodeData);\n if (this.treeControl.getLevel) {\n context.level = this.treeControl.getLevel(nodeData);\n } else {\n context.level = 0;\n }\n return {\n data: nodeData,\n context,\n nodeDef: node\n };\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation';\n\nimport { NzTreeNodeCheckboxComponent } from './checkbox';\nimport { NzTreeNodeIndentLineDirective, NzTreeNodeIndentsComponent } from './indent';\nimport { NzTreeNodeComponent, NzTreeNodeDefDirective, NzTreeVirtualScrollNodeOutletDirective } from './node';\nimport { NzTreeNodeOptionComponent } from './option';\nimport { NzTreeNodeOutletDirective } from './outlet';\nimport { NzTreeNodePaddingDirective } from './padding';\nimport {\n NzTreeNodeNoopToggleDirective,\n NzTreeNodeToggleActiveIconDirective,\n NzTreeNodeToggleDirective,\n NzTreeNodeToggleRotateIconDirective\n} from './toggle';\nimport { NzTreeView } from './tree';\nimport { NzTreeViewComponent } from './tree-view';\nimport { NzTreeVirtualScrollViewComponent } from './tree-virtual-scroll-view';\n\nconst treeWithControlComponents = [\n NzTreeView,\n NzTreeNodeOutletDirective,\n NzTreeViewComponent,\n NzTreeNodeDefDirective,\n NzTreeNodeComponent,\n NzTreeNodeToggleDirective,\n NzTreeNodePaddingDirective,\n NzTreeNodeToggleRotateIconDirective,\n NzTreeNodeToggleActiveIconDirective,\n NzTreeNodeOptionComponent,\n NzTreeNodeNoopToggleDirective,\n NzTreeNodeCheckboxComponent,\n NzTreeNodeIndentsComponent,\n NzTreeVirtualScrollViewComponent,\n NzTreeVirtualScrollNodeOutletDirective,\n NzTreeNodeIndentLineDirective\n];\n\n@NgModule({\n imports: [BidiModule, CommonModule, NzNoAnimationModule, ScrollingModule],\n declarations: [treeWithControlComponents],\n exports: [treeWithControlComponents]\n})\nexport class NzTreeViewModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { FlatTreeControl, TreeControl } from '@angular/cdk/tree';\nimport { BehaviorSubject, merge, Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nexport class NzTreeFlattener<T, F, K = F> {\n constructor(\n public transformFunction: (node: T, level: number) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) => Observable<T[]> | T[] | undefined | null\n ) {}\n\n private flattenNode(node: T, level: number, resultNodes: F[], parentMap: boolean[]): F[] {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this.flattenChildren(childrenNodes, level, resultNodes, parentMap);\n } else {\n childrenNodes.pipe(take(1)).subscribe(children => {\n this.flattenChildren(children, level, resultNodes, parentMap);\n });\n }\n }\n }\n return resultNodes;\n }\n\n private flattenChildren(children: T[], level: number, resultNodes: F[], parentMap: boolean[]): void {\n children.forEach((child, index) => {\n const childParentMap: boolean[] = parentMap.slice();\n childParentMap.push(index !== children.length - 1);\n this.flattenNode(child, level + 1, resultNodes, childParentMap);\n });\n }\n\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData: T[]): F[] {\n const resultNodes: F[] = [];\n structuredData.forEach(node => this.flattenNode(node, 0, resultNodes, []));\n return resultNodes;\n }\n\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F, K>): F[] {\n const results: F[] = [];\n const currentExpand: boolean[] = [];\n currentExpand[0] = true;\n\n nodes.forEach(node => {\n let expand = true;\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n if (expand) {\n results.push(node);\n }\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n return results;\n }\n}\n\nexport class NzTreeFlatDataSource<T, F, K = F> extends DataSource<F> {\n _flattenedData = new BehaviorSubject<F[]>([]);\n\n _expandedData = new BehaviorSubject<F[]>([]);\n\n _data: BehaviorSubject<T[]>;\n\n constructor(\n private _treeControl: FlatTreeControl<F, K>,\n private _treeFlattener: NzTreeFlattener<T, F, K>,\n initialData: T[] = []\n ) {\n super();\n this._data = new BehaviorSubject<T[]>(initialData);\n this.flatNodes();\n }\n\n setData(value: T[]): void {\n this._data.next(value);\n this.flatNodes();\n }\n\n getData(): T[] {\n return this._data.getValue();\n }\n\n connect(collectionViewer: CollectionViewer): Observable<F[]> {\n const changes = [collectionViewer.viewChange, this._treeControl.expansionModel.changed, this._flattenedData];\n return merge(...changes).pipe(\n map(() => {\n this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));\n return this._expandedData.value;\n })\n );\n }\n\n disconnect(): void {\n // no op\n }\n\n private flatNodes(): void {\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.getData()));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './tree-view.module';\nexport * from './checkbox';\nexport * from './utils';\nexport * from './data-source';\nexport * from './indent';\nexport * from './node';\nexport * from './option';\nexport * from './outlet';\nexport * from './padding';\nexport * from './toggle';\nexport * from './tree-view';\nexport * from './tree';\nexport * from './tree-virtual-scroll-view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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