ecabs-components 0.0.1 → 0.0.3
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 +24 -24
- package/esm2020/lib/base/directives/digits-only.directive.module.mjs +22 -0
- package/esm2020/lib/base/validation/validation.component.mjs +14 -102
- package/esm2020/lib/ecabs-input/ecabs-input.module.mjs +6 -6
- package/esm2020/lib/ecabs-select/ecabs-select.component.mjs +222 -0
- package/esm2020/lib/ecabs-select/ecabs-select.module.mjs +60 -0
- package/esm2020/lib/ecabs-textarea/ecabs-textarea.component.mjs +62 -0
- package/esm2020/lib/ecabs-textarea/ecabs-textarea.module.mjs +20 -0
- package/esm2020/lib/services/ecabs-components.service.mjs +32 -0
- package/esm2020/public-api.mjs +5 -1
- package/fesm2015/ecabs-components.mjs +404 -106
- package/fesm2015/ecabs-components.mjs.map +1 -1
- package/fesm2020/ecabs-components.mjs +402 -106
- package/fesm2020/ecabs-components.mjs.map +1 -1
- package/lib/base/directives/digits-only.directive.d.ts +3 -3
- package/lib/base/directives/digits-only.directive.module.d.ts +8 -0
- package/lib/base/validation/validation.component.d.ts +5 -3
- package/lib/ecabs-input/ecabs-input.module.d.ts +6 -6
- package/lib/ecabs-select/ecabs-select.component.d.ts +59 -0
- package/lib/ecabs-select/ecabs-select.module.d.ts +15 -0
- package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +20 -0
- package/lib/ecabs-textarea/ecabs-textarea.module.d.ts +10 -0
- package/lib/services/ecabs-components.service.d.ts +16 -0
- package/package.json +3 -2
- package/public-api.d.ts +4 -0
- package/styles/material/overrides/_datepicker.scss +25 -1
- package/styles/material/overrides/_phone.scss +2 -2
- package/styles/scss/modules/_datepicker.scss +3 -3
- package/styles/scss/modules/_phone.scss +3 -1
- package/styles/scss/modules/_select.scss +16 -0
- package/lib/base/directives/digits-only.directive.ts +0 -129
- package/lib/base/element-base.ts +0 -72
- package/lib/base/element-wrapper/element-wrapper.component.html +0 -30
- package/lib/base/element-wrapper/element-wrapper.component.ts +0 -33
- package/lib/base/element-wrapper/element-wrapper.module.ts +0 -30
- package/lib/base/hint/hint.component.html +0 -1
- package/lib/base/hint/hint.component.scss +0 -0
- package/lib/base/hint/hint.component.ts +0 -12
- package/lib/base/hint/hint.module.ts +0 -13
- package/lib/base/validation/validation.component.html +0 -8
- package/lib/base/validation/validation.component.scss +0 -0
- package/lib/base/validation/validation.component.ts +0 -171
- package/lib/base/validation/validation.module.ts +0 -12
- package/lib/ecabs-buttons/ecabs-buttons.component.html +0 -18
- package/lib/ecabs-buttons/ecabs-buttons.component.ts +0 -54
- package/lib/ecabs-buttons/ecabs-buttons.module.ts +0 -13
- package/lib/ecabs-input/ecabs-input.component.html +0 -26
- package/lib/ecabs-input/ecabs-input.component.ts +0 -83
- package/lib/ecabs-input/ecabs-input.module.ts +0 -14
- package/lib/ecabs-loading/ecabs-loading.component.html +0 -7
- package/lib/ecabs-loading/ecabs-loading.component.spec.ts +0 -24
- package/lib/ecabs-loading/ecabs-loading.component.ts +0 -11
- package/lib/ecabs-loading/ecabs-loading.module.ts +0 -11
- package/lib/ecabs-loading/spinner/spinner.component.html +0 -5
- package/lib/ecabs-loading/spinner/spinner.component.scss +0 -61
- package/lib/ecabs-loading/spinner/spinner.component.spec.ts +0 -24
- package/lib/ecabs-loading/spinner/spinner.component.ts +0 -11
- package/public-api.ts +0 -7
- package/test.ts +0 -27
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# EcabsComponents
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project ecabs-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ecabs-components`.
|
|
8
|
-
> Note: Don't forget to add `--project ecabs-components` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build ecabs-components` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build ecabs-components`, go to the dist folder `cd dist/ecabs-components` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test ecabs-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# EcabsComponents
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ecabs-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ecabs-components`.
|
|
8
|
+
> Note: Don't forget to add `--project ecabs-components` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ecabs-components` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ecabs-components`, go to the dist folder `cd dist/ecabs-components` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ecabs-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { DigitsOnlyDirective } from './digits-only.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class DigitsOnlyDirectivesModule {
|
|
6
|
+
}
|
|
7
|
+
DigitsOnlyDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DigitsOnlyDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
8
|
+
DigitsOnlyDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DigitsOnlyDirectivesModule, declarations: [DigitsOnlyDirective], imports: [CommonModule], exports: [DigitsOnlyDirective] });
|
|
9
|
+
DigitsOnlyDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DigitsOnlyDirectivesModule, imports: [CommonModule] });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DigitsOnlyDirectivesModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [CommonModule],
|
|
14
|
+
declarations: [
|
|
15
|
+
DigitsOnlyDirective,
|
|
16
|
+
],
|
|
17
|
+
exports: [
|
|
18
|
+
DigitsOnlyDirective,
|
|
19
|
+
],
|
|
20
|
+
}]
|
|
21
|
+
}] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlnaXRzLW9ubHkuZGlyZWN0aXZlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9iYXNlL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkuZGlyZWN0aXZlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFXOUQsTUFBTSxPQUFPLDBCQUEwQjs7d0hBQTFCLDBCQUEwQjt5SEFBMUIsMEJBQTBCLGlCQU5uQyxtQkFBbUIsYUFGVixZQUFZLGFBS3JCLG1CQUFtQjt5SEFHViwwQkFBMEIsWUFSMUIsWUFBWTs0RkFRWiwwQkFBMEI7a0JBVHRDLFFBQVE7bUJBQUU7b0JBQ1QsT0FBTyxFQUFFLENBQUUsWUFBWSxDQUFFO29CQUN6QixZQUFZLEVBQUU7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3FCQUNwQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBEaWdpdHNPbmx5RGlyZWN0aXZlIH0gZnJvbSAnLi9kaWdpdHMtb25seS5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKCB7XHJcbiAgaW1wb3J0czogWyBDb21tb25Nb2R1bGUgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIERpZ2l0c09ubHlEaXJlY3RpdmUsXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBEaWdpdHNPbmx5RGlyZWN0aXZlLFxyXG4gIF0sXHJcbn0gKVxyXG5leHBvcnQgY2xhc3MgRGlnaXRzT25seURpcmVjdGl2ZXNNb2R1bGUgeyB9XHJcbiJdfQ==
|
|
@@ -1,101 +1,12 @@
|
|
|
1
1
|
import { Component, Input, } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "
|
|
3
|
+
import * as i1 from "../../services/ecabs-components.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
4
5
|
export class ValidationComponent {
|
|
5
|
-
constructor() {
|
|
6
|
+
constructor(ecabsService) {
|
|
7
|
+
this.ecabsService = ecabsService;
|
|
6
8
|
this.showValidationOnNotTouched = false;
|
|
7
|
-
this.errorMessages = [];
|
|
8
9
|
this._messages = {};
|
|
9
|
-
// this.errorMessages = [
|
|
10
|
-
// {
|
|
11
|
-
// type: 'required',
|
|
12
|
-
// message: this.translateService.instant(
|
|
13
|
-
// 'FORMS.VALIDATION.LABEL_REQUIRED'
|
|
14
|
-
// ),
|
|
15
|
-
// },
|
|
16
|
-
// {
|
|
17
|
-
// type: 'minlength',
|
|
18
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MIN_LENGTH'),
|
|
19
|
-
// },
|
|
20
|
-
// {
|
|
21
|
-
// type: 'maxlength',
|
|
22
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MAX_LENGTH'),
|
|
23
|
-
// },
|
|
24
|
-
// {
|
|
25
|
-
// type: 'min',
|
|
26
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MIN'),
|
|
27
|
-
// },
|
|
28
|
-
// {
|
|
29
|
-
// type: 'max',
|
|
30
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MAX'),
|
|
31
|
-
// },
|
|
32
|
-
// {
|
|
33
|
-
// type: 'minValue',
|
|
34
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MIN_VALUE'),
|
|
35
|
-
// },
|
|
36
|
-
// {
|
|
37
|
-
// type: 'maxValue',
|
|
38
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MAX_VALUE'),
|
|
39
|
-
// },
|
|
40
|
-
// {
|
|
41
|
-
// type: 'validatePhoneNumber',
|
|
42
|
-
// message: this.translateService.instant(
|
|
43
|
-
// 'FORMS.VALIDATION.VALIDATE_PHONE_NUMBER'
|
|
44
|
-
// ),
|
|
45
|
-
// },
|
|
46
|
-
// {
|
|
47
|
-
// type: 'pastDate',
|
|
48
|
-
// message: this.translateService.instant('FORMS.VALIDATION.PAST_DATE'),
|
|
49
|
-
// },
|
|
50
|
-
// {
|
|
51
|
-
// type: 'affectsError',
|
|
52
|
-
// message: this.translateService.instant(
|
|
53
|
-
// 'FORMS.VALIDATION.AFFECTS_ERROR'
|
|
54
|
-
// ),
|
|
55
|
-
// },
|
|
56
|
-
// {
|
|
57
|
-
// type: 'moreThan',
|
|
58
|
-
// message: this.translateService.instant('FORMS.VALIDATION.MORE_THAN'),
|
|
59
|
-
// },
|
|
60
|
-
// {
|
|
61
|
-
// type: 'lessThan',
|
|
62
|
-
// message: this.translateService.instant('FORMS.VALIDATION.LESS_THAN'),
|
|
63
|
-
// },
|
|
64
|
-
// {
|
|
65
|
-
// type: 'iban',
|
|
66
|
-
// message: this.translateService.instant('FORMS.VALIDATION.INVALID'),
|
|
67
|
-
// },
|
|
68
|
-
// {
|
|
69
|
-
// type: 'email',
|
|
70
|
-
// message: this.translateService.instant('FORMS.VALIDATION.EMAIL'),
|
|
71
|
-
// },
|
|
72
|
-
// {
|
|
73
|
-
// type: 'numberMoreThan',
|
|
74
|
-
// message: this.translateService.instant(
|
|
75
|
-
// 'FORMS.VALIDATION.VALUE_MORE_THAN'
|
|
76
|
-
// ),
|
|
77
|
-
// },
|
|
78
|
-
// {
|
|
79
|
-
// type: 'numberLessThan',
|
|
80
|
-
// message: this.translateService.instant(
|
|
81
|
-
// 'FORMS.VALIDATION.VALUE_LESS_THAN'
|
|
82
|
-
// ),
|
|
83
|
-
// },
|
|
84
|
-
// {
|
|
85
|
-
// type: 'outOfRange',
|
|
86
|
-
// message: this.translateService.instant('FORMS.VALIDATION.OUT_OF_RANGE'),
|
|
87
|
-
// },
|
|
88
|
-
// {
|
|
89
|
-
// type: 'iban',
|
|
90
|
-
// message: this.translateService.instant('FORMS.VALIDATION.IBAN'),
|
|
91
|
-
// },
|
|
92
|
-
// {
|
|
93
|
-
// type: 'timeIsAfter',
|
|
94
|
-
// message: this.translateService.instant(
|
|
95
|
-
// 'FORMS.VALIDATION.LESS_THAN_TIME'
|
|
96
|
-
// ),
|
|
97
|
-
// },
|
|
98
|
-
// ];
|
|
99
10
|
}
|
|
100
11
|
get messages() {
|
|
101
12
|
if (this.element) {
|
|
@@ -112,6 +23,12 @@ export class ValidationComponent {
|
|
|
112
23
|
set messages(m) {
|
|
113
24
|
this._messages = m;
|
|
114
25
|
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
this.config = this.ecabsService.getConfig();
|
|
28
|
+
for (let error of this.config.errorMessages) {
|
|
29
|
+
this.messages[error.type] = this.replaceTokens(error.message);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
115
32
|
ngOnChanges(changes) {
|
|
116
33
|
const { updatedErrors } = changes;
|
|
117
34
|
if (updatedErrors &&
|
|
@@ -122,11 +39,6 @@ export class ValidationComponent {
|
|
|
122
39
|
}
|
|
123
40
|
}
|
|
124
41
|
}
|
|
125
|
-
ngOnInit() {
|
|
126
|
-
for (const error of this.errorMessages) {
|
|
127
|
-
this.messages[error.type] = this.replaceTokens(error.message);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
42
|
replaceTokens(message) {
|
|
131
43
|
let retMessage;
|
|
132
44
|
if (this.label) {
|
|
@@ -141,12 +53,12 @@ export class ValidationComponent {
|
|
|
141
53
|
return this.messages[key];
|
|
142
54
|
}
|
|
143
55
|
}
|
|
144
|
-
ValidationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ValidationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
-
ValidationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ValidationComponent, selector: "app-validations-messages", inputs: { element: "element", label: "label", showValidationOnNotTouched: "showValidationOnNotTouched", updatedErrors: "updatedErrors" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"form-field__validation\"\r\n *ngIf=\"element && (element?.touched || showValidationOnNotTouched) && element?.invalid\"\r\n>\r\n <div class=\"form-field__validation__item\" *ngFor=\"let item of element?.errors | keyvalue\">\r\n {{ getMessageDetail(item.key) }}\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type:
|
|
56
|
+
ValidationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ValidationComponent, deps: [{ token: i1.EcabsComponentsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
+
ValidationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ValidationComponent, selector: "app-validations-messages", inputs: { element: "element", label: "label", showValidationOnNotTouched: "showValidationOnNotTouched", updatedErrors: "updatedErrors" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"form-field__validation\"\r\n *ngIf=\"element && (element?.touched || showValidationOnNotTouched) && element?.invalid\"\r\n>\r\n <div class=\"form-field__validation__item\" *ngFor=\"let item of element?.errors | keyvalue\">\r\n {{ getMessageDetail(item.key) }}\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }] });
|
|
146
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ValidationComponent, decorators: [{
|
|
147
59
|
type: Component,
|
|
148
60
|
args: [{ selector: 'app-validations-messages', template: "<div\r\n class=\"form-field__validation\"\r\n *ngIf=\"element && (element?.touched || showValidationOnNotTouched) && element?.invalid\"\r\n>\r\n <div class=\"form-field__validation__item\" *ngFor=\"let item of element?.errors | keyvalue\">\r\n {{ getMessageDetail(item.key) }}\r\n </div>\r\n</div>\r\n" }]
|
|
149
|
-
}], ctorParameters: function () { return []; }, propDecorators: { element: [{
|
|
61
|
+
}], ctorParameters: function () { return [{ type: i1.EcabsComponentsService }]; }, propDecorators: { element: [{
|
|
150
62
|
type: Input
|
|
151
63
|
}], label: [{
|
|
152
64
|
type: Input
|
|
@@ -155,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
155
67
|
}], updatedErrors: [{
|
|
156
68
|
type: Input
|
|
157
69
|
}] } });
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvdmFsaWRhdGlvbi92YWxpZGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDOzs7QUFPdkIsTUFBTSxPQUFPLG1CQUFtQjtJQThCOUI7UUEzQlMsK0JBQTBCLEdBQUcsS0FBSyxDQUFDO1FBRTVDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBRWhCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUF3QjFCLHlCQUF5QjtRQUN6QixNQUFNO1FBQ04sd0JBQXdCO1FBQ3hCLDhDQUE4QztRQUM5QywwQ0FBMEM7UUFDMUMsU0FBUztRQUNULE9BQU87UUFDUCxNQUFNO1FBQ04seUJBQXlCO1FBQ3pCLDZFQUE2RTtRQUM3RSxPQUFPO1FBQ1AsTUFBTTtRQUNOLHlCQUF5QjtRQUN6Qiw2RUFBNkU7UUFDN0UsT0FBTztRQUNQLE1BQU07UUFDTixtQkFBbUI7UUFDbkIsc0VBQXNFO1FBQ3RFLE9BQU87UUFDUCxNQUFNO1FBQ04sbUJBQW1CO1FBQ25CLHNFQUFzRTtRQUN0RSxPQUFPO1FBQ1AsTUFBTTtRQUNOLHdCQUF3QjtRQUN4Qiw0RUFBNEU7UUFDNUUsT0FBTztRQUNQLE1BQU07UUFDTix3QkFBd0I7UUFDeEIsNEVBQTRFO1FBQzVFLE9BQU87UUFDUCxNQUFNO1FBQ04sbUNBQW1DO1FBQ25DLDhDQUE4QztRQUM5QyxpREFBaUQ7UUFDakQsU0FBUztRQUNULE9BQU87UUFDUCxNQUFNO1FBQ04sd0JBQXdC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QUFnQixDQUFDLEdBQVE7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7O2lIQTVKVSxtQkFBbUI7cUdBQW5CLG1CQUFtQiwrTkNiaEMsc1RBUUE7NEZES2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLDBCQUEwQjswRUFLM0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXZhbGlkYXRpb25zLW1lc3NhZ2VzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmFsaWRhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmFsaWRhdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBlbGVtZW50ITogYW55O1xyXG4gIEBJbnB1dCgpIGxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dWYWxpZGF0aW9uT25Ob3RUb3VjaGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdXBkYXRlZEVycm9ycyE6IHsgdHlwZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfVtdO1xyXG4gIGVycm9yTWVzc2FnZXM6IGFueVtdPVtdO1xyXG5cclxuICBwcml2YXRlIF9tZXNzYWdlczogYW55ID0ge307XHJcblxyXG4gIGdldCBtZXNzYWdlcygpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGVycm9yS2V5IGluIHRoaXMuZWxlbWVudC5lcnJvcnMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmVsZW1lbnQuZXJyb3JzW2Vycm9yS2V5XSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2VzW2Vycm9yS2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlc1tlcnJvcktleV0gPSB0aGlzLl9tZXNzYWdlc1tlcnJvcktleV0ucmVwbGFjZShcclxuICAgICAgICAgICAgICBgWyR7a2V5fV1gLFxyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5lcnJvcnNbZXJyb3JLZXldW2tleV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWVzc2FnZXMobSkge1xyXG4gICAgdGhpcy5fbWVzc2FnZXMgPSBtO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICB0eXBlOiAncmVxdWlyZWQnLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgLy8gICAgICAgJ0ZPUk1TLlZBTElEQVRJT04uTEFCRUxfUkVRVUlSRUQnXHJcbiAgICAvLyAgICAgKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICdtaW5sZW5ndGgnLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLk1JTl9MRU5HVEgnKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLk1BWF9MRU5HVEgnKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICdtaW4nLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLk1JTicpLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ21heCcsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZPUk1TLlZBTElEQVRJT04uTUFYJyksXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICB0eXBlOiAnbWluVmFsdWUnLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLk1JTl9WQUxVRScpLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ21heFZhbHVlJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRk9STVMuVkFMSURBVElPTi5NQVhfVkFMVUUnKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICd2YWxpZGF0ZVBob25lTnVtYmVyJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgIC8vICAgICAgICdGT1JNUy5WQUxJREFUSU9OLlZBTElEQVRFX1BIT05FX05VTUJFUidcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ3Bhc3REYXRlJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRk9STVMuVkFMSURBVElPTi5QQVNUX0RBVEUnKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICdhZmZlY3RzRXJyb3InLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgLy8gICAgICAgJ0ZPUk1TLlZBTElEQVRJT04uQUZGRUNUU19FUlJPUidcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ21vcmVUaGFuJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRk9STVMuVkFMSURBVElPTi5NT1JFX1RIQU4nKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICdsZXNzVGhhbicsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZPUk1TLlZBTElEQVRJT04uTEVTU19USEFOJyksXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICB0eXBlOiAnaWJhbicsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZPUk1TLlZBTElEQVRJT04uSU5WQUxJRCcpLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ2VtYWlsJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRk9STVMuVkFMSURBVElPTi5FTUFJTCcpLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ251bWJlck1vcmVUaGFuJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgIC8vICAgICAgICdGT1JNUy5WQUxJREFUSU9OLlZBTFVFX01PUkVfVEhBTidcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ251bWJlckxlc3NUaGFuJyxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgIC8vICAgICAgICdGT1JNUy5WQUxJREFUSU9OLlZBTFVFX0xFU1NfVEhBTidcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ291dE9mUmFuZ2UnLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLk9VVF9PRl9SQU5HRScpLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgdHlwZTogJ2liYW4nLFxyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGT1JNUy5WQUxJREFUSU9OLklCQU4nKSxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIHR5cGU6ICd0aW1lSXNBZnRlcicsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAvLyAgICAgICAnRk9STVMuVkFMSURBVElPTi5MRVNTX1RIQU5fVElNRSdcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gXTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgdXBkYXRlZEVycm9ycyB9ID0gY2hhbmdlcztcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHVwZGF0ZWRFcnJvcnMgJiZcclxuICAgICAgdXBkYXRlZEVycm9ycy5jdXJyZW50VmFsdWUgJiZcclxuICAgICAgdXBkYXRlZEVycm9ycy5jdXJyZW50VmFsdWUubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgdXBkYXRlZEVycm9ycy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzW2Vycm9yLnR5cGVdID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGVycm9yIG9mIHRoaXMuZXJyb3JNZXNzYWdlcykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VzW2Vycm9yLnR5cGVdID0gdGhpcy5yZXBsYWNlVG9rZW5zKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVwbGFjZVRva2VucyhtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJldE1lc3NhZ2U6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmxhYmVsKSB7XHJcbiAgICAgIHJldE1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJ1tsYWJlbF0nLCB0aGlzLmxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXRNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVzc2FnZURldGFpbChrZXk6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlc1trZXldO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJmb3JtLWZpZWxkX192YWxpZGF0aW9uXCJcclxuICAqbmdJZj1cImVsZW1lbnQgJiYgKGVsZW1lbnQ/LnRvdWNoZWQgfHwgc2hvd1ZhbGlkYXRpb25Pbk5vdFRvdWNoZWQpICYmIGVsZW1lbnQ/LmludmFsaWRcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3ZhbGlkYXRpb25fX2l0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbGVtZW50Py5lcnJvcnMgfCBrZXl2YWx1ZVwiPlxyXG4gICAge3sgZ2V0TWVzc2FnZURldGFpbChpdGVtLmtleSkgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvdmFsaWRhdGlvbi92YWxpZGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDOzs7O0FBV3ZCLE1BQU0sT0FBTyxtQkFBbUI7SUE2QjlCLFlBQW9CLFlBQW9DO1FBQXBDLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQTFCL0MsK0JBQTBCLEdBQUcsS0FBSyxDQUFDO1FBR3BDLGNBQVMsR0FBUSxFQUFFLENBQUM7SUF1QitCLENBQUM7SUFyQjVELElBQUksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUMxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMvQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQ3pELElBQUksR0FBRyxHQUFHLEVBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ25DLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVsQyxJQUNFLGFBQWE7WUFDYixhQUFhLENBQUMsWUFBWTtZQUMxQixhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3JDO1lBQ0EsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDM0IsSUFBSSxVQUFrQixDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLFVBQVUsR0FBRyxPQUFPLENBQUM7U0FDdEI7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7aUhBakVVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLCtOQ2pCaEMsc1RBUUE7NEZEU2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLDBCQUEwQjs2R0FLM0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0NvbXBvbmVudHNDb25maWcsXHJcbiAgRWNhYnNDb21wb25lbnRzU2VydmljZSxcclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lY2Ficy1jb21wb25lbnRzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdmFsaWRhdGlvbnMtbWVzc2FnZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92YWxpZGF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92YWxpZGF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGVsZW1lbnQhOiBhbnk7XHJcbiAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb25Pbk5vdFRvdWNoZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB1cGRhdGVkRXJyb3JzITogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9W107XHJcbiAgY29uZmlnITogRWNhYnNDb21wb25lbnRzQ29uZmlnO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VzOiBhbnkgPSB7fTtcclxuXHJcbiAgZ2V0IG1lc3NhZ2VzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5lbGVtZW50KSB7XHJcbiAgICAgIGZvciAoY29uc3QgZXJyb3JLZXkgaW4gdGhpcy5lbGVtZW50LmVycm9ycykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZWxlbWVudC5lcnJvcnNbZXJyb3JLZXldKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fbWVzc2FnZXNbZXJyb3JLZXldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VzW2Vycm9yS2V5XSA9IHRoaXMuX21lc3NhZ2VzW2Vycm9yS2V5XS5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgIGBbJHtrZXl9XWAsXHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmVycm9yc1tlcnJvcktleV1ba2V5XVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlcztcclxuICB9XHJcblxyXG4gIHNldCBtZXNzYWdlcyhtKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlcyA9IG07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVjYWJzU2VydmljZTogRWNhYnNDb21wb25lbnRzU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZWNhYnNTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgZm9yIChsZXQgZXJyb3Igb2YgdGhpcy5jb25maWcuZXJyb3JNZXNzYWdlcykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VzW2Vycm9yLnR5cGVdID0gdGhpcy5yZXBsYWNlVG9rZW5zKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgeyB1cGRhdGVkRXJyb3JzIH0gPSBjaGFuZ2VzO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdXBkYXRlZEVycm9ycyAmJlxyXG4gICAgICB1cGRhdGVkRXJyb3JzLmN1cnJlbnRWYWx1ZSAmJlxyXG4gICAgICB1cGRhdGVkRXJyb3JzLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgZm9yIChjb25zdCBlcnJvciBvZiB1cGRhdGVkRXJyb3JzLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXNbZXJyb3IudHlwZV0gPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBsYWNlVG9rZW5zKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmV0TWVzc2FnZTogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMubGFiZWwpIHtcclxuICAgICAgcmV0TWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgnW2xhYmVsXScsIHRoaXMubGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldE1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBnZXRNZXNzYWdlRGV0YWlsKGtleTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzW2tleV07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImZvcm0tZmllbGRfX3ZhbGlkYXRpb25cIlxyXG4gICpuZ0lmPVwiZWxlbWVudCAmJiAoZWxlbWVudD8udG91Y2hlZCB8fCBzaG93VmFsaWRhdGlvbk9uTm90VG91Y2hlZCkgJiYgZWxlbWVudD8uaW52YWxpZFwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9fdmFsaWRhdGlvbl9faXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGVsZW1lbnQ/LmVycm9ycyB8IGtleXZhbHVlXCI+XHJcbiAgICB7eyBnZXRNZXNzYWdlRGV0YWlsKGl0ZW0ua2V5KSB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -4,19 +4,19 @@ import { EcabsInputComponent } from './ecabs-input.component';
|
|
|
4
4
|
import { MatInputModule } from '@angular/material/input';
|
|
5
5
|
import { ElementWrapperModule } from '../base/element-wrapper/element-wrapper.module';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
|
-
import {
|
|
7
|
+
import { DigitsOnlyDirectivesModule } from '../base/directives/digits-only.directive.module';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class EcabsInputModule {
|
|
10
10
|
}
|
|
11
11
|
EcabsInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
-
EcabsInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, declarations: [EcabsInputComponent
|
|
13
|
-
EcabsInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule] });
|
|
12
|
+
EcabsInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, declarations: [EcabsInputComponent], imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule, DigitsOnlyDirectivesModule], exports: [EcabsInputComponent] });
|
|
13
|
+
EcabsInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule, DigitsOnlyDirectivesModule] });
|
|
14
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsInputModule, decorators: [{
|
|
15
15
|
type: NgModule,
|
|
16
16
|
args: [{
|
|
17
|
-
declarations: [EcabsInputComponent
|
|
18
|
-
imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule],
|
|
17
|
+
declarations: [EcabsInputComponent],
|
|
18
|
+
imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule, DigitsOnlyDirectivesModule],
|
|
19
19
|
exports: [EcabsInputComponent],
|
|
20
20
|
}]
|
|
21
21
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtaW5wdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWlucHV0L2VjYWJzLWlucHV0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQU83RixNQUFNLE9BQU8sZ0JBQWdCOzs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBSlgsbUJBQW1CLGFBQ3hCLFlBQVksRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixhQUMzRixtQkFBbUI7K0dBRW5CLGdCQUFnQixZQUhoQixZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSwwQkFBMEI7NEZBRzNGLGdCQUFnQjtrQkFMNUIsUUFBUTttQkFBRTtvQkFDVCxZQUFZLEVBQUUsQ0FBRSxtQkFBbUIsQ0FBRTtvQkFDckMsT0FBTyxFQUFFLENBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLENBQUU7b0JBQ3hHLE9BQU8sRUFBRSxDQUFFLG1CQUFtQixDQUFFO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEVjYWJzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2VjYWJzLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBFbGVtZW50V3JhcHBlck1vZHVsZSB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC13cmFwcGVyL2VsZW1lbnQtd3JhcHBlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGlnaXRzT25seURpcmVjdGl2ZXNNb2R1bGUgfSBmcm9tICcuLi9iYXNlL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkuZGlyZWN0aXZlLm1vZHVsZSc7XHJcblxyXG5ATmdNb2R1bGUoIHtcclxuICBkZWNsYXJhdGlvbnM6IFsgRWNhYnNJbnB1dENvbXBvbmVudCBdLFxyXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgRWxlbWVudFdyYXBwZXJNb2R1bGUsIEZvcm1zTW9kdWxlLCBEaWdpdHNPbmx5RGlyZWN0aXZlc01vZHVsZSBdLFxyXG4gIGV4cG9ydHM6IFsgRWNhYnNJbnB1dENvbXBvbmVudCBdLFxyXG59IClcclxuZXhwb3J0IGNsYXNzIEVjYWJzSW5wdXRNb2R1bGUgeyB9XHJcbiJdfQ==
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { UntypedFormControl, NgControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
3
|
+
import { MatSelectSearchComponent } from 'ngx-mat-select-search';
|
|
4
|
+
import { combineLatest, debounceTime, map, ReplaySubject, Subscription, } from 'rxjs';
|
|
5
|
+
import ElementBaseComponent from '../base/element-base';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "../base/element-wrapper/element-wrapper.component";
|
|
9
|
+
import * as i3 from "@angular/material/form-field";
|
|
10
|
+
import * as i4 from "@angular/material/select";
|
|
11
|
+
import * as i5 from "@angular/material/core";
|
|
12
|
+
import * as i6 from "@angular/forms";
|
|
13
|
+
import * as i7 from "ngx-mat-select-search";
|
|
14
|
+
export class EcabsSelectComponent extends ElementBaseComponent {
|
|
15
|
+
constructor(injector) {
|
|
16
|
+
super();
|
|
17
|
+
this.injector = injector;
|
|
18
|
+
this.multiple = false;
|
|
19
|
+
this.useNoneOption = false;
|
|
20
|
+
this.useOnlyDisabledClass = false;
|
|
21
|
+
this.searchFieldPlaceholder = 'Search';
|
|
22
|
+
this.useSearchOption = false;
|
|
23
|
+
this.useSelectAllOption = false;
|
|
24
|
+
this.setAllOptionAfterChosenAllItems = true;
|
|
25
|
+
this.selectAllValue = 0;
|
|
26
|
+
this.noEntriesFoundLabel = 'No matching found';
|
|
27
|
+
this.noneLabel = 'None';
|
|
28
|
+
this.allLabel = 'All';
|
|
29
|
+
this.otherLabel = 'Other';
|
|
30
|
+
this.othersLabel = 'Others';
|
|
31
|
+
this.updateFilterItems = new EventEmitter();
|
|
32
|
+
this.selectionChange = new EventEmitter();
|
|
33
|
+
this.filteredItems$ = new ReplaySubject(1);
|
|
34
|
+
this.itemFilterCtrl = new UntypedFormControl();
|
|
35
|
+
this.isClearAll = false;
|
|
36
|
+
this.subscriptions = new Subscription();
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
38
|
+
this.onChange = () => { };
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
40
|
+
this.onTouch = () => { };
|
|
41
|
+
}
|
|
42
|
+
get value() {
|
|
43
|
+
return this.val;
|
|
44
|
+
}
|
|
45
|
+
set value(val) {
|
|
46
|
+
if (this.val !== val) {
|
|
47
|
+
this.val = val;
|
|
48
|
+
this.onChange(val);
|
|
49
|
+
this.onTouch(val);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ngOnChanges(changes) {
|
|
53
|
+
if (changes['items'] && changes['items'].currentValue) {
|
|
54
|
+
this.filteredItems$.next(changes['items'].currentValue.slice());
|
|
55
|
+
this.filterItems();
|
|
56
|
+
if (this.multiple &&
|
|
57
|
+
this.useSelectAllOption &&
|
|
58
|
+
this.allSelected?.selected) {
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
this.control.patchValue([
|
|
61
|
+
...this.items.map((item) => item.value),
|
|
62
|
+
this.selectAllValue,
|
|
63
|
+
]);
|
|
64
|
+
}, 100);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
ngAfterViewInit() {
|
|
69
|
+
const ngControl = this.injector.get(NgControl, null);
|
|
70
|
+
if (ngControl) {
|
|
71
|
+
this.control = ngControl.control;
|
|
72
|
+
}
|
|
73
|
+
if (this.matSelectSearchComponent) {
|
|
74
|
+
this.matSelectSearchComponent._showNoEntriesFound$ = combineLatest([
|
|
75
|
+
this.itemFilterCtrl.valueChanges,
|
|
76
|
+
this.filteredItems$,
|
|
77
|
+
]).pipe(map(([value, items]) => this.matSelectSearchComponent.noEntriesFoundLabel &&
|
|
78
|
+
value &&
|
|
79
|
+
items.length === 0));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
ngOnInit() {
|
|
83
|
+
this.subscriptions.add(this.itemFilterCtrl.valueChanges
|
|
84
|
+
.pipe(debounceTime(200))
|
|
85
|
+
.subscribe((value) => {
|
|
86
|
+
this.filterItems();
|
|
87
|
+
this.updateFilterItems.emit(value);
|
|
88
|
+
if (this.isClearAll) {
|
|
89
|
+
this.control.patchValue([]);
|
|
90
|
+
this.isClearAll = false;
|
|
91
|
+
}
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
toggleAllSelection() {
|
|
95
|
+
if (this.allSelected.selected) {
|
|
96
|
+
this.control.patchValue([
|
|
97
|
+
...this.items.map((item) => item.value),
|
|
98
|
+
this.selectAllValue,
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.control.patchValue([]);
|
|
103
|
+
this.isClearAll = true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
togglePerOne() {
|
|
107
|
+
if (this.allSelected) {
|
|
108
|
+
if (this.allSelected.selected) {
|
|
109
|
+
this.allSelected.deselect();
|
|
110
|
+
}
|
|
111
|
+
if (this.setAllOptionAfterChosenAllItems &&
|
|
112
|
+
this.control.value.length === this.items.length) {
|
|
113
|
+
this.allSelected.select();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.isClearAll = false;
|
|
117
|
+
}
|
|
118
|
+
getAllSelectedChecked() {
|
|
119
|
+
return this.allSelected !== undefined && this.allSelected.selected;
|
|
120
|
+
}
|
|
121
|
+
getLabel(val) {
|
|
122
|
+
if (this.useSelectAllOption &&
|
|
123
|
+
this.allSelected?.selected &&
|
|
124
|
+
this.items &&
|
|
125
|
+
this.items.length > 0) {
|
|
126
|
+
return this.items[0].label;
|
|
127
|
+
}
|
|
128
|
+
if (val !== undefined && this.items && this.items.length > 0) {
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
130
|
+
const item = this.items.find((item) => item.value === val);
|
|
131
|
+
return item ? item.label : '';
|
|
132
|
+
}
|
|
133
|
+
return '';
|
|
134
|
+
}
|
|
135
|
+
writeValue(value) {
|
|
136
|
+
this.value = value;
|
|
137
|
+
}
|
|
138
|
+
registerOnChange(fn) {
|
|
139
|
+
this.onChange = fn;
|
|
140
|
+
}
|
|
141
|
+
registerOnTouched(fn) {
|
|
142
|
+
this.onTouch = fn;
|
|
143
|
+
}
|
|
144
|
+
ngOnDestroy() {
|
|
145
|
+
this.subscriptions.unsubscribe();
|
|
146
|
+
}
|
|
147
|
+
onSelectionChanged($event) {
|
|
148
|
+
this.selectionChange.emit($event);
|
|
149
|
+
}
|
|
150
|
+
filterItems() {
|
|
151
|
+
if (!this.items) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// get the search keyword
|
|
155
|
+
let search = this.itemFilterCtrl.value;
|
|
156
|
+
if (!search || search === '') {
|
|
157
|
+
this.filteredItems$.next(this.items.slice());
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
search = search.toLowerCase();
|
|
161
|
+
this.filteredItems$.next(this.items && this.items.length > 0
|
|
162
|
+
? this.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
|
|
163
|
+
: []);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
EcabsSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsSelectComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
167
|
+
EcabsSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EcabsSelectComponent, selector: "ecabs-select", inputs: { items: "items", multiple: "multiple", useNoneOption: "useNoneOption", useOnlyDisabledClass: "useOnlyDisabledClass", searchFieldPlaceholder: "searchFieldPlaceholder", useSearchOption: "useSearchOption", useSelectAllOption: "useSelectAllOption", setAllOptionAfterChosenAllItems: "setAllOptionAfterChosenAllItems", selectAllValue: "selectAllValue", noEntriesFoundLabel: "noEntriesFoundLabel", noneLabel: "noneLabel", allLabel: "allLabel", otherLabel: "otherLabel", othersLabel: "othersLabel" }, outputs: { updateFilterItems: "updateFilterItems", selectionChange: "selectionChange" }, providers: [
|
|
168
|
+
{
|
|
169
|
+
provide: NG_VALUE_ACCESSOR,
|
|
170
|
+
useExisting: EcabsSelectComponent,
|
|
171
|
+
multi: true,
|
|
172
|
+
},
|
|
173
|
+
], viewQueries: [{ propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "matSelectSearchComponent", first: true, predicate: MatSelectSearchComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EcabsSelectComponent, decorators: [{
|
|
175
|
+
type: Component,
|
|
176
|
+
args: [{ selector: 'ecabs-select', providers: [
|
|
177
|
+
{
|
|
178
|
+
provide: NG_VALUE_ACCESSOR,
|
|
179
|
+
useExisting: EcabsSelectComponent,
|
|
180
|
+
multi: true,
|
|
181
|
+
},
|
|
182
|
+
], template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n" }]
|
|
183
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { items: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], multiple: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], useNoneOption: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], useOnlyDisabledClass: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], searchFieldPlaceholder: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], useSearchOption: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], useSelectAllOption: [{
|
|
196
|
+
type: Input
|
|
197
|
+
}], setAllOptionAfterChosenAllItems: [{
|
|
198
|
+
type: Input
|
|
199
|
+
}], selectAllValue: [{
|
|
200
|
+
type: Input
|
|
201
|
+
}], noEntriesFoundLabel: [{
|
|
202
|
+
type: Input
|
|
203
|
+
}], noneLabel: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}], allLabel: [{
|
|
206
|
+
type: Input
|
|
207
|
+
}], otherLabel: [{
|
|
208
|
+
type: Input
|
|
209
|
+
}], othersLabel: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}], updateFilterItems: [{
|
|
212
|
+
type: Output
|
|
213
|
+
}], selectionChange: [{
|
|
214
|
+
type: Output
|
|
215
|
+
}], allSelected: [{
|
|
216
|
+
type: ViewChild,
|
|
217
|
+
args: ['allSelected']
|
|
218
|
+
}], matSelectSearchComponent: [{
|
|
219
|
+
type: ViewChild,
|
|
220
|
+
args: [MatSelectSearchComponent]
|
|
221
|
+
}] } });
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFDSCxhQUFhLEVBQ2IsWUFBWSxHQUViLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBYXhELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG9CQUFvQjtJQTBDNUIsWUFBcUIsUUFBa0I7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFEVyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBdkM5QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG9DQUErQixHQUFHLElBQUksQ0FBQztRQUN2QyxtQkFB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d0JXLHdCQUF3Qiw0RkMvRHRDLG11REFzQ0E7NEZER2Esb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFFYjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7K0ZBS1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVxQixXQUFXO3NCQUF0QyxTQUFTO3VCQUFFLGFBQWE7Z0JBRXpCLHdCQUF3QjtzQkFEdkIsU0FBUzt1QkFBRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIE5nQ29udHJvbCxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICduZ3gtbWF0LXNlbGVjdC1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIGNvbWJpbmVMYXRlc3QsXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIG1hcCxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0YXAsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBFbGVtZW50QmFzZUNvbXBvbmVudCBmcm9tICcuLi9iYXNlL2VsZW1lbnQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KCB7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IEVjYWJzU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSApXHJcbmV4cG9ydCBjbGFzcyBFY2Fic1NlbGVjdENvbXBvbmVudFxyXG4gIGV4dGVuZHMgRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGl0ZW1zITogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXTtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZU5vbmVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VPbmx5RGlzYWJsZWRDbGFzcyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEZpZWxkUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2gnO1xyXG4gIEBJbnB1dCgpIHVzZVNlYXJjaE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZVNlbGVjdEFsbE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdEFsbFZhbHVlOiBhbnkgPSAwO1xyXG4gIEBJbnB1dCgpIG5vRW50cmllc0ZvdW5kTGFiZWwgPSAnTm8gbWF0Y2hpbmcgZm91bmQnO1xyXG4gIEBJbnB1dCgpIG5vbmVMYWJlbCA9ICdOb25lJztcclxuICBASW5wdXQoKSBhbGxMYWJlbCA9ICdBbGwnO1xyXG4gIEBJbnB1dCgpIG90aGVyTGFiZWwgPSAnT3RoZXInO1xyXG4gIEBJbnB1dCgpIG90aGVyc0xhYmVsID0gJ090aGVycyc7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUZpbHRlckl0ZW1zOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCAnYWxsU2VsZWN0ZWQnICkgYWxsU2VsZWN0ZWQhOiBNYXRPcHRpb247XHJcbiAgQFZpZXdDaGlsZCggTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50IClcclxuICBtYXRTZWxlY3RTZWFyY2hDb21wb25lbnQhOiBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQ7XHJcblxyXG4gIHZhbCE6IGFueTtcclxuICBmaWx0ZXJlZEl0ZW1zJDogUmVwbGF5U3ViamVjdDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiA9XHJcbiAgICBuZXcgUmVwbGF5U3ViamVjdDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiggMSApO1xyXG4gIGl0ZW1GaWx0ZXJDdHJsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKCB2YWwgKSB7XHJcbiAgICBpZiAoIHRoaXMudmFsICE9PSB2YWwgKSB7XHJcbiAgICAgIHRoaXMudmFsID0gdmFsO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKCB2YWwgKTtcclxuICAgICAgdGhpcy5vblRvdWNoKCB2YWwgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyggY2hhbmdlczogU2ltcGxlQ2hhbmdlcyApOiB2b2lkIHtcclxuICAgIGlmICggY2hhbmdlc1sgJ2l0ZW1zJyBdICYmIGNoYW5nZXNbICdpdGVtcycgXS5jdXJyZW50VmFsdWUgKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dCggY2hhbmdlc1sgJ2l0ZW1zJyBdLmN1cnJlbnRWYWx1ZS5zbGljZSgpICk7XHJcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLm11bHRpcGxlICYmXHJcbiAgICAgICAgdGhpcy51c2VTZWxlY3RBbGxPcHRpb24gJiZcclxuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZFxyXG4gICAgICApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZSggW1xyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSApLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbFZhbHVlLFxyXG4gICAgICAgICAgXSApO1xyXG4gICAgICAgIH0sIDEwMCApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBOZ0NvbnRyb2wsXHJcbiAgICAgIG51bGxcclxuICAgICkgYXMgTmdDb250cm9sO1xyXG5cclxuICAgIGlmICggbmdDb250cm9sICkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCApIHtcclxuICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQuX3Nob3dOb0VudHJpZXNGb3VuZCQgPSBjb21iaW5lTGF0ZXN0KCBbXHJcbiAgICAgICAgdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXMsXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJCxcclxuICAgICAgXSApLnBpcGUoXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKCBbIHZhbHVlLCBpdGVtcyBdICkgPT5cclxuICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQubm9FbnRyaWVzRm91bmRMYWJlbCAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDBcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIHRoaXMuaXRlbUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoIGRlYm91bmNlVGltZSggMjAwICkgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoICggdmFsdWU6IGFueSApID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVySXRlbXMuZW1pdCggdmFsdWUgKTtcclxuXHJcbiAgICAgICAgICBpZiAoIHRoaXMuaXNDbGVhckFsbCApIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtdICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7IH07XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICggdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZCApIHtcclxuICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtcclxuICAgICAgICAuLi50aGlzLml0ZW1zLm1hcCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSApLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsVmFsdWUsXHJcbiAgICAgIF0gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKCBbXSApO1xyXG4gICAgICB0aGlzLmlzQ2xlYXJBbGwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGVyT25lKCk6IHZvaWQge1xyXG4gICAgaWYgKCB0aGlzLmFsbFNlbGVjdGVkICkge1xyXG4gICAgICBpZiAoIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0ZWQgKSB7XHJcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZC5kZXNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgJiZcclxuICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFNlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsKCB2YWw6IGFueSApOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVzZVNlbGVjdEFsbE9wdGlvbiAmJlxyXG4gICAgICB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCAmJlxyXG4gICAgICB0aGlzLml0ZW1zICYmXHJcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zWyAwIF0ubGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB2YWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCApIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSA9PT0gdmFsICk7XHJcblxyXG4gICAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubGFiZWwgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKCB2YWx1ZTogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZSggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCBmbjogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkKCAkZXZlbnQ6IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoICRldmVudCApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtcygpOiB2b2lkIHtcclxuICAgIGlmICggIXRoaXMuaXRlbXMgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIHNlYXJjaCBrZXl3b3JkXHJcbiAgICBsZXQgc2VhcmNoOiBzdHJpbmcgPSB0aGlzLml0ZW1GaWx0ZXJDdHJsLnZhbHVlO1xyXG5cclxuICAgIGlmICggIXNlYXJjaCB8fCBzZWFyY2ggPT09ICcnICkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIHRoaXMuaXRlbXMuc2xpY2UoKSApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChcclxuICAgICAgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKCAoIGl0ZW0gKSA9PlxyXG4gICAgICAgICAgaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCBzZWFyY2gudG9Mb3dlckNhc2UoKSApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogW11cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiB1c2VPbmx5RGlzYWJsZWRDbGFzcyB9XCI+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgKGNsb3NlZCk9XCJvblRvdWNoKClcIlxyXG4gICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0QWxsU2VsZWN0ZWRDaGVja2VkKClcIj57eyBhbGxMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFnZXRBbGxTZWxlY3RlZENoZWNrZWQoKVwiXHJcbiAgICAgICAgICA+e3sgdmFsICYmIG11bHRpcGxlID8gZ2V0TGFiZWwodmFsWzBdKSA6IGdldExhYmVsKHZhbCkgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImFkZGl0aW9uYWwtc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICgre3sgdXNlU2VsZWN0QWxsT3B0aW9uICYmIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0ZWQgPyB2YWx1ZT8ubGVuZ3RoIC0gMiA6IHZhbHVlPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgIHt7ICh2YWx1ZT8ubGVuZ3RoID09PSAyID8gb3RoZXJMYWJlbCA6IG90aGVyc0xhYmVsKSB9fSlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInVzZVNlYXJjaE9wdGlvblwiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXNlbGVjdC1zZWFyY2hcclxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiaXRlbUZpbHRlckN0cmxcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyTGFiZWxdPVwic2VhcmNoRmllbGRQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICBbbm9FbnRyaWVzRm91bmRMYWJlbF09XCJub0VudHJpZXNGb3VuZExhYmVsXCJcclxuICAgICAgICA+PC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2g+XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJ1c2VOb25lT3B0aW9uXCI+e3sgbm9uZUxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAjYWxsU2VsZWN0ZWQgKm5nSWY9XCJ1c2VTZWxlY3RBbGxPcHRpb25cIiAoY2xpY2spPVwidG9nZ2xlQWxsU2VsZWN0aW9uKClcIiBbdmFsdWVdPVwic2VsZWN0QWxsVmFsdWVcIj57e1xyXG4gICAgICAgIGFsbExhYmVsXHJcbiAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zJCB8IGFzeW5jXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiAoY2xpY2spPVwidG9nZ2xlUGVyT25lKClcIj5cclxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2FwcC1lbGVtZW50LXdyYXBwZXI+XHJcbiJdfQ==
|