concepto-user-controls 0.0.8 → 0.0.9
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.
- package/esm2022/lib/concepto-tree/components/tree-node/tree-node.component.mjs +301 -0
- package/esm2022/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.mjs +90 -0
- package/esm2022/lib/concepto-tree/components/tree-node-content/tree-node-content.component.mjs +65 -0
- package/esm2022/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.mjs +74 -0
- package/esm2022/lib/concepto-tree/components/tree-root/tree-root.component.mjs +230 -0
- package/esm2022/lib/concepto-tree/components/tree-viewport/tree-viewport.component.mjs +216 -0
- package/esm2022/lib/concepto-tree/concepto-tree.component.mjs +214 -13
- package/esm2022/lib/concepto-tree/core/models/tree-events.model.mjs +2 -0
- package/esm2022/lib/concepto-tree/core/models/tree-node.model.mjs +102 -0
- package/esm2022/lib/concepto-tree/core/models/tree-options.model.mjs +24 -0
- package/esm2022/lib/concepto-tree/core/models/tree.model.mjs +313 -0
- package/esm2022/lib/concepto-tree/core/services/tree-drag-drop.service.mjs +27 -0
- package/esm2022/lib/concepto-tree/directives/tree-drag.directive.mjs +69 -0
- package/esm2022/lib/concepto-tree/directives/tree-drop.directive.mjs +124 -0
- package/esm2022/lib/concepto-tree/directives/tree-node-template.directive.mjs +19 -0
- package/fesm2022/concepto-user-controls.mjs +1818 -12
- package/fesm2022/concepto-user-controls.mjs.map +1 -1
- package/lib/concepto-tree/components/tree-node/tree-node.component.d.ts +19 -0
- package/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.d.ts +17 -0
- package/lib/concepto-tree/components/tree-node-content/tree-node-content.component.d.ts +18 -0
- package/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.d.ts +12 -0
- package/lib/concepto-tree/components/tree-root/tree-root.component.d.ts +35 -0
- package/lib/concepto-tree/components/tree-viewport/tree-viewport.component.d.ts +33 -0
- package/lib/concepto-tree/concepto-tree.component.d.ts +32 -1
- package/lib/concepto-tree/core/models/tree-events.model.d.ts +13 -0
- package/lib/concepto-tree/core/models/tree-node.model.d.ts +39 -0
- package/lib/concepto-tree/core/models/tree-options.model.d.ts +28 -0
- package/lib/concepto-tree/core/models/tree.model.d.ts +54 -0
- package/lib/concepto-tree/core/services/tree-drag-drop.service.d.ts +11 -0
- package/lib/concepto-tree/directives/tree-drag.directive.d.ts +16 -0
- package/lib/concepto-tree/directives/tree-drop.directive.d.ts +25 -0
- package/lib/concepto-tree/directives/tree-node-template.directive.d.ts +8 -0
- package/package.json +1 -1
|
@@ -1,19 +1,220 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { TreeRootComponent } from './components/tree-root/tree-root.component';
|
|
2
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
3
8
|
export class ConceptoTreeComponent {
|
|
9
|
+
nodes = [];
|
|
10
|
+
options = {};
|
|
11
|
+
initialized = new EventEmitter();
|
|
12
|
+
toggleExpanded = new EventEmitter();
|
|
13
|
+
activate = new EventEmitter();
|
|
14
|
+
deactivate = new EventEmitter();
|
|
15
|
+
select = new EventEmitter();
|
|
16
|
+
deselect = new EventEmitter();
|
|
17
|
+
focus = new EventEmitter();
|
|
18
|
+
blur = new EventEmitter();
|
|
19
|
+
moveNode = new EventEmitter();
|
|
20
|
+
loadChildren = new EventEmitter();
|
|
21
|
+
treeEvent = new EventEmitter();
|
|
22
|
+
treeRoot;
|
|
23
|
+
isDropdownOpen = signal(false);
|
|
24
|
+
searchTerm = '';
|
|
25
|
+
selectedNode = signal(null);
|
|
26
|
+
// All nodes flattened
|
|
27
|
+
allNodes = [];
|
|
28
|
+
filteredNodes = signal([]);
|
|
29
|
+
get displayField() {
|
|
30
|
+
return this.options.displayField || 'name';
|
|
31
|
+
}
|
|
32
|
+
toggleDropdown() {
|
|
33
|
+
this.isDropdownOpen.update(v => !v);
|
|
34
|
+
if (this.isDropdownOpen()) {
|
|
35
|
+
this.searchTerm = '';
|
|
36
|
+
this.filterNodes();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
closeDropdown() {
|
|
40
|
+
this.isDropdownOpen.set(false);
|
|
41
|
+
}
|
|
42
|
+
filterNodes() {
|
|
43
|
+
if (!this.searchTerm) {
|
|
44
|
+
this.filteredNodes.set(this.allNodes);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const term = this.searchTerm.toLowerCase();
|
|
48
|
+
this.filteredNodes.set(this.allNodes.filter(node => String(node.data[this.displayField]).toLowerCase().includes(term)));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
selectNode(node) {
|
|
52
|
+
this.selectedNode.set(node);
|
|
53
|
+
this.isDropdownOpen.set(false);
|
|
54
|
+
// Activate in tree
|
|
55
|
+
if (this.treeRoot && this.treeRoot.treeModel) {
|
|
56
|
+
this.treeRoot.treeModel.activateNode(node);
|
|
57
|
+
node.ensureVisible();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
onTreeInitialized(event) {
|
|
61
|
+
this.initialized.emit(event);
|
|
62
|
+
// Get all nodes for the dropdown
|
|
63
|
+
if (event.treeModel) {
|
|
64
|
+
this.allNodes = event.treeModel.getAllNodes();
|
|
65
|
+
this.filteredNodes.set(this.allNodes);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
onNodeActivated(event) {
|
|
69
|
+
this.activate.emit(event);
|
|
70
|
+
if (event.node) {
|
|
71
|
+
this.selectedNode.set(event.node);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
4
74
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConceptoTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConceptoTreeComponent, isStandalone: true, selector: "lib-concepto-tree", ngImport: i0, template: `
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
75
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConceptoTreeComponent, isStandalone: true, selector: "lib-concepto-tree", inputs: { nodes: "nodes", options: "options" }, outputs: { initialized: "initialized", toggleExpanded: "toggleExpanded", activate: "activate", deactivate: "deactivate", select: "select", deselect: "deselect", focus: "focus", blur: "blur", moveNode: "moveNode", loadChildren: "loadChildren", treeEvent: "treeEvent" }, viewQueries: [{ propertyName: "treeRoot", first: true, predicate: TreeRootComponent, descendants: true }], ngImport: i0, template: `
|
|
76
|
+
<div class="concepto-tree-container">
|
|
77
|
+
<div class="search-bar-container">
|
|
78
|
+
<div class="custom-select" [class.open]="isDropdownOpen()" (click)="toggleDropdown()">
|
|
79
|
+
<div class="selected-option">
|
|
80
|
+
{{ selectedNode() ? selectedNode()?.data?.[displayField] : 'Buscar nodo...' }}
|
|
81
|
+
</div>
|
|
82
|
+
<div class="arrow">▼</div>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div class="backdrop" *ngIf="isDropdownOpen()" (click)="closeDropdown()"></div>
|
|
86
|
+
|
|
87
|
+
<div class="dropdown-menu" *ngIf="isDropdownOpen()">
|
|
88
|
+
<div class="search-input-wrapper" (click)="$event.stopPropagation()">
|
|
89
|
+
<input
|
|
90
|
+
type="text"
|
|
91
|
+
[(ngModel)]="searchTerm"
|
|
92
|
+
(ngModelChange)="filterNodes()"
|
|
93
|
+
placeholder="Buscar..."
|
|
94
|
+
class="search-input"
|
|
95
|
+
#searchInput
|
|
96
|
+
autofocus
|
|
97
|
+
>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="options-list">
|
|
100
|
+
<div
|
|
101
|
+
*ngFor="let node of filteredNodes()"
|
|
102
|
+
class="option-item"
|
|
103
|
+
(click)="selectNode(node); $event.stopPropagation()"
|
|
104
|
+
>
|
|
105
|
+
{{ node.data[displayField] }}
|
|
106
|
+
</div>
|
|
107
|
+
<div *ngIf="filteredNodes().length === 0" class="no-results">
|
|
108
|
+
No se encontraron resultados
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<tree-root
|
|
115
|
+
[nodes]="nodes"
|
|
116
|
+
[options]="options"
|
|
117
|
+
(initialized)="onTreeInitialized($event)"
|
|
118
|
+
(toggleExpanded)="toggleExpanded.emit($event)"
|
|
119
|
+
(activate)="onNodeActivated($event)"
|
|
120
|
+
(deactivate)="deactivate.emit($event)"
|
|
121
|
+
(select)="select.emit($event)"
|
|
122
|
+
(deselect)="deselect.emit($event)"
|
|
123
|
+
(focus)="focus.emit($event)"
|
|
124
|
+
(blur)="blur.emit($event)"
|
|
125
|
+
(moveNode)="moveNode.emit($event)"
|
|
126
|
+
(loadChildren)="loadChildren.emit($event)"
|
|
127
|
+
(treeEvent)="treeEvent.emit($event)"
|
|
128
|
+
></tree-root>
|
|
129
|
+
</div>
|
|
130
|
+
`, isInline: true, styles: [".concepto-tree-container{display:flex;flex-direction:column;height:100%;gap:10px}.search-bar-container{position:relative;width:100%;z-index:100}.custom-select{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;background:#fff;-webkit-user-select:none;user-select:none;transition:border-color .2s}.custom-select:hover{border-color:#888}.custom-select.open{border-color:#007bff;border-bottom-left-radius:0;border-bottom-right-radius:0}.backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:101;background:transparent}.dropdown-menu{position:absolute;top:100%;left:0;width:100%;background:#fff;border:1px solid #ccc;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 4px 6px #0000001a;margin-top:0;max-height:300px;overflow-y:auto;z-index:102}.search-input-wrapper{padding:8px;position:sticky;top:0;background:#fff;border-bottom:1px solid #eee;z-index:103}.search-input{width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;outline:none}.search-input:focus{border-color:#007bff}.options-list{max-height:250px;overflow-y:auto}.option-item{padding:8px 12px;cursor:pointer;transition:background-color .1s}.option-item:hover{background-color:#f5f5f5}.no-results{padding:12px;color:#888;font-style:italic;text-align:center}tree-root{flex:1;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TreeRootComponent, selector: "tree-root", inputs: ["nodes", "options"], outputs: ["initialized", "toggleExpanded", "activate", "deactivate", "select", "deselect", "focus", "blur", "moveNode", "loadChildren", "treeEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
131
|
}
|
|
11
132
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConceptoTreeComponent, decorators: [{
|
|
12
133
|
type: Component,
|
|
13
|
-
args: [{ selector: 'lib-concepto-tree', standalone: true, imports: [], template: `
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
134
|
+
args: [{ selector: 'lib-concepto-tree', standalone: true, imports: [CommonModule, FormsModule, TreeRootComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
135
|
+
<div class="concepto-tree-container">
|
|
136
|
+
<div class="search-bar-container">
|
|
137
|
+
<div class="custom-select" [class.open]="isDropdownOpen()" (click)="toggleDropdown()">
|
|
138
|
+
<div class="selected-option">
|
|
139
|
+
{{ selectedNode() ? selectedNode()?.data?.[displayField] : 'Buscar nodo...' }}
|
|
140
|
+
</div>
|
|
141
|
+
<div class="arrow">▼</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div class="backdrop" *ngIf="isDropdownOpen()" (click)="closeDropdown()"></div>
|
|
145
|
+
|
|
146
|
+
<div class="dropdown-menu" *ngIf="isDropdownOpen()">
|
|
147
|
+
<div class="search-input-wrapper" (click)="$event.stopPropagation()">
|
|
148
|
+
<input
|
|
149
|
+
type="text"
|
|
150
|
+
[(ngModel)]="searchTerm"
|
|
151
|
+
(ngModelChange)="filterNodes()"
|
|
152
|
+
placeholder="Buscar..."
|
|
153
|
+
class="search-input"
|
|
154
|
+
#searchInput
|
|
155
|
+
autofocus
|
|
156
|
+
>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="options-list">
|
|
159
|
+
<div
|
|
160
|
+
*ngFor="let node of filteredNodes()"
|
|
161
|
+
class="option-item"
|
|
162
|
+
(click)="selectNode(node); $event.stopPropagation()"
|
|
163
|
+
>
|
|
164
|
+
{{ node.data[displayField] }}
|
|
165
|
+
</div>
|
|
166
|
+
<div *ngIf="filteredNodes().length === 0" class="no-results">
|
|
167
|
+
No se encontraron resultados
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<tree-root
|
|
174
|
+
[nodes]="nodes"
|
|
175
|
+
[options]="options"
|
|
176
|
+
(initialized)="onTreeInitialized($event)"
|
|
177
|
+
(toggleExpanded)="toggleExpanded.emit($event)"
|
|
178
|
+
(activate)="onNodeActivated($event)"
|
|
179
|
+
(deactivate)="deactivate.emit($event)"
|
|
180
|
+
(select)="select.emit($event)"
|
|
181
|
+
(deselect)="deselect.emit($event)"
|
|
182
|
+
(focus)="focus.emit($event)"
|
|
183
|
+
(blur)="blur.emit($event)"
|
|
184
|
+
(moveNode)="moveNode.emit($event)"
|
|
185
|
+
(loadChildren)="loadChildren.emit($event)"
|
|
186
|
+
(treeEvent)="treeEvent.emit($event)"
|
|
187
|
+
></tree-root>
|
|
188
|
+
</div>
|
|
189
|
+
`, styles: [".concepto-tree-container{display:flex;flex-direction:column;height:100%;gap:10px}.search-bar-container{position:relative;width:100%;z-index:100}.custom-select{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;background:#fff;-webkit-user-select:none;user-select:none;transition:border-color .2s}.custom-select:hover{border-color:#888}.custom-select.open{border-color:#007bff;border-bottom-left-radius:0;border-bottom-right-radius:0}.backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:101;background:transparent}.dropdown-menu{position:absolute;top:100%;left:0;width:100%;background:#fff;border:1px solid #ccc;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 4px 6px #0000001a;margin-top:0;max-height:300px;overflow-y:auto;z-index:102}.search-input-wrapper{padding:8px;position:sticky;top:0;background:#fff;border-bottom:1px solid #eee;z-index:103}.search-input{width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;outline:none}.search-input:focus{border-color:#007bff}.options-list{max-height:250px;overflow-y:auto}.option-item{padding:8px 12px;cursor:pointer;transition:background-color .1s}.option-item:hover{background-color:#f5f5f5}.no-results{padding:12px;color:#888;font-style:italic;text-align:center}tree-root{flex:1;overflow:hidden}\n"] }]
|
|
190
|
+
}], propDecorators: { nodes: [{
|
|
191
|
+
type: Input
|
|
192
|
+
}], options: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], initialized: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], toggleExpanded: [{
|
|
197
|
+
type: Output
|
|
198
|
+
}], activate: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], deactivate: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], select: [{
|
|
203
|
+
type: Output
|
|
204
|
+
}], deselect: [{
|
|
205
|
+
type: Output
|
|
206
|
+
}], focus: [{
|
|
207
|
+
type: Output
|
|
208
|
+
}], blur: [{
|
|
209
|
+
type: Output
|
|
210
|
+
}], moveNode: [{
|
|
211
|
+
type: Output
|
|
212
|
+
}], loadChildren: [{
|
|
213
|
+
type: Output
|
|
214
|
+
}], treeEvent: [{
|
|
215
|
+
type: Output
|
|
216
|
+
}], treeRoot: [{
|
|
217
|
+
type: ViewChild,
|
|
218
|
+
args: [TreeRootComponent]
|
|
219
|
+
}] } });
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2VwdG8tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25jZXB0by11c2VyLWNvbnRyb2xzL3NyYy9saWIvY29uY2VwdG8tdHJlZS9jb25jZXB0by10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQW1ML0UsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixLQUFLLEdBQVUsRUFBRSxDQUFDO0lBQ2xCLE9BQU8sR0FBeUIsRUFBRSxDQUFDO0lBRWxDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQzVDLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQy9DLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3pDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQzNDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3ZDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3pDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3RDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3JDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQ3pDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQzdDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQsKzZDQXpEUyxZQUFZLCtQQUFFLFdBQVcsK21CQUFFLGlCQUFpQjs7NEZBMkszQyxxQkFBcUI7a0JBOUtqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLG1CQUN0Qyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURUOzhCQW1IUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFdUIsUUFBUTtzQkFBckMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmVlUm9vdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90cmVlLXJvb3QvdHJlZS1yb290LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSAnLi9jb3JlL21vZGVscy90cmVlLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlRXZlbnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL3RyZWUtZXZlbnRzLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL3RyZWUtbm9kZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb25jZXB0by10cmVlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBUcmVlUm9vdENvbXBvbmVudF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJjb25jZXB0by10cmVlLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdFwiIFtjbGFzcy5vcGVuXT1cImlzRHJvcGRvd25PcGVuKClcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiPlxyXG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb25cIj5cclxuICAgICAgICAgICAgIHt7IHNlbGVjdGVkTm9kZSgpID8gc2VsZWN0ZWROb2RlKCk/LmRhdGE/LltkaXNwbGF5RmllbGRdIDogJ0J1c2NhciBub2RvLi4uJyB9fVxyXG4gICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd1wiPuKWvDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiICpuZ0lmPVwiaXNEcm9wZG93bk9wZW4oKVwiIChjbGljayk9XCJjbG9zZURyb3Bkb3duKClcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImlzRHJvcGRvd25PcGVuKClcIj5cclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIFxyXG4gICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJOb2RlcygpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCdXNjYXIuLi5cIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dFxyXG4gICAgICAgICAgICAgICBhdXRvZm9jdXNcclxuICAgICAgICAgICAgID5cclxuICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1saXN0XCI+XHJcbiAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBmaWx0ZXJlZE5vZGVzKClcIiBcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taXRlbVwiIFxyXG4gICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Tm9kZShub2RlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAge3sgbm9kZS5kYXRhW2Rpc3BsYXlGaWVsZF0gfX1cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkTm9kZXMoKS5sZW5ndGggPT09IDBcIiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cclxuICAgICAgICAgICAgICAgTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvc1xyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHRyZWUtcm9vdFxyXG4gICAgICAgIFtub2Rlc109XCJub2Rlc1wiXHJcbiAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXHJcbiAgICAgICAgKGluaXRpYWxpemVkKT1cIm9uVHJlZUluaXRpYWxpemVkKCRldmVudClcIlxyXG4gICAgICAgICh0b2dnbGVFeHBhbmRlZCk9XCJ0b2dnbGVFeHBhbmRlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChhY3RpdmF0ZSk9XCJvbk5vZGVBY3RpdmF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRlYWN0aXZhdGUpPVwiZGVhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3QpPVwic2VsZWN0LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRlc2VsZWN0KT1cImRlc2VsZWN0LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzKT1cImZvY3VzLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChtb3ZlTm9kZSk9XCJtb3ZlTm9kZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChsb2FkQ2hpbGRyZW4pPVwibG9hZENoaWxkcmVuLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyZWVFdmVudCk9XCJ0cmVlRXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgPjwvdHJlZS1yb290PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICAuY29uY2VwdG8tdHJlZS1jb250YWluZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGdhcDogMTBweDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLnNlYXJjaC1iYXItY29udGFpbmVyIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5jdXN0b20tc2VsZWN0IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBwYWRkaW5nOiA4cHggMTJweDtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLmN1c3RvbS1zZWxlY3Q6aG92ZXIge1xyXG4gICAgICBib3JkZXItY29sb3I6ICM4ODg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5jdXN0b20tc2VsZWN0Lm9wZW4ge1xyXG4gICAgICBib3JkZXItY29sb3I6ICMwMDdiZmY7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5iYWNrZHJvcCB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB6LWluZGV4OiAxMDE7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5kcm9wZG93bi1tZW51IHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB0b3A6IDEwMCU7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcclxuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XHJcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsMCwwLDAuMSk7XHJcbiAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDMwMHB4O1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICB6LWluZGV4OiAxMDI7XHJcbiAgICB9XHJcblxyXG4gICAgLnNlYXJjaC1pbnB1dC13cmFwcGVyIHtcclxuICAgICAgcGFkZGluZzogOHB4O1xyXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcclxuICAgICAgei1pbmRleDogMTAzO1xyXG4gICAgfVxyXG5cclxuICAgIC5zZWFyY2gtaW5wdXQge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgcGFkZGluZzogOHB4O1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5zZWFyY2gtaW5wdXQ6Zm9jdXMge1xyXG4gICAgICBib3JkZXItY29sb3I6ICMwMDdiZmY7XHJcbiAgICB9XHJcblxyXG4gICAgLm9wdGlvbnMtbGlzdCB7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDI1MHB4O1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIC5vcHRpb24taXRlbSB7XHJcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xcztcclxuICAgIH1cclxuXHJcbiAgICAub3B0aW9uLWl0ZW06aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xyXG4gICAgfVxyXG5cclxuICAgIC5uby1yZXN1bHRzIHtcclxuICAgICAgcGFkZGluZzogMTJweDtcclxuICAgICAgY29sb3I6ICM4ODg7XHJcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0cmVlLXJvb3Qge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25jZXB0b1RyZWVDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIG5vZGVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFBhcnRpYWw8VHJlZU9wdGlvbnM+ID0ge307XHJcblxyXG4gIEBPdXRwdXQoKSBpbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBhY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBkZWFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBkZXNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG1vdmVOb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGxvYWRDaGlsZHJlbiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSB0cmVlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVFdmVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChUcmVlUm9vdENvbXBvbmVudCkgdHJlZVJvb3QhOiBUcmVlUm9vdENvbXBvbmVudDtcclxuXHJcbiAgaXNEcm9wZG93bk9wZW4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHNlYXJjaFRlcm0gPSAnJztcclxuICBzZWxlY3RlZE5vZGUgPSBzaWduYWw8VHJlZU5vZGUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgLy8gQWxsIG5vZGVzIGZsYXR0ZW5lZFxyXG4gIHByaXZhdGUgYWxsTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcclxuICBmaWx0ZXJlZE5vZGVzID0gc2lnbmFsPFRyZWVOb2RlW10+KFtdKTtcclxuXHJcbiAgZ2V0IGRpc3BsYXlGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNwbGF5RmllbGQgfHwgJ25hbWUnO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuLnVwZGF0ZSh2ID0+ICF2KTtcclxuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKCkpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgICAgIHRoaXMuZmlsdGVyTm9kZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuLnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJOb2RlcygpIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQodGhpcy5hbGxOb2Rlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQoXHJcbiAgICAgICAgdGhpcy5hbGxOb2Rlcy5maWx0ZXIobm9kZSA9PlxyXG4gICAgICAgICAgU3RyaW5nKG5vZGUuZGF0YVt0aGlzLmRpc3BsYXlGaWVsZF0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3ROb2RlKG5vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQobm9kZSk7XHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuLnNldChmYWxzZSk7XHJcblxyXG4gICAgLy8gQWN0aXZhdGUgaW4gdHJlZVxyXG4gICAgaWYgKHRoaXMudHJlZVJvb3QgJiYgdGhpcy50cmVlUm9vdC50cmVlTW9kZWwpIHtcclxuICAgICAgdGhpcy50cmVlUm9vdC50cmVlTW9kZWwuYWN0aXZhdGVOb2RlKG5vZGUpO1xyXG4gICAgICBub2RlLmVuc3VyZVZpc2libGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVHJlZUluaXRpYWxpemVkKGV2ZW50OiBUcmVlRXZlbnQpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZWQuZW1pdChldmVudCk7XHJcbiAgICAvLyBHZXQgYWxsIG5vZGVzIGZvciB0aGUgZHJvcGRvd25cclxuICAgIGlmIChldmVudC50cmVlTW9kZWwpIHtcclxuICAgICAgdGhpcy5hbGxOb2RlcyA9IGV2ZW50LnRyZWVNb2RlbC5nZXRBbGxOb2RlcygpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTm9kZXMuc2V0KHRoaXMuYWxsTm9kZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Ob2RlQWN0aXZhdGVkKGV2ZW50OiBUcmVlRXZlbnQpIHtcclxuICAgIHRoaXMuYWN0aXZhdGUuZW1pdChldmVudCk7XHJcbiAgICBpZiAoZXZlbnQubm9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQoZXZlbnQubm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ldmVudHMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25jZXB0by11c2VyLWNvbnRyb2xzL3NyYy9saWIvY29uY2VwdG8tdHJlZS9jb3JlL21vZGVscy90cmVlLWV2ZW50cy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbGliL2NvcmUvbW9kZWxzL3RyZWUtZXZlbnRzLm1vZGVsLnRzXHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAnLi90cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlTW9kZWwgfSBmcm9tICcuL3RyZWUubW9kZWwnO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlZUV2ZW50VHlwZSA9XHJcbiAgfCAnaW5pdGlhbGl6ZWQnXHJcbiAgfCAndXBkYXRlJ1xyXG4gIHwgJ2V4cGFuZCdcclxuICB8ICdjb2xsYXBzZSdcclxuICB8ICdleHBhbmRBbGwnXHJcbiAgfCAnY29sbGFwc2VBbGwnXHJcbiAgfCAnYWN0aXZhdGUnXHJcbiAgfCAnZGVhY3RpdmF0ZSdcclxuICB8ICdzZWxlY3QnXHJcbiAgfCAnZGVzZWxlY3QnXHJcbiAgfCAnZm9jdXMnXHJcbiAgfCAnYmx1cidcclxuICB8ICdtb3ZlTm9kZSdcclxuICB8ICdsb2FkQ2hpbGRyZW4nXHJcbiAgfCAnbG9hZENoaWxkcmVuRXJyb3InXHJcbiAgfCAnZmlsdGVyJ1xyXG4gIHwgJ2NsZWFyRmlsdGVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJlZUV2ZW50IHtcclxuICB0eXBlOiBUcmVlRXZlbnRUeXBlO1xyXG4gIHRyZWVNb2RlbD86IFRyZWVNb2RlbDtcclxuICBub2RlPzogVHJlZU5vZGU7XHJcbiAgdG8/OiB7IHBhcmVudDogVHJlZU5vZGU7IGluZGV4OiBudW1iZXIgfTtcclxuICBlcnJvcj86IGFueTtcclxufSJdfQ==
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// lib/core/models/tree-node.model.ts
|
|
2
|
+
import { signal, computed } from '@angular/core';
|
|
3
|
+
export class TreeNode {
|
|
4
|
+
// Signals for reactive state
|
|
5
|
+
isExpanded = signal(false);
|
|
6
|
+
isActive = signal(false);
|
|
7
|
+
isSelected = signal(false);
|
|
8
|
+
isFocused = signal(false);
|
|
9
|
+
isHidden = signal(false);
|
|
10
|
+
isLoading = signal(false);
|
|
11
|
+
// Computed signals
|
|
12
|
+
isCollapsed = computed(() => !this.isExpanded());
|
|
13
|
+
isLeaf = computed(() => !this.hasChildren);
|
|
14
|
+
isVisible = computed(() => !this.isHidden());
|
|
15
|
+
id;
|
|
16
|
+
data;
|
|
17
|
+
parent;
|
|
18
|
+
children = [];
|
|
19
|
+
level;
|
|
20
|
+
path;
|
|
21
|
+
index;
|
|
22
|
+
hasChildren;
|
|
23
|
+
icon;
|
|
24
|
+
constructor(data, parent, level, index, options) {
|
|
25
|
+
this.data = data;
|
|
26
|
+
this.parent = parent;
|
|
27
|
+
this.level = level;
|
|
28
|
+
this.index = index;
|
|
29
|
+
this.id = data[options.idField || 'id'];
|
|
30
|
+
this.icon = data[options.iconField || 'icon'];
|
|
31
|
+
const childrenData = data[options.childrenField || 'children'];
|
|
32
|
+
this.hasChildren = Array.isArray(childrenData) && childrenData.length > 0;
|
|
33
|
+
// Initialize expanded state
|
|
34
|
+
if (options.isExpandedField && data[options.isExpandedField]) {
|
|
35
|
+
this.isExpanded.set(true);
|
|
36
|
+
}
|
|
37
|
+
// Build path
|
|
38
|
+
this.path = parent ? [...parent.path, this.id] : [this.id];
|
|
39
|
+
}
|
|
40
|
+
// Actions
|
|
41
|
+
expand() {
|
|
42
|
+
if (this.hasChildren) {
|
|
43
|
+
this.isExpanded.set(true);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
collapse() {
|
|
47
|
+
this.isExpanded.set(false);
|
|
48
|
+
}
|
|
49
|
+
toggle() {
|
|
50
|
+
this.isExpanded.update(value => !value);
|
|
51
|
+
}
|
|
52
|
+
setActive(value) {
|
|
53
|
+
this.isActive.set(value);
|
|
54
|
+
}
|
|
55
|
+
setSelected(value) {
|
|
56
|
+
this.isSelected.set(value);
|
|
57
|
+
}
|
|
58
|
+
setFocus(value) {
|
|
59
|
+
this.isFocused.set(value);
|
|
60
|
+
}
|
|
61
|
+
setHidden(value) {
|
|
62
|
+
this.isHidden.set(value);
|
|
63
|
+
}
|
|
64
|
+
setLoading(value) {
|
|
65
|
+
this.isLoading.set(value);
|
|
66
|
+
}
|
|
67
|
+
// Helper methods
|
|
68
|
+
ensureVisible() {
|
|
69
|
+
let node = this.parent;
|
|
70
|
+
while (node) {
|
|
71
|
+
node.expand();
|
|
72
|
+
node = node.parent;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
setActiveAndVisible() {
|
|
76
|
+
this.ensureVisible();
|
|
77
|
+
this.setActive(true);
|
|
78
|
+
}
|
|
79
|
+
// Get all ancestors
|
|
80
|
+
getAncestors() {
|
|
81
|
+
const ancestors = [];
|
|
82
|
+
let node = this.parent;
|
|
83
|
+
while (node) {
|
|
84
|
+
ancestors.unshift(node);
|
|
85
|
+
node = node.parent;
|
|
86
|
+
}
|
|
87
|
+
return ancestors;
|
|
88
|
+
}
|
|
89
|
+
// Get all descendants
|
|
90
|
+
getDescendants() {
|
|
91
|
+
const descendants = [];
|
|
92
|
+
const traverse = (node) => {
|
|
93
|
+
node.children.forEach(child => {
|
|
94
|
+
descendants.push(child);
|
|
95
|
+
traverse(child);
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
traverse(this);
|
|
99
|
+
return descendants;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uY2VwdG8tdXNlci1jb250cm9scy9zcmMvbGliL2NvbmNlcHRvLXRyZWUvY29yZS9tb2RlbHMvdHJlZS1ub2RlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQVF6RCxNQUFNLE9BQU8sUUFBUTtJQUNuQiw2QkFBNkI7SUFDcEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkMsbUJBQW1CO0lBQ1YsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRXRELEVBQUUsQ0FBa0I7SUFDcEIsSUFBSSxDQUFlO0lBQ25CLE1BQU0sQ0FBa0I7SUFDeEIsUUFBUSxHQUFlLEVBQUUsQ0FBQztJQUMxQixLQUFLLENBQVM7SUFDZCxJQUFJLENBQXlCO0lBQzdCLEtBQUssQ0FB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QyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsWUFBWTtRQUNWLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksR0FBb0IsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN4QyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixjQUFjO1FBQ1osTUFBTSxXQUFXLEdBQWUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBYyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxpYi9jb3JlL21vZGVscy90cmVlLW5vZGUubW9kZWwudHNcclxuaW1wb3J0IHsgc2lnbmFsLCBjb21wdXRlZCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSAnLi90cmVlLW9wdGlvbnMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmVlTm9kZURhdGEge1xyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZU5vZGUge1xyXG4gIC8vIFNpZ25hbHMgZm9yIHJlYWN0aXZlIHN0YXRlXHJcbiAgcmVhZG9ubHkgaXNFeHBhbmRlZCA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaXNBY3RpdmUgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGlzU2VsZWN0ZWQgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGlzRm9jdXNlZCA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaXNIaWRkZW4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgXHJcbiAgLy8gQ29tcHV0ZWQgc2lnbmFsc1xyXG4gIHJlYWRvbmx5IGlzQ29sbGFwc2VkID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNFeHBhbmRlZCgpKTtcclxuICByZWFkb25seSBpc0xlYWYgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5oYXNDaGlsZHJlbik7XHJcbiAgcmVhZG9ubHkgaXNWaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNIaWRkZW4oKSk7XHJcbiAgXHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBkYXRhOiBUcmVlTm9kZURhdGE7XHJcbiAgcGFyZW50OiBUcmVlTm9kZSB8IG51bGw7XHJcbiAgY2hpbGRyZW46IFRyZWVOb2RlW10gPSBbXTtcclxuICBsZXZlbDogbnVtYmVyO1xyXG4gIHBhdGg6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBoYXNDaGlsZHJlbjogYm9vbGVhbjtcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZGF0YTogVHJlZU5vZGVEYXRhLFxyXG4gICAgcGFyZW50OiBUcmVlTm9kZSB8IG51bGwsXHJcbiAgICBsZXZlbDogbnVtYmVyLFxyXG4gICAgaW5kZXg6IG51bWJlcixcclxuICAgIG9wdGlvbnM6IFRyZWVPcHRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmlkID0gZGF0YVtvcHRpb25zLmlkRmllbGQgfHwgJ2lkJ107XHJcbiAgICB0aGlzLmljb24gPSBkYXRhW29wdGlvbnMuaWNvbkZpZWxkIHx8ICdpY29uJ107XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW5EYXRhID0gZGF0YVtvcHRpb25zLmNoaWxkcmVuRmllbGQgfHwgJ2NoaWxkcmVuJ107XHJcbiAgICB0aGlzLmhhc0NoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbkRhdGEpICYmIGNoaWxkcmVuRGF0YS5sZW5ndGggPiAwO1xyXG4gICAgXHJcbiAgICAvLyBJbml0aWFsaXplIGV4cGFuZGVkIHN0YXRlXHJcbiAgICBpZiAob3B0aW9ucy5pc0V4cGFuZGVkRmllbGQgJiYgZGF0YVtvcHRpb25zLmlzRXhwYW5kZWRGaWVsZF0pIHtcclxuICAgICAgdGhpcy5pc0V4cGFuZGVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQnVpbGQgcGF0aFxyXG4gICAgdGhpcy5wYXRoID0gcGFyZW50ID8gWy4uLnBhcmVudC5wYXRoLCB0aGlzLmlkXSA6IFt0aGlzLmlkXTtcclxuICB9XHJcbiAgXHJcbiAgLy8gQWN0aW9uc1xyXG4gIGV4cGFuZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuaXNFeHBhbmRlZC5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGNvbGxhcHNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkLnNldChmYWxzZSk7XHJcbiAgfVxyXG4gIFxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZC51cGRhdGUodmFsdWUgPT4gIXZhbHVlKTtcclxuICB9XHJcbiAgXHJcbiAgc2V0QWN0aXZlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQWN0aXZlLnNldCh2YWx1ZSk7XHJcbiAgfVxyXG4gIFxyXG4gIHNldFNlbGVjdGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2VsZWN0ZWQuc2V0KHZhbHVlKTtcclxuICB9XHJcbiAgXHJcbiAgc2V0Rm9jdXModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb2N1c2VkLnNldCh2YWx1ZSk7XHJcbiAgfVxyXG4gIFxyXG4gIHNldEhpZGRlbih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0hpZGRlbi5zZXQodmFsdWUpO1xyXG4gIH1cclxuICBcclxuICBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodmFsdWUpO1xyXG4gIH1cclxuICBcclxuICAvLyBIZWxwZXIgbWV0aG9kc1xyXG4gIGVuc3VyZVZpc2libGUoKTogdm9pZCB7XHJcbiAgICBsZXQgbm9kZTogVHJlZU5vZGUgfCBudWxsID0gdGhpcy5wYXJlbnQ7XHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBub2RlLmV4cGFuZCgpO1xyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHNldEFjdGl2ZUFuZFZpc2libGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVuc3VyZVZpc2libGUoKTtcclxuICAgIHRoaXMuc2V0QWN0aXZlKHRydWUpO1xyXG4gIH1cclxuICBcclxuICAvLyBHZXQgYWxsIGFuY2VzdG9yc1xyXG4gIGdldEFuY2VzdG9ycygpOiBUcmVlTm9kZVtdIHtcclxuICAgIGNvbnN0IGFuY2VzdG9yczogVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgbGV0IG5vZGU6IFRyZWVOb2RlIHwgbnVsbCA9IHRoaXMucGFyZW50O1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgYW5jZXN0b3JzLnVuc2hpZnQobm9kZSk7XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBhbmNlc3RvcnM7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEdldCBhbGwgZGVzY2VuZGFudHNcclxuICBnZXREZXNjZW5kYW50cygpOiBUcmVlTm9kZVtdIHtcclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUcmVlTm9kZVtdID0gW107XHJcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgIGRlc2NlbmRhbnRzLnB1c2goY2hpbGQpO1xyXG4gICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgdHJhdmVyc2UodGhpcyk7XHJcbiAgICByZXR1cm4gZGVzY2VuZGFudHM7XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const DEFAULT_TREE_OPTIONS = {
|
|
2
|
+
idField: 'id',
|
|
3
|
+
childrenField: 'children',
|
|
4
|
+
displayField: 'name',
|
|
5
|
+
isExpandedField: 'isExpanded',
|
|
6
|
+
hasChildrenField: 'hasChildren',
|
|
7
|
+
iconField: 'icon',
|
|
8
|
+
allowDrag: false,
|
|
9
|
+
allowDrop: false,
|
|
10
|
+
useCheckbox: false,
|
|
11
|
+
useTriState: false,
|
|
12
|
+
levelPadding: 20,
|
|
13
|
+
useVirtualScroll: false,
|
|
14
|
+
nodeHeight: 22,
|
|
15
|
+
bufferAmount: 5,
|
|
16
|
+
animateExpand: false,
|
|
17
|
+
animateSpeed: 1,
|
|
18
|
+
animateAcceleration: 1.2,
|
|
19
|
+
scrollOnActivate: true,
|
|
20
|
+
rtl: false,
|
|
21
|
+
multiSelect: false,
|
|
22
|
+
useMetaKey: true,
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uY2VwdG8tdXNlci1jb250cm9scy9zcmMvbGliL2NvbmNlcHRvLXRyZWUvY29yZS9tb2RlbHMvdHJlZS1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZDQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBZ0I7SUFDL0MsT0FBTyxFQUFFLElBQUk7SUFDYixhQUFhLEVBQUUsVUFBVTtJQUN6QixZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsWUFBWTtJQUM3QixnQkFBZ0IsRUFBRSxhQUFhO0lBQy9CLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsVUFBVSxFQUFFLEVBQUU7SUFDZCxZQUFZLEVBQUUsQ0FBQztJQUNmLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLFlBQVksRUFBRSxDQUFDO0lBQ2YsbUJBQW1CLEVBQUUsR0FBRztJQUN4QixnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxpYi9jb3JlL21vZGVscy90cmVlLW9wdGlvbnMubW9kZWwudHNcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5tb2RlbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVPcHRpb25zIHtcclxuICAvLyBGaWVsZCBtYXBwaW5nc1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW5GaWVsZD86IHN0cmluZztcclxuICBkaXNwbGF5RmllbGQ/OiBzdHJpbmc7XHJcbiAgaXNFeHBhbmRlZEZpZWxkPzogc3RyaW5nO1xyXG4gIGhhc0NoaWxkcmVuRmllbGQ/OiBzdHJpbmc7XHJcbiAgaWNvbkZpZWxkPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8vIEJlaGF2aW9yXHJcbiAgYWxsb3dEcmFnPzogYm9vbGVhbiB8ICgobm9kZTogVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gIGFsbG93RHJvcD86IGJvb2xlYW4gfCAoKG5vZGU6IFRyZWVOb2RlLCB0bzogYW55KSA9PiBib29sZWFuKTtcclxuICB1c2VDaGVja2JveD86IGJvb2xlYW47XHJcbiAgdXNlVHJpU3RhdGU/OiBib29sZWFuO1xyXG4gIGxldmVsUGFkZGluZz86IG51bWJlcjtcclxuICBcclxuICAvLyBWaXJ0dWFsIHNjcm9sbFxyXG4gIHVzZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xyXG4gIG5vZGVIZWlnaHQ/OiBudW1iZXIgfCAoKG5vZGU6IFRyZWVOb2RlKSA9PiBudW1iZXIpO1xyXG4gIHNjcm9sbENvbnRhaW5lckhlaWdodD86IG51bWJlcjtcclxuICBidWZmZXJBbW91bnQ/OiBudW1iZXI7XHJcbiAgXHJcbiAgLy8gQXN5bmMgbG9hZGluZ1xyXG4gIGdldENoaWxkcmVuPzogKG5vZGU6IFRyZWVOb2RlKSA9PiBQcm9taXNlPGFueVtdPjtcclxuICBcclxuICAvLyBBbmltYXRpb25zXHJcbiAgYW5pbWF0ZUV4cGFuZD86IGJvb2xlYW47XHJcbiAgYW5pbWF0ZVNwZWVkPzogbnVtYmVyO1xyXG4gIGFuaW1hdGVBY2NlbGVyYXRpb24/OiBudW1iZXI7XHJcbiAgXHJcbiAgLy8gU2Nyb2xsIGJlaGF2aW9yXHJcbiAgc2Nyb2xsT25BY3RpdmF0ZT86IGJvb2xlYW47XHJcbiAgc2Nyb2xsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XHJcbiAgXHJcbiAgLy8gS2V5Ym9hcmRcclxuICBydGw/OiBib29sZWFuO1xyXG4gIFxyXG4gIC8vIFNlbGVjdGlvblxyXG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcclxuICB1c2VNZXRhS2V5PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFJFRV9PUFRJT05TOiBUcmVlT3B0aW9ucyA9IHtcclxuICBpZEZpZWxkOiAnaWQnLFxyXG4gIGNoaWxkcmVuRmllbGQ6ICdjaGlsZHJlbicsXHJcbiAgZGlzcGxheUZpZWxkOiAnbmFtZScsXHJcbiAgaXNFeHBhbmRlZEZpZWxkOiAnaXNFeHBhbmRlZCcsXHJcbiAgaGFzQ2hpbGRyZW5GaWVsZDogJ2hhc0NoaWxkcmVuJyxcclxuICBpY29uRmllbGQ6ICdpY29uJyxcclxuICBhbGxvd0RyYWc6IGZhbHNlLFxyXG4gIGFsbG93RHJvcDogZmFsc2UsXHJcbiAgdXNlQ2hlY2tib3g6IGZhbHNlLFxyXG4gIHVzZVRyaVN0YXRlOiBmYWxzZSxcclxuICBsZXZlbFBhZGRpbmc6IDIwLFxyXG4gIHVzZVZpcnR1YWxTY3JvbGw6IGZhbHNlLFxyXG4gIG5vZGVIZWlnaHQ6IDIyLFxyXG4gIGJ1ZmZlckFtb3VudDogNSxcclxuICBhbmltYXRlRXhwYW5kOiBmYWxzZSxcclxuICBhbmltYXRlU3BlZWQ6IDEsXHJcbiAgYW5pbWF0ZUFjY2VsZXJhdGlvbjogMS4yLFxyXG4gIHNjcm9sbE9uQWN0aXZhdGU6IHRydWUsXHJcbiAgcnRsOiBmYWxzZSxcclxuICBtdWx0aVNlbGVjdDogZmFsc2UsXHJcbiAgdXNlTWV0YUtleTogdHJ1ZSxcclxufTsiXX0=
|