@angular/cdk 21.1.0-next.1 → 21.1.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/_a11y-module-chunk.mjs +29 -31
- package/fesm2022/_a11y-module-chunk.mjs.map +1 -1
- package/fesm2022/_activedescendant-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_array-chunk.mjs.map +1 -1
- package/fesm2022/_breakpoints-observer-chunk.mjs +6 -6
- package/fesm2022/_breakpoints-observer-chunk.mjs.map +1 -1
- package/fesm2022/_css-pixel-value-chunk.mjs.map +1 -1
- package/fesm2022/_data-source-chunk.mjs.map +1 -1
- package/fesm2022/_directionality-chunk.mjs +3 -3
- package/fesm2022/_directionality-chunk.mjs.map +1 -1
- package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs.map +1 -1
- package/fesm2022/_element-chunk.mjs.map +1 -1
- package/fesm2022/_fake-event-detection-chunk.mjs.map +1 -1
- package/fesm2022/_focus-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_focus-monitor-chunk.mjs +11 -13
- package/fesm2022/_focus-monitor-chunk.mjs.map +1 -1
- package/fesm2022/_id-generator-chunk.mjs +3 -3
- package/fesm2022/_id-generator-chunk.mjs.map +1 -1
- package/fesm2022/_keycodes-chunk.mjs.map +1 -1
- package/fesm2022/_list-key-manager-chunk.mjs +6 -6
- package/fesm2022/_list-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_overlay-module-chunk.mjs +54 -46
- package/fesm2022/_overlay-module-chunk.mjs.map +1 -1
- package/fesm2022/_passive-listeners-chunk.mjs.map +1 -1
- package/fesm2022/_platform-chunk.mjs +3 -3
- package/fesm2022/_platform-chunk.mjs.map +1 -1
- package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs +1 -3
- package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs.map +1 -1
- package/fesm2022/_scrolling-chunk.mjs.map +1 -1
- package/fesm2022/_selection-model-chunk.mjs +1 -1
- package/fesm2022/_selection-model-chunk.mjs.map +1 -1
- package/fesm2022/_shadow-dom-chunk.mjs.map +1 -1
- package/fesm2022/_style-loader-chunk.mjs +3 -3
- package/fesm2022/_style-loader-chunk.mjs.map +1 -1
- package/fesm2022/_test-environment-chunk.mjs.map +1 -1
- package/fesm2022/_tree-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_typeahead-chunk.mjs.map +1 -1
- package/fesm2022/_unique-selection-dispatcher-chunk.mjs +3 -3
- package/fesm2022/_unique-selection-dispatcher-chunk.mjs.map +1 -1
- package/fesm2022/a11y.mjs +9 -9
- package/fesm2022/a11y.mjs.map +1 -1
- package/fesm2022/accordion.mjs +10 -10
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/bidi.mjs +8 -8
- package/fesm2022/bidi.mjs.map +1 -1
- package/fesm2022/cdk.mjs +1 -1
- package/fesm2022/cdk.mjs.map +1 -1
- package/fesm2022/clipboard.mjs +11 -11
- package/fesm2022/clipboard.mjs.map +1 -1
- package/fesm2022/coercion-private.mjs.map +1 -1
- package/fesm2022/coercion.mjs.map +1 -1
- package/fesm2022/collections.mjs +1 -1
- package/fesm2022/dialog.mjs +12 -12
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/drag-drop.mjs +48 -48
- package/fesm2022/drag-drop.mjs.map +1 -1
- package/fesm2022/keycodes.mjs.map +1 -1
- package/fesm2022/layout.mjs +4 -4
- package/fesm2022/layout.mjs.map +1 -1
- package/fesm2022/listbox.mjs +11 -11
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu.mjs +75 -61
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/observers-private.mjs +3 -3
- package/fesm2022/observers-private.mjs.map +1 -1
- package/fesm2022/observers.mjs +13 -13
- package/fesm2022/observers.mjs.map +1 -1
- package/fesm2022/overlay.mjs +3 -3
- package/fesm2022/overlay.mjs.map +1 -1
- package/fesm2022/platform.mjs +4 -4
- package/fesm2022/platform.mjs.map +1 -1
- package/fesm2022/portal.mjs +14 -14
- package/fesm2022/portal.mjs.map +1 -1
- package/fesm2022/private.mjs +3 -3
- package/fesm2022/private.mjs.map +1 -1
- package/fesm2022/scrolling.mjs +63 -58
- package/fesm2022/scrolling.mjs.map +1 -1
- package/fesm2022/stepper.mjs +22 -22
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table.mjs +217 -112
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/testing-selenium-webdriver.mjs.map +1 -1
- package/fesm2022/testing-testbed.mjs +7 -1
- package/fesm2022/testing-testbed.mjs.map +1 -1
- package/fesm2022/testing.mjs +10 -13
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/text-field.mjs +17 -17
- package/fesm2022/text-field.mjs.map +1 -1
- package/fesm2022/tree.mjs +33 -37
- package/fesm2022/tree.mjs.map +1 -1
- package/package.json +2 -1
- package/schematics/ng-add/index.js +1 -1
- package/types/_harness-environment-chunk.d.ts +0 -2
- package/types/_overlay-module-chunk.d.ts +2 -1
- package/types/_scrolling-module-chunk.d.ts +11 -1
- package/types/_view-repeater-chunk.d.ts +2 -7
- package/types/collections.d.ts +1 -1
- package/types/menu.d.ts +8 -5
- package/types/scrolling.d.ts +1 -1
- package/types/table.d.ts +62 -11
- package/types/testing-testbed.d.ts +3 -0
- package/_adev_assets/cdk_drag_drop.json +0 -7221
- package/_adev_assets/cdk_testing.json +0 -7601
- package/_adev_assets/cdk_testing_protractor.json +0 -1747
- package/_adev_assets/cdk_testing_selenium_webdriver.json +0 -1801
- package/_adev_assets/cdk_testing_testbed.json +0 -1903
package/fesm2022/tree.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/control/base-tree-control.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/control/flat-tree-control.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/control/nested-tree-control.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/outlet.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/node.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/tree-errors.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/tree.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/nested-node.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/padding.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/tree/toggle.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/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<T, K = T> implements TreeControl<T, K> {\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<K> = new SelectionModel<K>(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[]> | 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<T, K> {\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<T, K = T> extends BaseTreeControl<T, K> {\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<T, K>,\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<T, K> {\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<T, K = T> extends BaseTreeControl<T, K> {\n /** Construct with nested tree function getChildren. */\n constructor(\n public override getChildren: (dataNode: T) => Observable<T[]> | T[] | undefined | null,\n public options?: NestedTreeControlOptions<T, K>,\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<T> {\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<T> {\n /** @docs-private */\n template = inject<TemplateRef<any>>(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<T> =\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: `<ng-container cdkTreeNodeOutlet></ng-container>`,\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<T, K = T>\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<void>();\n\n /** Differ used to find the changes in the data provided by the data source. */\n private _dataDiffer: IterableDiffer<T>;\n\n /** Stores the node definition that does not have a when predicate. */\n private _defaultNodeDef: CdkTreeNodeDef<T> | null;\n\n /** Data subscription */\n private _dataSubscription: Subscription | null;\n\n /** Level of nodes */\n private _levels: Map<K, number> = new Map<K, number>();\n\n /** The immediate parents for a node. This is `null` if there is no parent. */\n private _parents: Map<K, T | null> = new Map<K, T | null>();\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<K | null, T[]> = new Map<K | null, T[]>();\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<T> | Observable<T[]> | T[] {\n return this._dataSource;\n }\n set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n private _dataSource: DataSource<T> | Observable<T[]> | 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<T, K>;\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<T[]>;\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<T>;\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<CdkTreeNodeDef<T>>;\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<K>;\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<readonly T[]> = new BehaviorSubject<readonly T[]>([]);\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<Map<K, CdkTreeNode<T, K>>> = new BehaviorSubject(\n new Map<K, CdkTreeNode<T, K>>(),\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<readonly T[]> = new BehaviorSubject<readonly T[]>([]);\n\n private _keyManagerFactory = inject(TREE_KEY_MANAGER) as TreeKeyManagerFactory<CdkTreeNode<T, K>>;\n\n /** The key manager for this tree. Handles focus and activation based on user keyboard input. */\n _keyManager: TreeKeyManagerStrategy<CdkTreeNode<T, K>>;\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<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\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<T> | Observable<T[]> | T[]) {\n if (this._dataSource && typeof (this._dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\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<K>(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<readonly T[]> | 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<readonly T[]>): Observable<RenderingData<T>> {\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<T>) {\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<K> | 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<CdkTreeNode<T, K>[]>((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<CdkTreeNode<T, K>> = {\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<T> = 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<T>,\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<T>) => {\n const newData = record.item;\n if (record.currentIndex != undefined) {\n const view = viewContainer.get(record.currentIndex);\n (view as EmbeddedViewRef<any>).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<T> {\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<T>(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<T[]> {\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<T, K>) {\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<T, K>) {\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<T, K>) {\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<T, K>) {\n return this._getDirectChildren(node.data).pipe(\n map(children =>\n children.reduce<CdkTreeNode<T, K>[]>((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<T[]> {\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<T[]> {\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<T[]> {\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<T[]>[] = [];\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<T, K = T> implements OnDestroy, OnInit, TreeKeyManagerItem {\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected _tree = inject<CdkTree<T, K>>(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;\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;\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<T> = new EventEmitter<T>();\n\n /** This emits when the node's expansion status has been changed. */\n @Output()\n readonly expandedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\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<any> | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n protected readonly _destroyed = new Subject<void>();\n\n /** Emits when the node's data has changed. */\n readonly _dataChanges = new Subject<void>();\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<T, K>;\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<T, K> | null {\n return this._tree._getNodeParent(this) ?? null;\n }\n\n getChildren(): CdkTreeNode<T, K>[] | Observable<CdkTreeNode<T, K>[]> {\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 `<cdk-tree>`. 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<T, K = T>\n extends CdkTreeNode<T, K>\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<T>;\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<CdkTreeNodeOutlet>;\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<T, K = T> implements OnDestroy {\n private _treeNode = inject<CdkTreeNode<T, K>>(CdkTreeNode);\n private _tree = inject<CdkTree<T, K>>(CdkTree);\n private _element = inject<ElementRef<HTMLElement>>(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;\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _destroyed = new Subject<void>();\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<T, K = T> {\n protected _tree = inject<CdkTree<T, K>>(CdkTree);\n protected _treeNode = inject<CdkTreeNode<T, K>>(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","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","undefined","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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"}
|
|
1
|
+
{"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<T, K = T> implements TreeControl<T, K> {\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<K> = new SelectionModel<K>(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[]> | 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<T, K> {\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<T, K = T> extends BaseTreeControl<T, K> {\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<T, K>,\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<T, K> {\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<T, K = T> extends BaseTreeControl<T, K> {\n /** Construct with nested tree function getChildren. */\n constructor(\n public override getChildren: (dataNode: T) => Observable<T[]> | T[] | undefined | null,\n public options?: NestedTreeControlOptions<T, K>,\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<T> {\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<T> {\n /** @docs-private */\n template = inject<TemplateRef<any>>(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<T> =\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: `<ng-container cdkTreeNodeOutlet></ng-container>`,\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<T, K = T>\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<void>();\n\n /** Differ used to find the changes in the data provided by the data source. */\n private _dataDiffer!: IterableDiffer<T>;\n\n /** Stores the node definition that does not have a when predicate. */\n private _defaultNodeDef: CdkTreeNodeDef<T> | null = null;\n\n /** Data subscription */\n private _dataSubscription: Subscription | undefined;\n\n /** Level of nodes */\n private _levels: Map<K, number> = new Map<K, number>();\n\n /** The immediate parents for a node. This is `null` if there is no parent. */\n private _parents: Map<K, T | null> = new Map<K, T | null>();\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<K | null, T[]> = new Map<K | null, T[]>();\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<T> | Observable<T[]> | T[] {\n return this._dataSource;\n }\n set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n private _dataSource!: DataSource<T> | Observable<T[]> | 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<T, K>;\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<T[]>;\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<T>;\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<CdkTreeNodeDef<T>>;\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<K>;\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<readonly T[]> = new BehaviorSubject<readonly T[]>([]);\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<Map<K, CdkTreeNode<T, K>>> = new BehaviorSubject(\n new Map<K, CdkTreeNode<T, K>>(),\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<readonly T[]> = new BehaviorSubject<readonly T[]>([]);\n\n private _keyManagerFactory = inject(TREE_KEY_MANAGER) as TreeKeyManagerFactory<CdkTreeNode<T, K>>;\n\n /** The key manager for this tree. Handles focus and activation based on user keyboard input. */\n _keyManager!: TreeKeyManagerStrategy<CdkTreeNode<T, K>>;\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<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).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<T> | Observable<T[]> | T[]) {\n if (this._dataSource && typeof (this._dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).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<K>(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<readonly T[]> | 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<readonly T[]>): Observable<RenderingData<T>> {\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<T>) {\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<K> | 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<CdkTreeNode<T, K>[]>((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<CdkTreeNode<T, K>> = {\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<T> = 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<T>,\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<T>) => {\n const newData = record.item;\n if (record.currentIndex != undefined) {\n const view = viewContainer.get(record.currentIndex);\n (view as EmbeddedViewRef<any>).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<T> {\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<T>(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<T[]> {\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<T, K>) {\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<T, K>) {\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<T, K>) {\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<T, K>) {\n return this._getDirectChildren(node.data).pipe(\n map(children =>\n children.reduce<CdkTreeNode<T, K>[]>((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<T[]> {\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<T[]> {\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<T[]> {\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<T[]>[] = [];\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<T, K = T> implements OnDestroy, OnInit, TreeKeyManagerItem {\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected _tree = inject<CdkTree<T, K>>(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<T> = new EventEmitter<T>();\n\n /** This emits when the node's expansion status has been changed. */\n @Output()\n readonly expandedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\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<any> | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n protected readonly _destroyed = new Subject<void>();\n\n /** Emits when the node's data has changed. */\n readonly _dataChanges = new Subject<void>();\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<T, K>;\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<T, K> | null {\n return this._tree._getNodeParent(this) ?? null;\n }\n\n getChildren(): CdkTreeNode<T, K>[] | Observable<CdkTreeNode<T, K>[]> {\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 `<cdk-tree>`. 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<T, K = T>\n extends CdkTreeNode<T, K>\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<T>;\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<CdkTreeNodeOutlet>;\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<T, K = T> implements OnDestroy {\n private _treeNode = inject<CdkTreeNode<T, K>>(CdkTreeNode);\n private _tree = inject<CdkTree<T, K>>(CdkTree);\n private _element = inject<ElementRef<HTMLElement>>(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<void>();\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<T, K = T> {\n protected _tree = inject<CdkTree<T, K>>(CdkTree);\n protected _treeNode = inject<CdkTreeNode<T, K>>(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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"}
|