@ali-hm/angular-tree-component 12.0.5 → 16.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/{esm2020 → esm2022}/lib/angular-tree-component.module.mjs +33 -33
  2. package/{esm2020 → esm2022}/lib/components/loading.component.mjs +6 -6
  3. package/{esm2020 → esm2022}/lib/components/tree-node-checkbox.component.mjs +6 -6
  4. package/esm2022/lib/components/tree-node-collection.component.mjs +284 -0
  5. package/{esm2020 → esm2022}/lib/components/tree-node-content.component.mjs +6 -6
  6. package/{esm2020 → esm2022}/lib/components/tree-node-drop-slot.component.mjs +6 -6
  7. package/{esm2020 → esm2022}/lib/components/tree-node-expander.component.mjs +6 -6
  8. package/{esm2020 → esm2022}/lib/components/tree-node-wrapper.component.mjs +6 -6
  9. package/{esm2020 → esm2022}/lib/components/tree-viewport.component.mjs +6 -6
  10. package/esm2022/lib/components/tree.component.mjs +186 -0
  11. package/esm2022/lib/directives/tree-animate-open.directive.mjs +101 -0
  12. package/{esm2020 → esm2022}/lib/directives/tree-drag.directive.mjs +4 -4
  13. package/esm2022/lib/directives/tree-drop.directive.mjs +127 -0
  14. package/{esm2020 → esm2022}/lib/mobx-angular/tree-mobx-autorun.directive.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/models/tree-dragged-element.model.mjs +4 -4
  16. package/esm2022/lib/models/tree-node.model.mjs +390 -0
  17. package/esm2022/lib/models/tree-options.model.mjs +150 -0
  18. package/esm2022/lib/models/tree-virtual-scroll.model.mjs +197 -0
  19. package/esm2022/lib/models/tree.model.mjs +546 -0
  20. package/{fesm2020 → fesm2022}/ali-hm-angular-tree-component.mjs +174 -174
  21. package/{fesm2020 → fesm2022}/ali-hm-angular-tree-component.mjs.map +1 -1
  22. package/lib/components/loading.component.d.ts +1 -1
  23. package/lib/components/tree-node-checkbox.component.d.ts +1 -1
  24. package/lib/components/tree-node-collection.component.d.ts +3 -3
  25. package/lib/components/tree-node-content.component.d.ts +1 -1
  26. package/lib/components/tree-node-drop-slot.component.d.ts +1 -1
  27. package/lib/components/tree-node-expander.component.d.ts +1 -1
  28. package/lib/components/tree-node-wrapper.component.d.ts +1 -1
  29. package/lib/components/tree-viewport.component.d.ts +1 -1
  30. package/lib/components/tree.component.d.ts +1 -1
  31. package/lib/defs/api.d.ts +2 -2
  32. package/lib/directives/tree-animate-open.directive.d.ts +1 -1
  33. package/lib/directives/tree-drag.directive.d.ts +1 -1
  34. package/lib/directives/tree-drop.directive.d.ts +1 -1
  35. package/lib/mobx-angular/tree-mobx-autorun.directive.d.ts +1 -1
  36. package/package.json +8 -14
  37. package/esm2020/lib/components/tree-node-collection.component.mjs +0 -284
  38. package/esm2020/lib/components/tree.component.mjs +0 -186
  39. package/esm2020/lib/directives/tree-animate-open.directive.mjs +0 -101
  40. package/esm2020/lib/directives/tree-drop.directive.mjs +0 -127
  41. package/esm2020/lib/models/tree-node.model.mjs +0 -390
  42. package/esm2020/lib/models/tree-options.model.mjs +0 -150
  43. package/esm2020/lib/models/tree-virtual-scroll.model.mjs +0 -197
  44. package/esm2020/lib/models/tree.model.mjs +0 -546
  45. package/fesm2015/ali-hm-angular-tree-component.mjs +0 -2511
  46. package/fesm2015/ali-hm-angular-tree-component.mjs.map +0 -1
  47. /package/{esm2020 → esm2022}/ali-hm-angular-tree-component.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/constants/events.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/constants/keys.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/defs/api.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/mobx-angular/mobx-proxy.mjs +0 -0
  52. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -5,5 +5,5 @@ export declare class LoadingComponent {
5
5
  template: TemplateRef<any>;
6
6
  node: TreeNode;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<LoadingComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<LoadingComponent, "tree-loading-component", never, { "template": "template"; "node": "node"; }, {}, never, never, false>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<LoadingComponent, "tree-loading-component", never, { "template": { "alias": "template"; "required": false; }; "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
9
9
  }
@@ -3,5 +3,5 @@ import * as i0 from "@angular/core";
3
3
  export declare class TreeNodeCheckboxComponent {
4
4
  node: TreeNode;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeCheckboxComponent, never>;
6
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeCheckboxComponent, "tree-node-checkbox", never, { "node": "node"; }, {}, never, never, false>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeCheckboxComponent, "tree-node-checkbox", never, { "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
7
7
  }
@@ -6,7 +6,7 @@ export declare class TreeNodeChildrenComponent {
6
6
  node: TreeNode;
7
7
  templates: any;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeChildrenComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeChildrenComponent, "tree-node-children", never, { "node": "node"; "templates": "templates"; }, {}, never, never, false>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeChildrenComponent, "tree-node-children", never, { "node": { "alias": "node"; "required": false; }; "templates": { "alias": "templates"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
11
11
  export declare class TreeNodeCollectionComponent implements OnInit, OnDestroy {
12
12
  get nodes(): any;
@@ -23,12 +23,12 @@ export declare class TreeNodeCollectionComponent implements OnInit, OnDestroy {
23
23
  ngOnDestroy(): void;
24
24
  trackNode(index: any, node: any): any;
25
25
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeCollectionComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeCollectionComponent, "tree-node-collection", never, { "nodes": "nodes"; "treeModel": "treeModel"; "templates": "templates"; }, {}, never, never, false>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeCollectionComponent, "tree-node-collection", never, { "nodes": { "alias": "nodes"; "required": false; }; "treeModel": { "alias": "treeModel"; "required": false; }; "templates": { "alias": "templates"; "required": false; }; }, {}, never, never, false, never>;
27
27
  }
28
28
  export declare class TreeNodeComponent {
29
29
  node: TreeNode;
30
30
  index: number;
31
31
  templates: any;
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeComponent, "TreeNode, tree-node", never, { "node": "node"; "index": "index"; "templates": "templates"; }, {}, never, never, false>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeComponent, "TreeNode, tree-node", never, { "node": { "alias": "node"; "required": false; }; "index": { "alias": "index"; "required": false; }; "templates": { "alias": "templates"; "required": false; }; }, {}, never, never, false, never>;
34
34
  }
@@ -6,5 +6,5 @@ export declare class TreeNodeContent {
6
6
  index: number;
7
7
  template: TemplateRef<any>;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeContent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeContent, "tree-node-content", never, { "node": "node"; "index": "index"; "template": "template"; }, {}, never, never, false>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeContent, "tree-node-content", never, { "node": { "alias": "node"; "required": false; }; "index": { "alias": "index"; "required": false; }; "template": { "alias": "template"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
@@ -6,5 +6,5 @@ export declare class TreeNodeDropSlot {
6
6
  onDrop($event: any): void;
7
7
  allowDrop(element: any, $event: any): boolean;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeDropSlot, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeDropSlot, "TreeNodeDropSlot, tree-node-drop-slot", never, { "node": "node"; "dropIndex": "dropIndex"; }, {}, never, never, false>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeDropSlot, "TreeNodeDropSlot, tree-node-drop-slot", never, { "node": { "alias": "node"; "required": false; }; "dropIndex": { "alias": "dropIndex"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
@@ -3,5 +3,5 @@ import * as i0 from "@angular/core";
3
3
  export declare class TreeNodeExpanderComponent {
4
4
  node: TreeNode;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeExpanderComponent, never>;
6
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeExpanderComponent, "tree-node-expander", never, { "node": "node"; }, {}, never, never, false>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeExpanderComponent, "tree-node-expander", never, { "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
7
7
  }
@@ -5,5 +5,5 @@ export declare class TreeNodeWrapperComponent {
5
5
  index: number;
6
6
  templates: any;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeWrapperComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeWrapperComponent, "tree-node-wrapper", never, { "node": "node"; "index": "index"; "templates": "templates"; }, {}, never, never, false>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeWrapperComponent, "tree-node-wrapper", never, { "node": { "alias": "node"; "required": false; }; "index": { "alias": "index"; "required": false; }; "templates": { "alias": "templates"; "required": false; }; }, {}, never, never, false, never>;
9
9
  }
@@ -13,5 +13,5 @@ export declare class TreeViewportComponent implements AfterViewInit, OnInit, OnD
13
13
  getTotalHeight(): string;
14
14
  private throttle;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeViewportComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeViewportComponent, "tree-viewport", never, {}, {}, never, ["*"], false>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeViewportComponent, "tree-viewport", never, {}, {}, never, ["*"], false, never>;
17
17
  }
@@ -43,5 +43,5 @@ export declare class TreeComponent implements OnChanges {
43
43
  sizeChanged(): void;
44
44
  private pick;
45
45
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "Tree, tree-root", never, { "nodes": "nodes"; "options": "options"; "focused": "focused"; "state": "state"; }, { "toggleExpanded": "toggleExpanded"; "activate": "activate"; "deactivate": "deactivate"; "nodeActivate": "nodeActivate"; "nodeDeactivate": "nodeDeactivate"; "select": "select"; "deselect": "deselect"; "focus": "focus"; "blur": "blur"; "updateData": "updateData"; "initialized": "initialized"; "moveNode": "moveNode"; "copyNode": "copyNode"; "loadNodeChildren": "loadNodeChildren"; "changeFilter": "changeFilter"; "event": "event"; "stateChange": "stateChange"; }, ["loadingTemplate", "treeNodeTemplate", "treeNodeWrapperTemplate", "treeNodeFullTemplate"], never, false>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "Tree, tree-root", never, { "nodes": { "alias": "nodes"; "required": false; }; "options": { "alias": "options"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "state": { "alias": "state"; "required": false; }; }, { "toggleExpanded": "toggleExpanded"; "activate": "activate"; "deactivate": "deactivate"; "nodeActivate": "nodeActivate"; "nodeDeactivate": "nodeDeactivate"; "select": "select"; "deselect": "deselect"; "focus": "focus"; "blur": "blur"; "updateData": "updateData"; "initialized": "initialized"; "moveNode": "moveNode"; "copyNode": "copyNode"; "loadNodeChildren": "loadNodeChildren"; "changeFilter": "changeFilter"; "event": "event"; "stateChange": "stateChange"; }, ["loadingTemplate", "treeNodeTemplate", "treeNodeWrapperTemplate", "treeNodeFullTemplate"], never, false, never>;
47
47
  }
package/lib/defs/api.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Welcome to ng2tree
3
3
  */
4
- export declare type IDType = string | number;
5
- export declare type IDTypeDictionary = {
4
+ export type IDType = string | number;
5
+ export type IDTypeDictionary = {
6
6
  [id: string]: boolean;
7
7
  [id: number]: boolean;
8
8
  };
@@ -16,5 +16,5 @@ export declare class TreeAnimateOpenDirective {
16
16
  private _animateOpen;
17
17
  private _animateClose;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeAnimateOpenDirective, never>;
19
- static ɵdir: i0.ɵɵDirectiveDeclaration<TreeAnimateOpenDirective, "[treeAnimateOpen]", never, { "animateSpeed": "treeAnimateOpenSpeed"; "animateAcceleration": "treeAnimateOpenAcceleration"; "isEnabled": "treeAnimateOpenEnabled"; "isOpen": "treeAnimateOpen"; }, {}, never, never, false>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeAnimateOpenDirective, "[treeAnimateOpen]", never, { "animateSpeed": { "alias": "treeAnimateOpenSpeed"; "required": false; }; "animateAcceleration": { "alias": "treeAnimateOpenAcceleration"; "required": false; }; "isEnabled": { "alias": "treeAnimateOpenEnabled"; "required": false; }; "isOpen": { "alias": "treeAnimateOpen"; "required": false; }; }, {}, never, never, false, never>;
20
20
  }
@@ -17,5 +17,5 @@ export declare class TreeDragDirective implements AfterViewInit, DoCheck, OnDest
17
17
  onDrag(ev: any): void;
18
18
  onDragEnd(): void;
19
19
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeDragDirective, never>;
20
- static ɵdir: i0.ɵɵDirectiveDeclaration<TreeDragDirective, "[treeDrag]", never, { "draggedElement": "treeDrag"; "treeDragEnabled": "treeDragEnabled"; }, {}, never, never, false>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeDragDirective, "[treeDrag]", never, { "draggedElement": { "alias": "treeDrag"; "required": false; }; "treeDragEnabled": { "alias": "treeDragEnabled"; "required": false; }; }, {}, never, never, false, never>;
21
21
  }
@@ -29,5 +29,5 @@ export declare class TreeDropDirective implements AfterViewInit, OnDestroy {
29
29
  private addDisabledClass;
30
30
  private removeDisabledClass;
31
31
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeDropDirective, never>;
32
- static ɵdir: i0.ɵɵDirectiveDeclaration<TreeDropDirective, "[treeDrop]", never, { "allowDragoverStyling": "allowDragoverStyling"; "treeAllowDrop": "treeAllowDrop"; }, { "onDropCallback": "treeDrop"; "onDragOverCallback": "treeDropDragOver"; "onDragLeaveCallback": "treeDropDragLeave"; "onDragEnterCallback": "treeDropDragEnter"; }, never, never, false>;
32
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeDropDirective, "[treeDrop]", never, { "allowDragoverStyling": { "alias": "allowDragoverStyling"; "required": false; }; "treeAllowDrop": { "alias": "treeAllowDrop"; "required": false; }; }, { "onDropCallback": "treeDrop"; "onDragOverCallback": "treeDropDragOver"; "onDragLeaveCallback": "treeDropDragLeave"; "onDragEnterCallback": "treeDropDragEnter"; }, never, never, false, never>;
33
33
  }
@@ -13,5 +13,5 @@ export declare class TreeMobxAutorunDirective implements OnInit, OnDestroy {
13
13
  autoDetect(view: EmbeddedViewRef<any>): void;
14
14
  ngOnDestroy(): void;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<TreeMobxAutorunDirective, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<TreeMobxAutorunDirective, "[treeMobxAutorun]", never, { "treeMobxAutorun": "treeMobxAutorun"; }, {}, never, never, false>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeMobxAutorunDirective, "[treeMobxAutorun]", never, { "treeMobxAutorun": { "alias": "treeMobxAutorun"; "required": false; }; }, {}, never, never, false, never>;
17
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ali-hm/angular-tree-component",
3
- "version": "12.0.5",
3
+ "version": "16.0.1",
4
4
  "description": "A simple yet powerful tree component for Angular 14+",
5
5
  "author": "ali-hm",
6
6
  "homepage": "https://github.com/ali-hm/angular-tree-component",
@@ -25,9 +25,9 @@
25
25
  "angular tree component"
26
26
  ],
27
27
  "peerDependencies": {
28
- "@angular/common": ">=14.0.0",
29
- "@angular/core": ">=14.0.0",
30
- "mobx": "^6.10.2"
28
+ "@angular/common": ">=16.0.0",
29
+ "@angular/core": ">=16.0.0",
30
+ "mobx": "~4.14.1"
31
31
  },
32
32
  "dependencies": {
33
33
  "mobx": "~4.14.1",
@@ -42,18 +42,12 @@
42
42
  },
43
43
  ".": {
44
44
  "types": "./index.d.ts",
45
- "esm2020": "./esm2020/ali-hm-angular-tree-component.mjs",
46
- "es2020": "./fesm2020/ali-hm-angular-tree-component.mjs",
47
- "es2015": "./fesm2015/ali-hm-angular-tree-component.mjs",
48
- "node": "./fesm2015/ali-hm-angular-tree-component.mjs",
49
- "default": "./fesm2020/ali-hm-angular-tree-component.mjs"
45
+ "esm2022": "./esm2022/ali-hm-angular-tree-component.mjs",
46
+ "esm": "./esm2022/ali-hm-angular-tree-component.mjs",
47
+ "default": "./fesm2022/ali-hm-angular-tree-component.mjs"
50
48
  }
51
49
  },
52
- "module": "fesm2015/ali-hm-angular-tree-component.mjs",
53
- "es2020": "fesm2020/ali-hm-angular-tree-component.mjs",
54
- "esm2020": "esm2020/ali-hm-angular-tree-component.mjs",
55
- "fesm2020": "fesm2020/ali-hm-angular-tree-component.mjs",
56
- "fesm2015": "fesm2015/ali-hm-angular-tree-component.mjs",
50
+ "module": "fesm2022/ali-hm-angular-tree-component.mjs",
57
51
  "typings": "index.d.ts",
58
52
  "sideEffects": false
59
53
  }
@@ -1,284 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { Component, Input, ViewEncapsulation } from '@angular/core';
8
- import { reaction } from 'mobx';
9
- import { observable, computed, action } from '../mobx-angular/mobx-proxy';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/common";
12
- import * as i2 from "./loading.component";
13
- import * as i3 from "../directives/tree-animate-open.directive";
14
- import * as i4 from "../mobx-angular/tree-mobx-autorun.directive";
15
- import * as i5 from "./tree-node-drop-slot.component";
16
- import * as i6 from "./tree-node-wrapper.component";
17
- export class TreeNodeChildrenComponent {
18
- }
19
- /** @nocollapse */ TreeNodeChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeChildrenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- /** @nocollapse */ TreeNodeChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TreeNodeChildrenComponent, selector: "tree-node-children", inputs: { node: "node", templates: "templates" }, ngImport: i0, template: `
21
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
22
- <div
23
- [class.tree-children]="true"
24
- [class.tree-children-no-padding]="node.options.levelPadding"
25
- *treeAnimateOpen="
26
- node.isExpanded;
27
- speed: node.options.animateSpeed;
28
- acceleration: node.options.animateAcceleration;
29
- enabled: node.options.animateExpand
30
- "
31
- >
32
- <tree-node-collection
33
- *ngIf="node.children"
34
- [nodes]="node.children"
35
- [templates]="templates"
36
- [treeModel]="node.treeModel"
37
- >
38
- </tree-node-collection>
39
- <tree-loading-component
40
- [style.padding-left]="node.getNodePadding()"
41
- class="tree-node-loading"
42
- *ngIf="!node.children"
43
- [template]="templates.loadingTemplate"
44
- [node]="node"
45
- ></tree-loading-component>
46
- </div>
47
- </ng-container>
48
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return i2.LoadingComponent; }), selector: "tree-loading-component", inputs: ["template", "node"] }, { kind: "component", type: i0.forwardRef(function () { return TreeNodeCollectionComponent; }), selector: "tree-node-collection", inputs: ["nodes", "treeModel", "templates"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.TreeAnimateOpenDirective; }), selector: "[treeAnimateOpen]", inputs: ["treeAnimateOpenSpeed", "treeAnimateOpenAcceleration", "treeAnimateOpenEnabled", "treeAnimateOpen"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.TreeMobxAutorunDirective; }), selector: "[treeMobxAutorun]", inputs: ["treeMobxAutorun"] }], encapsulation: i0.ViewEncapsulation.None });
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeChildrenComponent, decorators: [{
50
- type: Component,
51
- args: [{ selector: 'tree-node-children', encapsulation: ViewEncapsulation.None, template: `
52
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
53
- <div
54
- [class.tree-children]="true"
55
- [class.tree-children-no-padding]="node.options.levelPadding"
56
- *treeAnimateOpen="
57
- node.isExpanded;
58
- speed: node.options.animateSpeed;
59
- acceleration: node.options.animateAcceleration;
60
- enabled: node.options.animateExpand
61
- "
62
- >
63
- <tree-node-collection
64
- *ngIf="node.children"
65
- [nodes]="node.children"
66
- [templates]="templates"
67
- [treeModel]="node.treeModel"
68
- >
69
- </tree-node-collection>
70
- <tree-loading-component
71
- [style.padding-left]="node.getNodePadding()"
72
- class="tree-node-loading"
73
- *ngIf="!node.children"
74
- [template]="templates.loadingTemplate"
75
- [node]="node"
76
- ></tree-loading-component>
77
- </div>
78
- </ng-container>
79
- ` }]
80
- }], propDecorators: { node: [{
81
- type: Input
82
- }], templates: [{
83
- type: Input
84
- }] } });
85
- export class TreeNodeCollectionComponent {
86
- constructor() {
87
- this._dispose = [];
88
- }
89
- get nodes() {
90
- return this._nodes;
91
- }
92
- set nodes(nodes) {
93
- this.setNodes(nodes);
94
- }
95
- get marginTop() {
96
- const firstNode = this.viewportNodes && this.viewportNodes.length && this.viewportNodes[0];
97
- const relativePosition = firstNode && firstNode.parent
98
- ? firstNode.position -
99
- firstNode.parent.position -
100
- firstNode.parent.getSelfHeight()
101
- : 0;
102
- return `${relativePosition}px`;
103
- }
104
- setNodes(nodes) {
105
- this._nodes = nodes;
106
- }
107
- ngOnInit() {
108
- this.virtualScroll = this.treeModel.virtualScroll;
109
- this._dispose = [
110
- // return node indexes so we can compare structurally,
111
- reaction(() => {
112
- return this.virtualScroll
113
- .getViewportNodes(this.nodes)
114
- .map(n => n.index);
115
- }, nodeIndexes => {
116
- this.viewportNodes = nodeIndexes.map(i => this.nodes[i]);
117
- }, { compareStructural: true, fireImmediately: true }),
118
- reaction(() => this.nodes, nodes => {
119
- this.viewportNodes = this.virtualScroll.getViewportNodes(nodes);
120
- })
121
- ];
122
- }
123
- ngOnDestroy() {
124
- this._dispose.forEach(d => d());
125
- }
126
- trackNode(index, node) {
127
- return node.id;
128
- }
129
- }
130
- /** @nocollapse */ TreeNodeCollectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
131
- /** @nocollapse */ TreeNodeCollectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TreeNodeCollectionComponent, selector: "tree-node-collection", inputs: { nodes: "nodes", treeModel: "treeModel", templates: "templates" }, ngImport: i0, template: `
132
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
133
- <div [style.margin-top]="marginTop">
134
- <tree-node
135
- *ngFor="let node of viewportNodes; let i = index; trackBy: trackNode"
136
- [node]="node"
137
- [index]="i"
138
- [templates]="templates"
139
- >
140
- </tree-node>
141
- </div>
142
- </ng-container>
143
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i0.forwardRef(function () { return TreeNodeComponent; }), selector: "TreeNode, tree-node", inputs: ["node", "index", "templates"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.TreeMobxAutorunDirective; }), selector: "[treeMobxAutorun]", inputs: ["treeMobxAutorun"] }], encapsulation: i0.ViewEncapsulation.None });
144
- __decorate([
145
- observable
146
- ], TreeNodeCollectionComponent.prototype, "_nodes", void 0);
147
- __decorate([
148
- observable
149
- ], TreeNodeCollectionComponent.prototype, "viewportNodes", void 0);
150
- __decorate([
151
- computed
152
- ], TreeNodeCollectionComponent.prototype, "marginTop", null);
153
- __decorate([
154
- action
155
- ], TreeNodeCollectionComponent.prototype, "setNodes", null);
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeCollectionComponent, decorators: [{
157
- type: Component,
158
- args: [{
159
- selector: 'tree-node-collection',
160
- encapsulation: ViewEncapsulation.None,
161
- template: `
162
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
163
- <div [style.margin-top]="marginTop">
164
- <tree-node
165
- *ngFor="let node of viewportNodes; let i = index; trackBy: trackNode"
166
- [node]="node"
167
- [index]="i"
168
- [templates]="templates"
169
- >
170
- </tree-node>
171
- </div>
172
- </ng-container>
173
- `
174
- }]
175
- }], propDecorators: { nodes: [{
176
- type: Input
177
- }], treeModel: [{
178
- type: Input
179
- }], _nodes: [], templates: [{
180
- type: Input
181
- }], viewportNodes: [], marginTop: [], setNodes: [] } });
182
- export class TreeNodeComponent {
183
- }
184
- /** @nocollapse */ TreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
- /** @nocollapse */ TreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TreeNodeComponent, selector: "TreeNode, tree-node", inputs: { node: "node", index: "index", templates: "templates" }, ngImport: i0, template: `
186
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
187
- <div
188
- *ngIf="!templates.treeNodeFullTemplate"
189
- [class]="node.getClass()"
190
- [class.tree-node]="true"
191
- [class.tree-node-expanded]="node.isExpanded && node.hasChildren"
192
- [class.tree-node-collapsed]="node.isCollapsed && node.hasChildren"
193
- [class.tree-node-leaf]="node.isLeaf"
194
- [class.tree-node-active]="node.isActive"
195
- [class.tree-node-focused]="node.isFocused"
196
- >
197
- <tree-node-drop-slot
198
- *ngIf="index === 0"
199
- [dropIndex]="node.index"
200
- [node]="node.parent"
201
- ></tree-node-drop-slot>
202
-
203
- <tree-node-wrapper
204
- [node]="node"
205
- [index]="index"
206
- [templates]="templates"
207
- ></tree-node-wrapper>
208
-
209
- <tree-node-children
210
- [node]="node"
211
- [templates]="templates"
212
- ></tree-node-children>
213
- <tree-node-drop-slot
214
- [dropIndex]="node.index + 1"
215
- [node]="node.parent"
216
- ></tree-node-drop-slot>
217
- </div>
218
- <ng-container
219
- [ngTemplateOutlet]="templates.treeNodeFullTemplate"
220
- [ngTemplateOutletContext]="{
221
- $implicit: node,
222
- node: node,
223
- index: index,
224
- templates: templates
225
- }"
226
- >
227
- </ng-container>
228
- </ng-container>
229
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TreeNodeChildrenComponent, selector: "tree-node-children", inputs: ["node", "templates"] }, { kind: "component", type: i5.TreeNodeDropSlot, selector: "TreeNodeDropSlot, tree-node-drop-slot", inputs: ["node", "dropIndex"] }, { kind: "component", type: i6.TreeNodeWrapperComponent, selector: "tree-node-wrapper", inputs: ["node", "index", "templates"] }, { kind: "directive", type: i4.TreeMobxAutorunDirective, selector: "[treeMobxAutorun]", inputs: ["treeMobxAutorun"] }], encapsulation: i0.ViewEncapsulation.None });
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TreeNodeComponent, decorators: [{
231
- type: Component,
232
- args: [{ selector: 'TreeNode, tree-node', encapsulation: ViewEncapsulation.None, template: `
233
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
234
- <div
235
- *ngIf="!templates.treeNodeFullTemplate"
236
- [class]="node.getClass()"
237
- [class.tree-node]="true"
238
- [class.tree-node-expanded]="node.isExpanded && node.hasChildren"
239
- [class.tree-node-collapsed]="node.isCollapsed && node.hasChildren"
240
- [class.tree-node-leaf]="node.isLeaf"
241
- [class.tree-node-active]="node.isActive"
242
- [class.tree-node-focused]="node.isFocused"
243
- >
244
- <tree-node-drop-slot
245
- *ngIf="index === 0"
246
- [dropIndex]="node.index"
247
- [node]="node.parent"
248
- ></tree-node-drop-slot>
249
-
250
- <tree-node-wrapper
251
- [node]="node"
252
- [index]="index"
253
- [templates]="templates"
254
- ></tree-node-wrapper>
255
-
256
- <tree-node-children
257
- [node]="node"
258
- [templates]="templates"
259
- ></tree-node-children>
260
- <tree-node-drop-slot
261
- [dropIndex]="node.index + 1"
262
- [node]="node.parent"
263
- ></tree-node-drop-slot>
264
- </div>
265
- <ng-container
266
- [ngTemplateOutlet]="templates.treeNodeFullTemplate"
267
- [ngTemplateOutletContext]="{
268
- $implicit: node,
269
- node: node,
270
- index: index,
271
- templates: templates
272
- }"
273
- >
274
- </ng-container>
275
- </ng-container>
276
- ` }]
277
- }], propDecorators: { node: [{
278
- type: Input
279
- }], index: [{
280
- type: Input
281
- }], templates: [{
282
- type: Input
283
- }] } });
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10cmVlLWNvbXBvbmVudC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS1ub2RlLWNvbGxlY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGlCQUFpQixFQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQXdDMUUsTUFBTSxPQUFPLHlCQUF5Qjs7eUlBQXpCLHlCQUF5Qjs2SEFBekIseUJBQXlCLDRHQTlCMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQscVlBd0JVLDJCQUEyQjsyRkF0QjNCLHlCQUF5QjtrQkFsQ3JDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUNmLGlCQUFpQixDQUFDLElBQUksWUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7OEJBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7O0FBb0JSLE1BQU0sT0FBTywyQkFBMkI7SUFqQnhDO1FBK0NFLGFBQVEsR0FBRyxFQUFFLENBQUM7S0FxQ2Y7SUFsRUMsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO1FBVWEsU0FBUztRQUNyQixNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FB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O3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcmVhY3Rpb24gfSBmcm9tICdtb2J4JztcclxuaW1wb3J0IHsgb2JzZXJ2YWJsZSwgY29tcHV0ZWQsIGFjdGlvbiB9IGZyb20gJy4uL21vYngtYW5ndWxhci9tb2J4LXByb3h5JztcclxuaW1wb3J0IHsgVHJlZVZpcnR1YWxTY3JvbGwgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS12aXJ0dWFsLXNjcm9sbC5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVNb2RlbCB9IGZyb20gJy4uL21vZGVscy90cmVlLm1vZGVsJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RyZWUtbm9kZS1jaGlsZHJlbicsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBzdHlsZXM6IFtdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGFpbmVyICp0cmVlTW9ieEF1dG9ydW49XCJ7IGRvbnREZXRhY2g6IHRydWUgfVwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW2NsYXNzLnRyZWUtY2hpbGRyZW5dPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtY2hpbGRyZW4tbm8tcGFkZGluZ109XCJub2RlLm9wdGlvbnMubGV2ZWxQYWRkaW5nXCJcclxuICAgICAgICAqdHJlZUFuaW1hdGVPcGVuPVwiXHJcbiAgICAgICAgICBub2RlLmlzRXhwYW5kZWQ7XHJcbiAgICAgICAgICBzcGVlZDogbm9kZS5vcHRpb25zLmFuaW1hdGVTcGVlZDtcclxuICAgICAgICAgIGFjY2VsZXJhdGlvbjogbm9kZS5vcHRpb25zLmFuaW1hdGVBY2NlbGVyYXRpb247XHJcbiAgICAgICAgICBlbmFibGVkOiBub2RlLm9wdGlvbnMuYW5pbWF0ZUV4cGFuZFxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8dHJlZS1ub2RlLWNvbGxlY3Rpb25cclxuICAgICAgICAgICpuZ0lmPVwibm9kZS5jaGlsZHJlblwiXHJcbiAgICAgICAgICBbbm9kZXNdPVwibm9kZS5jaGlsZHJlblwiXHJcbiAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICBbdHJlZU1vZGVsXT1cIm5vZGUudHJlZU1vZGVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90cmVlLW5vZGUtY29sbGVjdGlvbj5cclxuICAgICAgICA8dHJlZS1sb2FkaW5nLWNvbXBvbmVudFxyXG4gICAgICAgICAgW3N0eWxlLnBhZGRpbmctbGVmdF09XCJub2RlLmdldE5vZGVQYWRkaW5nKClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0cmVlLW5vZGUtbG9hZGluZ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiFub2RlLmNoaWxkcmVuXCJcclxuICAgICAgICAgIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZXMubG9hZGluZ1RlbXBsYXRlXCJcclxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxyXG4gICAgICAgID48L3RyZWUtbG9hZGluZy1jb21wb25lbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVDaGlsZHJlbkNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgbm9kZTogVHJlZU5vZGU7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVzOiBhbnk7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJlZS1ub2RlLWNvbGxlY3Rpb24nLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250YWluZXIgKnRyZWVNb2J4QXV0b3J1bj1cInsgZG9udERldGFjaDogdHJ1ZSB9XCI+XHJcbiAgICAgIDxkaXYgW3N0eWxlLm1hcmdpbi10b3BdPVwibWFyZ2luVG9wXCI+XHJcbiAgICAgICAgPHRyZWUtbm9kZVxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygdmlld3BvcnROb2RlczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tOb2RlXCJcclxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxyXG4gICAgICAgICAgW2luZGV4XT1cImlcIlxyXG4gICAgICAgICAgW3RlbXBsYXRlc109XCJ0ZW1wbGF0ZXNcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3RyZWUtbm9kZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUNvbGxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBnZXQgbm9kZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm9kZXM7XHJcbiAgfVxyXG4gIHNldCBub2Rlcyhub2Rlcykge1xyXG4gICAgdGhpcy5zZXROb2Rlcyhub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0cmVlTW9kZWw6IFRyZWVNb2RlbDtcclxuXHJcbiAgQG9ic2VydmFibGUgX25vZGVzO1xyXG4gIHByaXZhdGUgdmlydHVhbFNjcm9sbDogVHJlZVZpcnR1YWxTY3JvbGw7IC8vIENhbm5vdCBpbmplY3QgdGhpcywgYmVjYXVzZSB3ZSBtaWdodCBiZSBpbnNpZGUgdHJlZU5vZGVUZW1wbGF0ZUZ1bGxcclxuICBASW5wdXQoKSB0ZW1wbGF0ZXM7XHJcblxyXG4gIEBvYnNlcnZhYmxlIHZpZXdwb3J0Tm9kZXM6IFRyZWVOb2RlW107XHJcblxyXG4gIEBjb21wdXRlZCBnZXQgbWFyZ2luVG9wKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXJzdE5vZGUgPVxyXG4gICAgICB0aGlzLnZpZXdwb3J0Tm9kZXMgJiYgdGhpcy52aWV3cG9ydE5vZGVzLmxlbmd0aCAmJiB0aGlzLnZpZXdwb3J0Tm9kZXNbMF07XHJcbiAgICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uID1cclxuICAgICAgZmlyc3ROb2RlICYmIGZpcnN0Tm9kZS5wYXJlbnRcclxuICAgICAgICA/IGZpcnN0Tm9kZS5wb3NpdGlvbiAtXHJcbiAgICAgICAgICBmaXJzdE5vZGUucGFyZW50LnBvc2l0aW9uIC1cclxuICAgICAgICAgIGZpcnN0Tm9kZS5wYXJlbnQuZ2V0U2VsZkhlaWdodCgpXHJcbiAgICAgICAgOiAwO1xyXG5cclxuICAgIHJldHVybiBgJHtyZWxhdGl2ZVBvc2l0aW9ufXB4YDtcclxuICB9XHJcblxyXG4gIF9kaXNwb3NlID0gW107XHJcblxyXG4gIEBhY3Rpb24gc2V0Tm9kZXMobm9kZXMpIHtcclxuICAgIHRoaXMuX25vZGVzID0gbm9kZXM7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IHRoaXMudHJlZU1vZGVsLnZpcnR1YWxTY3JvbGw7XHJcbiAgICB0aGlzLl9kaXNwb3NlID0gW1xyXG4gICAgICAvLyByZXR1cm4gbm9kZSBpbmRleGVzIHNvIHdlIGNhbiBjb21wYXJlIHN0cnVjdHVyYWxseSxcclxuICAgICAgcmVhY3Rpb24oXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbFxyXG4gICAgICAgICAgICAuZ2V0Vmlld3BvcnROb2Rlcyh0aGlzLm5vZGVzKVxyXG4gICAgICAgICAgICAubWFwKG4gPT4gbi5pbmRleCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBub2RlSW5kZXhlcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0Tm9kZXMgPSBub2RlSW5kZXhlcy5tYXAoaSA9PiB0aGlzLm5vZGVzW2ldKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgY29tcGFyZVN0cnVjdHVyYWw6IHRydWUsIGZpcmVJbW1lZGlhdGVseTogdHJ1ZSB9IGFzIGFueVxyXG4gICAgICApLFxyXG4gICAgICByZWFjdGlvbihcclxuICAgICAgICAoKSA9PiB0aGlzLm5vZGVzLFxyXG4gICAgICAgIG5vZGVzID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnROb2RlcyA9IHRoaXMudmlydHVhbFNjcm9sbC5nZXRWaWV3cG9ydE5vZGVzKG5vZGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX2Rpc3Bvc2UuZm9yRWFjaChkID0+IGQoKSk7XHJcbiAgfVxyXG5cclxuICB0cmFja05vZGUoaW5kZXgsIG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmlkO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUcmVlTm9kZSwgdHJlZS1ub2RlJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHN0eWxlczogW10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250YWluZXIgKnRyZWVNb2J4QXV0b3J1bj1cInsgZG9udERldGFjaDogdHJ1ZSB9XCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIiF0ZW1wbGF0ZXMudHJlZU5vZGVGdWxsVGVtcGxhdGVcIlxyXG4gICAgICAgIFtjbGFzc109XCJub2RlLmdldENsYXNzKClcIlxyXG4gICAgICAgIFtjbGFzcy50cmVlLW5vZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtbm9kZS1leHBhbmRlZF09XCJub2RlLmlzRXhwYW5kZWQgJiYgbm9kZS5oYXNDaGlsZHJlblwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtbm9kZS1jb2xsYXBzZWRdPVwibm9kZS5pc0NvbGxhcHNlZCAmJiBub2RlLmhhc0NoaWxkcmVuXCJcclxuICAgICAgICBbY2xhc3MudHJlZS1ub2RlLWxlYWZdPVwibm9kZS5pc0xlYWZcIlxyXG4gICAgICAgIFtjbGFzcy50cmVlLW5vZGUtYWN0aXZlXT1cIm5vZGUuaXNBY3RpdmVcIlxyXG4gICAgICAgIFtjbGFzcy50cmVlLW5vZGUtZm9jdXNlZF09XCJub2RlLmlzRm9jdXNlZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8dHJlZS1ub2RlLWRyb3Atc2xvdFxyXG4gICAgICAgICAgKm5nSWY9XCJpbmRleCA9PT0gMFwiXHJcbiAgICAgICAgICBbZHJvcEluZGV4XT1cIm5vZGUuaW5kZXhcIlxyXG4gICAgICAgICAgW25vZGVdPVwibm9kZS5wYXJlbnRcIlxyXG4gICAgICAgID48L3RyZWUtbm9kZS1kcm9wLXNsb3Q+XHJcblxyXG4gICAgICAgIDx0cmVlLW5vZGUtd3JhcHBlclxyXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXHJcbiAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxyXG4gICAgICAgICAgW3RlbXBsYXRlc109XCJ0ZW1wbGF0ZXNcIlxyXG4gICAgICAgID48L3RyZWUtbm9kZS13cmFwcGVyPlxyXG5cclxuICAgICAgICA8dHJlZS1ub2RlLWNoaWxkcmVuXHJcbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcclxuICAgICAgICAgIFt0ZW1wbGF0ZXNdPVwidGVtcGxhdGVzXCJcclxuICAgICAgICA+PC90cmVlLW5vZGUtY2hpbGRyZW4+XHJcbiAgICAgICAgPHRyZWUtbm9kZS1kcm9wLXNsb3RcclxuICAgICAgICAgIFtkcm9wSW5kZXhdPVwibm9kZS5pbmRleCArIDFcIlxyXG4gICAgICAgICAgW25vZGVdPVwibm9kZS5wYXJlbnRcIlxyXG4gICAgICAgID48L3RyZWUtbm9kZS1kcm9wLXNsb3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzLnRyZWVOb2RlRnVsbFRlbXBsYXRlXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgJGltcGxpY2l0OiBub2RlLFxyXG4gICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVzXHJcbiAgICAgICAgfVwiXHJcbiAgICAgID5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgbm9kZTogVHJlZU5vZGU7XHJcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZXM6IGFueTtcclxufVxyXG5cclxuXHJcblxyXG4iXX0=