blob: 3e8c1e2e90cb306e391f088fa86fc9d8aa767435 [file] [log] [blame]
{"version":3,"file":"tree.es5.js","sources":["../../../src/cdk/tree/tree-module.ts","../../../src/cdk/tree/toggle.ts","../../../src/cdk/tree/padding.ts","../../../src/cdk/tree/nested-node.ts","../../../src/cdk/tree/tree.ts","../../../src/cdk/tree/tree-errors.ts","../../../src/cdk/tree/node.ts","../../../src/cdk/tree/outlet.ts","../../../src/cdk/tree/control/nested-tree-control.ts","../../../src/cdk/tree/control/flat-tree-control.ts","../../../src/cdk/tree/control/base-tree-control.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.io/license\n */\n\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {CommonModule} from '@angular/common';\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: [CommonModule],\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n providers: [FocusMonitor, CdkTreeNodeDef]\n})\nexport class CdkTreeModule {}\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.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, HostListener, Input} from '@angular/core';\n\nimport {CdkTree, CdkTreeNode} from './tree';\n\n/**\n * Node toggle to expand/collapse the node.\n */\n@Directive({selector: '[cdkTreeNodeToggle]'})\nexport class CdkTreeNodeToggle<T> {\n /** Whether expand/collapse the node recursively. */\n @Input('cdkTreeNodeToggleRecursive')\n get recursive(): boolean { return this._recursive; }\n set recursive(value: boolean) { this._recursive = coerceBooleanProperty(value); }\n protected _recursive = false;\n\n constructor(protected _tree: CdkTree<T>,\n protected _treeNode: CdkTreeNode<T>) {}\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('click', ['$event'])\n _toggle(event: Event): void {\n this.recursive\n ? this._tree.treeControl.toggleDescendants(this._treeNode.data)\n : this._tree.treeControl.toggle(this._treeNode.data);\n\n event.stopPropagation();\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.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Directive, ElementRef, Input, OnDestroy, Optional, Renderer2} 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> implements OnDestroy {\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 _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('cdkTreeNodePadding')\n get level(): number { return this._level; }\n set level(value: number) {\n this._level = coerceNumberProperty(value);\n this._setPadding();\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 { return this._indent; }\n set indent(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 = coerceNumberProperty(value);\n this._setPadding();\n }\n _indent: number = 40;\n\n constructor(private _treeNode: CdkTreeNode<T>,\n private _tree: CdkTree<T>,\n private _renderer: Renderer2,\n private _element: ElementRef<HTMLElement>,\n @Optional() private _dir: Directionality) {\n this._setPadding();\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding(true));\n }\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 _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.treeControl.getLevel)\n ? this._tree.treeControl.getLevel(this._treeNode.data)\n : null;\n const level = this._level || nodeLevel;\n return level ? `${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 this._renderer.setStyle(element, paddingProp, padding);\n this._renderer.setStyle(element, resetProp, null);\n this._currentPadding = padding;\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.io/license\n */\nimport {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodeOutlet} from './outlet';\nimport {CdkTree, CdkTreeNode} from './tree';\nimport {getTreeControlFunctionsMissingError} from './tree-errors';\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 * For example:\n * ```html\n * <cdk-nested-tree-node>\n * {{node.name}}\n * <ng-template cdkTreeNodeOutlet></ng-template>\n * </cdk-nested-tree-node>\n * ```\n * The children of node will be automatically added to `cdkTreeNodeOutlet`, the result dom will be\n * like this:\n * ```html\n * <cdk-nested-tree-node>\n * {{node.name}}\n * <cdk-nested-tree-node>{{child1.name}}</cdk-nested-tree-node>\n * <cdk-nested-tree-node>{{child2.name}}</cdk-nested-tree-node>\n * </cdk-nested-tree-node>\n * ```\n */\n@Directive({\n selector: 'cdk-nested-tree-node',\n exportAs: 'cdkNestedTreeNode',\n host: {\n '[attr.aria-expanded]': 'isExpanded',\n '[attr.role]': 'role',\n 'class': 'cdk-tree-node cdk-nested-tree-node',\n },\n providers: [\n {provide: CdkTreeNode, useExisting: CdkNestedTreeNode},\n {provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode}\n ]\n})\nexport class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContentInit, OnDestroy {\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(protected _elementRef: ElementRef<HTMLElement>,\n protected _tree: CdkTree<T>,\n protected _differs: IterableDiffers) {\n super(_elementRef, _tree);\n }\n\n ngAfterContentInit() {\n this._dataDiffer = this._differs.find([]).create(this._tree.trackBy);\n if (!this._tree.treeControl.getChildren) {\n throw getTreeControlFunctionsMissingError();\n }\n const childrenNodes = this._tree.treeControl.getChildren(this.data);\n if (Array.isArray(childrenNodes)) {\n this.updateChildrenNodes(childrenNodes as T[]);\n } else if (childrenNodes instanceof Observable) {\n childrenNodes.pipe(takeUntil(this._destroyed))\n .subscribe(result => this.updateChildrenNodes(result));\n }\n this.nodeOutlet.changes.pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateChildrenNodes());\n }\n\n 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 if (outlets) {\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.find(outlet => !outlet._node || outlet._node === this);\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.io/license\n */\nimport {FocusableOption} from '@angular/cdk/a11y';\nimport {CollectionViewer, DataSource, isDataSource} from '@angular/cdk/collections';\nimport {\n AfterContentChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n Input,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n QueryList,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n TrackByFunction\n} from '@angular/core';\nimport {BehaviorSubject, Observable, of as observableOf, Subject, Subscription} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {TreeControl} from './control/tree-control';\nimport {CdkTreeNodeDef, CdkTreeNodeOutletContext} from './node';\nimport {CdkTreeNodeOutlet} from './outlet';\nimport {\n getTreeControlFunctionsMissingError,\n getTreeControlMissingError,\n getTreeMissingMatchingNodeDefError,\n getTreeMultipleDefaultNodeDefsError,\n getTreeNoValidDataSourceError\n} from './tree-errors';\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 moduleId: module.id,\n selector: 'cdk-tree',\n exportAs: 'cdkTree',\n template: `<ng-container cdkTreeNodeOutlet></ng-container>`,\n host: {\n 'class': 'cdk-tree',\n 'role': 'tree',\n },\n encapsulation: ViewEncapsulation.None,\n\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})\nexport class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\n /** Subject that emits when the component has been destroyed. */\n private _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<T, number> = new Map<T, number>();\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[] { return this._dataSource; }\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 /** The tree controller */\n @Input() treeControl: TreeControl<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 // 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) _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 viewChange =\n new BehaviorSubject<{start: number, end: number}>({start: 0, end: Number.MAX_VALUE});\n\n constructor(private _differs: IterableDiffers,\n private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {\n this._dataDiffer = this._differs.find([]).create(this.trackBy);\n if (!this.treeControl) {\n throw getTreeControlMissingError();\n }\n }\n\n ngOnDestroy() {\n this._nodeOutlet.viewContainer.clear();\n\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\n ngAfterContentChecked() {\n const defaultNodeDefs = this._nodeDefs.filter(def => !def.when);\n if (defaultNodeDefs.length > 1) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n this._defaultNodeDef = defaultNodeDefs[0];\n\n if (this.dataSource && this._nodeDefs && !this._dataSubscription) {\n this._observeRenderChanges();\n }\n }\n\n\n // TODO(tinayuangao): Work on keyboard traversal and actions, make sure it's working for RTL\n // and nested trees.\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._observeRenderChanges();\n }\n }\n\n /** Set up a subscription for the data provided by the data source. */\n private _observeRenderChanges() {\n let dataStream: Observable<T[] | ReadonlyArray<T>> | undefined;\n\n if (isDataSource(this._dataSource)) {\n dataStream = this._dataSource.connect(this);\n } else if (this._dataSource instanceof Observable) {\n dataStream = this._dataSource;\n } else if (Array.isArray(this._dataSource)) {\n dataStream = observableOf(this._dataSource);\n }\n\n if (dataStream) {\n this._dataSubscription = dataStream.pipe(takeUntil(this._onDestroy))\n .subscribe(data => this.renderNodeChanges(data));\n } else {\n throw getTreeNoValidDataSourceError();\n }\n }\n\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(data: T[] | ReadonlyArray<T>, dataDiffer: IterableDiffer<T> = this._dataDiffer,\n viewContainer: ViewContainerRef = this._nodeOutlet.viewContainer,\n parentData?: T) {\n const changes = dataDiffer.diff(data);\n if (!changes) { return; }\n\n changes.forEachOperation((item: IterableChangeRecord<T>,\n adjustedPreviousIndex: number | null,\n currentIndex: number | null) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex!);\n this._levels.delete(item.item);\n } else {\n const view = viewContainer.get(adjustedPreviousIndex!);\n viewContainer.move(view!, currentIndex);\n }\n });\n\n this._changeDetectorRef.detectChanges();\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) { return this._nodeDefs.first; }\n\n const nodeDef =\n this._nodeDefs.find(def => def.when && def.when(i, data)) || this._defaultNodeDef;\n if (!nodeDef) { throw getTreeMissingMatchingNodeDefError(); }\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 node = this._getNodeDef(nodeData, index);\n\n // Node context that will be provided to created embedded view\n const context = new CdkTreeNodeOutletContext<T>(nodeData);\n\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 (this.treeControl.getLevel) {\n context.level = this.treeControl.getLevel(nodeData);\n } else if (typeof parentData !== 'undefined' && this._levels.has(parentData)) {\n context.level = this._levels.get(parentData)! + 1;\n } else {\n context.level = 0;\n }\n this._levels.set(nodeData, 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\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 '[attr.aria-expanded]': 'isExpanded',\n '[attr.aria-level]': 'role === \"treeitem\" ? level : null',\n '[attr.role]': 'role',\n 'class': 'cdk-tree-node',\n },\n})\nexport class CdkTreeNode<T> implements FocusableOption, OnDestroy {\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 _destroyed = new Subject<void>();\n\n /** Emits when the node's data has changed. */\n _dataChanges = new Subject<void>();\n\n /** The tree node's data. */\n get data(): T { return this._data; }\n set data(value: T) {\n if (value !== this._data) {\n this._data = value;\n this._setRoleFromData();\n this._dataChanges.next();\n }\n }\n protected _data: T;\n\n get isExpanded(): boolean {\n return this._tree.treeControl.isExpanded(this._data);\n }\n\n get level(): number {\n return this._tree.treeControl.getLevel ? this._tree.treeControl.getLevel(this._data) : 0;\n }\n\n /**\n * The role of the node should be 'group' if it's an internal node,\n * and 'treeitem' if it's a leaf node.\n */\n @Input() role: 'treeitem' | 'group' = 'treeitem';\n\n constructor(protected _elementRef: ElementRef<HTMLElement>,\n protected _tree: CdkTree<T>) {\n CdkTreeNode.mostRecentTreeNode = this as CdkTreeNode<T>;\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 /** Focuses the menu item. Implements for FocusableOption. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n protected _setRoleFromData(): void {\n if (this._tree.treeControl.isExpandable) {\n this.role = this._tree.treeControl.isExpandable(this._data) ? 'group' : 'treeitem';\n } else {\n if (!this._tree.treeControl.getChildren) {\n throw getTreeControlFunctionsMissingError();\n }\n const childrenNodes = this._tree.treeControl.getChildren(this._data);\n if (Array.isArray(childrenNodes)) {\n this._setRoleFromChildren(childrenNodes as T[]);\n } else if (childrenNodes instanceof Observable) {\n childrenNodes.pipe(takeUntil(this._destroyed))\n .subscribe(children => this._setRoleFromChildren(children));\n }\n }\n }\n\n protected _setRoleFromChildren(children: T[]) {\n this.role = children && children.length ? 'group' : 'treeitem';\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.io/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 are tree control.\n * @docs-private\n */\nexport function getTreeControlMissingError() {\n return Error(`Could not find a tree control for the tree.`);\n}\n\n/**\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\n * @docs-private\n */\nexport function getTreeControlFunctionsMissingError() {\n return Error(`Could not find functions for nested/flat tree in tree control.`);\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.io/license\n */\n\nimport {Directive, TemplateRef} from '@angular/core';\n\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: [\n 'when: cdkTreeNodeDefWhen'\n ],\n})\nexport class CdkTreeNodeDef<T> {\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 /** @docs-private */\n constructor(public template: TemplateRef<any>) {}\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.io/license\n */\nimport {\n Directive,\n Inject,\n InjectionToken,\n Optional,\n ViewContainerRef,\n} 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 constructor(\n public viewContainer: ViewContainerRef,\n @Inject(CDK_TREE_NODE_OUTLET_NODE) @Optional() public _node?: any) {}\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.io/license\n */\nimport {Observable} from 'rxjs';\nimport {take, filter} from 'rxjs/operators';\nimport {BaseTreeControl} from './base-tree-control';\n\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nexport class NestedTreeControl<T> extends BaseTreeControl<T> {\n\n /** Construct with nested tree function getChildren. */\n constructor(public getChildren: (dataNode: T) => (Observable<T[]> | T[] | undefined | null)) {\n super();\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((accumulator: T[], dataNode) =>\n [...accumulator, ...this.getDescendants(dataNode), dataNode], []);\n this.expansionModel.select(...allNodes);\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 (childrenNodes instanceof Observable) {\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))\n .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.io/license\n */\n\nimport {BaseTreeControl} from './base-tree-control';\n\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nexport class FlatTreeControl<T> extends BaseTreeControl<T> {\n\n /** Construct with flat tree data node functions getLevel and isExpandable. */\n constructor(public getLevel: (dataNode: T) => number,\n public isExpandable: (dataNode: T) => boolean) {\n super();\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 (let i = startIndex + 1;\n i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]);\n i++) {\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);\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.io/license\n */\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {Observable} from 'rxjs';\nimport {TreeControl} from './tree-control';\n\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nexport abstract class BaseTreeControl<T> implements TreeControl<T> {\n\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<T> = new SelectionModel<T>(true);\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(dataNode);\n }\n\n /** Expands one single data node. */\n expand(dataNode: T): void {\n this.expansionModel.select(dataNode);\n }\n\n /** Collapses one single data node. */\n collapse(dataNode: T): void {\n this.expansionModel.deselect(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(dataNode);\n }\n\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode: T): void {\n this.expansionModel.isSelected(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);\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);\n }\n}\n"],"names":["tslib_1.__extends","observableOf"],"mappings":"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"}