@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;
@@ -296,6 +332,19 @@ class XTreeNodeComponent extends XTreeNodeProperty {
296
332
  get paddingLeft() {
297
333
  return Number(this.node?.level ? this.node.level : 0) * Number(this.tree.spacing);
298
334
  }
335
+ get getActivated() {
336
+ if (this.tree.multiple) {
337
+ if (this.tree.objectArray) {
338
+ return this.tree.activatedId.map((x) => x.id).includes(this.node.id);
339
+ }
340
+ else {
341
+ return this.tree.activatedId.includes(this.node.id);
342
+ }
343
+ }
344
+ else {
345
+ return this.tree.activatedNode?.id === this.node.id;
346
+ }
347
+ }
299
348
  ngOnInit() {
300
349
  this.node.change = (check) => {
301
350
  if (check)
@@ -312,12 +361,33 @@ class XTreeNodeComponent extends XTreeNodeProperty {
312
361
  onActivate(event, node) {
313
362
  const change = this.tree.activatedNode?.change;
314
363
  this.tree.nodeOpen && node.leaf && this.tree.onToggle(event, node);
364
+ if (this.tree.multiple) {
365
+ if (this.tree.objectArray) {
366
+ const ids = this.tree.activatedId.map((x) => x.id);
367
+ if (ids.includes(node.id)) {
368
+ this.tree.activatedId.splice(ids.indexOf(node.id), 1);
369
+ }
370
+ else {
371
+ this.tree.activatedId.push(node);
372
+ }
373
+ }
374
+ else {
375
+ if (this.tree.activatedId.includes(node.id)) {
376
+ this.tree.activatedId.splice(this.tree.activatedId.indexOf(node.id), 1);
377
+ }
378
+ else {
379
+ this.tree.activatedId.push(node.id);
380
+ }
381
+ }
382
+ this.tree.activatedIdChange.emit(this.tree.activatedId);
383
+ }
315
384
  if (this.tree.activatedNode) {
316
385
  if (this.tree.activatedNode.id === node.id && !this.tree.allowManyActivated)
317
386
  return;
318
387
  }
319
388
  this.tree.activatedNode = node;
320
389
  this.tree.activatedChange.emit(node);
390
+ this.tree.nodeClick.emit(node);
321
391
  change && change();
322
392
  event.stopPropagation();
323
393
  this.cdr.detectChanges();
@@ -331,23 +401,18 @@ class XTreeNodeComponent extends XTreeNodeProperty {
331
401
  return;
332
402
  this.node.indeterminate = this.node.checked;
333
403
  this.node.children && this.setChildrenCheckbox(this.node.checked);
334
- if (this.virtualScroll) {
335
- const setParent = (node) => {
336
- let parent = this.tree.nodes.find((x) => x.id === node.pid);
337
- if (!parent || XIsEmpty(parent.children))
338
- return;
339
- let checkedList = parent.children?.filter((y) => y.checked);
340
- let indeterminateList = parent.children?.filter((y) => y.indeterminate);
341
- parent.checked = checkedList?.length === parent.children?.length;
342
- parent.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
343
- parent.change && parent.change();
344
- setParent(parent);
345
- };
346
- setParent(this.node);
347
- }
348
- else {
349
- this.parent?.setParentCheckbox();
350
- }
404
+ const setParent = (node) => {
405
+ let parent = this.tree.nodes.find((x) => x.id === node.pid);
406
+ if (!parent || XIsEmpty(parent.children))
407
+ return;
408
+ let checkedList = parent.children?.filter((y) => y.checked);
409
+ let indeterminateList = parent.children?.filter((y) => y.indeterminate);
410
+ parent.checked = checkedList?.length === parent.children?.length;
411
+ parent.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
412
+ parent.change && parent.change();
413
+ setParent(parent);
414
+ };
415
+ setParent(this.node);
351
416
  }
352
417
  setChildrenCheckbox(checked) {
353
418
  const setChildren = (children, isChecked) => {
@@ -372,7 +437,6 @@ class XTreeNodeComponent extends XTreeNodeProperty {
372
437
  let indeterminateList = this.node.children?.filter((x) => x.indeterminate);
373
438
  this.node.checked = checkedList?.length === this.node.children?.length;
374
439
  this.node.indeterminate = checkedList.length > 0 || indeterminateList.length > 0;
375
- this.parent?.setParentCheckbox();
376
440
  this.cdr.detectChanges();
377
441
  }
378
442
  setIndeterminate(node) {
@@ -402,13 +466,11 @@ class XTreeNodeComponent extends XTreeNodeProperty {
402
466
  }
403
467
  }
404
468
  /** @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 });
405
- /** @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 });
469
+ /** @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 });
406
470
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeNodeComponent, decorators: [{
407
471
  type: Component,
408
- 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"] }]
409
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { parent: [{
410
- type: Input
411
- }], tree: [{
472
+ 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"] }]
473
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { tree: [{
412
474
  type: Input
413
475
  }], rootClass: [{
414
476
  type: HostBinding,
@@ -429,6 +491,9 @@ class XTreeComponent extends XTreeProperty {
429
491
  this.treeData = [];
430
492
  this._unSubject = new Subject();
431
493
  }
494
+ set _nodeComponents(value) {
495
+ this.nodeComponents = value;
496
+ }
432
497
  ngOnChanges(changes) {
433
498
  const { expandedAll, data, activatedId, checked, manual } = changes;
434
499
  XIsChange(data) && this.setData();
@@ -437,9 +502,22 @@ class XTreeComponent extends XTreeProperty {
437
502
  XIsChange(checked) && this.setCheckedKeys(this.checked);
438
503
  XIsChange(manual) && this.setManual();
439
504
  }
505
+ ngAfterViewInit() {
506
+ if (this.virtualScroll && this.heightAdaption) {
507
+ this.setVirtualScrollHeight();
508
+ XResize(this.heightAdaption)
509
+ .pipe(debounceTime(30), takeUntil(this._unSubject))
510
+ .subscribe((x) => {
511
+ this._resizeObserver = x.resizeObserver;
512
+ this.setVirtualScrollHeight();
513
+ });
514
+ }
515
+ this.setScorllTop();
516
+ }
440
517
  ngOnDestroy() {
441
518
  this._unSubject.next();
442
519
  this._unSubject.unsubscribe();
520
+ this._resizeObserver?.disconnect();
443
521
  }
444
522
  setData() {
445
523
  if (typeof this.data === 'undefined')
@@ -458,6 +536,14 @@ class XTreeComponent extends XTreeProperty {
458
536
  this.setDataChange(this.data);
459
537
  }
460
538
  }
539
+ setVirtualScrollHeight() {
540
+ this.virtualScrollHeight = this.heightAdaption.clientHeight;
541
+ this.minBufferPx = this.virtualScrollHeight;
542
+ this.maxBufferPx = this.virtualScrollHeight * 1.2;
543
+ this.virtualBody['_scrollStrategy']['_minBufferPx'] = this.minBufferPx;
544
+ this.virtualBody['_scrollStrategy']['_maxBufferPx'] = this.maxBufferPx;
545
+ this.cdr.detectChanges();
546
+ }
461
547
  setManual() {
462
548
  if (this.dataIsFunc)
463
549
  this.getDataByFunc();
@@ -473,11 +559,18 @@ class XTreeComponent extends XTreeProperty {
473
559
  !XIsEmpty(this.activatedId) && this.setActivatedNode(value);
474
560
  const getChildren = (node, level) => {
475
561
  node.level = level;
476
- node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0;
562
+ node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0 || node.open;
477
563
  node.checked = this.checked.indexOf(node.id) >= 0;
478
564
  node.childrenLoaded = node.open;
479
- if (XIsUndefined(node.children))
565
+ if (XIsUndefined(node.children)) {
480
566
  node.children = value.filter((y) => y.pid === node.id);
567
+ if (this.levelCheck && node.children && node.checked) {
568
+ for (let nd of node.children) {
569
+ nd.checked = true;
570
+ this.checked.push(nd.id);
571
+ }
572
+ }
573
+ }
481
574
  if (XIsUndefined(node.leaf))
482
575
  node.leaf = node.children?.length > 0;
483
576
  if (node.leaf)
@@ -486,8 +579,33 @@ class XTreeComponent extends XTreeProperty {
486
579
  };
487
580
  this.treeData = value;
488
581
  this.nodes = value.filter((x) => XIsEmpty(x.pid)).map((x) => getChildren(x, 0));
582
+ for (let item of value) {
583
+ if (item.open) {
584
+ this.setParentOpen(value, item);
585
+ }
586
+ }
587
+ this.setExpanded();
489
588
  this.cdr.detectChanges();
490
589
  }
590
+ setScorllTop() {
591
+ if (!this.scrollElement || !this.activatedNode)
592
+ return;
593
+ let inx = this.nodes.indexOf(this.activatedNode);
594
+ let com = this.nodeComponents.get(inx);
595
+ if (!com)
596
+ return;
597
+ let ele = com.elementRef.nativeElement;
598
+ let scrollEle = this.scrollElement;
599
+ let min = scrollEle.scrollTop;
600
+ let max = scrollEle.scrollTop + scrollEle.clientHeight;
601
+ if (ele.offsetTop + ele.clientHeight > max) {
602
+ let scrollTop = ele.offsetTop + ele.clientHeight - scrollEle.clientHeight;
603
+ scrollEle.scrollTop = scrollTop;
604
+ }
605
+ if (ele.offsetTop < min) {
606
+ scrollEle.scrollTop = ele.offsetTop;
607
+ }
608
+ }
491
609
  getCheckedNodes() {
492
610
  let result = [];
493
611
  const getChildren = (nodes) => {
@@ -511,7 +629,7 @@ class XTreeComponent extends XTreeProperty {
511
629
  if (XIsEmpty(nodes))
512
630
  return;
513
631
  nodes.forEach((x) => {
514
- x.checked = !clear && keys.indexOf(x.id) >= 0;
632
+ x.checked = !clear && keys.includes(x.id);
515
633
  x.change && x.change(true);
516
634
  setChildren(x.children, clear);
517
635
  });
@@ -520,6 +638,8 @@ class XTreeComponent extends XTreeProperty {
520
638
  this.cdr.detectChanges();
521
639
  }
522
640
  setExpandedAll() {
641
+ if (this.expandedAll && this.treeData.length === this.nodes.length)
642
+ return;
523
643
  const setChildren = (nodes) => {
524
644
  if (XIsEmpty(nodes))
525
645
  return;
@@ -530,7 +650,10 @@ class XTreeComponent extends XTreeProperty {
530
650
  });
531
651
  };
532
652
  setChildren(this.nodes);
533
- if (this.virtualScroll) {
653
+ if (this.expandedAll === false) {
654
+ this.nodes = this.treeData.filter((x) => XIsEmpty(x.pid));
655
+ }
656
+ else {
534
657
  if (this.virtualNodes.length === 0) {
535
658
  this.virtualNodes = [...this.nodes];
536
659
  }
@@ -540,6 +663,15 @@ class XTreeComponent extends XTreeProperty {
540
663
  }
541
664
  }
542
665
  }
666
+ setExpanded() {
667
+ for (let item of this.nodes) {
668
+ if (item.open) {
669
+ let index = this.nodes.indexOf(item);
670
+ this.nodes.splice(index + 1, 0, ...item.children);
671
+ }
672
+ }
673
+ this.nodes = [...this.nodes];
674
+ }
543
675
  setVirtualExpandedAll(item, expandedAll) {
544
676
  let index = this.nodes.indexOf(item);
545
677
  if (expandedAll) {
@@ -582,11 +714,32 @@ class XTreeComponent extends XTreeProperty {
582
714
  this.nodes = [...this.nodes];
583
715
  }
584
716
  setActivatedNode(nodes) {
717
+ if (XIsEmpty(this.activatedId) && this.multiple) {
718
+ this.activatedId = [];
719
+ }
585
720
  let before = this.activatedNode;
586
- this.activatedNode = nodes.find((x) => x.id == this.activatedId);
587
- if (this.activatedNode) {
588
- this.setParentOpen(nodes, this.activatedNode);
589
- this.activatedChange.emit(this.activatedNode);
721
+ if (this.multiple) {
722
+ if (this.activatedId.length > 0) {
723
+ let ids = this.objectArray ? this.activatedId.map((x) => x.id) : this.activatedId;
724
+ for (let i = 0; i < ids.length; i++) {
725
+ let node = nodes.find((x) => x.id === ids[i]);
726
+ if (node) {
727
+ this.setParentOpen(nodes, node);
728
+ if (i === ids.length - 1) {
729
+ this.activatedNode = node;
730
+ this.activatedChange.emit(this.activatedNode);
731
+ }
732
+ }
733
+ }
734
+ }
735
+ }
736
+ else {
737
+ let activatedId = this.activatedId;
738
+ this.activatedNode = nodes.find((x) => x.id == activatedId);
739
+ if (this.activatedNode) {
740
+ this.setParentOpen(nodes, this.activatedNode);
741
+ this.activatedChange.emit(this.activatedNode);
742
+ }
590
743
  }
591
744
  if (before) {
592
745
  before.change && before.change();
@@ -598,31 +751,39 @@ class XTreeComponent extends XTreeProperty {
598
751
  return;
599
752
  const parent = nodes.find((x) => x.id === child.pid);
600
753
  if (!XIsEmpty(parent)) {
601
- this.expanded = [...this.expanded, parent.id];
602
- parent.open = true;
603
- parent.change && parent.change();
604
- getParent(parent);
754
+ if (!this.expanded.includes(parent.id)) {
755
+ this.expanded = [...this.expanded, parent.id];
756
+ parent.open = true;
757
+ parent.change && parent.change();
758
+ getParent(parent);
759
+ }
760
+ }
761
+ };
762
+ getParent(node);
763
+ }
764
+ setParentCheck(nodes, node) {
765
+ const getParent = (child) => {
766
+ if (XIsEmpty(child.pid))
767
+ return;
768
+ const parent = nodes.find((x) => x.id === child.pid);
769
+ if (!XIsEmpty(parent)) {
770
+ if (!this.expanded.includes(parent.id)) {
771
+ this.expanded = [...this.expanded, parent.id];
772
+ parent.open = true;
773
+ parent.change && parent.change();
774
+ getParent(parent);
775
+ }
605
776
  }
606
777
  };
607
778
  getParent(node);
608
779
  }
609
780
  onToggle(event, node) {
610
781
  node.open = !node.open;
611
- if (this.virtualScroll) {
612
- if (this.lazy && !node.childrenLoaded) {
613
- this.getLazyData(node, () => this.virtualToggle(node));
614
- }
615
- else {
616
- this.virtualToggle(node);
617
- }
782
+ if (this.lazy && !node.childrenLoaded) {
783
+ this.getLazyData(node, () => this.virtualToggle(node));
618
784
  }
619
- else if (node.open && !node.childrenLoaded) {
620
- if (this.lazy) {
621
- this.getLazyData(node);
622
- }
623
- else {
624
- node.childrenLoaded = true;
625
- }
785
+ else {
786
+ this.virtualToggle(node);
626
787
  }
627
788
  event.preventDefault();
628
789
  event.stopPropagation();
@@ -654,7 +815,7 @@ class XTreeComponent extends XTreeProperty {
654
815
  if (!parent.children)
655
816
  parent.children = [];
656
817
  this.expanded = [...this.expanded, parent.id];
657
- this.activatedId = node.id;
818
+ this.setActivatedId(node);
658
819
  node.level = Number(parent.level) + 1;
659
820
  node.pid = parent.id;
660
821
  this.treeData.push(node);
@@ -662,14 +823,12 @@ class XTreeComponent extends XTreeProperty {
662
823
  parent.open = true;
663
824
  parent.leaf = true;
664
825
  parent.children = [...parent.children, node];
665
- if (this.virtualScroll) {
666
- this.virtualToggle(parent);
667
- this.cdr.detectChanges();
668
- }
826
+ this.virtualToggle(parent);
827
+ this.cdr.detectChanges();
669
828
  parent.change && parent.change();
670
829
  }
671
830
  else if (XIsEmpty(node.pid)) {
672
- this.activatedId = node.id;
831
+ this.setActivatedId(node);
673
832
  node.level = 0;
674
833
  this.treeData = [...this.treeData, node];
675
834
  this.nodes = [...this.nodes, node];
@@ -686,6 +845,20 @@ class XTreeComponent extends XTreeProperty {
686
845
  _addNode();
687
846
  }
688
847
  }
848
+ setActivatedId(node) {
849
+ if (this.multiple) {
850
+ if (this.objectArray) {
851
+ this.activatedId = [node];
852
+ }
853
+ else {
854
+ this.activatedId = [node.id];
855
+ }
856
+ }
857
+ else {
858
+ this.activatedId = node.id;
859
+ }
860
+ this.activatedIdChange.emit(this.activatedId);
861
+ }
689
862
  removeNode(node) {
690
863
  let parent = this.treeData.find((x) => x.id === node.pid);
691
864
  if (parent) {
@@ -693,32 +866,29 @@ class XTreeComponent extends XTreeProperty {
693
866
  parent.children = [];
694
867
  parent.children.splice(parent.children.indexOf(node), 1);
695
868
  parent.leaf = parent.children.length > 0;
696
- if (!parent.leaf)
697
- this.activatedId = parent.id;
698
- if (this.virtualScroll) {
699
- let index = this.nodes.indexOf(node);
700
- let aindex = index - 1;
701
- if (index === 0 && this.nodes.length > 1) {
702
- aindex = 1;
703
- }
704
- let activatedNode = this.nodes[aindex];
705
- this.activatedId = activatedNode.id;
706
- this.setActivatedNode(this.nodes);
707
- this.nodes.splice(index, 1);
708
- this.nodes = [...this.nodes];
709
- if (activatedNode) {
710
- activatedNode.change && activatedNode.change();
711
- }
712
- this.cdr.detectChanges();
869
+ if (!parent.leaf) {
870
+ this.setActivatedId(parent);
871
+ }
872
+ let index = this.nodes.indexOf(node);
873
+ let aindex = index - 1;
874
+ if (index === 0 && this.nodes.length > 1) {
875
+ aindex = 1;
876
+ }
877
+ let activatedNode = this.nodes[aindex];
878
+ this.setActivatedId(activatedNode);
879
+ this.setActivatedNode(this.nodes);
880
+ this.nodes.splice(index, 1);
881
+ this.nodes = [...this.nodes];
882
+ if (activatedNode) {
883
+ activatedNode.change && activatedNode.change();
713
884
  }
885
+ this.cdr.detectChanges();
714
886
  parent.change && parent.change();
715
887
  }
716
888
  else if (XIsEmpty(node.pid)) {
717
889
  this.treeData.splice(this.treeData.indexOf(node), 1);
718
890
  this.nodes.splice(this.nodes.indexOf(node), 1);
719
- if (this.virtualScroll) {
720
- this.nodes = [...this.nodes];
721
- }
891
+ this.nodes = [...this.nodes];
722
892
  this.cdr.detectChanges();
723
893
  }
724
894
  }
@@ -731,26 +901,32 @@ class XTreeComponent extends XTreeProperty {
731
901
  }
732
902
  }
733
903
  /** @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 });
734
- /** @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 });
904
+ /** @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 });
735
905
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeComponent, decorators: [{
736
906
  type: Component,
737
- 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"] }]
907
+ 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"] }]
738
908
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { tree: [{
739
909
  type: ViewChild,
740
910
  args: ['tree', { static: true }]
911
+ }], virtualBody: [{
912
+ type: ViewChild,
913
+ args: ['virtualBody']
914
+ }], _nodeComponents: [{
915
+ type: ViewChildren,
916
+ args: [XTreeNodeComponent]
741
917
  }] } });
742
918
 
743
919
  class XTreeModule {
744
920
  }
745
921
  /** @nocollapse */ XTreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
746
- /** @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] });
747
- /** @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] });
922
+ /** @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] });
923
+ /** @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] });
748
924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: XTreeModule, decorators: [{
749
925
  type: NgModule,
750
926
  args: [{
751
927
  declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty],
752
928
  exports: [XTreeComponent, XTreeNodeComponent],
753
- imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule]
929
+ imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule, ScrollingModule, XKeywordModule]
754
930
  }]
755
931
  }] });
756
932