{"version":3,"file":"tree.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/control/base-tree-control.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/control/flat-tree-control.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/control/nested-tree-control.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/outlet.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/node.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/tree-errors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/tree.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/nested-node.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/padding.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/toggle.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/tree/tree-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\nimport {SelectionModel} from '../../collections';\nimport {Observable} from 'rxjs';\nimport {TreeControl} from './tree-control';\n\n/**\n * Base tree control. It has basic toggle/expand/collapse operations on a single data node.\n *\n * @deprecated Use one of levelAccessor or childrenAccessor. To be removed in a future version.\n * @breaking-change 21.0.0\n */\nexport abstract class BaseTreeControl implements TreeControl {\n /** Gets a list of descendent data nodes of a subtree rooted at given data node recursively. */\n abstract getDescendants(dataNode: T): T[];\n\n /** Expands all data nodes in the tree. */\n abstract expandAll(): void;\n\n /** Saved data node for `expandAll` action. */\n dataNodes!: T[];\n\n /** A selection model with multi-selection to track expansion status. */\n expansionModel: SelectionModel = new SelectionModel(true);\n\n /**\n * Returns the identifier by which a dataNode should be tracked, should its\n * reference change.\n *\n * Similar to trackBy for *ngFor\n */\n trackBy?: (dataNode: T) => K;\n\n /** Get depth of a given data node, return the level number. This is for flat tree node. */\n getLevel!: (dataNode: T) => number;\n\n /**\n * Whether the data node is expandable. Returns true if expandable.\n * This is for flat tree node.\n */\n isExpandable!: (dataNode: T) => boolean;\n\n /** Gets a stream that emits whenever the given data node's children change. */\n getChildren!: (dataNode: T) => Observable | T[] | undefined | null;\n\n /** Toggles one single data node's expanded/collapsed state. */\n toggle(dataNode: T): void {\n this.expansionModel.toggle(this._trackByValue(dataNode));\n }\n\n /** Expands one single data node. */\n expand(dataNode: T): void {\n this.expansionModel.select(this._trackByValue(dataNode));\n }\n\n /** Collapses one single data node. */\n collapse(dataNode: T): void {\n this.expansionModel.deselect(this._trackByValue(dataNode));\n }\n\n /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n isExpanded(dataNode: T): boolean {\n return this.expansionModel.isSelected(this._trackByValue(dataNode));\n }\n\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode: T): void {\n this.expansionModel.isSelected(this._trackByValue(dataNode))\n ? this.collapseDescendants(dataNode)\n : this.expandDescendants(dataNode);\n }\n\n /** Collapse all dataNodes in the tree. */\n collapseAll(): void {\n this.expansionModel.clear();\n }\n\n /** Expands a subtree rooted at given data node recursively. */\n expandDescendants(dataNode: T): void {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.select(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n\n /** Collapses a subtree rooted at given data node recursively. */\n collapseDescendants(dataNode: T): void {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.deselect(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n\n protected _trackByValue(value: T | K): K {\n return this.trackBy ? this.trackBy(value as T) : (value as K);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\nimport {BaseTreeControl} from './base-tree-control';\n\n/** Optional set of configuration that can be provided to the FlatTreeControl. */\nexport interface FlatTreeControlOptions {\n trackBy?: (dataNode: T) => K;\n}\n\n/**\n * Flat tree control. Able to expand/collapse a subtree recursively for flattened tree.\n *\n * @deprecated Use one of levelAccessor or childrenAccessor instead. To be removed in a future\n * version.\n * @breaking-change 21.0.0\n */\nexport class FlatTreeControl extends BaseTreeControl {\n /** Construct with flat tree data node functions getLevel and isExpandable. */\n constructor(\n public override getLevel: (dataNode: T) => number,\n public override isExpandable: (dataNode: T) => boolean,\n public options?: FlatTreeControlOptions,\n ) {\n super();\n\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n }\n\n /**\n * Gets a list of the data node's subtree of descendent data nodes.\n *\n * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n * with correct levels.\n */\n getDescendants(dataNode: T): T[] {\n const startIndex = this.dataNodes.indexOf(dataNode);\n const results: T[] = [];\n\n // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n // The level of descendants of a tree node must be greater than the level of the given\n // tree node.\n // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n // If we reach a node whose level is greater than the level of the tree node, we hit a\n // sibling of an ancestor.\n for (\n let i = startIndex + 1;\n i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]);\n i++\n ) {\n results.push(this.dataNodes[i]);\n }\n return results;\n }\n\n /**\n * Expands all data nodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.select(...this.dataNodes.map(node => this._trackByValue(node)));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\nimport {Observable, isObservable} from 'rxjs';\nimport {take, filter} from 'rxjs/operators';\nimport {BaseTreeControl} from './base-tree-control';\n\n/** Optional set of configuration that can be provided to the NestedTreeControl. */\nexport interface NestedTreeControlOptions {\n /** Function to determine if the provided node is expandable. */\n isExpandable?: (dataNode: T) => boolean;\n trackBy?: (dataNode: T) => K;\n}\n\n/**\n * Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type.\n *\n * @deprecated Use one of levelAccessor or childrenAccessor instead. To be removed in a future\n * version.\n * @breaking-change 21.0.0\n */\nexport class NestedTreeControl extends BaseTreeControl {\n /** Construct with nested tree function getChildren. */\n constructor(\n public override getChildren: (dataNode: T) => Observable | T[] | undefined | null,\n public options?: NestedTreeControlOptions,\n ) {\n super();\n\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n\n if (this.options?.isExpandable) {\n this.isExpandable = this.options.isExpandable;\n }\n }\n\n /**\n * Expands all dataNodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.clear();\n const allNodes = this.dataNodes.reduce(\n (accumulator: T[], dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode],\n [],\n );\n this.expansionModel.select(...allNodes.map(node => this._trackByValue(node)));\n }\n\n /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n getDescendants(dataNode: T): T[] {\n const descendants: T[] = [];\n\n this._getDescendants(descendants, dataNode);\n // Remove the node itself\n return descendants.splice(1);\n }\n\n /** A helper function to get descendants recursively. */\n protected _getDescendants(descendants: T[], dataNode: T): void {\n descendants.push(dataNode);\n const childrenNodes = this.getChildren(dataNode);\n if (Array.isArray(childrenNodes)) {\n childrenNodes.forEach((child: T) => this._getDescendants(descendants, child));\n } else if (isObservable(childrenNodes)) {\n // TypeScript as of version 3.5 doesn't seem to treat `Boolean` like a function that\n // returns a `boolean` specifically in the context of `filter`, so we manually clarify that.\n childrenNodes.pipe(take(1), filter(Boolean as () => boolean)).subscribe(children => {\n for (const child of children) {\n this._getDescendants(descendants, child);\n }\n });\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\nimport {Directive, InjectionToken, ViewContainerRef, inject} from '@angular/core';\n\n/**\n * Injection token used to provide a `CdkTreeNode` to its outlet.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nexport const CDK_TREE_NODE_OUTLET_NODE = new InjectionToken<{}>('CDK_TREE_NODE_OUTLET_NODE');\n\n/**\n * Outlet for nested CdkNode. Put `[cdkTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\n@Directive({\n selector: '[cdkTreeNodeOutlet]',\n})\nexport class CdkTreeNodeOutlet {\n viewContainer = inject(ViewContainerRef);\n _node? = inject(CDK_TREE_NODE_OUTLET_NODE, {optional: true});\n\n constructor(...args: unknown[]);\n constructor() {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\nimport {Directive, TemplateRef, inject} from '@angular/core';\n\n/** Context provided to the tree node component. */\nexport class CdkTreeNodeOutletContext {\n /** Data for the node. */\n $implicit: T;\n\n /** Depth of the node. */\n level!: number;\n\n /** Index location of the node. */\n index?: number;\n\n /** Length of the number of total dataNodes. */\n count?: number;\n\n constructor(data: T) {\n this.$implicit = data;\n }\n}\n\n/**\n * Data node definition for the CdkTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\n@Directive({\n selector: '[cdkTreeNodeDef]',\n inputs: [{name: 'when', alias: 'cdkTreeNodeDefWhen'}],\n})\nexport class CdkTreeNodeDef {\n /** @docs-private */\n template = inject>(TemplateRef);\n\n /**\n * Function that should return true if this node template should be used for the provided node\n * data and index. If left undefined, this node will be considered the default node template to\n * use when no other when functions return true for the data.\n * For every node, there must be at least one when function that passes or an undefined to\n * default.\n */\n when!: (index: number, nodeData: T) => boolean;\n\n constructor(...args: unknown[]);\n constructor() {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\n/**\n * Returns an error to be thrown when there is no usable data.\n * @docs-private\n */\nexport function getTreeNoValidDataSourceError() {\n return Error(`A valid data source must be provided.`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n * @docs-private\n */\nexport function getTreeMultipleDefaultNodeDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n * @docs-private\n */\nexport function getTreeMissingMatchingNodeDefError() {\n return Error(`Could not find a matching node definition for the provided node data.`);\n}\n\n/**\n * Returns an error to be thrown when there is no tree control.\n * @docs-private\n */\nexport function getTreeControlMissingError() {\n return Error(`Could not find a tree control, levelAccessor, or childrenAccessor for the tree.`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple ways of specifying children or level\n * provided to the tree.\n * @docs-private\n */\nexport function getMultipleTreeControlsError() {\n return Error(`More than one of tree control, levelAccessor, or childrenAccessor were provided.`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\nimport {\n TREE_KEY_MANAGER,\n TreeKeyManagerFactory,\n TreeKeyManagerItem,\n TreeKeyManagerOptions,\n TreeKeyManagerStrategy,\n} from '../a11y';\nimport {Directionality} from '../bidi';\nimport {\n CollectionViewer,\n DataSource,\n isDataSource,\n SelectionChange,\n SelectionModel,\n} from '../collections';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n EmbeddedViewRef,\n Input,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TrackByFunction,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n numberAttribute,\n inject,\n booleanAttribute,\n} from '@angular/core';\nimport {coerceObservable} from '../coercion/private';\nimport {\n BehaviorSubject,\n combineLatest,\n concat,\n EMPTY,\n Observable,\n Subject,\n Subscription,\n isObservable,\n of as observableOf,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n concatMap,\n map,\n reduce,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {TreeControl} from './control/tree-control';\nimport {CdkTreeNodeDef, CdkTreeNodeOutletContext} from './node';\nimport {CdkTreeNodeOutlet} from './outlet';\nimport {\n getMultipleTreeControlsError,\n getTreeControlMissingError,\n getTreeMissingMatchingNodeDefError,\n getTreeMultipleDefaultNodeDefsError,\n getTreeNoValidDataSourceError,\n} from './tree-errors';\n\ntype RenderingData =\n | {\n flattenedNodes: null;\n nodeType: null;\n renderNodes: readonly T[];\n }\n | {\n flattenedNodes: readonly T[];\n nodeType: 'nested' | 'flat';\n renderNodes: readonly T[];\n };\n\n/**\n * CDK tree component that connects with a data source to retrieve data of type `T` and renders\n * dataNodes with hierarchy. Updates the dataNodes when new data is provided by the data source.\n */\n@Component({\n selector: 'cdk-tree',\n exportAs: 'cdkTree',\n template: ``,\n host: {\n 'class': 'cdk-tree',\n 'role': 'tree',\n '(keydown)': '_sendKeydownToKeyManager($event)',\n },\n encapsulation: ViewEncapsulation.None,\n // The \"OnPush\" status for the `CdkTree` component is effectively a noop, so we are removing it.\n // The view for `CdkTree` consists entirely of templates declared in other views. As they are\n // declared elsewhere, they are checked when their declaration points are checked.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [CdkTreeNodeOutlet],\n})\nexport class CdkTree\n implements\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n CollectionViewer,\n OnDestroy,\n OnInit\n{\n private _differs = inject(IterableDiffers);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject(ElementRef);\n\n private _dir = inject(Directionality);\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject();\n\n /** Differ used to find the changes in the data provided by the data source. */\n private _dataDiffer!: IterableDiffer;\n\n /** Stores the node definition that does not have a when predicate. */\n private _defaultNodeDef: CdkTreeNodeDef | null = null;\n\n /** Data subscription */\n private _dataSubscription: Subscription | undefined;\n\n /** Level of nodes */\n private _levels: Map = new Map();\n\n /** The immediate parents for a node. This is `null` if there is no parent. */\n private _parents: Map = new Map();\n\n /**\n * Nodes grouped into each set, which is a list of nodes displayed together in the DOM.\n *\n * Lookup key is the parent of a set. Root nodes have key of null.\n *\n * Values is a 'set' of tree nodes. Each tree node maps to a treeitem element. Sets are in the\n * order that it is rendered. Each set maps directly to aria-posinset and aria-setsize attributes.\n */\n private _ariaSets: Map = new Map();\n\n /**\n * Provides a stream containing the latest data array to render. Influenced by the tree's\n * stream of view window (what dataNodes are currently on screen).\n * Data source can be an observable of data array, or a data array to render.\n */\n @Input()\n get dataSource(): DataSource | Observable | T[] {\n return this._dataSource;\n }\n set dataSource(dataSource: DataSource | Observable | T[]) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n private _dataSource!: DataSource | Observable | T[];\n\n /**\n * The tree controller\n *\n * @deprecated Use one of `levelAccessor` or `childrenAccessor` instead. To be removed in a\n * future version.\n * @breaking-change 21.0.0\n */\n @Input() treeControl?: TreeControl;\n\n /**\n * Given a data node, determines what tree level the node is at.\n *\n * One of levelAccessor or childrenAccessor must be specified, not both.\n * This is enforced at run-time.\n */\n @Input() levelAccessor?: (dataNode: T) => number;\n\n /**\n * Given a data node, determines what the children of that node are.\n *\n * One of levelAccessor or childrenAccessor must be specified, not both.\n * This is enforced at run-time.\n */\n @Input() childrenAccessor?: (dataNode: T) => T[] | Observable;\n\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data\n * relative to the function to know if a node should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n @Input() trackBy!: TrackByFunction;\n\n /**\n * Given a data node, determines the key by which we determine whether or not this node is expanded.\n */\n @Input() expansionKey?: (dataNode: T) => K;\n\n // Outlets within the tree's template where the dataNodes will be inserted.\n @ViewChild(CdkTreeNodeOutlet, {static: true}) _nodeOutlet!: CdkTreeNodeOutlet;\n\n /** The tree node template for the tree */\n @ContentChildren(CdkTreeNodeDef, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n })\n _nodeDefs!: QueryList>;\n\n // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.\n // Remove the MAX_VALUE in viewChange\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n */\n readonly viewChange = new BehaviorSubject<{start: number; end: number}>({\n start: 0,\n end: Number.MAX_VALUE,\n });\n\n /** Keep track of which nodes are expanded. */\n private _expansionModel?: SelectionModel;\n\n /**\n * Maintain a synchronous cache of flattened data nodes. This will only be\n * populated after initial render, and in certain cases, will be delayed due to\n * relying on Observable `getChildren` calls.\n */\n private _flattenedNodes: BehaviorSubject = new BehaviorSubject([]);\n\n /** The automatically determined node type for the tree. */\n private _nodeType: BehaviorSubject<'flat' | 'nested' | null> = new BehaviorSubject<\n 'flat' | 'nested' | null\n >(null);\n\n /** The mapping between data and the node that is rendered. */\n private _nodes: BehaviorSubject>> = new BehaviorSubject(\n new Map>(),\n );\n\n /**\n * Synchronous cache of nodes for the `TreeKeyManager`. This is separate\n * from `_flattenedNodes` so they can be independently updated at different\n * times.\n */\n private _keyManagerNodes: BehaviorSubject = new BehaviorSubject([]);\n\n private _keyManagerFactory = inject(TREE_KEY_MANAGER) as TreeKeyManagerFactory>;\n\n /** The key manager for this tree. Handles focus and activation based on user keyboard input. */\n _keyManager!: TreeKeyManagerStrategy>;\n private _viewInit = false;\n\n constructor(...args: unknown[]);\n constructor() {}\n\n ngAfterContentInit() {\n this._initializeKeyManager();\n }\n\n ngAfterContentChecked() {\n this._updateDefaultNodeDefinition();\n this._subscribeToDataChanges();\n }\n\n ngOnDestroy() {\n this._nodeOutlet.viewContainer.clear();\n\n this._nodes.complete();\n this._keyManagerNodes.complete();\n this._nodeType.complete();\n this._flattenedNodes.complete();\n this.viewChange.complete();\n this._onDestroy.next();\n this._onDestroy.complete();\n\n if (this._dataSource && typeof (this._dataSource as DataSource).disconnect === 'function') {\n (this.dataSource as DataSource).disconnect(this);\n }\n\n this._dataSubscription?.unsubscribe();\n this._dataSubscription = undefined;\n\n // In certain tests, the tree might be destroyed before this is initialized\n // in `ngAfterContentInit`.\n this._keyManager?.destroy();\n }\n\n ngOnInit() {\n this._checkTreeControlUsage();\n this._initializeDataDiffer();\n }\n\n ngAfterViewInit() {\n this._viewInit = true;\n }\n\n private _updateDefaultNodeDefinition() {\n const defaultNodeDefs = this._nodeDefs.filter(def => !def.when);\n if (defaultNodeDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n this._defaultNodeDef = defaultNodeDefs[0];\n }\n\n /**\n * Sets the node type for the tree, if it hasn't been set yet.\n *\n * This will be called by the first node that's rendered in order for the tree\n * to determine what data transformations are required.\n */\n _setNodeTypeIfUnset(newType: 'flat' | 'nested') {\n const currentType = this._nodeType.value;\n\n if (currentType === null) {\n this._nodeType.next(newType);\n } else if ((typeof ngDevMode === 'undefined' || ngDevMode) && currentType !== newType) {\n console.warn(\n `Tree is using conflicting node types which can cause unexpected behavior. ` +\n `Please use tree nodes of the same type (e.g. only flat or only nested). ` +\n `Current node type: \"${currentType}\", new node type \"${newType}\".`,\n );\n }\n }\n\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the node outlet. Otherwise start listening for new data.\n */\n private _switchDataSource(dataSource: DataSource | Observable | T[]) {\n if (this._dataSource && typeof (this._dataSource as DataSource).disconnect === 'function') {\n (this.dataSource as DataSource).disconnect(this);\n }\n\n this._dataSubscription?.unsubscribe();\n this._dataSubscription = undefined;\n\n // Remove the all dataNodes if there is now no data source\n if (!dataSource) {\n this._nodeOutlet.viewContainer.clear();\n }\n\n this._dataSource = dataSource;\n if (this._nodeDefs) {\n this._subscribeToDataChanges();\n }\n }\n\n _getExpansionModel() {\n if (!this.treeControl) {\n this._expansionModel ??= new SelectionModel(true);\n return this._expansionModel;\n }\n return this.treeControl.expansionModel;\n }\n\n /** Set up a subscription for the data provided by the data source. */\n private _subscribeToDataChanges() {\n if (this._dataSubscription) {\n return;\n }\n\n let dataStream: Observable | undefined;\n\n if (isDataSource(this._dataSource)) {\n dataStream = this._dataSource.connect(this);\n } else if (isObservable(this._dataSource)) {\n dataStream = this._dataSource;\n } else if (Array.isArray(this._dataSource)) {\n dataStream = observableOf(this._dataSource);\n }\n\n if (!dataStream) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTreeNoValidDataSourceError();\n }\n return;\n }\n\n this._dataSubscription = this._getRenderData(dataStream)\n .pipe(takeUntil(this._onDestroy))\n .subscribe(renderingData => {\n this._renderDataChanges(renderingData);\n });\n }\n\n /** Given an Observable containing a stream of the raw data, returns an Observable containing the RenderingData */\n private _getRenderData(dataStream: Observable): Observable> {\n const expansionModel = this._getExpansionModel();\n return combineLatest([\n dataStream,\n this._nodeType,\n // We don't use the expansion data directly, however we add it here to essentially\n // trigger data rendering when expansion changes occur.\n expansionModel.changed.pipe(\n startWith(null),\n tap(expansionChanges => {\n this._emitExpansionChanges(expansionChanges);\n }),\n ),\n ]).pipe(\n switchMap(([data, nodeType]) => {\n if (nodeType === null) {\n return observableOf({renderNodes: data, flattenedNodes: null, nodeType} as const);\n }\n\n // If we're here, then we know what our node type is, and therefore can\n // perform our usual rendering pipeline, which necessitates converting the data\n return this._computeRenderingData(data, nodeType).pipe(\n map(convertedData => ({...convertedData, nodeType}) as const),\n );\n }),\n );\n }\n\n private _renderDataChanges(data: RenderingData) {\n if (data.nodeType === null) {\n this.renderNodeChanges(data.renderNodes);\n return;\n }\n\n // If we're here, then we know what our node type is, and therefore can\n // perform our usual rendering pipeline.\n this._updateCachedData(data.flattenedNodes);\n this.renderNodeChanges(data.renderNodes);\n this._updateKeyManagerItems(data.flattenedNodes);\n }\n\n private _emitExpansionChanges(expansionChanges: SelectionChange | null) {\n if (!expansionChanges) {\n return;\n }\n\n const nodes = this._nodes.value;\n for (const added of expansionChanges.added) {\n const node = nodes.get(added);\n node?._emitExpansionState(true);\n }\n for (const removed of expansionChanges.removed) {\n const node = nodes.get(removed);\n node?._emitExpansionState(false);\n }\n }\n\n private _initializeKeyManager() {\n const items = combineLatest([this._keyManagerNodes, this._nodes]).pipe(\n map(([keyManagerNodes, renderNodes]) =>\n keyManagerNodes.reduce[]>((items, data) => {\n const node = renderNodes.get(this._getExpansionKey(data));\n if (node) {\n items.push(node);\n }\n return items;\n }, []),\n ),\n );\n\n const keyManagerOptions: TreeKeyManagerOptions> = {\n trackBy: node => this._getExpansionKey(node.data),\n skipPredicate: node => !!node.isDisabled,\n typeAheadDebounceInterval: true,\n horizontalOrientation: this._dir.value,\n };\n\n this._keyManager = this._keyManagerFactory(items, keyManagerOptions);\n }\n\n private _initializeDataDiffer() {\n // Provide a default trackBy based on `_getExpansionKey` if one isn't provided.\n const trackBy = this.trackBy ?? ((_index: number, item: T) => this._getExpansionKey(item));\n this._dataDiffer = this._differs.find([]).create(trackBy);\n }\n\n private _checkTreeControlUsage() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Verify that Tree follows API contract of using one of TreeControl, levelAccessor or\n // childrenAccessor. Throw an appropriate error if contract is not met.\n let numTreeControls = 0;\n\n if (this.treeControl) {\n numTreeControls++;\n }\n if (this.levelAccessor) {\n numTreeControls++;\n }\n if (this.childrenAccessor) {\n numTreeControls++;\n }\n\n if (!numTreeControls) {\n throw getTreeControlMissingError();\n } else if (numTreeControls > 1) {\n throw getMultipleTreeControlsError();\n }\n }\n }\n\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(\n data: readonly T[],\n dataDiffer: IterableDiffer = this._dataDiffer,\n viewContainer: ViewContainerRef = this._nodeOutlet.viewContainer,\n parentData?: T,\n ) {\n const changes = dataDiffer.diff(data);\n\n // Some tree consumers expect change detection to propagate to nodes\n // even when the array itself hasn't changed; we explicitly detect changes\n // anyways in order for nodes to update their data.\n //\n // However, if change detection is called while the component's view is\n // still initing, then the order of child views initing will be incorrect;\n // to prevent this, we only exit early if the view hasn't initialized yet.\n if (!changes && !this._viewInit) {\n return;\n }\n\n changes?.forEachOperation(\n (\n item: IterableChangeRecord,\n adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex!);\n } else {\n const view = viewContainer.get(adjustedPreviousIndex!);\n viewContainer.move(view!, currentIndex);\n }\n },\n );\n\n // If the data itself changes, but keeps the same trackBy, we need to update the templates'\n // context to reflect the new object.\n changes?.forEachIdentityChange((record: IterableChangeRecord) => {\n const newData = record.item;\n if (record.currentIndex != undefined) {\n const view = viewContainer.get(record.currentIndex);\n (view as EmbeddedViewRef).context.$implicit = newData;\n }\n });\n\n // Note: we only `detectChanges` from a top-level call, otherwise we risk overflowing\n // the call stack since this method is called recursively (see #29733.)\n // TODO: change to `this._changeDetectorRef.markForCheck()`,\n // or just switch this component to use signals.\n if (parentData) {\n this._changeDetectorRef.markForCheck();\n } else {\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Finds the matching node definition that should be used for this node data. If there is only\n * one node definition, it is returned. Otherwise, find the node definition that has a when\n * predicate that returns true with the data. If none return true, return the default node\n * definition.\n */\n _getNodeDef(data: T, i: number): CdkTreeNodeDef {\n if (this._nodeDefs.length === 1) {\n return this._nodeDefs.first!;\n }\n\n const nodeDef =\n this._nodeDefs.find(def => def.when && def.when(i, data)) || this._defaultNodeDef;\n\n if (!nodeDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMissingMatchingNodeDefError();\n }\n\n return nodeDef!;\n }\n\n /**\n * Create the embedded view for the data node template and place it in the correct index location\n * within the data node view container.\n */\n insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T) {\n const levelAccessor = this._getLevelAccessor();\n\n const node = this._getNodeDef(nodeData, index);\n const key = this._getExpansionKey(nodeData);\n\n // Node context that will be provided to created embedded view\n const context = new CdkTreeNodeOutletContext(nodeData);\n context.index = index;\n\n parentData ??= this._parents.get(key) ?? undefined;\n // If the tree is flat tree, then use the `getLevel` function in flat tree control\n // Otherwise, use the level of parent node.\n if (levelAccessor) {\n context.level = levelAccessor(nodeData);\n } else if (parentData !== undefined && this._levels.has(this._getExpansionKey(parentData))) {\n context.level = this._levels.get(this._getExpansionKey(parentData))! + 1;\n } else {\n context.level = 0;\n }\n this._levels.set(key, context.level);\n\n // Use default tree nodeOutlet, or nested node's nodeOutlet\n const container = viewContainer ? viewContainer : this._nodeOutlet.viewContainer;\n container.createEmbeddedView(node.template, context, index);\n\n // Set the data to just created `CdkTreeNode`.\n // The `CdkTreeNode` created from `createEmbeddedView` will be saved in static variable\n // `mostRecentTreeNode`. We get it from static variable and pass the node data to it.\n if (CdkTreeNode.mostRecentTreeNode) {\n CdkTreeNode.mostRecentTreeNode.data = nodeData;\n }\n }\n\n /** Whether the data node is expanded or collapsed. Returns true if it's expanded. */\n isExpanded(dataNode: T): boolean {\n return !!(\n this.treeControl?.isExpanded(dataNode) ||\n this._expansionModel?.isSelected(this._getExpansionKey(dataNode))\n );\n }\n\n /** If the data node is currently expanded, collapse it. Otherwise, expand it. */\n toggle(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.toggle(dataNode);\n } else if (this._expansionModel) {\n this._expansionModel.toggle(this._getExpansionKey(dataNode));\n }\n }\n\n /** Expand the data node. If it is already expanded, does nothing. */\n expand(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.expand(dataNode);\n } else if (this._expansionModel) {\n this._expansionModel.select(this._getExpansionKey(dataNode));\n }\n }\n\n /** Collapse the data node. If it is already collapsed, does nothing. */\n collapse(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.collapse(dataNode);\n } else if (this._expansionModel) {\n this._expansionModel.deselect(this._getExpansionKey(dataNode));\n }\n }\n\n /**\n * If the data node is currently expanded, collapse it and all its descendants.\n * Otherwise, expand it and all its descendants.\n */\n toggleDescendants(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.toggleDescendants(dataNode);\n } else if (this._expansionModel) {\n if (this.isExpanded(dataNode)) {\n this.collapseDescendants(dataNode);\n } else {\n this.expandDescendants(dataNode);\n }\n }\n }\n\n /**\n * Expand the data node and all its descendants. If they are already expanded, does nothing.\n */\n expandDescendants(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.expandDescendants(dataNode);\n } else if (this._expansionModel) {\n const expansionModel = this._expansionModel;\n expansionModel.select(this._getExpansionKey(dataNode));\n this._getDescendants(dataNode)\n .pipe(take(1), takeUntil(this._onDestroy))\n .subscribe(children => {\n expansionModel.select(...children.map(child => this._getExpansionKey(child)));\n });\n }\n }\n\n /** Collapse the data node and all its descendants. If it is already collapsed, does nothing. */\n collapseDescendants(dataNode: T): void {\n if (this.treeControl) {\n this.treeControl.collapseDescendants(dataNode);\n } else if (this._expansionModel) {\n const expansionModel = this._expansionModel;\n expansionModel.deselect(this._getExpansionKey(dataNode));\n this._getDescendants(dataNode)\n .pipe(take(1), takeUntil(this._onDestroy))\n .subscribe(children => {\n expansionModel.deselect(...children.map(child => this._getExpansionKey(child)));\n });\n }\n }\n\n /** Expands all data nodes in the tree. */\n expandAll(): void {\n if (this.treeControl) {\n this.treeControl.expandAll();\n } else if (this._expansionModel) {\n this._forEachExpansionKey(keys => this._expansionModel?.select(...keys));\n }\n }\n\n /** Collapse all data nodes in the tree. */\n collapseAll(): void {\n if (this.treeControl) {\n this.treeControl.collapseAll();\n } else if (this._expansionModel) {\n this._forEachExpansionKey(keys => this._expansionModel?.deselect(...keys));\n }\n }\n\n /** Level accessor, used for compatibility between the old Tree and new Tree */\n _getLevelAccessor() {\n return this.treeControl?.getLevel?.bind(this.treeControl) ?? this.levelAccessor;\n }\n\n /** Children accessor, used for compatibility between the old Tree and new Tree */\n _getChildrenAccessor() {\n return this.treeControl?.getChildren?.bind(this.treeControl) ?? this.childrenAccessor;\n }\n\n /**\n * Gets the direct children of a node; used for compatibility between the old tree and the\n * new tree.\n */\n _getDirectChildren(dataNode: T): Observable {\n const levelAccessor = this._getLevelAccessor();\n const expansionModel = this._expansionModel ?? this.treeControl?.expansionModel;\n if (!expansionModel) {\n return observableOf([]);\n }\n\n const key = this._getExpansionKey(dataNode);\n\n const isExpanded = expansionModel.changed.pipe(\n switchMap(changes => {\n if (changes.added.includes(key)) {\n return observableOf(true);\n } else if (changes.removed.includes(key)) {\n return observableOf(false);\n }\n return EMPTY;\n }),\n startWith(this.isExpanded(dataNode)),\n );\n\n if (levelAccessor) {\n return combineLatest([isExpanded, this._flattenedNodes]).pipe(\n map(([expanded, flattenedNodes]) => {\n if (!expanded) {\n return [];\n }\n return this._findChildrenByLevel(levelAccessor, flattenedNodes, dataNode, 1);\n }),\n );\n }\n const childrenAccessor = this._getChildrenAccessor();\n if (childrenAccessor) {\n return coerceObservable(childrenAccessor(dataNode) ?? []);\n }\n throw getTreeControlMissingError();\n }\n\n /**\n * Given the list of flattened nodes, the level accessor, and the level range within\n * which to consider children, finds the children for a given node.\n *\n * For example, for direct children, `levelDelta` would be 1. For all descendants,\n * `levelDelta` would be Infinity.\n */\n private _findChildrenByLevel(\n levelAccessor: (node: T) => number,\n flattenedNodes: readonly T[],\n dataNode: T,\n levelDelta: number,\n ): T[] {\n const key = this._getExpansionKey(dataNode);\n const startIndex = flattenedNodes.findIndex(node => this._getExpansionKey(node) === key);\n const dataNodeLevel = levelAccessor(dataNode);\n const expectedLevel = dataNodeLevel + levelDelta;\n const results: T[] = [];\n\n // Goes through flattened tree nodes in the `flattenedNodes` array, and get all\n // descendants within a certain level range.\n //\n // If we reach a node whose level is equal to or less than the level of the tree node,\n // we hit a sibling or parent's sibling, and should stop.\n for (let i = startIndex + 1; i < flattenedNodes.length; i++) {\n const currentLevel = levelAccessor(flattenedNodes[i]);\n if (currentLevel <= dataNodeLevel) {\n break;\n }\n if (currentLevel <= expectedLevel) {\n results.push(flattenedNodes[i]);\n }\n }\n return results;\n }\n\n /**\n * Adds the specified node component to the tree's internal registry.\n *\n * This primarily facilitates keyboard navigation.\n */\n _registerNode(node: CdkTreeNode) {\n this._nodes.value.set(this._getExpansionKey(node.data), node);\n this._nodes.next(this._nodes.value);\n }\n\n /** Removes the specified node component from the tree's internal registry. */\n _unregisterNode(node: CdkTreeNode) {\n this._nodes.value.delete(this._getExpansionKey(node.data));\n this._nodes.next(this._nodes.value);\n }\n\n /**\n * For the given node, determine the level where this node appears in the tree.\n *\n * This is intended to be used for `aria-level` but is 0-indexed.\n */\n _getLevel(node: T) {\n return this._levels.get(this._getExpansionKey(node));\n }\n\n /**\n * For the given node, determine the size of the parent's child set.\n *\n * This is intended to be used for `aria-setsize`.\n */\n _getSetSize(dataNode: T) {\n const set = this._getAriaSet(dataNode);\n return set.length;\n }\n\n /**\n * For the given node, determine the index (starting from 1) of the node in its parent's child set.\n *\n * This is intended to be used for `aria-posinset`.\n */\n _getPositionInSet(dataNode: T) {\n const set = this._getAriaSet(dataNode);\n const key = this._getExpansionKey(dataNode);\n return set.findIndex(node => this._getExpansionKey(node) === key) + 1;\n }\n\n /** Given a CdkTreeNode, gets the node that renders that node's parent's data. */\n _getNodeParent(node: CdkTreeNode) {\n const parent = this._parents.get(this._getExpansionKey(node.data));\n return parent && this._nodes.value.get(this._getExpansionKey(parent));\n }\n\n /** Given a CdkTreeNode, gets the nodes that renders that node's child data. */\n _getNodeChildren(node: CdkTreeNode) {\n return this._getDirectChildren(node.data).pipe(\n map(children =>\n children.reduce[]>((nodes, child) => {\n const value = this._nodes.value.get(this._getExpansionKey(child));\n if (value) {\n nodes.push(value);\n }\n\n return nodes;\n }, []),\n ),\n );\n }\n\n /** `keydown` event handler; this just passes the event to the `TreeKeyManager`. */\n protected _sendKeydownToKeyManager(event: KeyboardEvent): void {\n // Only handle events directly on the tree or directly on one of the nodes, otherwise\n // we risk interfering with events in the projected content (see #29828).\n if (event.target === this._elementRef.nativeElement) {\n this._keyManager.onKeydown(event);\n } else {\n const nodes = this._nodes.getValue();\n for (const [, node] of nodes) {\n if (event.target === node._elementRef.nativeElement) {\n this._keyManager.onKeydown(event);\n break;\n }\n }\n }\n }\n\n /** Gets all nested descendants of a given node. */\n private _getDescendants(dataNode: T): Observable {\n if (this.treeControl) {\n return observableOf(this.treeControl.getDescendants(dataNode));\n }\n if (this.levelAccessor) {\n const results = this._findChildrenByLevel(\n this.levelAccessor,\n this._flattenedNodes.value,\n dataNode,\n Infinity,\n );\n return observableOf(results);\n }\n if (this.childrenAccessor) {\n return this._getAllChildrenRecursively(dataNode).pipe(\n reduce((allChildren: T[], nextChildren) => {\n allChildren.push(...nextChildren);\n return allChildren;\n }, []),\n );\n }\n throw getTreeControlMissingError();\n }\n\n /**\n * Gets all children and sub-children of the provided node.\n *\n * This will emit multiple times, in the order that the children will appear\n * in the tree, and can be combined with a `reduce` operator.\n */\n private _getAllChildrenRecursively(dataNode: T): Observable {\n if (!this.childrenAccessor) {\n return observableOf([]);\n }\n\n return coerceObservable(this.childrenAccessor(dataNode)).pipe(\n take(1),\n switchMap(children => {\n // Here, we cache the parents of a particular child so that we can compute the levels.\n for (const child of children) {\n this._parents.set(this._getExpansionKey(child), dataNode);\n }\n return observableOf(...children).pipe(\n concatMap(child => concat(observableOf([child]), this._getAllChildrenRecursively(child))),\n );\n }),\n );\n }\n\n private _getExpansionKey(dataNode: T): K {\n // In the case that a key accessor function was not provided by the\n // tree user, we'll default to using the node object itself as the key.\n //\n // This cast is safe since:\n // - if an expansionKey is provided, TS will infer the type of K to be\n // the return type.\n // - if it's not, then K will be defaulted to T.\n return this.expansionKey?.(dataNode) ?? (dataNode as unknown as K);\n }\n\n private _getAriaSet(node: T) {\n const key = this._getExpansionKey(node);\n const parent = this._parents.get(key);\n const parentKey = parent ? this._getExpansionKey(parent) : null;\n const set = this._ariaSets.get(parentKey);\n return set ?? [node];\n }\n\n /**\n * Finds the parent for the given node. If this is a root node, this\n * returns null. If we're unable to determine the parent, for example,\n * if we don't have cached node data, this returns undefined.\n */\n private _findParentForNode(node: T, index: number, cachedNodes: readonly T[]): T | null {\n // In all cases, we have a mapping from node to level; all we need to do here is backtrack in\n // our flattened list of nodes to determine the first node that's of a level lower than the\n // provided node.\n if (!cachedNodes.length) {\n return null;\n }\n const currentLevel = this._levels.get(this._getExpansionKey(node)) ?? 0;\n for (let parentIndex = index - 1; parentIndex >= 0; parentIndex--) {\n const parentNode = cachedNodes[parentIndex];\n const parentLevel = this._levels.get(this._getExpansionKey(parentNode)) ?? 0;\n\n if (parentLevel < currentLevel) {\n return parentNode;\n }\n }\n return null;\n }\n\n /**\n * Given a set of root nodes and the current node level, flattens any nested\n * nodes into a single array.\n *\n * If any nodes are not expanded, then their children will not be added into the array.\n * This will still traverse all nested children in order to build up our internal data\n * models, but will not include them in the returned array.\n */\n private _flattenNestedNodesWithExpansion(nodes: readonly T[], level = 0): Observable {\n const childrenAccessor = this._getChildrenAccessor();\n // If we're using a level accessor, we don't need to flatten anything.\n if (!childrenAccessor) {\n return observableOf([...nodes]);\n }\n\n return observableOf(...nodes).pipe(\n concatMap(node => {\n const parentKey = this._getExpansionKey(node);\n if (!this._parents.has(parentKey)) {\n this._parents.set(parentKey, null);\n }\n this._levels.set(parentKey, level);\n\n const children = coerceObservable(childrenAccessor(node));\n return concat(\n observableOf([node]),\n children.pipe(\n take(1),\n tap(childNodes => {\n this._ariaSets.set(parentKey, [...(childNodes ?? [])]);\n for (const child of childNodes ?? []) {\n const childKey = this._getExpansionKey(child);\n this._parents.set(childKey, node);\n this._levels.set(childKey, level + 1);\n }\n }),\n switchMap(childNodes => {\n if (!childNodes) {\n return observableOf([]);\n }\n return this._flattenNestedNodesWithExpansion(childNodes, level + 1).pipe(\n map(nestedNodes => (this.isExpanded(node) ? nestedNodes : [])),\n );\n }),\n ),\n );\n }),\n reduce((results, children) => {\n results.push(...children);\n return results;\n }, [] as T[]),\n );\n }\n\n /**\n * Converts children for certain tree configurations.\n *\n * This also computes parent, level, and group data.\n */\n private _computeRenderingData(\n nodes: readonly T[],\n nodeType: 'flat' | 'nested',\n ): Observable<{\n renderNodes: readonly T[];\n flattenedNodes: readonly T[];\n }> {\n // The only situations where we have to convert children types is when\n // they're mismatched; i.e. if the tree is using a childrenAccessor and the\n // nodes are flat, or if the tree is using a levelAccessor and the nodes are\n // nested.\n if (this.childrenAccessor && nodeType === 'flat') {\n // clear previously generated data so we don't keep end up retaining data overtime causing\n // memory leaks.\n this._clearPreviousCache();\n // This flattens children into a single array.\n this._ariaSets.set(null, [...nodes]);\n return this._flattenNestedNodesWithExpansion(nodes).pipe(\n map(flattenedNodes => ({\n renderNodes: flattenedNodes,\n flattenedNodes,\n })),\n );\n } else if (this.levelAccessor && nodeType === 'nested') {\n // In the nested case, we only look for root nodes. The CdkNestedNode\n // itself will handle rendering each individual node's children.\n const levelAccessor = this.levelAccessor;\n return observableOf(nodes.filter(node => levelAccessor(node) === 0)).pipe(\n map(rootNodes => ({\n renderNodes: rootNodes,\n flattenedNodes: nodes,\n })),\n tap(({flattenedNodes}) => {\n this._calculateParents(flattenedNodes);\n }),\n );\n } else if (nodeType === 'flat') {\n // In the case of a TreeControl, we know that the node type matches up\n // with the TreeControl, and so no conversions are necessary. Otherwise,\n // we've already confirmed that the data model matches up with the\n // desired node type here.\n return observableOf({renderNodes: nodes, flattenedNodes: nodes}).pipe(\n tap(({flattenedNodes}) => {\n this._calculateParents(flattenedNodes);\n }),\n );\n } else {\n // clear previously generated data so we don't keep end up retaining data overtime causing\n // memory leaks.\n this._clearPreviousCache();\n // For nested nodes, we still need to perform the node flattening in order\n // to maintain our caches for various tree operations.\n this._ariaSets.set(null, [...nodes]);\n return this._flattenNestedNodesWithExpansion(nodes).pipe(\n map(flattenedNodes => ({\n renderNodes: nodes,\n flattenedNodes,\n })),\n );\n }\n }\n\n private _updateCachedData(flattenedNodes: readonly T[]) {\n this._flattenedNodes.next(flattenedNodes);\n }\n\n private _updateKeyManagerItems(flattenedNodes: readonly T[]) {\n this._keyManagerNodes.next(flattenedNodes);\n }\n\n /** Traverse the flattened node data and compute parents, levels, and group data. */\n private _calculateParents(flattenedNodes: readonly T[]): void {\n const levelAccessor = this._getLevelAccessor();\n if (!levelAccessor) {\n return;\n }\n\n // clear previously generated data so we don't keep end up retaining data overtime causing\n // memory leaks.\n this._clearPreviousCache();\n\n for (let index = 0; index < flattenedNodes.length; index++) {\n const dataNode = flattenedNodes[index];\n const key = this._getExpansionKey(dataNode);\n this._levels.set(key, levelAccessor(dataNode));\n const parent = this._findParentForNode(dataNode, index, flattenedNodes);\n this._parents.set(key, parent);\n const parentKey = parent ? this._getExpansionKey(parent) : null;\n\n const group = this._ariaSets.get(parentKey) ?? [];\n group.splice(index, 0, dataNode);\n this._ariaSets.set(parentKey, group);\n }\n }\n\n /** Invokes a callback with all node expansion keys. */\n private _forEachExpansionKey(callback: (keys: K[]) => void) {\n const toToggle: K[] = [];\n const observables: Observable[] = [];\n\n this._nodes.value.forEach(node => {\n toToggle.push(this._getExpansionKey(node.data));\n observables.push(this._getDescendants(node.data));\n });\n\n if (observables.length > 0) {\n combineLatest(observables)\n .pipe(take(1), takeUntil(this._onDestroy))\n .subscribe(results => {\n results.forEach(inner => inner.forEach(r => toToggle.push(this._getExpansionKey(r))));\n callback(toToggle);\n });\n } else {\n callback(toToggle);\n }\n }\n\n /** Clears the maps we use to store parents, level & aria-sets in. */\n private _clearPreviousCache() {\n this._parents.clear();\n this._levels.clear();\n this._ariaSets.clear();\n }\n}\n\n/**\n * Tree node for CdkTree. It contains the data in the tree node.\n */\n@Directive({\n selector: 'cdk-tree-node',\n exportAs: 'cdkTreeNode',\n host: {\n 'class': 'cdk-tree-node',\n '[attr.aria-expanded]': '_getAriaExpanded()',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-posinset]': '_getPositionInSet()',\n '[attr.aria-setsize]': '_getSetSize()',\n '[tabindex]': '_tabindex',\n 'role': 'treeitem',\n '(click)': '_setActiveItem()',\n '(focus)': '_focusItem()',\n },\n})\nexport class CdkTreeNode implements OnDestroy, OnInit, TreeKeyManagerItem {\n _elementRef = inject>(ElementRef);\n protected _tree = inject>(CdkTree);\n protected _tabindex: number | null = -1;\n protected readonly _type: 'flat' | 'nested' = 'flat';\n\n /**\n * The role of the tree node.\n *\n * @deprecated This will be ignored; the tree will automatically determine the appropriate role\n * for tree node. This input will be removed in a future version.\n * @breaking-change 21.0.0\n */\n @Input() get role(): 'treeitem' | 'group' {\n return 'treeitem';\n }\n\n set role(_role: 'treeitem' | 'group') {\n // ignore any role setting, we handle this internally.\n }\n\n /**\n * Whether or not this node is expandable.\n *\n * If not using `FlatTreeControl`, or if `isExpandable` is not provided to\n * `NestedTreeControl`, this should be provided for correct node a11y.\n */\n @Input({transform: booleanAttribute})\n get isExpandable() {\n return this._isExpandable();\n }\n set isExpandable(isExpandable: boolean) {\n this._inputIsExpandable = isExpandable;\n if ((this.data && !this._isExpandable) || !this._inputIsExpandable) {\n return;\n }\n // If the node is being set to expandable, ensure that the status of the\n // node is propagated\n if (this._inputIsExpanded) {\n this.expand();\n } else if (this._inputIsExpanded === false) {\n this.collapse();\n }\n }\n\n @Input()\n get isExpanded(): boolean {\n return this._tree.isExpanded(this._data);\n }\n set isExpanded(isExpanded: boolean) {\n this._inputIsExpanded = isExpanded;\n if (isExpanded) {\n this.expand();\n } else {\n this.collapse();\n }\n }\n\n /**\n * Whether or not this node is disabled. If it's disabled, then the user won't be able to focus\n * or activate this node.\n */\n @Input({transform: booleanAttribute}) isDisabled: boolean = false;\n\n /**\n * The text used to locate this item during typeahead. If not specified, the `textContent` will\n * will be used.\n */\n @Input('cdkTreeNodeTypeaheadLabel') typeaheadLabel: string | null = null;\n\n getLabel(): string {\n return this.typeaheadLabel || this._elementRef.nativeElement.textContent?.trim() || '';\n }\n\n /** This emits when the node has been programatically activated or activated by keyboard. */\n @Output()\n readonly activation: EventEmitter = new EventEmitter();\n\n /** This emits when the node's expansion status has been changed. */\n @Output()\n readonly expandedChange: EventEmitter = new EventEmitter();\n\n /**\n * The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it\n * in `CdkTree` and set the data to it.\n */\n static mostRecentTreeNode: CdkTreeNode | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n protected readonly _destroyed = new Subject();\n\n /** Emits when the node's data has changed. */\n readonly _dataChanges = new Subject();\n\n private _inputIsExpandable: boolean = false;\n private _inputIsExpanded: boolean | undefined = undefined;\n /**\n * Flag used to determine whether or not we should be focusing the actual element based on\n * some user interaction (click or focus). On click, we don't forcibly focus the element\n * since the click could trigger some other component that wants to grab its own focus\n * (e.g. menu, dialog).\n */\n private _shouldFocus = true;\n private _parentNodeAriaLevel!: number;\n\n /** The tree node's data. */\n get data(): T {\n return this._data;\n }\n set data(value: T) {\n if (value !== this._data) {\n this._data = value;\n this._dataChanges.next();\n }\n }\n protected _data!: T;\n\n /* If leaf node, return true to not assign aria-expanded attribute */\n get isLeafNode(): boolean {\n // If flat tree node data returns false for expandable property, it's a leaf node\n if (\n this._tree.treeControl?.isExpandable !== undefined &&\n !this._tree.treeControl.isExpandable(this._data)\n ) {\n return true;\n\n // If nested tree node data returns 0 descendants, it's a leaf node\n } else if (\n this._tree.treeControl?.isExpandable === undefined &&\n this._tree.treeControl?.getDescendants(this._data).length === 0\n ) {\n return true;\n }\n\n return false;\n }\n\n get level(): number {\n // If the tree has a levelAccessor, use it to get the level. Otherwise read the\n // aria-level off the parent node and use it as the level for this node (note aria-level is\n // 1-indexed, while this property is 0-indexed, so we don't need to increment).\n return this._tree._getLevel(this._data) ?? this._parentNodeAriaLevel;\n }\n\n /** Determines if the tree node is expandable. */\n _isExpandable(): boolean {\n if (this._tree.treeControl) {\n if (this.isLeafNode) {\n return false;\n }\n\n // For compatibility with trees created using TreeControl before we added\n // CdkTreeNode#isExpandable.\n return true;\n }\n return this._inputIsExpandable;\n }\n\n /**\n * Determines the value for `aria-expanded`.\n *\n * For non-expandable nodes, this is `null`.\n */\n _getAriaExpanded(): string | null {\n if (!this._isExpandable()) {\n return null;\n }\n return String(this.isExpanded);\n }\n\n /**\n * Determines the size of this node's parent's child set.\n *\n * This is intended to be used for `aria-setsize`.\n */\n _getSetSize(): number {\n return this._tree._getSetSize(this._data);\n }\n\n /**\n * Determines the index (starting from 1) of this node in its parent's child set.\n *\n * This is intended to be used for `aria-posinset`.\n */\n _getPositionInSet(): number {\n return this._tree._getPositionInSet(this._data);\n }\n\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor(...args: unknown[]);\n\n constructor() {\n CdkTreeNode.mostRecentTreeNode = this as CdkTreeNode;\n }\n\n ngOnInit(): void {\n this._parentNodeAriaLevel = getParentNodeAriaLevel(this._elementRef.nativeElement);\n this._tree\n ._getExpansionModel()\n .changed.pipe(\n map(() => this.isExpanded),\n distinctUntilChanged(),\n takeUntil(this._destroyed),\n )\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n this._tree._setNodeTypeIfUnset(this._type);\n this._tree._registerNode(this);\n }\n\n ngOnDestroy() {\n // If this is the last tree node being destroyed,\n // clear out the reference to avoid leaking memory.\n if (CdkTreeNode.mostRecentTreeNode === this) {\n CdkTreeNode.mostRecentTreeNode = null;\n }\n\n this._dataChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n getParent(): CdkTreeNode | null {\n return this._tree._getNodeParent(this) ?? null;\n }\n\n getChildren(): CdkTreeNode[] | Observable[]> {\n return this._tree._getNodeChildren(this);\n }\n\n /** Focuses this data node. Implemented for TreeKeyManagerItem. */\n focus(): void {\n this._tabindex = 0;\n if (this._shouldFocus) {\n this._elementRef.nativeElement.focus();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** Defocus this data node. */\n unfocus(): void {\n this._tabindex = -1;\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** Emits an activation event. Implemented for TreeKeyManagerItem. */\n activate(): void {\n if (this.isDisabled) {\n return;\n }\n this.activation.next(this._data);\n }\n\n /** Collapses this data node. Implemented for TreeKeyManagerItem. */\n collapse(): void {\n if (this.isExpandable) {\n this._tree.collapse(this._data);\n }\n }\n\n /** Expands this data node. Implemented for TreeKeyManagerItem. */\n expand(): void {\n if (this.isExpandable) {\n this._tree.expand(this._data);\n }\n }\n\n /** Makes the node focusable. Implemented for TreeKeyManagerItem. */\n makeFocusable(): void {\n this._tabindex = 0;\n this._changeDetectorRef.markForCheck();\n }\n\n _focusItem() {\n if (this.isDisabled) {\n return;\n }\n this._tree._keyManager.focusItem(this);\n }\n\n _setActiveItem() {\n if (this.isDisabled) {\n return;\n }\n this._shouldFocus = false;\n this._tree._keyManager.focusItem(this);\n this._shouldFocus = true;\n }\n\n _emitExpansionState(expanded: boolean) {\n this.expandedChange.emit(expanded);\n }\n}\n\nfunction getParentNodeAriaLevel(nodeElement: HTMLElement): number {\n let parent = nodeElement.parentElement;\n while (parent && !isNodeElement(parent)) {\n parent = parent.parentElement;\n }\n if (!parent) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw Error('Incorrect tree structure containing detached node.');\n } else {\n return -1;\n }\n } else if (parent.classList.contains('cdk-nested-tree-node')) {\n return numberAttribute(parent.getAttribute('aria-level')!);\n } else {\n // The ancestor element is the cdk-tree itself\n return 0;\n }\n}\n\nfunction isNodeElement(element: HTMLElement) {\n const classList = element.classList;\n return !!(classList?.contains('cdk-nested-tree-node') || classList?.contains('cdk-tree'));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\nimport {\n AfterContentInit,\n ContentChildren,\n Directive,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n QueryList,\n inject,\n} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodeOutlet} from './outlet';\nimport {CdkTreeNode} from './tree';\n\n/**\n * Nested node is a child of ``. It works with nested tree.\n * By using `cdk-nested-tree-node` component in tree node template, children of the parent node will\n * be added in the `cdkTreeNodeOutlet` in tree node template.\n * The children of node will be automatically added to `cdkTreeNodeOutlet`.\n */\n@Directive({\n selector: 'cdk-nested-tree-node',\n exportAs: 'cdkNestedTreeNode',\n providers: [\n {provide: CdkTreeNode, useExisting: CdkNestedTreeNode},\n {provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode},\n ],\n host: {\n 'class': 'cdk-nested-tree-node',\n },\n})\nexport class CdkNestedTreeNode\n extends CdkTreeNode\n implements AfterContentInit, OnDestroy\n{\n protected override _type: 'flat' | 'nested' = 'nested';\n protected _differs = inject(IterableDiffers);\n\n /** Differ used to find the changes in the data provided by the data source. */\n private _dataDiffer!: IterableDiffer;\n\n /** The children data dataNodes of current node. They will be placed in `CdkTreeNodeOutlet`. */\n protected _children!: T[];\n\n /** The children node placeholder. */\n @ContentChildren(CdkTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n })\n nodeOutlet!: QueryList;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n }\n\n ngAfterContentInit() {\n this._dataDiffer = this._differs.find([]).create(this._tree.trackBy);\n this._tree\n ._getDirectChildren(this.data)\n .pipe(takeUntil(this._destroyed))\n .subscribe(result => this.updateChildrenNodes(result));\n this.nodeOutlet.changes\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateChildrenNodes());\n }\n\n override ngOnDestroy() {\n this._clear();\n super.ngOnDestroy();\n }\n\n /** Add children dataNodes to the NodeOutlet */\n protected updateChildrenNodes(children?: T[]): void {\n const outlet = this._getNodeOutlet();\n if (children) {\n this._children = children;\n }\n if (outlet && this._children) {\n const viewContainer = outlet.viewContainer;\n this._tree.renderNodeChanges(this._children, this._dataDiffer, viewContainer, this._data);\n } else {\n // Reset the data differ if there's no children nodes displayed\n this._dataDiffer.diff([]);\n }\n }\n\n /** Clear the children dataNodes. */\n protected _clear(): void {\n const outlet = this._getNodeOutlet();\n if (outlet) {\n outlet.viewContainer.clear();\n this._dataDiffer.diff([]);\n }\n }\n\n /** Gets the outlet for the current node. */\n private _getNodeOutlet() {\n const outlets = this.nodeOutlet;\n\n // Note that since we use `descendants: true` on the query, we have to ensure\n // that we don't pick up the outlet of a child node by accident.\n return outlets && outlets.find(outlet => !outlet._node || outlet._node === this);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\nimport {Directionality} from '../bidi';\nimport {Directive, ElementRef, Input, numberAttribute, OnDestroy, inject} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {CdkTree, CdkTreeNode} from './tree';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n/**\n * Indent for the children tree dataNodes.\n * This directive will add left-padding to the node to show hierarchy.\n */\n@Directive({\n selector: '[cdkTreeNodePadding]',\n})\nexport class CdkTreeNodePadding implements OnDestroy {\n private _treeNode = inject>(CdkTreeNode);\n private _tree = inject>(CdkTree);\n private _element = inject>(ElementRef);\n private _dir = inject(Directionality, {optional: true});\n\n /** Current padding value applied to the element. Used to avoid unnecessarily hitting the DOM. */\n private _currentPadding: string | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _destroyed = new Subject();\n\n /** CSS units used for the indentation value. */\n indentUnits = 'px';\n\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n @Input({alias: 'cdkTreeNodePadding', transform: numberAttribute})\n get level(): number {\n return this._level;\n }\n set level(value: number) {\n this._setLevelInput(value);\n }\n _level!: number;\n\n /**\n * The indent for each level. Can be a number or a CSS string.\n * Default number 40px from material design menu sub-menu spec.\n */\n @Input('cdkTreeNodePaddingIndent')\n get indent(): number | string {\n return this._indent;\n }\n set indent(indent: number | string) {\n this._setIndentInput(indent);\n }\n _indent: number = 40;\n\n constructor(...args: unknown[]);\n\n constructor() {\n this._setPadding();\n this._dir?.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding(true));\n\n // In Ivy the indentation binding might be set before the tree node's data has been added,\n // which means that we'll miss the first render. We have to subscribe to changes in the\n // data to ensure that everything is up to date.\n this._treeNode._dataChanges.subscribe(() => this._setPadding());\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** The padding indent value for the tree node. Returns a string with px numbers if not null. */\n _paddingIndent(): string | null {\n const nodeLevel = (this._treeNode.data && this._tree._getLevel(this._treeNode.data)) ?? null;\n const level = this._level == null ? nodeLevel : this._level;\n return typeof level === 'number' ? `${level * this._indent}${this.indentUnits}` : null;\n }\n\n _setPadding(forceChange = false) {\n const padding = this._paddingIndent();\n\n if (padding !== this._currentPadding || forceChange) {\n const element = this._element.nativeElement;\n const paddingProp = this._dir && this._dir.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n const resetProp = paddingProp === 'paddingLeft' ? 'paddingRight' : 'paddingLeft';\n element.style[paddingProp] = padding || '';\n element.style[resetProp] = '';\n this._currentPadding = padding;\n }\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n protected _setLevelInput(value: number) {\n // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n // consumer set the directive as `cdkTreeNodePadding=\"\"`. We still want to take this value if\n // they set 0 explicitly.\n this._level = isNaN(value) ? null! : value;\n this._setPadding();\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n protected _setIndentInput(indent: number | string) {\n let value = indent;\n let units = 'px';\n\n if (typeof indent === 'string') {\n const parts = indent.split(cssUnitPattern);\n value = parts[0];\n units = parts[1] || units;\n }\n\n this.indentUnits = units;\n this._indent = numberAttribute(value);\n this._setPadding();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\nimport {Directive, Input, booleanAttribute, inject} from '@angular/core';\n\nimport {CdkTree, CdkTreeNode} from './tree';\n\n/**\n * Node toggle to expand and collapse the node.\n */\n@Directive({\n selector: '[cdkTreeNodeToggle]',\n host: {\n '(click)': '_toggle(); $event.stopPropagation();',\n '(keydown.Enter)': '_toggle(); $event.preventDefault();',\n '(keydown.Space)': '_toggle(); $event.preventDefault();',\n 'tabindex': '-1',\n },\n})\nexport class CdkTreeNodeToggle {\n protected _tree = inject>(CdkTree);\n protected _treeNode = inject>(CdkTreeNode);\n\n /** Whether expand/collapse the node recursively. */\n @Input({alias: 'cdkTreeNodeToggleRecursive', transform: booleanAttribute})\n recursive: boolean = false;\n\n constructor(...args: unknown[]);\n constructor() {}\n\n // Toggle the expanded or collapsed state of this node.\n //\n // Focus this node with expanding or collapsing it. This ensures that the active node will always\n // be visible when expanding and collapsing.\n _toggle(): void {\n this.recursive\n ? this._tree.toggleDescendants(this._treeNode.data)\n : this._tree.toggle(this._treeNode.data);\n\n this._tree._keyManager.focusItem(this._treeNode);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\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://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkTreeNodeOutlet} from './outlet';\nimport {CdkTreeNodePadding} from './padding';\nimport {CdkTreeNodeToggle} from './toggle';\nimport {CdkTree, CdkTreeNode} from './tree';\nimport {CdkTreeNodeDef} from './node';\nimport {CdkNestedTreeNode} from './nested-node';\n\nconst EXPORTED_DECLARATIONS = [\n CdkNestedTreeNode,\n CdkTreeNodeDef,\n CdkTreeNodePadding,\n CdkTreeNodeToggle,\n CdkTree,\n CdkTreeNode,\n CdkTreeNodeOutlet,\n];\n\n@NgModule({\n imports: EXPORTED_DECLARATIONS,\n exports: EXPORTED_DECLARATIONS,\n})\nexport class CdkTreeModule {}\n"],"names":["BaseTreeControl","dataNodes","expansionModel","SelectionModel","trackBy","getLevel","isExpandable","getChildren","toggle","dataNode","_trackByValue","expand","select","collapse","deselect","isExpanded","isSelected","toggleDescendants","collapseDescendants","expandDescendants","collapseAll","clear","toBeProcessed","push","getDescendants","map","value","FlatTreeControl","options","constructor","startIndex","indexOf","results","i","length","expandAll","node","NestedTreeControl","allNodes","reduce","accumulator","descendants","_getDescendants","splice","childrenNodes","Array","isArray","forEach","child","isObservable","pipe","take","filter","Boolean","subscribe","children","CDK_TREE_NODE_OUTLET_NODE","InjectionToken","CdkTreeNodeOutlet","viewContainer","inject","ViewContainerRef","_node","optional","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","ngImport","decorators","args","CdkTreeNodeOutletContext","$implicit","level","index","count","data","CdkTreeNodeDef","template","TemplateRef","when","inputs","name","alias","getTreeNoValidDataSourceError","Error","getTreeMultipleDefaultNodeDefsError","getTreeMissingMatchingNodeDefError","getTreeControlMissingError","getMultipleTreeControlsError","CdkTree","_differs","IterableDiffers","_changeDetectorRef","ChangeDetectorRef","_elementRef","ElementRef","_dir","Directionality","_onDestroy","Subject","_dataDiffer","_defaultNodeDef","_dataSubscription","_levels","Map","_parents","_ariaSets","dataSource","_dataSource","_switchDataSource","treeControl","levelAccessor","childrenAccessor","expansionKey","_nodeOutlet","_nodeDefs","viewChange","BehaviorSubject","start","end","Number","MAX_VALUE","_expansionModel","_flattenedNodes","_nodeType","_nodes","_keyManagerNodes","_keyManagerFactory","TREE_KEY_MANAGER","_keyManager","_viewInit","ngAfterContentInit","_initializeKeyManager","ngAfterContentChecked","_updateDefaultNodeDefinition","_subscribeToDataChanges","ngOnDestroy","complete","next","disconnect","unsubscribe","undefined","destroy","ngOnInit","_checkTreeControlUsage","_initializeDataDiffer","ngAfterViewInit","defaultNodeDefs","def","ngDevMode","_setNodeTypeIfUnset","newType","currentType","console","warn","_getExpansionModel","dataStream","isDataSource","connect","observableOf","_getRenderData","takeUntil","renderingData","_renderDataChanges","combineLatest","changed","startWith","tap","expansionChanges","_emitExpansionChanges","switchMap","nodeType","renderNodes","flattenedNodes","_computeRenderingData","convertedData","renderNodeChanges","_updateCachedData","_updateKeyManagerItems","nodes","added","get","_emitExpansionState","removed","items","keyManagerNodes","_getExpansionKey","keyManagerOptions","skipPredicate","isDisabled","typeAheadDebounceInterval","horizontalOrientation","_index","item","find","create","numTreeControls","dataDiffer","parentData","changes","diff","forEachOperation","adjustedPreviousIndex","currentIndex","previousIndex","insertNode","remove","view","move","forEachIdentityChange","record","newData","context","markForCheck","detectChanges","_getNodeDef","first","nodeDef","nodeData","_getLevelAccessor","key","has","set","container","createEmbeddedView","CdkTreeNode","mostRecentTreeNode","_forEachExpansionKey","keys","bind","_getChildrenAccessor","_getDirectChildren","includes","EMPTY","expanded","_findChildrenByLevel","coerceObservable","levelDelta","findIndex","dataNodeLevel","expectedLevel","currentLevel","_registerNode","_unregisterNode","delete","_getLevel","_getSetSize","_getAriaSet","_getPositionInSet","_getNodeParent","parent","_getNodeChildren","_sendKeydownToKeyManager","event","nativeElement","onKeydown","getValue","Infinity","_getAllChildrenRecursively","allChildren","nextChildren","concatMap","concat","parentKey","_findParentForNode","cachedNodes","parentIndex","parentNode","parentLevel","_flattenNestedNodesWithExpansion","childNodes","childKey","nestedNodes","_clearPreviousCache","rootNodes","_calculateParents","group","callback","toToggle","observables","inner","r","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","viewQueries","propertyName","predicate","static","exportAs","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","host","imports","Input","ViewChild","ContentChildren","_tree","_tabindex","_type","role","_role","_isExpandable","_inputIsExpandable","_inputIsExpanded","_data","typeaheadLabel","getLabel","textContent","trim","activation","EventEmitter","expandedChange","_destroyed","_dataChanges","_shouldFocus","_parentNodeAriaLevel","isLeafNode","_getAriaExpanded","String","getParentNodeAriaLevel","distinctUntilChanged","getParent","focus","unfocus","activate","makeFocusable","_focusItem","focusItem","_setActiveItem","emit","booleanAttribute","outputs","attributes","listeners","properties","classAttribute","transform","Output","nodeElement","parentElement","isNodeElement","classList","contains","numberAttribute","getAttribute","element","CdkNestedTreeNode","_children","nodeOutlet","result","updateChildrenNodes","_clear","outlet","_getNodeOutlet","outlets","ɵdir","ɵɵngDeclareDirective","providers","provide","useExisting","queries","usesInheritance","cssUnitPattern","CdkTreeNodePadding","_treeNode","_element","_currentPadding","indentUnits","_level","_setLevelInput","indent","_indent","_setIndentInput","_setPadding","change","_paddingIndent","nodeLevel","forceChange","padding","paddingProp","resetProp","style","isNaN","units","parts","split","CdkTreeNodeToggle","recursive","_toggle","EXPORTED_DECLARATIONS","CdkTreeModule","NgModule","ɵmod","ɵɵngDeclareNgModule","exports"],"mappings":"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"}