ets-fe-ng-sdk 18.0.3 → 18.0.4

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.
@@ -15,10 +15,11 @@ import { MatTooltipModule } from '@angular/material/tooltip';
15
15
  import { MatExpansionModule } from '@angular/material/expansion';
16
16
  import { MatTabsModule } from '@angular/material/tabs';
17
17
  import { TableInputRowComponent } from './table-input-row/table-input-row.component';
18
+ import { map, switchMap } from 'rxjs';
18
19
  import { UtilityService } from '../../../Services/utility.service';
19
20
  import { SDKTranslatePipe } from '../../pipes/translate.pipe';
20
21
  import { PaginatorPipe } from '../../pipes/paginator.pipe';
21
- import { toSignal } from '@angular/core/rxjs-interop';
22
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
22
23
  import * as i0 from "@angular/core";
23
24
  /**
24
25
  * Table Input Component
@@ -26,6 +27,7 @@ import * as i0 from "@angular/core";
26
27
  export class TableInputComponent extends FormGeneratorComponent {
27
28
  constructor() {
28
29
  super(...arguments);
30
+ this.formArray = input();
29
31
  this.filterContainerClass = input();
30
32
  this.border = input(true);
31
33
  this.isShow = input();
@@ -38,11 +40,15 @@ export class TableInputComponent extends FormGeneratorComponent {
38
40
  this.usePaginator = signal(true);
39
41
  this.childrenFormSchemaMap = {};
40
42
  this.filterFormValueSignal = toSignal(this.filterForm.valueChanges);
41
- this.formArrayLengthSignal = signal(undefined);
43
+ this.formArrayLengthSignal = toSignal(toObservable(this.formArray).pipe(switchMap((form) => form?.valueChanges.pipe(map(() => form?.length)))));
42
44
  this.filteredFormArray = computed(() => {
43
45
  this.formArrayLengthSignal();
44
- const formArray = this.formArray, filterFormValue = this.filterFormValueSignal();
45
- const formGroups = formArray?.controls?.map((c, index) => ({ index, form: c }));
46
+ const formArray = this.formArray(), filterFormValue = this.filterFormValueSignal();
47
+ const formGroups = formArray?.controls?.map((c, index) => ({
48
+ index,
49
+ form: c,
50
+ id: this.utilityService.generateUUID(),
51
+ }));
46
52
  const filterObject = this.filterFormArrayGroupPipe.queryMapper(filterFormValue);
47
53
  return filterObject
48
54
  ? formGroups.filter(({ form }) => this.filterFormArrayGroupPipe.filterFunc(filterObject)(form))
@@ -50,7 +56,6 @@ export class TableInputComponent extends FormGeneratorComponent {
50
56
  });
51
57
  this.paginatedAndFilteredFormArray = computed(() => {
52
58
  const formArray = this.filteredFormArray(), pageState = this.pageState();
53
- // debugger;
54
59
  return this.usePaginator()
55
60
  ? this.paginatorPipe.transform(formArray, pageState?.pageSize || this.pageSize(), pageState?.pageIndex || 0)
56
61
  : formArray;
@@ -80,14 +85,6 @@ export class TableInputComponent extends FormGeneratorComponent {
80
85
  console.log(this.singleFormStructure);
81
86
  };
82
87
  }
83
- // @Input() pageType
84
- set _formArray(v) {
85
- this.formArray = v;
86
- if (v)
87
- v.valueChanges.subscribe((r) => {
88
- this.formArrayLengthSignal.set(v?.length);
89
- });
90
- }
91
88
  set _pageSize(v) {
92
89
  this.pageSize.set(v);
93
90
  }
@@ -174,7 +171,7 @@ export class TableInputComponent extends FormGeneratorComponent {
174
171
  this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
175
172
  }
176
173
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { _formArray: { classPropertyName: "_formArray", publicName: "formArray", isSignal: false, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
178
175
  }
179
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, decorators: [{
180
177
  type: Component,
@@ -210,11 +207,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
210
207
  SDKTranslatePipe,
211
208
  FilterFormArrayGroupPipe,
212
209
  ValidationMessageComponent,
213
- ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
214
- }], propDecorators: { _formArray: [{
215
- type: Input,
216
- args: ['formArray']
217
- }], _pageSize: [{
210
+ ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
211
+ }], propDecorators: { _pageSize: [{
218
212
  type: Input,
219
213
  args: ['pageSize']
220
214
  }], _formSchema: [{
@@ -234,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
234
228
  type: ViewChild,
235
229
  args: [PaginatorComponent]
236
230
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFD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QkF4Qy9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4QiwwQkFBMEI7cUJBQzNCLGFBR1UsQ0FBQyx3QkFBd0IsRUFBRSxhQUFhLENBQUM7OEJBWTVCLFVBQVU7c0JBQWpDLEtBQUs7dUJBQUMsV0FBVztnQkFVSyxTQUFTO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBTTRDLFdBQVc7c0JBQXZFLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBTzlDLG1CQUFtQjtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS2hCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDcUIsYUFBYTtzQkFBdkMsS0FBSzt1QkFBQyxjQUFjO2dCQXVCVSxrQkFBa0I7c0JBQWhELFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXNjaGVtYS5tb2RlbCc7XG5pbXBvcnQge1xuICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gIEZvcm1WYWx1ZVBpcGUsXG4gIEZ1bmN0aW9uQ2FsbGVyMixcbiAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgVG9BbnlQaXBlLFxufSBmcm9tICcuLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuXG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIEpzb25QaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUYWJsZUlucHV0Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJ0biB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU0RLVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiBUYWJsZSBJbnB1dCBDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybVZhbHVlUGlwZSxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEpzb25QaXBlLFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1vZGFsQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JQaXBlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGFibGVJbnB1dFJvd0NvbXBvbmVudCxcbiAgICBUb0FueVBpcGUsXG4gICAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSwgUGFnaW5hdG9yUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSW5wdXRDb21wb25lbnQ8XG4gICAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICAgIH0gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIGZvcm1BcnJheTogRm9ybUFycmF5PEZvcm1Hcm91cDxURm9ybUdyb3VwPj47XG4gIC8vIEBJbnB1dCgpIHBhZ2VUeXBlXG4gIEBJbnB1dCgnZm9ybUFycmF5Jykgc2V0IF9mb3JtQXJyYXkodjogRm9ybUFycmF5PEZvcm1Hcm91cDxURm9ybUdyb3VwPj4pIHtcbiAgICB0aGlzLmZvcm1BcnJheSA9IHY7XG4gICAgaWYgKHYpXG4gICAgICB2LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtQXJyYXlMZW5ndGhTaWduYWwuc2V0KHY/Lmxlbmd0aCk7XG4gICAgICB9KTtcbiAgfVxuICByZWFkb25seSBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgcmVhZG9ubHkgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYShcbiAgICB2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdLFxuICApIHtcbiAgICB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEodik7XG4gICAgc3VwZXIuX2Zvcm1TY2hlbWEgPSB2O1xuICB9XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNpbmdsZUZvcm1TdHJ1Y3R1cmU6IEZvcm1Hcm91cDxURm9ybUdyb3VwPjtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBkZWxldGUgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGRlbGV0ZVJvd0Z1bmM6IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGE/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ3ZhbHVlJ10sXG4gICAgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9LFxuICApID0+IGFueTtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBhZGQgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGFkZFJvd0Z1bmM6IChpbmRleDogbnVtYmVyLCBkYXRhPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wyd2YWx1ZSddKSA9PiBhbnk7XG4gIEBJbnB1dCgndXNlUGFnaW5hdG9yJykgc2V0IF91c2VQYWdpbmF0b3IodjogYm9vbGVhbikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnVzZVBhZ2luYXRvci5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplLnVwZGF0ZSgocGFnZVNpemUpID0+IHBhZ2VTaXplIHx8IDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZVNpemUuc2V0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgdGFibGVDbGFzcyA9IGlucHV0PCd0YWJsZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLXJlc3BvbnNpdmUgdGFibGUtYm9yZGVybGVzcyc+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtcyA9IHNpZ25hbDxJRm9ybVNjaGVtYVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB1c2VQYWdpbmF0b3IgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBjaGlsZHJlbkZvcm1TY2hlbWFNYXA6IHtcbiAgICBbayBpbiBrZXlvZiBURm9ybUdyb3VwXT86IHtcbiAgICAgIGZvcm1TY2hlbWE6IElGb3JtU2NoZW1hW107XG4gICAgICBmb3JtU2NoZW1hU3RyOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9ID0ge307XG4gIHJlZnJlc2hlcjogbnVtYmVyO1xuICBmb3JtQXJyYXlQYWdpbmF0aW9uU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpIHBhZ2luYXRvckNvbXBvbmVudDogUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1WYWx1ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBmb3JtQXJyYXlMZW5ndGhTaWduYWwgPSBzaWduYWw8bnVtYmVyPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQ8eyBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47IGluZGV4OiBudW1iZXIgfVtdPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtQXJyYXlMZW5ndGhTaWduYWwoKTtcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmZvcm1BcnJheSxcbiAgICAgIGZpbHRlckZvcm1WYWx1ZSA9IHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwcyA9IGZvcm1BcnJheT8uY29udHJvbHM/Lm1hcCgoYywgaW5kZXgpID0+ICh7IGluZGV4LCBmb3JtOiBjIH0pKTtcbiAgICBjb25zdCBmaWx0ZXJPYmplY3QgPSB0aGlzLmZpbHRlckZvcm1BcnJheUdyb3VwUGlwZS5xdWVyeU1hcHBlcihmaWx0ZXJGb3JtVmFsdWUpO1xuICAgIHJldHVybiBmaWx0ZXJPYmplY3RcbiAgICAgID8gZm9ybUdyb3Vwcy5maWx0ZXIoKHsgZm9ybSB9KSA9PlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLmZpbHRlckZ1bmMoZmlsdGVyT2JqZWN0KShmb3JtKSxcbiAgICAgICAgKVxuICAgICAgOiBmb3JtR3JvdXBzO1xuICB9KTtcbiAgcmVhZG9ubHkgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkgPSBjb21wdXRlZDxcbiAgICB7IGZvcm06IEZvcm1Hcm91cDxURm9ybUdyb3VwPjsgaW5kZXg6IG51bWJlciB9W11cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLFxuICAgICAgcGFnZVN0YXRlID0gdGhpcy5wYWdlU3RhdGUoKTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy51c2VQYWdpbmF0b3IoKVxuICAgICAgPyB0aGlzLnBhZ2luYXRvclBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgIGZvcm1BcnJheSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemUoKSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VJbmRleCB8fCAwLFxuICAgICAgICApXG4gICAgICA6IGZvcm1BcnJheTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlcmVkRm9ybUFycmF5KCkubGVuZ3RoKTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlID0gaW5qZWN0KEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSk7XG4gIHB1YmxpYyBwYWdpbmF0b3JQaXBlID0gaW5qZWN0KFBhZ2luYXRvclBpcGUpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZVBhZ2luYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VzZVBhZ2luYXRvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVmcmVzaGVyID0gTWF0aC5yYW5kb20oKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvcm1BcnJheVBhZ2luYXRpb25TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgcGFnZUNoYW5nZWQoJGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnBhZ2VTdGF0ZS5zZXQoJGV2ZW50KTtcbiAgfVxuXG4gIHJlc2V0UGFnaW5hdG9yKCkge1xuICAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py5yZXNldCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZUZvcm1hdEZvcm1TY2hlbWEgPSAoaXRlbXM6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pID0+IHtcbiAgICBpdGVtcy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICBpZiAoeC5vbkNoYW5nZUZ1bmMpIHgudHJpZ2dlck9uQ2hhbmdlT25Jbml0ID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKHgudHlwZSA9PSAnYnV0dG9uJykgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHguY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9O1xuXG4gIG92ZXJyaWRlIGluaXQoc2NoZW1hOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3Jtcy5zZXQoW10pO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlckZvcm0uY29udHJvbHMsIGtleSkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoc2NoZW1hKVxuICAgICAgZm9yIChjb25zdCBzY2hlbWUgb2Ygc2NoZW1hKSB7XG4gICAgICAgIC8vIHNjaGVtZS5mb3JtID0gdGhpcy5mb3JtIHx8IHNjaGVtZS5mb3JtO1xuICAgICAgICB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICAgIH1cbiAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2soXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sXG4gICAgZTogeyBidG4/OiBCdG5Db21wb25lbnQ7IGFjdGlvbkJ1dHRvbjogSVRhYmxlSW5wdXRCdG4gfSxcbiAgKSB7XG4gICAgZS5hY3Rpb25CdXR0b24uYWN0aW9uKHsgaW5kZXgsIGZvcm0sIGJ0bjogZS5idG4gfSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBkZWxldGVSb3dDbGlja2VkID0gKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcm93Rm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LFxuICAgIGNvbmZpZz86IHsgYnRuOiBCdG5Db21wb25lbnQgfSxcbiAgKSA9PiB7XG4gICAgdGhpcy5kZWxldGVSb3dGdW5jKGluZGV4LCByb3dGb3JtPy5nZXRSYXdWYWx1ZSgpLCBjb25maWcpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICB9O1xuXG4gIGFkZFJvd0NsaWNrZWQgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYWRkUm93RnVuYyhpbmRleCArIDEsIHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCkpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICAgIC8vIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH07XG5cbiAgY2hlY2tSZXF1aXJlZEZpZWxkcyA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmUpO1xuICB9O1xuXG4gIG92ZXJyaWRlIGhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lOiBJRm9ybVNjaGVtYSkge1xuICAgIHNjaGVtZS5pZCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCk7XG4gICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpXG4gICAgICBzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID0gdHJ1ZTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jKSB7XG4gICAgICBzY2hlbWUub3B0aW9uc0luaXRGdW5jLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICBzY2hlbWUub3B0aW9ucyA9IHI7XG4gICAgICAgIC8vIHRoaXMub3B0aW9uc01hcFtzY2hlbWUuZmllbGRdID0gcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2NoZW1lLmlzU2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybXMudXBkYXRlKChmaWx0ZXJGb3JtcykgPT4gZmlsdGVyRm9ybXMuY29uY2F0KFtzY2hlbWVdKSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChzY2hlbWUuZmllbGQ/LnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtZS50eXBlID09ICdidXR0b24nKSB7XG4gICAgICBpZiAoc2NoZW1lLmNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgIHRoaXMuY2hpbGRyZW5Gb3JtU2NoZW1hTWFwW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0ge1xuICAgICAgICAgIGZvcm1TY2hlbWE6IHNjaGVtZS5jaGlsZHJlbixcbiAgICAgICAgICBmb3JtU2NoZW1hU3RyOiBzY2hlbWUuY2hpbGRyZW4ubWFwKCh4KSA9PiB4LmZpZWxkIGFzIHN0cmluZyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNjaGVtZS5pc1JlcXVpcmVkID1cbiAgICAgIHNjaGVtZS5pc1JlcXVpcmVkIHx8XG4gICAgICAoPEZvcm1Hcm91cD50aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmU/LmNvbnRyb2xzW3NjaGVtZS5maWVsZF0pPy5oYXNWYWxpZGF0b3IoXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSW5wdXRCdG4gZXh0ZW5kcyBJQnRuIHtcbiAgYWN0aW9uPzogKGFyZz86IHsgaW5kZXg6IG51bWJlcjsgZm9ybTogRm9ybUdyb3VwOyBidG46IEJ0bkNvbXBvbmVudCB9KSA9PiB2b2lkO1xufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWlucHV0XCI+XG4gIEBpZiAoZmlsdGVyRm9ybXMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMge3sgZmlsdGVyQ29udGFpbmVyQ2xhc3MoKSB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgIHRleHQ9XCJ7eyBmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdTaG93IEZpbHRlcicgOiAnSGlkZSBGaWx0ZXInIH19XCJcbiAgICAgICAgICBbaWNvbl09XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdzZWFyY2gnIDogJ2Nsb3NlJ1wiXG4gICAgICAgICAgKG1jbGljayk9XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA9ICFmaWx0ZXJTZWN0aW9uLmhpZGRlblwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcC0zIG10LTMgcm91bmRlZC0xMFwiICNmaWx0ZXJTZWN0aW9uIFtoaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8Zm9ybS1nZW5lcmF0b3IgW2Zvcm1dPVwiZmlsdGVyRm9ybVwiIFtmb3JtU2NoZW1hXT1cImZpbHRlckZvcm1zKClcIiBbZ3JpZExHU3R5bGVdPVwiM1wiIFtzaG93U3VibWl0QnRuXT1cImZhbHNlXCIgKG1jaGFuZ2UpPVwicmVzZXRQYWdpbmF0b3IoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIChtY2xpY2spPVwiZmlsdGVyRm9ybS5yZXNldCgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiIFtuZ0NsYXNzXT1cInsgJ2JvcmRlciByb3VuZGVkLTEwJzogYm9yZGVyKCkgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCIgXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCIge3sgdGFibGVDbGFzcygpIH19IFwiIFtuZ0NsYXNzXT1cInsgJ2lzLXNob3ctZm9ybSc6IGlzU2hvdygpIH1cIj5cbiAgICAgICAgPHRoZWFkIChjbGljayk9XCJ1dGlsaXR5U2VydmljZS5sb2dGb3JtKGZpbHRlcmVkRm9ybUFycmF5KCkpXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZm9ybVNjaGVtYSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInt7IGl0ZW0uY2xzIH19XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAge3sgaXRlbS5pc1JlcXVpcmVkID8gJyonIDogJycgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWlzU2hvdygpKSB7XG4gICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgQGZvciAoYWN0aW9uQnRuIG9mIGFjdGlvbkJ0bnMoKTsgdHJhY2sgYWN0aW9uQnRuKSB7XG4gICAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgQGZvciAoc3ViRm9ybSBvZiBwYWdpbmF0ZWRBbmRGaWx0ZXJlZEZvcm1BcnJheSgpOyB0cmFjayBzdWJGb3JtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgIHRhYmxlLWlucHV0LXJvd1xuICAgICAgICAgICAgICAob25BZGRSb3dGdW5jKT1cImFkZFJvd0NsaWNrZWQoc3ViRm9ybS5pbmRleClcIlxuICAgICAgICAgICAgICBbaXNTaG93XT1cImlzU2hvdygpXCJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwic3ViRm9ybS5mb3JtXCJcbiAgICAgICAgICAgICAgW2FjdGlvbkJ0bnNdPVwiYWN0aW9uQnRucygpXCJcbiAgICAgICAgICAgICAgW2Zvcm1TY2hlbWFdPVwiZm9ybVNjaGVtYSgpXCJcbiAgICAgICAgICAgICAgW2NoaWxkcmVuRm9ybVNjaGVtYU1hcF09XCJjaGlsZHJlbkZvcm1TY2hlbWFNYXBcIlxuICAgICAgICAgICAgICAob25EZWxldGVSb3dGdW5jKT1cIlxuICAgICAgICAgICAgICAgIGRlbGV0ZVJvd0NsaWNrZWQoc3ViRm9ybS5pbmRleCwgc3ViRm9ybS5mb3JtLCB7XG4gICAgICAgICAgICAgICAgICBidG46ICRldmVudD8uYnRuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKG9uQWN0aW9uQnV0dG9uQ2xpY2spPVwiaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2soc3ViRm9ybS5pbmRleCwgc3ViRm9ybS5mb3JtLCAkZXZlbnQpXCI+PC90cj5cbiAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCIgW2NvbFNwYW5dPVwiZm9ybVNjaGVtYSgpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICB7eyAnVGhlcmUgYXJlIG5vIGl0ZW1zJyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgW2hpZGRlbl09XCIhdXNlUGFnaW5hdG9yKCkgfHwgIWZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKCkgfHwgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSA8IHBhZ2VTaXplKClcIj5cbiAgICAgIDxwYWdpbmF0b3JcbiAgICAgICAgI3BhZ2luYXRvclRhZ1xuICAgICAgICBbYXJyYXlMZW5ndGhdPVwiZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplKClcIlxuICAgICAgICBbcmVzZXRJbmRleEZ1bmNdPVwiZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFD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QUFrQixzS0FHbEIsbUJBQW1CLCtCQUNuQixzQkFBc0Isc01BRXRCLGdCQUFnQjs7MkZBUVAsbUJBQW1CO2tCQXhDL0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsUUFBUTt3QkFDUixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsT0FBTzt3QkFDUCxLQUFLO3dCQUNMLElBQUk7d0JBQ0osUUFBUTt3QkFDUixZQUFZO3dCQUNaLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQix3QkFBd0I7d0JBQ3hCLDBCQUEwQjtxQkFDM0IsYUFHVSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQzs4QkFlN0IsU0FBUztzQkFBL0IsS0FBSzt1QkFBQyxVQUFVO2dCQU00QyxXQUFXO3NCQUF2RSxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQU85QyxtQkFBbUI7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixhQUFhO3NCQUFyQixLQUFLO2dCQVFHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ3FCLGFBQWE7c0JBQXZDLEtBQUs7dUJBQUMsY0FBYztnQkF1QlUsa0JBQWtCO3NCQUFoRCxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHtcbiAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICBGb3JtVmFsdWVQaXBlLFxuICBGdW5jdGlvbkNhbGxlcjIsXG4gIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gIFRvQW55UGlwZSxcbn0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcblxuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBKc29uUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdGb3IsXG4gIE5nSWYsXG4gIE5nU3dpdGNoLFxuICBOZ1N3aXRjaENhc2UsXG4gIE5nU3dpdGNoRGVmYXVsdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgVGFibGVJbnB1dFJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtaW5wdXQtcm93L3RhYmxlLWlucHV0LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQnRuIH0gZnJvbSAnLi4vYnRuL2J0bi5tb2RlbCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgUGFnaW5hdG9yUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3BhZ2luYXRvci5waXBlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogVGFibGUgSW5wdXQgQ29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhYmxlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQnRuQ29tcG9uZW50LFxuICAgIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZvcm1WYWx1ZVBpcGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBKc29uUGlwZSxcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNb2RhbENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgUGFnaW5hdG9yUGlwZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRhYmxlSW5wdXRSb3dDb21wb25lbnQsXG4gICAgVG9BbnlQaXBlLFxuICAgIFNES1RyYW5zbGF0ZVBpcGUsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsIFBhZ2luYXRvclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUlucHV0Q29tcG9uZW50PFxuICAgIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgICB9ID0gYW55LFxuICA+XG4gIGV4dGVuZHMgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICByZWFkb25seSBmb3JtQXJyYXkgPSBpbnB1dDxGb3JtQXJyYXk8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pj4oKTtcblxuICByZWFkb25seSBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgcmVhZG9ubHkgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYShcbiAgICB2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdLFxuICApIHtcbiAgICB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEodik7XG4gICAgc3VwZXIuX2Zvcm1TY2hlbWEgPSB2O1xuICB9XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNpbmdsZUZvcm1TdHJ1Y3R1cmU6IEZvcm1Hcm91cDxURm9ybUdyb3VwPjtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBkZWxldGUgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGRlbGV0ZVJvd0Z1bmM6IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGE/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ3ZhbHVlJ10sXG4gICAgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9LFxuICApID0+IGFueTtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBhZGQgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGFkZFJvd0Z1bmM6IChpbmRleDogbnVtYmVyLCBkYXRhPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wyd2YWx1ZSddKSA9PiBhbnk7XG4gIEBJbnB1dCgndXNlUGFnaW5hdG9yJykgc2V0IF91c2VQYWdpbmF0b3IodjogYm9vbGVhbikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnVzZVBhZ2luYXRvci5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplLnVwZGF0ZSgocGFnZVNpemUpID0+IHBhZ2VTaXplIHx8IDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZVNpemUuc2V0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgdGFibGVDbGFzcyA9IGlucHV0PCd0YWJsZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLXJlc3BvbnNpdmUgdGFibGUtYm9yZGVybGVzcyc+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtcyA9IHNpZ25hbDxJRm9ybVNjaGVtYVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB1c2VQYWdpbmF0b3IgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBjaGlsZHJlbkZvcm1TY2hlbWFNYXA6IHtcbiAgICBbayBpbiBrZXlvZiBURm9ybUdyb3VwXT86IHtcbiAgICAgIGZvcm1TY2hlbWE6IElGb3JtU2NoZW1hW107XG4gICAgICBmb3JtU2NoZW1hU3RyOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9ID0ge307XG4gIHJlZnJlc2hlcjogbnVtYmVyO1xuICBmb3JtQXJyYXlQYWdpbmF0aW9uU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpIHBhZ2luYXRvckNvbXBvbmVudDogUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1WYWx1ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBmb3JtQXJyYXlMZW5ndGhTaWduYWwgPSB0b1NpZ25hbDxudW1iZXI+KFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmZvcm1BcnJheSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZm9ybSkgPT4gZm9ybT8udmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IGZvcm0/Lmxlbmd0aCkpKSxcbiAgICApLFxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuZm9ybUFycmF5TGVuZ3RoU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mb3JtQXJyYXkoKSxcbiAgICAgIGZpbHRlckZvcm1WYWx1ZSA9IHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwcyA9IGZvcm1BcnJheT8uY29udHJvbHM/Lm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICBpbmRleCxcbiAgICAgIGZvcm06IGMsXG4gICAgICBpZDogdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKSxcbiAgICB9KSk7XG4gICAgY29uc3QgZmlsdGVyT2JqZWN0ID0gdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUucXVlcnlNYXBwZXIoZmlsdGVyRm9ybVZhbHVlKTtcbiAgICByZXR1cm4gZmlsdGVyT2JqZWN0XG4gICAgICA/IGZvcm1Hcm91cHMuZmlsdGVyKCh7IGZvcm0gfSkgPT5cbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm1BcnJheUdyb3VwUGlwZS5maWx0ZXJGdW5jKGZpbHRlck9iamVjdCkoZm9ybSksXG4gICAgICAgIClcbiAgICAgIDogZm9ybUdyb3VwcztcbiAgfSk7XG4gIHJlYWRvbmx5IHBhZ2luYXRlZEFuZEZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmlsdGVyZWRGb3JtQXJyYXkoKSxcbiAgICAgIHBhZ2VTdGF0ZSA9IHRoaXMucGFnZVN0YXRlKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlUGFnaW5hdG9yKClcbiAgICAgID8gdGhpcy5wYWdpbmF0b3JQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICBmb3JtQXJyYXksXG4gICAgICAgICAgcGFnZVN0YXRlPy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VTaXplKCksXG4gICAgICAgICAgcGFnZVN0YXRlPy5wYWdlSW5kZXggfHwgMCxcbiAgICAgICAgKVxuICAgICAgOiBmb3JtQXJyYXk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLmxlbmd0aCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIHV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcbiAgcHVibGljIGZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSA9IGluamVjdChGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUpO1xuICBwdWJsaWMgcGFnaW5hdG9yUGlwZSA9IGluamVjdChQYWdpbmF0b3JQaXBlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51c2VQYWdpbmF0b3IgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl91c2VQYWdpbmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlZnJlc2hlciA9IE1hdGgucmFuZG9tKCk7XG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JtQXJyYXlQYWdpbmF0aW9uU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHJldHVybiBzdXBlci5vbkRlc3Ryb3koKTtcbiAgfVxuXG4gIHBhZ2VDaGFuZ2VkKCRldmVudDogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KSB7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KCRldmVudCk7XG4gIH1cblxuICByZXNldFBhZ2luYXRvcigpIHtcbiAgICB0aGlzLnBhZ2luYXRvckNvbXBvbmVudD8ucmVzZXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVGb3JtYXRGb3JtU2NoZW1hID0gKGl0ZW1zOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgaWYgKHgub25DaGFuZ2VGdW5jKSB4LnRyaWdnZXJPbkNoYW5nZU9uSW5pdCA9IHRydWU7XG4gICAgICBlbHNlIGlmICh4LnR5cGUgPT0gJ2J1dHRvbicpIHRoaXMucHJlRm9ybWF0Rm9ybVNjaGVtYSh4LmNoaWxkcmVuKTtcbiAgICB9KTtcbiAgfTtcblxuICBvdmVycmlkZSBpbml0KHNjaGVtYTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybXMuc2V0KFtdKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLCBrZXkpKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgaWYgKHNjaGVtYSlcbiAgICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSkge1xuICAgICAgICAvLyBzY2hlbWUuZm9ybSA9IHRoaXMuZm9ybSB8fCBzY2hlbWUuZm9ybTtcbiAgICAgICAgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKHNjaGVtZSk7XG4gICAgICB9XG4gICAgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LFxuICAgIGU6IHsgYnRuPzogQnRuQ29tcG9uZW50OyBhY3Rpb25CdXR0b246IElUYWJsZUlucHV0QnRuIH0sXG4gICkge1xuICAgIGUuYWN0aW9uQnV0dG9uLmFjdGlvbih7IGluZGV4LCBmb3JtLCBidG46IGUuYnRuIH0pO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgZGVsZXRlUm93Q2xpY2tlZCA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHJvd0Zvcm06IEZvcm1Hcm91cDxURm9ybUdyb3VwPixcbiAgICBjb25maWc/OiB7IGJ0bjogQnRuQ29tcG9uZW50IH0sXG4gICkgPT4ge1xuICAgIHRoaXMuZGVsZXRlUm93RnVuYyhpbmRleCwgcm93Rm9ybT8uZ2V0UmF3VmFsdWUoKSwgY29uZmlnKTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfTtcblxuICBhZGRSb3dDbGlja2VkID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmFkZFJvd0Z1bmMoaW5kZXggKyAxLCB0aGlzLmZpbHRlckZvcm1WYWx1ZVNpZ25hbCgpKTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgICAvLyB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9O1xuXG4gIGNoZWNrUmVxdWlyZWRGaWVsZHMgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2codGhpcy5zaW5nbGVGb3JtU3RydWN0dXJlKTtcbiAgfTtcblxuICBvdmVycmlkZSBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWEpIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID09IG51bGwgJiYgKCFzY2hlbWUudmFsdWVGaWVsZCB8fCAhc2NoZW1lLmxhYmVsRmllbGQpKVxuICAgICAgc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9IHRydWU7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYykge1xuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNjaGVtZS5pc1NlYXJjaEZpZWxkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm1zLnVwZGF0ZSgoZmlsdGVyRm9ybXMpID0+IGZpbHRlckZvcm1zLmNvbmNhdChbc2NoZW1lXSkpO1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woc2NoZW1lLmZpZWxkPy50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUudHlwZSA9PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHNjaGVtZS5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICAgICB0aGlzLmNoaWxkcmVuRm9ybVNjaGVtYU1hcFtzY2hlbWUuZmllbGQgYXMgc3RyaW5nXSA9IHtcbiAgICAgICAgICBmb3JtU2NoZW1hOiBzY2hlbWUuY2hpbGRyZW4sXG4gICAgICAgICAgZm9ybVNjaGVtYVN0cjogc2NoZW1lLmNoaWxkcmVuLm1hcCgoeCkgPT4geC5maWVsZCBhcyBzdHJpbmcpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzY2hlbWUuaXNSZXF1aXJlZCA9XG4gICAgICBzY2hlbWUuaXNSZXF1aXJlZCB8fFxuICAgICAgKDxGb3JtR3JvdXA+dGhpcy5zaW5nbGVGb3JtU3RydWN0dXJlPy5jb250cm9sc1tzY2hlbWUuZmllbGRdKT8uaGFzVmFsaWRhdG9yKFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUlucHV0QnRuIGV4dGVuZHMgSUJ0biB7XG4gIGFjdGlvbj86IChhcmc/OiB7IGluZGV4OiBudW1iZXI7IGZvcm06IEZvcm1Hcm91cDsgYnRuOiBCdG5Db21wb25lbnQgfSkgPT4gdm9pZDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1pbnB1dFwiPlxuICBAaWYgKGZpbHRlckZvcm1zKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHt7IGZpbHRlckNvbnRhaW5lckNsYXNzKCkgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICB0ZXh0PVwie3sgZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnU2hvdyBGaWx0ZXInIDogJ0hpZGUgRmlsdGVyJyB9fVwiXG4gICAgICAgICAgW2ljb25dPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnc2VhcmNoJyA6ICdjbG9zZSdcIlxuICAgICAgICAgIChtY2xpY2spPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPSAhZmlsdGVyU2VjdGlvbi5oaWRkZW5cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMyBtdC0zIHJvdW5kZWQtMTBcIiAjZmlsdGVyU2VjdGlvbiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0tZ2VuZXJhdG9yIFtmb3JtXT1cImZpbHRlckZvcm1cIiBbZm9ybVNjaGVtYV09XCJmaWx0ZXJGb3JtcygpXCIgW2dyaWRMR1N0eWxlXT1cIjNcIiBbc2hvd1N1Ym1pdEJ0bl09XCJmYWxzZVwiIChtY2hhbmdlKT1cInJlc2V0UGFnaW5hdG9yKClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiAobWNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGVcIiBbbmdDbGFzc109XCJ7ICdib3JkZXIgcm91bmRlZC0xMCc6IGJvcmRlcigpIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiIFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiIHt7IHRhYmxlQ2xhc3MoKSB9fSBcIiBbbmdDbGFzc109XCJ7ICdpcy1zaG93LWZvcm0nOiBpc1Nob3coKSB9XCI+XG4gICAgICAgIDx0aGVhZCAoY2xpY2spPVwidXRpbGl0eVNlcnZpY2UubG9nRm9ybShmaWx0ZXJlZEZvcm1BcnJheSgpKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7eyBpdGVtLmNscyB9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaXNSZXF1aXJlZCA/ICcqJyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Nob3coKSkge1xuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbkJ0biBvZiBhY3Rpb25CdG5zKCk7IHRyYWNrIGFjdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHN1YkZvcm0gb2YgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkoKTsgdHJhY2sgc3ViRm9ybS5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICB0YWJsZS1pbnB1dC1yb3dcbiAgICAgICAgICAgICAgKG9uQWRkUm93RnVuYyk9XCJhZGRSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2lzU2hvd109XCJpc1Nob3coKVwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cInN1YkZvcm0uZm9ybVwiXG4gICAgICAgICAgICAgIFthY3Rpb25CdG5zXT1cImFjdGlvbkJ0bnMoKVwiXG4gICAgICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZvcm1TY2hlbWEoKVwiXG4gICAgICAgICAgICAgIFtjaGlsZHJlbkZvcm1TY2hlbWFNYXBdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXCJcbiAgICAgICAgICAgICAgKG9uRGVsZXRlUm93RnVuYyk9XCJcbiAgICAgICAgICAgICAgICBkZWxldGVSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwge1xuICAgICAgICAgICAgICAgICAgYnRuOiAkZXZlbnQ/LmJ0blxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkFjdGlvbkJ1dHRvbkNsaWNrKT1cImhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwgJGV2ZW50KVwiPjwvdHI+XG4gICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtjb2xTcGFuXT1cImZvcm1TY2hlbWEoKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAge3sgJ1RoZXJlIGFyZSBubyBpdGVtcycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIlwiIFtoaWRkZW5dPVwiIXVzZVBhZ2luYXRvcigpIHx8ICFmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpIHx8IGZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKCkgPCBwYWdlU2l6ZSgpXCI+XG4gICAgICA8cGFnaW5hdG9yXG4gICAgICAgICNwYWdpbmF0b3JUYWdcbiAgICAgICAgW2FycmF5TGVuZ3RoXT1cImZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKClcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgW3Jlc2V0SW5kZXhGdW5jXT1cImZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -15247,6 +15247,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
15247
15247
  class TableInputComponent extends FormGeneratorComponent {
15248
15248
  constructor() {
15249
15249
  super(...arguments);
15250
+ this.formArray = input();
15250
15251
  this.filterContainerClass = input();
15251
15252
  this.border = input(true);
15252
15253
  this.isShow = input();
@@ -15259,11 +15260,15 @@ class TableInputComponent extends FormGeneratorComponent {
15259
15260
  this.usePaginator = signal(true);
15260
15261
  this.childrenFormSchemaMap = {};
15261
15262
  this.filterFormValueSignal = toSignal(this.filterForm.valueChanges);
15262
- this.formArrayLengthSignal = signal(undefined);
15263
+ this.formArrayLengthSignal = toSignal(toObservable(this.formArray).pipe(switchMap((form) => form?.valueChanges.pipe(map$1(() => form?.length)))));
15263
15264
  this.filteredFormArray = computed(() => {
15264
15265
  this.formArrayLengthSignal();
15265
- const formArray = this.formArray, filterFormValue = this.filterFormValueSignal();
15266
- const formGroups = formArray?.controls?.map((c, index) => ({ index, form: c }));
15266
+ const formArray = this.formArray(), filterFormValue = this.filterFormValueSignal();
15267
+ const formGroups = formArray?.controls?.map((c, index) => ({
15268
+ index,
15269
+ form: c,
15270
+ id: this.utilityService.generateUUID(),
15271
+ }));
15267
15272
  const filterObject = this.filterFormArrayGroupPipe.queryMapper(filterFormValue);
15268
15273
  return filterObject
15269
15274
  ? formGroups.filter(({ form }) => this.filterFormArrayGroupPipe.filterFunc(filterObject)(form))
@@ -15271,7 +15276,6 @@ class TableInputComponent extends FormGeneratorComponent {
15271
15276
  });
15272
15277
  this.paginatedAndFilteredFormArray = computed(() => {
15273
15278
  const formArray = this.filteredFormArray(), pageState = this.pageState();
15274
- // debugger;
15275
15279
  return this.usePaginator()
15276
15280
  ? this.paginatorPipe.transform(formArray, pageState?.pageSize || this.pageSize(), pageState?.pageIndex || 0)
15277
15281
  : formArray;
@@ -15301,14 +15305,6 @@ class TableInputComponent extends FormGeneratorComponent {
15301
15305
  console.log(this.singleFormStructure);
15302
15306
  };
15303
15307
  }
15304
- // @Input() pageType
15305
- set _formArray(v) {
15306
- this.formArray = v;
15307
- if (v)
15308
- v.valueChanges.subscribe((r) => {
15309
- this.formArrayLengthSignal.set(v?.length);
15310
- });
15311
- }
15312
15308
  set _pageSize(v) {
15313
15309
  this.pageSize.set(v);
15314
15310
  }
@@ -15395,7 +15391,7 @@ class TableInputComponent extends FormGeneratorComponent {
15395
15391
  this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
15396
15392
  }
15397
15393
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
15398
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { _formArray: { classPropertyName: "_formArray", publicName: "formArray", isSignal: false, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
15394
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
15399
15395
  }
15400
15396
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, decorators: [{
15401
15397
  type: Component,
@@ -15431,11 +15427,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
15431
15427
  SDKTranslatePipe,
15432
15428
  FilterFormArrayGroupPipe,
15433
15429
  ValidationMessageComponent,
15434
- ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
15435
- }], propDecorators: { _formArray: [{
15436
- type: Input,
15437
- args: ['formArray']
15438
- }], _pageSize: [{
15430
+ ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
15431
+ }], propDecorators: { _pageSize: [{
15439
15432
  type: Input,
15440
15433
  args: ['pageSize']
15441
15434
  }], _formSchema: [{