{"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","Eager","encapsulation","ViewEncapsulation","None","host","Default","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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"}