ng-ipa-library 0.7.10 → 1.0.1

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 (60) hide show
  1. package/{esm2015/lib/core/components/loading/loading.component.js → esm2020/lib/core/components/loading/loading.component.mjs} +5 -9
  2. package/esm2020/lib/core/interceptors/error.interceptor.mjs +46 -0
  3. package/{esm2015/lib/core/interceptors/loading.interceptor.js → esm2020/lib/core/interceptors/loading.interceptor.mjs} +3 -3
  4. package/esm2020/lib/core/interceptors/token.interceptor.mjs +68 -0
  5. package/esm2020/lib/core/services/auth.service.mjs +47 -0
  6. package/{esm2015/lib/core/services/error.service.js → esm2020/lib/core/services/error.service.mjs} +3 -3
  7. package/{esm2015/lib/core/services/loader.service.js → esm2020/lib/core/services/loader.service.mjs} +3 -3
  8. package/esm2020/lib/generate-form/generate-form.component.mjs +116 -0
  9. package/esm2020/lib/ipa-form/datepicker/datepicker.component.mjs +66 -0
  10. package/esm2020/lib/ipa-form/datepicker/gregorian-datepicker/gregorian-datepicker.component.mjs +23 -0
  11. package/{esm2015/lib/ipa-form/datepicker/gregorian-datepicker/gregorian18n.js → esm2020/lib/ipa-form/datepicker/gregorian-datepicker/gregorian18n.mjs} +3 -3
  12. package/{esm2015/lib/ipa-form/datepicker/hijri-datepicker/IslamicI18n.js → esm2020/lib/ipa-form/datepicker/hijri-datepicker/IslamicI18n.mjs} +3 -3
  13. package/esm2020/lib/ipa-form/datepicker/hijri-datepicker/hijri-datepicker.component.mjs +23 -0
  14. package/esm2020/lib/ipa-form/dropdown-input/dropdown-input.component.mjs +77 -0
  15. package/{esm2015/lib/ipa-form/file-upload/file-upload.component.js → esm2020/lib/ipa-form/file-upload/file-upload.component.mjs} +5 -9
  16. package/esm2020/lib/ipa-form/ipa-form.service.mjs +254 -0
  17. package/esm2020/lib/ipa-form/recaptcha/recaptcha.component.mjs +55 -0
  18. package/esm2020/lib/ipa-form/text-input/text-input.component.mjs +72 -0
  19. package/esm2020/lib/ipa-form/textarea-input/textarea-input.component.mjs +69 -0
  20. package/{esm2015/lib/models/apiException.js → esm2020/lib/models/apiException.mjs} +0 -0
  21. package/{esm2015/lib/models/apiResponse.js → esm2020/lib/models/apiResponse.mjs} +0 -0
  22. package/{esm2015/lib/models/breadcrumbs.model.js → esm2020/lib/models/breadcrumbs.model.mjs} +0 -0
  23. package/{esm2015/lib/models/decodedToken.model.js → esm2020/lib/models/decodedToken.model.mjs} +0 -0
  24. package/{esm2015/lib/models/exceptionUrl.model.js → esm2020/lib/models/exceptionUrl.model.mjs} +0 -0
  25. package/{esm2015/lib/models/generateForm.model.js → esm2020/lib/models/generateForm.model.mjs} +1 -1
  26. package/{esm2015/lib/models/pagedResult.js → esm2020/lib/models/pagedResult.mjs} +0 -0
  27. package/{esm2015/lib/models/user.model.js → esm2020/lib/models/user.model.mjs} +0 -0
  28. package/{esm2015/lib/ng-ipa-library.module.js → esm2020/lib/ng-ipa-library.module.mjs} +4 -4
  29. package/{esm2015/lib/pipes/hijri-date.pipe.js → esm2020/lib/pipes/hijri-date.pipe.mjs} +3 -3
  30. package/{esm2015/lib/pipes/pipes.module.js → esm2020/lib/pipes/pipes.module.mjs} +4 -4
  31. package/esm2020/lib/services/breadcrumbs.service.mjs +149 -0
  32. package/esm2020/lib/services/common.service.mjs +65 -0
  33. package/{esm2015/lib/share-button/share-button.component.js → esm2020/lib/share-button/share-button.component.mjs} +5 -9
  34. package/{esm2015/lib/share-button/share-button.module.js → esm2020/lib/share-button/share-button.module.mjs} +4 -4
  35. package/{esm2015/ng-ipa-library.js → esm2020/ng-ipa-library.mjs} +0 -0
  36. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  37. package/fesm2015/{ng-ipa-library.js → ng-ipa-library.mjs} +122 -158
  38. package/fesm2015/ng-ipa-library.mjs.map +1 -0
  39. package/fesm2020/ng-ipa-library.mjs +1582 -0
  40. package/fesm2020/ng-ipa-library.mjs.map +1 -0
  41. package/lib/models/generateForm.model.d.ts +2 -0
  42. package/package.json +32 -19
  43. package/src/lib/assets/ngIPAStyle.scss +2 -1
  44. package/bundles/ng-ipa-library.umd.js +0 -2098
  45. package/bundles/ng-ipa-library.umd.js.map +0 -1
  46. package/esm2015/lib/core/interceptors/error.interceptor.js +0 -46
  47. package/esm2015/lib/core/interceptors/token.interceptor.js +0 -69
  48. package/esm2015/lib/core/services/auth.service.js +0 -48
  49. package/esm2015/lib/generate-form/generate-form.component.js +0 -120
  50. package/esm2015/lib/ipa-form/datepicker/datepicker.component.js +0 -70
  51. package/esm2015/lib/ipa-form/datepicker/gregorian-datepicker/gregorian-datepicker.component.js +0 -28
  52. package/esm2015/lib/ipa-form/datepicker/hijri-datepicker/hijri-datepicker.component.js +0 -28
  53. package/esm2015/lib/ipa-form/dropdown-input/dropdown-input.component.js +0 -81
  54. package/esm2015/lib/ipa-form/ipa-form.service.js +0 -251
  55. package/esm2015/lib/ipa-form/recaptcha/recaptcha.component.js +0 -59
  56. package/esm2015/lib/ipa-form/text-input/text-input.component.js +0 -76
  57. package/esm2015/lib/ipa-form/textarea-input/textarea-input.component.js +0 -73
  58. package/esm2015/lib/services/breadcrumbs.service.js +0 -151
  59. package/esm2015/lib/services/common.service.js +0 -66
  60. package/fesm2015/ng-ipa-library.js.map +0 -1
@@ -14,14 +14,10 @@ export class LoaderComponent {
14
14
  });
15
15
  }
16
16
  }
17
- LoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoaderComponent, deps: [{ token: i1.LoaderService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
18
- LoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.9", type: LoaderComponent, selector: "ipa-loader", ngImport: i0, template: "<div id=\"cover-spin\" *ngIf=\"loading\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n", styles: ["#cover-spin{display:flex}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoaderComponent, decorators: [{
17
+ LoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoaderComponent, deps: [{ token: i1.LoaderService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
18
+ LoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LoaderComponent, selector: "ipa-loader", ngImport: i0, template: "<div id=\"cover-spin\" *ngIf=\"loading\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n", styles: ["#cover-spin{display:flex}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoaderComponent, decorators: [{
20
20
  type: Component,
21
- args: [{
22
- selector: 'ipa-loader',
23
- templateUrl: './loading.component.html',
24
- styleUrls: ['./loading.component.scss'],
25
- }]
21
+ args: [{ selector: 'ipa-loader', template: "<div id=\"cover-spin\" *ngIf=\"loading\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n", styles: ["#cover-spin{display:flex}\n"] }]
26
22
  }], ctorParameters: function () { return [{ type: i1.LoaderService }, { type: i0.ChangeDetectorRef }]; } });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2NvcmUvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctaXBhLWxpYnJhcnkvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTVFLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQ1UsYUFBNEIsRUFDNUIsR0FBc0I7UUFEdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFDN0IsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NEdBYlUsZUFBZTtnR0FBZixlQUFlLGtEQ1I1Qiw0RkFHQTsyRkRLYSxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lwYS1sb2FkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkaW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2FkaW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGVyU2VydmljZS5pc0xvYWRpbmcuc3Vic2NyaWJlKCh2KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHY7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiY292ZXItc3BpblwiICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2NvcmUvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctaXBhLWxpYnJhcnkvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTVFLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQ1UsYUFBNEIsRUFDNUIsR0FBc0I7UUFEdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFDN0IsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NEdBYlUsZUFBZTtnR0FBZixlQUFlLGtEQ1I1Qiw0RkFHQTsyRkRLYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lwYS1sb2FkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkaW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2FkaW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGVyU2VydmljZS5pc0xvYWRpbmcuc3Vic2NyaWJlKCh2KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHY7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiY292ZXItc3BpblwiICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { throwError } from 'rxjs';
3
+ import { catchError } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/error.service";
6
+ import * as i2 from "ngx-toastr";
7
+ export class ErrorInterceptor {
8
+ constructor(errorService, toastrService) {
9
+ this.errorService = errorService;
10
+ this.toastrService = toastrService;
11
+ }
12
+ intercept(req, next) {
13
+ if (this.isException(req)) {
14
+ return next.handle(req);
15
+ }
16
+ return next.handle(req).pipe(catchError((error) => {
17
+ const response = error.error;
18
+ const toastrConfig = {
19
+ disableTimeOut: true,
20
+ };
21
+ switch (response.statusCode) {
22
+ case 500:
23
+ this.toastrService.error(response?.innerException + ' ' + response?.stackTrace, response.message, toastrConfig);
24
+ break;
25
+ default:
26
+ this.toastrService.error(response.message, '', toastrConfig);
27
+ break;
28
+ }
29
+ return throwError(error);
30
+ }));
31
+ }
32
+ isException(req) {
33
+ for (const url of this.errorService.urls) {
34
+ if (req.url.includes(url.path) && req.method === url.method) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ }
41
+ ErrorInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorInterceptor, deps: [{ token: i1.ErrorService }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Injectable });
42
+ ErrorInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorInterceptor });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorInterceptor, decorators: [{
44
+ type: Injectable
45
+ }], ctorParameters: function () { return [{ type: i1.ErrorService }, { type: i2.ToastrService }]; } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2Vycm9yLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNNUMsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNVLFlBQTBCLEVBQzFCLGFBQTRCO1FBRDVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ25DLENBQUM7SUFFSixTQUFTLENBQ1AsR0FBeUIsRUFDekIsSUFBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFxQixDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUE4QjtnQkFDOUMsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQztZQUNGLFFBQVEsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsS0FBSyxHQUFHO29CQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUN0QixRQUFRLEVBQUUsY0FBYyxHQUFHLEdBQUcsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUNyRCxRQUFRLENBQUMsT0FBTyxFQUNoQixZQUFZLENBQ2IsQ0FBQztvQkFDRixNQUFNO2dCQUVSO29CQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUM3RCxNQUFNO2FBQ1Q7WUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFxQjtRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO1lBQ3hDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs2R0E3Q1UsZ0JBQWdCO2lIQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBIdHRwUmVxdWVzdCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEludGVyY2VwdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpRXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwaUV4Y2VwdGlvbic7XHJcbmltcG9ydCB7IEluZGl2aWR1YWxDb25maWcsIFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVycm9ySW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgaW50ZXJjZXB0KFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcclxuICAgIGlmICh0aGlzLmlzRXhjZXB0aW9uKHJlcSkpIHtcclxuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGVycm9yLmVycm9yIGFzIEFwaUV4Y2VwdGlvbjtcclxuICAgICAgICBjb25zdCB0b2FzdHJDb25maWc6IFBhcnRpYWw8SW5kaXZpZHVhbENvbmZpZz4gPSB7XHJcbiAgICAgICAgICBkaXNhYmxlVGltZU91dDogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xyXG4gICAgICAgICAgY2FzZSA1MDA6XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICByZXNwb25zZT8uaW5uZXJFeGNlcHRpb24gKyAnICcgKyByZXNwb25zZT8uc3RhY2tUcmFjZSxcclxuICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgIHRvYXN0ckNvbmZpZ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IocmVzcG9uc2UubWVzc2FnZSwgJycsIHRvYXN0ckNvbmZpZyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFeGNlcHRpb24ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IHVybCBvZiB0aGlzLmVycm9yU2VydmljZS51cmxzKSB7XHJcbiAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKHVybC5wYXRoKSAmJiByZXEubWV0aG9kID09PSB1cmwubWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
@@ -50,9 +50,9 @@ export class LoadingInterceptor {
50
50
  return false;
51
51
  }
52
52
  }
53
- LoadingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoadingInterceptor, deps: [{ token: i1.LoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
54
- LoadingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoadingInterceptor });
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoadingInterceptor, decorators: [{
53
+ LoadingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoadingInterceptor, deps: [{ token: i1.LoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
54
+ LoadingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoadingInterceptor });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoadingInterceptor, decorators: [{
56
56
  type: Injectable
57
57
  }], ctorParameters: function () { return [{ type: i1.LoaderService }]; } });
58
58
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWlwYS1saWJyYXJ5L3NyYy9saWIvY29yZS9pbnRlcmNlcHRvcnMvbG9hZGluZy5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFLTCxZQUFZLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJbEMsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUZ4QyxhQUFRLEdBQXVCLEVBQUUsQ0FBQztJQUVTLENBQUM7SUFFcEQsYUFBYSxDQUFDLEdBQXFCO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsU0FBUyxDQUNQLEdBQXlCLEVBQ3pCLElBQWlCO1FBRWpCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUM3QyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FDRixDQUFDO1lBQ0YsMkNBQTJDO1lBQzNDLE9BQU8sR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBcUI7UUFDL0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUN6QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7K0dBdkRVLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSHR0cFJlcXVlc3QsXHJcbiAgSHR0cEhhbmRsZXIsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBJbnRlcmNlcHRvcixcclxuICBIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMb2FkaW5nSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIHByaXZhdGUgcmVxdWVzdHM6IEh0dHBSZXF1ZXN0PGFueT5bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2UpIHt9XHJcblxyXG4gIHJlbW92ZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XHJcbiAgICBjb25zdCBpID0gdGhpcy5yZXF1ZXN0cy5pbmRleE9mKHJlcSk7XHJcbiAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgIHRoaXMucmVxdWVzdHMuc3BsaWNlKGksIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5uZXh0KHRoaXMucmVxdWVzdHMubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQoXHJcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxyXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgaWYgKHRoaXMuaXNFeGNlcHRpb24ocmVxKSkge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVxdWVzdHMucHVzaChyZXEpO1xyXG5cclxuICAgIHRoaXMubG9hZGVyU2VydmljZS5pc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV4dC5oYW5kbGUocmVxKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0KHJlcSk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0KHJlcSk7XHJcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0KHJlcSk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgLy8gcmVtb3ZlIHJlcXVlc3QgZnJvbSBxdWV1ZSB3aGVuIGNhbmNlbGxlZFxyXG4gICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlUmVxdWVzdChyZXEpO1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0V4Y2VwdGlvbihyZXE6IEh0dHBSZXF1ZXN0PGFueT4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgdXJsIG9mIHRoaXMubG9hZGVyU2VydmljZS51cmxzKSB7XHJcbiAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKHVybC5wYXRoKSAmJiByZXEubWV0aG9kID09PSB1cmwubWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,68 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/auth.service";
4
+ import * as i2 from "@angular/common/http";
5
+ export class TokenInterceptor {
6
+ constructor(authService, http) {
7
+ this.authService = authService;
8
+ this.http = http;
9
+ this.refresh = true;
10
+ }
11
+ intercept(request, next) {
12
+ if (this.isException(request)) {
13
+ return next.handle(request);
14
+ }
15
+ const token = this.authService.getToken();
16
+ if (token) {
17
+ this.isTokenExpired(token);
18
+ request = request.clone({
19
+ setHeaders: {
20
+ Authorization: `Bearer ${token}`,
21
+ },
22
+ });
23
+ }
24
+ return next.handle(request);
25
+ }
26
+ isTokenExpired(token) {
27
+ const redirectPath = location.pathname;
28
+ const decodedToken = this.authService.getDecodedToken();
29
+ const expDate = new Date((decodedToken.exp ?? 0) * 1000);
30
+ if (expDate < new Date()) {
31
+ location.replace('/ar/login?redirect=' + redirectPath);
32
+ return;
33
+ }
34
+ else {
35
+ if (this.authService.currentUserUrl) {
36
+ if (this.refresh) {
37
+ this.http
38
+ .get(this.authService.currentUserUrl + `/api/users?refresh`, {
39
+ headers: { Authorization: `Bearer ${token}` },
40
+ })
41
+ .subscribe((user) => {
42
+ localStorage.setItem('token', user.token);
43
+ this.refresh = false;
44
+ setTimeout(() => {
45
+ this.refresh = true;
46
+ }, 60 * 1000);
47
+ });
48
+ }
49
+ }
50
+ else {
51
+ throw new Error("provide current base user api url using this function authService.setCurrentUserUrl('https://...')");
52
+ }
53
+ }
54
+ }
55
+ isException(request) {
56
+ if (request.url.includes('/api/users?refresh') &&
57
+ request.method === 'GET') {
58
+ return true;
59
+ }
60
+ return false;
61
+ }
62
+ }
63
+ TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.AuthService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
64
+ TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TokenInterceptor });
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TokenInterceptor, decorators: [{
66
+ type: Injectable
67
+ }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.HttpClient }]; } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL3Rva2VuLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFjM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQixXQUF3QixFQUFVLElBQWdCO1FBQWxELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUR0RSxZQUFPLEdBQUcsSUFBSSxDQUFDO0lBQzBELENBQUM7SUFFMUUsU0FBUyxDQUNQLE9BQTZCLEVBQzdCLElBQWlCO1FBRWpCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0I7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDdEIsVUFBVSxFQUFFO29CQUNWLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRTtpQkFDakM7YUFDRixDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWE7UUFDbEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBa0IsQ0FBQztRQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUN4QixRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtnQkFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsSUFBSTt5QkFDTixHQUFHLENBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsb0JBQW9CLEVBQUU7d0JBQ2pFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFO3FCQUM5QyxDQUFDO3lCQUNELFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNsQixZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO29CQUNoQixDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNGO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0dBQW9HLENBQ3JHLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUF5QjtRQUMzQyxJQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQzFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUN4QjtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzZHQTdEVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEh0dHBSZXF1ZXN0LFxyXG4gIEh0dHBIYW5kbGVyLFxyXG4gIEh0dHBFdmVudCxcclxuICBIdHRwSW50ZXJjZXB0b3IsXHJcbiAgSHR0cENsaWVudCxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZWNvZGVkVG9rZW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvZGVjb2RlZFRva2VuLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIHJlZnJlc2ggPSB0cnVlO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIGludGVyY2VwdChcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxyXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgaWYgKHRoaXMuaXNFeGNlcHRpb24ocmVxdWVzdCkpIHtcclxuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuKCk7XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgdGhpcy5pc1Rva2VuRXhwaXJlZCh0b2tlbik7XHJcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICBzZXRIZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNUb2tlbkV4cGlyZWQodG9rZW46IHN0cmluZykge1xyXG4gICAgY29uc3QgcmVkaXJlY3RQYXRoID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldERlY29kZWRUb2tlbigpIGFzIERlY29kZWRUb2tlbjtcclxuICAgIGNvbnN0IGV4cERhdGUgPSBuZXcgRGF0ZSgoZGVjb2RlZFRva2VuLmV4cCA/PyAwKSAqIDEwMDApO1xyXG4gICAgaWYgKGV4cERhdGUgPCBuZXcgRGF0ZSgpKSB7XHJcbiAgICAgIGxvY2F0aW9uLnJlcGxhY2UoJy9hci9sb2dpbj9yZWRpcmVjdD0nICsgcmVkaXJlY3RQYXRoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXJVcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoKSB7XHJcbiAgICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldDxVc2VyPih0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyVXJsICsgYC9hcGkvdXNlcnM/cmVmcmVzaGAsIHtcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVzZXIpID0+IHtcclxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB1c2VyLnRva2VuKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSwgNjAgKiAxMDAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwicHJvdmlkZSBjdXJyZW50IGJhc2UgdXNlciBhcGkgdXJsIHVzaW5nIHRoaXMgZnVuY3Rpb24gYXV0aFNlcnZpY2Uuc2V0Q3VycmVudFVzZXJVcmwoJ2h0dHBzOi8vLi4uJylcIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFeGNlcHRpb24ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICByZXF1ZXN0LnVybC5pbmNsdWRlcygnL2FwaS91c2Vycz9yZWZyZXNoJykgJiZcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,47 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class AuthService {
5
+ constructor() {
6
+ this.currentUser = new BehaviorSubject({ exp: 0 });
7
+ this.currentUserUrl = '';
8
+ }
9
+ getToken() {
10
+ return localStorage.getItem('token') ?? '';
11
+ }
12
+ getDecodedToken() {
13
+ return this.decodeJwt(this.getToken());
14
+ }
15
+ setCurrentUser() {
16
+ const decodedToken = this.getDecodedToken();
17
+ this.currentUser.next({
18
+ nameid: decodedToken.nameid,
19
+ email: decodedToken.email,
20
+ given_name: decodedToken.given_name,
21
+ exp: decodedToken.exp,
22
+ });
23
+ }
24
+ setCurrentUserUrl(url) {
25
+ this.currentUserUrl = url;
26
+ }
27
+ decodeJwt(token) {
28
+ const base64Url = token.split('.')[1];
29
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
30
+ const jsonPayload = decodeURIComponent(atob(base64)
31
+ .split('')
32
+ .map((c) => {
33
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
34
+ })
35
+ .join(''));
36
+ return JSON.parse(jsonPayload);
37
+ }
38
+ }
39
+ AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
+ AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AuthService, providedIn: 'root' });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AuthService, decorators: [{
42
+ type: Injectable,
43
+ args: [{
44
+ providedIn: 'root',
45
+ }]
46
+ }], ctorParameters: function () { return []; } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctaXBhLWxpYnJhcnkvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTXZDLE1BQU0sT0FBTyxXQUFXO0lBR3RCO1FBRk8sZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLG1CQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ0wsQ0FBQztJQUVoQixRQUFRO1FBQ04sT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQWtCLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztZQUN6QixVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVU7WUFDbkMsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBYTtRQUM3QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDVCxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVCxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDWixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O3dHQXZDVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRGVjb2RlZFRva2VuIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlY29kZWRUb2tlbi5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xyXG4gIHB1YmxpYyBjdXJyZW50VXNlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGVjb2RlZFRva2VuPih7IGV4cDogMCB9KTtcclxuICBjdXJyZW50VXNlclVybCA9ICcnO1xyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZ2V0VG9rZW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSA/PyAnJztcclxuICB9XHJcblxyXG4gIGdldERlY29kZWRUb2tlbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlSnd0KHRoaXMuZ2V0VG9rZW4oKSk7XHJcbiAgfVxyXG5cclxuICBzZXRDdXJyZW50VXNlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZ2V0RGVjb2RlZFRva2VuKCkgYXMgRGVjb2RlZFRva2VuO1xyXG4gICAgdGhpcy5jdXJyZW50VXNlci5uZXh0KHtcclxuICAgICAgbmFtZWlkOiBkZWNvZGVkVG9rZW4ubmFtZWlkLFxyXG4gICAgICBlbWFpbDogZGVjb2RlZFRva2VuLmVtYWlsLFxyXG4gICAgICBnaXZlbl9uYW1lOiBkZWNvZGVkVG9rZW4uZ2l2ZW5fbmFtZSxcclxuICAgICAgZXhwOiBkZWNvZGVkVG9rZW4uZXhwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRDdXJyZW50VXNlclVybCh1cmw6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50VXNlclVybCA9IHVybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVjb2RlSnd0KHRva2VuOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgYmFzZTY0VXJsID0gdG9rZW4uc3BsaXQoJy4nKVsxXTtcclxuICAgIGNvbnN0IGJhc2U2NCA9IGJhc2U2NFVybC5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpO1xyXG4gICAgY29uc3QganNvblBheWxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoXHJcbiAgICAgIGF0b2IoYmFzZTY0KVxyXG4gICAgICAgIC5zcGxpdCgnJylcclxuICAgICAgICAubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gJyUnICsgKCcwMCcgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuam9pbignJylcclxuICAgICk7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uUGF5bG9hZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -11,9 +11,9 @@ export class ErrorService {
11
11
  this.urls.push(url);
12
12
  }
13
13
  }
14
- ErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15
- ErrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: ErrorService, providedIn: 'root' });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: ErrorService, decorators: [{
14
+ ErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15
+ ErrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorService, providedIn: 'root' });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ErrorService, decorators: [{
17
17
  type: Injectable,
18
18
  args: [{
19
19
  providedIn: 'root'
@@ -13,9 +13,9 @@ export class LoaderService {
13
13
  this.urls.push(url);
14
14
  }
15
15
  }
16
- LoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
- LoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoaderService, providedIn: 'root' });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoaderService, decorators: [{
16
+ LoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
+ LoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoaderService, providedIn: 'root' });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LoaderService, decorators: [{
19
19
  type: Injectable,
20
20
  args: [{
21
21
  providedIn: 'root',
@@ -0,0 +1,116 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormArray, FormControl, FormGroup, Validators, } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../ipa-form/ipa-form.service";
5
+ import * as i2 from "../ipa-form/textarea-input/textarea-input.component";
6
+ import * as i3 from "../ipa-form/dropdown-input/dropdown-input.component";
7
+ import * as i4 from "../ipa-form/file-upload/file-upload.component";
8
+ import * as i5 from "../ipa-form/recaptcha/recaptcha.component";
9
+ import * as i6 from "../ipa-form/text-input/text-input.component";
10
+ import * as i7 from "@angular/forms";
11
+ import * as i8 from "@angular/common";
12
+ export class GenerateFormComponent {
13
+ constructor(validationService) {
14
+ this.validationService = validationService;
15
+ this.recaptchaSize = 'normal';
16
+ this.lang = 'ar';
17
+ this.recaptchaType = 'image';
18
+ this.theme = 'light';
19
+ this.useGlobalDomain = true;
20
+ // file upload outputs
21
+ this.successUpload = new EventEmitter();
22
+ this.fileAdded = new EventEmitter();
23
+ this.fileDeleted = new EventEmitter();
24
+ }
25
+ ngOnInit() {
26
+ this.createForm();
27
+ }
28
+ get formControls() {
29
+ return this.generateForm.get('items');
30
+ }
31
+ getErrorMessage(formControlName) {
32
+ const formControl = this.generateForm.controls[formControlName];
33
+ this.errorMsg = this.validationService.getErrorMessage(formControl);
34
+ return this.errorMsg;
35
+ }
36
+ SuccessUpload(event) {
37
+ this.successUpload.emit(event);
38
+ }
39
+ FileAdded(file, formControlName) {
40
+ this.generateForm.controls[formControlName].patchValue(file);
41
+ this.fileAdded.emit(file);
42
+ }
43
+ FileDeleted(event, formControlName) {
44
+ this.generateForm.controls[formControlName].patchValue(null);
45
+ this.fileDeleted.emit(event);
46
+ }
47
+ createForm() {
48
+ this.form.columns.forEach((column) => {
49
+ if (column.type === 'checkbox') {
50
+ this.addCheckboxControl(column);
51
+ }
52
+ else {
53
+ this.generateForm.addControl(column.englishName, new FormControl(null, [
54
+ column.required ? Validators.required : Validators.nullValidator,
55
+ Validators.maxLength(column.size),
56
+ column.type === 'number'
57
+ ? Validators.min(1)
58
+ : Validators.nullValidator,
59
+ ]));
60
+ }
61
+ });
62
+ }
63
+ addCheckboxControl(column) {
64
+ let checkboxGroup = new FormArray(column.data.map((item) => {
65
+ return new FormGroup({
66
+ [column.valueField]: new FormControl(item[column.valueField]),
67
+ [column.textField]: new FormControl(item[column.textField]),
68
+ checkbox: new FormControl(false, Validators.required),
69
+ });
70
+ }));
71
+ this.generateForm.addControl(column.englishName, new FormControl(null, column.required ? Validators.required : Validators.nullValidator));
72
+ this.generateForm.addControl('items', checkboxGroup);
73
+ checkboxGroup.valueChanges.subscribe((value) => {
74
+ if (this.getCheckboxSelectedValues(value)) {
75
+ this.generateForm.controls[column.englishName].patchValue(value);
76
+ }
77
+ else {
78
+ this.generateForm.controls[column.englishName].patchValue(null);
79
+ this.generateForm.controls[column.englishName].markAsTouched();
80
+ }
81
+ });
82
+ }
83
+ getCheckboxSelectedValues(items) {
84
+ let selectedItems = items.filter((item) => item.checkbox);
85
+ return selectedItems.length > 0 ? selectedItems : null;
86
+ }
87
+ }
88
+ GenerateFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GenerateFormComponent, deps: [{ token: i1.IPAFormService }], target: i0.ɵɵFactoryTarget.Component });
89
+ GenerateFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: GenerateFormComponent, selector: "ipa-generate-form", inputs: { generateForm: "generateForm", form: "form", siteKey: "siteKey", recaptchaSize: "recaptchaSize", lang: "lang", recaptchaType: "recaptchaType", theme: "theme", useGlobalDomain: "useGlobalDomain" }, outputs: { successUpload: "successUpload", fileAdded: "fileAdded", fileDeleted: "fileDeleted" }, ngImport: i0, template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\"\r\n [label]=\"column.arabicLabel\" [required]=\"column.required\" [pattern]=\"column.validationPattern!\"\r\n [patternErrorMsg]=\"column.patternErrorMsg!\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\"></ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\"\r\n [label]=\"column.arabicLabel\" [items]=\"column.data!\" [valueField]=\"column.valueField!\"\r\n [textField]=\"column.textField!\" [required]=\"column.required\" [searchable]=\"column.searchable\"\r\n [notFoundText]=\"column.notFoundText\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\">\r\n <label [for]=\"column.englishName\">{{column.arabicLabel}}</label>\r\n <div [formArrayName]=\"'items'\" *ngFor=\"let control of formControls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [id]=\"column.englishName\">\r\n <div class=\"form-check\">\r\n <input [id]=\"column.englishName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.englishName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.englishName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\">\r\n <label [for]=\"column.englishName\">{{column.arabicLabel}}</label>\r\n <div *ngFor=\"let item of column.data; let i = index\" [id]=\"column.englishName\">\r\n <div class=\"form-check\">\r\n <input [id]=\"column.englishName+item[column.valueField!]\" class=\"form-check-input\" type=\"radio\"\r\n [formControlName]=\"column.englishName\" [value]=\"item[column.valueField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.englishName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.englishName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\">\r\n <ipa-file-upload [label]=\"column.arabicLabel\" [acceptedFiles]=\"column.acceptedFiles!\"\r\n [multiple]=\"column.multipleFile!\" [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\"\r\n [autoUpload]=\"column.autoUploadFile!\" [apiUrl]=\"column.apiUrl?? 'apiUrl' \"\r\n [authorization]=\"column.authorization!\" ngDefaultControl [formControlName]=\"column.englishName\"\r\n (successUpload)=\"SuccessUpload($event)\" (fileAdded)=\"FileAdded($event, column.englishName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.englishName)\"></ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"lang\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.englishName}}\"></ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\" [type]=\"column.type\"\r\n [label]=\"column.arabicLabel\" [required]=\"column.required\" [pattern]=\"column.validationPattern!\"\r\n [patternErrorMsg]=\"column.patternErrorMsg!\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\"></ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>", styles: [""], components: [{ type: i2.TextareaInputComponent, selector: "ipa-textarea-input", inputs: ["id", "placeholder", "label", "required", "patternErrorMsg", "pattern", "classes", "containerClasses"] }, { type: i3.DropdownInputComponent, selector: "ipa-dropdown-input", inputs: ["id", "label", "items", "textField", "valueField", "required", "searchable", "notFoundText", "classes", "containerClasses"] }, { type: i4.FileUploadComponent, selector: "ipa-file-upload", inputs: ["label", "required", "acceptedFiles", "multiple", "maxFileSize", "method", "autoUpload", "apiUrl", "authorization"], outputs: ["successUpload", "fileAdded", "fileDeleted"] }, { type: i5.RecaptchaComponent, selector: "ipa-recaptcha", inputs: ["siteKey", "recaptchaSize", "lang", "recaptchaType", "theme", "useGlobalDomain"] }, { type: i6.TextInputComponent, selector: "ipa-text-input", inputs: ["id", "type", "placeholder", "label", "required", "patternErrorMsg", "pattern", "classes", "containerClasses"] }], directives: [{ type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i7.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i7.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i7.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GenerateFormComponent, decorators: [{
91
+ type: Component,
92
+ args: [{ selector: 'ipa-generate-form', template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\"\r\n [label]=\"column.arabicLabel\" [required]=\"column.required\" [pattern]=\"column.validationPattern!\"\r\n [patternErrorMsg]=\"column.patternErrorMsg!\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\"></ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\"\r\n [label]=\"column.arabicLabel\" [items]=\"column.data!\" [valueField]=\"column.valueField!\"\r\n [textField]=\"column.textField!\" [required]=\"column.required\" [searchable]=\"column.searchable\"\r\n [notFoundText]=\"column.notFoundText\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\">\r\n <label [for]=\"column.englishName\">{{column.arabicLabel}}</label>\r\n <div [formArrayName]=\"'items'\" *ngFor=\"let control of formControls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [id]=\"column.englishName\">\r\n <div class=\"form-check\">\r\n <input [id]=\"column.englishName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.englishName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.englishName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\">\r\n <label [for]=\"column.englishName\">{{column.arabicLabel}}</label>\r\n <div *ngFor=\"let item of column.data; let i = index\" [id]=\"column.englishName\">\r\n <div class=\"form-check\">\r\n <input [id]=\"column.englishName+item[column.valueField!]\" class=\"form-check-input\" type=\"radio\"\r\n [formControlName]=\"column.englishName\" [value]=\"item[column.valueField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.englishName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.englishName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\">\r\n <ipa-file-upload [label]=\"column.arabicLabel\" [acceptedFiles]=\"column.acceptedFiles!\"\r\n [multiple]=\"column.multipleFile!\" [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\"\r\n [autoUpload]=\"column.autoUploadFile!\" [apiUrl]=\"column.apiUrl?? 'apiUrl' \"\r\n [authorization]=\"column.authorization!\" ngDefaultControl [formControlName]=\"column.englishName\"\r\n (successUpload)=\"SuccessUpload($event)\" (fileAdded)=\"FileAdded($event, column.englishName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.englishName)\"></ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"lang\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.englishName}}\"></ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.englishName\" [id]=\"column.englishName\" [type]=\"column.type\"\r\n [label]=\"column.arabicLabel\" [required]=\"column.required\" [pattern]=\"column.validationPattern!\"\r\n [patternErrorMsg]=\"column.patternErrorMsg!\" [classes]=\"column.inputClasses!\"\r\n [containerClasses]=\"column.containerClasses!\"></ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>", styles: [""] }]
93
+ }], ctorParameters: function () { return [{ type: i1.IPAFormService }]; }, propDecorators: { generateForm: [{
94
+ type: Input
95
+ }], form: [{
96
+ type: Input
97
+ }], siteKey: [{
98
+ type: Input
99
+ }], recaptchaSize: [{
100
+ type: Input
101
+ }], lang: [{
102
+ type: Input
103
+ }], recaptchaType: [{
104
+ type: Input
105
+ }], theme: [{
106
+ type: Input
107
+ }], useGlobalDomain: [{
108
+ type: Input
109
+ }], successUpload: [{
110
+ type: Output
111
+ }], fileAdded: [{
112
+ type: Output
113
+ }], fileDeleted: [{
114
+ type: Output
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVN4QixNQUFNLE9BQU8scUJBQXFCO0lBbUJoQyxZQUFvQixpQkFBaUM7UUFBakMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFnQjtRQWI1QyxrQkFBYSxHQUF5QixRQUFRLENBQUM7UUFDL0MsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGtCQUFhLEdBQXNCLE9BQU8sQ0FBQztRQUMzQyxVQUFLLEdBQXFCLE9BQU8sQ0FBQztRQUNsQyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUVoQyxzQkFBc0I7UUFDWixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBSWEsQ0FBQztJQUV6RCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBYyxDQUFDO0lBQ3JELENBQUM7SUFFRCxlQUFlLENBQUMsZUFBdUI7UUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQzVDLGVBQWUsQ0FDRCxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBUyxFQUFFLGVBQXVCO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVUsRUFBRSxlQUF1QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUMxQixNQUFNLENBQUMsV0FBVyxFQUNsQixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhO29CQUNoRSxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUM7b0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTt3QkFDdEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWE7aUJBQzdCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFjO1FBQ3ZDLElBQUksYUFBYSxHQUFHLElBQUksU0FBUyxDQUMvQixNQUFNLENBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxTQUFTLENBQUM7Z0JBQ25CLENBQUMsTUFBTSxDQUFDLFVBQVcsQ0FBQyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVyxDQUFDLENBQUM7Z0JBQy9ELENBQUMsTUFBTSxDQUFDLFNBQVUsQ0FBQyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUM7Z0JBQzdELFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUN0RCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQzFCLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLElBQUksV0FBVyxDQUNiLElBQUksRUFDSixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUNqRSxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckQsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDaEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFZO1FBQzVDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDOztrSEF0R1UscUJBQXFCO3NHQUFyQixxQkFBcUIsd1dDZmxDLGcwS0FzRk87MkZEdkVNLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7cUdBS3BCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElQQUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vaXBhLWZvcm0vaXBhLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbHVtbiwgR2VuZXJhdGVGb3JtIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlRm9ybS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lwYS1nZW5lcmF0ZS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBnZW5lcmF0ZUZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybSE6IEdlbmVyYXRlRm9ybTtcclxuXHJcbiAgLy8gcmVjYXB0Y2hhIGlucHV0c1xyXG4gIEBJbnB1dCgpIHNpdGVLZXkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmVjYXB0Y2hhU2l6ZTogJ2NvbXBhY3QnIHwgJ25vcm1hbCcgPSAnbm9ybWFsJztcclxuICBASW5wdXQoKSBsYW5nID0gJ2FyJztcclxuICBASW5wdXQoKSByZWNhcHRjaGFUeXBlOiAnaW1hZ2UnIHwgJ2F1ZGlvJyA9ICdpbWFnZSc7XHJcbiAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xyXG4gIEBJbnB1dCgpIHVzZUdsb2JhbERvbWFpbiA9IHRydWU7XHJcblxyXG4gIC8vIGZpbGUgdXBsb2FkIG91dHB1dHNcclxuICBAT3V0cHV0KCkgc3VjY2Vzc1VwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZUFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZXJyb3JNc2chOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBJUEFGb3JtU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICB9XHJcblxyXG4gIGdldCBmb3JtQ29udHJvbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm0uZ2V0KCdpdGVtcycpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZShmb3JtQ29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdlbmVyYXRlRm9ybS5jb250cm9sc1tcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lXHJcbiAgICBdIGFzIEZvcm1Db250cm9sO1xyXG4gICAgdGhpcy5lcnJvck1zZyA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGZvcm1Db250cm9sKTtcclxuICAgIHJldHVybiB0aGlzLmVycm9yTXNnO1xyXG4gIH1cclxuXHJcbiAgU3VjY2Vzc1VwbG9hZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnN1Y2Nlc3NVcGxvYWQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBGaWxlQWRkZWQoZmlsZTogYW55LCBmb3JtQ29udHJvbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXS5wYXRjaFZhbHVlKGZpbGUpO1xyXG4gICAgdGhpcy5maWxlQWRkZWQuZW1pdChmaWxlKTtcclxuICB9XHJcblxyXG4gIEZpbGVEZWxldGVkKGV2ZW50OiBhbnksIGZvcm1Db250cm9sTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdlbmVyYXRlRm9ybS5jb250cm9sc1tmb3JtQ29udHJvbE5hbWVdLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbGVEZWxldGVkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hDb250cm9sKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgICAgIGNvbHVtbi5lbmdsaXNoTmFtZSxcclxuICAgICAgICAgIG5ldyBGb3JtQ29udHJvbChudWxsLCBbXHJcbiAgICAgICAgICAgIGNvbHVtbi5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKGNvbHVtbi5zaXplISksXHJcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgID8gVmFsaWRhdG9ycy5taW4oMSlcclxuICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENoZWNrYm94Q29udHJvbChjb2x1bW46IENvbHVtbikge1xyXG4gICAgbGV0IGNoZWNrYm94R3JvdXAgPSBuZXcgRm9ybUFycmF5KFxyXG4gICAgICBjb2x1bW4uZGF0YSEubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgW2NvbHVtbi52YWx1ZUZpZWxkIV06IG5ldyBGb3JtQ29udHJvbChpdGVtW2NvbHVtbi52YWx1ZUZpZWxkIV0pLFxyXG4gICAgICAgICAgW2NvbHVtbi50ZXh0RmllbGQhXTogbmV3IEZvcm1Db250cm9sKGl0ZW1bY29sdW1uLnRleHRGaWVsZCFdKSxcclxuICAgICAgICAgIGNoZWNrYm94OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRlRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICBjb2x1bW4uZW5nbGlzaE5hbWUsXHJcbiAgICAgIG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIGNvbHVtbi5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3JcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVGb3JtLmFkZENvbnRyb2woJ2l0ZW1zJywgY2hlY2tib3hHcm91cCk7XHJcbiAgICBjaGVja2JveEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmdldENoZWNrYm94U2VsZWN0ZWRWYWx1ZXModmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmVuZ2xpc2hOYW1lXS5wYXRjaFZhbHVlKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRm9ybS5jb250cm9sc1tjb2x1bW4uZW5nbGlzaE5hbWVdLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmVuZ2xpc2hOYW1lXS5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGVja2JveFNlbGVjdGVkVmFsdWVzKGl0ZW1zOiBhbnlbXSkge1xyXG4gICAgbGV0IHNlbGVjdGVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tib3gpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdlbmVyYXRlRm9ybVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZvcm0uY29sdW1uc1wiPlxyXG4gICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVEVYVEFSRUEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0QXJlYSdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtdGV4dGFyZWEtaW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZW5nbGlzaE5hbWVcIiBbaWRdPVwiY29sdW1uLmVuZ2xpc2hOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmFyYWJpY0xhYmVsXCIgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiIFtwYXR0ZXJuXT1cImNvbHVtbi52YWxpZGF0aW9uUGF0dGVybiFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuRXJyb3JNc2ddPVwiY29sdW1uLnBhdHRlcm5FcnJvck1zZyFcIiBbY2xhc3Nlc109XCJjb2x1bW4uaW5wdXRDbGFzc2VzIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lckNsYXNzZXNdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXMhXCI+PC9pcGEtdGV4dGFyZWEtaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEUk9QIERPV04gTElTVCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtZHJvcGRvd24taW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZW5nbGlzaE5hbWVcIiBbaWRdPVwiY29sdW1uLmVuZ2xpc2hOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmFyYWJpY0xhYmVsXCIgW2l0ZW1zXT1cImNvbHVtbi5kYXRhIVwiIFt2YWx1ZUZpZWxkXT1cImNvbHVtbi52YWx1ZUZpZWxkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJjb2x1bW4udGV4dEZpZWxkIVwiIFtyZXF1aXJlZF09XCJjb2x1bW4ucmVxdWlyZWRcIiBbc2VhcmNoYWJsZV09XCJjb2x1bW4uc2VhcmNoYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25vdEZvdW5kVGV4dF09XCJjb2x1bW4ubm90Rm91bmRUZXh0XCIgW2NsYXNzZXNdPVwiY29sdW1uLmlucHV0Q2xhc3NlcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb250YWluZXJDbGFzc2VzXT1cImNvbHVtbi5jb250YWluZXJDbGFzc2VzIVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtZHJvcGRvd24taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29sdW1uLmVuZ2xpc2hOYW1lXCI+e3tjb2x1bW4uYXJhYmljTGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtQXJyYXlOYW1lXT1cIidpdGVtcydcIiAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBmb3JtQ29udHJvbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIiBbaWRdPVwiY29sdW1uLmVuZ2xpc2hOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cImNvbHVtbi5lbmdsaXNoTmFtZStjb250cm9sLnZhbHVlW2NvbHVtbi52YWx1ZUZpZWxkIV1cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbHVtbi5lbmdsaXNoTmFtZStjb250cm9sLnZhbHVlW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbnRyb2wudmFsdWVbY29sdW1uLnRleHRGaWVsZCFdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5lbmdsaXNoTmFtZSkgIT09IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2Vycm9yTXNnfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUkFESU8gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbHVtbi5lbmdsaXNoTmFtZVwiPnt7Y29sdW1uLmFyYWJpY0xhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb2x1bW4uZGF0YTsgbGV0IGkgPSBpbmRleFwiIFtpZF09XCJjb2x1bW4uZW5nbGlzaE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cImNvbHVtbi5lbmdsaXNoTmFtZStpdGVtW2NvbHVtbi52YWx1ZUZpZWxkIV1cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZW5nbGlzaE5hbWVcIiBbdmFsdWVdPVwiaXRlbVtjb2x1bW4udmFsdWVGaWVsZCFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImNvbHVtbi5lbmdsaXNoTmFtZStpdGVtW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2x1bW4udGV4dEZpZWxkIV19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5lbmdsaXNoTmFtZSkgIT09IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2Vycm9yTXNnfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRklMRSBVUExPQUQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlwYS1maWxlLXVwbG9hZCBbbGFiZWxdPVwiY29sdW1uLmFyYWJpY0xhYmVsXCIgW2FjY2VwdGVkRmlsZXNdPVwiY29sdW1uLmFjY2VwdGVkRmlsZXMhXCJcclxuICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlRmlsZSFcIiBbbWF4RmlsZVNpemVdPVwiY29sdW1uLnNpemUhXCIgW21ldGhvZF09XCJjb2x1bW4uYXBpVVJsTWV0aG9kIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9VcGxvYWRdPVwiY29sdW1uLmF1dG9VcGxvYWRGaWxlIVwiIFthcGlVcmxdPVwiY29sdW1uLmFwaVVybD8/ICdhcGlVcmwnIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F1dGhvcml6YXRpb25dPVwiY29sdW1uLmF1dGhvcml6YXRpb24hXCIgbmdEZWZhdWx0Q29udHJvbCBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5lbmdsaXNoTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHN1Y2Nlc3NVcGxvYWQpPVwiU3VjY2Vzc1VwbG9hZCgkZXZlbnQpXCIgKGZpbGVBZGRlZCk9XCJGaWxlQWRkZWQoJGV2ZW50LCBjb2x1bW4uZW5nbGlzaE5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZmlsZURlbGV0ZWQpPVwiRmlsZURlbGV0ZWQoJGV2ZW50LCBjb2x1bW4uZW5nbGlzaE5hbWUpXCI+PC9pcGEtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSByZWNhcHRjaGEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidyZWNhcHRjaGEnXCI+XHJcbiAgICAgICAgICAgICAgICA8aXBhLXJlY2FwdGNoYSBbcmVjYXB0Y2hhU2l6ZV09XCJyZWNhcHRjaGFTaXplXCIgW2xhbmddPVwibGFuZ1wiIFt0aGVtZV09XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlY2FwdGNoYVR5cGVdPVwicmVjYXB0Y2hhVHlwZVwiIFt1c2VHbG9iYWxEb21haW5dPVwidXNlR2xvYmFsRG9tYWluXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7e2NvbHVtbi5lbmdsaXNoTmFtZX19XCI+PC9pcGEtcmVjYXB0Y2hhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gREVGQVVMVCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGlwYS10ZXh0LWlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLmVuZ2xpc2hOYW1lXCIgW2lkXT1cImNvbHVtbi5lbmdsaXNoTmFtZVwiIFt0eXBlXT1cImNvbHVtbi50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmFyYWJpY0xhYmVsXCIgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiIFtwYXR0ZXJuXT1cImNvbHVtbi52YWxpZGF0aW9uUGF0dGVybiFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuRXJyb3JNc2ddPVwiY29sdW1uLnBhdHRlcm5FcnJvck1zZyFcIiBbY2xhc3Nlc109XCJjb2x1bW4uaW5wdXRDbGFzc2VzIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lckNsYXNzZXNdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXMhXCI+PC9pcGEtdGV4dC1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9mb3JtPiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { Component, Input, Self } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../ipa-form.service";
5
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "@angular/common";
8
+ export class DatepickerComponent {
9
+ constructor(ipaFormService, calendar, controlDir, config) {
10
+ this.ipaFormService = ipaFormService;
11
+ this.calendar = calendar;
12
+ this.controlDir = controlDir;
13
+ this.label = 'datepicker';
14
+ this.patternErrorMsg = 'invalid pattern';
15
+ this.required = false;
16
+ this.today = this.calendar.getToday();
17
+ this.formControl = new FormControl('');
18
+ this.controlDir.valueAccessor = this;
19
+ config.container = 'body';
20
+ }
21
+ ngOnInit() {
22
+ const control = this.controlDir.control;
23
+ const validators = control?.validator ? [control.validator] : [];
24
+ control?.setValidators(validators);
25
+ control?.updateValueAndValidity();
26
+ this.formControl = control;
27
+ }
28
+ onChange(event) { }
29
+ onTouched() { }
30
+ writeValue(obj) { }
31
+ registerOnChange(fn) {
32
+ this.onChange = fn;
33
+ }
34
+ registerOnTouched(fn) {
35
+ this.onTouched = fn;
36
+ }
37
+ get errorMessage() {
38
+ this.errorMsg = this.ipaFormService.getErrorMessage(this.formControl, this.patternErrorMsg);
39
+ return this.errorMsg;
40
+ }
41
+ }
42
+ DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DatepickerComponent, deps: [{ token: i1.IPAFormService }, { token: i2.NgbCalendar }, { token: i3.NgControl, self: true }, { token: i2.NgbInputDatepickerConfig }], target: i0.ɵɵFactoryTarget.Component });
43
+ DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DatepickerComponent, selector: "ipa-datepicker", inputs: { id: "id", label: "label", patternErrorMsg: "patternErrorMsg", required: "required", maxDate: "maxDate", minDate: "minDate", classes: "classes", containerClasses: "containerClasses" }, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\" title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"d.toggle()\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { 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]" }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DatepickerComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'ipa-datepicker', template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\" title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"d.toggle()\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
47
+ }], ctorParameters: function () { return [{ type: i1.IPAFormService }, { type: i2.NgbCalendar }, { type: i3.NgControl, decorators: [{
48
+ type: Self
49
+ }] }, { type: i2.NgbInputDatepickerConfig }]; }, propDecorators: { id: [{
50
+ type: Input
51
+ }], label: [{
52
+ type: Input
53
+ }], patternErrorMsg: [{
54
+ type: Input
55
+ }], required: [{
56
+ type: Input
57
+ }], maxDate: [{
58
+ type: Input
59
+ }], minDate: [{
60
+ type: Input
61
+ }], classes: [{
62
+ type: Input
63
+ }], containerClasses: [{
64
+ type: Input
65
+ }] } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2lwYS1mb3JtL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2lwYS1mb3JtL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFheEQsTUFBTSxPQUFPLG1CQUFtQjtJQWE5QixZQUNVLGNBQThCLEVBQzlCLFFBQXFCLEVBQ2QsVUFBcUIsRUFDcEMsTUFBZ0M7UUFIeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBZDdCLFVBQUssR0FBRyxZQUFZLENBQUM7UUFDckIsb0JBQWUsR0FBRyxpQkFBaUIsQ0FBQztRQUNwQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSzFCLFVBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQWdCLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBUzdDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNyQyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFakUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQXNCLENBQUM7SUFDNUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVLElBQVMsQ0FBQztJQUU3QixTQUFTLEtBQVUsQ0FBQztJQUNwQixVQUFVLENBQUMsR0FBUSxJQUFTLENBQUM7SUFFN0IsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDakQsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDOztnSEFuRFUsbUJBQW1CO29HQUFuQixtQkFBbUIsd1BDZGhDLGttREFvQk07MkZETk8sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjs7MEJBb0J2QixJQUFJO21GQWZFLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkNhbGVuZGFyLFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgTmdiSW5wdXREYXRlcGlja2VyQ29uZmlnLFxyXG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgSVBBRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9pcGEtZm9ybS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXBhLWRhdGVwaWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBpZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBsYWJlbCA9ICdkYXRlcGlja2VyJztcclxuICBASW5wdXQoKSBwYXR0ZXJuRXJyb3JNc2cgPSAnaW52YWxpZCBwYXR0ZXJuJztcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1heERhdGUhOiBOZ2JEYXRlU3RydWN0O1xyXG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBOZ2JEYXRlU3RydWN0O1xyXG4gIEBJbnB1dCgpIGNsYXNzZXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3NlcyE6IHN0cmluZztcclxuICB0b2RheSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIGVycm9yTXNnITogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGlwYUZvcm1TZXJ2aWNlOiBJUEFGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLFxyXG4gICAgQFNlbGYoKSBwdWJsaWMgY29udHJvbERpcjogTmdDb250cm9sLFxyXG4gICAgY29uZmlnOiBOZ2JJbnB1dERhdGVwaWNrZXJDb25maWdcclxuICApIHtcclxuICAgIHRoaXMuY29udHJvbERpci52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIGNvbmZpZy5jb250YWluZXIgPSAnYm9keSc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xEaXIuY29udHJvbDtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBjb250cm9sPy52YWxpZGF0b3IgPyBbY29udHJvbC52YWxpZGF0b3JdIDogW107XHJcblxyXG4gICAgY29udHJvbD8uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgIGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBjb250cm9sIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge31cclxuXHJcbiAgb25Ub3VjaGVkKCk6IHZvaWQge31cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7fVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgdGhpcy5lcnJvck1zZyA9IHRoaXMuaXBhRm9ybVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLnBhdHRlcm5FcnJvck1zZ1xyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmVycm9yTXNnO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1mbG9hdGluZyBpbnB1dC1ncm91cCB7e2NvbnRhaW5lckNsYXNzZXN9fVwiPlxyXG4gICAgPGlucHV0IGlkPVwie3tpZH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQgaXMtaW52YWxpZDpmb2N1cyc6IChjb250cm9sRGlyLmNvbnRyb2w/LmludmFsaWQgJiYgKGNvbnRyb2xEaXIuY29udHJvbD8uZGlydHkgfHwgY29udHJvbERpci5jb250cm9sPy50b3VjaGVkKSkgJiYgZXJyb3JNc2csJ2lzLXZhbGlkIGlzLXZhbGlkOmZvY3VzJzogKGNvbnRyb2xEaXIuY29udHJvbD8udmFsaWQgJiYgKGNvbnRyb2xEaXIuY29udHJvbD8uZGlydHkgfHwgY29udHJvbERpci5jb250cm9sPy50b3VjaGVkKSAgJiYgKGVycm9yTXNnIHx8IGNvbnRyb2xEaXIudmFsdWUpKX1cIlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHt7Y2xhc3Nlc319XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW2ZpcnN0RGF5T2ZXZWVrXT1cIjdcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCIgW21heERhdGVdPVwibWF4RGF0ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIHN0eWxlPVwib3V0bGluZTogdW5zZXQ7IHotaW5kZXg6IHVuc2V0ICFpbXBvcnRhbnQ7XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGJsdXIpPVwib25Ub3VjaGVkKClcIiB0aXRsZT1cInt7bGFiZWx9fVwiPlxyXG4gICAgPGxhYmVsIGZvcj1cInt7aWR9fVwiPnt7bGFiZWx9fTwvbGFiZWw+XHJcbiAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgY2FsZW5kZXJCdG5cIiAoY2xpY2spPVwiZC50b2dnbGUoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvaT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2UgIT09IG51bGxcIj5cclxuICAgICAgICB7e2Vycm9yTXNnfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZSBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICA8aHI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG0tMiBcIiBzdHlsZT1cIndpZHRoOiBhdXRvOyBmbG9hdDogcmlnaHQ7XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1Db250cm9sLnBhdGNoVmFsdWUodG9kYXkpO2QubmF2aWdhdGVUbyh0b2RheSk7XCI+2KfZhNmK2YjZhTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIG0tMlwiIHN0eWxlPVwid2lkdGg6IGF1dG87IGZsb2F0OiBsZWZ0O1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJmb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwpO2QuY2xvc2UoKVwiPtmF2LPYrTwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+Il19
@@ -0,0 +1,23 @@
1
+ import { Component } from '@angular/core';
2
+ import { NgbCalendar, NgbCalendarGregorian, NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
3
+ import { DatepickerComponent } from '../datepicker.component';
4
+ import { Gregorian18n } from './gregorian18n';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@angular/common";
9
+ export class GregorianDatepickerComponent extends DatepickerComponent {
10
+ }
11
+ GregorianDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GregorianDatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ GregorianDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: GregorianDatepickerComponent, selector: "ipa-gregorian-datepicker", providers: [
13
+ { provide: NgbCalendar, useClass: NgbCalendarGregorian },
14
+ { provide: NgbDatepickerI18n, useClass: Gregorian18n },
15
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\" title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"d.toggle()\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GregorianDatepickerComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'ipa-gregorian-datepicker', providers: [
19
+ { provide: NgbCalendar, useClass: NgbCalendarGregorian },
20
+ { provide: NgbDatepickerI18n, useClass: Gregorian18n },
21
+ ], template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\" title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"d.toggle()\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlZ29yaWFuLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctaXBhLWxpYnJhcnkvc3JjL2xpYi9pcGEtZm9ybS9kYXRlcGlja2VyL2dyZWdvcmlhbi1kYXRlcGlja2VyL2dyZWdvcmlhbi1kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWlwYS1saWJyYXJ5L3NyYy9saWIvaXBhLWZvcm0vZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFXOUMsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjs7eUhBQXhELDRCQUE0Qjs2R0FBNUIsNEJBQTRCLG1EQUw1QjtRQUNULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUM7UUFDdkQsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRTtLQUN2RCxpRENaSCxrbURBb0JNOzJGRE5PLDRCQUE0QjtrQkFUeEMsU0FBUzsrQkFDRSwwQkFBMEIsYUFHekI7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBQzt3QkFDdkQsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRTtxQkFDdkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQ2FsZW5kYXIsIE5nYkNhbGVuZGFyR3JlZ29yaWFuLCBOZ2JEYXRlcGlja2VySTE4biB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGVwaWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JlZ29yaWFuMThuIH0gZnJvbSAnLi9ncmVnb3JpYW4xOG4nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpcGEtZ3JlZ29yaWFuLWRhdGVwaWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4uL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogTmdiQ2FsZW5kYXIsIHVzZUNsYXNzOiBOZ2JDYWxlbmRhckdyZWdvcmlhbn0sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogR3JlZ29yaWFuMThuIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyZWdvcmlhbkRhdGVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBEYXRlcGlja2VyQ29tcG9uZW50IHt9XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWZsb2F0aW5nIGlucHV0LWdyb3VwIHt7Y29udGFpbmVyQ2xhc3Nlc319XCI+XHJcbiAgICA8aW5wdXQgaWQ9XCJ7e2lkfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCBpcy1pbnZhbGlkOmZvY3VzJzogKGNvbnRyb2xEaXIuY29udHJvbD8uaW52YWxpZCAmJiAoY29udHJvbERpci5jb250cm9sPy5kaXJ0eSB8fCBjb250cm9sRGlyLmNvbnRyb2w/LnRvdWNoZWQpKSAmJiBlcnJvck1zZywnaXMtdmFsaWQgaXMtdmFsaWQ6Zm9jdXMnOiAoY29udHJvbERpci5jb250cm9sPy52YWxpZCAmJiAoY29udHJvbERpci5jb250cm9sPy5kaXJ0eSB8fCBjb250cm9sRGlyLmNvbnRyb2w/LnRvdWNoZWQpICAmJiAoZXJyb3JNc2cgfHwgY29udHJvbERpci52YWx1ZSkpfVwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tjbGFzc2VzfX1cIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbZmlyc3REYXlPZldlZWtdPVwiN1wiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAjZD1cIm5nYkRhdGVwaWNrZXJcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgc3R5bGU9XCJvdXRsaW5lOiB1bnNldDsgei1pbmRleDogdW5zZXQgIWltcG9ydGFudDtcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoYmx1cik9XCJvblRvdWNoZWQoKVwiIHRpdGxlPVwie3tsYWJlbH19XCI+XHJcbiAgICA8bGFiZWwgZm9yPVwie3tpZH19XCI+e3tsYWJlbH19PC9sYWJlbD5cclxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBjYWxlbmRlckJ0blwiIChjbGljayk9XCJkLnRvZ2dsZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yTWVzc2FnZSAhPT0gbnVsbFwiPlxyXG4gICAgICAgIHt7ZXJyb3JNc2d9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgIDxocj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbS0yIFwiIHN0eWxlPVwid2lkdGg6IGF1dG87IGZsb2F0OiByaWdodDtcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh0b2RheSk7ZC5uYXZpZ2F0ZVRvKHRvZGF5KTtcIj7Yp9mE2YrZiNmFPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc20gbS0yXCIgc3R5bGU9XCJ3aWR0aDogYXV0bzsgZmxvYXQ6IGxlZnQ7XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1Db250cm9sLnBhdGNoVmFsdWUobnVsbCk7ZC5jbG9zZSgpXCI+2YXYs9itPC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=