{"version":3,"file":"tree.js","sources":["../../../src/material/tree/data-source/nested-data-source.ts","../../../src/material/tree/data-source/flat-data-source.ts","../../../src/material/tree/tree-module.ts","../../../src/material/tree/toggle.ts","../../../src/material/tree/tree.ts","../../../src/material/tree/padding.ts","../../../src/material/tree/node.ts","../../../src/material/tree/outlet.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 {CollectionViewer, DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nexport class MatTreeNestedDataSource<T> extends DataSource<T> {\n  _data = new BehaviorSubject<T[]>([]);\n\n  /**\n   * Data for the nested tree\n   */\n  get data() { return this._data.value; }\n  set data(value: T[]) { this._data.next(value); }\n\n  connect(collectionViewer: CollectionViewer): Observable<T[]> {\n    return merge(...[collectionViewer.viewChange, this._data])\n      .pipe(map(() => {\n        return this.data;\n      }));\n  }\n\n  disconnect() {\n    // no op\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 {CollectionViewer, DataSource} from '@angular/cdk/collections';\nimport {FlatTreeControl, TreeControl} from '@angular/cdk/tree';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {map, take} from 'rxjs/operators';\n\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n *   SomeNode: {\n *     key: 'Fruits',\n *     children: [\n *       NodeOne: {\n *         key: 'Apple',\n *       },\n *       NodeTwo: {\n *        key: 'Pear',\n *      }\n *    ]\n *  }\n *  After flattener flatten the tree, the structure will become\n *  SomeNode: {\n *    key: 'Fruits',\n *    expandable: true,\n *    level: 1\n *  },\n *  NodeOne: {\n *    key: 'Apple',\n *    expandable: false,\n *    level: 2\n *  },\n *  NodeTwo: {\n *   key: 'Pear',\n *   expandable: false,\n *   level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nexport class MatTreeFlattener<T, F> {\n\n  constructor(public transformFunction: (node: T, level: number) => F,\n              public getLevel: (node: F) => number,\n              public isExpandable: (node: F) => boolean,\n              public getChildren: (node: T) =>\n                  Observable<T[]> | T[] | undefined | null) {}\n\n  _flattenNode(node: T, level: number,\n               resultNodes: F[], parentMap: boolean[]): F[] {\n    const flatNode = this.transformFunction(node, level);\n    resultNodes.push(flatNode);\n\n    if (this.isExpandable(flatNode)) {\n      const childrenNodes = this.getChildren(node);\n      if (childrenNodes) {\n        if (Array.isArray(childrenNodes)) {\n          this._flattenChildren(childrenNodes, level, resultNodes, parentMap);\n        } else {\n          childrenNodes.pipe(take(1)).subscribe(children => {\n            this._flattenChildren(children, level, resultNodes, parentMap);\n          });\n        }\n      }\n    }\n    return resultNodes;\n  }\n\n  _flattenChildren(children: T[], level: number,\n                   resultNodes: F[], parentMap: boolean[]): void {\n    children.forEach((child, index) => {\n      let childParentMap: boolean[] = parentMap.slice();\n      childParentMap.push(index != children.length - 1);\n      this._flattenNode(child, level + 1, resultNodes, childParentMap);\n    });\n  }\n\n  /**\n   * Flatten a list of node type T to flattened version of node F.\n   * Please note that type T may be nested, and the length of `structuredData` may be different\n   * from that of returned list `F[]`.\n   */\n  flattenNodes(structuredData: T[]): F[] {\n    let resultNodes: F[] = [];\n    structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));\n    return resultNodes;\n  }\n\n  /**\n   * Expand flattened node with current expansion status.\n   * The returned list may have different length.\n   */\n  expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[] {\n    let results: F[] = [];\n    let currentExpand: boolean[] = [];\n    currentExpand[0] = true;\n\n    nodes.forEach(node => {\n      let expand = true;\n      for (let i = 0; i <= this.getLevel(node); i++) {\n        expand = expand && currentExpand[i];\n      }\n      if (expand) {\n        results.push(node);\n      }\n      if (this.isExpandable(node)) {\n        currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n      }\n    });\n    return results;\n  }\n}\n\n\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `MatTree`.\n * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted\n * to type `F` for `MatTree` to consume.\n */\nexport class MatTreeFlatDataSource<T, F> extends DataSource<F> {\n  _flattenedData = new BehaviorSubject<F[]>([]);\n\n  _expandedData = new BehaviorSubject<F[]>([]);\n\n  _data: BehaviorSubject<T[]>;\n  get data() { return this._data.value; }\n  set data(value: T[]) {\n    this._data.next(value);\n    this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n    this._treeControl.dataNodes = this._flattenedData.value;\n  }\n\n  constructor(private _treeControl: FlatTreeControl<F>,\n              private _treeFlattener: MatTreeFlattener<T, F>,\n              initialData: T[] = []) {\n    super();\n    this._data = new BehaviorSubject<T[]>(initialData);\n  }\n\n  connect(collectionViewer: CollectionViewer): Observable<F[]> {\n    const changes = [\n      collectionViewer.viewChange,\n      this._treeControl.expansionModel.onChange,\n      this._flattenedData\n    ];\n    return merge(...changes).pipe(map(() => {\n      this._expandedData.next(\n        this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));\n      return this._expandedData.value;\n    }));\n  }\n\n  disconnect() {\n    // no op\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 {NgModule} from '@angular/core';\n\nimport {CdkTreeModule} from '@angular/cdk/tree';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatNestedTreeNode, MatTreeNodeDef, MatTreeNode} from './node';\nimport {MatTree} from './tree';\nimport {MatTreeNodeToggle} from './toggle';\nimport {MatTreeNodeOutlet} from './outlet';\nimport {MatTreeNodePadding} from './padding';\n\nconst MAT_TREE_DIRECTIVES = [\n  MatNestedTreeNode,\n  MatTreeNodeDef,\n  MatTreeNodePadding,\n  MatTreeNodeToggle,\n  MatTree,\n  MatTreeNode,\n  MatTreeNodeOutlet\n];\n\n@NgModule({\n  imports: [CdkTreeModule, CommonModule, MatCommonModule],\n  exports: MAT_TREE_DIRECTIVES,\n  declarations: MAT_TREE_DIRECTIVES,\n})\nexport class MatTreeModule {}\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 {CdkTreeNodeToggle} from '@angular/cdk/tree';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Wrapper for the CdkTree's toggle with Material design styles.\n */\n@Directive({\n  selector: '[matTreeNodeToggle]',\n  providers: [{provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle}]\n})\nexport class MatTreeNodeToggle<T> extends CdkTreeNodeToggle<T> {\n  @Input('matTreeNodeToggleRecursive') recursive: boolean = false;\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 {CdkTree} from '@angular/cdk/tree';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatTreeNodeOutlet} from './outlet';\n\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\n@Component({\n  moduleId: module.id,\n  selector: 'mat-tree',\n  exportAs: 'matTree',\n  template: `<ng-container matTreeNodeOutlet></ng-container>`,\n  host: {\n    'class': 'mat-tree',\n    'role': 'tree',\n  },\n  styleUrls: ['tree.css'],\n  encapsulation: ViewEncapsulation.None,\n  // See note on CdkTree for explanation on why this uses the default change detection strategy.\n  // tslint:disable-next-line:validate-decorators\n  changeDetection: ChangeDetectionStrategy.Default,\n  providers: [{provide: CdkTree, useExisting: MatTree}]\n})\nexport class MatTree<T> extends CdkTree<T> {\n  // Outlets within the tree's template where the dataNodes will be inserted.\n  @ViewChild(MatTreeNodeOutlet, {static: true}) _nodeOutlet: MatTreeNodeOutlet;\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 {CdkTreeNodePadding} from '@angular/cdk/tree';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Wrapper for the CdkTree padding with Material design styles.\n */\n@Directive({\n  selector: '[matTreeNodePadding]',\n  providers: [{provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding}]\n})\nexport class MatTreeNodePadding<T> extends CdkTreeNodePadding<T> {\n\n  /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n  @Input('matTreeNodePadding') level: number;\n\n  /** The indent for each level. Default number 40px from material design menu sub-menu spec. */\n  @Input('matTreeNodePaddingIndent') indent: number;\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 {\n  CDK_TREE_NODE_OUTLET_NODE,\n  CdkNestedTreeNode,\n  CdkTree,\n  CdkTreeNode,\n  CdkTreeNodeDef,\n} from '@angular/cdk/tree';\nimport {\n  AfterContentInit,\n  Attribute,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  Input,\n  IterableDiffers,\n  OnDestroy,\n  QueryList,\n} from '@angular/core';\nimport {\n  CanDisable,\n  CanDisableCtor,\n  HasTabIndex,\n  HasTabIndexCtor,\n  mixinDisabled,\n  mixinTabIndex,\n} from '@angular/material/core';\n\nimport {MatTreeNodeOutlet} from './outlet';\n\nconst _MatTreeNodeMixinBase: HasTabIndexCtor & CanDisableCtor & typeof CdkTreeNode =\n    mixinTabIndex(mixinDisabled(CdkTreeNode));\n\nconst _MatNestedTreeNodeMixinBase:\n    HasTabIndexCtor & CanDisableCtor & typeof CdkNestedTreeNode =\n        mixinTabIndex(mixinDisabled(CdkNestedTreeNode));\n\n/**\n * Wrapper for the CdkTree node with Material design styles.\n */\n@Directive({\n  selector: 'mat-tree-node',\n  exportAs: 'matTreeNode',\n  inputs: ['disabled', 'tabIndex'],\n  host: {\n    '[attr.aria-expanded]': 'isExpanded',\n    '[attr.aria-level]': 'role === \"treeitem\" ? level : null',\n    '[attr.role]': 'role',\n    'class': 'mat-tree-node'\n  },\n  providers: [{provide: CdkTreeNode, useExisting: MatTreeNode}]\n})\nexport class MatTreeNode<T> extends _MatTreeNodeMixinBase<T>\n    implements CanDisable, HasTabIndex {\n  @Input() role: 'treeitem' | 'group' = 'treeitem';\n\n  constructor(protected _elementRef: ElementRef<HTMLElement>,\n              protected _tree: CdkTree<T>,\n              @Attribute('tabindex') tabIndex: string) {\n    super(_elementRef, _tree);\n\n    this.tabIndex = Number(tabIndex) || 0;\n  }\n}\n\n/**\n * Wrapper for the CdkTree node definition with Material design styles.\n */\n@Directive({\n  selector: '[matTreeNodeDef]',\n  inputs: [\n    'when: matTreeNodeDefWhen'\n  ],\n  providers: [{provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef}]\n})\nexport class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {\n  @Input('matTreeNode') data: T;\n}\n\n/**\n * Wrapper for the CdkTree nested node with Material design styles.\n */\n@Directive({\n  selector: 'mat-nested-tree-node',\n  exportAs: 'matNestedTreeNode',\n  host: {\n    '[attr.aria-expanded]': 'isExpanded',\n    '[attr.role]': 'role',\n    'class': 'mat-nested-tree-node',\n  },\n  inputs: ['disabled', 'tabIndex'],\n  providers: [\n    {provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode},\n    {provide: CdkTreeNode, useExisting: MatNestedTreeNode},\n    {provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode}\n  ]\n})\nexport class MatNestedTreeNode<T> extends _MatNestedTreeNodeMixinBase<T> implements\n    AfterContentInit, CanDisable, HasTabIndex, OnDestroy {\n  @Input('matNestedTreeNode') node: T;\n\n  /** The children node placeholder. */\n  @ContentChildren(MatTreeNodeOutlet, {\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<MatTreeNodeOutlet>;\n\n  constructor(protected _elementRef: ElementRef<HTMLElement>,\n              protected _tree: CdkTree<T>,\n              protected _differs: IterableDiffers,\n              @Attribute('tabindex') tabIndex: string) {\n    super(_elementRef, _tree, _differs);\n\n    this.tabIndex = Number(tabIndex) || 0;\n  }\n\n  // This is a workaround for https://github.com/angular/angular/issues/23091\n  // In aot mode, the lifecycle hooks from parent class are not called.\n  // TODO(tinayuangao): Remove when the angular issue #23091 is fixed\n  ngAfterContentInit() {\n    super.ngAfterContentInit();\n  }\n\n  ngOnDestroy() {\n    super.ngOnDestroy();\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 {CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodeOutlet} from '@angular/cdk/tree';\nimport {\n  Directive,\n  Inject,\n  Optional,\n  ViewContainerRef,\n} from '@angular/core';\n\n/**\n * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\n@Directive({\n  selector: '[matTreeNodeOutlet]'\n})\nexport class MatTreeNodeOutlet implements CdkTreeNodeOutlet {\n  constructor(\n      public viewContainer: ViewContainerRef,\n      @Inject(CDK_TREE_NODE_OUTLET_NODE) @Optional() public _node?: any) {}\n}\n"],"names":[],"mappings":"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"}