@angular/cdk 7.0.4 → 7.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/LICENSE +1 -1
  2. package/_a11y.scss +1 -1
  3. package/a11y/typings/focus-monitor/focus-monitor.d.ts +20 -5
  4. package/a11y/typings/focus-trap/focus-trap.d.ts +2 -0
  5. package/a11y/typings/index.metadata.json +1 -1
  6. package/a11y/typings/live-announcer/live-announcer.d.ts +34 -3
  7. package/bundles/cdk-a11y.umd.js +477 -216
  8. package/bundles/cdk-a11y.umd.js.map +1 -1
  9. package/bundles/cdk-a11y.umd.min.js +1 -1
  10. package/bundles/cdk-a11y.umd.min.js.map +1 -1
  11. package/bundles/cdk-accordion.umd.js +16 -9
  12. package/bundles/cdk-accordion.umd.js.map +1 -1
  13. package/bundles/cdk-accordion.umd.min.js.map +1 -1
  14. package/bundles/cdk-bidi.umd.js +11 -6
  15. package/bundles/cdk-bidi.umd.js.map +1 -1
  16. package/bundles/cdk-bidi.umd.min.js.map +1 -1
  17. package/bundles/cdk-coercion.umd.js +25 -9
  18. package/bundles/cdk-coercion.umd.js.map +1 -1
  19. package/bundles/cdk-coercion.umd.min.js +1 -1
  20. package/bundles/cdk-coercion.umd.min.js.map +1 -1
  21. package/bundles/cdk-collections.umd.js +28 -5
  22. package/bundles/cdk-collections.umd.js.map +1 -1
  23. package/bundles/cdk-collections.umd.min.js.map +1 -1
  24. package/bundles/cdk-drag-drop.umd.js +2177 -915
  25. package/bundles/cdk-drag-drop.umd.js.map +1 -1
  26. package/bundles/cdk-drag-drop.umd.min.js +2 -1
  27. package/bundles/cdk-drag-drop.umd.min.js.map +1 -1
  28. package/bundles/cdk-keycodes.umd.js +33 -1
  29. package/bundles/cdk-keycodes.umd.js.map +1 -1
  30. package/bundles/cdk-keycodes.umd.min.js +1 -1
  31. package/bundles/cdk-keycodes.umd.min.js.map +1 -1
  32. package/bundles/cdk-layout.umd.js +29 -22
  33. package/bundles/cdk-layout.umd.js.map +1 -1
  34. package/bundles/cdk-layout.umd.min.js +1 -1
  35. package/bundles/cdk-layout.umd.min.js.map +1 -1
  36. package/bundles/cdk-observers.umd.js +26 -7
  37. package/bundles/cdk-observers.umd.js.map +1 -1
  38. package/bundles/cdk-observers.umd.min.js +1 -1
  39. package/bundles/cdk-observers.umd.min.js.map +1 -1
  40. package/bundles/cdk-overlay.umd.js +605 -258
  41. package/bundles/cdk-overlay.umd.js.map +1 -1
  42. package/bundles/cdk-overlay.umd.min.js +2 -2
  43. package/bundles/cdk-overlay.umd.min.js.map +1 -1
  44. package/bundles/cdk-platform.umd.js +50 -28
  45. package/bundles/cdk-platform.umd.js.map +1 -1
  46. package/bundles/cdk-platform.umd.min.js.map +1 -1
  47. package/bundles/cdk-portal.umd.js +14 -7
  48. package/bundles/cdk-portal.umd.js.map +1 -1
  49. package/bundles/cdk-portal.umd.min.js.map +1 -1
  50. package/bundles/cdk-scrolling.umd.js +139 -44
  51. package/bundles/cdk-scrolling.umd.js.map +1 -1
  52. package/bundles/cdk-scrolling.umd.min.js +1 -1
  53. package/bundles/cdk-scrolling.umd.min.js.map +1 -1
  54. package/bundles/cdk-stepper.umd.js +103 -19
  55. package/bundles/cdk-stepper.umd.js.map +1 -1
  56. package/bundles/cdk-stepper.umd.min.js +1 -1
  57. package/bundles/cdk-stepper.umd.min.js.map +1 -1
  58. package/bundles/cdk-table.umd.js +182 -48
  59. package/bundles/cdk-table.umd.js.map +1 -1
  60. package/bundles/cdk-table.umd.min.js.map +1 -1
  61. package/bundles/cdk-text-field.umd.js +76 -38
  62. package/bundles/cdk-text-field.umd.js.map +1 -1
  63. package/bundles/cdk-text-field.umd.min.js +1 -1
  64. package/bundles/cdk-text-field.umd.min.js.map +1 -1
  65. package/bundles/cdk-tree.umd.js +71 -34
  66. package/bundles/cdk-tree.umd.js.map +1 -1
  67. package/bundles/cdk-tree.umd.min.js +1 -1
  68. package/bundles/cdk-tree.umd.min.js.map +1 -1
  69. package/bundles/cdk.umd.js +5 -4
  70. package/bundles/cdk.umd.js.map +1 -1
  71. package/bundles/cdk.umd.min.js +1 -1
  72. package/bundles/cdk.umd.min.js.map +1 -1
  73. package/coercion/typings/element.d.ts +13 -0
  74. package/coercion/typings/index.metadata.json +1 -1
  75. package/coercion/typings/public-api.d.ts +1 -0
  76. package/drag-drop/typings/{drag-handle.d.ts → directives/drag-handle.d.ts} +3 -0
  77. package/drag-drop/typings/{drag-placeholder.d.ts → directives/drag-placeholder.d.ts} +0 -0
  78. package/drag-drop/typings/{drag-preview.d.ts → directives/drag-preview.d.ts} +0 -0
  79. package/drag-drop/typings/directives/drag.d.ts +109 -0
  80. package/{typings/drag-drop → drag-drop/typings/directives}/drop-list-group.d.ts +3 -0
  81. package/drag-drop/typings/directives/drop-list.d.ts +135 -0
  82. package/drag-drop/typings/drag-drop-registry.d.ts +8 -3
  83. package/drag-drop/typings/drag-events.d.ts +14 -7
  84. package/{typings/esm5/drag-drop/drag.d.ts → drag-drop/typings/drag-ref.d.ts} +152 -82
  85. package/drag-drop/typings/drop-list-container.d.ts +21 -3
  86. package/drag-drop/typings/{drop-list.d.ts → drop-list-ref.d.ts} +132 -81
  87. package/drag-drop/typings/index.d.ts +1 -0
  88. package/drag-drop/typings/index.metadata.json +1 -1
  89. package/drag-drop/typings/public-api.d.ts +13 -6
  90. package/esm2015/a11y.js +337 -190
  91. package/esm2015/a11y.js.map +1 -1
  92. package/esm2015/accordion.js +16 -11
  93. package/esm2015/accordion.js.map +1 -1
  94. package/esm2015/bidi.js +13 -8
  95. package/esm2015/bidi.js.map +1 -1
  96. package/esm2015/cdk.js +7 -6
  97. package/esm2015/cdk.js.map +1 -1
  98. package/esm2015/coercion.js +25 -8
  99. package/esm2015/coercion.js.map +1 -1
  100. package/esm2015/collections.js +22 -7
  101. package/esm2015/collections.js.map +1 -1
  102. package/esm2015/drag-drop.js +1587 -691
  103. package/esm2015/drag-drop.js.map +1 -1
  104. package/esm2015/keycodes.js +31 -4
  105. package/esm2015/keycodes.js.map +1 -1
  106. package/esm2015/layout.js +29 -19
  107. package/esm2015/layout.js.map +1 -1
  108. package/esm2015/observers.js +15 -10
  109. package/esm2015/observers.js.map +1 -1
  110. package/esm2015/overlay.js +393 -232
  111. package/esm2015/overlay.js.map +1 -1
  112. package/esm2015/platform.js +53 -31
  113. package/esm2015/platform.js.map +1 -1
  114. package/esm2015/portal.js +13 -9
  115. package/esm2015/portal.js.map +1 -1
  116. package/esm2015/scrolling.js +102 -45
  117. package/esm2015/scrolling.js.map +1 -1
  118. package/esm2015/stepper.js +93 -24
  119. package/esm2015/stepper.js.map +1 -1
  120. package/esm2015/table.js +89 -45
  121. package/esm2015/table.js.map +1 -1
  122. package/esm2015/text-field.js +54 -37
  123. package/esm2015/text-field.js.map +1 -1
  124. package/esm2015/tree.js +55 -36
  125. package/esm2015/tree.js.map +1 -1
  126. package/esm5/a11y.es5.js +481 -220
  127. package/esm5/a11y.es5.js.map +1 -1
  128. package/esm5/accordion.es5.js +18 -11
  129. package/esm5/accordion.es5.js.map +1 -1
  130. package/esm5/bidi.es5.js +13 -8
  131. package/esm5/bidi.es5.js.map +1 -1
  132. package/esm5/cdk.es5.js +7 -6
  133. package/esm5/cdk.es5.js.map +1 -1
  134. package/esm5/coercion.es5.js +25 -8
  135. package/esm5/coercion.es5.js.map +1 -1
  136. package/esm5/collections.es5.js +35 -7
  137. package/esm5/collections.es5.js.map +1 -1
  138. package/esm5/drag-drop.es5.js +2233 -972
  139. package/esm5/drag-drop.es5.js.map +1 -1
  140. package/esm5/keycodes.es5.js +35 -4
  141. package/esm5/keycodes.es5.js.map +1 -1
  142. package/esm5/layout.es5.js +31 -24
  143. package/esm5/layout.es5.js.map +1 -1
  144. package/esm5/observers.es5.js +29 -10
  145. package/esm5/observers.es5.js.map +1 -1
  146. package/esm5/overlay.es5.js +609 -262
  147. package/esm5/overlay.es5.js.map +1 -1
  148. package/esm5/platform.es5.js +52 -30
  149. package/esm5/platform.es5.js.map +1 -1
  150. package/esm5/portal.es5.js +16 -9
  151. package/esm5/portal.es5.js.map +1 -1
  152. package/esm5/scrolling.es5.js +141 -46
  153. package/esm5/scrolling.es5.js.map +1 -1
  154. package/esm5/stepper.es5.js +106 -24
  155. package/esm5/stepper.es5.js.map +1 -1
  156. package/esm5/table.es5.js +184 -50
  157. package/esm5/table.es5.js.map +1 -1
  158. package/esm5/text-field.es5.js +75 -37
  159. package/esm5/text-field.es5.js.map +1 -1
  160. package/esm5/tree.es5.js +74 -37
  161. package/esm5/tree.es5.js.map +1 -1
  162. package/keycodes/typings/index.metadata.json +1 -1
  163. package/keycodes/typings/modifiers.d.ts +14 -0
  164. package/keycodes/typings/public-api.d.ts +1 -0
  165. package/overlay/typings/index.metadata.json +1 -1
  166. package/overlay/typings/overlay-directives.d.ts +0 -2
  167. package/package.json +4 -4
  168. package/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts +2 -2
  169. package/schematics/ng-update/upgrade-data.js +2 -1
  170. package/schematics/ng-update/upgrade-data.js.map +1 -1
  171. package/schematics/ng-update/upgrade-rules/index.js +3 -2
  172. package/schematics/ng-update/upgrade-rules/index.js.map +1 -1
  173. package/schematics/utils/ast/ng-module-imports.d.ts +1 -1
  174. package/schematics/utils/ast/ng-module-imports.js +25 -13
  175. package/schematics/utils/ast/ng-module-imports.js.map +1 -1
  176. package/schematics/utils/get-project.js +2 -1
  177. package/schematics/utils/get-project.js.map +1 -1
  178. package/schematics/utils/parse5-element.js +3 -2
  179. package/schematics/utils/parse5-element.js.map +1 -1
  180. package/schematics/utils/project-targets.js +2 -1
  181. package/schematics/utils/project-targets.js.map +1 -1
  182. package/schematics/utils/version-agnostic-typescript.js +3 -2
  183. package/schematics/utils/version-agnostic-typescript.js.map +1 -1
  184. package/scrolling/typings/index.metadata.json +1 -1
  185. package/stepper/typings/index.metadata.json +1 -1
  186. package/stepper/typings/public-api.d.ts +1 -0
  187. package/stepper/typings/step-header.d.ts +15 -0
  188. package/stepper/typings/stepper.d.ts +11 -1
  189. package/text-field/typings/autosize.d.ts +6 -0
  190. package/text-field/typings/index.metadata.json +1 -1
  191. package/tree/typings/control/base-tree-control.d.ts +1 -1
  192. package/tree/typings/control/nested-tree-control.d.ts +2 -2
  193. package/tree/typings/control/tree-control.d.ts +1 -1
  194. package/tree/typings/nested-node.d.ts +5 -5
  195. package/typings/a11y/focus-monitor/focus-monitor.d.ts +20 -5
  196. package/typings/a11y/focus-trap/focus-trap.d.ts +2 -0
  197. package/typings/a11y/index.metadata.json +1 -1
  198. package/typings/a11y/live-announcer/live-announcer.d.ts +34 -3
  199. package/typings/coercion/element.d.ts +13 -0
  200. package/typings/coercion/index.metadata.json +1 -1
  201. package/typings/coercion/public-api.d.ts +1 -0
  202. package/typings/{esm5/drag-drop → drag-drop/directives}/drag-handle.d.ts +3 -0
  203. package/typings/drag-drop/{drag-placeholder.d.ts → directives/drag-placeholder.d.ts} +0 -0
  204. package/typings/drag-drop/{drag-preview.d.ts → directives/drag-preview.d.ts} +0 -0
  205. package/typings/drag-drop/directives/drag.d.ts +109 -0
  206. package/typings/{esm5/drag-drop → drag-drop/directives}/drop-list-group.d.ts +3 -0
  207. package/typings/drag-drop/directives/drop-list.d.ts +135 -0
  208. package/typings/drag-drop/drag-drop-registry.d.ts +8 -3
  209. package/typings/drag-drop/drag-events.d.ts +14 -7
  210. package/typings/drag-drop/{drag.d.ts → drag-ref.d.ts} +152 -82
  211. package/typings/drag-drop/drop-list-container.d.ts +21 -3
  212. package/typings/{esm5/drag-drop/drop-list.d.ts → drag-drop/drop-list-ref.d.ts} +132 -81
  213. package/typings/drag-drop/index.d.ts +1 -0
  214. package/typings/drag-drop/index.metadata.json +1 -1
  215. package/typings/drag-drop/public-api.d.ts +13 -6
  216. package/typings/esm5/a11y/focus-monitor/focus-monitor.d.ts +20 -5
  217. package/typings/esm5/a11y/focus-trap/focus-trap.d.ts +2 -0
  218. package/typings/esm5/a11y/index.metadata.json +1 -1
  219. package/typings/esm5/a11y/live-announcer/live-announcer.d.ts +34 -3
  220. package/typings/esm5/coercion/element.d.ts +13 -0
  221. package/typings/esm5/coercion/index.metadata.json +1 -1
  222. package/typings/esm5/coercion/public-api.d.ts +1 -0
  223. package/typings/{drag-drop → esm5/drag-drop/directives}/drag-handle.d.ts +3 -0
  224. package/typings/esm5/drag-drop/{drag-placeholder.d.ts → directives/drag-placeholder.d.ts} +0 -0
  225. package/typings/esm5/drag-drop/{drag-preview.d.ts → directives/drag-preview.d.ts} +0 -0
  226. package/typings/esm5/drag-drop/directives/drag.d.ts +109 -0
  227. package/{drag-drop/typings → typings/esm5/drag-drop/directives}/drop-list-group.d.ts +3 -0
  228. package/typings/esm5/drag-drop/directives/drop-list.d.ts +135 -0
  229. package/typings/esm5/drag-drop/drag-drop-registry.d.ts +8 -3
  230. package/typings/esm5/drag-drop/drag-events.d.ts +14 -7
  231. package/{drag-drop/typings/drag.d.ts → typings/esm5/drag-drop/drag-ref.d.ts} +152 -82
  232. package/typings/esm5/drag-drop/drop-list-container.d.ts +21 -3
  233. package/typings/{drag-drop/drop-list.d.ts → esm5/drag-drop/drop-list-ref.d.ts} +132 -81
  234. package/typings/esm5/drag-drop/index.d.ts +1 -0
  235. package/typings/esm5/drag-drop/index.metadata.json +1 -1
  236. package/typings/esm5/drag-drop/public-api.d.ts +13 -6
  237. package/typings/esm5/index.metadata.json +1 -1
  238. package/typings/esm5/keycodes/index.metadata.json +1 -1
  239. package/typings/esm5/keycodes/modifiers.d.ts +14 -0
  240. package/typings/esm5/keycodes/public-api.d.ts +1 -0
  241. package/typings/esm5/overlay/index.metadata.json +1 -1
  242. package/typings/esm5/overlay/overlay-directives.d.ts +0 -2
  243. package/typings/esm5/scrolling/index.metadata.json +1 -1
  244. package/typings/esm5/stepper/index.metadata.json +1 -1
  245. package/typings/esm5/stepper/public-api.d.ts +1 -0
  246. package/typings/esm5/stepper/step-header.d.ts +15 -0
  247. package/typings/esm5/stepper/stepper.d.ts +11 -1
  248. package/typings/esm5/text-field/autosize.d.ts +6 -0
  249. package/typings/esm5/text-field/index.metadata.json +1 -1
  250. package/typings/esm5/tree/control/base-tree-control.d.ts +1 -1
  251. package/typings/esm5/tree/control/nested-tree-control.d.ts +2 -2
  252. package/typings/esm5/tree/control/tree-control.d.ts +1 -1
  253. package/typings/esm5/tree/nested-node.d.ts +5 -5
  254. package/typings/index.metadata.json +1 -1
  255. package/typings/keycodes/index.metadata.json +1 -1
  256. package/typings/keycodes/modifiers.d.ts +14 -0
  257. package/typings/keycodes/public-api.d.ts +1 -0
  258. package/typings/overlay/index.metadata.json +1 -1
  259. package/typings/overlay/overlay-directives.d.ts +0 -2
  260. package/typings/schematics/utils/ast/ng-module-imports.d.ts +1 -1
  261. package/typings/scrolling/index.metadata.json +1 -1
  262. package/typings/stepper/index.metadata.json +1 -1
  263. package/typings/stepper/public-api.d.ts +1 -0
  264. package/typings/stepper/step-header.d.ts +15 -0
  265. package/typings/stepper/stepper.d.ts +11 -1
  266. package/typings/text-field/autosize.d.ts +6 -0
  267. package/typings/text-field/index.metadata.json +1 -1
  268. package/typings/tree/control/base-tree-control.d.ts +1 -1
  269. package/typings/tree/control/nested-tree-control.d.ts +2 -2
  270. package/typings/tree/control/tree-control.d.ts +1 -1
  271. package/typings/tree/nested-node.d.ts +5 -5
package/esm2015/tree.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { SelectionModel } from '@angular/cdk/collections';
9
9
  import { Observable, BehaviorSubject, of, Subject } from 'rxjs';
10
- import { take, takeUntil } from 'rxjs/operators';
10
+ import { take, filter, takeUntil } from 'rxjs/operators';
11
11
  import { Directive, TemplateRef, ViewContainerRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, Input, IterableDiffers, ViewChild, ViewEncapsulation, Optional, Renderer2, NgModule } from '@angular/core';
12
12
  import { Directionality } from '@angular/cdk/bidi';
13
13
  import { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';
@@ -16,7 +16,7 @@ import { CommonModule } from '@angular/common';
16
16
 
17
17
  /**
18
18
  * @fileoverview added by tsickle
19
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
19
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
20
20
  */
21
21
  /**
22
22
  * Base tree control. It has basic toggle/expand/collapse operations on a single data node.
@@ -105,7 +105,7 @@ class BaseTreeControl {
105
105
 
106
106
  /**
107
107
  * @fileoverview added by tsickle
108
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
108
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
109
109
  */
110
110
  /**
111
111
  * Flat tree control. Able to expand/collapse a subtree recursively for flattened tree.
@@ -160,7 +160,7 @@ class FlatTreeControl extends BaseTreeControl {
160
160
 
161
161
  /**
162
162
  * @fileoverview added by tsickle
163
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
163
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
164
164
  */
165
165
  /**
166
166
  * Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type.
@@ -202,6 +202,7 @@ class NestedTreeControl extends BaseTreeControl {
202
202
  }
203
203
  /**
204
204
  * A helper function to get descendants recursively.
205
+ * @protected
205
206
  * @param {?} descendants
206
207
  * @param {?} dataNode
207
208
  * @return {?}
@@ -214,7 +215,7 @@ class NestedTreeControl extends BaseTreeControl {
214
215
  childrenNodes.forEach((child) => this._getDescendants(descendants, child));
215
216
  }
216
217
  else if (childrenNodes instanceof Observable) {
217
- childrenNodes.pipe(take(1)).subscribe(children => {
218
+ childrenNodes.pipe(take(1), filter(Boolean)).subscribe(children => {
218
219
  children.forEach((child) => this._getDescendants(descendants, child));
219
220
  });
220
221
  }
@@ -223,7 +224,12 @@ class NestedTreeControl extends BaseTreeControl {
223
224
 
224
225
  /**
225
226
  * @fileoverview added by tsickle
226
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
227
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
228
+ */
229
+
230
+ /**
231
+ * @fileoverview added by tsickle
232
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
227
233
  */
228
234
  /**
229
235
  * Context provided to the tree node component.
@@ -266,7 +272,7 @@ CdkTreeNodeDef.ctorParameters = () => [
266
272
 
267
273
  /**
268
274
  * @fileoverview added by tsickle
269
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
275
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
270
276
  */
271
277
  /**
272
278
  * Outlet for nested CdkNode. Put `[cdkTreeNodeOutlet]` on a tag to place children dataNodes
@@ -292,7 +298,7 @@ CdkTreeNodeOutlet.ctorParameters = () => [
292
298
 
293
299
  /**
294
300
  * @fileoverview added by tsickle
295
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
301
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
296
302
  */
297
303
 
298
304
  /**
@@ -338,7 +344,7 @@ function getTreeControlFunctionsMissingError() {
338
344
 
339
345
  /**
340
346
  * @fileoverview added by tsickle
341
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
347
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
342
348
  */
343
349
  /**
344
350
  * CDK tree component that connects with a data source to retrieve data of type `T` and renders
@@ -361,6 +367,8 @@ class CdkTree {
361
367
  * Level of nodes
362
368
  */
363
369
  this._levels = new Map();
370
+ // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.
371
+ // Remove the MAX_VALUE in viewChange
364
372
  /**
365
373
  * Stream containing the latest information on what rows are being displayed on screen.
366
374
  * Can be used by the data source to as a heuristic of what data should be provided.
@@ -399,8 +407,8 @@ class CdkTree {
399
407
  this._nodeOutlet.viewContainer.clear();
400
408
  this._onDestroy.next();
401
409
  this._onDestroy.complete();
402
- if (this._dataSource && typeof (/** @type {?} */ (this._dataSource)).disconnect === 'function') {
403
- (/** @type {?} */ (this.dataSource)).disconnect(this);
410
+ if (this._dataSource && typeof ((/** @type {?} */ (this._dataSource))).disconnect === 'function') {
411
+ ((/** @type {?} */ (this.dataSource))).disconnect(this);
404
412
  }
405
413
  if (this._dataSubscription) {
406
414
  this._dataSubscription.unsubscribe();
@@ -421,16 +429,19 @@ class CdkTree {
421
429
  this._observeRenderChanges();
422
430
  }
423
431
  }
432
+ // TODO(tinayuangao): Work on keyboard traversal and actions, make sure it's working for RTL
433
+ // and nested trees.
424
434
  /**
425
435
  * Switch to the provided data source by resetting the data and unsubscribing from the current
426
436
  * render change subscription if one exists. If the data source is null, interpret this by
427
437
  * clearing the node outlet. Otherwise start listening for new data.
438
+ * @private
428
439
  * @param {?} dataSource
429
440
  * @return {?}
430
441
  */
431
442
  _switchDataSource(dataSource) {
432
- if (this._dataSource && typeof (/** @type {?} */ (this._dataSource)).disconnect === 'function') {
433
- (/** @type {?} */ (this.dataSource)).disconnect(this);
443
+ if (this._dataSource && typeof ((/** @type {?} */ (this._dataSource))).disconnect === 'function') {
444
+ ((/** @type {?} */ (this.dataSource))).disconnect(this);
434
445
  }
435
446
  if (this._dataSubscription) {
436
447
  this._dataSubscription.unsubscribe();
@@ -447,6 +458,7 @@ class CdkTree {
447
458
  }
448
459
  /**
449
460
  * Set up a subscription for the data provided by the data source.
461
+ * @private
450
462
  * @return {?}
451
463
  */
452
464
  _observeRenderChanges() {
@@ -454,8 +466,8 @@ class CdkTree {
454
466
  let dataStream;
455
467
  // Cannot use `instanceof DataSource` since the data source could be a literal with
456
468
  // `connect` function and may not extends DataSource.
457
- if (typeof (/** @type {?} */ (this._dataSource)).connect === 'function') {
458
- dataStream = (/** @type {?} */ (this._dataSource)).connect(this);
469
+ if (typeof ((/** @type {?} */ (this._dataSource))).connect === 'function') {
470
+ dataStream = ((/** @type {?} */ (this._dataSource))).connect(this);
459
471
  }
460
472
  else if (this._dataSource instanceof Observable) {
461
473
  dataStream = this._dataSource;
@@ -487,16 +499,16 @@ class CdkTree {
487
499
  }
488
500
  changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
489
501
  if (item.previousIndex == null) {
490
- this.insertNode(data[/** @type {?} */ ((currentIndex))], /** @type {?} */ ((currentIndex)), viewContainer, parentData);
502
+ this.insertNode(data[(/** @type {?} */ (currentIndex))], (/** @type {?} */ (currentIndex)), viewContainer, parentData);
491
503
  }
492
504
  else if (currentIndex == null) {
493
- viewContainer.remove(/** @type {?} */ ((adjustedPreviousIndex)));
505
+ viewContainer.remove((/** @type {?} */ (adjustedPreviousIndex)));
494
506
  this._levels.delete(item.item);
495
507
  }
496
508
  else {
497
509
  /** @type {?} */
498
- const view = viewContainer.get(/** @type {?} */ ((adjustedPreviousIndex)));
499
- viewContainer.move(/** @type {?} */ ((view)), currentIndex);
510
+ const view = viewContainer.get((/** @type {?} */ (adjustedPreviousIndex)));
511
+ viewContainer.move((/** @type {?} */ (view)), currentIndex);
500
512
  }
501
513
  });
502
514
  this._changeDetectorRef.detectChanges();
@@ -533,6 +545,7 @@ class CdkTree {
533
545
  insertNode(nodeData, index, viewContainer, parentData) {
534
546
  /** @type {?} */
535
547
  const node = this._getNodeDef(nodeData, index);
548
+ // Node context that will be provided to created embedded view
536
549
  /** @type {?} */
537
550
  const context = new CdkTreeNodeOutletContext(nodeData);
538
551
  // If the tree is flat tree, then use the `getLevel` function in flat tree control
@@ -541,12 +554,13 @@ class CdkTree {
541
554
  context.level = this.treeControl.getLevel(nodeData);
542
555
  }
543
556
  else if (typeof parentData !== 'undefined' && this._levels.has(parentData)) {
544
- context.level = /** @type {?} */ ((this._levels.get(parentData))) + 1;
557
+ context.level = (/** @type {?} */ (this._levels.get(parentData))) + 1;
545
558
  }
546
559
  else {
547
560
  context.level = 0;
548
561
  }
549
562
  this._levels.set(nodeData, context.level);
563
+ // Use default tree nodeOutlet, or nested node's nodeOutlet
550
564
  /** @type {?} */
551
565
  const container = viewContainer ? viewContainer : this._nodeOutlet.viewContainer;
552
566
  container.createEmbeddedView(node.template, context, index);
@@ -603,7 +617,7 @@ class CdkTreeNode {
603
617
  * and 'treeitem' if it's a leaf node.
604
618
  */
605
619
  this.role = 'treeitem';
606
- CdkTreeNode.mostRecentTreeNode = /** @type {?} */ (this);
620
+ CdkTreeNode.mostRecentTreeNode = (/** @type {?} */ (this));
607
621
  }
608
622
  /**
609
623
  * The tree node's data.
@@ -650,6 +664,7 @@ class CdkTreeNode {
650
664
  this._elementRef.nativeElement.focus();
651
665
  }
652
666
  /**
667
+ * @protected
653
668
  * @return {?}
654
669
  */
655
670
  _setRoleFromData() {
@@ -663,7 +678,7 @@ class CdkTreeNode {
663
678
  /** @type {?} */
664
679
  const childrenNodes = this._tree.treeControl.getChildren(this._data);
665
680
  if (Array.isArray(childrenNodes)) {
666
- this._setRoleFromChildren(/** @type {?} */ (childrenNodes));
681
+ this._setRoleFromChildren((/** @type {?} */ (childrenNodes)));
667
682
  }
668
683
  else if (childrenNodes instanceof Observable) {
669
684
  childrenNodes.pipe(takeUntil(this._destroyed))
@@ -672,6 +687,7 @@ class CdkTreeNode {
672
687
  }
673
688
  }
674
689
  /**
690
+ * @protected
675
691
  * @param {?} children
676
692
  * @return {?}
677
693
  */
@@ -707,7 +723,7 @@ CdkTreeNode.propDecorators = {
707
723
 
708
724
  /**
709
725
  * @fileoverview added by tsickle
710
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
726
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
711
727
  */
712
728
  /**
713
729
  * Nested node is a child of `<cdk-tree>`. It works with nested tree.
@@ -715,19 +731,19 @@ CdkTreeNode.propDecorators = {
715
731
  * be added in the `cdkTreeNodeOutlet` in tree node template.
716
732
  * For example:
717
733
  * ```html
718
- * <cdk-mested-tree-node>
734
+ * <cdk-nested-tree-node>
719
735
  * {{node.name}}
720
736
  * <ng-template cdkTreeNodeOutlet></ng-template>
721
- * </cdk-tree-node>
737
+ * </cdk-nested-tree-node>
722
738
  * ```
723
739
  * The children of node will be automatically added to `cdkTreeNodeOutlet`, the result dom will be
724
740
  * like this:
725
741
  * ```html
726
742
  * <cdk-nested-tree-node>
727
743
  * {{node.name}}
728
- * <cdk-nested-tree-node>{{child1.name}}</cdk-tree-node>
729
- * <cdk-nested-tree-node>{{child2.name}}</cdk-tree-node>
730
- * </cdk-tree-node>
744
+ * <cdk-nested-tree-node>{{child1.name}}</cdk-nested-tree-node>
745
+ * <cdk-nested-tree-node>{{child2.name}}</cdk-nested-tree-node>
746
+ * </cdk-nested-tree-node>
731
747
  * ```
732
748
  * @template T
733
749
  */
@@ -754,7 +770,7 @@ class CdkNestedTreeNode extends CdkTreeNode {
754
770
  /** @type {?} */
755
771
  const childrenNodes = this._tree.treeControl.getChildren(this.data);
756
772
  if (Array.isArray(childrenNodes)) {
757
- this.updateChildrenNodes(/** @type {?} */ (childrenNodes));
773
+ this.updateChildrenNodes((/** @type {?} */ (childrenNodes)));
758
774
  }
759
775
  else if (childrenNodes instanceof Observable) {
760
776
  childrenNodes.pipe(takeUntil(this._destroyed))
@@ -772,6 +788,7 @@ class CdkNestedTreeNode extends CdkTreeNode {
772
788
  }
773
789
  /**
774
790
  * Add children dataNodes to the NodeOutlet
791
+ * @protected
775
792
  * @param {?=} children
776
793
  * @return {?}
777
794
  */
@@ -791,6 +808,7 @@ class CdkNestedTreeNode extends CdkTreeNode {
791
808
  }
792
809
  /**
793
810
  * Clear the children dataNodes.
811
+ * @protected
794
812
  * @return {?}
795
813
  */
796
814
  _clear() {
@@ -824,11 +842,12 @@ CdkNestedTreeNode.propDecorators = {
824
842
 
825
843
  /**
826
844
  * @fileoverview added by tsickle
827
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
845
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
828
846
  */
829
- /** *
847
+ /**
830
848
  * Regex used to split a string on its CSS units.
831
- @type {?} */
849
+ * @type {?}
850
+ */
832
851
  const cssUnitPattern = /([A-Za-z%]+)$/;
833
852
  /**
834
853
  * Indent for the children tree dataNodes.
@@ -952,7 +971,7 @@ CdkTreeNodePadding.propDecorators = {
952
971
 
953
972
  /**
954
973
  * @fileoverview added by tsickle
955
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
974
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
956
975
  */
957
976
  /**
958
977
  * Node toggle to expand/collapse the node.
@@ -1008,7 +1027,7 @@ CdkTreeNodeToggle.propDecorators = {
1008
1027
 
1009
1028
  /**
1010
1029
  * @fileoverview added by tsickle
1011
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
1030
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1012
1031
  */
1013
1032
  /** @type {?} */
1014
1033
  const EXPORTED_DECLARATIONS = [
@@ -1033,12 +1052,12 @@ CdkTreeModule.decorators = [
1033
1052
 
1034
1053
  /**
1035
1054
  * @fileoverview added by tsickle
1036
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
1055
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1037
1056
  */
1038
1057
 
1039
1058
  /**
1040
1059
  * @fileoverview added by tsickle
1041
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
1060
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1042
1061
  */
1043
1062
 
1044
1063
  export { BaseTreeControl, FlatTreeControl, NestedTreeControl, CdkNestedTreeNode, CdkTreeNodeOutletContext, CdkTreeNodeDef, CdkTreeNodePadding, CdkTreeNodeOutlet, CdkTree, CdkTreeNode, getTreeNoValidDataSourceError, getTreeMultipleDefaultNodeDefsError, getTreeMissingMatchingNodeDefError, getTreeControlMissingError, getTreeControlFunctionsMissingError, CdkTreeModule, CdkTreeNodeToggle };
@@ -1 +1 @@
1
- {"version":3,"file":"tree.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/outlet.ts","../../../src/cdk/tree/node.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 {\n Directive,\n Input,\n} from '@angular/core';\nimport {CdkTree, CdkTreeNode} from './tree';\n\n/**\n * Node toggle to expand/collapse the node.\n */\n@Directive({\n selector: '[cdkTreeNodeToggle]',\n host: {\n '(click)': '_toggle($event)',\n }\n})\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 _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 /** 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 (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding());\n }\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() {\n const padding = this._paddingIndent();\n const paddingProp = this._dir && this._dir.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n\n this._renderer.setStyle(this._element.nativeElement, paddingProp, padding);\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 IterableDiffers,\n IterableDiffer,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {CdkTree, CdkTreeNode} from './tree';\nimport {CdkTreeNodeOutlet} from './outlet';\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-mested-tree-node>\n * {{node.name}}\n * <ng-template cdkTreeNodeOutlet></ng-template>\n * </cdk-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-tree-node>\n * <cdk-nested-tree-node>{{child2.name}}</cdk-tree-node>\n * </cdk-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: [{provide: CdkTreeNode, useExisting: CdkNestedTreeNode}]\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) 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 if (children) {\n this._children = children;\n }\n if (this.nodeOutlet.length && this._children) {\n const viewContainer = this.nodeOutlet.first.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 if (this.nodeOutlet && this.nodeOutlet.first) {\n this.nodeOutlet.first.viewContainer.clear();\n this._dataDiffer.diff([]);\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} 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 changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CdkTree<T>\n 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) _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 // Cannot use `instanceof DataSource` since the data source could be a literal with\n // `connect` function and may not extends DataSource.\n if (typeof (this._dataSource as DataSource<T>).connect === 'function') {\n dataStream = (this._dataSource as DataSource<T>).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 /** The tree node's data. */\n get data(): T { return this._data; }\n set data(value: T) {\n this._data = value;\n this._setRoleFromData();\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._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 */\nimport {\n Directive,\n ViewContainerRef,\n} from '@angular/core';\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(public viewContainer: ViewContainerRef) {}\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 {Observable} from 'rxjs';\nimport {take} 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[])) {\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 childrenNodes.pipe(take(1)).subscribe(children => {\n children.forEach((child: T) => this._getDescendants(descendants, child));\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[]);\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":["observableOf"],"mappings":"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"}
1
+ {"version":3,"file":"tree.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/outlet.ts","../../../src/cdk/tree/node.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 {\n Directive,\n Input,\n} from '@angular/core';\nimport {CdkTree, CdkTreeNode} from './tree';\n\n/**\n * Node toggle to expand/collapse the node.\n */\n@Directive({\n selector: '[cdkTreeNodeToggle]',\n host: {\n '(click)': '_toggle($event)',\n }\n})\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 _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 /** 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 (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding());\n }\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() {\n const padding = this._paddingIndent();\n const paddingProp = this._dir && this._dir.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n\n this._renderer.setStyle(this._element.nativeElement, paddingProp, padding);\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 IterableDiffers,\n IterableDiffer,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {CdkTree, CdkTreeNode} from './tree';\nimport {CdkTreeNodeOutlet} from './outlet';\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: [{provide: CdkTreeNode, useExisting: CdkNestedTreeNode}]\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) 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 if (children) {\n this._children = children;\n }\n if (this.nodeOutlet.length && this._children) {\n const viewContainer = this.nodeOutlet.first.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 if (this.nodeOutlet && this.nodeOutlet.first) {\n this.nodeOutlet.first.viewContainer.clear();\n this._dataDiffer.diff([]);\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} 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 changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CdkTree<T>\n 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) _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 // Cannot use `instanceof DataSource` since the data source could be a literal with\n // `connect` function and may not extends DataSource.\n if (typeof (this._dataSource as DataSource<T>).connect === 'function') {\n dataStream = (this._dataSource as DataSource<T>).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 /** The tree node's data. */\n get data(): T { return this._data; }\n set data(value: T) {\n this._data = value;\n this._setRoleFromData();\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._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 */\nimport {\n Directive,\n ViewContainerRef,\n} from '@angular/core';\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(public viewContainer: ViewContainerRef) {}\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 {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 childrenNodes.pipe(take(1), filter(Boolean)).subscribe(children => {\n children.forEach((child: T) => this._getDescendants(descendants, child));\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":["observableOf"],"mappings":"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"}