tree.mjs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. import * as i1 from '@angular/cdk/tree';
  2. import { CdkTreeNode, CdkTreeNodeDef, CdkNestedTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodePadding, CdkTreeNodeOutlet, CdkTree, CdkTreeNodeToggle, CdkTreeModule } from '@angular/cdk/tree';
  3. import * as i0 from '@angular/core';
  4. import { Directive, Attribute, Input, Inject, Optional, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';
  5. import { mixinTabIndex, mixinDisabled, MatCommonModule } from '@angular/material/core';
  6. import { coerceBooleanProperty } from '@angular/cdk/coercion';
  7. import { DataSource } from '@angular/cdk/collections';
  8. import { BehaviorSubject, merge } from 'rxjs';
  9. import { take, map } from 'rxjs/operators';
  10. const _MatTreeNodeBase = mixinTabIndex(mixinDisabled(CdkTreeNode));
  11. /**
  12. * Wrapper for the CdkTree node with Material design styles.
  13. */
  14. class MatTreeNode extends _MatTreeNodeBase {
  15. constructor(elementRef, tree, tabIndex) {
  16. super(elementRef, tree);
  17. this.tabIndex = Number(tabIndex) || 0;
  18. }
  19. // This is a workaround for https://github.com/angular/angular/issues/23091
  20. // In aot mode, the lifecycle hooks from parent class are not called.
  21. ngOnInit() {
  22. super.ngOnInit();
  23. }
  24. ngOnDestroy() {
  25. super.ngOnDestroy();
  26. }
  27. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNode, deps: [{ token: i0.ElementRef }, { token: i1.CdkTree }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
  28. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatTreeNode, selector: "mat-tree-node", inputs: { role: "role", disabled: "disabled", tabIndex: "tabIndex" }, host: { classAttribute: "mat-tree-node" }, providers: [{ provide: CdkTreeNode, useExisting: MatTreeNode }], exportAs: ["matTreeNode"], usesInheritance: true, ngImport: i0 }); }
  29. }
  30. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNode, decorators: [{
  31. type: Directive,
  32. args: [{
  33. selector: 'mat-tree-node',
  34. exportAs: 'matTreeNode',
  35. inputs: ['role', 'disabled', 'tabIndex'],
  36. providers: [{ provide: CdkTreeNode, useExisting: MatTreeNode }],
  37. host: {
  38. 'class': 'mat-tree-node',
  39. },
  40. }]
  41. }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.CdkTree }, { type: undefined, decorators: [{
  42. type: Attribute,
  43. args: ['tabindex']
  44. }] }]; } });
  45. /**
  46. * Wrapper for the CdkTree node definition with Material design styles.
  47. * Captures the node's template and a when predicate that describes when this node should be used.
  48. */
  49. class MatTreeNodeDef extends CdkTreeNodeDef {
  50. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
  51. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: { when: ["matTreeNodeDefWhen", "when"], data: ["matTreeNode", "data"] }, providers: [{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }], usesInheritance: true, ngImport: i0 }); }
  52. }
  53. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeDef, decorators: [{
  54. type: Directive,
  55. args: [{
  56. selector: '[matTreeNodeDef]',
  57. inputs: ['when: matTreeNodeDefWhen'],
  58. providers: [{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }],
  59. }]
  60. }], propDecorators: { data: [{
  61. type: Input,
  62. args: ['matTreeNode']
  63. }] } });
  64. /**
  65. * Wrapper for the CdkTree nested node with Material design styles.
  66. */
  67. class MatNestedTreeNode extends CdkNestedTreeNode {
  68. /** Whether the node is disabled. */
  69. get disabled() {
  70. return this._disabled;
  71. }
  72. set disabled(value) {
  73. this._disabled = coerceBooleanProperty(value);
  74. }
  75. /** Tabindex for the node. */
  76. get tabIndex() {
  77. return this.disabled ? -1 : this._tabIndex;
  78. }
  79. set tabIndex(value) {
  80. // If the specified tabIndex value is null or undefined, fall back to the default value.
  81. this._tabIndex = value != null ? value : 0;
  82. }
  83. constructor(elementRef, tree, differs, tabIndex) {
  84. super(elementRef, tree, differs);
  85. this._disabled = false;
  86. this.tabIndex = Number(tabIndex) || 0;
  87. }
  88. // This is a workaround for https://github.com/angular/angular/issues/19145
  89. // In aot mode, the lifecycle hooks from parent class are not called.
  90. // TODO(tinayuangao): Remove when the angular issue #19145 is fixed
  91. ngOnInit() {
  92. super.ngOnInit();
  93. }
  94. ngAfterContentInit() {
  95. super.ngAfterContentInit();
  96. }
  97. ngOnDestroy() {
  98. super.ngOnDestroy();
  99. }
  100. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatNestedTreeNode, deps: [{ token: i0.ElementRef }, { token: i1.CdkTree }, { token: i0.IterableDiffers }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
  101. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: { role: "role", disabled: "disabled", tabIndex: "tabIndex", node: ["matNestedTreeNode", "node"] }, host: { classAttribute: "mat-nested-tree-node" }, providers: [
  102. { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },
  103. { provide: CdkTreeNode, useExisting: MatNestedTreeNode },
  104. { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode },
  105. ], exportAs: ["matNestedTreeNode"], usesInheritance: true, ngImport: i0 }); }
  106. }
  107. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatNestedTreeNode, decorators: [{
  108. type: Directive,
  109. args: [{
  110. selector: 'mat-nested-tree-node',
  111. exportAs: 'matNestedTreeNode',
  112. inputs: ['role', 'disabled', 'tabIndex'],
  113. providers: [
  114. { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },
  115. { provide: CdkTreeNode, useExisting: MatNestedTreeNode },
  116. { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode },
  117. ],
  118. host: {
  119. 'class': 'mat-nested-tree-node',
  120. },
  121. }]
  122. }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.CdkTree }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{
  123. type: Attribute,
  124. args: ['tabindex']
  125. }] }]; }, propDecorators: { node: [{
  126. type: Input,
  127. args: ['matNestedTreeNode']
  128. }], disabled: [{
  129. type: Input
  130. }], tabIndex: [{
  131. type: Input
  132. }] } });
  133. /**
  134. * Wrapper for the CdkTree padding with Material design styles.
  135. */
  136. class MatTreeNodePadding extends CdkTreeNodePadding {
  137. /** The level of depth of the tree node. The padding will be `level * indent` pixels. */
  138. get level() {
  139. return this._level;
  140. }
  141. set level(value) {
  142. this._setLevelInput(value);
  143. }
  144. /** The indent for each level. Default number 40px from material design menu sub-menu spec. */
  145. get indent() {
  146. return this._indent;
  147. }
  148. set indent(indent) {
  149. this._setIndentInput(indent);
  150. }
  151. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodePadding, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
  152. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: { level: ["matTreeNodePadding", "level"], indent: ["matTreeNodePaddingIndent", "indent"] }, providers: [{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }], usesInheritance: true, ngImport: i0 }); }
  153. }
  154. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodePadding, decorators: [{
  155. type: Directive,
  156. args: [{
  157. selector: '[matTreeNodePadding]',
  158. providers: [{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }],
  159. }]
  160. }], propDecorators: { level: [{
  161. type: Input,
  162. args: ['matTreeNodePadding']
  163. }], indent: [{
  164. type: Input,
  165. args: ['matTreeNodePaddingIndent']
  166. }] } });
  167. /**
  168. * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes
  169. * inside the outlet.
  170. */
  171. class MatTreeNodeOutlet {
  172. constructor(viewContainer, _node) {
  173. this.viewContainer = viewContainer;
  174. this._node = _node;
  175. }
  176. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeOutlet, deps: [{ token: i0.ViewContainerRef }, { token: CDK_TREE_NODE_OUTLET_NODE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
  177. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]", providers: [
  178. {
  179. provide: CdkTreeNodeOutlet,
  180. useExisting: MatTreeNodeOutlet,
  181. },
  182. ], ngImport: i0 }); }
  183. }
  184. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeOutlet, decorators: [{
  185. type: Directive,
  186. args: [{
  187. selector: '[matTreeNodeOutlet]',
  188. providers: [
  189. {
  190. provide: CdkTreeNodeOutlet,
  191. useExisting: MatTreeNodeOutlet,
  192. },
  193. ],
  194. }]
  195. }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{
  196. type: Inject,
  197. args: [CDK_TREE_NODE_OUTLET_NODE]
  198. }, {
  199. type: Optional
  200. }] }]; } });
  201. /**
  202. * Wrapper for the CdkTable with Material design styles.
  203. */
  204. class MatTree extends CdkTree {
  205. constructor() {
  206. super(...arguments);
  207. // Outlets within the tree's template where the dataNodes will be inserted.
  208. // We need an initializer here to avoid a TS error. The value will be set in `ngAfterViewInit`.
  209. this._nodeOutlet = undefined;
  210. }
  211. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTree, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
  212. static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: MatTree, selector: "mat-tree", host: { attributes: { "role": "tree" }, classAttribute: "mat-tree" }, providers: [{ provide: CdkTree, useExisting: MatTree }], viewQueries: [{ propertyName: "_nodeOutlet", first: true, predicate: MatTreeNodeOutlet, descendants: true, static: true }], exportAs: ["matTree"], usesInheritance: true, ngImport: i0, template: `<ng-container matTreeNodeOutlet></ng-container>`, isInline: true, styles: [".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}"], dependencies: [{ kind: "directive", type: MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
  213. }
  214. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTree, decorators: [{
  215. type: Component,
  216. args: [{ selector: 'mat-tree', exportAs: 'matTree', template: `<ng-container matTreeNodeOutlet></ng-container>`, host: {
  217. 'class': 'mat-tree',
  218. 'role': 'tree',
  219. }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [{ provide: CdkTree, useExisting: MatTree }], styles: [".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}"] }]
  220. }], propDecorators: { _nodeOutlet: [{
  221. type: ViewChild,
  222. args: [MatTreeNodeOutlet, { static: true }]
  223. }] } });
  224. /**
  225. * Wrapper for the CdkTree's toggle with Material design styles.
  226. */
  227. class MatTreeNodeToggle extends CdkTreeNodeToggle {
  228. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeToggle, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
  229. static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: { recursive: ["matTreeNodeToggleRecursive", "recursive"] }, providers: [{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }], usesInheritance: true, ngImport: i0 }); }
  230. }
  231. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeNodeToggle, decorators: [{
  232. type: Directive,
  233. args: [{
  234. selector: '[matTreeNodeToggle]',
  235. providers: [{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }],
  236. inputs: ['recursive: matTreeNodeToggleRecursive'],
  237. }]
  238. }] });
  239. const MAT_TREE_DIRECTIVES = [
  240. MatNestedTreeNode,
  241. MatTreeNodeDef,
  242. MatTreeNodePadding,
  243. MatTreeNodeToggle,
  244. MatTree,
  245. MatTreeNode,
  246. MatTreeNodeOutlet,
  247. ];
  248. class MatTreeModule {
  249. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
  250. static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: MatTreeModule, declarations: [MatNestedTreeNode,
  251. MatTreeNodeDef,
  252. MatTreeNodePadding,
  253. MatTreeNodeToggle,
  254. MatTree,
  255. MatTreeNode,
  256. MatTreeNodeOutlet], imports: [CdkTreeModule, MatCommonModule], exports: [MatCommonModule, MatNestedTreeNode,
  257. MatTreeNodeDef,
  258. MatTreeNodePadding,
  259. MatTreeNodeToggle,
  260. MatTree,
  261. MatTreeNode,
  262. MatTreeNodeOutlet] }); }
  263. static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeModule, imports: [CdkTreeModule, MatCommonModule, MatCommonModule] }); }
  264. }
  265. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: MatTreeModule, decorators: [{
  266. type: NgModule,
  267. args: [{
  268. imports: [CdkTreeModule, MatCommonModule],
  269. exports: [MatCommonModule, MAT_TREE_DIRECTIVES],
  270. declarations: MAT_TREE_DIRECTIVES,
  271. }]
  272. }] });
  273. /**
  274. * Tree flattener to convert a normal type of node to node with children & level information.
  275. * Transform nested nodes of type `T` to flattened nodes of type `F`.
  276. *
  277. * For example, the input data of type `T` is nested, and contains its children data:
  278. * SomeNode: {
  279. * key: 'Fruits',
  280. * children: [
  281. * NodeOne: {
  282. * key: 'Apple',
  283. * },
  284. * NodeTwo: {
  285. * key: 'Pear',
  286. * }
  287. * ]
  288. * }
  289. * After flattener flatten the tree, the structure will become
  290. * SomeNode: {
  291. * key: 'Fruits',
  292. * expandable: true,
  293. * level: 1
  294. * },
  295. * NodeOne: {
  296. * key: 'Apple',
  297. * expandable: false,
  298. * level: 2
  299. * },
  300. * NodeTwo: {
  301. * key: 'Pear',
  302. * expandable: false,
  303. * level: 2
  304. * }
  305. * and the output flattened type is `F` with additional information.
  306. */
  307. class MatTreeFlattener {
  308. constructor(transformFunction, getLevel, isExpandable, getChildren) {
  309. this.transformFunction = transformFunction;
  310. this.getLevel = getLevel;
  311. this.isExpandable = isExpandable;
  312. this.getChildren = getChildren;
  313. }
  314. _flattenNode(node, level, resultNodes, parentMap) {
  315. const flatNode = this.transformFunction(node, level);
  316. resultNodes.push(flatNode);
  317. if (this.isExpandable(flatNode)) {
  318. const childrenNodes = this.getChildren(node);
  319. if (childrenNodes) {
  320. if (Array.isArray(childrenNodes)) {
  321. this._flattenChildren(childrenNodes, level, resultNodes, parentMap);
  322. }
  323. else {
  324. childrenNodes.pipe(take(1)).subscribe(children => {
  325. this._flattenChildren(children, level, resultNodes, parentMap);
  326. });
  327. }
  328. }
  329. }
  330. return resultNodes;
  331. }
  332. _flattenChildren(children, level, resultNodes, parentMap) {
  333. children.forEach((child, index) => {
  334. let childParentMap = parentMap.slice();
  335. childParentMap.push(index != children.length - 1);
  336. this._flattenNode(child, level + 1, resultNodes, childParentMap);
  337. });
  338. }
  339. /**
  340. * Flatten a list of node type T to flattened version of node F.
  341. * Please note that type T may be nested, and the length of `structuredData` may be different
  342. * from that of returned list `F[]`.
  343. */
  344. flattenNodes(structuredData) {
  345. let resultNodes = [];
  346. structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));
  347. return resultNodes;
  348. }
  349. /**
  350. * Expand flattened node with current expansion status.
  351. * The returned list may have different length.
  352. */
  353. expandFlattenedNodes(nodes, treeControl) {
  354. let results = [];
  355. let currentExpand = [];
  356. currentExpand[0] = true;
  357. nodes.forEach(node => {
  358. let expand = true;
  359. for (let i = 0; i <= this.getLevel(node); i++) {
  360. expand = expand && currentExpand[i];
  361. }
  362. if (expand) {
  363. results.push(node);
  364. }
  365. if (this.isExpandable(node)) {
  366. currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);
  367. }
  368. });
  369. return results;
  370. }
  371. }
  372. /**
  373. * Data source for flat tree.
  374. * The data source need to handle expansion/collapsion of the tree node and change the data feed
  375. * to `MatTree`.
  376. * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted
  377. * to type `F` for `MatTree` to consume.
  378. */
  379. class MatTreeFlatDataSource extends DataSource {
  380. get data() {
  381. return this._data.value;
  382. }
  383. set data(value) {
  384. this._data.next(value);
  385. this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));
  386. this._treeControl.dataNodes = this._flattenedData.value;
  387. }
  388. constructor(_treeControl, _treeFlattener, initialData) {
  389. super();
  390. this._treeControl = _treeControl;
  391. this._treeFlattener = _treeFlattener;
  392. this._flattenedData = new BehaviorSubject([]);
  393. this._expandedData = new BehaviorSubject([]);
  394. this._data = new BehaviorSubject([]);
  395. if (initialData) {
  396. // Assign the data through the constructor to ensure that all of the logic is executed.
  397. this.data = initialData;
  398. }
  399. }
  400. connect(collectionViewer) {
  401. return merge(collectionViewer.viewChange, this._treeControl.expansionModel.changed, this._flattenedData).pipe(map(() => {
  402. this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));
  403. return this._expandedData.value;
  404. }));
  405. }
  406. disconnect() {
  407. // no op
  408. }
  409. }
  410. /**
  411. * Data source for nested tree.
  412. *
  413. * The data source for nested tree doesn't have to consider node flattener, or the way to expand
  414. * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.
  415. */
  416. class MatTreeNestedDataSource extends DataSource {
  417. constructor() {
  418. super(...arguments);
  419. this._data = new BehaviorSubject([]);
  420. }
  421. /**
  422. * Data for the nested tree
  423. */
  424. get data() {
  425. return this._data.value;
  426. }
  427. set data(value) {
  428. this._data.next(value);
  429. }
  430. connect(collectionViewer) {
  431. return merge(...[collectionViewer.viewChange, this._data]).pipe(map(() => this.data));
  432. }
  433. disconnect() {
  434. // no op
  435. }
  436. }
  437. /**
  438. * Generated bundle index. Do not edit.
  439. */
  440. export { MatNestedTreeNode, MatTree, MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule, MatTreeNestedDataSource, MatTreeNode, MatTreeNodeDef, MatTreeNodeOutlet, MatTreeNodePadding, MatTreeNodeToggle };
  441. //# sourceMappingURL=tree.mjs.map