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.
Files changed (33) hide show
  1. package/esm2022/lib/concepto-tree/components/tree-node/tree-node.component.mjs +301 -0
  2. package/esm2022/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.mjs +90 -0
  3. package/esm2022/lib/concepto-tree/components/tree-node-content/tree-node-content.component.mjs +65 -0
  4. package/esm2022/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.mjs +74 -0
  5. package/esm2022/lib/concepto-tree/components/tree-root/tree-root.component.mjs +230 -0
  6. package/esm2022/lib/concepto-tree/components/tree-viewport/tree-viewport.component.mjs +216 -0
  7. package/esm2022/lib/concepto-tree/concepto-tree.component.mjs +214 -13
  8. package/esm2022/lib/concepto-tree/core/models/tree-events.model.mjs +2 -0
  9. package/esm2022/lib/concepto-tree/core/models/tree-node.model.mjs +102 -0
  10. package/esm2022/lib/concepto-tree/core/models/tree-options.model.mjs +24 -0
  11. package/esm2022/lib/concepto-tree/core/models/tree.model.mjs +313 -0
  12. package/esm2022/lib/concepto-tree/core/services/tree-drag-drop.service.mjs +27 -0
  13. package/esm2022/lib/concepto-tree/directives/tree-drag.directive.mjs +69 -0
  14. package/esm2022/lib/concepto-tree/directives/tree-drop.directive.mjs +124 -0
  15. package/esm2022/lib/concepto-tree/directives/tree-node-template.directive.mjs +19 -0
  16. package/fesm2022/concepto-user-controls.mjs +1818 -12
  17. package/fesm2022/concepto-user-controls.mjs.map +1 -1
  18. package/lib/concepto-tree/components/tree-node/tree-node.component.d.ts +19 -0
  19. package/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.d.ts +17 -0
  20. package/lib/concepto-tree/components/tree-node-content/tree-node-content.component.d.ts +18 -0
  21. package/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.d.ts +12 -0
  22. package/lib/concepto-tree/components/tree-root/tree-root.component.d.ts +35 -0
  23. package/lib/concepto-tree/components/tree-viewport/tree-viewport.component.d.ts +33 -0
  24. package/lib/concepto-tree/concepto-tree.component.d.ts +32 -1
  25. package/lib/concepto-tree/core/models/tree-events.model.d.ts +13 -0
  26. package/lib/concepto-tree/core/models/tree-node.model.d.ts +39 -0
  27. package/lib/concepto-tree/core/models/tree-options.model.d.ts +28 -0
  28. package/lib/concepto-tree/core/models/tree.model.d.ts +54 -0
  29. package/lib/concepto-tree/core/services/tree-drag-drop.service.d.ts +11 -0
  30. package/lib/concepto-tree/directives/tree-drag.directive.d.ts +16 -0
  31. package/lib/concepto-tree/directives/tree-drop.directive.d.ts +25 -0
  32. package/lib/concepto-tree/directives/tree-node-template.directive.d.ts +8 -0
  33. 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
- <p>
7
- concepto-tree works!
8
- </p>
9
- `, isInline: true, styles: [""] });
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
- <p>
15
- concepto-tree works!
16
- </p>
17
- ` }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2VwdG8tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25jZXB0by11c2VyLWNvbnRyb2xzL3NyYy9saWIvY29uY2VwdG8tdHJlZS9jb25jZXB0by10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWExQyxNQUFNLE9BQU8scUJBQXFCO3dHQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQiw2RUFQdEI7Ozs7R0FJVDs7NEZBR1UscUJBQXFCO2tCQVhqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsRUFBRSxZQUNEOzs7O0dBSVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbmNlcHRvLXRyZWUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxwPlxyXG4gICAgICBjb25jZXB0by10cmVlIHdvcmtzIVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uY2VwdG9UcmVlQ29tcG9uZW50IHtcclxuXHJcbn1cclxuIl19
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=