@ali-hm/angular-tree-component 18.0.0 → 18.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 (64) hide show
  1. package/{esm2022 → esm2020}/ali-hm-angular-tree-component.mjs +4 -4
  2. package/{esm2022 → esm2020}/lib/angular-tree-component.module.mjs +100 -100
  3. package/{esm2022 → esm2020}/lib/components/loading.component.mjs +21 -21
  4. package/{esm2022 → esm2020}/lib/components/tree-node-checkbox.component.mjs +15 -15
  5. package/esm2020/lib/components/tree-node-collection.component.mjs +284 -0
  6. package/{esm2022 → esm2020}/lib/components/tree-node-content.component.mjs +23 -23
  7. package/{esm2022 → esm2020}/lib/components/tree-node-drop-slot.component.mjs +26 -26
  8. package/{esm2022 → esm2020}/lib/components/tree-node-expander.component.mjs +16 -16
  9. package/{esm2022 → esm2020}/lib/components/tree-node-wrapper.component.mjs +24 -24
  10. package/{esm2022 → esm2020}/lib/components/tree-viewport.component.mjs +55 -55
  11. package/esm2020/lib/components/tree.component.mjs +186 -0
  12. package/{esm2022 → esm2020}/lib/constants/events.mjs +19 -19
  13. package/{esm2022 → esm2020}/lib/constants/keys.mjs +9 -9
  14. package/{esm2022 → esm2020}/lib/defs/api.mjs +1 -1
  15. package/esm2020/lib/directives/tree-animate-open.directive.mjs +101 -0
  16. package/{esm2022 → esm2020}/lib/directives/tree-drag.directive.mjs +65 -65
  17. package/esm2020/lib/directives/tree-drop.directive.mjs +127 -0
  18. package/{esm2022 → esm2020}/lib/mobx-angular/mobx-proxy.mjs +16 -16
  19. package/esm2020/lib/mobx-angular/tree-mobx-autorun.directive.mjs +40 -0
  20. package/{esm2022 → esm2020}/lib/models/tree-dragged-element.model.mjs +25 -25
  21. package/esm2020/lib/models/tree-node.model.mjs +390 -0
  22. package/esm2020/lib/models/tree-options.model.mjs +150 -0
  23. package/esm2020/lib/models/tree-virtual-scroll.model.mjs +197 -0
  24. package/esm2020/lib/models/tree.model.mjs +546 -0
  25. package/{esm2022 → esm2020}/public-api.mjs +4 -4
  26. package/fesm2015/ali-hm-angular-tree-component.mjs +2511 -0
  27. package/fesm2015/ali-hm-angular-tree-component.mjs.map +1 -0
  28. package/{fesm2022 → fesm2020}/ali-hm-angular-tree-component.mjs +2080 -2080
  29. package/{fesm2022 → fesm2020}/ali-hm-angular-tree-component.mjs.map +1 -1
  30. package/index.d.ts +5 -5
  31. package/lib/angular-tree-component.module.d.ts +43 -43
  32. package/lib/components/loading.component.d.ts +9 -9
  33. package/lib/components/tree-node-checkbox.component.d.ts +7 -7
  34. package/lib/components/tree-node-collection.component.d.ts +34 -34
  35. package/lib/components/tree-node-content.component.d.ts +10 -10
  36. package/lib/components/tree-node-drop-slot.component.d.ts +10 -10
  37. package/lib/components/tree-node-expander.component.d.ts +7 -7
  38. package/lib/components/tree-node-wrapper.component.d.ts +9 -9
  39. package/lib/components/tree-viewport.component.d.ts +17 -17
  40. package/lib/components/tree.component.d.ts +47 -47
  41. package/lib/constants/events.d.ts +19 -19
  42. package/lib/constants/keys.d.ts +9 -9
  43. package/lib/defs/api.d.ts +611 -611
  44. package/lib/directives/tree-animate-open.directive.d.ts +20 -20
  45. package/lib/directives/tree-drag.directive.d.ts +21 -21
  46. package/lib/directives/tree-drop.directive.d.ts +33 -33
  47. package/lib/mobx-angular/mobx-proxy.d.ts +7 -7
  48. package/lib/mobx-angular/tree-mobx-autorun.directive.d.ts +17 -17
  49. package/lib/models/tree-dragged-element.model.d.ts +9 -9
  50. package/lib/models/tree-node.model.d.ts +83 -83
  51. package/lib/models/tree-options.model.d.ts +77 -77
  52. package/lib/models/tree-virtual-scroll.model.d.ts +27 -27
  53. package/lib/models/tree.model.d.ts +91 -91
  54. package/package.json +16 -10
  55. package/public-api.d.ts +1 -1
  56. package/esm2022/lib/components/tree-node-collection.component.mjs +0 -284
  57. package/esm2022/lib/components/tree.component.mjs +0 -186
  58. package/esm2022/lib/directives/tree-animate-open.directive.mjs +0 -101
  59. package/esm2022/lib/directives/tree-drop.directive.mjs +0 -127
  60. package/esm2022/lib/mobx-angular/tree-mobx-autorun.directive.mjs +0 -40
  61. package/esm2022/lib/models/tree-node.model.mjs +0 -390
  62. package/esm2022/lib/models/tree-options.model.mjs +0 -150
  63. package/esm2022/lib/models/tree-virtual-scroll.model.mjs +0 -197
  64. package/esm2022/lib/models/tree.model.mjs +0 -546
@@ -1,91 +1,91 @@
1
- import { OnDestroy } from '@angular/core';
2
- import { TreeNode } from './tree-node.model';
3
- import { TreeOptions } from './tree-options.model';
4
- import { TreeVirtualScroll } from './tree-virtual-scroll.model';
5
- import { ITreeModel, IDType, IDTypeDictionary } from '../defs/api';
6
- import * as i0 from "@angular/core";
7
- export declare class TreeModel implements ITreeModel, OnDestroy {
8
- static focusedTree: any;
9
- options: TreeOptions;
10
- nodes: any[];
11
- eventNames: string[];
12
- virtualScroll: TreeVirtualScroll;
13
- roots: TreeNode[];
14
- expandedNodeIds: IDTypeDictionary;
15
- selectedLeafNodeIds: IDTypeDictionary;
16
- activeNodeIds: IDTypeDictionary;
17
- hiddenNodeIds: IDTypeDictionary;
18
- focusedNodeId: IDType;
19
- virtualRoot: TreeNode;
20
- private firstUpdate;
21
- private events;
22
- private subscriptions;
23
- fireEvent(event: any): void;
24
- subscribe(eventName: any, fn: any): void;
25
- getFocusedNode(): TreeNode;
26
- getActiveNode(): TreeNode;
27
- getActiveNodes(): TreeNode[];
28
- getVisibleRoots(): TreeNode[];
29
- getFirstRoot(skipHidden?: boolean): TreeNode;
30
- getLastRoot(skipHidden?: boolean): TreeNode;
31
- get isFocused(): boolean;
32
- isNodeFocused(node: any): boolean;
33
- isEmptyTree(): boolean;
34
- get focusedNode(): any;
35
- get expandedNodes(): any[];
36
- get activeNodes(): any[];
37
- get hiddenNodes(): any[];
38
- get selectedLeafNodes(): any[];
39
- getNodeByPath(path: any[], startNode?: any): TreeNode;
40
- getNodeById(id: any): any;
41
- getNodeBy(predicate: any, startNode?: any): any;
42
- isExpanded(node: any): boolean;
43
- isHidden(node: any): boolean;
44
- isActive(node: any): boolean;
45
- isSelected(node: any): boolean;
46
- ngOnDestroy(): void;
47
- dispose(): void;
48
- unsubscribeAll(): void;
49
- setData({ nodes, options, events }: {
50
- nodes: any;
51
- options: any;
52
- events: any;
53
- }): void;
54
- update(): void;
55
- setFocusedNode(node: any): void;
56
- setFocus(value: any): void;
57
- doForAll(fn: any): void;
58
- focusNextNode(): void;
59
- focusPreviousNode(): void;
60
- focusDrillDown(): void;
61
- focusDrillUp(): void;
62
- setActiveNode(node: any, value: any, multi?: boolean): void;
63
- setSelectedNode(node: any, value: any): void;
64
- setExpandedNode(node: any, value: any): void;
65
- expandAll(): void;
66
- collapseAll(): void;
67
- setIsHidden(node: any, value: any): void;
68
- setHiddenNodeIds(nodeIds: any): void;
69
- performKeyAction(node: any, $event: any): boolean;
70
- filterNodes(filter: any, autoShow?: boolean): void;
71
- clearFilter(): void;
72
- moveNode(node: any, to: any): void;
73
- copyNode(node: any, to: any): void;
74
- getState(): {
75
- expandedNodeIds: IDTypeDictionary;
76
- selectedLeafNodeIds: IDTypeDictionary;
77
- activeNodeIds: IDTypeDictionary;
78
- hiddenNodeIds: IDTypeDictionary;
79
- focusedNodeId: IDType;
80
- };
81
- setState(state: any): void;
82
- subscribeToState(fn: any): void;
83
- canMoveNode(node: any, to: any, fromIndex?: any): boolean;
84
- calculateExpandedNodes(): void;
85
- private _filterNode;
86
- private _calculateExpandedNodes;
87
- private _setActiveNodeSingle;
88
- private _setActiveNodeMulti;
89
- static ɵfac: i0.ɵɵFactoryDeclaration<TreeModel, never>;
90
- static ɵprov: i0.ɵɵInjectableDeclaration<TreeModel>;
91
- }
1
+ import { OnDestroy } from '@angular/core';
2
+ import { TreeNode } from './tree-node.model';
3
+ import { TreeOptions } from './tree-options.model';
4
+ import { TreeVirtualScroll } from './tree-virtual-scroll.model';
5
+ import { ITreeModel, IDType, IDTypeDictionary } from '../defs/api';
6
+ import * as i0 from "@angular/core";
7
+ export declare class TreeModel implements ITreeModel, OnDestroy {
8
+ static focusedTree: any;
9
+ options: TreeOptions;
10
+ nodes: any[];
11
+ eventNames: string[];
12
+ virtualScroll: TreeVirtualScroll;
13
+ roots: TreeNode[];
14
+ expandedNodeIds: IDTypeDictionary;
15
+ selectedLeafNodeIds: IDTypeDictionary;
16
+ activeNodeIds: IDTypeDictionary;
17
+ hiddenNodeIds: IDTypeDictionary;
18
+ focusedNodeId: IDType;
19
+ virtualRoot: TreeNode;
20
+ private firstUpdate;
21
+ private events;
22
+ private subscriptions;
23
+ fireEvent(event: any): void;
24
+ subscribe(eventName: any, fn: any): void;
25
+ getFocusedNode(): TreeNode;
26
+ getActiveNode(): TreeNode;
27
+ getActiveNodes(): TreeNode[];
28
+ getVisibleRoots(): TreeNode[];
29
+ getFirstRoot(skipHidden?: boolean): TreeNode;
30
+ getLastRoot(skipHidden?: boolean): TreeNode;
31
+ get isFocused(): boolean;
32
+ isNodeFocused(node: any): boolean;
33
+ isEmptyTree(): boolean;
34
+ get focusedNode(): any;
35
+ get expandedNodes(): any[];
36
+ get activeNodes(): any[];
37
+ get hiddenNodes(): any[];
38
+ get selectedLeafNodes(): any[];
39
+ getNodeByPath(path: any[], startNode?: any): TreeNode;
40
+ getNodeById(id: any): any;
41
+ getNodeBy(predicate: any, startNode?: any): any;
42
+ isExpanded(node: any): boolean;
43
+ isHidden(node: any): boolean;
44
+ isActive(node: any): boolean;
45
+ isSelected(node: any): boolean;
46
+ ngOnDestroy(): void;
47
+ dispose(): void;
48
+ unsubscribeAll(): void;
49
+ setData({ nodes, options, events }: {
50
+ nodes: any;
51
+ options: any;
52
+ events: any;
53
+ }): void;
54
+ update(): void;
55
+ setFocusedNode(node: any): void;
56
+ setFocus(value: any): void;
57
+ doForAll(fn: any): void;
58
+ focusNextNode(): void;
59
+ focusPreviousNode(): void;
60
+ focusDrillDown(): void;
61
+ focusDrillUp(): void;
62
+ setActiveNode(node: any, value: any, multi?: boolean): void;
63
+ setSelectedNode(node: any, value: any): void;
64
+ setExpandedNode(node: any, value: any): void;
65
+ expandAll(): void;
66
+ collapseAll(): void;
67
+ setIsHidden(node: any, value: any): void;
68
+ setHiddenNodeIds(nodeIds: any): void;
69
+ performKeyAction(node: any, $event: any): boolean;
70
+ filterNodes(filter: any, autoShow?: boolean): void;
71
+ clearFilter(): void;
72
+ moveNode(node: any, to: any): void;
73
+ copyNode(node: any, to: any): void;
74
+ getState(): {
75
+ expandedNodeIds: IDTypeDictionary;
76
+ selectedLeafNodeIds: IDTypeDictionary;
77
+ activeNodeIds: IDTypeDictionary;
78
+ hiddenNodeIds: IDTypeDictionary;
79
+ focusedNodeId: IDType;
80
+ };
81
+ setState(state: any): void;
82
+ subscribeToState(fn: any): void;
83
+ canMoveNode(node: any, to: any, fromIndex?: any): boolean;
84
+ calculateExpandedNodes(): void;
85
+ private _filterNode;
86
+ private _calculateExpandedNodes;
87
+ private _setActiveNodeSingle;
88
+ private _setActiveNodeMulti;
89
+ static ɵfac: i0.ɵɵFactoryDeclaration<TreeModel, never>;
90
+ static ɵprov: i0.ɵɵInjectableDeclaration<TreeModel>;
91
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ali-hm/angular-tree-component",
3
- "version": "18.0.0",
3
+ "version": "18.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,13 +25,13 @@
25
25
  "angular tree component"
26
26
  ],
27
27
  "peerDependencies": {
28
- "@angular/common": ">=18.0.0",
29
- "@angular/core": ">=18.0.0",
30
- "mobx": "^6.13.5"
28
+ "@angular/common": ">=14.0.0",
29
+ "@angular/core": ">=14.0.0",
30
+ "mobx": "^6.10.2"
31
31
  },
32
32
  "dependencies": {
33
- "mobx": "~6.13.5",
34
- "tslib": "^2.5.0"
33
+ "mobx": "~4.14.1",
34
+ "tslib": "^2.0.0"
35
35
  },
36
36
  "exports": {
37
37
  "./css/angular-tree-component.css": {
@@ -42,12 +42,18 @@
42
42
  },
43
43
  ".": {
44
44
  "types": "./index.d.ts",
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"
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"
48
50
  }
49
51
  },
50
- "module": "fesm2022/ali-hm-angular-tree-component.mjs",
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",
51
57
  "typings": "index.d.ts",
52
58
  "sideEffects": false
53
59
  }
package/public-api.d.ts CHANGED
@@ -1 +1 @@
1
- export * from './lib/angular-tree-component.module';
1
+ export * from './lib/angular-tree-component.module';
@@ -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
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeNodeChildrenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: TreeNodeChildrenComponent, selector: "tree-node-children", inputs: { node: "node", templates: "templates" }, ngImport: i0, template: `
20
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
21
- <div
22
- [class.tree-children]="true"
23
- [class.tree-children-no-padding]="node.options.levelPadding"
24
- *treeAnimateOpen="
25
- node.isExpanded;
26
- speed: node.options.animateSpeed;
27
- acceleration: node.options.animateAcceleration;
28
- enabled: node.options.animateExpand
29
- "
30
- >
31
- <tree-node-collection
32
- *ngIf="node.children"
33
- [nodes]="node.children"
34
- [templates]="templates"
35
- [treeModel]="node.treeModel"
36
- >
37
- </tree-node-collection>
38
- <tree-loading-component
39
- [style.padding-left]="node.getNodePadding()"
40
- class="tree-node-loading"
41
- *ngIf="!node.children"
42
- [template]="templates.loadingTemplate"
43
- [node]="node"
44
- ></tree-loading-component>
45
- </div>
46
- </ng-container>
47
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => i2.LoadingComponent), selector: "tree-loading-component", inputs: ["template", "node"] }, { kind: "component", type: i0.forwardRef(() => TreeNodeCollectionComponent), selector: "tree-node-collection", inputs: ["nodes", "treeModel", "templates"] }, { kind: "directive", type: i0.forwardRef(() => i3.TreeAnimateOpenDirective), selector: "[treeAnimateOpen]", inputs: ["treeAnimateOpenSpeed", "treeAnimateOpenAcceleration", "treeAnimateOpenEnabled", "treeAnimateOpen"] }, { kind: "directive", type: i0.forwardRef(() => i4.TreeMobxAutorunDirective), selector: "[treeMobxAutorun]", inputs: ["treeMobxAutorun"] }], encapsulation: i0.ViewEncapsulation.None }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", 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
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeNodeCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
130
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: TreeNodeCollectionComponent, selector: "tree-node-collection", inputs: { nodes: "nodes", treeModel: "treeModel", templates: "templates" }, ngImport: i0, template: `
131
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
132
- <div [style.margin-top]="marginTop">
133
- <tree-node
134
- *ngFor="let node of viewportNodes; let i = index; trackBy: trackNode"
135
- [node]="node"
136
- [index]="i"
137
- [templates]="templates"
138
- >
139
- </tree-node>
140
- </div>
141
- </ng-container>
142
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i0.forwardRef(() => TreeNodeComponent), selector: "TreeNode, tree-node", inputs: ["node", "index", "templates"] }, { kind: "directive", type: i0.forwardRef(() => i4.TreeMobxAutorunDirective), selector: "[treeMobxAutorun]", inputs: ["treeMobxAutorun"] }], encapsulation: i0.ViewEncapsulation.None }); }
143
- }
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: "18.2.8", 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
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
184
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: TreeNodeComponent, selector: "TreeNode, tree-node", inputs: { node: "node", index: "index", templates: "templates" }, ngImport: i0, template: `
185
- <ng-container *treeMobxAutorun="{ dontDetach: true }">
186
- <div
187
- *ngIf="!templates.treeNodeFullTemplate"
188
- [class]="node.getClass()"
189
- [class.tree-node]="true"
190
- [class.tree-node-expanded]="node.isExpanded && node.hasChildren"
191
- [class.tree-node-collapsed]="node.isCollapsed && node.hasChildren"
192
- [class.tree-node-leaf]="node.isLeaf"
193
- [class.tree-node-active]="node.isActive"
194
- [class.tree-node-focused]="node.isFocused"
195
- >
196
- <tree-node-drop-slot
197
- *ngIf="index === 0"
198
- [dropIndex]="node.index"
199
- [node]="node.parent"
200
- ></tree-node-drop-slot>
201
-
202
- <tree-node-wrapper
203
- [node]="node"
204
- [index]="index"
205
- [templates]="templates"
206
- ></tree-node-wrapper>
207
-
208
- <tree-node-children
209
- [node]="node"
210
- [templates]="templates"
211
- ></tree-node-children>
212
- <tree-node-drop-slot
213
- [dropIndex]="node.index + 1"
214
- [node]="node.parent"
215
- ></tree-node-drop-slot>
216
- </div>
217
- <ng-container
218
- [ngTemplateOutlet]="templates.treeNodeFullTemplate"
219
- [ngTemplateOutletContext]="{
220
- $implicit: node,
221
- node: node,
222
- index: index,
223
- templates: templates
224
- }"
225
- >
226
- </ng-container>
227
- </ng-container>
228
- `, 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 }); }
229
- }
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10cmVlLWNvbXBvbmVudC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS1ub2RlLWNvbGxlY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGlCQUFpQixFQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQXdDMUUsTUFBTSxPQUFPLHlCQUF5QjtpSUFBekIseUJBQXlCO3FIQUF6Qix5QkFBeUIsNEdBOUIxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVCxrVkF3QlUsMkJBQTJCOzsyRkF0QjNCLHlCQUF5QjtrQkFsQ3JDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUNmLGlCQUFpQixDQUFDLElBQUksWUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7OEJBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7O0FBb0JSLE1BQU0sT0FBTywyQkFBMkI7SUFqQnhDO1FBK0NFLGFBQVEsR0FBRyxFQUFFLENBQUM7S0FxQ2Y7SUFsRUMsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBVVMsSUFBSSxTQUFTO1FBQ3JCLE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxhQUFhLElBQUksSUFB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QkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZWFjdGlvbiB9IGZyb20gJ21vYngnO1xyXG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBjb21wdXRlZCwgYWN0aW9uIH0gZnJvbSAnLi4vbW9ieC1hbmd1bGFyL21vYngtcHJveHknO1xyXG5pbXBvcnQgeyBUcmVlVmlydHVhbFNjcm9sbCB9IGZyb20gJy4uL21vZGVscy90cmVlLXZpcnR1YWwtc2Nyb2xsLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUubW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJlZS1ub2RlLWNoaWxkcmVuJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHN0eWxlczogW10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250YWluZXIgKnRyZWVNb2J4QXV0b3J1bj1cInsgZG9udERldGFjaDogdHJ1ZSB9XCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbY2xhc3MudHJlZS1jaGlsZHJlbl09XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MudHJlZS1jaGlsZHJlbi1uby1wYWRkaW5nXT1cIm5vZGUub3B0aW9ucy5sZXZlbFBhZGRpbmdcIlxyXG4gICAgICAgICp0cmVlQW5pbWF0ZU9wZW49XCJcclxuICAgICAgICAgIG5vZGUuaXNFeHBhbmRlZDtcclxuICAgICAgICAgIHNwZWVkOiBub2RlLm9wdGlvbnMuYW5pbWF0ZVNwZWVkO1xyXG4gICAgICAgICAgYWNjZWxlcmF0aW9uOiBub2RlLm9wdGlvbnMuYW5pbWF0ZUFjY2VsZXJhdGlvbjtcclxuICAgICAgICAgIGVuYWJsZWQ6IG5vZGUub3B0aW9ucy5hbmltYXRlRXhwYW5kXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0cmVlLW5vZGUtY29sbGVjdGlvblxyXG4gICAgICAgICAgKm5nSWY9XCJub2RlLmNoaWxkcmVuXCJcclxuICAgICAgICAgIFtub2Rlc109XCJub2RlLmNoaWxkcmVuXCJcclxuICAgICAgICAgIFt0ZW1wbGF0ZXNdPVwidGVtcGxhdGVzXCJcclxuICAgICAgICAgIFt0cmVlTW9kZWxdPVwibm9kZS50cmVlTW9kZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3RyZWUtbm9kZS1jb2xsZWN0aW9uPlxyXG4gICAgICAgIDx0cmVlLWxvYWRpbmctY29tcG9uZW50XHJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cIm5vZGUuZ2V0Tm9kZVBhZGRpbmcoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cInRyZWUtbm9kZS1sb2FkaW5nXCJcclxuICAgICAgICAgICpuZ0lmPVwiIW5vZGUuY2hpbGRyZW5cIlxyXG4gICAgICAgICAgW3RlbXBsYXRlXT1cInRlbXBsYXRlcy5sb2FkaW5nVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXHJcbiAgICAgICAgPjwvdHJlZS1sb2FkaW5nLWNvbXBvbmVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUNoaWxkcmVuQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBub2RlOiBUcmVlTm9kZTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZXM6IGFueTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cmVlLW5vZGUtY29sbGVjdGlvbicsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRhaW5lciAqdHJlZU1vYnhBdXRvcnVuPVwieyBkb250RGV0YWNoOiB0cnVlIH1cIj5cclxuICAgICAgPGRpdiBbc3R5bGUubWFyZ2luLXRvcF09XCJtYXJnaW5Ub3BcIj5cclxuICAgICAgICA8dHJlZS1ub2RlXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiB2aWV3cG9ydE5vZGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja05vZGVcIlxyXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXHJcbiAgICAgICAgICBbaW5kZXhdPVwiaVwiXHJcbiAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvdHJlZS1ub2RlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlQ29sbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKVxyXG4gIGdldCBub2RlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9ub2RlcztcclxuICB9XHJcbiAgc2V0IG5vZGVzKG5vZGVzKSB7XHJcbiAgICB0aGlzLnNldE5vZGVzKG5vZGVzKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHRyZWVNb2RlbDogVHJlZU1vZGVsO1xyXG5cclxuICBAb2JzZXJ2YWJsZSBfbm9kZXM7XHJcbiAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsOiBUcmVlVmlydHVhbFNjcm9sbDsgLy8gQ2Fubm90IGluamVjdCB0aGlzLCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluc2lkZSB0cmVlTm9kZVRlbXBsYXRlRnVsbFxyXG4gIEBJbnB1dCgpIHRlbXBsYXRlcztcclxuXHJcbiAgQG9ic2VydmFibGUgdmlld3BvcnROb2RlczogVHJlZU5vZGVbXTtcclxuXHJcbiAgQGNvbXB1dGVkIGdldCBtYXJnaW5Ub3AoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpcnN0Tm9kZSA9XHJcbiAgICAgIHRoaXMudmlld3BvcnROb2RlcyAmJiB0aGlzLnZpZXdwb3J0Tm9kZXMubGVuZ3RoICYmIHRoaXMudmlld3BvcnROb2Rlc1swXTtcclxuICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb24gPVxyXG4gICAgICBmaXJzdE5vZGUgJiYgZmlyc3ROb2RlLnBhcmVudFxyXG4gICAgICAgID8gZmlyc3ROb2RlLnBvc2l0aW9uIC1cclxuICAgICAgICAgIGZpcnN0Tm9kZS5wYXJlbnQucG9zaXRpb24gLVxyXG4gICAgICAgICAgZmlyc3ROb2RlLnBhcmVudC5nZXRTZWxmSGVpZ2h0KClcclxuICAgICAgICA6IDA7XHJcblxyXG4gICAgcmV0dXJuIGAke3JlbGF0aXZlUG9zaXRpb259cHhgO1xyXG4gIH1cclxuXHJcbiAgX2Rpc3Bvc2UgPSBbXTtcclxuXHJcbiAgQGFjdGlvbiBzZXROb2Rlcyhub2Rlcykge1xyXG4gICAgdGhpcy5fbm9kZXMgPSBub2RlcztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gdGhpcy50cmVlTW9kZWwudmlydHVhbFNjcm9sbDtcclxuICAgIHRoaXMuX2Rpc3Bvc2UgPSBbXHJcbiAgICAgIC8vIHJldHVybiBub2RlIGluZGV4ZXMgc28gd2UgY2FuIGNvbXBhcmUgc3RydWN0dXJhbGx5LFxyXG4gICAgICByZWFjdGlvbihcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy52aXJ0dWFsU2Nyb2xsXHJcbiAgICAgICAgICAgIC5nZXRWaWV3cG9ydE5vZGVzKHRoaXMubm9kZXMpXHJcbiAgICAgICAgICAgIC5tYXAobiA9PiBuLmluZGV4KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5vZGVJbmRleGVzID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnROb2RlcyA9IG5vZGVJbmRleGVzLm1hcChpID0+IHRoaXMubm9kZXNbaV0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBjb21wYXJlU3RydWN0dXJhbDogdHJ1ZSwgZmlyZUltbWVkaWF0ZWx5OiB0cnVlIH0gYXMgYW55XHJcbiAgICAgICksXHJcbiAgICAgIHJlYWN0aW9uKFxyXG4gICAgICAgICgpID0+IHRoaXMubm9kZXMsXHJcbiAgICAgICAgbm9kZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWV3cG9ydE5vZGVzID0gdGhpcy52aXJ0dWFsU2Nyb2xsLmdldFZpZXdwb3J0Tm9kZXMobm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fZGlzcG9zZS5mb3JFYWNoKGQgPT4gZCgpKTtcclxuICB9XHJcblxyXG4gIHRyYWNrTm9kZShpbmRleCwgbm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuaWQ7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RyZWVOb2RlLCB0cmVlLW5vZGUnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3R5bGVzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRhaW5lciAqdHJlZU1vYnhBdXRvcnVuPVwieyBkb250RGV0YWNoOiB0cnVlIH1cIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiIXRlbXBsYXRlcy50cmVlTm9kZUZ1bGxUZW1wbGF0ZVwiXHJcbiAgICAgICAgW2NsYXNzXT1cIm5vZGUuZ2V0Q2xhc3MoKVwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtbm9kZV09XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MudHJlZS1ub2RlLWV4cGFuZGVkXT1cIm5vZGUuaXNFeHBhbmRlZCAmJiBub2RlLmhhc0NoaWxkcmVuXCJcclxuICAgICAgICBbY2xhc3MudHJlZS1ub2RlLWNvbGxhcHNlZF09XCJub2RlLmlzQ29sbGFwc2VkICYmIG5vZGUuaGFzQ2hpbGRyZW5cIlxyXG4gICAgICAgIFtjbGFzcy50cmVlLW5vZGUtbGVhZl09XCJub2RlLmlzTGVhZlwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtbm9kZS1hY3RpdmVdPVwibm9kZS5pc0FjdGl2ZVwiXHJcbiAgICAgICAgW2NsYXNzLnRyZWUtbm9kZS1mb2N1c2VkXT1cIm5vZGUuaXNGb2N1c2VkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0cmVlLW5vZGUtZHJvcC1zbG90XHJcbiAgICAgICAgICAqbmdJZj1cImluZGV4ID09PSAwXCJcclxuICAgICAgICAgIFtkcm9wSW5kZXhdPVwibm9kZS5pbmRleFwiXHJcbiAgICAgICAgICBbbm9kZV09XCJub2RlLnBhcmVudFwiXHJcbiAgICAgICAgPjwvdHJlZS1ub2RlLWRyb3Atc2xvdD5cclxuXHJcbiAgICAgICAgPHRyZWUtbm9kZS13cmFwcGVyXHJcbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcclxuICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgPjwvdHJlZS1ub2RlLXdyYXBwZXI+XHJcblxyXG4gICAgICAgIDx0cmVlLW5vZGUtY2hpbGRyZW5cclxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxyXG4gICAgICAgICAgW3RlbXBsYXRlc109XCJ0ZW1wbGF0ZXNcIlxyXG4gICAgICAgID48L3RyZWUtbm9kZS1jaGlsZHJlbj5cclxuICAgICAgICA8dHJlZS1ub2RlLWRyb3Atc2xvdFxyXG4gICAgICAgICAgW2Ryb3BJbmRleF09XCJub2RlLmluZGV4ICsgMVwiXHJcbiAgICAgICAgICBbbm9kZV09XCJub2RlLnBhcmVudFwiXHJcbiAgICAgICAgPjwvdHJlZS1ub2RlLWRyb3Atc2xvdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXMudHJlZU5vZGVGdWxsVGVtcGxhdGVcIlxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAkaW1wbGljaXQ6IG5vZGUsXHJcbiAgICAgICAgICBub2RlOiBub2RlLFxyXG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZXNcclxuICAgICAgICB9XCJcclxuICAgICAgPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBub2RlOiBUcmVlTm9kZTtcclxuICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlczogYW55O1xyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==