@ohioepa/oepa-ui-lib 2.0.4 → 2.0.6

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 CHANGED
@@ -1,24 +1,24 @@
1
- # OepaUiLib
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project oepa-ui-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project oepa-ui-lib`.
8
- > Note: Don't forget to add `--project oepa-ui-lib` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build oepa-ui-lib` 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 oepa-ui-lib`, go to the dist folder `cd dist/oepa-ui-lib` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test oepa-ui-lib` 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.dev/tools/cli) page.
1
+ # OepaUiLib
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project oepa-ui-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project oepa-ui-lib`.
8
+ > Note: Don't forget to add `--project oepa-ui-lib` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build oepa-ui-lib` 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 oepa-ui-lib`, go to the dist folder `cd dist/oepa-ui-lib` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test oepa-ui-lib` 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.dev/tools/cli) page.
@@ -35,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
35
35
  type: Inject,
36
36
  args: ['app']
37
37
  }] }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1zZWFyY2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvYWNjb3VudC1zZWFyY2gtaW5wdXQvYWNjb3VudC1zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9uRCxNQUFNLE9BQU8sb0JBQW9CO0lBRVg7SUFDYTtJQUNSO0lBRnpCLFlBQW9CLElBQWdCLEVBQ0gsV0FBbUIsRUFDM0IsR0FBVztRQUZoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ0gsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUFJLENBQUM7SUFFaEMsb0JBQW9CLENBQUMsU0FBaUIsRUFBRSxNQUFlO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBTztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDaEIsQ0FBQztRQUNBLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQVksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO3dHQWRRLG9CQUFvQiw0Q0FHckIsYUFBYSxhQUNiLEtBQUs7NEdBSkosb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUlJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRTZWFyY2hTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIFxuICAgIEBJbmplY3QoJ2ViaXpSb290VVJMJykgcHJpdmF0ZSBlYml6Um9vdFVSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoJ2FwcCcpIHByaXZhdGUgYXBwOiBzdHJpbmcpIHsgfVxuXG4gICAgcHVibGljIHNlYXJjaEFjY291bnRzRnJvbURCKHNlYXJjaFVSTDogc3RyaW5nLCBmaWx0ZXI6IEFjY291bnQpOiBPYnNlcnZhYmxlPEFjY291bnRbXT4ge1xuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmViaXpSb290VVJMICsgc2VhcmNoVVJMO1xuICAgIGNvbnN0IHBhcmFtczphbnkgPSB7XG4gICAgICAnYXBwJzogdGhpcy5hcHBcbiAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFjY291bnRbXT4odXJsLCBmaWx0ZXIsIHsgaGVhZGVyczogaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnanNvbicsIHBhcmFtczogcGFyYW1zIH0pO1xuICAgIH1cblxufVxuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1zZWFyY2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvYWNjb3VudC1zZWFyY2gtaW5wdXQvYWNjb3VudC1zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9uRCxNQUFNLE9BQU8sb0JBQW9CO0lBRVg7SUFDYTtJQUNSO0lBRnpCLFlBQW9CLElBQWdCLEVBQ0gsV0FBbUIsRUFDM0IsR0FBVztRQUZoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ0gsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUFJLENBQUM7SUFFaEMsb0JBQW9CLENBQUMsU0FBaUIsRUFBRSxNQUFlO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBTztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDaEIsQ0FBQztRQUNBLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQVksR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO3dHQWRRLG9CQUFvQiw0Q0FHckIsYUFBYSxhQUNiLEtBQUs7NEdBSkosb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUlJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50U2VhcmNoU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgXHJcbiAgICBASW5qZWN0KCdlYml6Um9vdFVSTCcpIHByaXZhdGUgZWJpelJvb3RVUkw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoJ2FwcCcpIHByaXZhdGUgYXBwOiBzdHJpbmcpIHsgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hBY2NvdW50c0Zyb21EQihzZWFyY2hVUkw6IHN0cmluZywgZmlsdGVyOiBBY2NvdW50KTogT2JzZXJ2YWJsZTxBY2NvdW50W10+IHtcclxuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICBoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgY29uc3QgdXJsID0gdGhpcy5lYml6Um9vdFVSTCArIHNlYXJjaFVSTDtcclxuICAgIGNvbnN0IHBhcmFtczphbnkgPSB7XHJcbiAgICAgICdhcHAnOiB0aGlzLmFwcFxyXG4gICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFjY291bnRbXT4odXJsLCBmaWx0ZXIsIHsgaGVhZGVyczogaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnanNvbicsIHBhcmFtczogcGFyYW1zIH0pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -29,7 +29,7 @@ export class DateInputComponent {
29
29
  }
30
30
  }
31
31
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputComponent, selector: "oepa-date-input", inputs: { group: "group", field: "field", tableIdx: "tableIdx", placement: "placement", showValidation: "showValidation", pauseChangeProcessing: "pauseChangeProcessing" }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Date Input Group\">\n <oepa-datepicker [group]=\"group\" [field]=\"field\" [tableIdx]=\"tableIdx\" \n [placement]=\"placement\" [showValidation]=\"showValidation\"></oepa-datepicker>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"], exportAs: ["oepa-datepicker"] }] });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputComponent, selector: "oepa-date-input", inputs: { group: "group", field: "field", tableIdx: "tableIdx", placement: "placement", showValidation: "showValidation", pauseChangeProcessing: "pauseChangeProcessing" }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Date Input Group\">\n <oepa-datepicker [group]=\"group\" [field]=\"field\" [tableIdx]=\"tableIdx\" \n [placement]=\"placement\" [showValidation]=\"showValidation\"></oepa-datepicker>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.DatepickerComponent, selector: "oepa-datepicker", inputs: ["componentId", "group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"], exportAs: ["oepa-datepicker"] }] });
33
33
  }
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputComponent, decorators: [{
35
35
  type: Component,
@@ -46,7 +46,7 @@ export class DateInputModalComponent {
46
46
  this.bsModalRef.hide();
47
47
  }
48
48
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputModalComponent, selector: "oepa-date-input-modal", inputs: { title: "title", infoText: "infoText", dateLabel: "dateLabel", submitBtnLabel: "submitBtnLabel", cancelBtnLabel: "cancelBtnLabel", bsConfig: "bsConfig" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"dateInputModalTitle\">{{title}}</h1>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-labelledby=\"dateInputModalTitle\">\n <div class=\"row\">\n <div *ngIf=\"infoText\" class=\"col-sm-12\">\n <div class=\"alert alert-info\" role=\"alert\">\n {{infoText}}\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div>\n <label [for]=\"datepicker.inputId\" [id]=\"datepicker.inputId+'_Label'\">{{dateLabel}}</label>\n <oepa-datepicker\n #datepicker=\"oepa-datepicker\"\n [group]=\"dateForm\"\n field=\"date\"\n [bsConfig]=\"bsConfig || {}\"\n [showValidation]=\"true\"\n ></oepa-datepicker>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\" role=\"alert\">{{errorMessage}}</div>\n </div>\n</div>\n<div class=\"modal-footer\" role=\"contentinfo\">\n <button type=\"submit\" class=\"btn btn-primary mr-1\" (click)=\"submit()\" \n [id]=\"'submitDateBtn'\" [disabled]=\"dateForm.status === 'INVALID'\" [attr.aria-label]=\"submitBtnLabel\">{{submitBtnLabel}}</button>\n <button [id]=\"'cancelDateInputBtn'\" type=\"button\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\" [attr.aria-label]=\"cancelBtnLabel\">{{cancelBtnLabel}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerComponent, selector: "oepa-datepicker", inputs: ["group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"], exportAs: ["oepa-datepicker"] }] });
49
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateInputModalComponent, selector: "oepa-date-input-modal", inputs: { title: "title", infoText: "infoText", dateLabel: "dateLabel", submitBtnLabel: "submitBtnLabel", cancelBtnLabel: "cancelBtnLabel", bsConfig: "bsConfig" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"dateInputModalTitle\">{{title}}</h1>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-labelledby=\"dateInputModalTitle\">\n <div class=\"row\">\n <div *ngIf=\"infoText\" class=\"col-sm-12\">\n <div class=\"alert alert-info\" role=\"alert\">\n {{infoText}}\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div>\n <label [for]=\"datepicker.inputId\" [id]=\"datepicker.inputId+'_Label'\">{{dateLabel}}</label>\n <oepa-datepicker\n #datepicker=\"oepa-datepicker\"\n [group]=\"dateForm\"\n field=\"date\"\n [bsConfig]=\"bsConfig || {}\"\n [showValidation]=\"true\"\n ></oepa-datepicker>\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\" role=\"alert\">{{errorMessage}}</div>\n </div>\n</div>\n<div class=\"modal-footer\" role=\"contentinfo\">\n <button type=\"submit\" class=\"btn btn-primary mr-1\" (click)=\"submit()\" \n [id]=\"'submitDateBtn'\" [disabled]=\"dateForm.status === 'INVALID'\" [attr.aria-label]=\"submitBtnLabel\">{{submitBtnLabel}}</button>\n <button [id]=\"'cancelDateInputBtn'\" type=\"button\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\" [attr.aria-label]=\"cancelBtnLabel\">{{cancelBtnLabel}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerComponent, selector: "oepa-datepicker", inputs: ["componentId", "group", "field", "bsConfig", "showValidation", "placement", "tableIdx", "small"], exportAs: ["oepa-datepicker"] }] });
50
50
  }
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateInputModalComponent, decorators: [{
52
52
  type: Component,
@@ -6,11 +6,10 @@ import * as i3 from "@angular/forms";
6
6
  import * as i4 from "ngx-bootstrap/datepicker";
7
7
  export class DatepickerComponent {
8
8
  idService;
9
- // Exposes the input element's id for parent label association.
10
- get inputId() {
11
- return this.componentId + '_Input';
9
+ _componentId;
10
+ set componentId(value) {
11
+ this._componentId = value;
12
12
  }
13
- componentId = 'OepaDatepickerComponent';
14
13
  group;
15
14
  field;
16
15
  bsConfig;
@@ -18,6 +17,20 @@ export class DatepickerComponent {
18
17
  placement;
19
18
  tableIdx;
20
19
  small = false;
20
+ // Exposes the input element's id for parent label association.
21
+ get componentIdComputed() {
22
+ // Priority: explicit input → generated → fallback
23
+ if (this._componentId)
24
+ return this._componentId;
25
+ if (this.group && this.field) {
26
+ const base = this.idService.getComponentId(this.group);
27
+ return base + (base ? '_' : '') + this.field + (this.tableIdx ?? '');
28
+ }
29
+ return 'oepa-datepicker';
30
+ }
31
+ get inputId() {
32
+ return this.componentIdComputed + '_Input';
33
+ }
21
34
  minDate;
22
35
  maxDate;
23
36
  isDisabled = false;
@@ -25,13 +38,10 @@ export class DatepickerComponent {
25
38
  switch (this.placement) {
26
39
  case 'top':
27
40
  return 'top';
28
- break;
29
41
  case 'left':
30
42
  return 'left';
31
- break;
32
43
  case 'right':
33
44
  return 'right';
34
- break;
35
45
  default:
36
46
  return 'bottom';
37
47
  }
@@ -76,13 +86,12 @@ export class DatepickerComponent {
76
86
  this.bsConfig = {};
77
87
  }
78
88
  this.bsConfig.showWeekNumbers = false;
79
- if (this.group) {
80
- this.componentId = this.idService.getComponentId(this.group);
81
- this.componentId += (this.componentId.length > 0 ? '_' : '') + (this.field || '') + (this.tableIdx || '');
82
- }
83
- else {
84
- console.log('OOPS No datepickerForm yet');
85
- }
89
+ // if (this.group) {
90
+ // this.componentId = this.idService.getComponentId(this.group);
91
+ // this.componentId += (this.componentId.length > 0 ? '_' : '') + (this.field || '') + (this.tableIdx || '');
92
+ // } else {
93
+ // console.log('OOPS No datepickerForm yet');
94
+ // }
86
95
  }
87
96
  // force value to null in case where user enters non-numeric values
88
97
  // in the field. The "normal" behavior of the ngx-bootstrap datepicker
@@ -112,12 +121,14 @@ export class DatepickerComponent {
112
121
  }
113
122
  }
114
123
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
115
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerComponent, selector: "oepa-datepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation", placement: "placement", tableIdx: "tableIdx", small: "small" }, exportAs: ["oepa-datepicker"], usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Datepicker Group\">\n <div>\n <div class=\"input-group\">\n <!-- a label (hidden or not) should be provided by the parent component to ensure accessibility -->\n <input\n [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get('field')?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n [attr.aria-describedby]=\"(showValidation && group.get(field)?.invalid) ? (componentId + '_Error') : null\"\n [attr.aria-invalid]=\"showValidation && !checkValidity() ? 'true' : 'false'\"\n autocomplete=\"off\"\n >\n <div class=\"btn-group\" role=\"group\" aria-label=\"Datepicker controls\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"dp.toggle()\"\n [id]=\"componentId+'_ToggleBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Open calendar\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"clearDate()\"\n [id]=\"componentId+'_ClearBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Clear date\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.hasError('required')\"\n [id]=\"componentId+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is required\n </small>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\"\n [id]=\"componentId+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is out of range\n </small>\n </div>\n</div>\n", styles: ["::ng-deep .bs-datepicker-head,::ng-deep .bs-datepicker-navigation-view,::ng-deep .bs-datepicker-navigation-view *{text-align:left!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "ignoreMinMaxErrors", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i4.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }] });
124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerComponent, selector: "oepa-datepicker", inputs: { componentId: "componentId", group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation", placement: "placement", tableIdx: "tableIdx", small: "small" }, exportAs: ["oepa-datepicker"], usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Datepicker Group\">\n <div>\n <div class=\"input-group\">\n <!-- a label (hidden or not) should be provided by the parent component to ensure accessibility -->\n <input\n [id]=\"componentIdComputed+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get(field)?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n [attr.aria-describedby]=\"(showValidation && group.get(field)?.invalid) ? (componentIdComputed + '_Error') : null\"\n [attr.aria-invalid]=\"showValidation && !checkValidity() ? 'true' : 'false'\"\n autocomplete=\"off\"\n >\n <div class=\"btn-group\" role=\"group\" aria-label=\"Datepicker controls\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"dp.toggle()\"\n [id]=\"componentIdComputed+'_ToggleBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Open calendar\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"clearDate()\"\n [id]=\"componentIdComputed+'_ClearBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Clear date\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.hasError('required')\"\n [id]=\"componentIdComputed+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is required\n </small>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\"\n [id]=\"componentIdComputed+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is out of range\n </small>\n </div>\n</div>\n", styles: ["::ng-deep .bs-datepicker-head,::ng-deep .bs-datepicker-navigation-view,::ng-deep .bs-datepicker-navigation-view *{text-align:left!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "ignoreMinMaxErrors", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i4.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }] });
116
125
  }
117
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, decorators: [{
118
127
  type: Component,
119
- args: [{ selector: 'oepa-datepicker', exportAs: 'oepa-datepicker', template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Datepicker Group\">\n <div>\n <div class=\"input-group\">\n <!-- a label (hidden or not) should be provided by the parent component to ensure accessibility -->\n <input\n [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get('field')?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n [attr.aria-describedby]=\"(showValidation && group.get(field)?.invalid) ? (componentId + '_Error') : null\"\n [attr.aria-invalid]=\"showValidation && !checkValidity() ? 'true' : 'false'\"\n autocomplete=\"off\"\n >\n <div class=\"btn-group\" role=\"group\" aria-label=\"Datepicker controls\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"dp.toggle()\"\n [id]=\"componentId+'_ToggleBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Open calendar\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"clearDate()\"\n [id]=\"componentId+'_ClearBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Clear date\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.hasError('required')\"\n [id]=\"componentId+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is required\n </small>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\"\n [id]=\"componentId+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is out of range\n </small>\n </div>\n</div>\n", styles: ["::ng-deep .bs-datepicker-head,::ng-deep .bs-datepicker-navigation-view,::ng-deep .bs-datepicker-navigation-view *{text-align:left!important}\n"] }]
120
- }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { group: [{
128
+ args: [{ selector: 'oepa-datepicker', exportAs: 'oepa-datepicker', template: "<div [formGroup]=\"group\" role=\"group\" aria-label=\"Datepicker Group\">\n <div>\n <div class=\"input-group\">\n <!-- a label (hidden or not) should be provided by the parent component to ensure accessibility -->\n <input\n [id]=\"componentIdComputed+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #dp=\"bsDatepicker\"\n bsDatepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"group.get(field)?.disabled || false\"\n [placement]=\"getPlacement() || 'bottom'\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n (bsValueChange)=\"onValueChange($event)\"\n [attr.aria-describedby]=\"(showValidation && group.get(field)?.invalid) ? (componentIdComputed + '_Error') : null\"\n [attr.aria-invalid]=\"showValidation && !checkValidity() ? 'true' : 'false'\"\n autocomplete=\"off\"\n >\n <div class=\"btn-group\" role=\"group\" aria-label=\"Datepicker controls\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"dp.toggle()\"\n [id]=\"componentIdComputed+'_ToggleBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Open calendar\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"clearDate()\"\n [id]=\"componentIdComputed+'_ClearBtn'\"\n [disabled]=\"group.get(field)?.disabled\"\n aria-label=\"Clear date\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.hasError('required')\"\n [id]=\"componentIdComputed+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is required\n </small>\n <small\n class=\"invalid-feedback d-block\"\n *ngIf=\"showValidation && group.get(field)?.invalid && !group.get(field)?.hasError('required')\"\n [id]=\"componentIdComputed+'_Error'\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n Date is out of range\n </small>\n </div>\n</div>\n", styles: ["::ng-deep .bs-datepicker-head,::ng-deep .bs-datepicker-navigation-view,::ng-deep .bs-datepicker-navigation-view *{text-align:left!important}\n"] }]
129
+ }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { componentId: [{
130
+ type: Input
131
+ }], group: [{
121
132
  type: Input
122
133
  }], field: [{
123
134
  type: Input
@@ -132,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
132
143
  }], small: [{
133
144
  type: Input
134
145
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFuRixNQUFNLE9BQU8sbUJBQW1CO0lBa0NWO0lBakNwQiwrREFBK0Q7SUFDL0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUNNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztJQUN0QyxLQUFLLENBQWE7SUFDbEIsS0FBSyxDQUFVO0lBQ2YsUUFBUSxDQUErQjtJQUN2QyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLFNBQVMsQ0FBVTtJQUNuQixRQUFRLENBQXFCO0lBQzdCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFaEIsT0FBTyxDQUFvQjtJQUMzQixPQUFPLENBQW9CO0lBQzNCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFbkIsWUFBWTtRQUNqQixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO2dCQUNmLE1BQU07WUFDUjtnQkFDRSxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQW9CLFNBQWlD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SCxDQUFDO3dHQTVHVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw2UUNiaEMsc3pFQWdFQTs7NEZEbkRhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsWUFHakIsaUJBQWlCOzJGQVFsQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnNEYXRlcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29lcGEtZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIGV4cG9ydEFzOiAnb2VwYS1kYXRlcGlja2VyJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBFeHBvc2VzIHRoZSBpbnB1dCBlbGVtZW50J3MgaWQgZm9yIHBhcmVudCBsYWJlbCBhc3NvY2lhdGlvbi5cbiAgcHVibGljIGdldCBpbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SWQgKyAnX0lucHV0JztcbiAgfVxuICBwdWJsaWMgY29tcG9uZW50SWQgPSAnT2VwYURhdGVwaWNrZXJDb21wb25lbnQnO1xuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZmllbGQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJzQ29uZmlnITogUGFydGlhbDxCc0RhdGVwaWNrZXJDb25maWc+O1xuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZW1lbnQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRhYmxlSWR4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNtYWxsID0gZmFsc2U7XG5cbiAgcHVibGljIG1pbkRhdGUhOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgbWF4RGF0ZSE6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGdldFBsYWNlbWVudCgpIDogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcge1xuICAgIHN3aXRjaCAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHJldHVybiAndG9wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGlkU2VydmljZTogT2VwYUNvbXBvbmVudElkU2VydmljZSkgeyB9XG5cbiAgY2hlY2tWYWxpZGl0eSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5ncm91cC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleSA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cC5jb250cm9sc1trZXldLnN0YXR1cyAhPT0gJ0lOVkFMSUQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyRGF0ZSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5ncm91cC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleSA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYnNDb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmJzQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5ic0NvbmZpZy5taW5EYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYnNDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSB0aGlzLmJzQ29uZmlnLm1heERhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1heERhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ic0NvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMuYnNDb25maWcuaXNEaXNhYmxlZDsgLy8gZGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ic0NvbmZpZyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmJzQ29uZmlnLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgICB0aGlzLmNvbXBvbmVudElkICs9ICh0aGlzLmNvbXBvbmVudElkLmxlbmd0aCA+IDAgPyAnXycgOiAnJykgKyAodGhpcy5maWVsZCB8fCAnJykgKyAodGhpcy50YWJsZUlkeCB8fCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdPT1BTIE5vIGRhdGVwaWNrZXJGb3JtIHlldCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZvcmNlIHZhbHVlIHRvIG51bGwgaW4gY2FzZSB3aGVyZSB1c2VyIGVudGVycyBub24tbnVtZXJpYyB2YWx1ZXNcbiAgLy8gaW4gdGhlIGZpZWxkLiBUaGUgXCJub3JtYWxcIiBiZWhhdmlvciBvZiB0aGUgbmd4LWJvb3RzdHJhcCBkYXRlcGlja2VyXG4gIC8vIGlzIHRvIHNldCB0aGUgaW5wdXQgdmFsdWUgdG8gXCJJbnZhbGlkIERhdGVcIi4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzZXNcbiAgLy8gdXAgdmFsaWRhdGlvbi4gVGhlIG1ldGhvZCBiZWxvdyB3aWxsIGZvcmNlIHRoZSBpbnB1dCB2YWx1ZSB0byBudWxsXG4gIC8vIGluIHRoaXMgY2FzZSB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IHZhbGlkYXRpb24gd29ya3MgcHJvcGVybHkuXG4gIG9uVmFsdWVDaGFuZ2UoZXZlbnQ6YW55KSB7XG4gICAgLy8gdGltZW91dCBpcyBuZWVkZWQgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9KU09OKCkgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snYnNDb25maWcnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1pbkRhdGUgfHwgY2hhbmdlc1snYnNDb25maWcnXS5jdXJyZW50VmFsdWUubWluRGF0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1pbkRhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydic0NvbmZpZyddLmN1cnJlbnRWYWx1ZS5tYXhEYXRlIHx8IGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1heERhdGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSBjaGFuZ2VzWydic0NvbmZpZyddLmN1cnJlbnRWYWx1ZS5tYXhEYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRGF0ZXBpY2tlciBHcm91cFwiPlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgPCEtLSBhIGxhYmVsIChoaWRkZW4gb3Igbm90KSBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHkgLS0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICNkcD1cImJzRGF0ZXBpY2tlclwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cImJzQ29uZmlnXCJcbiAgICAgICAgW2lzRGlzYWJsZWRdPVwiZ3JvdXAuZ2V0KCdmaWVsZCcpPy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgIFtwbGFjZW1lbnRdPVwiZ2V0UGxhY2VtZW50KCkgIHx8ICdib3R0b20nXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiAhY2hlY2tWYWxpZGl0eSgpfVwiXG4gICAgICAgIChic1ZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiKHNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmdldChmaWVsZCk/LmludmFsaWQpID8gKGNvbXBvbmVudElkICsgJ19FcnJvcicpIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJzaG93VmFsaWRhdGlvbiAmJiAhY2hlY2tWYWxpZGl0eSgpID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkRhdGVwaWNrZXIgY29udHJvbHNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiZHAudG9nZ2xlKClcIlxuICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX1RvZ2dsZUJ0bidcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJncm91cC5nZXQoZmllbGQpPy5kaXNhYmxlZFwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk9wZW4gY2FsZW5kYXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jYWxlbmRhcjNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckRhdGUoKVwiXG4gICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfQ2xlYXJCdG4nXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuZ2V0KGZpZWxkKT8uZGlzYWJsZWRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBkYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmkteC1sZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8c21hbGxcbiAgICAgIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBkLWJsb2NrXCJcbiAgICAgICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuZ2V0KGZpZWxkKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxuICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfRXJyb3InXCJcbiAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgID5cbiAgICAgIERhdGUgaXMgcmVxdWlyZWRcbiAgICA8L3NtYWxsPlxuICAgIDxzbWFsbFxuICAgICAgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIGQtYmxvY2tcIlxuICAgICAgKm5nSWY9XCJzaG93VmFsaWRhdGlvbiAmJiBncm91cC5nZXQoZmllbGQpPy5pbnZhbGlkICYmICFncm91cC5nZXQoZmllbGQpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXG4gICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19FcnJvcidcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgPlxuICAgICAgRGF0ZSBpcyBvdXQgb2YgcmFuZ2VcbiAgICA8L3NtYWxsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFuRixNQUFNLE9BQU8sbUJBQW1CO0lBaURWO0lBaERaLFlBQVksQ0FBVTtJQUU5QixJQUNJLFdBQVcsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ1EsS0FBSyxDQUFhO0lBQ2xCLEtBQUssQ0FBVTtJQUNmLFFBQVEsQ0FBK0I7SUFDdkMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixTQUFTLENBQVU7SUFDbkIsUUFBUSxDQUFxQjtJQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXZCLCtEQUErRDtJQUMvRCxJQUFJLG1CQUFtQjtRQUNyQixrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFH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QUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2pHLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQTNIVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix5U0NiaEMsbzJFQWdFQTs7NEZEbkRhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsWUFHakIsaUJBQWlCOzJGQU12QixXQUFXO3NCQURkLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJzRGF0ZXBpY2tlckNvbmZpZyB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IE9lcGFDb21wb25lbnRJZFNlcnZpY2UgfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LmNzcyddLFxuICBleHBvcnRBczogJ29lcGEtZGF0ZXBpY2tlcidcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBfY29tcG9uZW50SWQ/OiBzdHJpbmc7XG4gIFxuICBASW5wdXQoKVxuICBzZXQgY29tcG9uZW50SWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbXBvbmVudElkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgZ3JvdXAhOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGZpZWxkITogc3RyaW5nO1xuICBASW5wdXQoKSBic0NvbmZpZyE6IFBhcnRpYWw8QnNEYXRlcGlja2VyQ29uZmlnPjtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2VtZW50ITogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJsZUlkeDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzbWFsbCA9IGZhbHNlO1xuICBcbiAgLy8gRXhwb3NlcyB0aGUgaW5wdXQgZWxlbWVudCdzIGlkIGZvciBwYXJlbnQgbGFiZWwgYXNzb2NpYXRpb24uXG4gIGdldCBjb21wb25lbnRJZENvbXB1dGVkKCk6IHN0cmluZyB7XG4gICAgLy8gUHJpb3JpdHk6IGV4cGxpY2l0IGlucHV0IOKGkiBnZW5lcmF0ZWQg4oaSIGZhbGxiYWNrXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudElkKSByZXR1cm4gdGhpcy5fY29tcG9uZW50SWQ7XG5cbiAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmZpZWxkKSB7XG4gICAgICBjb25zdCBiYXNlID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgICByZXR1cm4gYmFzZSArIChiYXNlID8gJ18nIDogJycpICsgdGhpcy5maWVsZCArICh0aGlzLnRhYmxlSWR4ID8/ICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ29lcGEtZGF0ZXBpY2tlcic7XG4gIH1cblxuICBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudElkQ29tcHV0ZWQgKyAnX0lucHV0JztcbiAgfVxuICBcbiAgcHVibGljIG1pbkRhdGUhOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgbWF4RGF0ZSE6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGdldFBsYWNlbWVudCgpIDogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcge1xuICAgIHN3aXRjaCAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHJldHVybiAndG9wJztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGlkU2VydmljZTogT2VwYUNvbXBvbmVudElkU2VydmljZSkgeyB9XG5cbiAgY2hlY2tWYWxpZGl0eSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5ncm91cC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleSA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cC5jb250cm9sc1trZXldLnN0YXR1cyAhPT0gJ0lOVkFMSUQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyRGF0ZSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5ncm91cC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleSA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYnNDb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmJzQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5ic0NvbmZpZy5taW5EYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYnNDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSB0aGlzLmJzQ29uZmlnLm1heERhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1heERhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ic0NvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMuYnNDb25maWcuaXNEaXNhYmxlZDsgLy8gZGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ic0NvbmZpZyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmJzQ29uZmlnLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgIC8vIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgLy8gICB0aGlzLmNvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgLy8gICB0aGlzLmNvbXBvbmVudElkICs9ICh0aGlzLmNvbXBvbmVudElkLmxlbmd0aCA+IDAgPyAnXycgOiAnJykgKyAodGhpcy5maWVsZCB8fCAnJykgKyAodGhpcy50YWJsZUlkeCB8fCAnJyk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdPT1BTIE5vIGRhdGVwaWNrZXJGb3JtIHlldCcpO1xuICAgIC8vIH1cbiAgfVxuXG4gIC8vIGZvcmNlIHZhbHVlIHRvIG51bGwgaW4gY2FzZSB3aGVyZSB1c2VyIGVudGVycyBub24tbnVtZXJpYyB2YWx1ZXNcbiAgLy8gaW4gdGhlIGZpZWxkLiBUaGUgXCJub3JtYWxcIiBiZWhhdmlvciBvZiB0aGUgbmd4LWJvb3RzdHJhcCBkYXRlcGlja2VyXG4gIC8vIGlzIHRvIHNldCB0aGUgaW5wdXQgdmFsdWUgdG8gXCJJbnZhbGlkIERhdGVcIi4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzZXNcbiAgLy8gdXAgdmFsaWRhdGlvbi4gVGhlIG1ldGhvZCBiZWxvdyB3aWxsIGZvcmNlIHRoZSBpbnB1dCB2YWx1ZSB0byBudWxsXG4gIC8vIGluIHRoaXMgY2FzZSB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IHZhbGlkYXRpb24gd29ya3MgcHJvcGVybHkuXG4gIG9uVmFsdWVDaGFuZ2UoZXZlbnQ6YW55KSB7XG4gICAgLy8gdGltZW91dCBpcyBuZWVkZWQgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9KU09OKCkgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGRdLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snYnNDb25maWcnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1pbkRhdGUgfHwgY2hhbmdlc1snYnNDb25maWcnXS5jdXJyZW50VmFsdWUubWluRGF0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1pbkRhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydic0NvbmZpZyddLmN1cnJlbnRWYWx1ZS5tYXhEYXRlIHx8IGNoYW5nZXNbJ2JzQ29uZmlnJ10uY3VycmVudFZhbHVlLm1heERhdGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSBjaGFuZ2VzWydic0NvbmZpZyddLmN1cnJlbnRWYWx1ZS5tYXhEYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRGF0ZXBpY2tlciBHcm91cFwiPlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgPCEtLSBhIGxhYmVsIChoaWRkZW4gb3Igbm90KSBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHkgLS0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgW2lkXT1cImNvbXBvbmVudElkQ29tcHV0ZWQrJ19JbnB1dCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgI2RwPVwiYnNEYXRlcGlja2VyXCJcbiAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGRcIlxuICAgICAgICBbYnNDb25maWddPVwiYnNDb25maWdcIlxuICAgICAgICBbaXNEaXNhYmxlZF09XCJncm91cC5nZXQoZmllbGQpPy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgIFtwbGFjZW1lbnRdPVwiZ2V0UGxhY2VtZW50KCkgIHx8ICdib3R0b20nXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiAhY2hlY2tWYWxpZGl0eSgpfVwiXG4gICAgICAgIChic1ZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiKHNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmdldChmaWVsZCk/LmludmFsaWQpID8gKGNvbXBvbmVudElkQ29tcHV0ZWQgKyAnX0Vycm9yJykgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cInNob3dWYWxpZGF0aW9uICYmICFjaGVja1ZhbGlkaXR5KCkgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRGF0ZXBpY2tlciBjb250cm9sc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJkcC50b2dnbGUoKVwiXG4gICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkQ29tcHV0ZWQrJ19Ub2dnbGVCdG4nXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuZ2V0KGZpZWxkKT8uZGlzYWJsZWRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJPcGVuIGNhbGVuZGFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2FsZW5kYXIzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEYXRlKClcIlxuICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZENvbXB1dGVkKydfQ2xlYXJCdG4nXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuZ2V0KGZpZWxkKT8uZGlzYWJsZWRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBkYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmkteC1sZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8c21hbGxcbiAgICAgIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBkLWJsb2NrXCJcbiAgICAgICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuZ2V0KGZpZWxkKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIlxuICAgICAgW2lkXT1cImNvbXBvbmVudElkQ29tcHV0ZWQrJ19FcnJvcidcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgPlxuICAgICAgRGF0ZSBpcyByZXF1aXJlZFxuICAgIDwvc21hbGw+XG4gICAgPHNtYWxsXG4gICAgICBjbGFzcz1cImludmFsaWQtZmVlZGJhY2sgZC1ibG9ja1wiXG4gICAgICAqbmdJZj1cInNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmdldChmaWVsZCk/LmludmFsaWQgJiYgIWdyb3VwLmdldChmaWVsZCk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcbiAgICAgIFtpZF09XCJjb21wb25lbnRJZENvbXB1dGVkKydfRXJyb3InXCJcbiAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgID5cbiAgICAgIERhdGUgaXMgb3V0IG9mIHJhbmdlXG4gICAgPC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -6,14 +6,27 @@ import * as i3 from "@angular/forms";
6
6
  import * as i4 from "ngx-bootstrap/datepicker";
7
7
  export class DaterangepickerComponent {
8
8
  idService;
9
- //Exposes the input element's id for parent label association.
10
- get inputId() {
11
- return this.componentId + '_Input';
9
+ _componentId;
10
+ set componentId(value) {
11
+ this._componentId = value;
12
12
  }
13
- componentId = 'OepaDaterangepickerComponent';
14
13
  minDate;
15
14
  maxDate;
16
15
  isDisabled = false;
16
+ // Exposes the input element's id for parent label association.
17
+ get componentIdComputed() {
18
+ // Priority: explicit input → generated → fallback
19
+ if (this._componentId)
20
+ return this._componentId;
21
+ if (this.group && this.field) {
22
+ const base = this.idService.getComponentId(this.group);
23
+ return base + (base ? '_' : '') + this.field;
24
+ }
25
+ return 'oepa-datepicker';
26
+ }
27
+ get inputId() {
28
+ return this.componentIdComputed + '_Input';
29
+ }
17
30
  group;
18
31
  field;
19
32
  bsConfig;
@@ -52,17 +65,19 @@ export class DaterangepickerComponent {
52
65
  if (this.bsConfig && this.bsConfig.isDisabled) {
53
66
  this.isDisabled = this.bsConfig.isDisabled; // defaults to false
54
67
  }
55
- if (this.group) {
56
- this.componentId = this.idService.getComponentId(this.group);
57
- }
68
+ // if (this.group) {
69
+ // this.componentId = this.idService.getComponentId(this.group);
70
+ // }
58
71
  }
59
72
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerComponent, deps: [{ token: i1.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
60
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DaterangepickerComponent, selector: "oepa-daterangepicker", inputs: { group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation" }, exportAs: ["oepa-datepicker"], ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n role=\"textbox\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\"\n (click)=\"drp.toggle()\"\n [id]=\"componentId+'_ToggleBtn'\"\n aria-label=\"Toggle Date Picker\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n <span class=\"visually-hidden\">Open calendar picker</span>\n </button>\n <button class=\"btn btn-primary\"\n (click)=\"clearRange()\"\n [id]=\"componentId+'_ClearBtn'\"\n aria-label=\"Clear Range\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n <span class=\"visually-hidden\">Clear selected date range</span>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i4.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] });
73
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DaterangepickerComponent, selector: "oepa-daterangepicker", inputs: { componentId: "componentId", group: "group", field: "field", bsConfig: "bsConfig", showValidation: "showValidation" }, exportAs: ["oepa-datepicker"], ngImport: i0, template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentIdComputed+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n role=\"textbox\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\"\n (click)=\"drp.toggle()\"\n [id]=\"componentIdComputed+'_ToggleBtn'\"\n aria-label=\"Toggle Date Picker\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"btn btn-primary\"\n (click)=\"clearRange()\"\n [id]=\"componentIdComputed+'_ClearBtn'\"\n aria-label=\"Clear selected date range \"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i4.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] });
61
74
  }
62
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerComponent, decorators: [{
63
76
  type: Component,
64
- args: [{ selector: 'oepa-daterangepicker', exportAs: 'oepa-datepicker', template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentId+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n role=\"textbox\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\"\n (click)=\"drp.toggle()\"\n [id]=\"componentId+'_ToggleBtn'\"\n aria-label=\"Toggle Date Picker\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n <span class=\"visually-hidden\">Open calendar picker</span>\n </button>\n <button class=\"btn btn-primary\"\n (click)=\"clearRange()\"\n [id]=\"componentId+'_ClearBtn'\"\n aria-label=\"Clear Range\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n <span class=\"visually-hidden\">Clear selected date range</span>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>" }]
65
- }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { group: [{
77
+ args: [{ selector: 'oepa-daterangepicker', exportAs: 'oepa-datepicker', template: "<div [formGroup]=\"group\">\n <div>\n <div class=\"input-group\">\n <input [id]=\"componentIdComputed+'_Input'\"\n class=\"form-control\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n #drp=\"bsDaterangepicker\"\n bsDaterangepicker\n [formControlName]=\"field\"\n [bsConfig]=\"bsConfig\"\n [isDisabled]=\"isDisabled\"\n [ngClass]=\"{'is-invalid':showValidation && !checkValidity()}\"\n role=\"textbox\"\n >\n <div *ngIf=\"!isDisabled\" class=\"input-group-btn\">\n <button class=\"btn btn-primary\"\n (click)=\"drp.toggle()\"\n [id]=\"componentIdComputed+'_ToggleBtn'\"\n aria-label=\"Toggle Date Picker\"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-calendar3\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"btn btn-primary\"\n (click)=\"clearRange()\"\n [id]=\"componentIdComputed+'_ClearBtn'\"\n aria-label=\"Clear selected date range \"\n type=\"button\"\n tabindex=\"0\"\n >\n <i class=\"bi bi-x-lg\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <small class=\"invalid-feedback d-block\" *ngIf=\"showValidation && !checkValidity()\">Date is required</small>\n </div>\n</div>" }]
78
+ }], ctorParameters: () => [{ type: i1.OepaComponentIdService }], propDecorators: { componentId: [{
79
+ type: Input
80
+ }], group: [{
66
81
  type: Input
67
82
  }], field: [{
68
83
  type: Input
@@ -71,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
71
86
  }], showValidation: [{
72
87
  type: Input
73
88
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVyYW5nZXBpY2tlci9kYXRlcmFuZ2VwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWF6RCxNQUFNLE9BQU8sd0JBQXdCO0lBZ0JmO0lBZnBCLDhEQUE4RDtJQUM5RCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUNyQyxDQUFDO0lBRU0sV0FBVyxHQUFHLDhCQUE4QixDQUFDO0lBQzdDLE9BQU8sQ0FBbUI7SUFDMUIsT0FBTyxDQUFtQjtJQUMxQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRWpCLEtBQUssQ0FBYTtJQUNsQixLQUFLLENBQVU7SUFDZixRQUFRLENBQStCO0lBQ3ZDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFaEMsWUFBb0IsU0FBaUM7UUFBakMsY0FBUyxHQUFULFNBQVMsQ0FBd0I7SUFBSSxDQUFDO0lBRTFELGFBQWE7UUFDWCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNSLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsb0JBQW9CO1FBQ3BFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO3dHQXBEVSx3QkFBd0I7NEZBQXhCLHdCQUF3QiwrTENickMsNHFEQXdDTTs7NEZEM0JPLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsWUFHdEIsaUJBQWlCOzJGQWFsQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCc0RhdGVwaWNrZXJDb25maWcgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuXG5pbXBvcnQgeyBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1kYXRlcmFuZ2VwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudC5jc3MnXSxcbiAgZXhwb3J0QXM6ICdvZXBhLWRhdGVwaWNrZXInXG59KVxuZXhwb3J0IGNsYXNzIERhdGVyYW5nZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vRXhwb3NlcyB0aGUgaW5wdXQgZWxlbWVudCdzIGlkIGZvciBwYXJlbnQgbGFiZWwgYXNzb2NpYXRpb24uXG4gIHB1YmxpYyBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudElkICsgJ19JbnB1dCc7XG4gIH1cbiAgXG4gIHB1YmxpYyBjb21wb25lbnRJZCA9ICdPZXBhRGF0ZXJhbmdlcGlja2VyQ29tcG9uZW50JztcbiAgcHVibGljIG1pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmaWVsZCE6IHN0cmluZztcbiAgQElucHV0KCkgYnNDb25maWchOiBQYXJ0aWFsPEJzRGF0ZXBpY2tlckNvbmZpZz47XG4gIEBJbnB1dCgpIHNob3dWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZFNlcnZpY2U6IE9lcGFDb21wb25lbnRJZFNlcnZpY2UpIHsgfVxuXG4gIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5ncm91cC5jb250cm9scykge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAuY29udHJvbHMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgPT09IHRoaXMuZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAuY29udHJvbHNba2V5XS5zdGF0dXMgPT09ICdWQUxJRCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2xlYXJSYW5nZSgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5ncm91cC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleSA9PT0gdGhpcy5maWVsZCkge1xuICAgICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYnNDb25maWcgJiYgdGhpcy5ic0NvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuYnNDb25maWcubWluRGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmJzQ29uZmlnICYmIHRoaXMuYnNDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSB0aGlzLmJzQ29uZmlnLm1heERhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5ic0NvbmZpZyAmJiB0aGlzLmJzQ29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdGhpcy5ic0NvbmZpZy5pc0Rpc2FibGVkOyAvLyBkZWZhdWx0cyB0byBmYWxzZVxuICAgIH1cbiAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXQgIFtpZF09XCJjb21wb25lbnRJZCsnX0lucHV0J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAjZHJwPVwiYnNEYXRlcmFuZ2VwaWNrZXJcIlxuICAgICAgICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgW2JzQ29uZmlnXT1cImJzQ29uZmlnXCJcbiAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgIWNoZWNrVmFsaWRpdHkoKX1cIlxuICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzRGlzYWJsZWRcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkcnAudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19Ub2dnbGVCdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlRvZ2dsZSBEYXRlIFBpY2tlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNhbGVuZGFyM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5PcGVuIGNhbGVuZGFyIHBpY2tlcjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclJhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19DbGVhckJ0bidcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgUmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS14LWxnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkNsZWFyIHNlbGVjdGVkIGRhdGUgcmFuZ2U8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBkLWJsb2NrXCIgKm5nSWY9XCJzaG93VmFsaWRhdGlvbiAmJiAhY2hlY2tWYWxpZGl0eSgpXCI+RGF0ZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gIDwvZGl2PlxuPC9kaXY+Il19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RhdGVyYW5nZXBpY2tlci9kYXRlcmFuZ2VwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWF6RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0NmO0lBakNaLFlBQVksQ0FBVTtJQUU5QixJQUNJLFdBQVcsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRU0sT0FBTyxDQUFtQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFMUIsK0RBQStEO0lBQy9ELElBQUksbUJBQW1CO1FBQ3JCLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBRVEsS0FBSyxDQUFhO0lBQ2xCLEtBQUssQ0FBVTtJQUNmLFFBQVEsQ0FBK0I7SUFDdkMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUVoQyxZQUFvQixTQUFpQztRQUFqQyxjQUFTLEdBQVQsU0FBUyxDQUF3QjtJQUFJLENBQUM7SUFFMUQsYUFBYTtRQUNYLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0I7UUFDcEUsQ0FBQztRQUNELG9CQUFvQjtRQUNwQixvRUFBb0U7UUFDcEUsSUFBSTtJQUNOLENBQUM7d0dBdEVVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLDJOQ2JyQyx3akRBc0NNOzs0RkR6Qk8sd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHNCQUFzQixZQUd0QixpQkFBaUI7MkZBTXZCLFdBQVc7c0JBRGQsS0FBSztnQkEwQkcsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnNEYXRlcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29lcGEtZGF0ZXJhbmdlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVyYW5nZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVyYW5nZXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIGV4cG9ydEFzOiAnb2VwYS1kYXRlcGlja2VyJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlcmFuZ2VwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9jb21wb25lbnRJZD86IHN0cmluZztcbiAgXG4gIEBJbnB1dCgpXG4gIHNldCBjb21wb25lbnRJZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29tcG9uZW50SWQgPSB2YWx1ZTtcbiAgfVxuICBcbiAgcHVibGljIG1pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8vIEV4cG9zZXMgdGhlIGlucHV0IGVsZW1lbnQncyBpZCBmb3IgcGFyZW50IGxhYmVsIGFzc29jaWF0aW9uLlxuICBnZXQgY29tcG9uZW50SWRDb21wdXRlZCgpOiBzdHJpbmcge1xuICAgIC8vIFByaW9yaXR5OiBleHBsaWNpdCBpbnB1dCDihpIgZ2VuZXJhdGVkIOKGkiBmYWxsYmFja1xuICAgIGlmICh0aGlzLl9jb21wb25lbnRJZCkgcmV0dXJuIHRoaXMuX2NvbXBvbmVudElkO1xuXG4gICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5maWVsZCkge1xuICAgICAgY29uc3QgYmFzZSA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgcmV0dXJuIGJhc2UgKyAoYmFzZSA/ICdfJyA6ICcnKSArIHRoaXMuZmllbGQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICdvZXBhLWRhdGVwaWNrZXInO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJZENvbXB1dGVkICsgJ19JbnB1dCc7XG4gIH1cblxuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZmllbGQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJzQ29uZmlnITogUGFydGlhbDxCc0RhdGVwaWNrZXJDb25maWc+O1xuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlKSB7IH1cblxuICBjaGVja1ZhbGlkaXR5KCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZ3JvdXAuY29udHJvbHMpIHtcbiAgICAgIGlmICh0aGlzLmdyb3VwLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGtleSkgJiYga2V5ID09PSB0aGlzLmZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwLmNvbnRyb2xzW2tleV0uc3RhdHVzID09PSAnVkFMSUQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyUmFuZ2UoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5ncm91cC5jb250cm9scykge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAuY29udHJvbHMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgPT09IHRoaXMuZmllbGQpIHtcbiAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1trZXldLnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmJzQ29uZmlnICYmIHRoaXMuYnNDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLmJzQ29uZmlnLm1pbkRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5ic0NvbmZpZyAmJiB0aGlzLmJzQ29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gdGhpcy5ic0NvbmZpZy5tYXhEYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnNDb25maWcgJiYgdGhpcy5ic0NvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMuYnNDb25maWcuaXNEaXNhYmxlZDsgLy8gZGVmYXVsdHMgdG8gZmFsc2VcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgIC8vIH1cbiAgfVxuXG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cbiAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0ICBbaWRdPVwiY29tcG9uZW50SWRDb21wdXRlZCsnX0lucHV0J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAjZHJwPVwiYnNEYXRlcmFuZ2VwaWNrZXJcIlxuICAgICAgICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgW2JzQ29uZmlnXT1cImJzQ29uZmlnXCJcbiAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgIWNoZWNrVmFsaWRpdHkoKX1cIlxuICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzRGlzYWJsZWRcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkcnAudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWRDb21wdXRlZCsnX1RvZ2dsZUJ0bidcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlIERhdGUgUGlja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2FsZW5kYXIzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUmFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZENvbXB1dGVkKydfQ2xlYXJCdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlbGVjdGVkIGRhdGUgcmFuZ2UgXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmkteC1sZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIGQtYmxvY2tcIiAqbmdJZj1cInNob3dWYWxpZGF0aW9uICYmICFjaGVja1ZhbGlkaXR5KClcIj5EYXRlIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=