@mediusinc/mng-commons 5.1.0-rc.0 → 5.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +7 -6
  2. package/core/helpers/coercion.d.ts +1 -0
  3. package/core/index.d.ts +0 -1
  4. package/esm2022/core/components/notification/notification-wrapper.component.mjs +5 -6
  5. package/esm2022/core/components/pages/error/error.page.component.mjs +4 -4
  6. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -4
  7. package/esm2022/core/directives/component.directive.mjs +3 -3
  8. package/esm2022/core/directives/template.directive.mjs +3 -3
  9. package/esm2022/core/helpers/coercion.mjs +4 -1
  10. package/esm2022/core/index.mjs +1 -2
  11. package/esm2022/core/pipes/boolean.pipe.mjs +3 -3
  12. package/esm2022/core/pipes/class-map.pipe.mjs +3 -3
  13. package/esm2022/core/pipes/enum.pipe.mjs +5 -5
  14. package/esm2022/core/pipes/enumerate-async.pipe.mjs +3 -3
  15. package/esm2022/core/pipes/enumerate.pipe.mjs +3 -3
  16. package/esm2022/core/pipes/getter.pipe.mjs +3 -3
  17. package/esm2022/core/pipes/i18n-property.pipe.mjs +3 -3
  18. package/esm2022/core/pipes/json-path.pipe.mjs +3 -3
  19. package/esm2022/core/pipes/parametrize.pipe.mjs +3 -3
  20. package/esm2022/core/pipes/template.pipe.mjs +3 -3
  21. package/esm2022/core/security/permission.service.mjs +3 -3
  22. package/esm2022/core/services/commons-init.service.mjs +3 -3
  23. package/esm2022/core/services/commons-router.service.mjs +3 -3
  24. package/esm2022/core/services/commons.service.mjs +3 -3
  25. package/esm2022/core/services/local-storage-config.service.mjs +3 -3
  26. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +4 -4
  27. package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
  28. package/esm2022/form/components/dropdown/dropdown.component.mjs +4 -4
  29. package/esm2022/form/directives/input-trim.directive.mjs +14 -19
  30. package/esm2022/table/api/models/table.model.mjs +1 -1
  31. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +4 -4
  32. package/esm2022/table/components/column-value/column-value.component.mjs +43 -53
  33. package/esm2022/table/components/table/table.component.mjs +300 -365
  34. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +3 -3
  35. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +3 -3
  36. package/esm2022/table/services/data-list.service.mjs +3 -3
  37. package/esm2022/tableview/action/components/action/action.component.mjs +5 -5
  38. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +6 -7
  39. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +5 -4
  40. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
  41. package/esm2022/tableview/action/components/route/action-route.component.mjs +3 -3
  42. package/esm2022/tableview/action/components/table/action-table.component.mjs +43 -92
  43. package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
  44. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
  45. package/esm2022/tableview/action/services/navigation.service.mjs +3 -3
  46. package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
  47. package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
  48. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +1 -1
  49. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +1 -1
  50. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +4 -1
  51. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +6 -14
  52. package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +1 -1
  53. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
  54. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +5 -5
  55. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
  56. package/esm2022/tableview/api/index.mjs +1 -2
  57. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +17 -17
  58. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
  59. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
  60. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
  61. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +47 -6
  62. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  63. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
  64. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +4 -4
  65. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  66. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +15 -29
  67. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +10 -11
  68. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +18 -22
  69. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  70. package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +4 -4
  71. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +3 -3
  72. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  73. package/esm2022/tableview/editor/helpers/editor-formly.mjs +14 -2
  74. package/esm2022/tableview/editor/helpers/editor-validators.mjs +25 -0
  75. package/esm2022/tableview/editor/helpers/formly-config.mjs +7 -5
  76. package/esm2022/tableview/editor/services/form-editor.service.mjs +3 -3
  77. package/esm2022/tableview/index.mjs +2 -1
  78. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +3 -3
  79. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +4 -4
  80. package/fesm2022/mediusinc-mng-commons-core.mjs +69 -111
  81. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  82. package/fesm2022/mediusinc-mng-commons-form.mjs +23 -27
  83. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  84. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  85. package/fesm2022/mediusinc-mng-commons-table.mjs +357 -431
  86. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  87. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +13 -39
  88. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  89. package/fesm2022/mediusinc-mng-commons-tableview.mjs +252 -240
  90. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  91. package/form/directives/input-trim.directive.d.ts +5 -8
  92. package/package.json +15 -15
  93. package/table/api/models/table.model.d.ts +1 -1
  94. package/table/components/column-value/column-value.component.d.ts +11 -17
  95. package/table/components/table/table.component.d.ts +43 -47
  96. package/tableview/action/components/editor/action-editor.component.d.ts +1 -2
  97. package/tableview/action/components/table/action-table.component.d.ts +26 -29
  98. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +3 -3
  99. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +3 -3
  100. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +2 -1
  101. package/tableview/api/editor/descriptors/field.descriptor.d.ts +13 -9
  102. package/tableview/api/editor/models/field-action-context.model.d.ts +1 -1
  103. package/tableview/api/editor/models/form-editor.interface.d.ts +23 -6
  104. package/tableview/api/editor/models/formly-custom-field.model.d.ts +22 -19
  105. package/tableview/api/editor/models/formly-field.model.d.ts +20 -0
  106. package/tableview/api/index.d.ts +0 -1
  107. package/tableview/editor/components/editor/form-editor.component.d.ts +7 -7
  108. package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +1 -1
  109. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +3 -0
  110. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -3
  111. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +3 -6
  112. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +2 -4
  113. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +4 -8
  114. package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +3 -3
  115. package/tableview/editor/helpers/editor-validators.d.ts +7 -0
  116. package/tableview/index.d.ts +1 -0
  117. package/version-info.json +6 -6
  118. package/core/directives/dialog-keydown-handler.directive.d.ts +0 -12
  119. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +0 -49
  120. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +0 -23
  121. package/tableview/api/editor/helpers/field-validators.d.ts +0 -7
@@ -1,14 +1,14 @@
1
1
  import { AsyncPipe, NgStyle } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, DestroyRef, Injector, ViewChild, inject } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, Injector, ViewChild, inject, signal } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { TranslateModule } from '@ngx-translate/core';
5
5
  import { ButtonModule } from 'primeng/button';
6
6
  import { DialogModule } from 'primeng/dialog';
7
7
  import { InputTextModule } from 'primeng/inputtext';
8
8
  import { RippleModule } from 'primeng/ripple';
9
- import { ReplaySubject, Subject, debounceTime, distinctUntilChanged } from 'rxjs';
9
+ import { Subject, debounceTime, distinctUntilChanged } from 'rxjs';
10
10
  import { startWith } from 'rxjs/operators';
11
- import { CommonsInternalError, DialogKeydownHandlerDirective, FilterMatchMode, LoggerService, TemplateDirective, fromSubscribeError, getErrorLogLevel, getObjectPropertyByPath, toObservable } from '@mediusinc/mng-commons/core';
11
+ import { CommonsInternalError, FilterMatchMode, LoggerService, TemplateDirective, fromSubscribeError, getErrorLogLevel, getObjectPropertyByPath, toObservable } from '@mediusinc/mng-commons/core';
12
12
  import { TableComponent } from '@mediusinc/mng-commons/table';
13
13
  import { FieldManyToManyEditorActionEnum, FormFieldEventComponentSubtype, FormFieldEventDialogSubtype, FormFieldEventTypeEnum } from '@mediusinc/mng-commons/tableview/api';
14
14
  import { provideViewContainer } from '../../../../../action/services/providers/provide-view-container';
@@ -26,23 +26,19 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
26
26
  this.injector = inject(Injector);
27
27
  this.destroyRef = inject(DestroyRef);
28
28
  this.logger = inject(LoggerService).create('FormlyFieldTableDialogMultiselectComponent');
29
- this.itemsSubject = new ReplaySubject(1);
30
- this.itemsAsync = this.itemsSubject.asObservable();
31
- this.addItemsSubject = new ReplaySubject(1);
32
- this.addItemsAsync = this.addItemsSubject.asObservable();
29
+ this.items = signal([]);
30
+ this.addItems = signal({ data: [], totalCount: 0 });
33
31
  this.dialogDataProviderService = null;
34
- this.dialogIsLoadingSubject = new ReplaySubject(1);
35
32
  this.isDialogVisible = false;
36
33
  this.dialogAreItemsLoaded = false;
37
34
  this.dialogSelectedAddItems = [];
38
- this.dialogIsLoading$ = this.dialogIsLoadingSubject.asObservable();
35
+ this.dialogIsLoading = signal(false);
39
36
  this.hasAddAction = false;
40
37
  this.hasDeleteAction = false;
41
38
  this.searchDebounceSubject = new Subject();
42
39
  }
43
40
  ngOnInit() {
44
41
  super.ngOnInit();
45
- this.dialogIsLoadingSubject.next(false);
46
42
  if (this.descriptor.lookupTableDataProvider.serviceType) {
47
43
  this.dialogDataProviderService = this.injector.get(this.descriptor.lookupTableDataProvider.serviceType);
48
44
  }
@@ -57,7 +53,7 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
57
53
  eventSubtype: FormFieldEventComponentSubtype.ON_INIT
58
54
  });
59
55
  this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe(v => {
60
- this.itemsSubject.next(v ?? []);
56
+ this.items.set(v ?? []);
61
57
  // emit lifecycle event
62
58
  this.descriptor.nextEvent(FormFieldEventTypeEnum.ValueChange, this, {
63
59
  value: v ?? []
@@ -65,7 +61,7 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
65
61
  this.props.onValueChange?.(this.field, v);
66
62
  });
67
63
  this.searchDebounceSubject.pipe(debounceTime(200), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe(query => {
68
- this.addTableComponent?.primeTable.filterGlobal(query, 'contains');
64
+ this.addTableComponent?.primeTable().filterGlobal(query, 'contains');
69
65
  });
70
66
  }
71
67
  ngAfterViewInit() {
@@ -87,7 +83,7 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
87
83
  if (!this.dialogAreItemsLoaded) {
88
84
  // wrapped in request animation frame due to primeng bug: https://github.com/primefaces/primeng/issues/12980
89
85
  requestAnimationFrame(() => {
90
- this.dialogIsLoadingSubject.next(true);
86
+ this.dialogIsLoading.set(true);
91
87
  const params = { limit: 50, sort: [] };
92
88
  if (this.descriptor.lookupTableDescriptor.sorts.some(s => s.defaultIsEnabled)) {
93
89
  this.descriptor.lookupTableDescriptor.sorts.forEach(s => {
@@ -115,12 +111,12 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
115
111
  res.data = res.data.filter(i => filterValues.indexOf(i[this.descriptor.excludeFilterProperty]) < 0);
116
112
  res.totalCount = res.data.length;
117
113
  }
118
- this.addItemsSubject.next(res);
114
+ this.addItems.set(res);
119
115
  this.dialogAreItemsLoaded = true;
120
- this.dialogIsLoadingSubject.next(false);
116
+ this.dialogIsLoading.set(false);
121
117
  },
122
118
  error: err => {
123
- this.dialogIsLoadingSubject.next(false);
119
+ this.dialogIsLoading.set(false);
124
120
  const error = fromSubscribeError(err, 'FormlyFieldTableDialogMultiselectComponent', {
125
121
  params: params
126
122
  });
@@ -145,7 +141,7 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
145
141
  dialogVisible: false
146
142
  });
147
143
  }
148
- addItems() {
144
+ onAddItems() {
149
145
  let value = this.formControl.value;
150
146
  if (!Array.isArray(value)) {
151
147
  value = [];
@@ -181,14 +177,14 @@ export class FormlyFieldTableDialogMultiselectComponent extends ACommonsFormlyFi
181
177
  const query = event.target.value;
182
178
  this.searchDebounceSubject.next(query);
183
179
  }
184
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldTableDialogMultiselectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
185
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: FormlyFieldTableDialogMultiselectComponent, isStandalone: true, selector: "mng-formly-table-multiselect-add-field", providers: [provideViewContainer(false)], viewQueries: [{ propertyName: "addTableComponent", first: true, predicate: ["addTableComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @if (hasAddAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnCustomLast\" let-item=\"rowItem\">\n @if (hasDeleteAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </ng-template>\n</mng-table>\n\n@if (hasAddAction) {\n <p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: props.label! | translate}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-dialog-sm mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\" class=\"table-container\" mngDialogKeydownHandler>\n <div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 formly-field-table-multiselect-dialog-form-container\">\n <div class=\"mng-formly-field-table-multiselect-dialog-table\">\n <mng-table\n #addTableComponent\n [descriptor]=\"descriptor.lookupTableDescriptor\"\n [globalFilterFields]=\"descriptor.searchFields\"\n [result]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n @if (descriptor.searchEnabled) {\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex\">\n <span class=\"p-input-icon-left ml-auto\" [ngStyle]=\"{width: 'unset'}\">\n <i class=\"pi pi-search\"></i>\n <input pInputText type=\"text\" (input)=\"onSearch($event)\" [placeholder]=\"'general.search' | translate\" />\n </span>\n </div>\n </ng-template>\n }\n </mng-table>\n </div>\n </div>\n <div class=\"flex flex-row justify-content-end mng-formly-field-table-multiselect-dialog-footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-primary\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </div>\n </div>\n </ng-template>\n </p-dialog>\n}\n", styles: [".table-footer{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-items:center;align-content:center;margin-top:2rem}.table-container{overflow:hidden}.table-footer button{width:8rem}.table-footer button:not(:first-child){margin-left:1.5rem}.table-scroll{max-height:75vh;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i5.Ripple, selector: "[pRipple]" }, { kind: "directive", type: TemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: DialogKeydownHandlerDirective, selector: "[mngDialogKeydownHandler]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
180
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldTableDialogMultiselectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
181
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: FormlyFieldTableDialogMultiselectComponent, isStandalone: true, selector: "mng-formly-table-multiselect-add-field", providers: [provideViewContainer(false)], viewQueries: [{ propertyName: "addTableComponent", first: true, predicate: ["addTableComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"items()\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @if (hasAddAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnCustomLast\" let-item=\"rowItem\">\n @if (hasDeleteAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </ng-template>\n</mng-table>\n\n@if (hasAddAction) {\n <p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: props.label! | translate}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-dialog-sm mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\" class=\"table-container\" mngDialogKeydownHandler>\n <div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 formly-field-table-multiselect-dialog-form-container\">\n <div class=\"mng-formly-field-table-multiselect-dialog-table\">\n <mng-table\n #addTableComponent\n [descriptor]=\"descriptor.lookupTableDescriptor\"\n [globalFilterFields]=\"descriptor.searchFields\"\n [result]=\"addItems()\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading()\"\n (selectionChange)=\"onSelectionChange($event)\">\n @if (descriptor.searchEnabled) {\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex\">\n <span class=\"p-input-icon-left ml-auto\" [ngStyle]=\"{width: 'unset'}\">\n <i class=\"pi pi-search\"></i>\n <input pInputText type=\"text\" (input)=\"onSearch($event)\" [placeholder]=\"'general.search' | translate\" />\n </span>\n </div>\n </ng-template>\n }\n </mng-table>\n </div>\n </div>\n <div class=\"flex flex-row justify-content-end mng-formly-field-table-multiselect-dialog-footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-primary\"\n (click)=\"onAddItems()\"\n [loading]=\"dialogIsLoading()\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </div>\n </div>\n </ng-template>\n </p-dialog>\n}\n", styles: [".table-footer{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-items:center;align-content:center;margin-top:2rem}.table-container{overflow:hidden}.table-footer button{width:8rem}.table-footer button:not(:first-child){margin-left:1.5rem}.table-scroll{max-height:75vh;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "cellClickEnabled", "selectionMode", "selectionEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i5.Ripple, selector: "[pRipple]" }, { kind: "directive", type: TemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
186
182
  }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldTableDialogMultiselectComponent, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldTableDialogMultiselectComponent, decorators: [{
188
184
  type: Component,
189
- args: [{ standalone: true, selector: 'mng-formly-table-multiselect-add-field', imports: [TranslateModule, AsyncPipe, TableComponent, DialogModule, ButtonModule, RippleModule, TemplateDirective, InputTextModule, NgStyle, DialogKeydownHandlerDirective], providers: [provideViewContainer(false)], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"itemsAsync\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @if (hasAddAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnCustomLast\" let-item=\"rowItem\">\n @if (hasDeleteAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </ng-template>\n</mng-table>\n\n@if (hasAddAction) {\n <p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: props.label! | translate}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-dialog-sm mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\" class=\"table-container\" mngDialogKeydownHandler>\n <div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 formly-field-table-multiselect-dialog-form-container\">\n <div class=\"mng-formly-field-table-multiselect-dialog-table\">\n <mng-table\n #addTableComponent\n [descriptor]=\"descriptor.lookupTableDescriptor\"\n [globalFilterFields]=\"descriptor.searchFields\"\n [result]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading$\"\n (selectionChange)=\"onSelectionChange($event)\">\n @if (descriptor.searchEnabled) {\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex\">\n <span class=\"p-input-icon-left ml-auto\" [ngStyle]=\"{width: 'unset'}\">\n <i class=\"pi pi-search\"></i>\n <input pInputText type=\"text\" (input)=\"onSearch($event)\" [placeholder]=\"'general.search' | translate\" />\n </span>\n </div>\n </ng-template>\n }\n </mng-table>\n </div>\n </div>\n <div class=\"flex flex-row justify-content-end mng-formly-field-table-multiselect-dialog-footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-primary\"\n (click)=\"addItems()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </div>\n </div>\n </ng-template>\n </p-dialog>\n}\n", styles: [".table-footer{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-items:center;align-content:center;margin-top:2rem}.table-container{overflow:hidden}.table-footer button{width:8rem}.table-footer button:not(:first-child){margin-left:1.5rem}.table-scroll{max-height:75vh;overflow-y:auto}\n"] }]
185
+ args: [{ standalone: true, selector: 'mng-formly-table-multiselect-add-field', imports: [TranslateModule, AsyncPipe, TableComponent, DialogModule, ButtonModule, RippleModule, TemplateDirective, InputTextModule, NgStyle], providers: [provideViewContainer(false)], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.mainTableDescriptor\" [items]=\"items()\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header pt-0\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @if (hasAddAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded mng-button-xs\"\n (click)=\"openAddDialog()\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnCustomLast\" let-item=\"rowItem\">\n @if (hasDeleteAction && !options.formState?.disabled) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-danger mng-button-xs\"\n (click)=\"removeItem(item)\"\n [disabled]=\"formControl!.disabled\"></button>\n }\n </ng-template>\n</mng-table>\n\n@if (hasAddAction) {\n <p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.addItem' | translate: {item: props.label! | translate}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-dialog-sm mng-formly-field-table-multiselect-dialog\">\n <ng-template pTemplate=\"content\" class=\"table-container\" mngDialogKeydownHandler>\n <div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 formly-field-table-multiselect-dialog-form-container\">\n <div class=\"mng-formly-field-table-multiselect-dialog-table\">\n <mng-table\n #addTableComponent\n [descriptor]=\"descriptor.lookupTableDescriptor\"\n [globalFilterFields]=\"descriptor.searchFields\"\n [result]=\"addItems()\"\n [selectionEnabled]=\"true\"\n [loading]=\"dialogIsLoading()\"\n (selectionChange)=\"onSelectionChange($event)\">\n @if (descriptor.searchEnabled) {\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex\">\n <span class=\"p-input-icon-left ml-auto\" [ngStyle]=\"{width: 'unset'}\">\n <i class=\"pi pi-search\"></i>\n <input pInputText type=\"text\" (input)=\"onSearch($event)\" [placeholder]=\"'general.search' | translate\" />\n </span>\n </div>\n </ng-template>\n }\n </mng-table>\n </div>\n </div>\n <div class=\"flex flex-row justify-content-end mng-formly-field-table-multiselect-dialog-footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.add' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-primary\"\n (click)=\"onAddItems()\"\n [loading]=\"dialogIsLoading()\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </div>\n </div>\n </ng-template>\n </p-dialog>\n}\n", styles: [".table-footer{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-items:center;align-content:center;margin-top:2rem}.table-container{overflow:hidden}.table-footer button{width:8rem}.table-footer button:not(:first-child){margin-left:1.5rem}.table-scroll{max-height:75vh;overflow-y:auto}\n"] }]
190
186
  }], propDecorators: { addTableComponent: [{
191
187
  type: ViewChild,
192
188
  args: ['addTableComponent']
193
189
  }] } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2VkaXRvci9jb21wb25lbnRzL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvZWRpdG9yL2NvbXBvbmVudHMvZm9ybWx5L2ZpZWxkcy9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLW11bHRpc2VsZWN0L2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQWdCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVJLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFhLGFBQWEsRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFB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Q0FBQyxLQUFLLENBQUMsQ0FBQyx5S0MzQzVDLDR4SUFzRkEsb1hENUNjLGVBQWUsdUZBQUUsU0FBUyw4Q0FBRSxjQUFjLHdZQUFFLFlBQVksODBCQUFFLFlBQVksc0tBQUUsWUFBWSw4RkFBRSxpQkFBaUIsMEZBQUUsZUFBZSxvR0FBRSxPQUFPLDJFQUFFLDZCQUE2Qjs7MkZBSWpLLDBDQUEwQztrQkFUdEQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sd0NBQXdDLFdBR3pDLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsQ0FBQyxhQUNoSyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNOzhCQThCZixpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGUsIE5nU3R5bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7RGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQge0lucHV0VGV4dE1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQ29tbW9uc0ludGVybmFsRXJyb3IsXG4gICAgRGF0YUxpc3RQYXJhbXMsXG4gICAgRGF0YUxpc3RSZXN1bHQsXG4gICAgRGlhbG9nS2V5ZG93bkhhbmRsZXJEaXJlY3RpdmUsXG4gICAgRmlsdGVyTWF0Y2hNb2RlLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgZnJvbVN1YnNjcmliZUVycm9yLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgsXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1RhYmxlQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlJztcbmltcG9ydCB7XG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bSxcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUsXG4gICAgRm9ybUZpZWxkRXZlbnRUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge3Byb3ZpZGVWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hY3Rpb24vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtdmlldy1jb250YWluZXInO1xuaW1wb3J0IHtBQ29tbW9uc0Zvcm1seUZpZWxkVHlwZX0gZnJvbSAnLi4vZm9ybWx5LWZpZWxkLXR5cGUuYWJzdHJhY3QuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1mb3JtbHktdGFibGUtbXVsdGlzZWxlY3QtYWRkLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIEFzeW5jUGlwZSwgVGFibGVDb21wb25lbnQsIERpYWxvZ01vZHVsZSwgQnV0dG9uTW9kdWxlLCBSaXBwbGVNb2R1bGUsIFRlbXBsYXRlRGlyZWN0aXZlLCBJbnB1dFRleHRNb2R1bGUsIE5nU3R5bGUsIERpYWxvZ0tleWRvd25IYW5kbGVyRGlyZWN0aXZlXSxcbiAgICBwcm92aWRlcnM6IFtwcm92aWRlVmlld0NvbnRhaW5lcihmYWxzZSldLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudFxuICAgIGV4dGVuZHMgQUNvbW1vbnNGb3JtbHlGaWVsZFR5cGU8YW55LCBhbnksIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8YW55LCBhbnk+PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nTXVsdGlzZWxlY3RDb21wb25lbnQnKTtcblxuICAgIHB1YmxpYyBpdGVtc1N1YmplY3Q6IFN1YmplY3Q8QXJyYXk8YW55Pj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgaXRlbXNBc3luYzogT2JzZXJ2YWJsZTxBcnJheTxhbnk+PiA9IHRoaXMuaXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhZGRJdGVtc1N1YmplY3Q6IFN1YmplY3Q8RGF0YUxpc3RSZXN1bHQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHVibGljIGFkZEl0ZW1zQXN5bmM6IE9ic2VydmFibGU8RGF0YUxpc3RSZXN1bHQ+ID0gdGhpcy5hZGRJdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIGRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBkaWFsb2dJc0xvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ0FyZUl0ZW1zTG9hZGVkID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ1NlbGVjdGVkQWRkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBwdWJsaWMgZGlhbG9nSXNMb2FkaW5nJCA9IHRoaXMuZGlhbG9nSXNMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyBoYXNBZGRBY3Rpb24gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGFzRGVsZXRlQWN0aW9uID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHNlYXJjaERlYm91bmNlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgbG9va3VwRGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgQFZpZXdDaGlsZCgnYWRkVGFibGVDb21wb25lbnQnKSBhZGRUYWJsZUNvbXBvbmVudD86IFRhYmxlQ29tcG9uZW50O1xuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuZGlhbG9nSXNMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxhbnk+KHRoaXMuZGVzY3JpcHRvci5sb29rdXBUYWJsZURhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNBZGRBY3Rpb24gPSB0aGlzLmRlc2NyaXB0b3IuYWN0aW9ucy5zb21lKGEgPT4gYSA9PT0gRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bS5BZGQpO1xuICAgICAgICB0aGlzLmhhc0RlbGV0ZUFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5hY3Rpb25zLnNvbWUoYSA9PiBhID09PSBGaWVsZE1hbnlUb01hbnlFZGl0b3JBY3Rpb25FbnVtLkRlbGV0ZSk7XG5cbiAgICAgICAgLy8gaW5pdCB2YWx1ZXNcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yPy5uZXh0RXZlbnQoRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLk9OX0lOSVRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5mb3JtQ29udHJvbC52YWx1ZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zU3ViamVjdC5uZXh0KHYgPz8gW10pO1xuXG4gICAgICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChGb3JtRmllbGRFdmVudFR5cGVFbnVtLlZhbHVlQ2hhbmdlLCB0aGlzLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHYgPz8gW11cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVmFsdWVDaGFuZ2U/Lih0aGlzLmZpZWxkLCB2KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hEZWJvdW5jZVN1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShxdWVyeSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRhYmxlQ29tcG9uZW50Py5wcmltZVRhYmxlLmZpbHRlckdsb2JhbChxdWVyeSwgJ2NvbnRhaW5zJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcj8ubmV4dEV2ZW50KEZvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9WSUVXX0lOSVRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxvb2t1cERhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3I/Lm5leHRFdmVudChGb3JtRmllbGRFdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fREVTVFJPWVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuQWRkRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlbGVjdGVkQWRkSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCkge1xuICAgICAgICAgICAgLy8gd3JhcHBlZCBpbiByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBkdWUgdG8gcHJpbWVuZyBidWc6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcmltZWZhY2VzL3ByaW1lbmcvaXNzdWVzLzEyOTgwXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nSXNMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7bGltaXQ6IDUwLCBzb3J0OiBbXX07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5sb29rdXBUYWJsZURlc2NyaXB0b3Iuc29ydHMuc29tZShzID0+IHMuZGVmYXVsdElzRW5hYmxlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGVzY3JpcHRvci5zb3J0cy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuZGVmYXVsdElzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zb3J0Py5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VuZGluZzogcy5kZWZhdWx0SXNBc2NlbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IuaGFzTG9va3VwRXhjbHVkZVZhbHVlcyAmJiB0aGlzLmRlc2NyaXB0b3IubG9va3VwVGFibGVEYXRhUHJvdmlkZXIuaXNMYXp5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlcyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUubWFwKChpOiBhbnkpID0+IGdldE9iamVjdFByb3BlcnR5QnlQYXRoKGksIHRoaXMuZGVzY3JpcHRvci5leGNsdWRlVmFsdWVQcm9wZXJ0eSkpO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLmRlc2NyaXB0b3IuZXhjbHVkZUZpbHRlclByb3BlcnR5IGFzIGtleW9mIG9iamVjdF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZS5Ob3RJbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubG9va3VwRGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuZGVzY3JpcHRvci5sb29rdXBUYWJsZURhdGFQcm92aWRlcj8uZ2V0QWxsKHBhcmFtcywgdGhpcy5kaWFsb2dEYXRhUHJvdmlkZXJTZXJ2aWNlKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IuaGFzTG9va3VwRXhjbHVkZVZhbHVlcyAmJiAhdGhpcy5kZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGF0YVByb3ZpZGVyLmlzTGF6eSAmJiByZXMgJiYgQXJyYXkuaXNBcnJheShyZXMuZGF0YSkgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlcyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUubWFwKChpOiBhbnkpID0+IGdldE9iamVjdFByb3BlcnR5QnlQYXRoKGksIHRoaXMuZGVzY3JpcHRvci5leGNsdWRlVmFsdWVQcm9wZXJ0eSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEuZmlsdGVyKGkgPT4gZmlsdGVyVmFsdWVzLmluZGV4T2YoaVt0aGlzLmRlc2NyaXB0b3IuZXhjbHVkZUZpbHRlclByb3BlcnR5XSkgPCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMudG90YWxDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtc1N1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dJc0xvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGZyb21TdWJzY3JpYmVFcnJvcihlcnIsICdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nTXVsdGlzZWxlY3RDb21wb25lbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKGVycm9yLCBnZXRFcnJvckxvZ0xldmVsKGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChGb3JtRmllbGRFdmVudFR5cGVFbnVtLkRpYWxvZ0xpZmVjeWNsZSwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUuVklTSUJJTElUWSxcbiAgICAgICAgICAgIGRpYWxvZ1Zpc2libGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3RlZEFkZEl0ZW1zID0gaXRlbXM7XG4gICAgfVxuXG4gICAgaGlkZURpYWxvZygpIHtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KEZvcm1GaWVsZEV2ZW50VHlwZUVudW0uRGlhbG9nTGlmZWN5Y2xlLCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkSXRlbXMoKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWUsIC4uLnRoaXMuZGlhbG9nU2VsZWN0ZWRBZGRJdGVtc107XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRBZGRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmRpYWxvZ0FyZUl0ZW1zTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlkZURpYWxvZygpO1xuICAgIH1cblxuICAgIHJlbW92ZUl0ZW0oaXRlbTogYW55KSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcGFyZVByb3BlcnR5ID0gdGhpcy5kZXNjcmlwdG9yLm1haW5UYWJsZURlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eVxuICAgICAgICAgICAgPyB0aGlzLmRlc2NyaXB0b3IubWFpblRhYmxlRGVzY3JpcHRvci50cmFja1Byb3BlcnR5XG4gICAgICAgICAgICA6IHRoaXMuZGVzY3JpcHRvci5tYWluVGFibGVEZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgIGlmICghY29tcGFyZVByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIGl0ZW1zLCBwbGVhc2UgcHJvdmlkZSBtYWluIHRhYmxlIGRhdGEga2V5IHByb3BlcnR5IG9yIG1vZGVsIGlkIHByb3BlcnR5LicsIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50RXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcigoaTogYW55KSA9PiBnZXRPYmplY3RQcm9wZXJ0eUJ5UGF0aChpLCBjb21wYXJlUHJvcGVydHkpICE9PSBnZXRPYmplY3RQcm9wZXJ0eUJ5UGF0aChpdGVtLCBjb21wYXJlUHJvcGVydHkpKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLnNlYXJjaERlYm91bmNlU3ViamVjdC5uZXh0KHF1ZXJ5KTtcbiAgICB9XG59XG4iLCI8bW5nLXRhYmxlIFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3IubWFpblRhYmxlRGVzY3JpcHRvclwiIFtpdGVtc109XCJpdGVtc0FzeW5jXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1uZ1RlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciB0YWJsZS1oZWFkZXIgcHQtMFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibW5nLWRhdGF0YWJsZS1mb3JtLWxhYmVsIHAtMCBtLTBcIiBbZm9yXT1cImtleVwiXG4gICAgICAgICAgICAgICAgPnt7IHByb3BzLmxhYmVsISB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIEBpZiAocHJvcHMucmVxdWlyZWQgJiYgcHJvcHNbJ2hpZGVSZXF1aXJlZE1hcmtlciddICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIEBpZiAoaGFzQWRkQWN0aW9uICYmICFvcHRpb25zLmZvcm1TdGF0ZT8uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgbW5nLWJ1dHRvbi14c1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQWRkRGlhbG9nKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2whLmRpc2FibGVkXCI+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIG1uZ1RlbXBsYXRlPVwiY29sdW1uQ3VzdG9tTGFzdFwiIGxldC1pdGVtPVwicm93SXRlbVwiPlxuICAgICAgICBAaWYgKGhhc0RlbGV0ZUFjdGlvbiAmJiAhb3B0aW9ucy5mb3JtU3RhdGU/LmRpc2FibGVkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1kYW5nZXIgbW5nLWJ1dHRvbi14c1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbCEuZGlzYWJsZWRcIj48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG48L21uZy10YWJsZT5cblxuQGlmIChoYXNBZGRBY3Rpb24pIHtcbiAgICA8cC1kaWFsb2dcbiAgICAgICAgWyh2aXNpYmxlKV09XCJpc0RpYWxvZ1Zpc2libGVcIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW2hlYWRlcl09XCInZ2VuZXJhbC5hZGRJdGVtJyB8IHRyYW5zbGF0ZToge2l0ZW06IHByb3BzLmxhYmVsISB8IHRyYW5zbGF0ZX1cIlxuICAgICAgICBbbW9kYWxdPVwidHJ1ZVwiXG4gICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJwLWZsdWlkIG1uZy1kaWFsb2cgbW5nLWRpYWxvZy1zbSBtbmctZm9ybWx5LWZpZWxkLXRhYmxlLW11bHRpc2VsZWN0LWRpYWxvZ1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiIGNsYXNzPVwidGFibGUtY29udGFpbmVyXCIgbW5nRGlhbG9nS2V5ZG93bkhhbmRsZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgZm9ybWx5LWZpZWxkLXRhYmxlLW11bHRpc2VsZWN0LWRpYWxvZy1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW5nLWZvcm1seS1maWVsZC10YWJsZS1tdWx0aXNlbGVjdC1kaWFsb2ctdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWRkVGFibGVDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGVzY3JpcHRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJkZXNjcmlwdG9yLnNlYXJjaEZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF09XCJhZGRJdGVtc0FzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJkaWFsb2dJc0xvYWRpbmckXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRlc2NyaXB0b3Iuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnQgbWwtYXV0b1wiIFtuZ1N0eWxlXT1cInt3aWR0aDogJ3Vuc2V0J31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwiJ2dlbmVyYWwuc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctdGFibGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgbW5nLWZvcm1seS1maWVsZC10YWJsZS1tdWx0aXNlbGVjdC1kaWFsb2ctZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ2dlbmVyYWwuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIChjbGljayk9XCJoaWRlRGlhbG9nKClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2dlbmVyYWwuYWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIihkaWFsb2dJc0xvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uPVwicGkgcGktc3BpbiBwaS1zcGlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmRpc2FibGVkXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtZGlhbG9nPlxufVxuIl19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2VkaXRvci9jb21wb25lbnRzL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvZWRpdG9yL2NvbXBvbmVudHMvZm9ybWx5L2ZpZWxkcy9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLW11bHRpc2VsZWN0L2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQWdCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwSixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQWdCLFlBQVksRUFB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QUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsYUFDakksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFDdkIsdUJBQXVCLENBQUMsTUFBTTs4QkEyQmYsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ1N0eWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7RGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQge0lucHV0VGV4dE1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQ29tbW9uc0ludGVybmFsRXJyb3IsXG4gICAgRGF0YUxpc3RQYXJhbXMsXG4gICAgRGF0YUxpc3RSZXN1bHQsXG4gICAgRmlsdGVyTWF0Y2hNb2RlLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgZnJvbVN1YnNjcmliZUVycm9yLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgsXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1RhYmxlQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlJztcbmltcG9ydCB7XG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bSxcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUsXG4gICAgRm9ybUZpZWxkRXZlbnRUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge3Byb3ZpZGVWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hY3Rpb24vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtdmlldy1jb250YWluZXInO1xuaW1wb3J0IHtBQ29tbW9uc0Zvcm1seUZpZWxkVHlwZX0gZnJvbSAnLi4vZm9ybWx5LWZpZWxkLXR5cGUuYWJzdHJhY3QuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1mb3JtbHktdGFibGUtbXVsdGlzZWxlY3QtYWRkLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIEFzeW5jUGlwZSwgVGFibGVDb21wb25lbnQsIERpYWxvZ01vZHVsZSwgQnV0dG9uTW9kdWxlLCBSaXBwbGVNb2R1bGUsIFRlbXBsYXRlRGlyZWN0aXZlLCBJbnB1dFRleHRNb2R1bGUsIE5nU3R5bGVdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVWaWV3Q29udGFpbmVyKGZhbHNlKV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBBQ29tbW9uc0Zvcm1seUZpZWxkVHlwZTxhbnksIGFueSwgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxhbnksIGFueT4+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKS5jcmVhdGUoJ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudCcpO1xuXG4gICAgcHVibGljIGl0ZW1zID0gc2lnbmFsPGFueVtdPihbXSk7XG4gICAgcHVibGljIGFkZEl0ZW1zID0gc2lnbmFsPERhdGFMaXN0UmVzdWx0Pih7ZGF0YTogW10sIHRvdGFsQ291bnQ6IDB9KTtcblxuICAgIHByaXZhdGUgZGlhbG9nRGF0YVByb3ZpZGVyU2VydmljZTogYW55ID0gbnVsbDtcblxuICAgIHB1YmxpYyBpc0RpYWxvZ1Zpc2libGUgPSBmYWxzZTtcbiAgICBwdWJsaWMgZGlhbG9nQXJlSXRlbXNMb2FkZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgZGlhbG9nU2VsZWN0ZWRBZGRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICAgIHB1YmxpYyBkaWFsb2dJc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgcHVibGljIGhhc0FkZEFjdGlvbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNEZWxldGVBY3Rpb24gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgc2VhcmNoRGVib3VuY2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBsb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBAVmlld0NoaWxkKCdhZGRUYWJsZUNvbXBvbmVudCcpIGFkZFRhYmxlQ29tcG9uZW50PzogVGFibGVDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5sb29rdXBUYWJsZURhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhUHJvdmlkZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8YW55Pih0aGlzLmRlc2NyaXB0b3IubG9va3VwVGFibGVEYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzQWRkQWN0aW9uID0gdGhpcy5kZXNjcmlwdG9yLmFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueVRvTWFueUVkaXRvckFjdGlvbkVudW0uQWRkKTtcbiAgICAgICAgdGhpcy5oYXNEZWxldGVBY3Rpb24gPSB0aGlzLmRlc2NyaXB0b3IuYWN0aW9ucy5zb21lKGEgPT4gYSA9PT0gRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bS5EZWxldGUpO1xuXG4gICAgICAgIC8vIGluaXQgdmFsdWVzXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcj8ubmV4dEV2ZW50KEZvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9JTklUXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXQodiA/PyBbXSk7XG5cbiAgICAgICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KEZvcm1GaWVsZEV2ZW50VHlwZUVudW0uVmFsdWVDaGFuZ2UsIHRoaXMsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdiA/PyBbXVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMucHJvcHMub25WYWx1ZUNoYW5nZT8uKHRoaXMuZmllbGQsIHYpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlYXJjaERlYm91bmNlU3ViamVjdC5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHF1ZXJ5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGFibGVDb21wb25lbnQ/LnByaW1lVGFibGUoKS5maWx0ZXJHbG9iYWwocXVlcnksICdjb250YWlucycpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3I/Lm5leHRFdmVudChGb3JtRmllbGRFdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fVklFV19JTklUXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5sb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yPy5uZXh0RXZlbnQoRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLk9OX0RFU1RST1lcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlbkFkZERpYWxvZygpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3RlZEFkZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuaXNEaWFsb2dWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nQXJlSXRlbXNMb2FkZWQpIHtcbiAgICAgICAgICAgIC8vIHdyYXBwZWQgaW4gcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgZHVlIHRvIHByaW1lbmcgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2lzc3Vlcy8xMjk4MFxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBEYXRhTGlzdFBhcmFtcyA9IHtsaW1pdDogNTAsIHNvcnQ6IFtdfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGVzY3JpcHRvci5zb3J0cy5zb21lKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IubG9va3VwVGFibGVEZXNjcmlwdG9yLnNvcnRzLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5kZWZhdWx0SXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQ/LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjZW5kaW5nOiBzLmRlZmF1bHRJc0FzY2VuZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5oYXNMb29rdXBFeGNsdWRlVmFsdWVzICYmIHRoaXMuZGVzY3JpcHRvci5sb29rdXBUYWJsZURhdGFQcm92aWRlci5pc0xhenkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5tYXAoKGk6IGFueSkgPT4gZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgoaSwgdGhpcy5kZXNjcmlwdG9yLmV4Y2x1ZGVWYWx1ZVByb3BlcnR5KSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuZGVzY3JpcHRvci5leGNsdWRlRmlsdGVyUHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUodGhpcy5kZXNjcmlwdG9yLmxvb2t1cFRhYmxlRGF0YVByb3ZpZGVyPy5nZXRBbGwocGFyYW1zLCB0aGlzLmRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2UpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5oYXNMb29rdXBFeGNsdWRlVmFsdWVzICYmICF0aGlzLmRlc2NyaXB0b3IubG9va3VwVGFibGVEYXRhUHJvdmlkZXIuaXNMYXp5ICYmIHJlcyAmJiBBcnJheS5pc0FycmF5KHJlcy5kYXRhKSAmJiByZXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5tYXAoKGk6IGFueSkgPT4gZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgoaSwgdGhpcy5kZXNjcmlwdG9yLmV4Y2x1ZGVWYWx1ZVByb3BlcnR5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5maWx0ZXIoaSA9PiBmaWx0ZXJWYWx1ZXMuaW5kZXhPZihpW3RoaXMuZGVzY3JpcHRvci5leGNsdWRlRmlsdGVyUHJvcGVydHldKSA8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy50b3RhbENvdW50ID0gcmVzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW1zLnNldChyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nSXNMb2FkaW5nLnNldChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZnJvbVN1YnNjcmliZUVycm9yKGVyciwgJ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coZXJyb3IsIGdldEVycm9yTG9nTGV2ZWwoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KEZvcm1GaWVsZEV2ZW50VHlwZUVudW0uRGlhbG9nTGlmZWN5Y2xlLCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZShpdGVtczogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlbGVjdGVkQWRkSXRlbXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICBoaWRlRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogRm9ybUZpZWxkRXZlbnREaWFsb2dTdWJ0eXBlLlZJU0lCSUxJVFksXG4gICAgICAgICAgICBkaWFsb2dWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZEl0ZW1zKCkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlLCAuLi50aGlzLmRpYWxvZ1NlbGVjdGVkQWRkSXRlbXNdO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmRpYWxvZ1NlbGVjdGVkQWRkSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICByZW1vdmVJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBhcmVQcm9wZXJ0eSA9IHRoaXMuZGVzY3JpcHRvci5tYWluVGFibGVEZXNjcmlwdG9yLnRyYWNrUHJvcGVydHlcbiAgICAgICAgICAgID8gdGhpcy5kZXNjcmlwdG9yLm1haW5UYWJsZURlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eVxuICAgICAgICAgICAgOiB0aGlzLmRlc2NyaXB0b3IubWFpblRhYmxlRGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5O1xuICAgICAgICBpZiAoIWNvbXBhcmVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdDYW5ub3QgY29tcGFyZSBpdGVtcywgcGxlYXNlIHByb3ZpZGUgbWFpbiB0YWJsZSBkYXRhIGtleSBwcm9wZXJ0eSBvciBtb2RlbCBpZCBwcm9wZXJ0eS4nLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoKGk6IGFueSkgPT4gZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgoaSwgY29tcGFyZVByb3BlcnR5KSAhPT0gZ2V0T2JqZWN0UHJvcGVydHlCeVBhdGgoaXRlbSwgY29tcGFyZVByb3BlcnR5KSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nQXJlSXRlbXNMb2FkZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hEZWJvdW5jZVN1YmplY3QubmV4dChxdWVyeSk7XG4gICAgfVxufVxuIiwiPG1uZy10YWJsZSBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yLm1haW5UYWJsZURlc2NyaXB0b3JcIiBbaXRlbXNdPVwiaXRlbXMoKVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtaGVhZGVyIHB0LTBcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1uZy1kYXRhdGFibGUtZm9ybS1sYWJlbCBwLTAgbS0wXCIgW2Zvcl09XCJrZXlcIlxuICAgICAgICAgICAgICAgID57eyBwcm9wcy5sYWJlbCEgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnJlcXVpcmVkICYmIHByb3BzWydoaWRlUmVxdWlyZWRNYXJrZXInXSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICBAaWYgKGhhc0FkZEFjdGlvbiAmJiAhb3B0aW9ucy5mb3JtU3RhdGU/LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIG1uZy1idXR0b24teHNcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkFkZERpYWxvZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sIS5kaXNhYmxlZFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNvbHVtbkN1c3RvbUxhc3RcIiBsZXQtaXRlbT1cInJvd0l0ZW1cIj5cbiAgICAgICAgQGlmIChoYXNEZWxldGVBY3Rpb24gJiYgIW9wdGlvbnMuZm9ybVN0YXRlPy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tZGFuZ2VyIG1uZy1idXR0b24teHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2whLmRpc2FibGVkXCI+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tbmctdGFibGU+XG5cbkBpZiAoaGFzQWRkQWN0aW9uKSB7XG4gICAgPHAtZGlhbG9nXG4gICAgICAgIFsodmlzaWJsZSldPVwiaXNEaWFsb2dWaXNpYmxlXCJcbiAgICAgICAgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgIFtoZWFkZXJdPVwiJ2dlbmVyYWwuYWRkSXRlbScgfCB0cmFuc2xhdGU6IHtpdGVtOiBwcm9wcy5sYWJlbCEgfCB0cmFuc2xhdGV9XCJcbiAgICAgICAgW21vZGFsXT1cInRydWVcIlxuICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICBzdHlsZUNsYXNzPVwicC1mbHVpZCBtbmctZGlhbG9nIG1uZy1kaWFsb2ctc20gbW5nLWZvcm1seS1maWVsZC10YWJsZS1tdWx0aXNlbGVjdC1kaWFsb2dcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIG1uZ0RpYWxvZ0tleWRvd25IYW5kbGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGZvcm1seS1maWVsZC10YWJsZS1tdWx0aXNlbGVjdC1kaWFsb2ctZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1uZy1mb3JtbHktZmllbGQtdGFibGUtbXVsdGlzZWxlY3QtZGlhbG9nLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FkZFRhYmxlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci5sb29rdXBUYWJsZURlc2NyaXB0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZGVzY3JpcHRvci5zZWFyY2hGaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRdPVwiYWRkSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiZGlhbG9nSXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGVzY3JpcHRvci5zZWFyY2hFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCIgW25nU3R5bGVdPVwie3dpZHRoOiAndW5zZXQnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25TZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCInZ2VuZXJhbC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCBtbmctZm9ybWx5LWZpZWxkLXRhYmxlLW11bHRpc2VsZWN0LWRpYWxvZy1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInZ2VuZXJhbC5jYW5jZWwnIHwgdHJhbnNsYXRlXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgKGNsaWNrKT1cImhpZGVEaWFsb2coKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZ2VuZXJhbC5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJkaWFsb2dJc0xvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nSWNvbj1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLWRpYWxvZz5cbn1cbiJdfQ==
@@ -9,10 +9,10 @@ import * as i2 from "primeng/api";
9
9
  import * as i3 from "@ngx-translate/core";
10
10
  import * as i4 from "@ngx-formly/core";
11
11
  export class FormlyFieldTabsComponent extends ACommonsFormlyFieldType {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldTabsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: FormlyFieldTabsComponent, isStandalone: true, selector: "mng-formly-field-tabs", usesInheritance: true, ngImport: i0, template: "<p-tabView [scrollable]=\"true\">\n @for (tab of field.fieldGroup; track tab) {\n <p-tabPanel [header]=\"tab.props?.label! | translate\" [headerStyleClass]=\"formControl!.valid ? 'p-tabview-title' : undefined\">\n <ng-template pTemplate=\"header\">\n <span class=\"p-tabview-title\" [class.p-tabview-title-error]=\"formState.submittedOn && formState['tab_' + (tab.id ? tab.id : tab.props?.label!) + '_invalid']\">{{\n tab.props?.label! | translate\n }}</span>\n </ng-template>\n <formly-field [field]=\"tab\"></formly-field>\n </p-tabPanel>\n }\n</p-tabView>\n", dependencies: [{ kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i1.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i1.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldTabsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: FormlyFieldTabsComponent, isStandalone: true, selector: "mng-formly-field-tabs", usesInheritance: true, ngImport: i0, template: "<p-tabView [scrollable]=\"true\">\n @for (tab of field.fieldGroup; track tab) {\n <p-tabPanel [header]=\"tab.props?.label! | translate\" [headerStyleClass]=\"formControl!.valid ? 'p-tabview-title' : undefined\">\n <ng-template pTemplate=\"header\">\n <span class=\"p-tabview-title\" [class.p-tabview-title-error]=\"formState.submittedOn && formState['tab_' + (tab.id ? tab.id : tab.props?.label!) + '_invalid']\">{{\n tab.props?.label! | translate\n }}</span>\n </ng-template>\n <formly-field [field]=\"tab\"></formly-field>\n </p-tabPanel>\n }\n</p-tabView>\n", dependencies: [{ kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i1.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i1.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldTabsComponent, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldTabsComponent, decorators: [{
16
16
  type: Component,
17
17
  args: [{ standalone: true, selector: 'mng-formly-field-tabs', imports: [TabViewModule, TranslateModule, FormlyModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-tabView [scrollable]=\"true\">\n @for (tab of field.fieldGroup; track tab) {\n <p-tabPanel [header]=\"tab.props?.label! | translate\" [headerStyleClass]=\"formControl!.valid ? 'p-tabview-title' : undefined\">\n <ng-template pTemplate=\"header\">\n <span class=\"p-tabview-title\" [class.p-tabview-title-error]=\"formState.submittedOn && formState['tab_' + (tab.id ? tab.id : tab.props?.label!) + '_invalid']\">{{\n tab.props?.label! | translate\n }}</span>\n </ng-template>\n <formly-field [field]=\"tab\"></formly-field>\n </p-tabPanel>\n }\n</p-tabView>\n" }]
18
18
  }] });
@@ -14,10 +14,10 @@ export class ACommonsFormlyFieldType extends FieldType {
14
14
  ngOnInit() {
15
15
  this.props.fieldComponent = this;
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ACommonsFormlyFieldType, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
18
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ACommonsFormlyFieldType, usesInheritance: true, ngImport: i0 }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ACommonsFormlyFieldType, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
18
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: ACommonsFormlyFieldType, usesInheritance: true, ngImport: i0 }); }
19
19
  }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ACommonsFormlyFieldType, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ACommonsFormlyFieldType, decorators: [{
21
21
  type: Directive
22
22
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXR5cGUuYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10eXBlLmFic3RyYWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLM0MsTUFBTSxPQUFnQix1QkFBK0YsU0FBUSxTQUFtQztJQUM1SixJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBd0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBYSxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUEwQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFhLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFtRCxDQUFDO0lBQ3BGLENBQUM7OEdBZmlCLHVCQUF1QjtrR0FBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUQ1QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7RmllbGRUeXBlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcblxuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yLCBDb21tb25zRm9ybWx5RmllbGRDb25maWcsIENvbW1vbnNGb3JtbHlGb3JtT3B0aW9ucywgQ29tbW9uc0Zvcm1seUZvcm1TdGF0ZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUNvbW1vbnNGb3JtbHlGaWVsZFR5cGU8TW9kZWwsIEVkaXRvck1vZGVsLCBEZXNjcmlwdG9yID0gQUZpZWxkRGVzY3JpcHRvcjxNb2RlbCwgRWRpdG9yTW9kZWw+PiBleHRlbmRzIEZpZWxkVHlwZTxDb21tb25zRm9ybWx5RmllbGRDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBnZXQgZGVzY3JpcHRvcigpOiBEZXNjcmlwdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGVzY3JpcHRvciBhcyBEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGdldCBvcHRpb25zKCk6IENvbW1vbnNGb3JtbHlGb3JtT3B0aW9uczxNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5vcHRpb25zIGFzIENvbW1vbnNGb3JtbHlGb3JtT3B0aW9uczxNb2RlbD47XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZ2V0IGZvcm1TdGF0ZSgpOiBDb21tb25zRm9ybWx5Rm9ybVN0YXRlPE1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZSB8fCB7fTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5maWVsZENvbXBvbmVudCA9IHRoaXMgYXMgQUNvbW1vbnNGb3JtbHlGaWVsZFR5cGU8TW9kZWwsIEVkaXRvck1vZGVsPjtcbiAgICB9XG59XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXR5cGUuYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10eXBlLmFic3RyYWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLM0MsTUFBTSxPQUFnQix1QkFDbEIsU0FBUSxTQUF1RDtJQUcvRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBd0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBYSxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFnRCxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFhLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFtRCxDQUFDO0lBQ3BGLENBQUM7OEdBbEJpQix1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFENUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpZWxkVHlwZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbmltcG9ydCB7QUZpZWxkRGVzY3JpcHRvciwgQ29tbW9uc0Zvcm1seUZpZWxkQ29uZmlnLCBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnMsIENvbW1vbnNGb3JtbHlGb3JtU3RhdGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFDb21tb25zRm9ybWx5RmllbGRUeXBlPE1vZGVsLCBFZGl0b3JNb2RlbCwgRGVzY3JpcHRvciA9IEFGaWVsZERlc2NyaXB0b3I8TW9kZWwsIEVkaXRvck1vZGVsPj5cbiAgICBleHRlbmRzIEZpZWxkVHlwZTxDb21tb25zRm9ybWx5RmllbGRDb25maWc8TW9kZWwsIEVkaXRvck1vZGVsPj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAgIGdldCBkZXNjcmlwdG9yKCk6IERlc2NyaXB0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kZXNjcmlwdG9yIGFzIERlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZ2V0IG9wdGlvbnMoKTogQ29tbW9uc0Zvcm1seUZvcm1PcHRpb25zPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLm9wdGlvbnMgYXMgQ29tbW9uc0Zvcm1seUZvcm1PcHRpb25zPEVkaXRvck1vZGVsPjtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBnZXQgZm9ybVN0YXRlKCk6IENvbW1vbnNGb3JtbHlGb3JtU3RhdGU8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZm9ybVN0YXRlIHx8IHt9O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnByb3BzLmZpZWxkQ29tcG9uZW50ID0gdGhpcyBhcyBBQ29tbW9uc0Zvcm1seUZpZWxkVHlwZTxNb2RlbCwgRWRpdG9yTW9kZWw+O1xuICAgIH1cbn1cbiJdfQ==
@@ -23,10 +23,10 @@ export class FormlyFieldNoLabelWrapperComponent extends FieldWrapper {
23
23
  }
24
24
  return field;
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldNoLabelWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: FormlyFieldNoLabelWrapperComponent, isStandalone: true, selector: "mng-formly-field-no-label-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field table'\">\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError && shouldShowError()) {\n <small class=\"block p-error\">\n <formly-validation-message [field]=\"sanitizeErrorsForGroups(field)\"></formly-validation-message>\n </small>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldNoLabelWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: FormlyFieldNoLabelWrapperComponent, isStandalone: true, selector: "mng-formly-field-no-label-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field table'\">\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError && shouldShowError()) {\n <small class=\"block p-error\">\n <formly-validation-message [field]=\"sanitizeErrorsForGroups(field)\"></formly-validation-message>\n </small>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldNoLabelWrapperComponent, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldNoLabelWrapperComponent, decorators: [{
30
30
  type: Component,
31
31
  args: [{ standalone: true, selector: 'mng-formly-field-no-label-wrapper', imports: [FormlyModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field table'\">\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError && shouldShowError()) {\n <small class=\"block p-error\">\n <formly-validation-message [field]=\"sanitizeErrorsForGroups(field)\"></formly-validation-message>\n </small>\n }\n</div>\n" }]
32
32
  }] });
@@ -20,10 +20,10 @@ export class FormlyFieldWrapperComponent extends FieldWrapper {
20
20
  this.props?.['descriptor']?.withHelpText('');
21
21
  }
22
22
  }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: FormlyFieldWrapperComponent, isStandalone: true, selector: "mng-formly-field-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field'\">\n <div class=\"grid mt-0\">\n @if (props.label) {\n <label [for]=\"key\" class=\"col\" [class]=\"props['descriptor']?.['labelClassName'] ?? ''\"\n >{{ props!.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n }\n </div>\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError) {\n <small class=\"p-error block\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: FormlyFieldWrapperComponent, isStandalone: true, selector: "mng-formly-field-wrapper", usesInheritance: true, ngImport: i0, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field'\">\n <div class=\"grid mt-0\">\n @if (props.label) {\n <label [for]=\"key\" class=\"col\" [class]=\"props['descriptor']?.['labelClassName'] ?? ''\"\n >{{ props!.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n }\n </div>\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError) {\n <small class=\"p-error block\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: FormlyFieldWrapperComponent, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: FormlyFieldWrapperComponent, decorators: [{
27
27
  type: Component,
28
28
  args: [{ standalone: true, selector: 'mng-formly-field-wrapper', imports: [TranslateModule, FormlyModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"props['descriptor']?.['fieldClassName'] ?? 'field'\">\n <div class=\"grid mt-0\">\n @if (props.label) {\n <label [for]=\"key\" class=\"col\" [class]=\"props['descriptor']?.['labelClassName'] ?? ''\"\n >{{ props!.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n }\n </div>\n <ng-container #fieldComponent></ng-container>\n @if (props['descriptor']?.['helpText']) {\n <small class=\"block\">{{ props['descriptor']?.['helpText'] | translate }}</small>\n }\n @if (showError) {\n <small class=\"p-error block\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n }\n</div>\n" }]
29
29
  }] });