@ng-nest/ui 14.0.7 → 14.0.8

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 (197) hide show
  1. package/avatar/avatar-group.component.d.ts +8 -0
  2. package/avatar/avatar.component.d.ts +15 -4
  3. package/avatar/avatar.module.d.ts +5 -4
  4. package/avatar/avatar.property.d.ts +31 -3
  5. package/avatar/examples/en_US/default/badge/README.md +6 -0
  6. package/avatar/examples/en_US/default/group/README.md +6 -0
  7. package/avatar/examples/en_US/default/label/README.md +6 -0
  8. package/avatar/examples/en_US/default/response/README.md +6 -0
  9. package/avatar/examples/zh_CN/default/badge/README.md +6 -0
  10. package/avatar/examples/zh_CN/default/group/README.md +6 -0
  11. package/avatar/examples/zh_CN/default/label/README.md +6 -0
  12. package/avatar/examples/zh_CN/default/response/README.md +6 -0
  13. package/avatar/public-api.d.ts +1 -0
  14. package/badge/badge.component.d.ts +4 -1
  15. package/badge/badge.property.d.ts +6 -1
  16. package/badge/examples/en_US/default/animation/README.md +4 -0
  17. package/badge/examples/en_US/default/standalone/README.md +6 -0
  18. package/badge/examples/zh_CN/default/animation/README.md +4 -0
  19. package/badge/examples/zh_CN/default/standalone/README.md +6 -0
  20. package/calendar/calendar.property.d.ts +2 -1
  21. package/core/animation/badge.d.ts +1 -0
  22. package/core/config/config.d.ts +26 -0
  23. package/core/interfaces/identify.type.d.ts +2 -0
  24. package/core/interfaces/layout.type.d.ts +15 -0
  25. package/esm2020/avatar/avatar-group.component.mjs +19 -0
  26. package/esm2020/avatar/avatar.component.mjs +91 -11
  27. package/esm2020/avatar/avatar.module.mjs +6 -5
  28. package/esm2020/avatar/avatar.property.mjs +31 -3
  29. package/esm2020/avatar/public-api.mjs +2 -1
  30. package/esm2020/badge/badge.component.mjs +24 -8
  31. package/esm2020/badge/badge.property.mjs +7 -2
  32. package/esm2020/calendar/calendar.property.mjs +1 -1
  33. package/esm2020/core/animation/badge.mjs +17 -1
  34. package/esm2020/core/config/config.mjs +1 -1
  35. package/esm2020/core/interfaces/identify.type.mjs +1 -1
  36. package/esm2020/core/interfaces/layout.type.mjs +1 -1
  37. package/esm2020/form/form.component.mjs +3 -3
  38. package/esm2020/i18n/i18n.property.mjs +1 -1
  39. package/esm2020/i18n/languages/en_US.mjs +5 -1
  40. package/esm2020/i18n/languages/zh_CN.mjs +5 -1
  41. package/esm2020/i18n/languages/zh_TW.mjs +5 -1
  42. package/esm2020/image/image-group.component.mjs +2 -2
  43. package/esm2020/image/image.component.mjs +13 -5
  44. package/esm2020/image/image.module.mjs +5 -4
  45. package/esm2020/image/image.property.mjs +22 -3
  46. package/esm2020/index.mjs +3 -1
  47. package/esm2020/keyword/keyword.directive.mjs +66 -0
  48. package/esm2020/keyword/keyword.module.mjs +19 -0
  49. package/esm2020/keyword/keyword.property.mjs +41 -0
  50. package/esm2020/keyword/ng-nest-ui-keyword.mjs +5 -0
  51. package/esm2020/keyword/public-api.mjs +4 -0
  52. package/esm2020/list/list-option.component.mjs +4 -4
  53. package/esm2020/list/list.component.mjs +4 -4
  54. package/esm2020/list/list.module.mjs +8 -4
  55. package/esm2020/list/list.property.mjs +19 -3
  56. package/esm2020/select/select-portal.component.mjs +6 -3
  57. package/esm2020/select/select.component.mjs +31 -23
  58. package/esm2020/select/select.property.mjs +8 -2
  59. package/esm2020/table/table.component.mjs +4 -4
  60. package/esm2020/tree/tree-node.component.mjs +52 -27
  61. package/esm2020/tree/tree.component.mjs +173 -58
  62. package/esm2020/tree/tree.module.mjs +5 -4
  63. package/esm2020/tree/tree.property.mjs +38 -2
  64. package/esm2020/tree-select/ng-nest-ui-tree-select.mjs +5 -0
  65. package/esm2020/tree-select/public-api.mjs +5 -0
  66. package/esm2020/tree-select/tree-select-portal.component.mjs +110 -0
  67. package/esm2020/tree-select/tree-select.component.mjs +632 -0
  68. package/esm2020/tree-select/tree-select.module.mjs +65 -0
  69. package/esm2020/tree-select/tree-select.property.mjs +153 -0
  70. package/esm2020/upload/upload.component.mjs +9 -6
  71. package/esm2020/upload/upload.module.mjs +12 -4
  72. package/esm2020/upload/upload.property.mjs +10 -3
  73. package/fesm2015/ng-nest-ui-avatar.mjs +143 -17
  74. package/fesm2015/ng-nest-ui-avatar.mjs.map +1 -1
  75. package/fesm2015/ng-nest-ui-badge.mjs +29 -8
  76. package/fesm2015/ng-nest-ui-badge.mjs.map +1 -1
  77. package/fesm2015/ng-nest-ui-calendar.mjs.map +1 -1
  78. package/fesm2015/ng-nest-ui-core.mjs +17 -1
  79. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  80. package/fesm2015/ng-nest-ui-form.mjs +2 -2
  81. package/fesm2015/ng-nest-ui-form.mjs.map +1 -1
  82. package/fesm2015/ng-nest-ui-i18n.mjs +12 -0
  83. package/fesm2015/ng-nest-ui-i18n.mjs.map +1 -1
  84. package/fesm2015/ng-nest-ui-image.mjs +39 -11
  85. package/fesm2015/ng-nest-ui-image.mjs.map +1 -1
  86. package/fesm2015/ng-nest-ui-keyword.mjs +125 -0
  87. package/fesm2015/ng-nest-ui-keyword.mjs.map +1 -0
  88. package/fesm2015/ng-nest-ui-list.mjs +32 -12
  89. package/fesm2015/ng-nest-ui-list.mjs.map +1 -1
  90. package/fesm2015/ng-nest-ui-select.mjs +42 -25
  91. package/fesm2015/ng-nest-ui-select.mjs.map +1 -1
  92. package/fesm2015/ng-nest-ui-table.mjs +3 -3
  93. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  94. package/fesm2015/ng-nest-ui-tree-select.mjs +951 -0
  95. package/fesm2015/ng-nest-ui-tree-select.mjs.map +1 -0
  96. package/fesm2015/ng-nest-ui-tree.mjs +271 -94
  97. package/fesm2015/ng-nest-ui-tree.mjs.map +1 -1
  98. package/fesm2015/ng-nest-ui-upload.mjs +28 -10
  99. package/fesm2015/ng-nest-ui-upload.mjs.map +1 -1
  100. package/fesm2015/ng-nest-ui.mjs +2 -0
  101. package/fesm2015/ng-nest-ui.mjs.map +1 -1
  102. package/fesm2020/ng-nest-ui-avatar.mjs +140 -17
  103. package/fesm2020/ng-nest-ui-avatar.mjs.map +1 -1
  104. package/fesm2020/ng-nest-ui-badge.mjs +29 -8
  105. package/fesm2020/ng-nest-ui-badge.mjs.map +1 -1
  106. package/fesm2020/ng-nest-ui-calendar.mjs.map +1 -1
  107. package/fesm2020/ng-nest-ui-core.mjs +17 -1
  108. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  109. package/fesm2020/ng-nest-ui-form.mjs +2 -2
  110. package/fesm2020/ng-nest-ui-form.mjs.map +1 -1
  111. package/fesm2020/ng-nest-ui-i18n.mjs +12 -0
  112. package/fesm2020/ng-nest-ui-i18n.mjs.map +1 -1
  113. package/fesm2020/ng-nest-ui-image.mjs +39 -11
  114. package/fesm2020/ng-nest-ui-image.mjs.map +1 -1
  115. package/fesm2020/ng-nest-ui-keyword.mjs +125 -0
  116. package/fesm2020/ng-nest-ui-keyword.mjs.map +1 -0
  117. package/fesm2020/ng-nest-ui-list.mjs +32 -12
  118. package/fesm2020/ng-nest-ui-list.mjs.map +1 -1
  119. package/fesm2020/ng-nest-ui-select.mjs +42 -25
  120. package/fesm2020/ng-nest-ui-select.mjs.map +1 -1
  121. package/fesm2020/ng-nest-ui-table.mjs +3 -3
  122. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  123. package/fesm2020/ng-nest-ui-tree-select.mjs +946 -0
  124. package/fesm2020/ng-nest-ui-tree-select.mjs.map +1 -0
  125. package/fesm2020/ng-nest-ui-tree.mjs +267 -91
  126. package/fesm2020/ng-nest-ui-tree.mjs.map +1 -1
  127. package/fesm2020/ng-nest-ui-upload.mjs +28 -10
  128. package/fesm2020/ng-nest-ui-upload.mjs.map +1 -1
  129. package/fesm2020/ng-nest-ui.mjs +2 -0
  130. package/fesm2020/ng-nest-ui.mjs.map +1 -1
  131. package/i18n/i18n.property.d.ts +5 -0
  132. package/i18n/languages/en_US.d.ts +4 -0
  133. package/i18n/languages/zh_CN.d.ts +4 -0
  134. package/i18n/languages/zh_TW.d.ts +4 -0
  135. package/image/image.component.d.ts +2 -2
  136. package/image/image.module.d.ts +3 -2
  137. package/image/image.property.d.ts +23 -7
  138. package/index.d.ts +2 -0
  139. package/keyword/index.d.ts +5 -0
  140. package/keyword/keyword.directive.d.ts +19 -0
  141. package/keyword/keyword.module.d.ts +9 -0
  142. package/keyword/keyword.property.d.ts +40 -0
  143. package/keyword/public-api.d.ts +3 -0
  144. package/list/list-option.component.d.ts +0 -1
  145. package/list/list.module.d.ts +2 -1
  146. package/list/list.property.d.ts +22 -2
  147. package/package.json +17 -1
  148. package/select/examples/en_US/default/default/README.md +1 -2
  149. package/select/examples/zh_CN/default/default/README.md +1 -2
  150. package/select/select-portal.component.d.ts +5 -1
  151. package/select/select.component.d.ts +2 -2
  152. package/select/select.property.d.ts +6 -1
  153. package/style/core/index.css +29 -0
  154. package/style/core/index.css.map +1 -1
  155. package/style/directives/index.scss +1 -0
  156. package/style/directives/keyword/index.scss +6 -0
  157. package/style/directives/keyword/mixin.scss +24 -0
  158. package/style/directives/keyword/param.scss +3 -0
  159. package/tree/tree-node.component.d.ts +4 -4
  160. package/tree/tree.component.d.ts +13 -1
  161. package/tree/tree.module.d.ts +2 -1
  162. package/tree/tree.property.d.ts +44 -14
  163. package/tree-select/examples/en_US/default/README.md +4 -0
  164. package/tree-select/examples/en_US/default/async/README.md +6 -0
  165. package/tree-select/examples/en_US/default/bordered/README.md +6 -0
  166. package/tree-select/examples/en_US/default/custom/README.md +6 -0
  167. package/tree-select/examples/en_US/default/default/README.md +6 -0
  168. package/tree-select/examples/en_US/default/disabled/README.md +6 -0
  169. package/tree-select/examples/en_US/default/label/README.md +6 -0
  170. package/tree-select/examples/en_US/default/multiple/README.md +6 -0
  171. package/tree-select/examples/en_US/default/path/README.md +6 -0
  172. package/tree-select/examples/en_US/default/required/README.md +6 -0
  173. package/tree-select/examples/en_US/default/scroll/README.md +6 -0
  174. package/tree-select/examples/en_US/default/search/README.md +7 -0
  175. package/tree-select/examples/en_US/default/size/README.md +6 -0
  176. package/tree-select/examples/zh_CN/default/README.md +4 -0
  177. package/tree-select/examples/zh_CN/default/async/README.md +6 -0
  178. package/tree-select/examples/zh_CN/default/bordered/README.md +6 -0
  179. package/tree-select/examples/zh_CN/default/custom/README.md +6 -0
  180. package/tree-select/examples/zh_CN/default/default/README.md +6 -0
  181. package/tree-select/examples/zh_CN/default/disabled/README.md +6 -0
  182. package/tree-select/examples/zh_CN/default/label/README.md +6 -0
  183. package/tree-select/examples/zh_CN/default/multiple/README.md +6 -0
  184. package/tree-select/examples/zh_CN/default/path/README.md +6 -0
  185. package/tree-select/examples/zh_CN/default/required/README.md +6 -0
  186. package/tree-select/examples/zh_CN/default/scroll/README.md +6 -0
  187. package/tree-select/examples/zh_CN/default/search/README.md +7 -0
  188. package/tree-select/examples/zh_CN/default/size/README.md +6 -0
  189. package/tree-select/index.d.ts +5 -0
  190. package/tree-select/public-api.d.ts +4 -0
  191. package/tree-select/tree-select-portal.component.d.ts +62 -0
  192. package/tree-select/tree-select.component.d.ts +101 -0
  193. package/tree-select/tree-select.module.d.ts +20 -0
  194. package/tree-select/tree-select.property.d.ts +202 -0
  195. package/upload/upload.component.d.ts +1 -1
  196. package/upload/upload.module.d.ts +3 -1
  197. package/upload/upload.property.d.ts +13 -3
@@ -1,23 +1,25 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, ViewChild, NgModule } from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, ViewChild, ViewChildren, NgModule } from '@angular/core';
3
3
  import { __decorate } from 'tslib';
4
4
  import * as i1 from '@ng-nest/ui/core';
5
- import { XProperty, XDataConvert, XInputBoolean, XInputNumber, XWithConfig, XIsEmpty, XIsChange, XIsObservable, XSetData, XIsFunction, XIsUndefined } from '@ng-nest/ui/core';
6
- import { Subject, map } from 'rxjs';
5
+ import { XProperty, XDataConvert, XInputBoolean, XInputNumber, XWithConfig, XIsEmpty, XIsChange, XResize, XIsObservable, XSetData, XIsFunction, XIsUndefined } from '@ng-nest/ui/core';
6
+ import { Subject, debounceTime, takeUntil, map } from 'rxjs';
7
7
  import * as i2 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
- import * as i4 from '@ng-nest/ui/icon';
10
- import { XIconModule } from '@ng-nest/ui/icon';
11
- import * as i4$1 from '@angular/cdk/scrolling';
12
- import { ScrollingModule } from '@angular/cdk/scrolling';
13
9
  import * as i3 from '@angular/forms';
14
10
  import { FormsModule } from '@angular/forms';
11
+ import * as i4 from '@ng-nest/ui/icon';
12
+ import { XIconModule } from '@ng-nest/ui/icon';
15
13
  import * as i5 from '@ng-nest/ui/checkbox';
16
14
  import { XCheckboxModule } from '@ng-nest/ui/checkbox';
17
15
  import * as i6 from '@ng-nest/ui/outlet';
18
16
  import { XOutletModule } from '@ng-nest/ui/outlet';
19
17
  import * as i7 from '@ng-nest/ui/link';
20
18
  import { XLinkModule } from '@ng-nest/ui/link';
19
+ import * as i8 from '@ng-nest/ui/keyword';
20
+ import { XKeywordModule } from '@ng-nest/ui/keyword';
21
+ import * as i4$1 from '@angular/cdk/scrolling';
22
+ import { ScrollingModule } from '@angular/cdk/scrolling';
21
23
 
22
24
  /**
23
25
  * Tree
@@ -97,10 +99,20 @@ class XTreeProperty extends XProperty {
97
99
  * @en_US Parameter control request change event
98
100
  */
99
101
  this.manualChange = new EventEmitter();
102
+ /**
103
+ * @zh_CN 节点点击事件
104
+ * @en_US Node click event
105
+ */
106
+ this.nodeClick = new EventEmitter();
107
+ /**
108
+ * @zh_CN 节点点击事件
109
+ * @en_US Node click event
110
+ */
111
+ this.activatedIdChange = new EventEmitter();
100
112
  }
101
113
  }
102
114
  /** @nocollapse */ XTreeProperty.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeProperty, deps: null, target: i0.ɵɵFactoryTarget.Component });
103
- /** @nocollapse */ XTreeProperty.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeProperty, selector: "ng-component", inputs: { data: "data", checkbox: "checkbox", lazy: "lazy", activatedId: "activatedId", expanded: "expanded", checked: "checked", expandedAll: "expandedAll", expandedLevel: "expandedLevel", nodeOpen: "nodeOpen", spacing: "spacing", labelTpl: "labelTpl", nodeHeight: "nodeHeight", allowManyActivated: "allowManyActivated", manual: "manual", levelCheck: "levelCheck", nodeNowrap: "nodeNowrap", nodeAlignItems: "nodeAlignItems", actions: "actions", virtualScroll: "virtualScroll", virtualScrollHeight: "virtualScrollHeight", itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx" }, outputs: { activatedChange: "activatedChange", checkboxChange: "checkboxChange", manualChange: "manualChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
115
+ /** @nocollapse */ XTreeProperty.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeProperty, selector: "ng-component", inputs: { data: "data", checkbox: "checkbox", lazy: "lazy", activatedId: "activatedId", expanded: "expanded", checked: "checked", expandedAll: "expandedAll", expandedLevel: "expandedLevel", nodeOpen: "nodeOpen", spacing: "spacing", labelTpl: "labelTpl", nodeHeight: "nodeHeight", allowManyActivated: "allowManyActivated", manual: "manual", levelCheck: "levelCheck", nodeNowrap: "nodeNowrap", nodeAlignItems: "nodeAlignItems", actions: "actions", scrollElement: "scrollElement", virtualScroll: "virtualScroll", virtualScrollHeight: "virtualScrollHeight", heightAdaption: "heightAdaption", itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", multiple: "multiple", objectArray: "objectArray", keywordText: "keywordText", caseSensitive: "caseSensitive" }, outputs: { activatedChange: "activatedChange", checkboxChange: "checkboxChange", manualChange: "manualChange", nodeClick: "nodeClick", activatedIdChange: "activatedIdChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
104
116
  __decorate([
105
117
  XDataConvert()
106
118
  ], XTreeProperty.prototype, "data", void 0);
@@ -154,6 +166,16 @@ __decorate([
154
166
  XWithConfig(X_CONFIG_NAME, 26),
155
167
  XInputNumber()
156
168
  ], XTreeProperty.prototype, "itemSize", void 0);
169
+ __decorate([
170
+ XInputBoolean()
171
+ ], XTreeProperty.prototype, "multiple", void 0);
172
+ __decorate([
173
+ XInputBoolean()
174
+ ], XTreeProperty.prototype, "objectArray", void 0);
175
+ __decorate([
176
+ XInputBoolean(),
177
+ XWithConfig(X_CONFIG_NAME, true)
178
+ ], XTreeProperty.prototype, "caseSensitive", void 0);
157
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeProperty, decorators: [{
158
180
  type: Component,
159
181
  args: [{ template: '' }]
@@ -197,18 +219,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
197
219
  type: Input
198
220
  }], actions: [{
199
221
  type: Input
222
+ }], scrollElement: [{
223
+ type: Input
200
224
  }], virtualScroll: [{
201
225
  type: Input
202
226
  }], virtualScrollHeight: [{
203
227
  type: Input
228
+ }], heightAdaption: [{
229
+ type: Input
204
230
  }], itemSize: [{
205
231
  type: Input
206
232
  }], minBufferPx: [{
207
233
  type: Input
208
234
  }], maxBufferPx: [{
209
235
  type: Input
236
+ }], multiple: [{
237
+ type: Input
238
+ }], objectArray: [{
239
+ type: Input
240
+ }], keywordText: [{
241
+ type: Input
242
+ }], caseSensitive: [{
243
+ type: Input
210
244
  }], manualChange: [{
211
245
  type: Output
246
+ }], nodeClick: [{
247
+ type: Output
248
+ }], activatedIdChange: [{
249
+ type: Output
212
250
  }] } });
213
251
  /**
214
252
  * TreeNode
@@ -275,9 +313,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
275
313
  }] } });
276
314
 
277
315
  class XTreeNodeComponent extends XTreeNodeProperty {
278
- constructor(
279
- // @Optional() public tree: XTreeComponent,
280
- renderer, elementRef, cdr, configService) {
316
+ constructor(renderer, elementRef, cdr, configService) {
281
317
  super();
282
318
  this.renderer = renderer;
283
319
  this.elementRef = elementRef;
@@ -297,6 +333,20 @@ class XTreeNodeComponent extends XTreeNodeProperty {
297
333
  var _a;
298
334
  return Number(((_a = this.node) === null || _a === void 0 ? void 0 : _a.level) ? this.node.level : 0) * Number(this.tree.spacing);
299
335
  }
336
+ get getActivated() {
337
+ var _a;
338
+ if (this.tree.multiple) {
339
+ if (this.tree.objectArray) {
340
+ return this.tree.activatedId.map((x) => x.id).includes(this.node.id);
341
+ }
342
+ else {
343
+ return this.tree.activatedId.includes(this.node.id);
344
+ }
345
+ }
346
+ else {
347
+ return ((_a = this.tree.activatedNode) === null || _a === void 0 ? void 0 : _a.id) === this.node.id;
348
+ }
349
+ }
300
350
  ngOnInit() {
301
351
  var _a;
302
352
  this.node.change = (check) => {
@@ -315,12 +365,33 @@ class XTreeNodeComponent extends XTreeNodeProperty {
315
365
  var _a;
316
366
  const change = (_a = this.tree.activatedNode) === null || _a === void 0 ? void 0 : _a.change;
317
367
  this.tree.nodeOpen && node.leaf && this.tree.onToggle(event, node);
368
+ if (this.tree.multiple) {
369
+ if (this.tree.objectArray) {
370
+ const ids = this.tree.activatedId.map((x) => x.id);
371
+ if (ids.includes(node.id)) {
372
+ this.tree.activatedId.splice(ids.indexOf(node.id), 1);
373
+ }
374
+ else {
375
+ this.tree.activatedId.push(node);
376
+ }
377
+ }
378
+ else {
379
+ if (this.tree.activatedId.includes(node.id)) {
380
+ this.tree.activatedId.splice(this.tree.activatedId.indexOf(node.id), 1);
381
+ }
382
+ else {
383
+ this.tree.activatedId.push(node.id);
384
+ }
385
+ }
386
+ this.tree.activatedIdChange.emit(this.tree.activatedId);
387
+ }
318
388
  if (this.tree.activatedNode) {
319
389
  if (this.tree.activatedNode.id === node.id && !this.tree.allowManyActivated)
320
390
  return;
321
391
  }
322
392
  this.tree.activatedNode = node;
323
393
  this.tree.activatedChange.emit(node);
394
+ this.tree.nodeClick.emit(node);
324
395
  change && change();
325
396
  event.stopPropagation();
326
397
  this.cdr.detectChanges();
@@ -330,29 +401,23 @@ class XTreeNodeComponent extends XTreeNodeProperty {
330
401
  this.tree.checkboxChange.emit(this.node);
331
402
  }
332
403
  setCheckbox() {
333
- var _a;
334
404
  if (!this.tree.levelCheck)
335
405
  return;
336
406
  this.node.indeterminate = this.node.checked;
337
407
  this.node.children && this.setChildrenCheckbox(this.node.checked);
338
- if (this.virtualScroll) {
339
- const setParent = (node) => {
340
- var _a, _b, _c;
341
- let parent = this.tree.nodes.find((x) => x.id === node.pid);
342
- if (!parent || XIsEmpty(parent.children))
343
- return;
344
- let checkedList = (_a = parent.children) === null || _a === void 0 ? void 0 : _a.filter((y) => y.checked);
345
- let indeterminateList = (_b = parent.children) === null || _b === void 0 ? void 0 : _b.filter((y) => y.indeterminate);
346
- parent.checked = (checkedList === null || checkedList === void 0 ? void 0 : checkedList.length) === ((_c = parent.children) === null || _c === void 0 ? void 0 : _c.length);
347
- parent.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
348
- parent.change && parent.change();
349
- setParent(parent);
350
- };
351
- setParent(this.node);
352
- }
353
- else {
354
- (_a = this.parent) === null || _a === void 0 ? void 0 : _a.setParentCheckbox();
355
- }
408
+ const setParent = (node) => {
409
+ var _a, _b, _c;
410
+ let parent = this.tree.nodes.find((x) => x.id === node.pid);
411
+ if (!parent || XIsEmpty(parent.children))
412
+ return;
413
+ let checkedList = (_a = parent.children) === null || _a === void 0 ? void 0 : _a.filter((y) => y.checked);
414
+ let indeterminateList = (_b = parent.children) === null || _b === void 0 ? void 0 : _b.filter((y) => y.indeterminate);
415
+ parent.checked = (checkedList === null || checkedList === void 0 ? void 0 : checkedList.length) === ((_c = parent.children) === null || _c === void 0 ? void 0 : _c.length);
416
+ parent.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
417
+ parent.change && parent.change();
418
+ setParent(parent);
419
+ };
420
+ setParent(this.node);
356
421
  }
357
422
  setChildrenCheckbox(checked) {
358
423
  const setChildren = (children, isChecked) => {
@@ -371,14 +436,13 @@ class XTreeNodeComponent extends XTreeNodeProperty {
371
436
  this.cdr.detectChanges();
372
437
  }
373
438
  setParentCheckbox() {
374
- var _a, _b, _c, _d;
439
+ var _a, _b, _c;
375
440
  if (XIsEmpty(this.node.children))
376
441
  return;
377
442
  let checkedList = (_a = this.node.children) === null || _a === void 0 ? void 0 : _a.filter((x) => x.checked);
378
443
  let indeterminateList = (_b = this.node.children) === null || _b === void 0 ? void 0 : _b.filter((x) => x.indeterminate);
379
444
  this.node.checked = (checkedList === null || checkedList === void 0 ? void 0 : checkedList.length) === ((_c = this.node.children) === null || _c === void 0 ? void 0 : _c.length);
380
445
  this.node.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
381
- (_d = this.parent) === null || _d === void 0 ? void 0 : _d.setParentCheckbox();
382
446
  this.cdr.detectChanges();
383
447
  }
384
448
  setIndeterminate(node) {
@@ -408,13 +472,11 @@ class XTreeNodeComponent extends XTreeNodeProperty {
408
472
  }
409
473
  }
410
474
  /** @nocollapse */ XTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeNodeComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
411
- /** @nocollapse */ XTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeNodeComponent, selector: "x-tree-node, [x-tree-node]", inputs: { parent: "parent", tree: "tree" }, host: { properties: { "class.x-tree-node": "this.rootClass" } }, usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"tree.activatedNode?.id === node.id\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!node.loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n (click)=\"!tree.nodeOpen && tree.onToggle($event, node)\"\r\n ></x-icon>\r\n <x-icon *ngIf=\"node.loading\" type=\"fto-loader\" [spin]=\"node.loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"getNodeDisabled(node.disabled)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n</div>\r\n<ul *ngIf=\"!virtualScroll && (node.childrenLoaded || (node.leaf && node.open))\" [hidden]=\"!node.open\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let child of node.children; trackBy: trackByItem\"\r\n [node]=\"child\"\r\n [parent]=\"this\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"lazyData\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"tree\"\r\n ></li>\r\n</ul>\r\n", styles: [".x-tree-node{margin:0;padding:0}.x-tree-node-content{display:flex;padding:.0625rem 0;cursor:pointer}.x-tree-node-content x-icon{padding:.25rem;color:var(--x-text-400);font-size:1rem;margin-right:.125rem;transition:var(--x-animation-duration-base)}.x-tree-node-content x-icon.is-leaf{visibility:hidden}.x-tree-node-content x-icon.is-open{transform:rotate(90deg)}.x-tree-node-content x-icon:hover{color:var(--x-text-300)}.x-tree-node-content x-checkbox{margin-right:.325rem;padding:.25rem 0}.x-tree-node-content:hover,.x-tree-node-content.x-activated{background-color:var(--x-background-a100)}.x-tree-node-content:hover .x-tree-node-label,.x-tree-node-content.x-activated .x-tree-node-label{color:var(--x-primary)}.x-tree-node-content:hover .x-tree-node-operations{display:flex;align-items:center}.x-tree-node-operations{display:none}.x-tree-node-operations .x-link{padding:0 .125rem}.x-tree-node-label{flex:1;-webkit-user-select:none;user-select:none}.x-tree-node-label.nowrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.XIconComponent, selector: "x-icon" }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "directive", type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i7.XLinkComponent, selector: "x-link" }, { kind: "component", type: XTreeNodeComponent, selector: "x-tree-node, [x-tree-node]", inputs: ["parent", "tree"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
475
+ /** @nocollapse */ XTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeNodeComponent, selector: "x-tree-node, [x-tree-node]", inputs: { tree: "tree" }, host: { properties: { "class.x-tree-node": "this.rootClass" } }, usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"getActivated\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!node.loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n class=\"x-tree-node-right\"\r\n (click)=\"!tree.nodeOpen && tree.onToggle($event, node)\"\r\n ></x-icon>\r\n <x-icon class=\"x-tree-node-loading\" *ngIf=\"node.loading\" type=\"fto-loader\" [spin]=\"node.loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"getNodeDisabled(node.disabled)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n x-keyword\r\n [text]=\"tree.keywordText\"\r\n [caseSensitive]=\"tree.caseSensitive\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n <x-icon class=\"x-tree-node-checked\" type=\"fto-check\" *ngIf=\"tree.multiple && getActivated\"></x-icon>\r\n</div>\r\n", styles: [".x-tree-node{display:block;margin:0;padding:0}.x-tree-node-content{display:flex;padding:.0625rem 0;cursor:pointer}.x-tree-node-content x-icon{padding:.25rem;font-size:1rem;transition:var(--x-animation-duration-base)}.x-tree-node-content x-icon.is-leaf{visibility:hidden}.x-tree-node-content x-icon.is-open{transform:rotate(90deg)}.x-tree-node-content x-icon:hover{color:var(--x-text-300)}.x-tree-node-content x-checkbox{margin-right:.325rem;padding:.25rem 0}.x-tree-node-content:hover{background-color:var(--x-background-a200)}.x-tree-node-content.x-activated{background-color:var(--x-background-a400);color:var(--x-primary)}.x-tree-node-content:hover .x-tree-node-operations{display:flex;align-items:center}.x-tree-node-right,.x-tree-node-loading{color:var(--x-text-400);margin-right:.125rem}.x-tree-node-checked{color:var(--x-primary)}.x-tree-node-operations{display:none}.x-tree-node-operations .x-link{padding:0 .125rem}.x-tree-node-label{flex:1;-webkit-user-select:none;user-select:none}.x-tree-node-label.nowrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.XIconComponent, selector: "x-icon" }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "directive", type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i7.XLinkComponent, selector: "x-link" }, { kind: "directive", type: i8.XKeywordDirective, selector: "[x-keyword]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
412
476
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeNodeComponent, decorators: [{
413
477
  type: Component,
414
- args: [{ selector: `${XTreeNodePrefix}, [${XTreeNodePrefix}]`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"tree.activatedNode?.id === node.id\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!node.loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n (click)=\"!tree.nodeOpen && tree.onToggle($event, node)\"\r\n ></x-icon>\r\n <x-icon *ngIf=\"node.loading\" type=\"fto-loader\" [spin]=\"node.loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"getNodeDisabled(node.disabled)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n</div>\r\n<ul *ngIf=\"!virtualScroll && (node.childrenLoaded || (node.leaf && node.open))\" [hidden]=\"!node.open\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let child of node.children; trackBy: trackByItem\"\r\n [node]=\"child\"\r\n [parent]=\"this\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"lazyData\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"tree\"\r\n ></li>\r\n</ul>\r\n", styles: [".x-tree-node{margin:0;padding:0}.x-tree-node-content{display:flex;padding:.0625rem 0;cursor:pointer}.x-tree-node-content x-icon{padding:.25rem;color:var(--x-text-400);font-size:1rem;margin-right:.125rem;transition:var(--x-animation-duration-base)}.x-tree-node-content x-icon.is-leaf{visibility:hidden}.x-tree-node-content x-icon.is-open{transform:rotate(90deg)}.x-tree-node-content x-icon:hover{color:var(--x-text-300)}.x-tree-node-content x-checkbox{margin-right:.325rem;padding:.25rem 0}.x-tree-node-content:hover,.x-tree-node-content.x-activated{background-color:var(--x-background-a100)}.x-tree-node-content:hover .x-tree-node-label,.x-tree-node-content.x-activated .x-tree-node-label{color:var(--x-primary)}.x-tree-node-content:hover .x-tree-node-operations{display:flex;align-items:center}.x-tree-node-operations{display:none}.x-tree-node-operations .x-link{padding:0 .125rem}.x-tree-node-label{flex:1;-webkit-user-select:none;user-select:none}.x-tree-node-label.nowrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}\n"] }]
415
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { parent: [{
416
- type: Input
417
- }], tree: [{
478
+ args: [{ selector: `${XTreeNodePrefix}, [${XTreeNodePrefix}]`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"getActivated\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!node.loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n class=\"x-tree-node-right\"\r\n (click)=\"!tree.nodeOpen && tree.onToggle($event, node)\"\r\n ></x-icon>\r\n <x-icon class=\"x-tree-node-loading\" *ngIf=\"node.loading\" type=\"fto-loader\" [spin]=\"node.loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"getNodeDisabled(node.disabled)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n x-keyword\r\n [text]=\"tree.keywordText\"\r\n [caseSensitive]=\"tree.caseSensitive\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n <x-icon class=\"x-tree-node-checked\" type=\"fto-check\" *ngIf=\"tree.multiple && getActivated\"></x-icon>\r\n</div>\r\n", styles: [".x-tree-node{display:block;margin:0;padding:0}.x-tree-node-content{display:flex;padding:.0625rem 0;cursor:pointer}.x-tree-node-content x-icon{padding:.25rem;font-size:1rem;transition:var(--x-animation-duration-base)}.x-tree-node-content x-icon.is-leaf{visibility:hidden}.x-tree-node-content x-icon.is-open{transform:rotate(90deg)}.x-tree-node-content x-icon:hover{color:var(--x-text-300)}.x-tree-node-content x-checkbox{margin-right:.325rem;padding:.25rem 0}.x-tree-node-content:hover{background-color:var(--x-background-a200)}.x-tree-node-content.x-activated{background-color:var(--x-background-a400);color:var(--x-primary)}.x-tree-node-content:hover .x-tree-node-operations{display:flex;align-items:center}.x-tree-node-right,.x-tree-node-loading{color:var(--x-text-400);margin-right:.125rem}.x-tree-node-checked{color:var(--x-primary)}.x-tree-node-operations{display:none}.x-tree-node-operations .x-link{padding:0 .125rem}.x-tree-node-label{flex:1;-webkit-user-select:none;user-select:none}.x-tree-node-label.nowrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}\n"] }]
479
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { tree: [{
418
480
  type: Input
419
481
  }], rootClass: [{
420
482
  type: HostBinding,
@@ -435,6 +497,9 @@ class XTreeComponent extends XTreeProperty {
435
497
  this.treeData = [];
436
498
  this._unSubject = new Subject();
437
499
  }
500
+ set _nodeComponents(value) {
501
+ this.nodeComponents = value;
502
+ }
438
503
  ngOnChanges(changes) {
439
504
  const { expandedAll, data, activatedId, checked, manual } = changes;
440
505
  XIsChange(data) && this.setData();
@@ -443,9 +508,23 @@ class XTreeComponent extends XTreeProperty {
443
508
  XIsChange(checked) && this.setCheckedKeys(this.checked);
444
509
  XIsChange(manual) && this.setManual();
445
510
  }
511
+ ngAfterViewInit() {
512
+ if (this.virtualScroll && this.heightAdaption) {
513
+ this.setVirtualScrollHeight();
514
+ XResize(this.heightAdaption)
515
+ .pipe(debounceTime(30), takeUntil(this._unSubject))
516
+ .subscribe((x) => {
517
+ this._resizeObserver = x.resizeObserver;
518
+ this.setVirtualScrollHeight();
519
+ });
520
+ }
521
+ this.setScorllTop();
522
+ }
446
523
  ngOnDestroy() {
524
+ var _a;
447
525
  this._unSubject.next();
448
526
  this._unSubject.unsubscribe();
527
+ (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
449
528
  }
450
529
  setData() {
451
530
  if (typeof this.data === 'undefined')
@@ -464,6 +543,14 @@ class XTreeComponent extends XTreeProperty {
464
543
  this.setDataChange(this.data);
465
544
  }
466
545
  }
546
+ setVirtualScrollHeight() {
547
+ this.virtualScrollHeight = this.heightAdaption.clientHeight;
548
+ this.minBufferPx = this.virtualScrollHeight;
549
+ this.maxBufferPx = this.virtualScrollHeight * 1.2;
550
+ this.virtualBody['_scrollStrategy']['_minBufferPx'] = this.minBufferPx;
551
+ this.virtualBody['_scrollStrategy']['_maxBufferPx'] = this.maxBufferPx;
552
+ this.cdr.detectChanges();
553
+ }
467
554
  setManual() {
468
555
  if (this.dataIsFunc)
469
556
  this.getDataByFunc();
@@ -480,11 +567,18 @@ class XTreeComponent extends XTreeProperty {
480
567
  const getChildren = (node, level) => {
481
568
  var _a, _b;
482
569
  node.level = level;
483
- node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0;
570
+ node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0 || node.open;
484
571
  node.checked = this.checked.indexOf(node.id) >= 0;
485
572
  node.childrenLoaded = node.open;
486
- if (XIsUndefined(node.children))
573
+ if (XIsUndefined(node.children)) {
487
574
  node.children = value.filter((y) => y.pid === node.id);
575
+ if (this.levelCheck && node.children && node.checked) {
576
+ for (let nd of node.children) {
577
+ nd.checked = true;
578
+ this.checked.push(nd.id);
579
+ }
580
+ }
581
+ }
488
582
  if (XIsUndefined(node.leaf))
489
583
  node.leaf = ((_a = node.children) === null || _a === void 0 ? void 0 : _a.length) > 0;
490
584
  if (node.leaf)
@@ -493,8 +587,33 @@ class XTreeComponent extends XTreeProperty {
493
587
  };
494
588
  this.treeData = value;
495
589
  this.nodes = value.filter((x) => XIsEmpty(x.pid)).map((x) => getChildren(x, 0));
590
+ for (let item of value) {
591
+ if (item.open) {
592
+ this.setParentOpen(value, item);
593
+ }
594
+ }
595
+ this.setExpanded();
496
596
  this.cdr.detectChanges();
497
597
  }
598
+ setScorllTop() {
599
+ if (!this.scrollElement || !this.activatedNode)
600
+ return;
601
+ let inx = this.nodes.indexOf(this.activatedNode);
602
+ let com = this.nodeComponents.get(inx);
603
+ if (!com)
604
+ return;
605
+ let ele = com.elementRef.nativeElement;
606
+ let scrollEle = this.scrollElement;
607
+ let min = scrollEle.scrollTop;
608
+ let max = scrollEle.scrollTop + scrollEle.clientHeight;
609
+ if (ele.offsetTop + ele.clientHeight > max) {
610
+ let scrollTop = ele.offsetTop + ele.clientHeight - scrollEle.clientHeight;
611
+ scrollEle.scrollTop = scrollTop;
612
+ }
613
+ if (ele.offsetTop < min) {
614
+ scrollEle.scrollTop = ele.offsetTop;
615
+ }
616
+ }
498
617
  getCheckedNodes() {
499
618
  let result = [];
500
619
  const getChildren = (nodes) => {
@@ -518,7 +637,7 @@ class XTreeComponent extends XTreeProperty {
518
637
  if (XIsEmpty(nodes))
519
638
  return;
520
639
  nodes.forEach((x) => {
521
- x.checked = !clear && keys.indexOf(x.id) >= 0;
640
+ x.checked = !clear && keys.includes(x.id);
522
641
  x.change && x.change(true);
523
642
  setChildren(x.children, clear);
524
643
  });
@@ -527,6 +646,8 @@ class XTreeComponent extends XTreeProperty {
527
646
  this.cdr.detectChanges();
528
647
  }
529
648
  setExpandedAll() {
649
+ if (this.expandedAll && this.treeData.length === this.nodes.length)
650
+ return;
530
651
  const setChildren = (nodes) => {
531
652
  if (XIsEmpty(nodes))
532
653
  return;
@@ -537,7 +658,10 @@ class XTreeComponent extends XTreeProperty {
537
658
  });
538
659
  };
539
660
  setChildren(this.nodes);
540
- if (this.virtualScroll) {
661
+ if (this.expandedAll === false) {
662
+ this.nodes = this.treeData.filter((x) => XIsEmpty(x.pid));
663
+ }
664
+ else {
541
665
  if (this.virtualNodes.length === 0) {
542
666
  this.virtualNodes = [...this.nodes];
543
667
  }
@@ -547,6 +671,15 @@ class XTreeComponent extends XTreeProperty {
547
671
  }
548
672
  }
549
673
  }
674
+ setExpanded() {
675
+ for (let item of this.nodes) {
676
+ if (item.open) {
677
+ let index = this.nodes.indexOf(item);
678
+ this.nodes.splice(index + 1, 0, ...item.children);
679
+ }
680
+ }
681
+ this.nodes = [...this.nodes];
682
+ }
550
683
  setVirtualExpandedAll(item, expandedAll) {
551
684
  let index = this.nodes.indexOf(item);
552
685
  if (expandedAll) {
@@ -589,11 +722,32 @@ class XTreeComponent extends XTreeProperty {
589
722
  this.nodes = [...this.nodes];
590
723
  }
591
724
  setActivatedNode(nodes) {
725
+ if (XIsEmpty(this.activatedId) && this.multiple) {
726
+ this.activatedId = [];
727
+ }
592
728
  let before = this.activatedNode;
593
- this.activatedNode = nodes.find((x) => x.id == this.activatedId);
594
- if (this.activatedNode) {
595
- this.setParentOpen(nodes, this.activatedNode);
596
- this.activatedChange.emit(this.activatedNode);
729
+ if (this.multiple) {
730
+ if (this.activatedId.length > 0) {
731
+ let ids = this.objectArray ? this.activatedId.map((x) => x.id) : this.activatedId;
732
+ for (let i = 0; i < ids.length; i++) {
733
+ let node = nodes.find((x) => x.id === ids[i]);
734
+ if (node) {
735
+ this.setParentOpen(nodes, node);
736
+ if (i === ids.length - 1) {
737
+ this.activatedNode = node;
738
+ this.activatedChange.emit(this.activatedNode);
739
+ }
740
+ }
741
+ }
742
+ }
743
+ }
744
+ else {
745
+ let activatedId = this.activatedId;
746
+ this.activatedNode = nodes.find((x) => x.id == activatedId);
747
+ if (this.activatedNode) {
748
+ this.setParentOpen(nodes, this.activatedNode);
749
+ this.activatedChange.emit(this.activatedNode);
750
+ }
597
751
  }
598
752
  if (before) {
599
753
  before.change && before.change();
@@ -605,31 +759,39 @@ class XTreeComponent extends XTreeProperty {
605
759
  return;
606
760
  const parent = nodes.find((x) => x.id === child.pid);
607
761
  if (!XIsEmpty(parent)) {
608
- this.expanded = [...this.expanded, parent.id];
609
- parent.open = true;
610
- parent.change && parent.change();
611
- getParent(parent);
762
+ if (!this.expanded.includes(parent.id)) {
763
+ this.expanded = [...this.expanded, parent.id];
764
+ parent.open = true;
765
+ parent.change && parent.change();
766
+ getParent(parent);
767
+ }
768
+ }
769
+ };
770
+ getParent(node);
771
+ }
772
+ setParentCheck(nodes, node) {
773
+ const getParent = (child) => {
774
+ if (XIsEmpty(child.pid))
775
+ return;
776
+ const parent = nodes.find((x) => x.id === child.pid);
777
+ if (!XIsEmpty(parent)) {
778
+ if (!this.expanded.includes(parent.id)) {
779
+ this.expanded = [...this.expanded, parent.id];
780
+ parent.open = true;
781
+ parent.change && parent.change();
782
+ getParent(parent);
783
+ }
612
784
  }
613
785
  };
614
786
  getParent(node);
615
787
  }
616
788
  onToggle(event, node) {
617
789
  node.open = !node.open;
618
- if (this.virtualScroll) {
619
- if (this.lazy && !node.childrenLoaded) {
620
- this.getLazyData(node, () => this.virtualToggle(node));
621
- }
622
- else {
623
- this.virtualToggle(node);
624
- }
790
+ if (this.lazy && !node.childrenLoaded) {
791
+ this.getLazyData(node, () => this.virtualToggle(node));
625
792
  }
626
- else if (node.open && !node.childrenLoaded) {
627
- if (this.lazy) {
628
- this.getLazyData(node);
629
- }
630
- else {
631
- node.childrenLoaded = true;
632
- }
793
+ else {
794
+ this.virtualToggle(node);
633
795
  }
634
796
  event.preventDefault();
635
797
  event.stopPropagation();
@@ -661,7 +823,7 @@ class XTreeComponent extends XTreeProperty {
661
823
  if (!parent.children)
662
824
  parent.children = [];
663
825
  this.expanded = [...this.expanded, parent.id];
664
- this.activatedId = node.id;
826
+ this.setActivatedId(node);
665
827
  node.level = Number(parent.level) + 1;
666
828
  node.pid = parent.id;
667
829
  this.treeData.push(node);
@@ -669,14 +831,12 @@ class XTreeComponent extends XTreeProperty {
669
831
  parent.open = true;
670
832
  parent.leaf = true;
671
833
  parent.children = [...parent.children, node];
672
- if (this.virtualScroll) {
673
- this.virtualToggle(parent);
674
- this.cdr.detectChanges();
675
- }
834
+ this.virtualToggle(parent);
835
+ this.cdr.detectChanges();
676
836
  parent.change && parent.change();
677
837
  }
678
838
  else if (XIsEmpty(node.pid)) {
679
- this.activatedId = node.id;
839
+ this.setActivatedId(node);
680
840
  node.level = 0;
681
841
  this.treeData = [...this.treeData, node];
682
842
  this.nodes = [...this.nodes, node];
@@ -693,6 +853,20 @@ class XTreeComponent extends XTreeProperty {
693
853
  _addNode();
694
854
  }
695
855
  }
856
+ setActivatedId(node) {
857
+ if (this.multiple) {
858
+ if (this.objectArray) {
859
+ this.activatedId = [node];
860
+ }
861
+ else {
862
+ this.activatedId = [node.id];
863
+ }
864
+ }
865
+ else {
866
+ this.activatedId = node.id;
867
+ }
868
+ this.activatedIdChange.emit(this.activatedId);
869
+ }
696
870
  removeNode(node) {
697
871
  let parent = this.treeData.find((x) => x.id === node.pid);
698
872
  if (parent) {
@@ -700,32 +874,29 @@ class XTreeComponent extends XTreeProperty {
700
874
  parent.children = [];
701
875
  parent.children.splice(parent.children.indexOf(node), 1);
702
876
  parent.leaf = parent.children.length > 0;
703
- if (!parent.leaf)
704
- this.activatedId = parent.id;
705
- if (this.virtualScroll) {
706
- let index = this.nodes.indexOf(node);
707
- let aindex = index - 1;
708
- if (index === 0 && this.nodes.length > 1) {
709
- aindex = 1;
710
- }
711
- let activatedNode = this.nodes[aindex];
712
- this.activatedId = activatedNode.id;
713
- this.setActivatedNode(this.nodes);
714
- this.nodes.splice(index, 1);
715
- this.nodes = [...this.nodes];
716
- if (activatedNode) {
717
- activatedNode.change && activatedNode.change();
718
- }
719
- this.cdr.detectChanges();
877
+ if (!parent.leaf) {
878
+ this.setActivatedId(parent);
879
+ }
880
+ let index = this.nodes.indexOf(node);
881
+ let aindex = index - 1;
882
+ if (index === 0 && this.nodes.length > 1) {
883
+ aindex = 1;
884
+ }
885
+ let activatedNode = this.nodes[aindex];
886
+ this.setActivatedId(activatedNode);
887
+ this.setActivatedNode(this.nodes);
888
+ this.nodes.splice(index, 1);
889
+ this.nodes = [...this.nodes];
890
+ if (activatedNode) {
891
+ activatedNode.change && activatedNode.change();
720
892
  }
893
+ this.cdr.detectChanges();
721
894
  parent.change && parent.change();
722
895
  }
723
896
  else if (XIsEmpty(node.pid)) {
724
897
  this.treeData.splice(this.treeData.indexOf(node), 1);
725
898
  this.nodes.splice(this.nodes.indexOf(node), 1);
726
- if (this.virtualScroll) {
727
- this.nodes = [...this.nodes];
728
- }
899
+ this.nodes = [...this.nodes];
729
900
  this.cdr.detectChanges();
730
901
  }
731
902
  }
@@ -738,26 +909,32 @@ class XTreeComponent extends XTreeProperty {
738
909
  }
739
910
  }
740
911
  /** @nocollapse */ XTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
741
- /** @nocollapse */ XTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeComponent, selector: "x-tree", viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #tree class=\"x-tree\">\r\n <ul *ngIf=\"!virtualScroll; else virtualScrollTpl\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></li>\r\n </ul>\r\n</div>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"itemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"virtualScrollHeight\"\r\n >\r\n <x-tree-node\r\n *cdkVirtualFor=\"let node of nodes; templateCacheSize: 0; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n [virtualScroll]=\"virtualScroll\"\r\n ></x-tree-node>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n", styles: [".x-tree{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.XIconComponent, selector: "x-icon" }, { kind: "directive", type: i4$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i4$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i4$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: XTreeNodeComponent, selector: "x-tree-node, [x-tree-node]", inputs: ["parent", "tree"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
912
+ /** @nocollapse */ XTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: XTreeComponent, selector: "x-tree", viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, static: true }, { propertyName: "virtualBody", first: true, predicate: ["virtualBody"], descendants: true }, { propertyName: "_nodeComponents", predicate: XTreeNodeComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #tree class=\"x-tree\">\r\n <ng-container *ngIf=\"!virtualScroll; else virtualScrollTpl\">\r\n <x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></x-tree-node>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n [itemSize]=\"itemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"virtualScrollHeight\"\r\n >\r\n <x-tree-node\r\n *cdkVirtualFor=\"let node of nodes; templateCacheSize: 0; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></x-tree-node>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n", styles: [".x-tree{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.XIconComponent, selector: "x-icon" }, { kind: "directive", type: i4$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i4$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i4$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: XTreeNodeComponent, selector: "x-tree-node, [x-tree-node]", inputs: ["tree"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
742
913
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeComponent, decorators: [{
743
914
  type: Component,
744
- args: [{ selector: `${XTreePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #tree class=\"x-tree\">\r\n <ul *ngIf=\"!virtualScroll; else virtualScrollTpl\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></li>\r\n </ul>\r\n</div>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"itemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"virtualScrollHeight\"\r\n >\r\n <x-tree-node\r\n *cdkVirtualFor=\"let node of nodes; templateCacheSize: 0; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n [virtualScroll]=\"virtualScroll\"\r\n ></x-tree-node>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n", styles: [".x-tree{margin:0;padding:0}\n"] }]
915
+ args: [{ selector: `${XTreePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #tree class=\"x-tree\">\r\n <ng-container *ngIf=\"!virtualScroll; else virtualScrollTpl\">\r\n <x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></x-tree-node>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n [itemSize]=\"itemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"virtualScrollHeight\"\r\n >\r\n <x-tree-node\r\n *cdkVirtualFor=\"let node of nodes; templateCacheSize: 0; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></x-tree-node>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n", styles: [".x-tree{margin:0;padding:0}\n"] }]
745
916
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { tree: [{
746
917
  type: ViewChild,
747
918
  args: ['tree', { static: true }]
919
+ }], virtualBody: [{
920
+ type: ViewChild,
921
+ args: ['virtualBody']
922
+ }], _nodeComponents: [{
923
+ type: ViewChildren,
924
+ args: [XTreeNodeComponent]
748
925
  }] } });
749
926
 
750
927
  class XTreeModule {
751
928
  }
752
929
  /** @nocollapse */ XTreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
753
- /** @nocollapse */ XTreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty], imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule], exports: [XTreeComponent, XTreeNodeComponent] });
754
- /** @nocollapse */ XTreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule] });
930
+ /** @nocollapse */ XTreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty], imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule, XKeywordModule], exports: [XTreeComponent, XTreeNodeComponent] });
931
+ /** @nocollapse */ XTreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule, XKeywordModule] });
755
932
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, decorators: [{
756
933
  type: NgModule,
757
934
  args: [{
758
935
  declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty],
759
936
  exports: [XTreeComponent, XTreeNodeComponent],
760
- imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule]
937
+ imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule, XKeywordModule]
761
938
  }]
762
939
  }] });
763
940