@dangl/angular-ava 0.1.1-fe--1-add-tree-p0053
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/README.md +1 -0
- package/esm2022/dangl-angular-ava.mjs +5 -0
- package/esm2022/lib/angular-ava.module.mjs +88 -0
- package/esm2022/lib/ava-tree/tree/components/ava-tree/ava-tree.component.mjs +356 -0
- package/esm2022/lib/ava-tree/tree/components/list-structure/list-structure.component.mjs +38 -0
- package/esm2022/lib/ava-tree/tree/components/table-structure/table-structure.component.mjs +99 -0
- package/esm2022/lib/ava-tree/tree/components/tree-item/tree-item.component.mjs +89 -0
- package/esm2022/lib/ava-tree/tree/components/tree-node/tree-node.component.mjs +52 -0
- package/esm2022/lib/ava-tree/tree/components/tree-structure/tree-structure.component.mjs +30 -0
- package/esm2022/lib/ava-tree/tree/constants/defaultFilters.mjs +6 -0
- package/esm2022/lib/ava-tree/tree/constants/defaultTextWords.mjs +11 -0
- package/esm2022/lib/ava-tree/tree/constants/index.mjs +4 -0
- package/esm2022/lib/ava-tree/tree/directives/save-changing-view.directive.mjs +43 -0
- package/esm2022/lib/ava-tree/tree/model/ava-models.mjs +199 -0
- package/esm2022/lib/ava-tree/tree/model/context-menu-data.model.mjs +2 -0
- package/esm2022/lib/ava-tree/tree/model/function-view-line.model.mjs +2 -0
- package/esm2022/lib/ava-tree/tree/model/index.mjs +4 -0
- package/esm2022/lib/ava-tree/tree/model/selecting.model.mjs +2 -0
- package/esm2022/lib/ava-tree/tree/model/tableColumnType.mjs +2 -0
- package/esm2022/lib/ava-tree/tree/model/tree-mode.model.mjs +7 -0
- package/esm2022/lib/ava-tree/tree/pipes/element-icon-name.pipe.mjs +27 -0
- package/esm2022/lib/ava-tree/tree/pipes/element-item-number.pipe.mjs +23 -0
- package/esm2022/lib/ava-tree/tree/pipes/element-text.pipe.mjs +27 -0
- package/esm2022/lib/ava-tree/tree/services/expand-parent-group.service.mjs +32 -0
- package/esm2022/lib/ava-tree/tree/services/flat-elements.service.mjs +99 -0
- package/esm2022/lib/ava-tree/tree/services/keyboard-operation.service.mjs +114 -0
- package/esm2022/lib/ava-tree/tree/services/select-element.service.mjs +37 -0
- package/esm2022/lib/ava-tree/tree/services/tree-node-selection.service.mjs +133 -0
- package/esm2022/lib/version.mjs +10 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/dangl-angular-ava.mjs +1174 -0
- package/fesm2022/dangl-angular-ava.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/angular-ava.module.d.ts +26 -0
- package/lib/ava-tree/tree/components/ava-tree/ava-tree.component.d.ts +77 -0
- package/lib/ava-tree/tree/components/list-structure/list-structure.component.d.ts +16 -0
- package/lib/ava-tree/tree/components/table-structure/table-structure.component.d.ts +34 -0
- package/lib/ava-tree/tree/components/tree-item/tree-item.component.d.ts +34 -0
- package/lib/ava-tree/tree/components/tree-node/tree-node.component.d.ts +22 -0
- package/lib/ava-tree/tree/components/tree-structure/tree-structure.component.d.ts +13 -0
- package/lib/ava-tree/tree/constants/defaultFilters.d.ts +1 -0
- package/lib/ava-tree/tree/constants/defaultTextWords.d.ts +11 -0
- package/lib/ava-tree/tree/constants/index.d.ts +3 -0
- package/lib/ava-tree/tree/directives/save-changing-view.directive.d.ts +12 -0
- package/lib/ava-tree/tree/model/ava-models.d.ts +1041 -0
- package/lib/ava-tree/tree/model/context-menu-data.model.d.ts +8 -0
- package/lib/ava-tree/tree/model/function-view-line.model.d.ts +11 -0
- package/lib/ava-tree/tree/model/index.d.ts +7 -0
- package/lib/ava-tree/tree/model/selecting.model.d.ts +14 -0
- package/lib/ava-tree/tree/model/tableColumnType.d.ts +6 -0
- package/lib/ava-tree/tree/model/tree-mode.model.d.ts +5 -0
- package/lib/ava-tree/tree/pipes/element-icon-name.pipe.d.ts +8 -0
- package/lib/ava-tree/tree/pipes/element-item-number.pipe.d.ts +8 -0
- package/lib/ava-tree/tree/pipes/element-text.pipe.d.ts +8 -0
- package/lib/ava-tree/tree/services/expand-parent-group.service.d.ts +7 -0
- package/lib/ava-tree/tree/services/flat-elements.service.d.ts +28 -0
- package/lib/ava-tree/tree/services/keyboard-operation.service.d.ts +32 -0
- package/lib/ava-tree/tree/services/select-element.service.d.ts +30 -0
- package/lib/ava-tree/tree/services/tree-node-selection.service.d.ts +23 -0
- package/lib/version.d.ts +8 -0
- package/package.json +31 -0
- package/public-api.d.ts +4 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Dangl.AngularAva
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFuZ2wtYW5ndWxhci1hdmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWF2YS9zcmMvZGFuZ2wtYW5ndWxhci1hdmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
6
|
+
import { MatRippleModule } from '@angular/material/core';
|
|
7
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
+
import { MatInputModule } from '@angular/material/input';
|
|
10
|
+
import { MatTableModule } from '@angular/material/table';
|
|
11
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
+
import { AvaTreeComponent } from './ava-tree/tree/components/ava-tree/ava-tree.component';
|
|
13
|
+
import { ListStructureComponent } from './ava-tree/tree/components/list-structure/list-structure.component';
|
|
14
|
+
import { TableStructureComponent } from './ava-tree/tree/components/table-structure/table-structure.component';
|
|
15
|
+
import { TreeItemComponent } from './ava-tree/tree/components/tree-item/tree-item.component';
|
|
16
|
+
import { TreeNodeComponent } from './ava-tree/tree/components/tree-node/tree-node.component';
|
|
17
|
+
import { TreeStructureComponent } from './ava-tree/tree/components/tree-structure/tree-structure.component';
|
|
18
|
+
import { SaveChangingViewDirective } from './ava-tree/tree/directives/save-changing-view.directive';
|
|
19
|
+
import { ElementIconNamePipe } from './ava-tree/tree/pipes/element-icon-name.pipe';
|
|
20
|
+
import { ElementItemNumberPipe } from './ava-tree/tree/pipes/element-item-number.pipe';
|
|
21
|
+
import { ElementTextPipe } from './ava-tree/tree/pipes/element-text.pipe';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
export class AngularAvaModule {
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AngularAvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: AngularAvaModule, declarations: [TreeStructureComponent,
|
|
26
|
+
TreeNodeComponent,
|
|
27
|
+
AvaTreeComponent,
|
|
28
|
+
TreeItemComponent,
|
|
29
|
+
ListStructureComponent,
|
|
30
|
+
TableStructureComponent,
|
|
31
|
+
ElementIconNamePipe,
|
|
32
|
+
ElementTextPipe,
|
|
33
|
+
ElementItemNumberPipe,
|
|
34
|
+
SaveChangingViewDirective], imports: [CommonModule,
|
|
35
|
+
MatIconModule,
|
|
36
|
+
MatRippleModule,
|
|
37
|
+
MatInputModule,
|
|
38
|
+
MatFormFieldModule,
|
|
39
|
+
ReactiveFormsModule,
|
|
40
|
+
FormsModule,
|
|
41
|
+
MatButtonModule,
|
|
42
|
+
MatCheckboxModule,
|
|
43
|
+
MatTableModule,
|
|
44
|
+
MatTooltipModule], exports: [AvaTreeComponent] }); }
|
|
45
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AngularAvaModule, imports: [CommonModule,
|
|
46
|
+
MatIconModule,
|
|
47
|
+
MatRippleModule,
|
|
48
|
+
MatInputModule,
|
|
49
|
+
MatFormFieldModule,
|
|
50
|
+
ReactiveFormsModule,
|
|
51
|
+
FormsModule,
|
|
52
|
+
MatButtonModule,
|
|
53
|
+
MatCheckboxModule,
|
|
54
|
+
MatTableModule,
|
|
55
|
+
MatTooltipModule] }); }
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AngularAvaModule, decorators: [{
|
|
58
|
+
type: NgModule,
|
|
59
|
+
args: [{
|
|
60
|
+
declarations: [
|
|
61
|
+
TreeStructureComponent,
|
|
62
|
+
TreeNodeComponent,
|
|
63
|
+
AvaTreeComponent,
|
|
64
|
+
TreeItemComponent,
|
|
65
|
+
ListStructureComponent,
|
|
66
|
+
TableStructureComponent,
|
|
67
|
+
ElementIconNamePipe,
|
|
68
|
+
ElementTextPipe,
|
|
69
|
+
ElementItemNumberPipe,
|
|
70
|
+
SaveChangingViewDirective
|
|
71
|
+
],
|
|
72
|
+
imports: [
|
|
73
|
+
CommonModule,
|
|
74
|
+
MatIconModule,
|
|
75
|
+
MatRippleModule,
|
|
76
|
+
MatInputModule,
|
|
77
|
+
MatFormFieldModule,
|
|
78
|
+
ReactiveFormsModule,
|
|
79
|
+
FormsModule,
|
|
80
|
+
MatButtonModule,
|
|
81
|
+
MatCheckboxModule,
|
|
82
|
+
MatTableModule,
|
|
83
|
+
MatTooltipModule
|
|
84
|
+
],
|
|
85
|
+
exports: [AvaTreeComponent]
|
|
86
|
+
}]
|
|
87
|
+
}] });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hdmEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hbmd1bGFyLWF2YS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDNUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDNUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQThCMUUsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBMUJ6QixzQkFBc0I7WUFDdEIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2QixtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLHFCQUFxQjtZQUNyQix5QkFBeUIsYUFHekIsWUFBWTtZQUNaLGFBQWE7WUFDYixlQUFlO1lBQ2YsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsV0FBVztZQUNYLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGdCQUFnQixhQUVSLGdCQUFnQjsrR0FFZixnQkFBZ0IsWUFkekIsWUFBWTtZQUNaLGFBQWE7WUFDYixlQUFlO1lBQ2YsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsV0FBVztZQUNYLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGdCQUFnQjs7MkZBSVAsZ0JBQWdCO2tCQTVCNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixzQkFBc0I7d0JBQ3RCLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0UmlwcGxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgQXZhVHJlZUNvbXBvbmVudCB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9jb21wb25lbnRzL2F2YS10cmVlL2F2YS10cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpc3RTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvY29tcG9uZW50cy9saXN0LXN0cnVjdHVyZS9saXN0LXN0cnVjdHVyZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZVN0cnVjdHVyZUNvbXBvbmVudCB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9jb21wb25lbnRzL3RhYmxlLXN0cnVjdHVyZS90YWJsZS1zdHJ1Y3R1cmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJlZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmVlU3RydWN0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvdHJlZS1zdHJ1Y3R1cmUvdHJlZS1zdHJ1Y3R1cmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2F2ZUNoYW5naW5nVmlld0RpcmVjdGl2ZSB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9kaXJlY3RpdmVzL3NhdmUtY2hhbmdpbmctdmlldy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFbGVtZW50SWNvbk5hbWVQaXBlIH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL3BpcGVzL2VsZW1lbnQtaWNvbi1uYW1lLnBpcGUnO1xyXG5pbXBvcnQgeyBFbGVtZW50SXRlbU51bWJlclBpcGUgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvcGlwZXMvZWxlbWVudC1pdGVtLW51bWJlci5waXBlJztcclxuaW1wb3J0IHsgRWxlbWVudFRleHRQaXBlIH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL3BpcGVzL2VsZW1lbnQtdGV4dC5waXBlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBUcmVlU3RydWN0dXJlQ29tcG9uZW50LFxyXG4gICAgVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICBBdmFUcmVlQ29tcG9uZW50LFxyXG4gICAgVHJlZUl0ZW1Db21wb25lbnQsXHJcbiAgICBMaXN0U3RydWN0dXJlQ29tcG9uZW50LFxyXG4gICAgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQsXHJcbiAgICBFbGVtZW50SWNvbk5hbWVQaXBlLFxyXG4gICAgRWxlbWVudFRleHRQaXBlLFxyXG4gICAgRWxlbWVudEl0ZW1OdW1iZXJQaXBlLFxyXG4gICAgU2F2ZUNoYW5naW5nVmlld0RpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFJpcHBsZU1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtBdmFUcmVlQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5ndWxhckF2YU1vZHVsZSB7fVxyXG4iXX0=
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, Self, ViewChild } from '@angular/core';
|
|
2
|
+
import { ReplaySubject, Subject, debounceTime, filter, fromEvent, takeUntil } from 'rxjs';
|
|
3
|
+
import { DEFAULT_FILTERS, DEFAULT_TEXT_WORDS } from '../../constants';
|
|
4
|
+
import { ModeViewType } from '../../model';
|
|
5
|
+
import { FlatElementsService } from '../../services/flat-elements.service';
|
|
6
|
+
import { SelectElementService } from '../../services/select-element.service';
|
|
7
|
+
import { ExpandParentGroupService } from 'projects/angular-ava/src/lib/ava-tree/tree/services/expand-parent-group.service';
|
|
8
|
+
import { KeyboardOperationService, KeyboardOperationType } from 'projects/angular-ava/src/lib/ava-tree/tree/services/keyboard-operation.service';
|
|
9
|
+
import { TreeNodeSelectionService } from 'projects/angular-ava/src/lib/ava-tree/tree/services/tree-node-selection.service';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../services/flat-elements.service";
|
|
12
|
+
import * as i2 from "../../services/select-element.service";
|
|
13
|
+
import * as i3 from "projects/angular-ava/src/lib/ava-tree/tree/services/tree-node-selection.service";
|
|
14
|
+
import * as i4 from "projects/angular-ava/src/lib/ava-tree/tree/services/expand-parent-group.service";
|
|
15
|
+
import * as i5 from "projects/angular-ava/src/lib/ava-tree/tree/services/keyboard-operation.service";
|
|
16
|
+
import * as i6 from "@angular/common";
|
|
17
|
+
import * as i7 from "@angular/material/icon";
|
|
18
|
+
import * as i8 from "@angular/material/input";
|
|
19
|
+
import * as i9 from "@angular/material/form-field";
|
|
20
|
+
import * as i10 from "@angular/forms";
|
|
21
|
+
import * as i11 from "@angular/material/button";
|
|
22
|
+
import * as i12 from "@angular/material/tooltip";
|
|
23
|
+
import * as i13 from "../tree-structure/tree-structure.component";
|
|
24
|
+
import * as i14 from "../list-structure/list-structure.component";
|
|
25
|
+
import * as i15 from "../table-structure/table-structure.component";
|
|
26
|
+
export class AvaTreeComponent {
|
|
27
|
+
/**With this parameter, we can configure which keys will be listen to switch the tree elements,
|
|
28
|
+
* and also to disable the functionality of the keys */
|
|
29
|
+
set customKeyboardOperationConfig(config) {
|
|
30
|
+
this.keyboardOperationService.mergeConfigOperation(config);
|
|
31
|
+
}
|
|
32
|
+
// ***************************************************
|
|
33
|
+
// functionView: Array of objects
|
|
34
|
+
// {
|
|
35
|
+
// name: string, // name of view part: you can add/remove it when it need
|
|
36
|
+
// func: (element: any, result?: any) => boolean, // this filter function calculate condition to change view
|
|
37
|
+
// view: {
|
|
38
|
+
// iconName?: string, // changed name of icon
|
|
39
|
+
// iconColor?: string, // changed color of icon
|
|
40
|
+
// textBold?: string, // changed weight of text
|
|
41
|
+
// textColor?: string // changed color of text
|
|
42
|
+
// }
|
|
43
|
+
// }
|
|
44
|
+
// ****************************************************
|
|
45
|
+
set textWords(words) {
|
|
46
|
+
this._textWords = { ...this.textWords, ...words };
|
|
47
|
+
} // allow to translate all texts to other language
|
|
48
|
+
get textWords() {
|
|
49
|
+
return this._textWords;
|
|
50
|
+
}
|
|
51
|
+
constructor(flatElementsService, selectElementService, treeNodeSelectionService, expandParentGroupService, keyboardOperationService, ngZone) {
|
|
52
|
+
this.flatElementsService = flatElementsService;
|
|
53
|
+
this.selectElementService = selectElementService;
|
|
54
|
+
this.treeNodeSelectionService = treeNodeSelectionService;
|
|
55
|
+
this.expandParentGroupService = expandParentGroupService;
|
|
56
|
+
this.keyboardOperationService = keyboardOperationService;
|
|
57
|
+
this.ngZone = ngZone;
|
|
58
|
+
this.project = null; // main data
|
|
59
|
+
this.expansionState = {}; // object with expanded groups at the begin
|
|
60
|
+
this.selectedNodeId = null; // id if selected element at the begin
|
|
61
|
+
this.indent = '20px'; // optional - for changing indents each group
|
|
62
|
+
this.selectedColor = null; // optional - for changing background of selected line (default: primary form MaterialUI)
|
|
63
|
+
this.modeView = ModeViewType.Tree; // structure view: Tree(default) / List / Table
|
|
64
|
+
this.limitedControl = true; // use keyboard only if cursor is over of tree
|
|
65
|
+
this.isSelectionMode = false; // mode for selecting by checkbox
|
|
66
|
+
this.selectingElements = null; // optional - selected elements at the begin
|
|
67
|
+
this.listFilterFunc = DEFAULT_FILTERS; // allow to program filtering by filter function: (element: any, filter: string) => boolean
|
|
68
|
+
this.addTableColumns = []; // optional - allow to add displayed columns for table
|
|
69
|
+
// ***************************************************
|
|
70
|
+
// addTableColumns: Array of objects
|
|
71
|
+
// {
|
|
72
|
+
// name: string, // name of column
|
|
73
|
+
// title: string, // showed title of column
|
|
74
|
+
// align?: string, // optional alight: left(default) / center / right
|
|
75
|
+
// numberFormat?: string // optional format of number value, example: '1.2-2'
|
|
76
|
+
// }
|
|
77
|
+
// ***************************************************
|
|
78
|
+
this.functionView = null; // allow to program view for each element by filter
|
|
79
|
+
this._textWords = null;
|
|
80
|
+
// *******************************************************
|
|
81
|
+
// {
|
|
82
|
+
// textSearch: string,
|
|
83
|
+
// textNothing: string,
|
|
84
|
+
// textNothingFiltered: string,
|
|
85
|
+
// textAll: string,
|
|
86
|
+
// tooltipAllOpen: string,
|
|
87
|
+
// tooltipAllClose: string,
|
|
88
|
+
// tooltipAllAdd:string,
|
|
89
|
+
// tooltipAllRemove: string,
|
|
90
|
+
// }
|
|
91
|
+
// ********************************************************
|
|
92
|
+
this.selectClick = new EventEmitter(); // event after element selected by click
|
|
93
|
+
this.selectDblClick = new EventEmitter(); // event after element selected by double click
|
|
94
|
+
this.contextMenuEvent = new EventEmitter(); // event after element call context menu by right button click
|
|
95
|
+
this.selectedElementsChanged = new EventEmitter(); // event after changed selecting in selecting mode
|
|
96
|
+
this.selectedElement = null;
|
|
97
|
+
this.isListenKeyboard = false;
|
|
98
|
+
this.isEmiteSelectedElements = false;
|
|
99
|
+
this.selectingElementsTreeData = [];
|
|
100
|
+
this.flatElements = null;
|
|
101
|
+
this.preselectedElement = null;
|
|
102
|
+
this.filterInput = '';
|
|
103
|
+
this.listModeViewType = ModeViewType;
|
|
104
|
+
this.filter = '';
|
|
105
|
+
this.$filter = new ReplaySubject(1);
|
|
106
|
+
this.filteredElementList = [];
|
|
107
|
+
this.$destroy = new Subject();
|
|
108
|
+
this._textWords = { ...DEFAULT_TEXT_WORDS };
|
|
109
|
+
}
|
|
110
|
+
ngOnInit() {
|
|
111
|
+
this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((e) => (this.preselectedElement = e));
|
|
112
|
+
this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => {
|
|
113
|
+
this.selectedElement = e;
|
|
114
|
+
this.selectClick.emit(e);
|
|
115
|
+
});
|
|
116
|
+
this.selectElementService.selectDblClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.selectDblClick.emit(e));
|
|
117
|
+
this.selectElementService.selectContextMenuElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.contextMenuEvent.emit(e));
|
|
118
|
+
this.flatElementsService.flatElementsDto.pipe(takeUntil(this.$destroy)).subscribe((e) => {
|
|
119
|
+
this.flatElements = e;
|
|
120
|
+
this.getFilteredList();
|
|
121
|
+
});
|
|
122
|
+
this.$filter.pipe(takeUntil(this.$destroy), debounceTime(250)).subscribe((filter) => {
|
|
123
|
+
this.filter = filter;
|
|
124
|
+
this.getFilteredList();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
ngAfterViewInit() {
|
|
128
|
+
this.initializeEventListeners();
|
|
129
|
+
}
|
|
130
|
+
ngOnChanges(changes) {
|
|
131
|
+
this.flatElementsService.listFilterFunc = this.listFilterFunc;
|
|
132
|
+
this.flatElementsService.functionView = this.functionView;
|
|
133
|
+
if (changes['project'] && this.project?.serviceSpecifications?.[0]) {
|
|
134
|
+
this.serviceSpecification = this.project.serviceSpecifications[0];
|
|
135
|
+
this.flatElementsService.setElementsDto(this.serviceSpecification);
|
|
136
|
+
if (this.isSelectionMode) {
|
|
137
|
+
this.selectingElementsTreeData = this.treeNodeSelectionService.loadSelectingElements(this.serviceSpecification.elements);
|
|
138
|
+
this.treeNodeSelectionService.treeNodeSelecting.pipe(takeUntil(this.$destroy)).subscribe(() => {
|
|
139
|
+
if (this.isEmiteSelectedElements) {
|
|
140
|
+
setTimeout(() => {
|
|
141
|
+
const selectingTree = this.treeNodeSelectionService.getTreeRoot(this.selectingElementsTreeData);
|
|
142
|
+
this.selectedElementsChanged.emit(selectingTree);
|
|
143
|
+
}, 0);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if ((changes['selectedNodeId'] && this.project) || changes['project']) {
|
|
149
|
+
this.flatElementsService.getOneElementById(this.selectedNodeId).subscribe((e) => {
|
|
150
|
+
if (e) {
|
|
151
|
+
this.selectElementService.setClickElement(e);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (this.isSelectionMode && (changes['selectingElements'] || changes['project'])) {
|
|
156
|
+
this.formSelectingList();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
ngOnDestroy() {
|
|
160
|
+
this.$destroy.next(true);
|
|
161
|
+
this.$destroy.complete();
|
|
162
|
+
}
|
|
163
|
+
mouseOver() {
|
|
164
|
+
if (!this.isListenKeyboard) {
|
|
165
|
+
this.isListenKeyboard = true;
|
|
166
|
+
this.avaTreeFilterInput?.nativeElement.focus();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
mouseOut() {
|
|
170
|
+
this.isListenKeyboard = false;
|
|
171
|
+
}
|
|
172
|
+
handleGlobalKeyboardEvent(event) {
|
|
173
|
+
this.ngZone.run(() => {
|
|
174
|
+
const keyEvent = event;
|
|
175
|
+
if (!this.limitedControl || this.isListenKeyboard) {
|
|
176
|
+
const element = this.preselectedElement || this.selectedElement;
|
|
177
|
+
const { operation, nextElement } = this.keyboardOperationService.handleKeyboardEvent(keyEvent, element) || {};
|
|
178
|
+
switch (operation) {
|
|
179
|
+
case KeyboardOperationType.MoveSelectedPositionUp:
|
|
180
|
+
this.showElement(nextElement, '.select');
|
|
181
|
+
break;
|
|
182
|
+
case KeyboardOperationType.MoveSelectedPositionDown:
|
|
183
|
+
this.showElement(nextElement, '.select');
|
|
184
|
+
break;
|
|
185
|
+
case KeyboardOperationType.MoveChosenPositionDown:
|
|
186
|
+
this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');
|
|
187
|
+
break;
|
|
188
|
+
case KeyboardOperationType.MoveChosenPositionUp:
|
|
189
|
+
this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');
|
|
190
|
+
break;
|
|
191
|
+
default:
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
showElement(element, nameQuery) {
|
|
198
|
+
if (element) {
|
|
199
|
+
if (this.modeView === ModeViewType.Tree) {
|
|
200
|
+
this.expandParentGroups(element);
|
|
201
|
+
}
|
|
202
|
+
setTimeout(() => this.scrollLine(nameQuery), 0);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
scrollLine(nameQuery) {
|
|
206
|
+
const parentRect = this.avaTreeWrapper?.nativeElement.getBoundingClientRect();
|
|
207
|
+
const showedElement = this.avaTreeWrapper?.nativeElement.querySelector(nameQuery);
|
|
208
|
+
if (!showedElement) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const childRect = showedElement.getBoundingClientRect();
|
|
212
|
+
if (childRect.bottom > parentRect.bottom ||
|
|
213
|
+
childRect.top < parentRect.top ||
|
|
214
|
+
(this.modeView === ModeViewType.Table && childRect.top < parentRect.top + 24)) {
|
|
215
|
+
showedElement?.scrollIntoView();
|
|
216
|
+
this.avaTreeWrapper?.nativeElement.scrollTo({ left: 0 });
|
|
217
|
+
if (this.modeView === ModeViewType.Table) {
|
|
218
|
+
setTimeout(() => this.correctScrollTableLine(showedElement, parentRect), 0);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
correctScrollTableLine(showedElement, parentRect) {
|
|
223
|
+
const childRect = showedElement.getBoundingClientRect();
|
|
224
|
+
if (childRect.top < parentRect.top + 24) {
|
|
225
|
+
this.avaTreeWrapper.nativeElement.scrollTop -= 24;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
expandParentGroups(element) {
|
|
229
|
+
this.expandParentGroupService.expandParentGroups(element, this.flatElements, this.expansionState);
|
|
230
|
+
}
|
|
231
|
+
onFilter(value) {
|
|
232
|
+
this.$filter.next(value);
|
|
233
|
+
}
|
|
234
|
+
expandedAllElements(isExpand) {
|
|
235
|
+
if (!isExpand) {
|
|
236
|
+
Object.keys(this.expansionState).forEach((id) => delete this.expansionState[id]);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
this.flatElements?.forEach((item) => {
|
|
240
|
+
if (item.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {
|
|
241
|
+
this.expansionState[item.id] = true;
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
formSelectingList() {
|
|
247
|
+
this.isEmiteSelectedElements = false;
|
|
248
|
+
if (!this.selectingElements) {
|
|
249
|
+
this.isEmiteSelectedElements = true;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.treeNodeSelectionService.getFlatSelectedListId(this.selectingElements);
|
|
253
|
+
this.treeNodeSelectionService.flatSelectedListId.forEach((id, index) => {
|
|
254
|
+
this.treeNodeSelectionService.changeSelecting(true, id);
|
|
255
|
+
if (index === this.treeNodeSelectionService.flatSelectedListId.length - 1) {
|
|
256
|
+
this.isEmiteSelectedElements = true;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
selectOrDeselectAll(value) {
|
|
261
|
+
this.treeNodeSelectionService.changeAll(value);
|
|
262
|
+
}
|
|
263
|
+
getFilteredList() {
|
|
264
|
+
if (this.flatElements?.length) {
|
|
265
|
+
if (!this.filter) {
|
|
266
|
+
this.filteredElementList = this.flatElements;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
this.filteredElementList = this.flatElements.filter((item) => this.flatElementsService.checkFilterValue(item, this.filter));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
initializeEventListeners() {
|
|
274
|
+
this.ngZone.runOutsideAngular(() => {
|
|
275
|
+
fromEvent(this.avaMainWrapper.nativeElement, 'mouseleave')
|
|
276
|
+
.pipe(takeUntil(this.$destroy))
|
|
277
|
+
.subscribe(() => {
|
|
278
|
+
this.mouseOut();
|
|
279
|
+
});
|
|
280
|
+
fromEvent(this.avaMainWrapper.nativeElement, 'mouseenter')
|
|
281
|
+
.pipe(takeUntil(this.$destroy))
|
|
282
|
+
.subscribe(() => {
|
|
283
|
+
this.mouseOver();
|
|
284
|
+
});
|
|
285
|
+
if (!this.isSelectionMode) {
|
|
286
|
+
fromEvent(document, 'keydown')
|
|
287
|
+
.pipe(takeUntil(this.$destroy), filter(() => !this.limitedControl || this.isListenKeyboard))
|
|
288
|
+
.subscribe((event) => {
|
|
289
|
+
this.handleGlobalKeyboardEvent(event);
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AvaTreeComponent, deps: [{ token: i1.FlatElementsService, self: true }, { token: i2.SelectElementService, self: true }, { token: i3.TreeNodeSelectionService, self: true }, { token: i4.ExpandParentGroupService, self: true }, { token: i5.KeyboardOperationService, self: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
295
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: AvaTreeComponent, selector: "ava-ava-tree", inputs: { project: "project", expansionState: "expansionState", selectedNodeId: "selectedNodeId", indent: "indent", selectedColor: "selectedColor", modeView: "modeView", customKeyboardOperationConfig: "customKeyboardOperationConfig", limitedControl: "limitedControl", isSelectionMode: "isSelectionMode", selectingElements: "selectingElements", listFilterFunc: "listFilterFunc", addTableColumns: "addTableColumns", functionView: "functionView", textWords: "textWords" }, outputs: { selectClick: "selectClick", selectDblClick: "selectDblClick", contextMenuEvent: "contextMenuEvent", selectedElementsChanged: "selectedElementsChanged" }, providers: [FlatElementsService, SelectElementService, TreeNodeSelectionService, ExpandParentGroupService, KeyboardOperationService], viewQueries: [{ propertyName: "avaTreeWrapper", first: true, predicate: ["avaTreeWrapper"], descendants: true }, { propertyName: "avaMainWrapper", first: true, predicate: ["avaMainWrapper"], descendants: true }, { propertyName: "avaTreeFilterInput", first: true, predicate: ["avaTreeFilterInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"main-wrapper\"\r\n #avaMainWrapper\r\n>\r\n <div\r\n class=\"control\"\r\n #control\r\n >\r\n <mat-form-field class=\"control-filter\">\r\n <mat-label>{{ textWords?.textSearch }}</mat-label>\r\n <input\r\n matInput\r\n [ngModel]=\"filterInput\"\r\n (ngModelChange)=\"onFilter($event)\"\r\n #avaTreeFilterInput\r\n />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"modeView === listModeViewType.Tree\">\r\n <button\r\n class=\"control-icon\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"expandedAllElements(true)\"\r\n [matTooltip]=\"textWords?.tooltipAllOpen || ''\"\r\n >\r\n <mat-icon class=\"layer-background\">layers</mat-icon>\r\n <mat-icon class=\"layer-icon\">add</mat-icon>\r\n </button>\r\n <button\r\n class=\"control-icon\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"expandedAllElements(false)\"\r\n [matTooltip]=\"textWords?.tooltipAllClose || ''\"\r\n >\r\n <mat-icon class=\"layer-background\">layers</mat-icon>\r\n <mat-icon class=\"layer-icon\">remove</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"isSelectionMode\">\r\n <button\r\n mat-raised-button\r\n (click)=\"selectOrDeselectAll(true)\"\r\n [matTooltip]=\"textWords?.tooltipAllAdd || ''\"\r\n class=\"control-button\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span>{{ textWords?.textAll }}</span>\r\n </button>\r\n <button\r\n mat-raised-button\r\n (click)=\"selectOrDeselectAll(false)\"\r\n [matTooltip]=\"textWords?.tooltipAllRemove || ''\"\r\n class=\"control-button\"\r\n >\r\n <mat-icon>remove</mat-icon>\r\n <span>{{ textWords?.textAll }}</span>\r\n </button>\r\n </ng-container>\r\n </div>\r\n <div\r\n [style.height]=\"'calc(100% - ' + control.offsetHeight + 'px)'\"\r\n class=\"ava-tree-wrapper\"\r\n #avaTreeWrapper\r\n >\r\n <ng-container *ngIf=\"flatElements?.length; else nothing\">\r\n <ng-container *ngIf=\"filteredElementList?.length; else nothingFiltered\">\r\n <ava-tree-structure\r\n *ngIf=\"modeView === listModeViewType.Tree && !avaTreeFilterInput.value\"\r\n [serviceSpecification]=\"serviceSpecification\"\r\n [indent]=\"indent\"\r\n [expansionState]=\"expansionState\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-tree-structure>\r\n <ava-list-structure\r\n *ngIf=\"modeView === listModeViewType.List || (modeView === listModeViewType.Tree && avaTreeFilterInput.value)\"\r\n [filteredElementList]=\"filteredElementList\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-list-structure>\r\n <ava-table-structure\r\n *ngIf=\"modeView === listModeViewType.Table\"\r\n [filteredElementList]=\"filteredElementList\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [addTableColumns]=\"addTableColumns\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-table-structure>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<ng-template #nothing>\r\n {{ textWords?.textNothing }}\r\n</ng-template>\r\n<ng-template #nothingFiltered>\r\n {{ textWords?.textNothingFiltered }}\r\n</ng-template>\r\n", styles: [".main-wrapper{max-height:100%;height:100%;overflow-y:auto;overflow-x:hidden}.control{display:flex;align-items:center;gap:5px;padding:4px}.control-filter{flex-grow:1}.control-icon{width:36px;height:36px;padding:0}.control-button{padding:0 5px}.ava-tree-wrapper{overflow-y:auto;overflow-x:hidden}::ng-deep .control .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .control .control-filter .mat-mdc-form-field-infix{min-height:auto;padding-top:10px;padding-bottom:2px}::ng-deep .control .control-filter .mat-mdc-floating-label{top:18px}::ng-deep .control .control-filter .mdc-text-field{padding:0 6px}.layer-background{font-size:36px;width:36px;height:36px}.layer-icon{width:36px;height:36px;position:absolute;inset:1px 0 0;color:#fff}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.TreeStructureComponent, selector: "ava-tree-structure", inputs: ["serviceSpecification", "indent", "expansionState", "isSelectionMode", "selectedColor"] }, { kind: "component", type: i14.ListStructureComponent, selector: "ava-list-structure", inputs: ["filteredElementList", "isSelectionMode", "selectedColor"] }, { kind: "component", type: i15.TableStructureComponent, selector: "ava-table-structure", inputs: ["functionView", "filteredElementList", "isSelectionMode", "addTableColumns", "selectedColor"] }] }); }
|
|
296
|
+
}
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AvaTreeComponent, decorators: [{
|
|
298
|
+
type: Component,
|
|
299
|
+
args: [{ selector: 'ava-ava-tree', providers: [FlatElementsService, SelectElementService, TreeNodeSelectionService, ExpandParentGroupService, KeyboardOperationService], template: "<div\r\n class=\"main-wrapper\"\r\n #avaMainWrapper\r\n>\r\n <div\r\n class=\"control\"\r\n #control\r\n >\r\n <mat-form-field class=\"control-filter\">\r\n <mat-label>{{ textWords?.textSearch }}</mat-label>\r\n <input\r\n matInput\r\n [ngModel]=\"filterInput\"\r\n (ngModelChange)=\"onFilter($event)\"\r\n #avaTreeFilterInput\r\n />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"modeView === listModeViewType.Tree\">\r\n <button\r\n class=\"control-icon\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"expandedAllElements(true)\"\r\n [matTooltip]=\"textWords?.tooltipAllOpen || ''\"\r\n >\r\n <mat-icon class=\"layer-background\">layers</mat-icon>\r\n <mat-icon class=\"layer-icon\">add</mat-icon>\r\n </button>\r\n <button\r\n class=\"control-icon\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"expandedAllElements(false)\"\r\n [matTooltip]=\"textWords?.tooltipAllClose || ''\"\r\n >\r\n <mat-icon class=\"layer-background\">layers</mat-icon>\r\n <mat-icon class=\"layer-icon\">remove</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"isSelectionMode\">\r\n <button\r\n mat-raised-button\r\n (click)=\"selectOrDeselectAll(true)\"\r\n [matTooltip]=\"textWords?.tooltipAllAdd || ''\"\r\n class=\"control-button\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span>{{ textWords?.textAll }}</span>\r\n </button>\r\n <button\r\n mat-raised-button\r\n (click)=\"selectOrDeselectAll(false)\"\r\n [matTooltip]=\"textWords?.tooltipAllRemove || ''\"\r\n class=\"control-button\"\r\n >\r\n <mat-icon>remove</mat-icon>\r\n <span>{{ textWords?.textAll }}</span>\r\n </button>\r\n </ng-container>\r\n </div>\r\n <div\r\n [style.height]=\"'calc(100% - ' + control.offsetHeight + 'px)'\"\r\n class=\"ava-tree-wrapper\"\r\n #avaTreeWrapper\r\n >\r\n <ng-container *ngIf=\"flatElements?.length; else nothing\">\r\n <ng-container *ngIf=\"filteredElementList?.length; else nothingFiltered\">\r\n <ava-tree-structure\r\n *ngIf=\"modeView === listModeViewType.Tree && !avaTreeFilterInput.value\"\r\n [serviceSpecification]=\"serviceSpecification\"\r\n [indent]=\"indent\"\r\n [expansionState]=\"expansionState\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-tree-structure>\r\n <ava-list-structure\r\n *ngIf=\"modeView === listModeViewType.List || (modeView === listModeViewType.Tree && avaTreeFilterInput.value)\"\r\n [filteredElementList]=\"filteredElementList\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-list-structure>\r\n <ava-table-structure\r\n *ngIf=\"modeView === listModeViewType.Table\"\r\n [filteredElementList]=\"filteredElementList\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n [addTableColumns]=\"addTableColumns\"\r\n [selectedColor]=\"selectedColor\"\r\n >\r\n </ava-table-structure>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<ng-template #nothing>\r\n {{ textWords?.textNothing }}\r\n</ng-template>\r\n<ng-template #nothingFiltered>\r\n {{ textWords?.textNothingFiltered }}\r\n</ng-template>\r\n", styles: [".main-wrapper{max-height:100%;height:100%;overflow-y:auto;overflow-x:hidden}.control{display:flex;align-items:center;gap:5px;padding:4px}.control-filter{flex-grow:1}.control-icon{width:36px;height:36px;padding:0}.control-button{padding:0 5px}.ava-tree-wrapper{overflow-y:auto;overflow-x:hidden}::ng-deep .control .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .control .control-filter .mat-mdc-form-field-infix{min-height:auto;padding-top:10px;padding-bottom:2px}::ng-deep .control .control-filter .mat-mdc-floating-label{top:18px}::ng-deep .control .control-filter .mdc-text-field{padding:0 6px}.layer-background{font-size:36px;width:36px;height:36px}.layer-icon{width:36px;height:36px;position:absolute;inset:1px 0 0;color:#fff}\n"] }]
|
|
300
|
+
}], ctorParameters: function () { return [{ type: i1.FlatElementsService, decorators: [{
|
|
301
|
+
type: Self
|
|
302
|
+
}] }, { type: i2.SelectElementService, decorators: [{
|
|
303
|
+
type: Self
|
|
304
|
+
}] }, { type: i3.TreeNodeSelectionService, decorators: [{
|
|
305
|
+
type: Self
|
|
306
|
+
}] }, { type: i4.ExpandParentGroupService, decorators: [{
|
|
307
|
+
type: Self
|
|
308
|
+
}] }, { type: i5.KeyboardOperationService, decorators: [{
|
|
309
|
+
type: Self
|
|
310
|
+
}] }, { type: i0.NgZone }]; }, propDecorators: { project: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], expansionState: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], selectedNodeId: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], indent: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], selectedColor: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], modeView: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], customKeyboardOperationConfig: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], limitedControl: [{
|
|
325
|
+
type: Input
|
|
326
|
+
}], isSelectionMode: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], selectingElements: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], listFilterFunc: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}], addTableColumns: [{
|
|
333
|
+
type: Input
|
|
334
|
+
}], functionView: [{
|
|
335
|
+
type: Input
|
|
336
|
+
}], textWords: [{
|
|
337
|
+
type: Input
|
|
338
|
+
}], selectClick: [{
|
|
339
|
+
type: Output
|
|
340
|
+
}], selectDblClick: [{
|
|
341
|
+
type: Output
|
|
342
|
+
}], contextMenuEvent: [{
|
|
343
|
+
type: Output
|
|
344
|
+
}], selectedElementsChanged: [{
|
|
345
|
+
type: Output
|
|
346
|
+
}], avaTreeWrapper: [{
|
|
347
|
+
type: ViewChild,
|
|
348
|
+
args: ['avaTreeWrapper']
|
|
349
|
+
}], avaMainWrapper: [{
|
|
350
|
+
type: ViewChild,
|
|
351
|
+
args: ['avaMainWrapper']
|
|
352
|
+
}], avaTreeFilterInput: [{
|
|
353
|
+
type: ViewChild,
|
|
354
|
+
args: ['avaTreeFilterInput']
|
|
355
|
+
}] } });
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUlMLFlBQVksRUFLYixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUk3RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUMzSCxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUN0QixNQUFNLGdGQUFnRixDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVEzSCxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCOzJEQUN1RDtJQUN2RCxJQUFhLDZC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O3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFVRyxZQUFZO3NCQUFwQixLQUFLO2dCQWNPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBbUJJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRSxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNlbGYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgREVGQVVMVF9GSUxURVJTLCBERUZBVUxUX1RFWFRfV09SRFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRleHRNZW51RGF0YVR5cGUsXHJcbiAgSUVsZW1lbnREdG8sXHJcbiAgSUZ1bmN0aW9uVmlld0xpbmUsXHJcbiAgTW9kZVZpZXdUeXBlLFxyXG4gIFByb2plY3REdG8sXHJcbiAgU2VsZWN0ZWRFbGVtZW50LFxyXG4gIFNlcnZpY2VTcGVjaWZpY2F0aW9uRHRvLFxyXG4gIFRhYmxlQ29sdW1uVHlwZVxyXG59IGZyb20gJy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgRmxhdEVsZW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZsYXQtZWxlbWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdEVsZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0LWVsZW1lbnQuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBJVGV4dFdvcmRzIH0gZnJvbSAncHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbnN0YW50cy9kZWZhdWx0VGV4dFdvcmRzJztcclxuaW1wb3J0IHsgU2VsZWN0aW5nRWxlbWVudHNUeXBlIH0gZnJvbSAncHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL21vZGVsL3NlbGVjdGluZy5tb2RlbCc7XHJcbmltcG9ydCB7IEV4cGFuZFBhcmVudEdyb3VwU2VydmljZSB9IGZyb20gJ3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvdHJlZS9zZXJ2aWNlcy9leHBhbmQtcGFyZW50LWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElLZXlib2FyZE9wZXJhdGlvbkNvbmZpZyxcclxuICBLZXlib2FyZE9wZXJhdGlvblNlcnZpY2UsXHJcbiAgS2V5Ym9hcmRPcGVyYXRpb25UeXBlXHJcbn0gZnJvbSAncHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL3NlcnZpY2VzL2tleWJvYXJkLW9wZXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAncHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL3NlcnZpY2VzL3RyZWUtbm9kZS1zZWxlY3Rpb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F2YS1hdmEtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YS10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdmEtdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0ZsYXRFbGVtZW50c1NlcnZpY2UsIFNlbGVjdEVsZW1lbnRTZXJ2aWNlLCBUcmVlTm9kZVNlbGVjdGlvblNlcnZpY2UsIEV4cGFuZFBhcmVudEdyb3VwU2VydmljZSwgS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXZhVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIHByb2plY3Q6IFByb2plY3REdG8gfCBudWxsID0gbnVsbDsgLy8gbWFpbiBkYXRhXHJcbiAgQElucHV0KCkgZXhwYW5zaW9uU3RhdGU6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTsgLy8gb2JqZWN0IHdpdGggZXhwYW5kZWQgZ3JvdXBzIGF0IHRoZSBiZWdpblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gaWQgaWYgc2VsZWN0ZWQgZWxlbWVudCBhdCB0aGUgYmVnaW5cclxuICBASW5wdXQoKSBpbmRlbnQgPSAnMjBweCc7IC8vIG9wdGlvbmFsIC0gZm9yIGNoYW5naW5nIGluZGVudHMgZWFjaCBncm91cFxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29sb3I6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBvcHRpb25hbCAtIGZvciBjaGFuZ2luZyBiYWNrZ3JvdW5kIG9mIHNlbGVjdGVkIGxpbmUgKGRlZmF1bHQ6IHByaW1hcnkgZm9ybSBNYXRlcmlhbFVJKVxyXG4gIEBJbnB1dCgpIG1vZGVWaWV3OiBNb2RlVmlld1R5cGUgPSBNb2RlVmlld1R5cGUuVHJlZTsgLy8gc3RydWN0dXJlIHZpZXc6IFRyZWUoZGVmYXVsdCkgLyBMaXN0IC8gVGFibGVcclxuXHJcbiAgLyoqV2l0aCB0aGlzIHBhcmFtZXRlciwgd2UgY2FuIGNvbmZpZ3VyZSB3aGljaCBrZXlzIHdpbGwgYmUgbGlzdGVuIHRvIHN3aXRjaCB0aGUgdHJlZSBlbGVtZW50cyxcclxuICAgKiBhbmQgYWxzbyB0byBkaXNhYmxlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBrZXlzICovXHJcbiAgQElucHV0KCkgc2V0IGN1c3RvbUtleWJvYXJkT3BlcmF0aW9uQ29uZmlnKGNvbmZpZzogSUtleWJvYXJkT3BlcmF0aW9uQ29uZmlnKSB7XHJcbiAgICB0aGlzLmtleWJvYXJkT3BlcmF0aW9uU2VydmljZS5tZXJnZUNvbmZpZ09wZXJhdGlvbihjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgbGltaXRlZENvbnRyb2wgPSB0cnVlOyAvLyB1c2Uga2V5Ym9hcmQgb25seSBpZiBjdXJzb3IgaXMgb3ZlciBvZiB0cmVlXHJcbiAgQElucHV0KCkgaXNTZWxlY3Rpb25Nb2RlID0gZmFsc2U7IC8vIG1vZGUgZm9yIHNlbGVjdGluZyBieSBjaGVja2JveFxyXG4gIEBJbnB1dCgpIHNlbGVjdGluZ0VsZW1lbnRzOiBTZWxlY3RlZEVsZW1lbnRbXSB8IG51bGwgPSBudWxsOyAvLyBvcHRpb25hbCAtIHNlbGVjdGVkIGVsZW1lbnRzIGF0IHRoZSBiZWdpblxyXG4gIEBJbnB1dCgpIGxpc3RGaWx0ZXJGdW5jID0gREVGQVVMVF9GSUxURVJTOyAvLyBhbGxvdyB0byBwcm9ncmFtIGZpbHRlcmluZyBieSBmaWx0ZXIgZnVuY3Rpb246IChlbGVtZW50OiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiBib29sZWFuXHJcbiAgQElucHV0KCkgYWRkVGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtblR5cGVbXSA9IFtdOyAvLyBvcHRpb25hbCAtIGFsbG93IHRvIGFkZCBkaXNwbGF5ZWQgY29sdW1ucyBmb3IgdGFibGVcclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyBhZGRUYWJsZUNvbHVtbnM6IEFycmF5IG9mIG9iamVjdHNcclxuICAvLyB7XHJcbiAgLy8gICBuYW1lOiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgY29sdW1uXHJcbiAgLy8gICB0aXRsZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3dlZCB0aXRsZSBvZiBjb2x1bW5cclxuICAvLyAgIGFsaWduPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgYWxpZ2h0OiBsZWZ0KGRlZmF1bHQpIC8gY2VudGVyIC8gcmlnaHRcclxuICAvLyAgIG51bWJlckZvcm1hdD86IHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgZm9ybWF0IG9mIG51bWJlciB2YWx1ZSwgZXhhbXBsZTogJzEuMi0yJ1xyXG4gIC8vIH1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICBASW5wdXQoKSBmdW5jdGlvblZpZXc6IElGdW5jdGlvblZpZXdMaW5lW10gfCBudWxsID0gbnVsbDsgLy8gYWxsb3cgdG8gcHJvZ3JhbSB2aWV3IGZvciBlYWNoIGVsZW1lbnQgYnkgZmlsdGVyXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gZnVuY3Rpb25WaWV3OiBBcnJheSBvZiBvYmplY3RzXHJcbiAgLy8gICB7XHJcbiAgLy8gICAgIG5hbWU6IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgdmlldyBwYXJ0OiB5b3UgY2FuIGFkZC9yZW1vdmUgaXQgd2hlbiBpdCBuZWVkXHJcbiAgLy8gICAgIGZ1bmM6IChlbGVtZW50OiBhbnksIHJlc3VsdD86IGFueSkgPT4gYm9vbGVhbiwgIC8vIHRoaXMgZmlsdGVyIGZ1bmN0aW9uIGNhbGN1bGF0ZSBjb25kaXRpb24gdG8gY2hhbmdlIHZpZXdcclxuICAvLyAgICAgdmlldzoge1xyXG4gIC8vICAgICAgIGljb25OYW1lPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIG5hbWUgb2YgaWNvblxyXG4gIC8vICAgICAgIGljb25Db2xvcj86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIGljb25cclxuICAvLyAgICAgICB0ZXh0Qm9sZD86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlZCB3ZWlnaHQgb2YgdGV4dFxyXG4gIC8vICAgICAgIHRleHRDb2xvcj86IHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIHRleHRcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICBASW5wdXQoKSBzZXQgdGV4dFdvcmRzKHdvcmRzOiBJVGV4dFdvcmRzIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi50aGlzLnRleHRXb3JkcywgLi4ud29yZHMgfTtcclxuICB9IC8vIGFsbG93IHRvIHRyYW5zbGF0ZSBhbGwgdGV4dHMgdG8gb3RoZXIgbGFuZ3VhZ2VcclxuICBnZXQgdGV4dFdvcmRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHRXb3JkcztcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGV4dFdvcmRzOiBJVGV4dFdvcmRzIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIHtcclxuICAvLyAgIHRleHRTZWFyY2g6IHN0cmluZyxcclxuICAvLyAgIHRleHROb3RoaW5nOiBzdHJpbmcsXHJcbiAgLy8gICB0ZXh0Tm90aGluZ0ZpbHRlcmVkOiBzdHJpbmcsXHJcbiAgLy8gICB0ZXh0QWxsOiBzdHJpbmcsXHJcbiAgLy8gICB0b29sdGlwQWxsT3Blbjogc3RyaW5nLFxyXG4gIC8vICAgdG9vbHRpcEFsbENsb3NlOiBzdHJpbmcsXHJcbiAgLy8gICB0b29sdGlwQWxsQWRkOnN0cmluZyxcclxuICAvLyAgIHRvb2x0aXBBbGxSZW1vdmU6IHN0cmluZyxcclxuICAvLyB9XHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICBAT3V0cHV0KCkgc2VsZWN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvIHwgbnVsbD4oKTsgLy8gZXZlbnQgYWZ0ZXIgZWxlbWVudCBzZWxlY3RlZCBieSBjbGlja1xyXG4gIEBPdXRwdXQoKSBzZWxlY3REYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUVsZW1lbnREdG8+KCk7IC8vIGV2ZW50IGFmdGVyIGVsZW1lbnQgc2VsZWN0ZWQgYnkgZG91YmxlIGNsaWNrXHJcbiAgQE91dHB1dCgpIGNvbnRleHRNZW51RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnRleHRNZW51RGF0YVR5cGU+KCk7IC8vIGV2ZW50IGFmdGVyIGVsZW1lbnQgY2FsbCBjb250ZXh0IG1lbnUgYnkgcmlnaHQgYnV0dG9uIGNsaWNrXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRWxlbWVudHNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RlZEVsZW1lbnRbXT4oKTsgLy8gZXZlbnQgYWZ0ZXIgY2hhbmdlZCBzZWxlY3RpbmcgaW4gc2VsZWN0aW5nIG1vZGVcclxuICBAVmlld0NoaWxkKCdhdmFUcmVlV3JhcHBlcicpIGF2YVRyZWVXcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnYXZhTWFpbldyYXBwZXInKSBhdmFNYWluV3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2F2YVRyZWVGaWx0ZXJJbnB1dCcpIGF2YVRyZWVGaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgc2VsZWN0ZWRFbGVtZW50OiBJRWxlbWVudER0byB8IG51bGwgPSBudWxsO1xyXG4gIHNlcnZpY2VTcGVjaWZpY2F0aW9uITogU2VydmljZVNwZWNpZmljYXRpb25EdG87XHJcbiAgaXNMaXN0ZW5LZXlib2FyZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMgPSBmYWxzZTtcclxuICBwcml2YXRlIHNlbGVjdGluZ0VsZW1lbnRzVHJlZURhdGE6IFNlbGVjdGluZ0VsZW1lbnRzVHlwZVtdID0gW107XHJcbiAgZmxhdEVsZW1lbnRzOiBJRWxlbWVudER0b1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJlc2VsZWN0ZWRFbGVtZW50OiBJRWxlbWVudER0byB8IG51bGwgPSBudWxsO1xyXG4gIGZpbHRlcklucHV0ID0gJyc7XHJcbiAgbGlzdE1vZGVWaWV3VHlwZSA9IE1vZGVWaWV3VHlwZTtcclxuICBwcml2YXRlIGZpbHRlciA9ICcnO1xyXG4gIHByaXZhdGUgJGZpbHRlciA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XHJcbiAgZmlsdGVyZWRFbGVtZW50TGlzdDogSUVsZW1lbnREdG9bXSA9IFtdO1xyXG4gIHByaXZhdGUgJGRlc3Ryb3kgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBTZWxmKCkgcHJpdmF0ZSBmbGF0RWxlbWVudHNTZXJ2aWNlOiBGbGF0RWxlbWVudHNTZXJ2aWNlLFxyXG4gICAgQFNlbGYoKSBwcml2YXRlIHNlbGVjdEVsZW1lbnRTZXJ2aWNlOiBTZWxlY3RFbGVtZW50U2VydmljZSxcclxuICAgIEBTZWxmKCkgcHJpdmF0ZSB0cmVlTm9kZVNlbGVjdGlvblNlcnZpY2U6IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSxcclxuICAgIEBTZWxmKCkgcHJpdmF0ZSBleHBhbmRQYXJlbnRHcm91cFNlcnZpY2U6IEV4cGFuZFBhcmVudEdyb3VwU2VydmljZSxcclxuICAgIEBTZWxmKCkgcHJpdmF0ZSBrZXlib2FyZE9wZXJhdGlvblNlcnZpY2U6IEtleWJvYXJkT3BlcmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4uREVGQVVMVF9URVhUX1dPUkRTIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2UucHJlc2VsZWN0ZWRFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLnByZXNlbGVjdGVkRWxlbWVudCA9IGUpKTtcclxuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2Uuc2VsZWN0Q2xpY2tFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSBlO1xyXG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2Uuc2VsZWN0RGJsQ2xpY2tFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+IHRoaXMuc2VsZWN0RGJsQ2xpY2suZW1pdChlKSk7XHJcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENvbnRleHRNZW51RWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmNvbnRleHRNZW51RXZlbnQuZW1pdChlKSk7XHJcbiAgICB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuZmxhdEVsZW1lbnRzRHRvLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5mbGF0RWxlbWVudHMgPSBlO1xyXG4gICAgICB0aGlzLmdldEZpbHRlcmVkTGlzdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy4kZmlsdGVyLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMjUwKSkuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRMaXN0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UubGlzdEZpbHRlckZ1bmMgPSB0aGlzLmxpc3RGaWx0ZXJGdW5jO1xyXG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZ1bmN0aW9uVmlldyA9IHRoaXMuZnVuY3Rpb25WaWV3O1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydwcm9qZWN0J10gJiYgdGhpcy5wcm9qZWN0Py5zZXJ2aWNlU3BlY2lmaWNhdGlvbnM/LlswXSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uID0gdGhpcy5wcm9qZWN0LnNlcnZpY2VTcGVjaWZpY2F0aW9uc1swXTtcclxuICAgICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLnNldEVsZW1lbnRzRHRvKHRoaXMuc2VydmljZVNwZWNpZmljYXRpb24pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RpbmdFbGVtZW50c1RyZWVEYXRhID0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UubG9hZFNlbGVjdGluZ0VsZW1lbnRzKHRoaXMuc2VydmljZVNwZWNpZmljYXRpb24uZWxlbWVudHMpO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLnRyZWVOb2RlU2VsZWN0aW5nLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW5nVHJlZSA9IHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmdldFRyZWVSb290KHRoaXMuc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZC5lbWl0KHNlbGVjdGluZ1RyZWUpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICgoY2hhbmdlc1snc2VsZWN0ZWROb2RlSWQnXSAmJiB0aGlzLnByb2plY3QpIHx8IGNoYW5nZXNbJ3Byb2plY3QnXSkge1xyXG4gICAgICB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuZ2V0T25lRWxlbWVudEJ5SWQodGhpcy5zZWxlY3RlZE5vZGVJZCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2Uuc2V0Q2xpY2tFbGVtZW50KGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlICYmIChjaGFuZ2VzWydzZWxlY3RpbmdFbGVtZW50cyddIHx8IGNoYW5nZXNbJ3Byb2plY3QnXSkpIHtcclxuICAgICAgdGhpcy5mb3JtU2VsZWN0aW5nTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLiRkZXN0cm95Lm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBtb3VzZU92ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNMaXN0ZW5LZXlib2FyZCkge1xyXG4gICAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmF2YVRyZWVGaWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VPdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUdsb2JhbEtleWJvYXJkRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXlFdmVudCA9IGV2ZW50IGFzIEtleWJvYXJkRXZlbnQ7XHJcbiAgICAgIGlmICghdGhpcy5saW1pdGVkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wcmVzZWxlY3RlZEVsZW1lbnQgfHwgdGhpcy5zZWxlY3RlZEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgb3BlcmF0aW9uLCBuZXh0RWxlbWVudCB9ID0gdGhpcy5rZXlib2FyZE9wZXJhdGlvblNlcnZpY2UuaGFuZGxlS2V5Ym9hcmRFdmVudChrZXlFdmVudCwgZWxlbWVudCkgfHwge307XHJcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcclxuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVTZWxlY3RlZFBvc2l0aW9uVXA6XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsICcuc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBLZXlib2FyZE9wZXJhdGlvblR5cGUuTW92ZVNlbGVjdGVkUG9zaXRpb25Eb3duOlxyXG4gICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50KG5leHRFbGVtZW50LCAnLnNlbGVjdCcpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVDaG9zZW5Qb3NpdGlvbkRvd246XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsIG5leHRFbGVtZW50Py5pZCA9PT0gdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LmlkID8gJy5zZWxlY3QnIDogJy5jaG9vc2UnKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlQ2hvc2VuUG9zaXRpb25VcDpcclxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgbmV4dEVsZW1lbnQ/LmlkID09PSB0aGlzLnNlbGVjdGVkRWxlbWVudD8uaWQgPyAnLnNlbGVjdCcgOiAnLmNob29zZScpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93RWxlbWVudChlbGVtZW50OiBJRWxlbWVudER0byB8IG51bGwsIG5hbWVRdWVyeTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRyZWUpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZFBhcmVudEdyb3VwcyhlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTGluZShuYW1lUXVlcnkpLCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjcm9sbExpbmUobmFtZVF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLmF2YVRyZWVXcmFwcGVyPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3Qgc2hvd2VkRWxlbWVudCA9IHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihuYW1lUXVlcnkpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGlmICghc2hvd2VkRWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRSZWN0ID0gc2hvd2VkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChcclxuICAgICAgY2hpbGRSZWN0LmJvdHRvbSA+IHBhcmVudFJlY3QuYm90dG9tIHx8XHJcbiAgICAgIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCB8fFxyXG4gICAgICAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlICYmIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KVxyXG4gICAgKSB7XHJcbiAgICAgIHNob3dlZEVsZW1lbnQ/LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiAwIH0pO1xyXG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcnJlY3RTY3JvbGxUYWJsZUxpbmUoc2hvd2VkRWxlbWVudCwgcGFyZW50UmVjdCksIDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3JyZWN0U2Nyb2xsVGFibGVMaW5lKHNob3dlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRSZWN0OiBET01SZWN0KTogdm9pZCB7XHJcbiAgICBjb25zdCBjaGlsZFJlY3QgPSBzaG93ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgaWYgKGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KSB7XHJcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gMjQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBhbmRQYXJlbnRHcm91cHMoZWxlbWVudDogSUVsZW1lbnREdG8pOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlLmV4cGFuZFBhcmVudEdyb3VwcyhlbGVtZW50LCB0aGlzLmZsYXRFbGVtZW50cywgdGhpcy5leHBhbnNpb25TdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLiRmaWx0ZXIubmV4dCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBleHBhbmRlZEFsbEVsZW1lbnRzKGlzRXhwYW5kOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzRXhwYW5kKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXhwYW5zaW9uU3RhdGUpLmZvckVhY2goKGlkOiBzdHJpbmcpID0+IGRlbGV0ZSB0aGlzLmV4cGFuc2lvblN0YXRlW2lkXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZsYXRFbGVtZW50cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLmVsZW1lbnRUeXBlRGlzY3JpbWluYXRvciA9PT0gJ1NlcnZpY2VTcGVjaWZpY2F0aW9uR3JvdXBEdG8nKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGFuc2lvblN0YXRlW2l0ZW0uaWRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybVNlbGVjdGluZ0xpc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW5nRWxlbWVudHMpIHtcclxuICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyZWVOb2RlU2VsZWN0aW9uU2VydmljZS5nZXRGbGF0U2VsZWN0ZWRMaXN0SWQodGhpcy5zZWxlY3RpbmdFbGVtZW50cyk7XHJcbiAgICB0aGlzLnRyZWVOb2RlU2VsZWN0aW9uU2VydmljZS5mbGF0U2VsZWN0ZWRMaXN0SWQuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmNoYW5nZVNlbGVjdGluZyh0cnVlLCBpZCk7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICB0aGlzLmlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPckRlc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyZWVOb2RlU2VsZWN0aW9uU2VydmljZS5jaGFuZ2VBbGwodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWRMaXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmxhdEVsZW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgaWYgKCF0aGlzLmZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmNoZWNrRmlsdGVyVmFsdWUoaXRlbSwgdGhpcy5maWx0ZXIpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGZyb21FdmVudCh0aGlzLmF2YU1haW5XcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vdXNlT3V0KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBmcm9tRXZlbnQodGhpcy5hdmFNYWluV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb3VzZU92ZXIoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJylcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4kZGVzdHJveSksXHJcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5saW1pdGVkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxLZXlib2FyZEV2ZW50KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwibWFpbi13cmFwcGVyXCJcclxuICAjYXZhTWFpbldyYXBwZXJcclxuPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29udHJvbFwiXHJcbiAgICAjY29udHJvbFxyXG4gID5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbnRyb2wtZmlsdGVyXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgdGV4dFdvcmRzPy50ZXh0U2VhcmNoIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVySW5wdXRcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICNhdmFUcmVlRmlsdGVySW5wdXRcclxuICAgICAgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZVwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImV4cGFuZGVkQWxsRWxlbWVudHModHJ1ZSlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbE9wZW4gfHwgJydcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItYmFja2dyb3VuZFwiPmxheWVyczwvbWF0LWljb24+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItaWNvblwiPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImV4cGFuZGVkQWxsRWxlbWVudHMoZmFsc2UpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ0ZXh0V29yZHM/LnRvb2x0aXBBbGxDbG9zZSB8fCAnJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1iYWNrZ3JvdW5kXCI+bGF5ZXJzPC9tYXQtaWNvbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1pY29uXCI+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NlbGVjdGlvbk1vZGVcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yRGVzZWxlY3RBbGwodHJ1ZSlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbEFkZCB8fCAnJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWJ1dHRvblwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj57eyB0ZXh0V29yZHM/LnRleHRBbGwgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JEZXNlbGVjdEFsbChmYWxzZSlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbFJlbW92ZSB8fCAnJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWJ1dHRvblwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj57eyB0ZXh0V29yZHM/LnRleHRBbGwgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCInY2FsYygxMDAlIC0gJyArIGNvbnRyb2wub2Zmc2V0SGVpZ2h0ICsgJ3B4KSdcIlxyXG4gICAgY2xhc3M9XCJhdmEtdHJlZS13cmFwcGVyXCJcclxuICAgICNhdmFUcmVlV3JhcHBlclxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbGF0RWxlbWVudHM/Lmxlbmd0aDsgZWxzZSBub3RoaW5nXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZEVsZW1lbnRMaXN0Py5sZW5ndGg7IGVsc2Ugbm90aGluZ0ZpbHRlcmVkXCI+XHJcbiAgICAgICAgPGF2YS10cmVlLXN0cnVjdHVyZVxyXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlICYmICFhdmFUcmVlRmlsdGVySW5wdXQudmFsdWVcIlxyXG4gICAgICAgICAgW3NlcnZpY2VTcGVjaWZpY2F0aW9uXT1cInNlcnZpY2VTcGVjaWZpY2F0aW9uXCJcclxuICAgICAgICAgIFtpbmRlbnRdPVwiaW5kZW50XCJcclxuICAgICAgICAgIFtleHBhbnNpb25TdGF0ZV09XCJleHBhbnNpb25TdGF0ZVwiXHJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hdmEtdHJlZS1zdHJ1Y3R1cmU+XHJcbiAgICAgICAgPGF2YS1saXN0LXN0cnVjdHVyZVxyXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5MaXN0IHx8IChtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlICYmIGF2YVRyZWVGaWx0ZXJJbnB1dC52YWx1ZSlcIlxyXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXHJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hdmEtbGlzdC1zdHJ1Y3R1cmU+XHJcbiAgICAgICAgPGF2YS10YWJsZS1zdHJ1Y3R1cmVcclxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVGFibGVcIlxyXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXHJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICBbYWRkVGFibGVDb2x1bW5zXT1cImFkZFRhYmxlQ29sdW1uc1wiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hdmEtdGFibGUtc3RydWN0dXJlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNub3RoaW5nPlxyXG4gIHt7IHRleHRXb3Jkcz8udGV4dE5vdGhpbmcgfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNub3RoaW5nRmlsdGVyZWQ+XHJcbiAge3sgdGV4dFdvcmRzPy50ZXh0Tm90aGluZ0ZpbHRlcmVkIH19XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/select-element.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "../tree-item/tree-item.component";
|
|
7
|
+
export class ListStructureComponent {
|
|
8
|
+
constructor(selectElementService) {
|
|
9
|
+
this.selectElementService = selectElementService;
|
|
10
|
+
this.filteredElementList = [];
|
|
11
|
+
this.isSelectionMode = false;
|
|
12
|
+
this.selectedColor = null;
|
|
13
|
+
this.selectedElement = null;
|
|
14
|
+
this.$destroy = new Subject();
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {
|
|
18
|
+
this.selectedElement = element;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
ngOnDestroy() {
|
|
22
|
+
this.$destroy.next(true);
|
|
23
|
+
this.$destroy.complete();
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: ListStructureComponent, deps: [{ token: i1.SelectElementService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: ListStructureComponent, selector: "ava-list-structure", inputs: { filteredElementList: "filteredElementList", isSelectionMode: "isSelectionMode", selectedColor: "selectedColor" }, ngImport: i0, template: "<ng-container *ngFor=\"let element of filteredElementList\">\r\n <div\r\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\r\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\r\n >\r\n <ava-tree-item\r\n [element]=\"element\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n ></ava-tree-item>\r\n </div>\r\n</ng-container>\r\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.TreeItemComponent, selector: "ava-tree-item", inputs: ["element", "expansionState", "isSelectionMode"] }] }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: ListStructureComponent, decorators: [{
|
|
29
|
+
type: Component,
|
|
30
|
+
args: [{ selector: 'ava-list-structure', template: "<ng-container *ngFor=\"let element of filteredElementList\">\r\n <div\r\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\r\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\r\n >\r\n <ava-tree-item\r\n [element]=\"element\"\r\n [isSelectionMode]=\"isSelectionMode\"\r\n ></ava-tree-item>\r\n </div>\r\n</ng-container>\r\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"] }]
|
|
31
|
+
}], ctorParameters: function () { return [{ type: i1.SelectElementService }]; }, propDecorators: { filteredElementList: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}], isSelectionMode: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], selectedColor: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}] } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1zdHJ1Y3R1cmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvbGlzdC1zdHJ1Y3R1cmUvbGlzdC1zdHJ1Y3R1cmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvbGlzdC1zdHJ1Y3R1cmUvbGlzdC1zdHJ1Y3R1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBVTFDLE1BQU0sT0FBTyxzQkFBc0I7SUFRakMsWUFBbUIsb0JBQTBDO1FBQTFDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFQcEQsd0JBQW1CLEdBQWtCLEVBQUUsQ0FBQztRQUN4QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFN0Msb0JBQWUsR0FBdUIsSUFBSSxDQUFDO1FBQ25DLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBRXNCLENBQUM7SUFFakUsUUFBUTtRQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBbkJVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHNMQ1puQyxnYkFXQTs7MkZEQ2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjsyR0FLckIsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSUVsZW1lbnREdG8gfSBmcm9tICcuLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdEVsZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0LWVsZW1lbnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F2YS1saXN0LXN0cnVjdHVyZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3Qtc3RydWN0dXJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXN0cnVjdHVyZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0U3RydWN0dXJlQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBmaWx0ZXJlZEVsZW1lbnRMaXN0OiBJRWxlbWVudER0b1tdID0gW107XHJcbiAgQElucHV0KCkgaXNTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRDb2xvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlICRkZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHNlbGVjdEVsZW1lbnRTZXJ2aWNlOiBTZWxlY3RFbGVtZW50U2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENsaWNrRWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLiRkZXN0cm95Lm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgZmlsdGVyZWRFbGVtZW50TGlzdFwiPlxyXG4gIDxkaXZcclxuICAgIFtjbGFzcy5zZWxlY3RdPVwiIWlzU2VsZWN0aW9uTW9kZSAmJiBlbGVtZW50LmlkID09PSBzZWxlY3RlZEVsZW1lbnQ/LmlkXCJcclxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIiFpc1NlbGVjdGlvbk1vZGUgJiYgZWxlbWVudC5pZCA9PT0gc2VsZWN0ZWRFbGVtZW50Py5pZCA/IHNlbGVjdGVkQ29sb3IgfHwgJycgOiAnJ1wiXHJcbiAgPlxyXG4gICAgPGF2YS10cmVlLWl0ZW1cclxuICAgICAgW2VsZW1lbnRdPVwiZWxlbWVudFwiXHJcbiAgICAgIFtpc1NlbGVjdGlvbk1vZGVdPVwiaXNTZWxlY3Rpb25Nb2RlXCJcclxuICAgID48L2F2YS10cmVlLWl0ZW0+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|