@ali-hm/angular-tree-component 18.0.1 → 18.0.2

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/{esm2020 → esm2022}/ali-hm-angular-tree-component.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/angular-tree-component.module.mjs +100 -100
  3. package/{esm2020 → esm2022}/lib/components/loading.component.mjs +21 -21
  4. package/{esm2020 → esm2022}/lib/components/tree-node-checkbox.component.mjs +15 -15
  5. package/esm2022/lib/components/tree-node-collection.component.mjs +284 -0
  6. package/{esm2020 → esm2022}/lib/components/tree-node-content.component.mjs +23 -23
  7. package/{esm2020 → esm2022}/lib/components/tree-node-drop-slot.component.mjs +26 -26
  8. package/{esm2020 → esm2022}/lib/components/tree-node-expander.component.mjs +16 -16
  9. package/{esm2020 → esm2022}/lib/components/tree-node-wrapper.component.mjs +24 -24
  10. package/{esm2020 → esm2022}/lib/components/tree-viewport.component.mjs +55 -55
  11. package/esm2022/lib/components/tree.component.mjs +186 -0
  12. package/{esm2020 → esm2022}/lib/constants/events.mjs +19 -19
  13. package/{esm2020 → esm2022}/lib/constants/keys.mjs +9 -9
  14. package/{esm2020 → esm2022}/lib/defs/api.mjs +1 -1
  15. package/esm2022/lib/directives/tree-animate-open.directive.mjs +101 -0
  16. package/{esm2020 → esm2022}/lib/directives/tree-drag.directive.mjs +65 -65
  17. package/esm2022/lib/directives/tree-drop.directive.mjs +127 -0
  18. package/{esm2020 → esm2022}/lib/mobx-angular/mobx-proxy.mjs +16 -16
  19. package/esm2022/lib/mobx-angular/tree-mobx-autorun.directive.mjs +40 -0
  20. package/{esm2020 → esm2022}/lib/models/tree-dragged-element.model.mjs +25 -25
  21. package/esm2022/lib/models/tree-node.model.mjs +390 -0
  22. package/esm2022/lib/models/tree-options.model.mjs +150 -0
  23. package/esm2022/lib/models/tree-virtual-scroll.model.mjs +197 -0
  24. package/esm2022/lib/models/tree.model.mjs +546 -0
  25. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  26. package/{fesm2020 → fesm2022}/ali-hm-angular-tree-component.mjs +2080 -2080
  27. package/{fesm2020 → fesm2022}/ali-hm-angular-tree-component.mjs.map +1 -1
  28. package/index.d.ts +5 -5
  29. package/lib/angular-tree-component.module.d.ts +43 -43
  30. package/lib/components/loading.component.d.ts +9 -9
  31. package/lib/components/tree-node-checkbox.component.d.ts +7 -7
  32. package/lib/components/tree-node-collection.component.d.ts +34 -34
  33. package/lib/components/tree-node-content.component.d.ts +10 -10
  34. package/lib/components/tree-node-drop-slot.component.d.ts +10 -10
  35. package/lib/components/tree-node-expander.component.d.ts +7 -7
  36. package/lib/components/tree-node-wrapper.component.d.ts +9 -9
  37. package/lib/components/tree-viewport.component.d.ts +17 -17
  38. package/lib/components/tree.component.d.ts +47 -47
  39. package/lib/constants/events.d.ts +19 -19
  40. package/lib/constants/keys.d.ts +9 -9
  41. package/lib/defs/api.d.ts +611 -611
  42. package/lib/directives/tree-animate-open.directive.d.ts +20 -20
  43. package/lib/directives/tree-drag.directive.d.ts +21 -21
  44. package/lib/directives/tree-drop.directive.d.ts +33 -33
  45. package/lib/mobx-angular/mobx-proxy.d.ts +7 -7
  46. package/lib/mobx-angular/tree-mobx-autorun.directive.d.ts +17 -17
  47. package/lib/models/tree-dragged-element.model.d.ts +9 -9
  48. package/lib/models/tree-node.model.d.ts +83 -83
  49. package/lib/models/tree-options.model.d.ts +77 -77
  50. package/lib/models/tree-virtual-scroll.model.d.ts +27 -27
  51. package/lib/models/tree.model.d.ts +91 -91
  52. package/package.json +10 -16
  53. package/public-api.d.ts +1 -1
  54. package/esm2020/lib/components/tree-node-collection.component.mjs +0 -284
  55. package/esm2020/lib/components/tree.component.mjs +0 -186
  56. package/esm2020/lib/directives/tree-animate-open.directive.mjs +0 -101
  57. package/esm2020/lib/directives/tree-drop.directive.mjs +0 -127
  58. package/esm2020/lib/mobx-angular/tree-mobx-autorun.directive.mjs +0 -40
  59. package/esm2020/lib/models/tree-node.model.mjs +0 -390
  60. package/esm2020/lib/models/tree-options.model.mjs +0 -150
  61. package/esm2020/lib/models/tree-virtual-scroll.model.mjs +0 -197
  62. package/esm2020/lib/models/tree.model.mjs +0 -546
  63. package/fesm2015/ali-hm-angular-tree-component.mjs +0 -2511
  64. package/fesm2015/ali-hm-angular-tree-component.mjs.map +0 -1
@@ -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.1",
3
+ "version": "18.0.2",
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": ">=14.0.0",
29
- "@angular/core": ">=14.0.0",
30
- "mobx": "^6.10.2"
28
+ "@angular/common": ">=18.0.0",
29
+ "@angular/core": ">=18.0.0",
30
+ "mobx": "^6.13.5"
31
31
  },
32
32
  "dependencies": {
33
- "mobx": "~4.14.1",
34
- "tslib": "^2.0.0"
33
+ "mobx": "~6.13.5",
34
+ "tslib": "^2.5.0"
35
35
  },
36
36
  "exports": {
37
37
  "./css/angular-tree-component.css": {
@@ -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
  }
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
- }
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=