bpm-core 0.0.24 → 0.0.26

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 (34) hide show
  1. package/esm2022/lib/app/app.component.mjs +4 -4
  2. package/esm2022/lib/components/app-component-sections/activities/activities.component.mjs +20 -34
  3. package/esm2022/lib/components/app-component-sections/approvals/approvals.component.mjs +26 -0
  4. package/esm2022/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.mjs +98 -0
  5. package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +15 -13
  6. package/esm2022/lib/components/shared-components/action-buttons/action-buttons.component.mjs +93 -11
  7. package/esm2022/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.mjs +12 -17
  8. package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +9 -11
  9. package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +3 -5
  10. package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +9 -42
  11. package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +42 -0
  12. package/esm2022/lib/constants/constants.mjs +3 -1
  13. package/esm2022/lib/environments/environment.local.mjs +2 -2
  14. package/esm2022/lib/services/core.service.ts.mjs +304 -295
  15. package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +72 -27
  16. package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +33 -11
  17. package/fesm2022/bpm-core.mjs +774 -668
  18. package/fesm2022/bpm-core.mjs.map +1 -1
  19. package/lib/components/app-component-sections/activities/activities.component.d.ts +5 -14
  20. package/lib/components/app-component-sections/approvals/approvals.component.d.ts +11 -0
  21. package/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.d.ts +20 -0
  22. package/lib/components/app-component-sections/form-section/form-section.component.d.ts +1 -1
  23. package/lib/components/app-component-sections/service-header/service-header.component.d.ts +4 -3
  24. package/lib/components/shared-components/action-buttons/action-buttons.component.d.ts +27 -6
  25. package/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.d.ts +4 -4
  26. package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +3 -2
  27. package/lib/components/shared-components/form-field/input/input.component.d.ts +1 -4
  28. package/lib/components/shared-components/form-field/validation-errors/validation-errors.component.d.ts +16 -0
  29. package/lib/constants/constants.d.ts +2 -0
  30. package/lib/services/core.service.ts.d.ts +34 -1
  31. package/lib/testComponent/general-approver-section/general-approver-section.component.d.ts +21 -13
  32. package/lib/testComponent/request-details-section/request-details-section.component.d.ts +14 -6
  33. package/package.json +1 -1
  34. package/src/lib/assets/scss/_upgrade.scss +3 -3
@@ -1,52 +1,97 @@
1
1
  import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, NO_ERRORS_SCHEMA } from '@angular/core';
2
- import { NgClass } from "@angular/common";
2
+ import { NgClass, NgForOf, NgIf } from "@angular/common";
3
+ import { ActionButtonsComponent } from "../../components/shared-components";
4
+ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms";
5
+ import { CustomSearchableComponent, InputComponent } from '../../components/shared-components';
6
+ import { ValidationErrorsComponent } from '../../components/shared-components/form-field/validation-errors/validation-errors.component';
3
7
  import * as i0 from "@angular/core";
4
- import * as i1 from "../services/i18n.service";
5
- import * as i2 from "../services/state-machine.service";
8
+ import * as i1 from "../../services";
9
+ import * as i2 from "@angular/forms";
6
10
  export class GeneralApproverSectionComponent {
7
11
  i18n;
8
- StateMachineService;
12
+ fb;
13
+ actionStateService;
9
14
  isReadOnly;
10
15
  section;
16
+ form;
11
17
  lov;
12
18
  className = "info-section";
13
- currentSectionId;
14
- lastSectionId;
15
- form;
16
- constructor(i18n,
17
- // public profileRequestorService: ProfileRequestorService,
18
- StateMachineService) {
19
+ fieldsForm;
20
+ numbers = [...Array(100).keys()].map(i => i + 1);
21
+ formGroup = new FormGroup({
22
+ name: new FormControl('', [Validators.required, Validators.maxLength(3), Validators.minLength(2)]),
23
+ countries: new FormControl('', Validators.required),
24
+ });
25
+ constructor(i18n, fb, actionStateService) {
19
26
  this.i18n = i18n;
20
- this.StateMachineService = StateMachineService;
27
+ this.fb = fb;
28
+ this.actionStateService = actionStateService;
29
+ }
30
+ ngOnInit() {
31
+ this.createForm();
21
32
  }
22
- ngAfterViewInit() {
23
- this.ServicesSubScriptions();
33
+ createForm() {
34
+ let newForm = {
35
+ input1: ['', Validators.required]
36
+ };
37
+ this.lov?.['decision']?.options?.forEach(option => {
38
+ newForm[option.value] = [''];
39
+ });
40
+ this.fieldsForm = this.fb.group(newForm);
41
+ const checkValidityAndUpdate = () => {
42
+ this.lov?.['decision']?.options?.forEach(option => {
43
+ let isActionValid = this.checkValidity(option.value);
44
+ this.actionStateService.setActionValid(option.value, isActionValid);
45
+ this.section.body.details = this.fieldsForm.value;
46
+ });
47
+ };
48
+ checkValidityAndUpdate();
49
+ this.fieldsForm.valueChanges.subscribe(() => {
50
+ checkValidityAndUpdate();
51
+ });
24
52
  }
25
- ServicesSubScriptions() {
26
- /* this.profileRequestorService.getForm().subscribe(data => {
27
- this.form = data;
28
- this.lastSectionId = this.form.sections[this.form.sections.length - 1].id;
29
- this.currentSectionId = this.section.id;
30
- });*/
53
+ checkValidity(action) {
54
+ switch (action) {
55
+ case 'APPROVE':
56
+ return true;
57
+ case 'REJECT':
58
+ return this.fieldsForm.valid;
59
+ case 'SENDBACK':
60
+ return this.fieldsForm.valid;
61
+ default:
62
+ return false;
63
+ }
31
64
  }
32
- handleEmitValue(data, fieldName) {
33
- this.section.body.details[fieldName] = data;
65
+ customCallSubmit(action) {
66
+ console.log('customCallSubmit', action);
34
67
  }
35
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GeneralApproverSectionComponent, deps: [{ token: i1.I18nService }, { token: i2.StateMachineService }], target: i0.ɵɵFactoryTarget.Component });
36
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: GeneralApproverSectionComponent, isStandalone: true, selector: "app-general-approver-section", inputs: { isReadOnly: "isReadOnly", section: "section", lov: "lov", className: "className" }, ngImport: i0, template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n General Approval working fine\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n\r\n</div>\r\n\r\n\r\n<!--<div class=\"mt-4\" *ngIf=\"!section?.header?.readOnly\">\r\n\r\n <div class=\"d-flex align-items-center gap-3\" *ngIf=\"lov?.decision?.type === 'button'\">\r\n <ds-button shape=\"text\" color=\"red\" (click)=\"resetForm()\">\r\n <span class=\"fs-16 fw-medium\">{{i18n.translate('reset')}}</span>\r\n </ds-button>\r\n <div class=\"d-flex flex-wrap align-items-center flex-grow-1 flex-row-reverse gap-3\">\r\n <ng-container *ngFor=\"let item of lov?.decision?.options\">\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'SUBMIT'\">{{item?.description}}</ds-button>\r\n\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'APPROVE'\">{{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" color=\"red\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\" *ngIf=\"item?.value === 'REJECT'\">\r\n {{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" color=\"red\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\" *ngIf=\"item?.value === 'CANCEL'\">\r\n {{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'SENDBACK'\">\r\n {{item?.description}}</ds-button>\r\n\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"!(item?.value === 'SUBMIT' || item?.value === 'APPROVE' || item?.value === 'SENDBACK' || item?.value === 'REJECT' || item?.value === 'CANCEL')\">{{item?.description}}</ds-button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex flex-wrap align-items-center flex-grow-1 justify-content-end gap-3\"\r\n *ngIf=\"lov?.decision?.type !== 'button'\">\r\n <ds-button shape=\"text\" color=\"red\" (click)=\"resetForm()\">\r\n <span class=\"fs-16 fw-medium\">{{i18n.translate('reset')}}</span>\r\n </ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm('SUBMIT')}\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n (click)=\"onSubmit('SUBMIT') || profileRequestorService.disableButtons\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n </div>\r\n</div>-->\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
68
+ resetForm() {
69
+ this.fieldsForm.reset();
70
+ }
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GeneralApproverSectionComponent, deps: [{ token: i1.CoreI18nService }, { token: i2.FormBuilder }, { token: i1.ActionStateService }], target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: GeneralApproverSectionComponent, isStandalone: true, selector: "app-general-approver-section", inputs: { isReadOnly: "isReadOnly", section: "section", form: "form", lov: "lov", className: "className" }, ngImport: i0, template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\"></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n [section]=\"section\"\r\n [form]=\"form\"\r\n [sections]=\"form.sections\"\r\n [showApprovalCycle]=\"true\"\r\n [customCall]=\"false\"\r\n [fieldsForm]=\"fieldsForm\"\r\n (customCallEmit)=\"customCallSubmit($event)\"\r\n (resetFormEmit)=\"resetForm()\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["label", "hasTooltip", "tooltip", "floatLabel", "className", "showLabel", "iconPrefixName", "matSuffix", "iconSuffixName", "emitedChangedValue1"] }, { kind: "component", type: ActionButtonsComponent, selector: "lib-action-buttons", inputs: ["lovOptions", "lovType", "fieldsForm", "form", "section", "sections", "showApprovalCycle", "customCall"], outputs: ["resetFormEmit", "customCallEmit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
37
73
  }
38
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GeneralApproverSectionComponent, decorators: [{
39
75
  type: Component,
40
76
  args: [{ selector: 'app-general-approver-section', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], imports: [
41
- NgClass
42
- ], template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n General Approval working fine\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n\r\n</div>\r\n\r\n\r\n<!--<div class=\"mt-4\" *ngIf=\"!section?.header?.readOnly\">\r\n\r\n <div class=\"d-flex align-items-center gap-3\" *ngIf=\"lov?.decision?.type === 'button'\">\r\n <ds-button shape=\"text\" color=\"red\" (click)=\"resetForm()\">\r\n <span class=\"fs-16 fw-medium\">{{i18n.translate('reset')}}</span>\r\n </ds-button>\r\n <div class=\"d-flex flex-wrap align-items-center flex-grow-1 flex-row-reverse gap-3\">\r\n <ng-container *ngFor=\"let item of lov?.decision?.options\">\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'SUBMIT'\">{{item?.description}}</ds-button>\r\n\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'APPROVE'\">{{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" color=\"red\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\" *ngIf=\"item?.value === 'REJECT'\">\r\n {{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" color=\"red\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\" *ngIf=\"item?.value === 'CANCEL'\">\r\n {{item?.description}}</ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value)\" shape=\"outline\" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"item?.value === 'SENDBACK'\">\r\n {{item?.description}}</ds-button>\r\n\r\n <ds-button [ngClass]=\"{'disabled':!validForm(item?.value) || profileRequestorService.disableButtons}\"\r\n (click)=\"onSubmit(item?.value) \" [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n *ngIf=\"!(item?.value === 'SUBMIT' || item?.value === 'APPROVE' || item?.value === 'SENDBACK' || item?.value === 'REJECT' || item?.value === 'CANCEL')\">{{item?.description}}</ds-button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex flex-wrap align-items-center flex-grow-1 justify-content-end gap-3\"\r\n *ngIf=\"lov?.decision?.type !== 'button'\">\r\n <ds-button shape=\"text\" color=\"red\" (click)=\"resetForm()\">\r\n <span class=\"fs-16 fw-medium\">{{i18n.translate('reset')}}</span>\r\n </ds-button>\r\n <ds-button [ngClass]=\"{'disabled':!validForm('SUBMIT')}\"\r\n [loading]=\"profileRequestorService.isSubmitting[item?.value]\"\r\n (click)=\"onSubmit('SUBMIT') || profileRequestorService.disableButtons\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n </div>\r\n</div>-->\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"] }]
43
- }], ctorParameters: () => [{ type: i1.I18nService }, { type: i2.StateMachineService }], propDecorators: { isReadOnly: [{
77
+ NgClass,
78
+ InputComponent,
79
+ NgIf,
80
+ NgForOf,
81
+ ActionButtonsComponent,
82
+ ReactiveFormsModule,
83
+ ValidationErrorsComponent,
84
+ CustomSearchableComponent
85
+ ], template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\"></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n [section]=\"section\"\r\n [form]=\"form\"\r\n [sections]=\"form.sections\"\r\n [showApprovalCycle]=\"true\"\r\n [customCall]=\"false\"\r\n [fieldsForm]=\"fieldsForm\"\r\n (customCallEmit)=\"customCallSubmit($event)\"\r\n (resetFormEmit)=\"resetForm()\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"] }]
86
+ }], ctorParameters: () => [{ type: i1.CoreI18nService }, { type: i2.FormBuilder }, { type: i1.ActionStateService }], propDecorators: { isReadOnly: [{
44
87
  type: Input
45
88
  }], section: [{
46
89
  type: Input
90
+ }], form: [{
91
+ type: Input
47
92
  }], lov: [{
48
93
  type: Input
49
94
  }], className: [{
50
95
  type: Input
51
96
  }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9nZW5lcmFsLWFwcHJvdmVyLXNlY3Rpb24vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9nZW5lcmFsLWFwcHJvdmVyLXNlY3Rpb24vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpGLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVl4QyxNQUFNLE9BQU8sK0JBQStCO0lBWXZCO0lBRUE7SUFaVixVQUFVLENBQVU7SUFDcEIsT0FBTyxDQUFVO0lBQ2pCLEdBQUcsQ0FBTTtJQUNULFNBQVMsR0FBVyxjQUFjLENBQUM7SUFHNUMsZ0JBQWdCLENBQVM7SUFDekIsYUFBYSxDQUFTO0lBQ3RCLElBQUksQ0FBTztJQUVYLFlBQW1CLElBQWlCO0lBQ3hCLDJEQUEyRDtJQUNwRCxtQkFBd0M7UUFGeEMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUVqQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBSTNELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLHFCQUFxQjtRQUM5Qjs7OztpQkFJUztJQUNQLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUyxFQUFFLFNBQWlCO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDOUMsQ0FBQzt1R0FsQ1UsK0JBQStCOzJGQUEvQiwrQkFBK0Isc0xDaEI1QywyaEhBNkRBLG95QkRoREksT0FBTzs7MkZBR0UsK0JBQStCO2tCQVYzQyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLFdBQ1AsQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxXQUMxQzt3QkFDUCxPQUFPO3FCQUNSO2tIQUlRLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIElucHV0LCBOT19FUlJPUlNfU0NIRU1BfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJMThuU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvaTE4bi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdGF0ZU1hY2hpbmVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS1tYWNoaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zvcm0sIFNlY3Rpb259IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7TmdDbGFzc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmFsLWFwcHJvdmVyLXNlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOT19FUlJPUlNfU0NIRU1BXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ0NsYXNzXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEFwcHJvdmVyU2VjdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGlzUmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VjdGlvbjogU2VjdGlvbjtcclxuICBASW5wdXQoKSBsb3Y6IGFueTtcclxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFwiaW5mby1zZWN0aW9uXCI7XHJcblxyXG5cclxuICBjdXJyZW50U2VjdGlvbklkOiBzdHJpbmc7XHJcbiAgbGFzdFNlY3Rpb25JZDogc3RyaW5nO1xyXG4gIGZvcm06IEZvcm07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuOiBJMThuU2VydmljZSxcclxuICAgICAgICAgICAgICAvLyBwdWJsaWMgcHJvZmlsZVJlcXVlc3RvclNlcnZpY2U6IFByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBTdGF0ZU1hY2hpbmVTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIC8vIHB1YmxpYyBfbGlzdGVuZXJTZXJ2aWNlOiBMaXN0ZW5lclNlcnZpY2UsXHJcbiAgKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5TZXJ2aWNlc1N1YlNjcmlwdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZXJ2aWNlc1N1YlNjcmlwdGlvbnMoKSB7XHJcbi8qICAgIHRoaXMucHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuZ2V0Rm9ybSgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5mb3JtID0gZGF0YTtcclxuICAgICAgdGhpcy5sYXN0U2VjdGlvbklkID0gdGhpcy5mb3JtLnNlY3Rpb25zW3RoaXMuZm9ybS5zZWN0aW9ucy5sZW5ndGggLSAxXS5pZDtcclxuICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbklkID0gdGhpcy5zZWN0aW9uLmlkO1xyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIGhhbmRsZUVtaXRWYWx1ZShkYXRhOiBhbnksIGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlY3Rpb24uYm9keS5kZXRhaWxzW2ZpZWxkTmFtZV0gPSBkYXRhO1xyXG4gIH1cclxuXHJcblxyXG4vKiAgdmFsaWRGb3JtKGFjdGlvbikge1xyXG4gICAgbGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGxhc3RTZWN0aW9uID0gdGhpcy5zZWN0aW9uLmJvZHkuZGV0YWlsc1xyXG4gICAgbGV0IGNvbW1lbnRWYWxpZDtcclxuICAgIGlmIChsYXN0U2VjdGlvbi5jb21tZW50ICYmIGxhc3RTZWN0aW9uLmNvbW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbGFzdFNlY3Rpb24uY29tbWVudC5sZW5ndGggPj0gMSAmJlxyXG4gICAgICAgIGxhc3RTZWN0aW9uLmNvbW1lbnQubGVuZ3RoIDw9IDIwMDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29tbWVudFZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tZW50VmFsaWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tbWVudFZhbGlkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ1NVQk1JVCc6XHJcbiAgICAgICAgLy8gaWYgKGxhc3RTZWN0aW9uSWQgPT0gJ3JlcXVlc3REZXRhaWxzJykge1xyXG4gICAgICAgIC8vICAgLyEqIGVtcHR5ICohL1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0FQUFJPVkUnOlxyXG4gICAgICAgIGlmIChjb21tZW50VmFsaWQpIHtcclxuICAgICAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1JFSkVDVCc6XHJcbiAgICAgICAgaWYgKGxhc3RTZWN0aW9uLmNvbW1lbnQgJiYgY29tbWVudFZhbGlkKSB7XHJcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdTRU5EQkFDSyc6XHJcbiAgICAgICAgaWYgKGxhc3RTZWN0aW9uLmNvbW1lbnQgJiYgY29tbWVudFZhbGlkKSB7XHJcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdTQVZFX0NIQU5HRVMnOlxyXG4gICAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQ0FOQ0VMJzpcclxuICAgICAgICBpZiAobGFzdFNlY3Rpb24uY29tbWVudCAmJiBjb21tZW50VmFsaWQpIHtcclxuICAgICAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1NFTkRUT0RPJzpcclxuICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KGFjdGlvbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy52YWxpZEZvcm0oYWN0aW9uKSkge1xyXG4gICAgICB0aGlzLnByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmRpc2FibGVCdXR0b25zID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wcm9maWxlUmVxdWVzdG9yU2VydmljZS5pc1N1Ym1pdHRpbmdbYWN0aW9uXSA9IHRydWU7XHJcbiAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICBmdW5jdGlvbjogJ29uU3VibWl0JyxcclxuICAgICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgICAgICBkYXRhOiB0aGlzLnNlY3Rpb25cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbGlzdGVuZXJTZXJ2aWNlLmZpbHRlcihvYmopO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKCkge1xyXG4gICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICBmdW5jdGlvbjogJ3Jlc2V0Rm9ybSdcclxuICAgIH07XHJcbiAgICB0aGlzLl9saXN0ZW5lclNlcnZpY2UuZmlsdGVyKG9iaik7XHJcbiAgfSovXHJcbn1cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cInsnZm9ybS1zZWN0aW9uLWRpdmlkZSBmb3JtLXNlY3Rpb24nOiFzZWN0aW9uPy5oZWFkZXI/LnJlYWRPbmx5LCdpbmZvLXNlY3Rpb24nOnNlY3Rpb24/LmhlYWRlcj8ucmVhZE9ubHl9XCI+XHJcbiAgPGRzLWFsZXJ0IGNsYXNzPVwiZnVsbFwiIHR5cGU9XCJ3YXJuaW5nXCIgaWNvbj1cImluZm9cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgIEdlbmVyYWwgQXBwcm92YWwgd29ya2luZyBmaW5lXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kcy1hbGVydD5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcblxyXG48IS0tPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cIiFzZWN0aW9uPy5oZWFkZXI/LnJlYWRPbmx5XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCIgKm5nSWY9XCJsb3Y/LmRlY2lzaW9uPy50eXBlID09PSAnYnV0dG9uJ1wiPlxyXG4gICAgPGRzLWJ1dHRvbiBzaGFwZT1cInRleHRcIiBjb2xvcj1cInJlZFwiIChjbGljayk9XCJyZXNldEZvcm0oKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZzLTE2IGZ3LW1lZGl1bVwiPnt7aTE4bi50cmFuc2xhdGUoJ3Jlc2V0Jyl9fTwvc3Bhbj5cclxuICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtZ3Jvdy0xIGZsZXgtcm93LXJldmVyc2UgZ2FwLTNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsb3Y/LmRlY2lzaW9uPy5vcHRpb25zXCI+XHJcbiAgICAgICAgPGRzLWJ1dHRvbiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzohdmFsaWRGb3JtKGl0ZW0/LnZhbHVlKSB8fCBwcm9maWxlUmVxdWVzdG9yU2VydmljZS5kaXNhYmxlQnV0dG9uc31cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KGl0ZW0/LnZhbHVlKSBcIiBbbG9hZGluZ109XCJwcm9maWxlUmVxdWVzdG9yU2VydmljZS5pc1N1Ym1pdHRpbmdbaXRlbT8udmFsdWVdXCJcclxuICAgICAgICAgICpuZ0lmPVwiaXRlbT8udmFsdWUgPT09ICdTVUJNSVQnXCI+e3tpdGVtPy5kZXNjcmlwdGlvbn19PC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgIDxkcy1idXR0b24gW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IXZhbGlkRm9ybShpdGVtPy52YWx1ZSkgfHwgcHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuZGlzYWJsZUJ1dHRvbnN9XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdChpdGVtPy52YWx1ZSkgXCIgW2xvYWRpbmddPVwicHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuaXNTdWJtaXR0aW5nW2l0ZW0/LnZhbHVlXVwiXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0/LnZhbHVlID09PSAnQVBQUk9WRSdcIj57e2l0ZW0/LmRlc2NyaXB0aW9ufX08L2RzLWJ1dHRvbj5cclxuICAgICAgICA8ZHMtYnV0dG9uIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiF2YWxpZEZvcm0oaXRlbT8udmFsdWUpIHx8IHByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmRpc2FibGVCdXR0b25zfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoaXRlbT8udmFsdWUpXCIgc2hhcGU9XCJvdXRsaW5lXCIgY29sb3I9XCJyZWRcIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwicHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuaXNTdWJtaXR0aW5nW2l0ZW0/LnZhbHVlXVwiICpuZ0lmPVwiaXRlbT8udmFsdWUgPT09ICdSRUpFQ1QnXCI+XHJcbiAgICAgICAgICB7e2l0ZW0/LmRlc2NyaXB0aW9ufX08L2RzLWJ1dHRvbj5cclxuICAgICAgICA8ZHMtYnV0dG9uIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiF2YWxpZEZvcm0oaXRlbT8udmFsdWUpIHx8IHByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmRpc2FibGVCdXR0b25zfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoaXRlbT8udmFsdWUpXCIgc2hhcGU9XCJvdXRsaW5lXCIgY29sb3I9XCJyZWRcIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwicHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuaXNTdWJtaXR0aW5nW2l0ZW0/LnZhbHVlXVwiICpuZ0lmPVwiaXRlbT8udmFsdWUgPT09ICdDQU5DRUwnXCI+XHJcbiAgICAgICAgICB7e2l0ZW0/LmRlc2NyaXB0aW9ufX08L2RzLWJ1dHRvbj5cclxuICAgICAgICA8ZHMtYnV0dG9uIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiF2YWxpZEZvcm0oaXRlbT8udmFsdWUpIHx8IHByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmRpc2FibGVCdXR0b25zfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoaXRlbT8udmFsdWUpXCIgc2hhcGU9XCJvdXRsaW5lXCIgW2xvYWRpbmddPVwicHJvZmlsZVJlcXVlc3RvclNlcnZpY2UuaXNTdWJtaXR0aW5nW2l0ZW0/LnZhbHVlXVwiXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0/LnZhbHVlID09PSAnU0VOREJBQ0snXCI+XHJcbiAgICAgICAgICB7e2l0ZW0/LmRlc2NyaXB0aW9ufX08L2RzLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgPGRzLWJ1dHRvbiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzohdmFsaWRGb3JtKGl0ZW0/LnZhbHVlKSB8fCBwcm9maWxlUmVxdWVzdG9yU2VydmljZS5kaXNhYmxlQnV0dG9uc31cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KGl0ZW0/LnZhbHVlKSBcIiBbbG9hZGluZ109XCJwcm9maWxlUmVxdWVzdG9yU2VydmljZS5pc1N1Ym1pdHRpbmdbaXRlbT8udmFsdWVdXCJcclxuICAgICAgICAgICpuZ0lmPVwiIShpdGVtPy52YWx1ZSA9PT0gJ1NVQk1JVCcgfHwgaXRlbT8udmFsdWUgPT09ICdBUFBST1ZFJyB8fCBpdGVtPy52YWx1ZSA9PT0gJ1NFTkRCQUNLJyB8fCBpdGVtPy52YWx1ZSA9PT0gJ1JFSkVDVCcgfHwgaXRlbT8udmFsdWUgPT09ICdDQU5DRUwnKVwiPnt7aXRlbT8uZGVzY3JpcHRpb259fTwvZHMtYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1ncm93LTEganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiXHJcbiAgICAqbmdJZj1cImxvdj8uZGVjaXNpb24/LnR5cGUgIT09ICdidXR0b24nXCI+XHJcbiAgICA8ZHMtYnV0dG9uIHNoYXBlPVwidGV4dFwiIGNvbG9yPVwicmVkXCIgKGNsaWNrKT1cInJlc2V0Rm9ybSgpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTYgZnctbWVkaXVtXCI+e3tpMThuLnRyYW5zbGF0ZSgncmVzZXQnKX19PC9zcGFuPlxyXG4gICAgPC9kcy1idXR0b24+XHJcbiAgICA8ZHMtYnV0dG9uIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiF2YWxpZEZvcm0oJ1NVQk1JVCcpfVwiXHJcbiAgICAgIFtsb2FkaW5nXT1cInByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmlzU3VibWl0dGluZ1tpdGVtPy52YWx1ZV1cIlxyXG4gICAgICAoY2xpY2spPVwib25TdWJtaXQoJ1NVQk1JVCcpIHx8IHByb2ZpbGVSZXF1ZXN0b3JTZXJ2aWNlLmRpc2FibGVCdXR0b25zXCI+XHJcbiAgICAgIHt7aTE4bi50cmFuc2xhdGUoJ3N1Ym1pdCcpfX1cclxuICAgIDwvZHMtYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4tLT5cclxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9nZW5lcmFsLWFwcHJvdmVyLXNlY3Rpb24vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9nZW5lcmFsLWFwcHJvdmVyLXNlY3Rpb24vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFTLE1BQU0sZUFBZSxDQUFDO0FBR2pHLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBQyx5QkFBeUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSw2RkFBNkYsQ0FBQzs7OztBQW1CdEksTUFBTSxPQUFPLCtCQUErQjtJQWdCdkI7SUFBK0I7SUFBeUI7SUFkbEUsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQU87SUFDWCxHQUFHLENBQU07SUFDVCxTQUFTLEdBQVcsY0FBYyxDQUFDO0lBQzVDLFVBQVUsQ0FBWTtJQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FB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LGNBQWMsa05BR2Qsc0JBQXNCLCtOQUN0QixtQkFBbUI7OzJGQUtWLCtCQUErQjtrQkFqQjNDLFNBQVM7K0JBQ0UsOEJBQThCLGNBRzVCLElBQUksV0FDUCxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLFdBQzFDO3dCQUNQLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxJQUFJO3dCQUNKLE9BQU87d0JBQ1Asc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLHlCQUF5Qjt3QkFDekIseUJBQXlCO3FCQUMxQjsrSUFJUSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE5PX0VSUk9SU19TQ0hFTUEsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybSwgU2VjdGlvbn0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHtBY3Rpb25TdGF0ZVNlcnZpY2UsIENvcmVJMThuU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzXCI7XHJcbmltcG9ydCB7TmdDbGFzcywgTmdGb3JPZiwgTmdJZn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge0FjdGlvbkJ1dHRvbnNDb21wb25lbnR9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0N1c3RvbVNlYXJjaGFibGVDb21wb25lbnQsIElucHV0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRXJyb3JzQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvdmFsaWRhdGlvbi1lcnJvcnMvdmFsaWRhdGlvbi1lcnJvcnMuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyYWwtYXBwcm92ZXItc2VjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtYXBwcm92ZXItc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhbC1hcHByb3Zlci1zZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTk9fRVJST1JTX1NDSEVNQV0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTmdDbGFzcyxcclxuICAgIElucHV0Q29tcG9uZW50LFxyXG4gICAgTmdJZixcclxuICAgIE5nRm9yT2YsXHJcbiAgICBBY3Rpb25CdXR0b25zQ29tcG9uZW50LFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFZhbGlkYXRpb25FcnJvcnNDb21wb25lbnQsXHJcbiAgICBDdXN0b21TZWFyY2hhYmxlQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEFwcHJvdmVyU2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgQElucHV0KCkgaXNSZWFkT25seTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWN0aW9uOiBTZWN0aW9uO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgbG92OiBhbnk7XHJcbiAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmcgPSBcImluZm8tc2VjdGlvblwiO1xyXG4gIGZpZWxkc0Zvcm06IEZvcm1Hcm91cDtcclxuICBudW1iZXJzID0gWy4uLkFycmF5KDEwMCkua2V5cygpXS5tYXAoaSA9PiBpICsgMSk7XHJcblxyXG4gIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgbmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMyksIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSksXHJcbiAgICBjb3VudHJpZXM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgfSk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaTE4bjogQ29yZUkxOG5TZXJ2aWNlLCBwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBhY3Rpb25TdGF0ZVNlcnZpY2U6IEFjdGlvblN0YXRlU2VydmljZSkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgbGV0IG5ld0Zvcm0gPSB7XHJcbiAgICAgIGlucHV0MTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgfTtcclxuICAgIHRoaXMubG92Py5bJ2RlY2lzaW9uJ10/Lm9wdGlvbnM/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgbmV3Rm9ybVtvcHRpb24udmFsdWVdID0gWycnXTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmZpZWxkc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKG5ld0Zvcm0pO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrVmFsaWRpdHlBbmRVcGRhdGUgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG92Py5bJ2RlY2lzaW9uJ10/Lm9wdGlvbnM/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICBsZXQgaXNBY3Rpb25WYWxpZCA9IHRoaXMuY2hlY2tWYWxpZGl0eShvcHRpb24udmFsdWUpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uU3RhdGVTZXJ2aWNlLnNldEFjdGlvblZhbGlkKG9wdGlvbi52YWx1ZSwgaXNBY3Rpb25WYWxpZCk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uLmJvZHkuZGV0YWlscyA9IHRoaXMuZmllbGRzRm9ybS52YWx1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1ZhbGlkaXR5QW5kVXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5maWVsZHNGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjaGVja1ZhbGlkaXR5QW5kVXBkYXRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbGlkaXR5KGFjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xyXG4gICAgICBjYXNlICdBUFBST1ZFJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSAnUkVKRUNUJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHNGb3JtLnZhbGlkO1xyXG4gICAgICBjYXNlICdTRU5EQkFDSyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzRm9ybS52YWxpZDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY3VzdG9tQ2FsbFN1Ym1pdChhY3Rpb246IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coJ2N1c3RvbUNhbGxTdWJtaXQnLCBhY3Rpb24pXHJcbiAgfVxyXG5cclxuICByZXNldEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpZWxkc0Zvcm0ucmVzZXQoKVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cInsnZm9ybS1zZWN0aW9uLWRpdmlkZSBmb3JtLXNlY3Rpb24nOiFzZWN0aW9uPy5oZWFkZXI/LnJlYWRPbmx5LCdpbmZvLXNlY3Rpb24nOnNlY3Rpb24/LmhlYWRlcj8ucmVhZE9ubHl9XCI+XHJcblxyXG4gIDxkcy1hbGVydCBjbGFzcz1cImZ1bGxcIiB0eXBlPVwid2FybmluZ1wiIGljb249XCJpbmZvXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG5cclxuICAgICAgUmVxdWVzdCBkZXRhaWxzIHdvcmtpbmcgZmluZVxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2RzLWFsZXJ0PlxyXG5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpZWxkc0Zvcm1cIj5cclxuICAgIDxhcHAtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiaW5wdXQxXCI+PC9hcHAtaW5wdXQ+XHJcbiAgPC9mb3JtPlxyXG5cclxuPC9kaXY+XHJcbkBpZiAoIXNlY3Rpb24/LmhlYWRlcj8ucmVhZE9ubHkpIHtcclxuICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgPGxpYi1hY3Rpb24tYnV0dG9uc1xyXG4gICAgICBbbG92T3B0aW9uc109XCJsb3Y/LlsnZGVjaXNpb24nXT8ub3B0aW9uc1wiXHJcbiAgICAgIFtsb3ZUeXBlXT1cImxvdj8uWydkZWNpc2lvbiddPy50eXBlXCJcclxuICAgICAgW3NlY3Rpb25dPVwic2VjdGlvblwiXHJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICBbc2VjdGlvbnNdPVwiZm9ybS5zZWN0aW9uc1wiXHJcbiAgICAgIFtzaG93QXBwcm92YWxDeWNsZV09XCJ0cnVlXCJcclxuICAgICAgW2N1c3RvbUNhbGxdPVwiZmFsc2VcIlxyXG4gICAgICBbZmllbGRzRm9ybV09XCJmaWVsZHNGb3JtXCJcclxuICAgICAgKGN1c3RvbUNhbGxFbWl0KT1cImN1c3RvbUNhbGxTdWJtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChyZXNldEZvcm1FbWl0KT1cInJlc2V0Rm9ybSgpXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
@@ -1,26 +1,33 @@
1
1
  import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, NO_ERRORS_SCHEMA } from '@angular/core';
2
2
  import { NgClass, NgForOf, NgIf } from "@angular/common";
3
- import { InputComponent } from '../../components/shared-components';
4
- import { ActionButtonsComponent } from "../../components/shared-components/action-buttons/action-buttons.component";
5
- import { ReactiveFormsModule, Validators } from "@angular/forms";
3
+ import { ActionButtonsComponent } from "../../components/shared-components";
4
+ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms";
5
+ import { CustomSearchableComponent, InputComponent } from '../../components/shared-components';
6
+ import { ValidationErrorsComponent } from '../../components/shared-components/form-field/validation-errors/validation-errors.component';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "../../services";
8
9
  import * as i2 from "@angular/forms";
9
- import * as i3 from "../../services/action.service.ts";
10
10
  export class RequestDetailsSectionComponent {
11
11
  i18n;
12
12
  fb;
13
13
  actionStateService;
14
14
  isReadOnly;
15
15
  section;
16
+ form;
16
17
  lov;
17
18
  className = "info-section";
18
- form;
19
19
  fieldsForm;
20
+ numbers = [...Array(100).keys()].map(i => i + 1);
21
+ formGroup = new FormGroup({
22
+ name: new FormControl('', [Validators.required, Validators.maxLength(3), Validators.minLength(2)]),
23
+ countries: new FormControl('', Validators.required),
24
+ });
20
25
  constructor(i18n, fb, actionStateService) {
21
26
  this.i18n = i18n;
22
27
  this.fb = fb;
23
28
  this.actionStateService = actionStateService;
29
+ }
30
+ ngOnInit() {
24
31
  this.createForm();
25
32
  }
26
33
  createForm() {
@@ -31,11 +38,16 @@ export class RequestDetailsSectionComponent {
31
38
  newForm[option.value] = [''];
32
39
  });
33
40
  this.fieldsForm = this.fb.group(newForm);
34
- this.fieldsForm.valueChanges.subscribe(value => {
41
+ const checkValidityAndUpdate = () => {
35
42
  this.lov?.['decision']?.options?.forEach(option => {
36
43
  let isActionValid = this.checkValidity(option.value);
37
44
  this.actionStateService.setActionValid(option.value, isActionValid);
45
+ this.section.body.details = this.fieldsForm.value;
38
46
  });
47
+ };
48
+ checkValidityAndUpdate();
49
+ this.fieldsForm.valueChanges.subscribe(() => {
50
+ checkValidityAndUpdate();
39
51
  });
40
52
  }
41
53
  checkValidity(action) {
@@ -50,8 +62,14 @@ export class RequestDetailsSectionComponent {
50
62
  return false;
51
63
  }
52
64
  }
53
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RequestDetailsSectionComponent, deps: [{ token: i1.CoreI18nService }, { token: i2.FormBuilder }, { token: i3.ActionStateService }], target: i0.ɵɵFactoryTarget.Component });
54
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: RequestDetailsSectionComponent, isStandalone: true, selector: "app-request-details-section", inputs: { isReadOnly: "isReadOnly", section: "section", lov: "lov", className: "className" }, ngImport: i0, template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\" ></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["label", "hasTooltip", "tooltip", "floatLabel", "className", "showLabel", "matPrefix", "iconPrefixName", "matSuffix", "iconSuffixName", "emitedChangedValue1"] }, { kind: "component", type: ActionButtonsComponent, selector: "lib-action-buttons", inputs: ["lovOptions", "lovType"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
65
+ customCallSubmit(action) {
66
+ console.log('customCallSubmit', action);
67
+ }
68
+ resetForm() {
69
+ this.fieldsForm.reset();
70
+ }
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RequestDetailsSectionComponent, deps: [{ token: i1.CoreI18nService }, { token: i2.FormBuilder }, { token: i1.ActionStateService }], target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: RequestDetailsSectionComponent, isStandalone: true, selector: "app-request-details-section", inputs: { isReadOnly: "isReadOnly", section: "section", form: "form", lov: "lov", className: "className" }, ngImport: i0, template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n\r\n <!--<form [formGroup]=\"formGroup\">\r\n <app-input formControlName=\"name\"></app-input>\r\n <app-custom-searchable formControlName=\"countries\" [options]=\"lov?.['approverActions']?.options\"></app-custom-searchable>\r\n </form>-->\r\n\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\"></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n [section]=\"section\"\r\n [form]=\"form\"\r\n [sections]=\"form.sections\"\r\n [showApprovalCycle]=\"true\"\r\n [customCall]=\"false\"\r\n [fieldsForm]=\"fieldsForm\"\r\n (customCallEmit)=\"customCallSubmit($event)\"\r\n (resetFormEmit)=\"resetForm()\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["label", "hasTooltip", "tooltip", "floatLabel", "className", "showLabel", "iconPrefixName", "matSuffix", "iconSuffixName", "emitedChangedValue1"] }, { kind: "component", type: ActionButtonsComponent, selector: "lib-action-buttons", inputs: ["lovOptions", "lovType", "fieldsForm", "form", "section", "sections", "showApprovalCycle", "customCall"], outputs: ["resetFormEmit", "customCallEmit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
55
73
  }
56
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RequestDetailsSectionComponent, decorators: [{
57
75
  type: Component,
@@ -62,14 +80,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
62
80
  NgForOf,
63
81
  ActionButtonsComponent,
64
82
  ReactiveFormsModule,
65
- ], template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\" ></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"] }]
66
- }], ctorParameters: () => [{ type: i1.CoreI18nService }, { type: i2.FormBuilder }, { type: i3.ActionStateService }], propDecorators: { isReadOnly: [{
83
+ ValidationErrorsComponent,
84
+ CustomSearchableComponent
85
+ ], template: "<div\r\n [ngClass]=\"{'form-section-divide form-section':!section?.header?.readOnly,'info-section':section?.header?.readOnly}\">\r\n\r\n\r\n <!--<form [formGroup]=\"formGroup\">\r\n <app-input formControlName=\"name\"></app-input>\r\n <app-custom-searchable formControlName=\"countries\" [options]=\"lov?.['approverActions']?.options\"></app-custom-searchable>\r\n </form>-->\r\n\r\n\r\n <ds-alert class=\"full\" type=\"warning\" icon=\"info\">\r\n\r\n <div class=\"d-flex gap-2\">\r\n\r\n Request details working fine\r\n\r\n </div>\r\n\r\n </ds-alert>\r\n\r\n <form [formGroup]=\"fieldsForm\">\r\n <app-input formControlName=\"input1\"></app-input>\r\n </form>\r\n\r\n</div>\r\n@if (!section?.header?.readOnly) {\r\n <div class=\"mt-4\">\r\n <lib-action-buttons\r\n [lovOptions]=\"lov?.['decision']?.options\"\r\n [lovType]=\"lov?.['decision']?.type\"\r\n [section]=\"section\"\r\n [form]=\"form\"\r\n [sections]=\"form.sections\"\r\n [showApprovalCycle]=\"true\"\r\n [customCall]=\"false\"\r\n [fieldsForm]=\"fieldsForm\"\r\n (customCallEmit)=\"customCallSubmit($event)\"\r\n (resetFormEmit)=\"resetForm()\"\r\n />\r\n </div>\r\n}\r\n", styles: [".form-section-divide{--form-section-columns: 1fr 1fr}@media (max-width: 756px){.form-section-divide{--form-section-columns: 100%}}.form-section-divide .full{grid-column:1/-1}.head-title{position:relative;margin-bottom:12px}.head-title h3{display:inline-block;color:#8e9aa0;font-size:14px;font-weight:500;background-color:#fff;padding-inline-end:20px;position:relative;z-index:2;margin:0}.head-title:after{content:\"\";position:absolute;width:100%;height:1px;background-color:#dee0e2;top:50%;left:0;right:0;transform:translateY(-50%);z-index:1}.chamber{margin-bottom:20px}.chamber .chamber-content{background-color:#f8f8f8;padding:20px}.chamber .chamber-content .chamber-select{display:flex}.chamber .chamber-content mat-checkbox{font-size:14px}\n"] }]
86
+ }], ctorParameters: () => [{ type: i1.CoreI18nService }, { type: i2.FormBuilder }, { type: i1.ActionStateService }], propDecorators: { isReadOnly: [{
67
87
  type: Input
68
88
  }], section: [{
69
89
  type: Input
90
+ }], form: [{
91
+ type: Input
70
92
  }], lov: [{
71
93
  type: Input
72
94
  }], className: [{
73
95
  type: Input
74
96
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1kZXRhaWxzLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi90ZXN0Q29tcG9uZW50L3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uL3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6RixPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNEVBQTRFLENBQUM7QUFDbEgsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFrQnZGLE1BQU0sT0FBTyw4QkFBOEI7SUFVdEI7SUFBK0I7SUFBeUI7SUFSbEUsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixHQUFHLENBQU07SUFDVCxTQUFTLEdBQVcsY0FBYyxDQUFDO0lBQzVDLElBQUksQ0FBTztJQUNYLFVBQVUsQ0FBWTtJQUd0QixZQUFtQixJQUFxQixFQUFVLEVBQWUsRUFBVSxrQkFBc0M7UUFBOUYsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUMvRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLE9BQU8sR0FBRztZQUNaLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ2xDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjO1FBQzFCLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUMvQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUMvQjtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzt1R0F6Q1UsOEJBQThCOzJGQUE5Qiw4QkFBOEIscUxDeEIzQyxpcUJBMkJBLG95QkRYSSxPQUFPLG9GQUNQLGNBQWMsK05BR2Qsc0JBQXNCLGlHQUN0QixtQkFBbUI7OzJGQUdWLDhCQUE4QjtrQkFmMUMsU0FBUzsrQkFDRSw2QkFBNkIsY0FHM0IsSUFBSSxXQUNQLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsV0FDMUM7d0JBQ1AsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxzQkFBc0I7d0JBQ3RCLG1CQUFtQjtxQkFDcEI7K0lBSVEsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE5PX0VSUk9SU19TQ0hFTUF9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm0sIFNlY3Rpb259IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7Q29yZUkxOG5TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXNcIjtcclxuaW1wb3J0IHtOZ0NsYXNzLCBOZ0Zvck9mLCBOZ0lmfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7SW5wdXRDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkLWNvbXBvbmVudHMnO1xyXG5pbXBvcnQge0FjdGlvbkJ1dHRvbnNDb21wb25lbnR9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2FjdGlvbi1idXR0b25zL2FjdGlvbi1idXR0b25zLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0FjdGlvblN0YXRlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2FjdGlvbi5zZXJ2aWNlLnRzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBJbnB1dENvbXBvbmVudCxcclxuICAgIE5nSWYsXHJcbiAgICBOZ0Zvck9mLFxyXG4gICAgQWN0aW9uQnV0dG9uc0NvbXBvbmVudCxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdERldGFpbHNTZWN0aW9uQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgaXNSZWFkT25seTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWN0aW9uOiBTZWN0aW9uO1xyXG4gIEBJbnB1dCgpIGxvdjogYW55O1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nID0gXCJpbmZvLXNlY3Rpb25cIjtcclxuICBmb3JtOiBGb3JtO1xyXG4gIGZpZWxkc0Zvcm06IEZvcm1Hcm91cDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuOiBDb3JlSTE4blNlcnZpY2UsIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGFjdGlvblN0YXRlU2VydmljZTogQWN0aW9uU3RhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICBsZXQgbmV3Rm9ybSA9IHtcclxuICAgICAgaW5wdXQxOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9O1xyXG4gICAgdGhpcy5sb3Y/LlsnZGVjaXNpb24nXT8ub3B0aW9ucz8uZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICBuZXdGb3JtW29wdGlvbi52YWx1ZV0gPSBbJyddO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZmllbGRzRm9ybSA9IHRoaXMuZmIuZ3JvdXAobmV3Rm9ybSk7XHJcbiAgICB0aGlzLmZpZWxkc0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMubG92Py5bJ2RlY2lzaW9uJ10/Lm9wdGlvbnM/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICBsZXQgaXNBY3Rpb25WYWxpZCA9IHRoaXMuY2hlY2tWYWxpZGl0eShvcHRpb24udmFsdWUpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uU3RhdGVTZXJ2aWNlLnNldEFjdGlvblZhbGlkKG9wdGlvbi52YWx1ZSwgaXNBY3Rpb25WYWxpZCk7XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2hlY2tWYWxpZGl0eShhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcclxuICAgICAgY2FzZSAnQVBQUk9WRSc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgJ1JFSkVDVCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzRm9ybS52YWxpZDtcclxuICAgICAgY2FzZSAnU0VOREJBQ0snOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkc0Zvcm0udmFsaWQ7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXZcclxuICBbbmdDbGFzc109XCJ7J2Zvcm0tc2VjdGlvbi1kaXZpZGUgZm9ybS1zZWN0aW9uJzohc2VjdGlvbj8uaGVhZGVyPy5yZWFkT25seSwnaW5mby1zZWN0aW9uJzpzZWN0aW9uPy5oZWFkZXI/LnJlYWRPbmx5fVwiPlxyXG5cclxuXHJcbiAgPGRzLWFsZXJ0IGNsYXNzPVwiZnVsbFwiIHR5cGU9XCJ3YXJuaW5nXCIgaWNvbj1cImluZm9cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcblxyXG4gICAgICBSZXF1ZXN0IGRldGFpbHMgd29ya2luZyBmaW5lXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZHMtYWxlcnQ+XHJcblxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRzRm9ybVwiPlxyXG4gICAgPGFwcC1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJpbnB1dDFcIiA+PC9hcHAtaW5wdXQ+XHJcbiAgPC9mb3JtPlxyXG5cclxuPC9kaXY+XHJcbkBpZiAoIXNlY3Rpb24/LmhlYWRlcj8ucmVhZE9ubHkpIHtcclxuICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgPGxpYi1hY3Rpb24tYnV0dG9uc1xyXG4gICAgICBbbG92T3B0aW9uc109XCJsb3Y/LlsnZGVjaXNpb24nXT8ub3B0aW9uc1wiXHJcbiAgICAgIFtsb3ZUeXBlXT1cImxvdj8uWydkZWNpc2lvbiddPy50eXBlXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1kZXRhaWxzLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi90ZXN0Q29tcG9uZW50L3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uL3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvdGVzdENvbXBvbmVudC9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQWMsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUMseUJBQXlCLEVBQUUsY0FBYyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDN0YsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNkZBQTZGLENBQUM7Ozs7QUFtQnRJLE1BQU0sT0FBTyw4QkFBOEI7SUFnQnRCO0lBQStCO0lBQXlCO0lBZGxFLFVBQVUsQ0FBVTtJQUNwQixPQUFPLENBQVU7SUFDakIsSUFBSSxDQUFPO0lBQ1gsR0FBRyxDQUFNO0lBQ1QsU0FBUyxHQUFXLGNBQWMsQ0FBQztJQUM1QyxVQUFVLENBQVk7SUFDdEIsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FB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LGtOQUdkLHNCQUFzQiwrTkFDdEIsbUJBQW1COzsyRkFLViw4QkFBOEI7a0JBakIxQyxTQUFTOytCQUNFLDZCQUE2QixjQUczQixJQUFJLFdBQ1AsQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxXQUMxQzt3QkFDUCxPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsSUFBSTt3QkFDSixPQUFPO3dCQUNQLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLHlCQUF5QjtxQkFDMUI7K0lBSVEsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIElucHV0LCBOT19FUlJPUlNfU0NIRU1BLCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm0sIFNlY3Rpb259IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7QWN0aW9uU3RhdGVTZXJ2aWNlLCBDb3JlSTE4blNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQge05nQ2xhc3MsIE5nRm9yT2YsIE5nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtBY3Rpb25CdXR0b25zQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50c1wiO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtDdXN0b21TZWFyY2hhYmxlQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cyc7XHJcbmltcG9ydCB7VmFsaWRhdGlvbkVycm9yc0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cy9mb3JtLWZpZWxkL3ZhbGlkYXRpb24tZXJyb3JzL3ZhbGlkYXRpb24tZXJyb3JzLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcXVlc3QtZGV0YWlscy1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXF1ZXN0LWRldGFpbHMtc2VjdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBJbnB1dENvbXBvbmVudCxcclxuICAgIE5nSWYsXHJcbiAgICBOZ0Zvck9mLFxyXG4gICAgQWN0aW9uQnV0dG9uc0NvbXBvbmVudCxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBWYWxpZGF0aW9uRXJyb3JzQ29tcG9uZW50LFxyXG4gICAgQ3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcXVlc3REZXRhaWxzU2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgQElucHV0KCkgaXNSZWFkT25seTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWN0aW9uOiBTZWN0aW9uO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgbG92OiBhbnk7XHJcbiAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmcgPSBcImluZm8tc2VjdGlvblwiO1xyXG4gIGZpZWxkc0Zvcm06IEZvcm1Hcm91cDtcclxuICBudW1iZXJzID0gWy4uLkFycmF5KDEwMCkua2V5cygpXS5tYXAoaSA9PiBpICsgMSk7XHJcblxyXG4gIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgbmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMyksIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSksXHJcbiAgICBjb3VudHJpZXM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgfSk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaTE4bjogQ29yZUkxOG5TZXJ2aWNlLCBwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBhY3Rpb25TdGF0ZVNlcnZpY2U6IEFjdGlvblN0YXRlU2VydmljZSkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgbGV0IG5ld0Zvcm0gPSB7XHJcbiAgICAgIGlucHV0MTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgfTtcclxuICAgIHRoaXMubG92Py5bJ2RlY2lzaW9uJ10/Lm9wdGlvbnM/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgbmV3Rm9ybVtvcHRpb24udmFsdWVdID0gWycnXTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmZpZWxkc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKG5ld0Zvcm0pO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrVmFsaWRpdHlBbmRVcGRhdGUgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG92Py5bJ2RlY2lzaW9uJ10/Lm9wdGlvbnM/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICBsZXQgaXNBY3Rpb25WYWxpZCA9IHRoaXMuY2hlY2tWYWxpZGl0eShvcHRpb24udmFsdWUpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uU3RhdGVTZXJ2aWNlLnNldEFjdGlvblZhbGlkKG9wdGlvbi52YWx1ZSwgaXNBY3Rpb25WYWxpZCk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uLmJvZHkuZGV0YWlscyA9IHRoaXMuZmllbGRzRm9ybS52YWx1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1ZhbGlkaXR5QW5kVXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5maWVsZHNGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjaGVja1ZhbGlkaXR5QW5kVXBkYXRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbGlkaXR5KGFjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xyXG4gICAgICBjYXNlICdBUFBST1ZFJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSAnUkVKRUNUJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHNGb3JtLnZhbGlkO1xyXG4gICAgICBjYXNlICdTRU5EQkFDSyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzRm9ybS52YWxpZDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY3VzdG9tQ2FsbFN1Ym1pdChhY3Rpb246IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coJ2N1c3RvbUNhbGxTdWJtaXQnLCBhY3Rpb24pXHJcbiAgfVxyXG5cclxuICByZXNldEZvcm0oKSB7XHJcbiAgICB0aGlzLmZpZWxkc0Zvcm0ucmVzZXQoKVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cInsnZm9ybS1zZWN0aW9uLWRpdmlkZSBmb3JtLXNlY3Rpb24nOiFzZWN0aW9uPy5oZWFkZXI/LnJlYWRPbmx5LCdpbmZvLXNlY3Rpb24nOnNlY3Rpb24/LmhlYWRlcj8ucmVhZE9ubHl9XCI+XHJcblxyXG5cclxuICA8IS0tPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICAgICAgPGFwcC1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+PC9hcHAtaW5wdXQ+XHJcbiAgICAgIDxhcHAtY3VzdG9tLXNlYXJjaGFibGUgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyaWVzXCIgW29wdGlvbnNdPVwibG92Py5bJ2FwcHJvdmVyQWN0aW9ucyddPy5vcHRpb25zXCI+PC9hcHAtY3VzdG9tLXNlYXJjaGFibGU+XHJcbiAgPC9mb3JtPi0tPlxyXG5cclxuXHJcbiAgPGRzLWFsZXJ0IGNsYXNzPVwiZnVsbFwiIHR5cGU9XCJ3YXJuaW5nXCIgaWNvbj1cImluZm9cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcblxyXG4gICAgICBSZXF1ZXN0IGRldGFpbHMgd29ya2luZyBmaW5lXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZHMtYWxlcnQ+XHJcblxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRzRm9ybVwiPlxyXG4gICAgPGFwcC1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJpbnB1dDFcIj48L2FwcC1pbnB1dD5cclxuICA8L2Zvcm0+XHJcblxyXG48L2Rpdj5cclxuQGlmICghc2VjdGlvbj8uaGVhZGVyPy5yZWFkT25seSkge1xyXG4gIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICA8bGliLWFjdGlvbi1idXR0b25zXHJcbiAgICAgIFtsb3ZPcHRpb25zXT1cImxvdj8uWydkZWNpc2lvbiddPy5vcHRpb25zXCJcclxuICAgICAgW2xvdlR5cGVdPVwibG92Py5bJ2RlY2lzaW9uJ10/LnR5cGVcIlxyXG4gICAgICBbc2VjdGlvbl09XCJzZWN0aW9uXCJcclxuICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgIFtzZWN0aW9uc109XCJmb3JtLnNlY3Rpb25zXCJcclxuICAgICAgW3Nob3dBcHByb3ZhbEN5Y2xlXT1cInRydWVcIlxyXG4gICAgICBbY3VzdG9tQ2FsbF09XCJmYWxzZVwiXHJcbiAgICAgIFtmaWVsZHNGb3JtXT1cImZpZWxkc0Zvcm1cIlxyXG4gICAgICAoY3VzdG9tQ2FsbEVtaXQpPVwiY3VzdG9tQ2FsbFN1Ym1pdCgkZXZlbnQpXCJcclxuICAgICAgKHJlc2V0Rm9ybUVtaXQpPVwicmVzZXRGb3JtKClcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=