ngx-iso-form 2.3.3 → 3.0.0

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 (33) hide show
  1. package/README.md +260 -260
  2. package/fesm2022/ngx-iso-form.mjs +81 -75
  3. package/fesm2022/ngx-iso-form.mjs.map +1 -1
  4. package/lib/styles/index.scss +1 -1
  5. package/package.json +3 -5
  6. package/esm2022/lib/Models/Control.mjs +0 -2
  7. package/esm2022/lib/Models/IsoForm.mjs +0 -13
  8. package/esm2022/lib/Models/Schema.mjs +0 -2
  9. package/esm2022/lib/components/controls/iso-base-control.component.mjs +0 -25
  10. package/esm2022/lib/components/controls/iso-mat-checkbox.component.mjs +0 -17
  11. package/esm2022/lib/components/controls/iso-mat-currency.component.mjs +0 -18
  12. package/esm2022/lib/components/controls/iso-mat-date.component.mjs +0 -19
  13. package/esm2022/lib/components/controls/iso-mat-datetime.component.mjs +0 -19
  14. package/esm2022/lib/components/controls/iso-mat-input.component.mjs +0 -18
  15. package/esm2022/lib/components/controls/iso-mat-select.component.mjs +0 -19
  16. package/esm2022/lib/components/controls/iso-mat-textarea.component.mjs +0 -18
  17. package/esm2022/lib/components/index.mjs +0 -10
  18. package/esm2022/lib/components/iso-control/iso-control.component.mjs +0 -72
  19. package/esm2022/lib/ngx-iso-form.component.mjs +0 -199
  20. package/esm2022/lib/ngx-iso-form.module.mjs +0 -113
  21. package/esm2022/lib/ngx-iso-form.service.mjs +0 -267
  22. package/esm2022/lib/shared/components/dynamic/ngx-dynamic.component.mjs +0 -33
  23. package/esm2022/lib/shared/directives/component-content.directive.mjs +0 -16
  24. package/esm2022/lib/shared/models/component.model.mjs +0 -7
  25. package/esm2022/lib/shared/pipe/error.pipe.mjs +0 -33
  26. package/esm2022/lib/shared/pipe/general.pipe.mjs +0 -33
  27. package/esm2022/lib/shared/pipe/translate.pipe.mjs +0 -33
  28. package/esm2022/lib/shared/services/component.service.mjs +0 -20
  29. package/esm2022/lib/shared/services/control.service.mjs +0 -45
  30. package/esm2022/lib/shared/services/custom-date-adapter.mjs +0 -34
  31. package/esm2022/lib/shared/services/index.mjs +0 -3
  32. package/esm2022/ngx-iso-form.mjs +0 -5
  33. package/esm2022/public-api.mjs +0 -9
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "../../shared/pipe/translate.pipe";
9
- import * as i6 from "../../shared/pipe/error.pipe";
10
- export class IsoMatCurrency extends IsoBaseControlComponent {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatCurrency, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatCurrency, selector: "iso-mat-currency", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-s\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.maxlength]=\"control.maxLength\">\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i5.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i6.IsoErrorPipe, name: "error" }] }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatCurrency, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'iso-mat-currency', template: "<mat-form-field class=\"form-control form-control-s\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.maxlength]=\"control.maxLength\">\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>" }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC1jdXJyZW5jeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2NvbnRyb2xzL2lzby1tYXQtY3VycmVuY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9scy9pc28tbWF0LWN1cnJlbmN5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBTXZFLE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQXVCOzhHQUE5QyxjQUFjO2tHQUFkLGNBQWMsK0VDUDNCLDBqQkFRaUI7OzJGRERKLGNBQWM7a0JBSjFCLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElzb0Jhc2VDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9pc28tYmFzZS1jb250cm9sLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lzby1tYXQtY3VycmVuY3knLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pc28tbWF0LWN1cnJlbmN5LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSXNvTWF0Q3VycmVuY3kgZXh0ZW5kcyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB7XHJcbiAgICBcclxufSIsIjxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc1wiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBjb250cm9sLm5hbWUgfCB0cmFuczogY29udHJvbC5pZCA6IGNvbnRyb2wubmFtZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW2F0dHIubWF4bGVuZ3RoXT1cImNvbnRyb2wubWF4TGVuZ3RoXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEtleXMoZm9ybUNvbnRyb2wuZXJyb3JzKVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtQ29udHJvbC5lcnJvcnM/LltpdGVtXSAmJiBmb3JtQ29udHJvbC5kaXJ0eVwiIGNsYXNzPVwiaXNvLW1hdC1lcnJvclwiPlxyXG4gICAgICAgICAgICB7eyBjb250cm9sLm5hbWUgfCBlcnJvcjogY29udHJvbC5pZCA6IGl0ZW0gOiBpdGVtIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -1,19 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "@angular/material/datepicker";
9
- import * as i6 from "../../shared/pipe/translate.pipe";
10
- import * as i7 from "../../shared/pipe/error.pipe";
11
- export class IsoMatDate extends IsoBaseControlComponent {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatDate, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatDate, selector: "iso-mat-date", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [formControl]=\"formControl\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "pipe", type: i6.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i7.IsoErrorPipe, name: "error" }] }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatDate, decorators: [{
16
- type: Component,
17
- args: [{ selector: 'iso-mat-date', template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [formControl]=\"formControl\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>" }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbHMvaXNvLW1hdC1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbHMvaXNvLW1hdC1kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQU92RSxNQUFNLE9BQU8sVUFBVyxTQUFRLHVCQUF1Qjs4R0FBMUMsVUFBVTtrR0FBVixVQUFVLDJFQ1Z2QixpcEJBVWlCOzsyRkRBSixVQUFVO2tCQUx0QixTQUFTOytCQUNFLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElDb250cm9sTW9kZWwgfSBmcm9tICcuLi8uLi9Nb2RlbHMvQ29udHJvbCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vaXNvLWJhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpc28tbWF0LWRhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pc28tbWF0LWRhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSXNvTWF0RGF0ZSBleHRlbmRzIElzb0Jhc2VDb250cm9sQ29tcG9uZW50IHtcclxuICAgIFxyXG59IiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1tXCI+XHJcbiAgPG1hdC1sYWJlbD57eyBjb250cm9sLm5hbWUgfCB0cmFuczogY29udHJvbC5pZCA6IGNvbnRyb2wubmFtZSB9fTwvbWF0LWxhYmVsPlxyXG4gIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIj5cclxuICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0S2V5cyhmb3JtQ29udHJvbC5lcnJvcnMpXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUNvbnRyb2wuZXJyb3JzPy5baXRlbV0gJiYgZm9ybUNvbnRyb2wuZGlydHlcIiBjbGFzcz1cImlzby1tYXQtZXJyb3JcIj5cclxuICAgICAge3sgY29udHJvbC5uYW1lIHwgZXJyb3I6IGNvbnRyb2wuaWQgOiBpdGVtIDogaXRlbSArIFwiIHZhbGlkYXRpb24gZmFpbGVkXCIgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
@@ -1,19 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "../../shared/pipe/translate.pipe";
9
- import * as i6 from "../../shared/pipe/error.pipe";
10
- import * as i7 from "../../shared/pipe/general.pipe";
11
- export class IsoMatDateTime extends IsoBaseControlComponent {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatDateTime, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatDateTime, selector: "iso-mat-datetime", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.minlength]=\"control.minLength\" [attr.maxlength]=\"control.maxLength\">\r\n <mat-hint>{{ control.id | general: control.id : \"format\" : \"YYYY-MM-DDThh:mm:ss.sss+/-hh:mm\" }}</mat-hint>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n \r\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i5.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i6.IsoErrorPipe, name: "error" }, { kind: "pipe", type: i7.IsoGeneralPipe, name: "general" }] }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatDateTime, decorators: [{
16
- type: Component,
17
- args: [{ selector: 'iso-mat-datetime', template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.minlength]=\"control.minLength\" [attr.maxlength]=\"control.maxLength\">\r\n <mat-hint>{{ control.id | general: control.id : \"format\" : \"YYYY-MM-DDThh:mm:ss.sss+/-hh:mm\" }}</mat-hint>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n \r\n</mat-form-field>" }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2NvbnRyb2xzL2lzby1tYXQtZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9scy9pc28tbWF0LWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQU12RSxNQUFNLE9BQU8sY0FBZSxTQUFRLHVCQUF1Qjs4R0FBOUMsY0FBYztrR0FBZCxjQUFjLCtFQ1AzQiwwdkJBVWlCOzsyRkRISixjQUFjO2tCQUoxQixTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vaXNvLWJhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpc28tbWF0LWRhdGV0aW1lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXNvLW1hdC1kYXRldGltZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIElzb01hdERhdGVUaW1lIGV4dGVuZHMgSXNvQmFzZUNvbnRyb2xDb21wb25lbnQge1xyXG4gICAgXHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLW1cIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgY29udHJvbC5uYW1lIHwgdHJhbnM6IGNvbnRyb2wuaWQgOiBjb250cm9sLm5hbWUgfX08L21hdC1sYWJlbD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFthdHRyLm1pbmxlbmd0aF09XCJjb250cm9sLm1pbkxlbmd0aFwiIFthdHRyLm1heGxlbmd0aF09XCJjb250cm9sLm1heExlbmd0aFwiPlxyXG4gICAgPG1hdC1oaW50Pnt7IGNvbnRyb2wuaWQgfCBnZW5lcmFsOiBjb250cm9sLmlkIDogXCJmb3JtYXRcIiA6IFwiWVlZWS1NTS1ERFRoaDptbTpzcy5zc3MrLy1oaDptbVwiICAgfX08L21hdC1oaW50PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRLZXlzKGZvcm1Db250cm9sLmVycm9ycylcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUNvbnRyb2wuZXJyb3JzPy5baXRlbV0gJiYgZm9ybUNvbnRyb2wuZGlydHlcIiBjbGFzcz1cImlzby1tYXQtZXJyb3JcIj5cclxuICAgICAgICAgICAge3sgY29udHJvbC5uYW1lIHwgZXJyb3I6IGNvbnRyb2wuaWQgOiBpdGVtIDogaXRlbSArIFwiIHZhbGlkYXRpb24gZmFpbGVkXCIgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgXHJcbjwvbWF0LWZvcm0tZmllbGQ+Il19
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "../../shared/pipe/translate.pipe";
9
- import * as i6 from "../../shared/pipe/error.pipe";
10
- export class IsoMatInput extends IsoBaseControlComponent {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatInput, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatInput, selector: "iso-mat-input", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-m\" appearance=\"fill\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.minlength]=\"control.minLength\" [attr.maxlength]=\"control.maxLength\">\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i5.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i6.IsoErrorPipe, name: "error" }] }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatInput, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'iso-mat-input', template: "<mat-form-field class=\"form-control form-control-m\" appearance=\"fill\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <input matInput placeholder=\"{{ control.name }}\" [formControl]=\"formControl\" [attr.minlength]=\"control.minLength\" [attr.maxlength]=\"control.maxLength\">\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>" }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2NvbnRyb2xzL2lzby1tYXQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9scy9pc28tbWF0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBTXZFLE1BQU0sT0FBTyxXQUFZLFNBQVEsdUJBQXVCOzhHQUEzQyxXQUFXO2tHQUFYLFdBQVcsNEVDUHhCLDhvQkFRaUI7OzJGRERKLFdBQVc7a0JBSnZCLFNBQVM7K0JBQ0UsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vaXNvLWJhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpc28tbWF0LWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXNvLW1hdC1pbnB1dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIElzb01hdElucHV0IGV4dGVuZHMgSXNvQmFzZUNvbnRyb2xDb21wb25lbnQge1xyXG4gICAgXHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLW1cIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBjb250cm9sLm5hbWUgfCB0cmFuczogY29udHJvbC5pZCA6IGNvbnRyb2wubmFtZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW2F0dHIubWlubGVuZ3RoXT1cImNvbnRyb2wubWluTGVuZ3RoXCIgW2F0dHIubWF4bGVuZ3RoXT1cImNvbnRyb2wubWF4TGVuZ3RoXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEtleXMoZm9ybUNvbnRyb2wuZXJyb3JzKVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtQ29udHJvbC5lcnJvcnM/LltpdGVtXSAmJiBmb3JtQ29udHJvbC5kaXJ0eVwiIGNsYXNzPVwiaXNvLW1hdC1lcnJvclwiPlxyXG4gICAgICAgICAgICB7eyBjb250cm9sLm5hbWUgfCBlcnJvcjogY29udHJvbC5pZCA6IGl0ZW0gOiBpdGVtICsgXCIgdmFsaWRhdGlvbiBmYWlsZWRcIiB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbWF0LWZvcm0tZmllbGQ+Il19
@@ -1,19 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/select";
8
- import * as i5 from "@angular/material/core";
9
- import * as i6 from "../../shared/pipe/translate.pipe";
10
- import * as i7 from "../../shared/pipe/error.pipe";
11
- export class IsoMatSelect extends IsoBaseControlComponent {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatSelect, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatSelect, selector: "iso-mat-select", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <mat-select [formControl]=\"formControl\">\r\n <mat-option *ngFor=\"let item of control.values\" [value]=\"item\">\r\n {{item}}\r\n </mat-option>\r\n </mat-select>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n </mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i6.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i7.IsoErrorPipe, name: "error" }] }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatSelect, decorators: [{
16
- type: Component,
17
- args: [{ selector: 'iso-mat-select', template: "<mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <mat-select [formControl]=\"formControl\">\r\n <mat-option *ngFor=\"let item of control.values\" [value]=\"item\">\r\n {{item}}\r\n </mat-option>\r\n </mat-select>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n </mat-form-field>" }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9scy9pc28tbWF0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2NvbnRyb2xzL2lzby1tYXQtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQU92RSxNQUFNLE9BQU8sWUFBYSxTQUFRLHVCQUF1Qjs4R0FBNUMsWUFBWTtrR0FBWixZQUFZLDZFQ1R6Qiw0b0JBWW1COzsyRkRITixZQUFZO2tCQUx4QixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSXNvQmFzZUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL2lzby1iYXNlLWNvbnRyb2wuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXNvLW1hdC1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pc28tbWF0LXNlbGVjdC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBJc29NYXRTZWxlY3QgZXh0ZW5kcyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB7XHJcbiAgIFxyXG59IiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1tXCI+XHJcbiAgICA8bWF0LWxhYmVsPnt7IGNvbnRyb2wubmFtZSB8IHRyYW5zOiBjb250cm9sLmlkIDogY29udHJvbC5uYW1lIH19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udHJvbC52YWx1ZXNcIiBbdmFsdWVdPVwiaXRlbVwiPlxyXG4gICAgICAgIHt7aXRlbX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0S2V5cyhmb3JtQ29udHJvbC5lcnJvcnMpXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmb3JtQ29udHJvbC5lcnJvcnM/LltpdGVtXSAmJiBmb3JtQ29udHJvbC5kaXJ0eVwiIGNsYXNzPVwiaXNvLW1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgY29udHJvbC5uYW1lIHwgZXJyb3I6IGNvbnRyb2wuaWQgOiBpdGVtIDogaXRlbSArIFwiIHZhbGlkYXRpb24gZmFpbGVkXCIgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { IsoBaseControlComponent } from './iso-base-control.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "../../shared/pipe/translate.pipe";
9
- import * as i6 from "../../shared/pipe/error.pipe";
10
- export class IsoMatTextarea extends IsoBaseControlComponent {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatTextarea, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IsoMatTextarea, selector: "iso-mat-textarea", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-control form-control-full\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <textarea matInput placeholder=\"{{control.name}}\" [formControl]=\"formControl\"></textarea>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i5.IsoTranslatePipe, name: "trans" }, { kind: "pipe", type: i6.IsoErrorPipe, name: "error" }] }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IsoMatTextarea, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'iso-mat-textarea', template: "<mat-form-field class=\"form-control form-control-full\">\r\n <mat-label>{{ control.name | trans: control.id : control.name }}</mat-label>\r\n <textarea matInput placeholder=\"{{control.name}}\" [formControl]=\"formControl\"></textarea>\r\n <ng-container *ngFor=\"let item of getKeys(formControl.errors)\">\r\n <div *ngIf=\"formControl.errors?.[item] && formControl.dirty\" class=\"iso-mat-error\">\r\n {{ control.name | error: control.id : item : item + \" validation failed\" }}\r\n </div>\r\n </ng-container>\r\n</mat-form-field>" }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLW1hdC10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2NvbnRyb2xzL2lzby1tYXQtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9scy9pc28tbWF0LXRleHRhcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBT3ZFLE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQXVCOzhHQUE5QyxjQUFjO2tHQUFkLGNBQWMsK0VDVDNCLDJqQkFRaUI7OzJGRENKLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJc29CYXNlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vaXNvLWJhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpc28tbWF0LXRleHRhcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXNvLW1hdC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBJc29NYXRUZXh0YXJlYSBleHRlbmRzIElzb0Jhc2VDb250cm9sQ29tcG9uZW50IHtcclxuICAgXHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLWZ1bGxcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgY29udHJvbC5uYW1lIHwgdHJhbnM6IGNvbnRyb2wuaWQgOiBjb250cm9sLm5hbWUgfX08L21hdC1sYWJlbD5cclxuICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7Y29udHJvbC5uYW1lfX1cIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIj48L3RleHRhcmVhPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRLZXlzKGZvcm1Db250cm9sLmVycm9ycylcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUNvbnRyb2wuZXJyb3JzPy5baXRlbV0gJiYgZm9ybUNvbnRyb2wuZGlydHlcIiBjbGFzcz1cImlzby1tYXQtZXJyb3JcIj5cclxuICAgICAgICAgICAge3sgY29udHJvbC5uYW1lIHwgZXJyb3I6IGNvbnRyb2wuaWQgOiBpdGVtIDogaXRlbSArIFwiIHZhbGlkYXRpb24gZmFpbGVkXCIgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
@@ -1,10 +0,0 @@
1
- export * from './controls/iso-base-control.component';
2
- export * from './controls/iso-mat-date.component';
3
- export * from './controls/iso-mat-datetime.component';
4
- export * from './controls/iso-mat-input.component';
5
- export * from './controls/iso-mat-checkbox.component';
6
- export * from './controls/iso-mat-textarea.component';
7
- export * from './controls/iso-mat-select.component';
8
- export * from './controls/iso-mat-currency.component';
9
- export * from './iso-control/iso-control.component';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUV0RCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb250cm9scy9pc28tYmFzZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbHMvaXNvLW1hdC1kYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbHMvaXNvLW1hdC1kYXRldGltZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyb2xzL2lzby1tYXQtaW5wdXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9jb250cm9scy9pc28tbWF0LWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbHMvaXNvLW1hdC10ZXh0YXJlYS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyb2xzL2lzby1tYXQtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbHMvaXNvLW1hdC1jdXJyZW5jeS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9pc28tY29udHJvbC9pc28tY29udHJvbC5jb21wb25lbnQnO1xyXG4iXX0=
@@ -1,72 +0,0 @@
1
- import { Component, Input, forwardRef } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../shared/services/control.service";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "../../shared/components/dynamic/ngx-dynamic.component";
7
- export class NgxIsoControlComponent {
8
- constructor(controlService) {
9
- this.controlService = controlService;
10
- this.addValidator = () => {
11
- try {
12
- const minOccurs = parseInt(this.control.minOccurs, 10);
13
- let minLength = parseInt(this.control.minLength, 10);
14
- const maxLength = parseInt(this.control.maxLength, 10);
15
- if (minOccurs) {
16
- this.formControl.addValidators(Validators.required);
17
- }
18
- if (!Number.isNaN(minLength)) {
19
- this.formControl.addValidators(Validators.minLength(minLength));
20
- }
21
- if (!Number.isNaN(maxLength)) {
22
- this.formControl.addValidators(Validators.maxLength(maxLength));
23
- }
24
- if (this.control.pattern) {
25
- this.formControl.addValidators(Validators.pattern(this.control.pattern));
26
- }
27
- if (this.control.fractionDigits) {
28
- minLength = Number.isNaN(minLength) ? 0 : minLength;
29
- const pattern = `^[\\d\\.\\d{0,${this.control.fractionDigits}}]{${minLength},${this.control.totalDigits}}$`;
30
- }
31
- }
32
- catch (e) {
33
- console.error(e);
34
- }
35
- };
36
- }
37
- ngOnInit() {
38
- this.addValidator();
39
- this.component = this.controlService.getComponentByType(this.control, this.formControl);
40
- }
41
- writeValue(obj) {
42
- }
43
- registerOnChange(fn) {
44
- }
45
- registerOnTouched(fn) {
46
- }
47
- setDisabledState(isDisabled) {
48
- }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NgxIsoControlComponent, deps: [{ token: i1.ControlService }], target: i0.ɵɵFactoryTarget.Component }); }
50
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: NgxIsoControlComponent, selector: "ngx-iso-control", inputs: { formControl: "formControl", control: "control" }, providers: [
51
- {
52
- provide: NG_VALUE_ACCESSOR,
53
- useExisting: forwardRef(() => NgxIsoControlComponent),
54
- multi: true,
55
- }
56
- ], ngImport: i0, template: "<ngx-dynamic *ngIf=\"component\" [componentModel]=\"component\"></ngx-dynamic>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgxDynamicComponent, selector: "ngx-dynamic", inputs: ["componentModel"] }] }); }
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NgxIsoControlComponent, decorators: [{
59
- type: Component,
60
- args: [{ selector: 'ngx-iso-control', providers: [
61
- {
62
- provide: NG_VALUE_ACCESSOR,
63
- useExisting: forwardRef(() => NgxIsoControlComponent),
64
- multi: true,
65
- }
66
- ], template: "<ngx-dynamic *ngIf=\"component\" [componentModel]=\"component\"></ngx-dynamic>" }]
67
- }], ctorParameters: () => [{ type: i1.ControlService }], propDecorators: { formControl: [{
68
- type: Input
69
- }], control: [{
70
- type: Input
71
- }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9pc28tY29udHJvbC9pc28tY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2lzby1jb250cm9sL2lzby1jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFxQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFnQmxHLE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBaUIxQyxpQkFBWSxHQUFHLEdBQVMsRUFBRTtZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDaEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNwRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUE7Z0JBQzdHLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUE7SUF4Q0QsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtJQUNuQixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsRUFBTztJQUN4QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsRUFBTztJQUN6QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUUsVUFBbUI7SUFDckMsQ0FBQzs4R0FuQlUsc0JBQXNCO2tHQUF0QixzQkFBc0Isc0dBVHRCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ2ZILGdGQUEwRTs7MkZEa0I3RCxzQkFBc0I7a0JBWmxDLFNBQVM7K0JBQ0UsaUJBQWlCLGFBRWhCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDOzRCQUNyRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjttRkFJUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2NvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTY2hlbWFFbGVtZW50IH0gZnJvbSAnLi4vLi4vTW9kZWxzL1NjaGVtYSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1pc28tY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lzby1jb250cm9sLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5neElzb0NvbnRyb2xDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTmd4SXNvQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICBASW5wdXQoKSBjb250cm9sOiBTY2hlbWFFbGVtZW50XHJcbiAgY29tcG9uZW50OiBDb21wb25lbnRNb2RlbFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFNlcnZpY2U6IENvbnRyb2xTZXJ2aWNlKSB7XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVmFsaWRhdG9yKCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IHRoaXMuY29udHJvbFNlcnZpY2UuZ2V0Q29tcG9uZW50QnlUeXBlKHRoaXMuY29udHJvbCwgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVmFsaWRhdG9yID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbWluT2NjdXJzID0gcGFyc2VJbnQodGhpcy5jb250cm9sLm1pbk9jY3VycywgMTApO1xyXG4gICAgICBsZXQgbWluTGVuZ3RoID0gcGFyc2VJbnQodGhpcy5jb250cm9sLm1pbkxlbmd0aCwgMTApO1xyXG4gICAgICBjb25zdCBtYXhMZW5ndGggPSBwYXJzZUludCh0aGlzLmNvbnRyb2wubWF4TGVuZ3RoLCAxMCk7XHJcbiAgICAgIGlmIChtaW5PY2N1cnMpIHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obWluTGVuZ3RoKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1pbkxlbmd0aChtaW5MZW5ndGgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIU51bWJlci5pc05hTihtYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKG1heExlbmd0aCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wucGF0dGVybikge1xyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5jb250cm9sLnBhdHRlcm4pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb250cm9sLmZyYWN0aW9uRGlnaXRzKSB7XHJcbiAgICAgICAgbWluTGVuZ3RoID0gTnVtYmVyLmlzTmFOKG1pbkxlbmd0aCkgPyAwIDogbWluTGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBgXltcXFxcZFxcXFwuXFxcXGR7MCwke3RoaXMuY29udHJvbC5mcmFjdGlvbkRpZ2l0c319XXske21pbkxlbmd0aH0sJHt0aGlzLmNvbnRyb2wudG90YWxEaWdpdHN9fSRgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufSIsIjxuZ3gtZHluYW1pYyAqbmdJZj1cImNvbXBvbmVudFwiIFtjb21wb25lbnRNb2RlbF09XCJjb21wb25lbnRcIj48L25neC1keW5hbWljPiJdfQ==
@@ -1,199 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import { FormGroup, FormControl, FormArray } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./ngx-iso-form.service";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "@angular/material/expansion";
8
- import * as i5 from "@angular/material/form-field";
9
- import * as i6 from "@angular/material/button";
10
- import * as i7 from "@angular/material/select";
11
- import * as i8 from "@angular/material/core";
12
- import * as i9 from "@angular/material/icon";
13
- import * as i10 from "./components/iso-control/iso-control.component";
14
- import * as i11 from "./shared/pipe/translate.pipe";
15
- export class NgxIsoFormComponent {
16
- constructor(service, changeDetection) {
17
- this.service = service;
18
- this.changeDetection = changeDetection;
19
- }
20
- ngOnChanges(changes) {
21
- if (changes['schema'] && changes['schema'].currentValue) {
22
- this.initiateForm();
23
- }
24
- if (changes['form'] && changes['form'].currentValue) {
25
- this.initiateFormModel();
26
- }
27
- if (changes['excludes'] && changes['excludes'].currentValue) {
28
- this.service.excludes = this.excludes;
29
- }
30
- }
31
- get model() {
32
- if (this._form)
33
- return this.service.sanitize(this._form.value);
34
- }
35
- get getFormModel() {
36
- return this.service._formModel;
37
- }
38
- get invalid() {
39
- return this._form.invalid;
40
- }
41
- initiateForm() {
42
- this.service._formModel = [this.structuredClone(this.schema)];
43
- this.service._formModel[0].elements = [];
44
- let group = {};
45
- const schemaElements = this.schema.elements.length > 0 ? this.structuredClone(this.schema.elements) : this.schema.elements;
46
- const formElements = this.service._formModel[0].elements.length > 0 ? this.structuredClone(this.service._formModel[0].elements) : this.service._formModel[0].elements;
47
- group[this.schema.id] = this.service.getFormGroupControls(schemaElements, formElements);
48
- this._form = new FormGroup(group);
49
- if (!this._isFormInitiate) {
50
- this.initiateFormModel();
51
- }
52
- }
53
- structuredClone(data) {
54
- let cloneData;
55
- try {
56
- cloneData = structuredClone(data);
57
- }
58
- catch (e) {
59
- cloneData = JSON.parse(JSON.stringify(data));
60
- }
61
- return cloneData;
62
- }
63
- initiateFormModel() {
64
- if (this._form) {
65
- this._ngModel = this.form.isoFormModel;
66
- this.form.getFormModel = () => {
67
- return this.model;
68
- };
69
- this._isFormInitiate = true;
70
- this.service.initFormModel(this._ngModel, this._form);
71
- }
72
- }
73
- onChoiceSelectionChange(id, formElement, node) {
74
- node.elements.forEach((element) => {
75
- element.hidden = true;
76
- formElement.removeControl(element.id);
77
- if (element.id === id) {
78
- node.choiceKey = id;
79
- element.hidden = false;
80
- if (element.elements.length) {
81
- // element.elements[0].hidden = false;
82
- const group = this.service.getFormGroupControls(element.elements, [], 0, false);
83
- formElement.addControl(element.id, group);
84
- }
85
- else {
86
- const control = this.service.getFormControl('');
87
- formElement.addControl(element.id, control);
88
- }
89
- }
90
- });
91
- }
92
- maxOccurs(maxOccurs) {
93
- return maxOccurs !== null && maxOccurs !== undefined && this.service.maxOccurs(maxOccurs);
94
- }
95
- expand(minOccurs) {
96
- return minOccurs !== null && minOccurs !== undefined && parseInt(minOccurs, 10) > 0;
97
- }
98
- addSection($event, node, parentNode, parentFormEle) {
99
- $event.stopPropagation();
100
- const control = parentFormEle.get(node.id);
101
- if (node.maxOccurs && parseInt(node.maxOccurs, 10) <= parentNode.elements.length) {
102
- return;
103
- }
104
- const newEle = this.structuredClone(parentNode.elements[0]);
105
- const newKeys = [];
106
- const groupControls = this.service.getFormGroupControls(newEle.elements, newKeys, parentNode.elements.length - 1);
107
- parentNode.elements.push(newEle);
108
- control.push(groupControls);
109
- this.changeDetection.detectChanges();
110
- }
111
- removeSection($event, parentNode, parentFormEle, index) {
112
- $event.stopPropagation();
113
- const control = parentFormEle.get(parentNode.id);
114
- parentNode.elements.splice(index, 1);
115
- control.removeAt(index);
116
- this.changeDetection.detectChanges();
117
- }
118
- addNewControl($event, node, parentNode, parentFormEle) {
119
- $event.stopPropagation();
120
- if (node.maxOccurs && parseInt(node.maxOccurs, 10) <= parentNode.elements.length) {
121
- return;
122
- }
123
- const control = parentFormEle.get(node.id);
124
- const newControl = this.service.getFormControl('');
125
- const newEle = this.structuredClone(parentNode.elements[parentNode.elements.length - 1]);
126
- control.push(newControl);
127
- parentNode.elements.push(newEle);
128
- this.changeDetection.detectChanges();
129
- }
130
- removeNewControl($event, parentNode, parentFormEle, index) {
131
- $event.stopPropagation();
132
- const control = parentFormEle.get(parentNode.id);
133
- parentNode.elements.splice(index, 1);
134
- control.removeAt(index);
135
- this.changeDetection.detectChanges();
136
- }
137
- isArray(myKey) {
138
- if (myKey instanceof Array) {
139
- return true;
140
- }
141
- return false;
142
- }
143
- isEmpty(formElement) {
144
- return formElement.controls && Object.keys(formElement.controls).length === 0;
145
- }
146
- getElement(formElement, element) {
147
- if (element.hidden) {
148
- return;
149
- }
150
- let _element;
151
- if (element.multi) {
152
- _element = element.elements[element.elements.length - 1];
153
- }
154
- else {
155
- _element = element;
156
- }
157
- let formControl = formElement.controls[_element.id];
158
- if (!formControl) {
159
- formControl = formElement[_element.id];
160
- if (!formControl)
161
- throw `FormControl not found ${_element.id}`;
162
- }
163
- if (formControl instanceof FormArray) {
164
- const formGroup = formControl.controls.find((item) => {
165
- if (item instanceof FormControl)
166
- return true;
167
- return Object.keys(item.controls).find((ctrl) => {
168
- return ctrl.indexOf(element.id) > -1;
169
- });
170
- });
171
- if (formGroup)
172
- return formControl.at(formControl.length - 1);
173
- }
174
- return formControl;
175
- }
176
- getFormControl(node) {
177
- return this.service.getFormControl('');
178
- }
179
- getChoiceFormControl(choiceKey) {
180
- const formControl = this.service.getFormControl('');
181
- formControl.setValue(choiceKey);
182
- return formControl;
183
- }
184
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NgxIsoFormComponent, deps: [{ token: i1.NgxIsoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
185
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: NgxIsoFormComponent, selector: "ngx-iso-form", inputs: { form: "form", schema: "schema", excludes: "excludes" }, usesOnChanges: true, ngImport: i0, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs) || node.expanded\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"getChoiceFormControl(node.choiceKey)\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}.mat-mdc-form-field-hint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.NgxIsoControlComponent, selector: "ngx-iso-control", inputs: ["formControl", "control"] }, { kind: "pipe", type: i11.IsoTranslatePipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
186
- }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NgxIsoFormComponent, decorators: [{
188
- type: Component,
189
- args: [{ selector: 'ngx-iso-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs) || node.expanded\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"getChoiceFormControl(node.choiceKey)\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}.mat-mdc-form-field-hint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
190
- }], ctorParameters: () => [{ type: i1.NgxIsoService }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
191
- type: Input,
192
- args: [{ required: true }]
193
- }], schema: [{
194
- type: Input,
195
- args: [{ required: true }]
196
- }], excludes: [{
197
- type: Input
198
- }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL25neC1pc28tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9uZ3gtaXNvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sT0FBTyxtQkFBbUI7SUFROUIsWUFBb0IsT0FBc0IsRUFBVSxlQUFrQztRQUFsRSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQW1CO0lBQ3RGLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4QyxDQUFDO0lBQ0gs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QUU7Z0JBQ2hCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Hcm91cCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgU2NoZW1hTW9kZWwgfSBmcm9tICcuL01vZGVscy9TY2hlbWEnO1xuaW1wb3J0IHsgTmd4SXNvU2VydmljZSB9IGZyb20gJy4vbmd4LWlzby1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXNvRm9ybSB9IGZyb20gJy4vTW9kZWxzL0lzb0Zvcm0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtaXNvLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWlzby1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWlzby1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5neElzb0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmb3JtOiBJc29Gb3JtO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzY2hlbWE6IFNjaGVtYU1vZGVsO1xuICBASW5wdXQoKSBleGNsdWRlczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBfZm9ybTogRm9ybUdyb3VwO1xuICBwcml2YXRlIF9pc0Zvcm1Jbml0aWF0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbmdNb2RlbDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogTmd4SXNvU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzY2hlbWEnXSAmJiBjaGFuZ2VzWydzY2hlbWEnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmb3JtJ10gJiYgY2hhbmdlc1snZm9ybSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aWF0ZUZvcm1Nb2RlbCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZXhjbHVkZXMnXSAmJiBjaGFuZ2VzWydleGNsdWRlcyddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmV4Y2x1ZGVzID0gdGhpcy5leGNsdWRlczsgICAgICBcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2Zvcm0pXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnNhbml0aXplKHRoaXMuX2Zvcm0udmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBnZXRGb3JtTW9kZWwoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybS5pbnZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWF0ZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2aWNlLl9mb3JtTW9kZWwgPSBbdGhpcy5zdHJ1Y3R1cmVkQ2xvbmUodGhpcy5zY2hlbWEpXTtcbiAgICB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbFswXS5lbGVtZW50cyA9IFtdO1xuICAgIGxldCBncm91cDogYW55ID0ge307XG4gICAgY29uc3Qgc2NoZW1hRWxlbWVudHMgPSAgdGhpcy5zY2hlbWEuZWxlbWVudHMubGVuZ3RoID4gMCA/IHRoaXMuc3RydWN0dXJlZENsb25lKHRoaXMuc2NoZW1hLmVsZW1lbnRzKSA6IHRoaXMuc2NoZW1hLmVsZW1lbnRzO1xuICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IHRoaXMuc2VydmljZS5fZm9ybU1vZGVsWzBdLmVsZW1lbnRzLmxlbmd0aCA+IDAgPyB0aGlzLnN0cnVjdHVyZWRDbG9uZSh0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbFswXS5lbGVtZW50cykgOiB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbFswXS5lbGVtZW50cztcbiAgICBncm91cFt0aGlzLnNjaGVtYS5pZF0gPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUdyb3VwQ29udHJvbHMoc2NoZW1hRWxlbWVudHMsIGZvcm1FbGVtZW50cyk7XG4gICAgdGhpcy5fZm9ybSA9IG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICAgIGlmICghdGhpcy5faXNGb3JtSW5pdGlhdGUpIHtcbiAgICAgIHRoaXMuaW5pdGlhdGVGb3JtTW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0cnVjdHVyZWRDbG9uZShkYXRhOiBhbnkpOiBhbnkge1xuICAgIGxldCBjbG9uZURhdGE7XG4gICAgdHJ5IHtcbiAgICAgIGNsb25lRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGNsb25lRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWF0ZUZvcm1Nb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9ybSkge1xuICAgICAgdGhpcy5fbmdNb2RlbCA9IHRoaXMuZm9ybS5pc29Gb3JtTW9kZWw7ICAgICAgXG4gICAgICB0aGlzLmZvcm0uZ2V0Rm9ybU1vZGVsID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICAgIH07XG5cbiAgICAgIFxuICAgICAgdGhpcy5faXNGb3JtSW5pdGlhdGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXJ2aWNlLmluaXRGb3JtTW9kZWwodGhpcy5fbmdNb2RlbCwgdGhpcy5fZm9ybSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2hvaWNlU2VsZWN0aW9uQ2hhbmdlKGlkOiBzdHJpbmcsIGZvcm1FbGVtZW50OiBhbnksIG5vZGU6IFNjaGVtYU1vZGVsKTogdm9pZCB7XG4gICAgbm9kZS5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50OiBTY2hlbWFNb2RlbCkgPT4ge1xuICAgICAgZWxlbWVudC5oaWRkZW4gPSB0cnVlO1xuICAgICAgZm9ybUVsZW1lbnQucmVtb3ZlQ29udHJvbChlbGVtZW50LmlkKTtcbiAgICAgIGlmIChlbGVtZW50LmlkID09PSBpZCkge1xuICAgICAgICBub2RlLmNob2ljZUtleSA9IGlkO1xuICAgICAgICBlbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgIC8vIGVsZW1lbnQuZWxlbWVudHNbMF0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUdyb3VwQ29udHJvbHMoZWxlbWVudC5lbGVtZW50cywgW10sIDAsIGZhbHNlKTtcbiAgICAgICAgICBmb3JtRWxlbWVudC5hZGRDb250cm9sKGVsZW1lbnQuaWQsIGdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Db250cm9sKCcnKTtcbiAgICAgICAgICBmb3JtRWxlbWVudC5hZGRDb250cm9sKGVsZW1lbnQuaWQsIGNvbnRyb2wpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXhPY2N1cnMobWF4T2NjdXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWF4T2NjdXJzICE9PSBudWxsICYmIG1heE9jY3VycyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VydmljZS5tYXhPY2N1cnMobWF4T2NjdXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBleHBhbmQobWluT2NjdXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWluT2NjdXJzICE9PSBudWxsICYmIG1pbk9jY3VycyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlSW50KG1pbk9jY3VycywgMTApID4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRTZWN0aW9uKCRldmVudDogRXZlbnQsIG5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnROb2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Rm9ybUVsZTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1BcnJheSA9IHBhcmVudEZvcm1FbGUuZ2V0KG5vZGUuaWQpIGFzIEZvcm1BcnJheTtcbiAgICBpZiAobm9kZS5tYXhPY2N1cnMgJiYgcGFyc2VJbnQobm9kZS5tYXhPY2N1cnMsIDEwKSA8PSBwYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdFbGUgPSB0aGlzLnN0cnVjdHVyZWRDbG9uZShwYXJlbnROb2RlLmVsZW1lbnRzWzBdKTtcbiAgICBjb25zdCBuZXdLZXlzOiBhbnkgPSBbXTtcbiAgICBjb25zdCBncm91cENvbnRyb2xzID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Hcm91cENvbnRyb2xzKG5ld0VsZS5lbGVtZW50cywgbmV3S2V5cywgcGFyZW50Tm9kZS5lbGVtZW50cy5sZW5ndGggLSAxKTtcbiAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnB1c2gobmV3RWxlKTtcbiAgICBjb250cm9sLnB1c2goZ3JvdXBDb250cm9scyk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZVNlY3Rpb24oJGV2ZW50OiBFdmVudCwgcGFyZW50Tm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudEZvcm1FbGU6IEZvcm1Hcm91cCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb250cm9sOiBGb3JtQXJyYXkgPSBwYXJlbnRGb3JtRWxlLmdldChwYXJlbnROb2RlLmlkKSBhcyBGb3JtQXJyYXk7XG4gICAgcGFyZW50Tm9kZS5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnRyb2wucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGROZXdDb250cm9sKCRldmVudDogRXZlbnQsIG5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnROb2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Rm9ybUVsZTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChub2RlLm1heE9jY3VycyAmJiBwYXJzZUludChub2RlLm1heE9jY3VycywgMTApIDw9IHBhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1BcnJheSA9IHBhcmVudEZvcm1FbGUuZ2V0KG5vZGUuaWQpIGFzIEZvcm1BcnJheTtcbiAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Db250cm9sKCcnKTtcbiAgICBjb25zdCBuZXdFbGUgPSB0aGlzLnN0cnVjdHVyZWRDbG9uZShwYXJlbnROb2RlLmVsZW1lbnRzW3BhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoIC0gMV0pO1xuICAgIGNvbnRyb2wucHVzaChuZXdDb250cm9sKTtcbiAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnB1c2gobmV3RWxlKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlTmV3Q29udHJvbCgkZXZlbnQ6IEV2ZW50LCBwYXJlbnROb2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Rm9ybUVsZTogRm9ybUdyb3VwLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1BcnJheSA9IHBhcmVudEZvcm1FbGUuZ2V0KHBhcmVudE5vZGUuaWQpIGFzIEZvcm1BcnJheTtcbiAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgY29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQXJyYXkobXlLZXk6IE9iamVjdCB8IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICBpZiAobXlLZXkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0VtcHR5KGZvcm1FbGVtZW50OiBGb3JtR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gZm9ybUVsZW1lbnQuY29udHJvbHMgJiYgT2JqZWN0LmtleXMoZm9ybUVsZW1lbnQuY29udHJvbHMpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFbGVtZW50KGZvcm1FbGVtZW50OiBGb3JtR3JvdXAsIGVsZW1lbnQ6IGFueSk6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgX2VsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQubXVsdGkpIHtcbiAgICAgIF9lbGVtZW50ID0gZWxlbWVudC5lbGVtZW50c1tlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBfZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgbGV0IGZvcm1Db250cm9sID0gZm9ybUVsZW1lbnQuY29udHJvbHNbX2VsZW1lbnQuaWRdO1xuICAgIGlmICghZm9ybUNvbnRyb2wpIHtcbiAgICAgIGZvcm1Db250cm9sID0gKGZvcm1FbGVtZW50IGFzIGFueSlbX2VsZW1lbnQuaWRdO1xuICAgICAgaWYgKCFmb3JtQ29udHJvbClcbiAgICAgICAgdGhyb3cgYEZvcm1Db250cm9sIG5vdCBmb3VuZCAke19lbGVtZW50LmlkfWA7XG4gICAgfVxuICAgIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gZm9ybUNvbnRyb2wuY29udHJvbHMuZmluZCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVtLmNvbnRyb2xzKS5maW5kKChjdHJsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGN0cmwuaW5kZXhPZihlbGVtZW50LmlkKSA+IC0xO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBpZiAoZm9ybUdyb3VwKVxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2wuYXQoZm9ybUNvbnRyb2wubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtQ29udHJvbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGb3JtQ29udHJvbChub2RlOiBTY2hlbWFNb2RlbCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmdldEZvcm1Db250cm9sKCcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDaG9pY2VGb3JtQ29udHJvbChjaG9pY2VLZXk6c3RyaW5nKXtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuc2VydmljZS5nZXRGb3JtQ29udHJvbCgnJyk7XG4gICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUoY2hvaWNlS2V5KTtcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxmb3JtICpuZ0lmPVwiX2Zvcm0gJiYgc2NoZW1hXCIgW2Zvcm1Hcm91cF09XCJfZm9ybVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vZGVUZW1wbGF0ZVJlZiBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtZm9ybUVsZW1lbnQ9XCJmb3JtRWxlbWVudFwiIGxldC1pbmRleD1cImluZGV4XCJcclxuICAgICAgbGV0LXBhcmVudE5vZGU9XCJwYXJlbnROb2RlXCIgbGV0LXBhcmVudEZvcm1FbGVtZW50PVwicGFyZW50Rm9ybUVsZW1lbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUubXVsdGkgdGhlbiBhcnIgZWxzZSBvYmpcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNhcnI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBub2RlLmVsZW1lbnRzO2xldCBpID0gaW5kZXhcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWZcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgIG5vZGU6IG1vZGVsLFxyXG4gICAgICAgICAgZm9ybUVsZW1lbnQ6IGZvcm1FbGVtZW50LFxyXG4gICAgICAgICAgcGFyZW50Rm9ybUVsZW1lbnQ6IHBhcmVudEZvcm1FbGVtZW50LFxyXG4gICAgICAgICAgcGFyZW50Tm9kZTogbm9kZSxcclxuICAgICAgICAgIGluZGV4OiBpXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjb2JqPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmVsZW1lbnRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG1hdC1hY2NvcmRpb24gW2Zvcm1Hcm91cF09XCJmb3JtRWxlbWVudFwiICpuZ0lmPVwiIW5vZGUuaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIG11bHRpIFtleHBhbmRlZF09XCJleHBhbmQobm9kZS5taW5PY2N1cnMpIHx8IG5vZGUuZXhwYW5kZWRcIiAjZXhwYW4+XHJcbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAge3sgbm9kZS5uYW1lIHwgdHJhbnM6IG5vZGUuaWQgOiBub2RlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbiAqbmdJZj1cIm1heE9jY3Vycyhub2RlLm1heE9jY3VycylcIj5cclxuICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpbmRleCA8IDFcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZFNlY3Rpb24oJGV2ZW50LCBub2RlLHBhcmVudE5vZGUsIHBhcmVudEZvcm1FbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluZGV4ID4gMFwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlU2VjdGlvbigkZXZlbnQscGFyZW50Tm9kZSxwYXJlbnRGb3JtRWxlbWVudCxpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbi5leHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibm9kZS5kYXRhVHlwZSA9PT0gJ2Nob2ljZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBub2RlLm5hbWUgfCB0cmFuczogbm9kZS5pZCA6IG5vZGUubmFtZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2hvaWNlU2VsZWN0aW9uQ2hhbmdlKCRldmVudC52YWx1ZSxmb3JtRWxlbWVudCwgbm9kZSlcIiBbZm9ybUNvbnRyb2xdPVwiZ2V0Q2hvaWNlRm9ybUNvbnRyb2wobm9kZS5jaG9pY2VLZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygbm9kZS5lbGVtZW50c1wiIFt2YWx1ZV09XCJpdGVtLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VtcHR5KGZvcm1FbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGUuZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgIG5vZGU6IG1vZGVsLFxyXG4gICAgICAgICAgICBmb3JtRWxlbWVudDogZ2V0RWxlbWVudChmb3JtRWxlbWVudCxtb2RlbCksXHJcbiAgICAgICAgICAgIHBhcmVudEZvcm1FbGVtZW50OiBmb3JtRWxlbWVudFxyXG4gICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5lbGVtZW50cy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1pc28tY29udHJvbCAqbmdJZj1cIiFub2RlLmhpZGRlblwiIFtmb3JtQ29udHJvbF09XCJmb3JtRWxlbWVudFwiIFtjb250cm9sXT1cIm5vZGVcIj48L25neC1pc28tY29udHJvbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub2RlLmVsZW1lbnRzLmxlbmd0aCAmJiAhbm9kZS5oaWRkZW5cIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXhPY2N1cnMobm9kZS5tYXhPY2N1cnMpXCIgY2xhc3M9XCJmb3JtLWFkZC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5kZXggPCAxXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGROZXdDb250cm9sKCRldmVudCwgbm9kZSxwYXJlbnROb2RlLHBhcmVudEZvcm1FbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluZGV4ID4gMFwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlTmV3Q29udHJvbCgkZXZlbnQscGFyZW50Tm9kZSxwYXJlbnRGb3JtRWxlbWVudCxpbmRleClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZ3gtaXNvLWNvbnRyb2wgW2Zvcm1Db250cm9sXT1cImZvcm1FbGVtZW50XCIgW2NvbnRyb2xdPVwibm9kZVwiPjwvbmd4LWlzby1jb250cm9sPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGdldEZvcm1Nb2RlbDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBcnJheShtb2RlbCk7dGhlbiBmb3JtQXJyYXkgZWxzZSBmb3JtT2JqZWN0XCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Zvcm1BcnJheT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nRm9yPVwibGV0IGtleSBvZiBtb2RlbDtsZXQgaSA9IGluZGV4XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICBub2RlOiBrZXksXHJcbiAgICAgICAgICBmb3JtRWxlbWVudDogZ2V0RWxlbWVudChfZm9ybSxrZXkpLFxyXG4gICAgICAgICAgcGFyZW50Rm9ybUVsZW1lbnQ6IF9mb3JtLFxyXG4gICAgICAgICAgaW5kZXg6aVxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Zvcm1PYmplY3Q+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICBub2RlOiBtb2RlbCxcclxuICAgICAgICAgIGZvcm1FbGVtZW50OiBnZXRFbGVtZW50KF9mb3JtLG1vZGVsKSxcclxuICAgICAgICAgIHBhcmVudEZvcm1FbGVtZW50OiBfZm9ybSxcclxuICAgICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=