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.
Files changed (59) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/base/directives/digits-only.directive.module.mjs +22 -0
  3. package/esm2020/lib/base/validation/validation.component.mjs +14 -102
  4. package/esm2020/lib/ecabs-input/ecabs-input.module.mjs +6 -6
  5. package/esm2020/lib/ecabs-select/ecabs-select.component.mjs +222 -0
  6. package/esm2020/lib/ecabs-select/ecabs-select.module.mjs +60 -0
  7. package/esm2020/lib/ecabs-textarea/ecabs-textarea.component.mjs +62 -0
  8. package/esm2020/lib/ecabs-textarea/ecabs-textarea.module.mjs +20 -0
  9. package/esm2020/lib/services/ecabs-components.service.mjs +32 -0
  10. package/esm2020/public-api.mjs +5 -1
  11. package/fesm2015/ecabs-components.mjs +404 -106
  12. package/fesm2015/ecabs-components.mjs.map +1 -1
  13. package/fesm2020/ecabs-components.mjs +402 -106
  14. package/fesm2020/ecabs-components.mjs.map +1 -1
  15. package/lib/base/directives/digits-only.directive.d.ts +3 -3
  16. package/lib/base/directives/digits-only.directive.module.d.ts +8 -0
  17. package/lib/base/validation/validation.component.d.ts +5 -3
  18. package/lib/ecabs-input/ecabs-input.module.d.ts +6 -6
  19. package/lib/ecabs-select/ecabs-select.component.d.ts +59 -0
  20. package/lib/ecabs-select/ecabs-select.module.d.ts +15 -0
  21. package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +20 -0
  22. package/lib/ecabs-textarea/ecabs-textarea.module.d.ts +10 -0
  23. package/lib/services/ecabs-components.service.d.ts +16 -0
  24. package/package.json +3 -2
  25. package/public-api.d.ts +4 -0
  26. package/styles/material/overrides/_datepicker.scss +25 -1
  27. package/styles/material/overrides/_phone.scss +2 -2
  28. package/styles/scss/modules/_datepicker.scss +3 -3
  29. package/styles/scss/modules/_phone.scss +3 -1
  30. package/styles/scss/modules/_select.scss +16 -0
  31. package/lib/base/directives/digits-only.directive.ts +0 -129
  32. package/lib/base/element-base.ts +0 -72
  33. package/lib/base/element-wrapper/element-wrapper.component.html +0 -30
  34. package/lib/base/element-wrapper/element-wrapper.component.ts +0 -33
  35. package/lib/base/element-wrapper/element-wrapper.module.ts +0 -30
  36. package/lib/base/hint/hint.component.html +0 -1
  37. package/lib/base/hint/hint.component.scss +0 -0
  38. package/lib/base/hint/hint.component.ts +0 -12
  39. package/lib/base/hint/hint.module.ts +0 -13
  40. package/lib/base/validation/validation.component.html +0 -8
  41. package/lib/base/validation/validation.component.scss +0 -0
  42. package/lib/base/validation/validation.component.ts +0 -171
  43. package/lib/base/validation/validation.module.ts +0 -12
  44. package/lib/ecabs-buttons/ecabs-buttons.component.html +0 -18
  45. package/lib/ecabs-buttons/ecabs-buttons.component.ts +0 -54
  46. package/lib/ecabs-buttons/ecabs-buttons.module.ts +0 -13
  47. package/lib/ecabs-input/ecabs-input.component.html +0 -26
  48. package/lib/ecabs-input/ecabs-input.component.ts +0 -83
  49. package/lib/ecabs-input/ecabs-input.module.ts +0 -14
  50. package/lib/ecabs-loading/ecabs-loading.component.html +0 -7
  51. package/lib/ecabs-loading/ecabs-loading.component.spec.ts +0 -24
  52. package/lib/ecabs-loading/ecabs-loading.component.ts +0 -11
  53. package/lib/ecabs-loading/ecabs-loading.module.ts +0 -11
  54. package/lib/ecabs-loading/spinner/spinner.component.html +0 -5
  55. package/lib/ecabs-loading/spinner/spinner.component.scss +0 -61
  56. package/lib/ecabs-loading/spinner/spinner.component.spec.ts +0 -24
  57. package/lib/ecabs-loading/spinner/spinner.component.ts +0 -11
  58. package/public-api.ts +0 -7
  59. 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 "@angular/common";
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: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }] });
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 { DigitsOnlyDirective } from '../base/directives/digits-only.directive';
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, DigitsOnlyDirective], imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule], exports: [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, DigitsOnlyDirective],
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtaW5wdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWlucHV0L2VjYWJzLWlucHV0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQU8vRSxNQUFNLE9BQU8sZ0JBQWdCOzs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBSlosbUJBQW1CLEVBQUUsbUJBQW1CLGFBQzdDLFlBQVksRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxhQUMvRCxtQkFBbUI7K0dBRWxCLGdCQUFnQixZQUhqQixZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLFdBQVc7NEZBRzlELGdCQUFnQjtrQkFMNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztvQkFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUM7b0JBQzFFLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEVjYWJzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2VjYWJzLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBFbGVtZW50V3JhcHBlck1vZHVsZSB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC13cmFwcGVyL2VsZW1lbnQtd3JhcHBlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGlnaXRzT25seURpcmVjdGl2ZSB9IGZyb20gJy4uL2Jhc2UvZGlyZWN0aXZlcy9kaWdpdHMtb25seS5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtFY2Fic0lucHV0Q29tcG9uZW50LCBEaWdpdHNPbmx5RGlyZWN0aXZlXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgRWxlbWVudFdyYXBwZXJNb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICBleHBvcnRzOiBbRWNhYnNJbnB1dENvbXBvbmVudF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0lucHV0TW9kdWxlIHt9XHJcbiJdfQ==
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==