blob: dd496c26b5d786bbcc8e38edb04fd7636401b1b4 [file] [log] [blame]
{"version":3,"file":"cdk-tree.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/cdk/tree/tree-errors.ts","../../src/cdk/tree/control/base-tree-control.ts","../../src/cdk/tree/control/flat-tree-control.ts","../../src/cdk/tree/control/nested-tree-control.ts","../../src/cdk/tree/outlet.ts","../../src/cdk/tree/node.ts","../../src/cdk/tree/tree.ts","../../src/cdk/tree/nested-node.ts","../../src/cdk/tree/padding.ts","../../src/cdk/tree/toggle.ts","../../src/cdk/tree/tree-module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\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 */\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","/**\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 {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 */\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 */\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 {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 */\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 */\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 */\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 {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"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","getTreeNoValidDataSourceError","Error","getTreeMultipleDefaultNodeDefsError","getTreeMissingMatchingNodeDefError","getTreeControlMissingError","getTreeControlFunctionsMissingError","setPrototypeOf","__proto__","Array","p","hasOwnProperty","BaseTreeControl","expansionModel","SelectionModel","toggle","dataNode","expand","select","collapse","deselect","isExpanded","isSelected","toggleDescendants","collapseDescendants","expandDescendants","collapseAll","clear","toBeProcessed","push","apply","getDescendants","_a","FlatTreeControl","getLevel","isExpandable","_this","_super","call","tslib_1.__extends","startIndex","dataNodes","indexOf","results","i","length","expandAll","NestedTreeControl","getChildren","allNodes","reduce","accumulator","concat","descendants","_getDescendants","splice","childrenNodes","isArray","forEach","child","Observable","pipe","take","filter","subscribe","children","_i","children_1","CDK_TREE_NODE_OUTLET_NODE","InjectionToken","CdkTreeNodeOutlet","viewContainer","_node","type","Directive","args","selector","ViewContainerRef","undefined","decorators","Inject","Optional","CdkTreeNodeOutletContext","data","$implicit","CdkTreeNodeDef","template","inputs","TemplateRef","CdkTree","_differs","_changeDetectorRef","_onDestroy","Subject","_levels","Map","viewChange","BehaviorSubject","start","end","Number","MAX_VALUE","defineProperty","_dataSource","dataSource","_switchDataSource","ngOnInit","_dataDiffer","find","trackBy","treeControl","ngOnDestroy","_nodeOutlet","next","complete","disconnect","_dataSubscription","unsubscribe","ngAfterContentChecked","defaultNodeDefs","_nodeDefs","def","when","_defaultNodeDef","_observeRenderChanges","dataStream","isDataSource","connect","observableOf","takeUntil","renderNodeChanges","dataDiffer","parentData","changes","diff","forEachOperation","item","adjustedPreviousIndex","currentIndex","previousIndex","insertNode","remove","delete","view","get","move","detectChanges","_getNodeDef","first","nodeDef","nodeData","index","node","context","level","has","set","createEmbeddedView","CdkTreeNode","mostRecentTreeNode","Component","exportAs","host","class","role","encapsulation","ViewEncapsulation","None","propDecorators","Input","ViewChild","static","ContentChildren","_elementRef","_tree","_data","value","_setRoleFromData","_dataChanges","enumerable","configurable","_destroyed","_setRoleFromChildren","[attr.aria-expanded]","[attr.aria-level]","[attr.role]","CdkNestedTreeNode","ngAfterContentInit","updateChildrenNodes","result","nodeOutlet","_clear","outlet","_getNodeOutlet","_children","outlets","providers","provide","useExisting","ElementRef","IterableDiffers","cssUnitPattern","CdkTreeNodePadding","_treeNode","_renderer","_element","_dir","indentUnits","_indent","_setPadding","change","_level","coerceNumberProperty","indent","units","parts","split","_paddingIndent","nodeLevel","forceChange","padding","_currentPadding","element","nativeElement","paddingProp","resetProp","setStyle","Renderer2","Directionality","CdkTreeNodeToggle","_recursive","coerceBooleanProperty","_toggle","event","recursive","stopPropagation","HostListener","EXPORTED_DECLARATIONS","CdkTreeModule","NgModule","imports","CommonModule","exports","declarations","FocusMonitor"],"mappings":"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"}