@muraai/mnl-form 0.0.1-alpha-32ca3fa → 0.0.1-alpha-11e96eb

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 (65) hide show
  1. package/README.md +5 -5
  2. package/fesm2022/muraai-mnl-form.mjs +152 -145
  3. package/fesm2022/muraai-mnl-form.mjs.map +1 -1
  4. package/lib/{formly-lib/formly-lib.component.d.ts → mnl-form/mnl-form.component.d.ts} +3 -3
  5. package/lib/types/upload-file.d.ts +1 -1
  6. package/lib/workflow-status/ workflow-status.module.d.ts +8 -8
  7. package/lib/workflow-status/workflow-status.component.d.ts +1 -1
  8. package/package.json +4 -5
  9. package/public-api.d.ts +2 -2
  10. package/esm2022/lib/confirmation-dialog/confirmation-dialog.component.mjs +0 -34
  11. package/esm2022/lib/formly-lib/formly-lib.component.mjs +0 -199
  12. package/esm2022/lib/formly-lib/formly-standalone.module.mjs +0 -155
  13. package/esm2022/lib/models/custom-form-field.model.mjs +0 -2
  14. package/esm2022/lib/models/workflow-status.model.mjs +0 -2
  15. package/esm2022/lib/services/graphql.service.mjs +0 -30
  16. package/esm2022/lib/services/scoring.service.mjs +0 -103
  17. package/esm2022/lib/types/action-button-renderer.component.mjs +0 -59
  18. package/esm2022/lib/types/autocomplete-type.component.mjs +0 -68
  19. package/esm2022/lib/types/button.type.mjs +0 -72
  20. package/esm2022/lib/types/comments.type.mjs +0 -102
  21. package/esm2022/lib/types/country-code-input.type.mjs +0 -181
  22. package/esm2022/lib/types/custom-date.type.mjs +0 -20
  23. package/esm2022/lib/types/custom-input.component.mjs +0 -62
  24. package/esm2022/lib/types/date-format.type.mjs +0 -196
  25. package/esm2022/lib/types/expansion-panel.types.mjs +0 -85
  26. package/esm2022/lib/types/formly-field-panel.type.mjs +0 -70
  27. package/esm2022/lib/types/grid-actionable.type.mjs +0 -197
  28. package/esm2022/lib/types/grid-formly-cell.component.mjs +0 -42
  29. package/esm2022/lib/types/grid.type.mjs +0 -125
  30. package/esm2022/lib/types/input.type.mjs +0 -43
  31. package/esm2022/lib/types/mu-helper-text.type.mjs +0 -331
  32. package/esm2022/lib/types/multi-select-autocomplete.mjs +0 -139
  33. package/esm2022/lib/types/multi-select-checkbox.component.mjs +0 -247
  34. package/esm2022/lib/types/radio.type.mjs +0 -71
  35. package/esm2022/lib/types/scrollable-tabs.types.mjs +0 -220
  36. package/esm2022/lib/types/select-api-auto-complete.component.mjs +0 -111
  37. package/esm2022/lib/types/select-autocomplete-redefined.component.mjs +0 -142
  38. package/esm2022/lib/types/select-autocomplete.type.mjs +0 -254
  39. package/esm2022/lib/types/stepper.type.mjs +0 -268
  40. package/esm2022/lib/types/table.types.mjs +0 -79
  41. package/esm2022/lib/types/tabs.types.mjs +0 -293
  42. package/esm2022/lib/types/tabular-form-dialog.component.mjs +0 -331
  43. package/esm2022/lib/types/tabular-form.type.mjs +0 -641
  44. package/esm2022/lib/types/upload-file.mjs +0 -524
  45. package/esm2022/lib/types/view-file-dialog.component.mjs +0 -90
  46. package/esm2022/lib/utils/formly.utils.mjs +0 -105
  47. package/esm2022/lib/validators/custom-email-validator.mjs +0 -18
  48. package/esm2022/lib/validators/ein-validators.mjs +0 -11
  49. package/esm2022/lib/validators/gst-validator.mjs +0 -11
  50. package/esm2022/lib/validators/normal-email-validator.mjs +0 -17
  51. package/esm2022/lib/validators/npi-validator.mjs +0 -11
  52. package/esm2022/lib/validators/pan-validator.mjs +0 -11
  53. package/esm2022/lib/validators/phone-number-validator.mjs +0 -22
  54. package/esm2022/lib/validators/select-validator.mjs +0 -7
  55. package/esm2022/lib/validators/tinSsn-validator.mjs +0 -12
  56. package/esm2022/lib/workflow-status/ workflow-status.module.mjs +0 -52
  57. package/esm2022/lib/workflow-status/workflow-status.component.mjs +0 -70
  58. package/esm2022/lib/wrappers/form-field-description-wrapper.component.mjs +0 -44
  59. package/esm2022/lib/wrappers/form-field-wrapper.component.mjs +0 -34
  60. package/esm2022/lib/wrappers/formly-wrapper-with-old-value.component.mjs +0 -140
  61. package/esm2022/lib/wrappers/prefix-suffix-wrapper.component.mjs +0 -95
  62. package/esm2022/lib/wrappers/prefix-sufix-extension.component.mjs +0 -9
  63. package/esm2022/muraai-mnl-form.mjs +0 -5
  64. package/esm2022/public-api.mjs +0 -12
  65. /package/lib/{formly-lib/formly-standalone.module.d.ts → mnl-form/mnl-form-standalone.module.d.ts} +0 -0
@@ -1,247 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { MatAutocompleteModule, MatAutocompleteTrigger, } from '@angular/material/autocomplete';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MatCheckboxModule } from '@angular/material/checkbox';
7
- import { MatChipsModule } from '@angular/material/chips';
8
- import { MatFormFieldModule } from '@angular/material/form-field';
9
- import { MatIconModule } from '@angular/material/icon';
10
- import { MatInputModule } from '@angular/material/input';
11
- import { MatTooltipModule } from '@angular/material/tooltip';
12
- import { CommonsModule } from '@muraai/mnl-commons';
13
- import { FieldType, FormlyModule } from '@ngx-formly/core';
14
- import { TranslateModule } from '@ngx-translate/core';
15
- import { combineLatest, of } from 'rxjs';
16
- import { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap, take } from 'rxjs/operators';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@angular/common";
19
- import * as i2 from "@angular/material/chips";
20
- import * as i3 from "@angular/material/icon";
21
- import * as i4 from "@angular/material/form-field";
22
- import * as i5 from "@angular/material/autocomplete";
23
- import * as i6 from "@angular/material/core";
24
- import * as i7 from "@angular/material/checkbox";
25
- import * as i8 from "@ngx-formly/core";
26
- import * as i9 from "@angular/forms";
27
- import * as i10 from "@angular/material/tooltip";
28
- export class FormlyMultiSelectCheckboxAutocompleteComponent extends FieldType {
29
- constructor() {
30
- super(...arguments);
31
- this.searchControl = new FormControl();
32
- this.optionsList = [];
33
- }
34
- ngOnInit() {
35
- const debounce = this.field.props.debounceTime || 300;
36
- const fetchOnce = this.field.props.fetchOnce === undefined ? true : this.field.props.fetchOnce;
37
- if (this.field.props.apiFunction && typeof this.field.props.apiFunction === 'function') {
38
- if (fetchOnce) {
39
- this.field.props
40
- .apiFunction('')
41
- .pipe(catchError((error) => {
42
- console.error('API Error:', error);
43
- return of([]);
44
- }))
45
- .subscribe((results) => {
46
- this.optionsList = results || [];
47
- this.filteredOptions = this.searchControl.valueChanges.pipe(startWith(''), debounceTime(debounce), distinctUntilChanged(), map((searchTerm) => this.filterOptions(searchTerm)));
48
- });
49
- }
50
- else {
51
- this.filteredOptions = this.searchControl.valueChanges.pipe(startWith(''), debounceTime(debounce), distinctUntilChanged(), switchMap((searchTerm) => {
52
- return this.field.props.apiFunction(searchTerm).pipe(map((results) => {
53
- this.optionsList = results || [];
54
- return results || [];
55
- }), catchError((error) => {
56
- console.error('API Error:', error);
57
- return of([]);
58
- }));
59
- }));
60
- }
61
- }
62
- else if (Array.isArray(this.field.props.options)) {
63
- this.optionsList = this.field.props.options;
64
- this.filteredOptions = this.searchControl.valueChanges.pipe(startWith(''), debounceTime(debounce), map((searchTerm) => this.filterOptions(searchTerm)));
65
- }
66
- else {
67
- const options$ = this.field.props.options;
68
- options$.pipe(take(1)).subscribe((opts) => {
69
- this.optionsList = opts || [];
70
- });
71
- options$.subscribe((opts) => (this.optionsList = opts || []));
72
- this.filteredOptions = combineLatest([
73
- this.searchControl.valueChanges.pipe(startWith(''), debounceTime(debounce)),
74
- options$,
75
- ]).pipe(map(([searchTerm, options]) => this.filterOptions(searchTerm)));
76
- }
77
- }
78
- onKeydown(event) {
79
- if (event.key === 'Enter') {
80
- event.preventDefault();
81
- }
82
- }
83
- filterOptions(searchTerm) {
84
- const list = this.optionsList || [];
85
- const term = (searchTerm || '').toLowerCase();
86
- return list.filter(option => (option.label || '').toLowerCase().includes(term));
87
- }
88
- onCheckboxChange(event, value) {
89
- const currentValue = this.formControl.value || [];
90
- if (event.checked) {
91
- this.formControl.setValue([...currentValue, value]);
92
- }
93
- else {
94
- this.formControl.setValue(currentValue.filter((v) => v !== value));
95
- }
96
- this.trigger.openPanel();
97
- }
98
- toggleSelection(event, value) {
99
- if (this.isSelected(value)) {
100
- this.removeOption(value);
101
- }
102
- else {
103
- this.formControl.setValue([...this.formControl.value, value]);
104
- }
105
- this.searchControl.setValue('');
106
- this.trigger.openPanel();
107
- }
108
- isSelected(value) {
109
- return ((this.formControl.value && this.formControl.value.includes(value)) ||
110
- false);
111
- }
112
- removeOption(value) {
113
- const values = this.formControl.value;
114
- const opts = values.filter((val) => val !== value);
115
- this.formControl.setValue(opts);
116
- }
117
- removeChip(chipIndex) {
118
- const value = this.formControl.value;
119
- this.formControl.setValue([
120
- ...value.slice(0, chipIndex),
121
- ...value.slice(chipIndex + 1, value.length),
122
- ]);
123
- this.formControl.markAsTouched();
124
- }
125
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyMultiSelectCheckboxAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FormlyMultiSelectCheckboxAutocompleteComponent, isStandalone: true, selector: "mu-multi-checkbox-autocomplete", providers: [MatAutocompleteTrigger], viewQueries: [{ propertyName: "trigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: `
127
- <mat-form-field class="w-full" appearance="outline">
128
- <mat-label
129
- >{{ field.props.label }}
130
- <span *ngIf="field.props.required">*</span>
131
- </mat-label>
132
- <mat-chip-grid
133
- #chipGrid
134
- [formControl]="formControl"
135
- [formlyAttributes]="field"
136
- >
137
- @for (chip of formControl.value; track $index; let chipIndex= $index) {
138
- <mat-chip-row (removed)="removeChip(chipIndex)"
139
- [matTooltip]="chip">
140
- {{ chip }}
141
- <button matChipRemove [attr.aria-label]="'remove ' + chip">
142
- <mat-icon>cancel</mat-icon>
143
- </button>
144
- </mat-chip-row>
145
- }
146
- </mat-chip-grid>
147
- <input
148
- [formControl]="searchControl"
149
- [matChipInputFor]="chipGrid"
150
- [matAutocomplete]="auto"
151
- [readonly]="field.props.readonly"
152
- [required]="field.props.required || false"
153
- (keydown)="onKeydown($event)"
154
- (focus)="trigger.openPanel()"
155
- />
156
- <mat-autocomplete #auto="matAutocomplete">
157
- <mat-option
158
- *ngFor="let option of filteredOptions | async"
159
- [value]="option.label"
160
- (click)="toggleSelection($event, option.label)"
161
- >
162
- <mat-checkbox
163
- (click)="$event.stopPropagation()"
164
- (change)="onCheckboxChange($event, option.label)"
165
- [checked]="isSelected(option.label)"
166
- >
167
- {{ option.label }}
168
- </mat-checkbox>
169
- </mat-option>
170
- </mat-autocomplete>
171
- <mat-error *ngIf="formControl.invalid && formControl.touched">
172
- {{ field.validation?.messages?.['required'] }}
173
- </mat-error>
174
- </mat-form-field>
175
- `, isInline: true, styles: [".selected-chips{margin-top:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i8.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
176
- }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyMultiSelectCheckboxAutocompleteComponent, decorators: [{
178
- type: Component,
179
- args: [{ selector: 'mu-multi-checkbox-autocomplete', standalone: true, imports: [
180
- CommonModule,
181
- CommonsModule,
182
- MatChipsModule,
183
- MatButtonModule,
184
- MatIconModule,
185
- MatInputModule,
186
- MatAutocompleteModule,
187
- TranslateModule,
188
- MatCheckboxModule,
189
- FormlyModule,
190
- ReactiveFormsModule,
191
- MatFormFieldModule,
192
- MatTooltipModule
193
- ], providers: [MatAutocompleteTrigger], template: `
194
- <mat-form-field class="w-full" appearance="outline">
195
- <mat-label
196
- >{{ field.props.label }}
197
- <span *ngIf="field.props.required">*</span>
198
- </mat-label>
199
- <mat-chip-grid
200
- #chipGrid
201
- [formControl]="formControl"
202
- [formlyAttributes]="field"
203
- >
204
- @for (chip of formControl.value; track $index; let chipIndex= $index) {
205
- <mat-chip-row (removed)="removeChip(chipIndex)"
206
- [matTooltip]="chip">
207
- {{ chip }}
208
- <button matChipRemove [attr.aria-label]="'remove ' + chip">
209
- <mat-icon>cancel</mat-icon>
210
- </button>
211
- </mat-chip-row>
212
- }
213
- </mat-chip-grid>
214
- <input
215
- [formControl]="searchControl"
216
- [matChipInputFor]="chipGrid"
217
- [matAutocomplete]="auto"
218
- [readonly]="field.props.readonly"
219
- [required]="field.props.required || false"
220
- (keydown)="onKeydown($event)"
221
- (focus)="trigger.openPanel()"
222
- />
223
- <mat-autocomplete #auto="matAutocomplete">
224
- <mat-option
225
- *ngFor="let option of filteredOptions | async"
226
- [value]="option.label"
227
- (click)="toggleSelection($event, option.label)"
228
- >
229
- <mat-checkbox
230
- (click)="$event.stopPropagation()"
231
- (change)="onCheckboxChange($event, option.label)"
232
- [checked]="isSelected(option.label)"
233
- >
234
- {{ option.label }}
235
- </mat-checkbox>
236
- </mat-option>
237
- </mat-autocomplete>
238
- <mat-error *ngIf="formControl.invalid && formControl.touched">
239
- {{ field.validation?.messages?.['required'] }}
240
- </mat-error>
241
- </mat-form-field>
242
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".selected-chips{margin-top:10px}\n"] }]
243
- }], propDecorators: { trigger: [{
244
- type: ViewChild,
245
- args: [MatAutocompleteTrigger]
246
- }] } });
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvbXVsdGktc2VsZWN0LWNoZWNrYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBbUIsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1B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QyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0E3SVUsOENBQThDO21HQUE5Qyw4Q0FBOEMsNkVBMUQ5QyxDQUFDLHNCQUFzQixDQUFDLG1FQWtFeEIsc0JBQXNCLHVFQWpFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRFQsMkdBaEVDLFlBQVksb1RBQ1osYUFBYSw4QkFDYixjQUFjLDR1QkFDZCxlQUFlLDhCQUNmLGFBQWEsbUxBQ2IsY0FBYyx1WUFDZCxxQkFBcUIsdzFCQUNyQixlQUFlLDhCQUNmLGlCQUFpQixvWUFDakIsWUFBWSxxSkFDWixtQkFBbUIsc3lCQUNuQixrQkFBa0IsOEJBQ2xCLGdCQUFnQjs7NEZBNERQLDhDQUE4QztrQkE1RTFELFNBQVM7K0JBQ0UsZ0NBQWdDLGNBQzlCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7cUJBQ2pCLGFBQ1UsQ0FBQyxzQkFBc0IsQ0FBQyxZQUN6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVCxtQkFNZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFVWixPQUFPO3NCQUF6QyxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IENvbW1vbnNNb2R1bGUgfSBmcm9tICdAbXVyYWFpL21ubC1jb21tb25zJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ211LW11bHRpLWNoZWNrYm94LWF1dG9jb21wbGV0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29tbW9uc01vZHVsZSxcbiAgICBNYXRDaGlwc01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW01hdEF1dG9jb21wbGV0ZVRyaWdnZXJdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctZnVsbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICA8bWF0LWxhYmVsXG4gICAgICAgID57eyBmaWVsZC5wcm9wcy5sYWJlbCB9fVxuICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnByb3BzLnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1jaGlwLWdyaWRcbiAgICAgICAgI2NoaXBHcmlkXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCJcbiAgICAgID5cbiAgICAgICAgQGZvciAoY2hpcCBvZiBmb3JtQ29udHJvbC52YWx1ZTsgdHJhY2sgJGluZGV4OyBsZXQgY2hpcEluZGV4PSAkaW5kZXgpIHtcbiAgICAgICAgPG1hdC1jaGlwLXJvdyAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwKGNoaXBJbmRleClcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJjaGlwXCI+XG4gICAgICAgICAge3sgY2hpcCB9fVxuICAgICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSBbYXR0ci5hcmlhLWxhYmVsXT1cIidyZW1vdmUgJyArIGNoaXBcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgICAgPGlucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5wcm9wcy5yZWFkb25seVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJmaWVsZC5wcm9wcy5yZXF1aXJlZCB8fCBmYWxzZVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cInRyaWdnZXIub3BlblBhbmVsKClcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbigkZXZlbnQsIG9wdGlvbi5sYWJlbClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50LCBvcHRpb24ubGFiZWwpXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uLmxhYmVsKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5pbnZhbGlkICYmIGZvcm1Db250cm9sLnRvdWNoZWRcIj5cbiAgICAgICAge3sgZmllbGQudmFsaWRhdGlvbj8ubWVzc2FnZXM/LlsncmVxdWlyZWQnXSB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgLnNlbGVjdGVkLWNoaXBzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICB9XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlNdWx0aVNlbGVjdENoZWNrYm94QXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBmaWx0ZXJlZE9wdGlvbnMhOiBPYnNlcnZhYmxlPGFueT47XG4gIHByb3RlY3RlZCBvcHRpb25zTGlzdDogYW55W10gPSBbXTtcblxuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIHRyaWdnZXIhOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGRlYm91bmNlID0gdGhpcy5maWVsZC5wcm9wcy5kZWJvdW5jZVRpbWUgfHwgMzAwO1xuICAgIGNvbnN0IGZldGNoT25jZSA9XG4gICAgICB0aGlzLmZpZWxkLnByb3BzLmZldGNoT25jZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMuZmllbGQucHJvcHMuZmV0Y2hPbmNlO1xuXG4gICAgaWYgKHRoaXMuZmllbGQucHJvcHMuYXBpRnVuY3Rpb24gJiYgdHlwZW9mIHRoaXMuZmllbGQucHJvcHMuYXBpRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChmZXRjaE9uY2UpIHtcbiAgICAgICB0aGlzLmZpZWxkLnByb3BzXG4gICAgLmFwaUZ1bmN0aW9uKCcnKVxuICAgIC5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQVBJIEVycm9yOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH0pXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueVtdKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNMaXN0ID0gcmVzdWx0cyB8fCBbXTtcblxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgIGRlYm91bmNlVGltZShkZWJvdW5jZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIG1hcCgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB0aGlzLmZpbHRlck9wdGlvbnMoc2VhcmNoVGVybSkpXG4gICAgICApOyAgICAgIFxuICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2UpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc3dpdGNoTWFwKChzZWFyY2hUZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmFwaUZ1bmN0aW9uKHNlYXJjaFRlcm0pLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNMaXN0ID0gcmVzdWx0cyB8fCBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cyB8fCBbXTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQVBJIEVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmllbGQucHJvcHMub3B0aW9ucykpIHtcbiAgICAgIHRoaXMub3B0aW9uc0xpc3QgPSB0aGlzLmZpZWxkLnByb3BzLm9wdGlvbnM7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlKSxcbiAgICAgICAgbWFwKChzZWFyY2hUZXJtKSA9PiB0aGlzLmZpbHRlck9wdGlvbnMoc2VhcmNoVGVybSkpXG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMkID0gdGhpcy5maWVsZC5wcm9wcy5vcHRpb25zIGFzIE9ic2VydmFibGU8YW55W10+O1xuXG4gICAgICBvcHRpb25zJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgob3B0cykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNMaXN0ID0gb3B0cyB8fCBbXTtcbiAgICAgIH0pO1xuXG4gICAgICBvcHRpb25zJC5zdWJzY3JpYmUoKG9wdHMpID0+ICh0aGlzLm9wdGlvbnNMaXN0ID0gb3B0cyB8fCBbXSkpO1xuXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2UpXG4gICAgICAgICksXG4gICAgICAgIG9wdGlvbnMkLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbc2VhcmNoVGVybSwgb3B0aW9uc106IFtzdHJpbmcsIGFueVtdXSkgPT5cbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoc2VhcmNoVGVybSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucyhzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgY29uc3QgbGlzdCA9IHRoaXMub3B0aW9uc0xpc3QgfHwgW107XG4gIGNvbnN0IHRlcm0gPSAoc2VhcmNoVGVybSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4gbGlzdC5maWx0ZXIob3B0aW9uID0+XG4gICAgKG9wdGlvbi5sYWJlbCB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxuICApO1xufVxuXG4gIG9uQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoWy4uLmN1cnJlbnRWYWx1ZSwgdmFsdWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShjdXJyZW50VmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHZhbHVlKSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGlvbihldmVudDogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlT3B0aW9uKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShbLi4udGhpcy5mb3JtQ29udHJvbC52YWx1ZSwgdmFsdWVdKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnRyaWdnZXIub3BlblBhbmVsKCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgJiYgdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5pbmNsdWRlcyh2YWx1ZSkpIHx8XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cblxuICByZW1vdmVPcHRpb24odmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3Qgb3B0cyA9IHZhbHVlcy5maWx0ZXIoKHZhbDogYW55KSA9PiB2YWwgIT09IHZhbHVlKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG9wdHMpO1xuICB9XG5cbiAgcmVtb3ZlQ2hpcChjaGlwSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKFtcbiAgICAgIC4uLnZhbHVlLnNsaWNlKDAsIGNoaXBJbmRleCksXG4gICAgICAuLi52YWx1ZS5zbGljZShjaGlwSW5kZXggKyAxLCB2YWx1ZS5sZW5ndGgpLFxuICAgIF0pO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG59XG4iXX0=
@@ -1,71 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component } from '@angular/core';
3
- import { FieldType } from '@ngx-formly/core';
4
- import { FormlyModule } from '@ngx-formly/core';
5
- import { FormlyMaterialModule } from '@ngx-formly/material';
6
- import { ReactiveFormsModule } from '@angular/forms';
7
- import { MatRadioModule } from '@angular/material/radio';
8
- import { MatFormFieldModule } from '@angular/material/form-field';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- import * as i2 from "@ngx-formly/core";
12
- import * as i3 from "@angular/forms";
13
- import * as i4 from "@angular/material/radio";
14
- import * as i5 from "@angular/material/form-field";
15
- export class CustomFormlyRadioComponent extends FieldType {
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFormlyRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CustomFormlyRadioComponent, isStandalone: true, selector: "mu-radio", usesInheritance: true, ngImport: i0, template: `
18
- <mat-radio-group [formControl]="formControl" [formlyAttributes]="field">
19
- <div class="flex-col">
20
- <div class="flex justify-between">
21
- <label *ngIf="to.label" [class.text-red-600]="to.required && formControl.touched && formControl.invalid">{{ to.label }}
22
- <span *ngIf="to.required">*</span></label>
23
- <div class="flex space-x-4">
24
- <mat-radio-button *ngFor="let option of to['radioOptions']" [value]="option.value" [disabled]="to.disabled">
25
- {{ option.label }}
26
- </mat-radio-button>
27
- </div>
28
- </div>
29
- <mat-error *ngIf="formControl.invalid && formControl.touched">
30
- {{ field.validation?.messages?.['required'] }}
31
- </mat-error>
32
- </div>
33
-
34
- </mat-radio-group>
35
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: FormlyMaterialModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFormlyRadioComponent, decorators: [{
38
- type: Component,
39
- args: [{
40
- selector: 'mu-radio',
41
- standalone: true,
42
- imports: [
43
- CommonModule,
44
- FormlyModule,
45
- FormlyMaterialModule,
46
- ReactiveFormsModule,
47
- MatRadioModule,
48
- MatFormFieldModule
49
- ],
50
- template: `
51
- <mat-radio-group [formControl]="formControl" [formlyAttributes]="field">
52
- <div class="flex-col">
53
- <div class="flex justify-between">
54
- <label *ngIf="to.label" [class.text-red-600]="to.required && formControl.touched && formControl.invalid">{{ to.label }}
55
- <span *ngIf="to.required">*</span></label>
56
- <div class="flex space-x-4">
57
- <mat-radio-button *ngFor="let option of to['radioOptions']" [value]="option.value" [disabled]="to.disabled">
58
- {{ option.label }}
59
- </mat-radio-button>
60
- </div>
61
- </div>
62
- <mat-error *ngIf="formControl.invalid && formControl.touched">
63
- {{ field.validation?.messages?.['required'] }}
64
- </mat-error>
65
- </div>
66
-
67
- </mat-radio-group>
68
- `,
69
- }]
70
- }] });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8udHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvcmFkaW8udHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFpQ2xFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxTQUEwQjsrR0FBN0QsMEJBQTBCO21HQUExQiwwQkFBMEIsMkZBcEJ6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JYLDJEQXpCSyxZQUFZLCtQQUNaLFlBQVkscUpBQ1osb0JBQW9CLDhCQUNwQixtQkFBbUIseVRBQ25CLGNBQWMsb2xCQUNkLGtCQUFrQjs7NEZBc0JiLDBCQUEwQjtrQkEvQnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGtCQUFrQjtxQkFDckI7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlg7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1seU1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbXUtcmFkaW8nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1seU1vZHVsZSxcbiAgICAgICAgRm9ybWx5TWF0ZXJpYWxNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdFJhZGlvTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlOiBgXG4gICA8bWF0LXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwidG8ubGFiZWxcIiAgW2NsYXNzLnRleHQtcmVkLTYwMF09XCJ0by5yZXF1aXJlZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkICYmIGZvcm1Db250cm9sLmludmFsaWRcIj57eyB0by5sYWJlbCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0by5yZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtNFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdG9bJ3JhZGlvT3B0aW9ucyddXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIFtkaXNhYmxlZF09XCJ0by5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZFwiPlxuICAgICAgICAgICAge3sgZmllbGQudmFsaWRhdGlvbj8ubWVzc2FnZXM/LlsncmVxdWlyZWQnXSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRm9ybWx5UmFkaW9Db21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiB7XG59Il19
@@ -1,220 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, inject, ViewChild, } from '@angular/core';
3
- import { ReactiveFormsModule } from '@angular/forms';
4
- import { MatButtonModule } from '@angular/material/button';
5
- import { MatIconModule } from '@angular/material/icon';
6
- import { MatTabsModule, } from '@angular/material/tabs';
7
- import { MatTooltipModule } from '@angular/material/tooltip';
8
- import { Router } from '@angular/router';
9
- import { FieldType, } from '@ngx-formly/core';
10
- import { FormlyModule } from '@ngx-formly/core';
11
- import { TranslateModule } from '@ngx-translate/core';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/material/tabs";
14
- import * as i2 from "@ngx-formly/core";
15
- import * as i3 from "@angular/common";
16
- import * as i4 from "@ngx-translate/core";
17
- import * as i5 from "@angular/material/icon";
18
- import * as i6 from "@angular/material/tooltip";
19
- export class FormlyFieldScrollableTabsComponent extends FieldType {
20
- constructor(ngZone) {
21
- super();
22
- this.ngZone = ngZone;
23
- this.router = inject(Router);
24
- this.selectedIndex = 0;
25
- }
26
- nextTab(tabGroup) {
27
- if (tabGroup && tabGroup.selectedIndex != null) {
28
- const currentIndex = tabGroup.selectedIndex;
29
- if (currentIndex < (tabGroup._tabs?.length || 0) - 1) {
30
- tabGroup.selectedIndex = currentIndex + 1;
31
- }
32
- }
33
- }
34
- previousTab(tabGroup) {
35
- if (tabGroup && tabGroup.selectedIndex != null) {
36
- const currentIndex = tabGroup.selectedIndex;
37
- if (currentIndex > 0) {
38
- tabGroup.selectedIndex = currentIndex - 1;
39
- }
40
- }
41
- }
42
- isFirstTab(tabGroup) {
43
- return tabGroup && tabGroup.selectedIndex === 0;
44
- }
45
- isLastTab(tabGroup) {
46
- return (tabGroup && tabGroup.selectedIndex === (tabGroup._tabs?.length || 0) - 1);
47
- }
48
- ngOnInit() {
49
- this.user = JSON.parse(localStorage.getItem('loggedInUser') || '{}');
50
- }
51
- isValid(field) {
52
- if (field.key) {
53
- if (field.props?.excludeValidation)
54
- return true;
55
- return field?.formControl?.valid || false;
56
- }
57
- return field.fieldGroup
58
- ? field.fieldGroup.every((f) => this.isValid(f))
59
- : true;
60
- }
61
- onTabChange(event) {
62
- this.selectedIndex = event.index;
63
- console.log('Selected tab index:', this.selectedIndex);
64
- if (this.field && this.field.props?.['tabChange']) {
65
- this.field.props?.['tabChange'](event, this.field);
66
- }
67
- }
68
- onTabIndexChange(index) {
69
- const targetElement = document.getElementById(`tab-${index}`);
70
- if (targetElement) {
71
- targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
72
- }
73
- }
74
- onScroll(event) {
75
- clearTimeout(this.debounceTimeout);
76
- this.debounceTimeout = setTimeout(() => {
77
- const scrollContainer = event.target;
78
- const scrollTop = scrollContainer.scrollTop;
79
- this.ngZone.run(() => {
80
- if (this.field.fieldGroup) {
81
- for (let index = 0; index < this.field.fieldGroup?.length; index++) {
82
- const tabElement = document.getElementById(`tab-${index}`);
83
- if (tabElement) {
84
- const tabTop = tabElement.offsetTop - scrollContainer.offsetTop;
85
- const tabHeight = tabElement.offsetHeight;
86
- if (scrollTop >= tabTop && scrollTop < tabTop + tabHeight) {
87
- if (this.selectedIndex !== index) {
88
- this.selectedIndex = index;
89
- }
90
- break;
91
- }
92
- }
93
- }
94
- }
95
- });
96
- }, 100);
97
- }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyFieldScrollableTabsComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FormlyFieldScrollableTabsComponent, isStandalone: true, selector: "mu-formly-field-tabs1", viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabGroup"], descendants: true }, { propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
100
- <div class="tabs-container">
101
- <mat-tab-group
102
- class="sticky-tabs"
103
- [(selectedIndex)]="selectedIndex"
104
- (selectedIndexChange)="onTabIndexChange($event)"
105
- (selectedTabChange)="onTabChange($event)"
106
- >
107
- @for(tab of field.fieldGroup; track tab; let i = $index; let last =
108
- $last){
109
- <mat-tab>
110
- <ng-template mat-tab-label>
111
- <span
112
- [ngStyle]="{
113
- color:
114
- !isValid(field.fieldGroup ? field.fieldGroup[i] : {}) &&
115
- options.formState?.showValidationError
116
- ? 'red'
117
- : 'black'
118
- }"
119
- >
120
- {{ tab?.props?.label || '' }}
121
- </span>
122
- <mat-icon
123
- matTooltip="{{ 'MANDATORY_FIELDS_TOOLTIP' | translate }}"
124
- *ngIf="
125
- !isValid(field.fieldGroup ? field.fieldGroup[i] : {}) &&
126
- options.formState?.showValidationError
127
- "
128
- class="error-step"
129
- >error</mat-icon
130
- >
131
- </ng-template>
132
- </mat-tab>
133
- }
134
- </mat-tab-group>
135
-
136
- <div class="tab-content" (scroll)="onScroll($event)">
137
- <div
138
- *ngFor="let tab of field.fieldGroup; let i = index"
139
- [id]="'tab-' + i"
140
- class="tab-section"
141
- >
142
- <h2 class="tab-title" *ngIf="tab?.props?.label">
143
- {{ tab?.props?.label || '' }}
144
- </h2>
145
- <formly-field [field]="tab"></formly-field>
146
- </div>
147
- </div>
148
- </div>
149
- `, isInline: true, styles: [".tab-title{color:#00ae4d}.error-step{color:#d32f2f!important}.tabs-container{display:flex;flex-direction:column;height:100%;.sticky-tabs{position:sticky;z-index:1}.tab-content{flex:1;overflow-y:auto;padding:16px;.tab-section{margin-bottom:45px;border-bottom:2px solid #00ae4d;h2{margin:0 0 8px}.spacer{height:400px}}}}\n"], dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i1.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
150
- }
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyFieldScrollableTabsComponent, decorators: [{
152
- type: Component,
153
- args: [{ selector: 'mu-formly-field-tabs1', standalone: true, imports: [
154
- MatTabsModule,
155
- ReactiveFormsModule,
156
- FormlyModule,
157
- MatButtonModule,
158
- CommonModule,
159
- TranslateModule,
160
- MatIconModule,
161
- MatTooltipModule,
162
- ], template: `
163
- <div class="tabs-container">
164
- <mat-tab-group
165
- class="sticky-tabs"
166
- [(selectedIndex)]="selectedIndex"
167
- (selectedIndexChange)="onTabIndexChange($event)"
168
- (selectedTabChange)="onTabChange($event)"
169
- >
170
- @for(tab of field.fieldGroup; track tab; let i = $index; let last =
171
- $last){
172
- <mat-tab>
173
- <ng-template mat-tab-label>
174
- <span
175
- [ngStyle]="{
176
- color:
177
- !isValid(field.fieldGroup ? field.fieldGroup[i] : {}) &&
178
- options.formState?.showValidationError
179
- ? 'red'
180
- : 'black'
181
- }"
182
- >
183
- {{ tab?.props?.label || '' }}
184
- </span>
185
- <mat-icon
186
- matTooltip="{{ 'MANDATORY_FIELDS_TOOLTIP' | translate }}"
187
- *ngIf="
188
- !isValid(field.fieldGroup ? field.fieldGroup[i] : {}) &&
189
- options.formState?.showValidationError
190
- "
191
- class="error-step"
192
- >error</mat-icon
193
- >
194
- </ng-template>
195
- </mat-tab>
196
- }
197
- </mat-tab-group>
198
-
199
- <div class="tab-content" (scroll)="onScroll($event)">
200
- <div
201
- *ngFor="let tab of field.fieldGroup; let i = index"
202
- [id]="'tab-' + i"
203
- class="tab-section"
204
- >
205
- <h2 class="tab-title" *ngIf="tab?.props?.label">
206
- {{ tab?.props?.label || '' }}
207
- </h2>
208
- <formly-field [field]="tab"></formly-field>
209
- </div>
210
- </div>
211
- </div>
212
- `, styles: [".tab-title{color:#00ae4d}.error-step{color:#d32f2f!important}.tabs-container{display:flex;flex-direction:column;height:100%;.sticky-tabs{position:sticky;z-index:1}.tab-content{flex:1;overflow-y:auto;padding:16px;.tab-section{margin-bottom:45px;border-bottom:2px solid #00ae4d;h2{margin:0 0 8px}.spacer{height:400px}}}}\n"] }]
213
- }], ctorParameters: () => [{ type: i0.NgZone }], propDecorators: { tabGroup: [{
214
- type: ViewChild,
215
- args: ['tabGroup']
216
- }], tabContent: [{
217
- type: ViewChild,
218
- args: ['tabContent', { static: false }]
219
- }] } });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS10YWJzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1saWIvc3JjL2xpYi90eXBlcy9zY3JvbGxhYmxlLXRhYnMudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFHTCxhQUFhLEdBQ2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsR0FFVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBMEd0RCxNQUFNLE9BQU8sa0NBQ1gsU0FBUSxTQUEwQjtJQWNsQyxZQUFvQixNQUFjO1FBQ2hDLEtBQUssRUFBRSxDQUFDO1FBRFUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVRsQyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSXhCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO0lBT2xCLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBcUI7UUFDM0IsSUFBSSxRQUFRLElBQUksUUFBUSxD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OEJBQ2YsWUFBWSxvVkFDWixlQUFlLDJGQUNmLGFBQWEsbUxBQ2IsZ0JBQWdCOzs0RkE2RlAsa0NBQWtDO2tCQXhHOUMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3FCQUNqQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtEVDsyRUFpRHNCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFHdUIsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtcbiAgTWF0VGFiQ2hhbmdlRXZlbnQsXG4gIE1hdFRhYkdyb3VwLFxuICBNYXRUYWJzTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBGaWVsZFR5cGUsXG4gIEZpZWxkVHlwZUNvbmZpZyxcbn0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdS1mb3JtbHktZmllbGQtdGFiczEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInRhYnMtY29udGFpbmVyXCI+XG4gICAgICA8bWF0LXRhYi1ncm91cFxuICAgICAgICBjbGFzcz1cInN0aWNreS10YWJzXCJcbiAgICAgICAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZEluZGV4XCJcbiAgICAgICAgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwib25UYWJJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICBAZm9yKHRhYiBvZiBmaWVsZC5maWVsZEdyb3VwOyB0cmFjayB0YWI7IGxldCBpID0gJGluZGV4OyBsZXQgbGFzdCA9XG4gICAgICAgICRsYXN0KXtcbiAgICAgICAgPG1hdC10YWI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAhaXNWYWxpZChmaWVsZC5maWVsZEdyb3VwID8gZmllbGQuZmllbGRHcm91cFtpXSA6IHt9KSAmJlxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtU3RhdGU/LnNob3dWYWxpZGF0aW9uRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdibGFjaydcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRhYj8ucHJvcHM/LmxhYmVsIHx8ICcnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7ICdNQU5EQVRPUllfRklFTERTX1RPT0xUSVAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAhaXNWYWxpZChmaWVsZC5maWVsZEdyb3VwID8gZmllbGQuZmllbGRHcm91cFtpXSA6IHt9KSAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybVN0YXRlPy5zaG93VmFsaWRhdGlvbkVycm9yXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXJyb3Itc3RlcFwiXG4gICAgICAgICAgICAgID5lcnJvcjwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIGZpZWxkLmZpZWxkR3JvdXA7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtpZF09XCIndGFiLScgKyBpXCJcbiAgICAgICAgICBjbGFzcz1cInRhYi1zZWN0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxoMiBjbGFzcz1cInRhYi10aXRsZVwiICpuZ0lmPVwidGFiPy5wcm9wcz8ubGFiZWxcIj5cbiAgICAgICAgICAgIHt7IHRhYj8ucHJvcHM/LmxhYmVsIHx8ICcnIH19XG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJ0YWJcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnRhYi10aXRsZSB7XG4gICAgICAgIGNvbG9yOiAjMDBhZTRkO1xuICAgICAgfVxuICAgICAgLmVycm9yLXN0ZXAge1xuICAgICAgICBjb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLnRhYnMtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgIC5zdGlja3ktdGFicyB7XG4gICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhYi1jb250ZW50IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgICAgcGFkZGluZzogMTZweDtcblxuICAgICAgICAgIC50YWItc2VjdGlvbiB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0NXB4O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMGFlNGQ7XG5cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiAwIDAgOHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuc3BhY2VyIHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlGaWVsZFNjcm9sbGFibGVUYWJzQ29tcG9uZW50XG4gIGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgc3VibWl0dGVkRGF0YSE6IGFueVtdO1xuXG4gIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICB1c2VyOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJykgdGFiR3JvdXAhOiBNYXRUYWJHcm91cDtcblxuICBzZWxlY3RlZEluZGV4ID0gMDtcbiAgQFZpZXdDaGlsZCgndGFiQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJDb250ZW50ITogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGRlYm91bmNlVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmV4dFRhYih0YWJHcm91cDogTWF0VGFiR3JvdXApIHtcbiAgICBpZiAodGFiR3JvdXAgJiYgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0YWJHcm91cC5zZWxlY3RlZEluZGV4O1xuICAgICAgaWYgKGN1cnJlbnRJbmRleCA8ICh0YWJHcm91cC5fdGFicz8ubGVuZ3RoIHx8IDApIC0gMSkge1xuICAgICAgICB0YWJHcm91cC5zZWxlY3RlZEluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmV2aW91c1RhYih0YWJHcm91cDogTWF0VGFiR3JvdXApIHtcbiAgICBpZiAodGFiR3JvdXAgJiYgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0YWJHcm91cC5zZWxlY3RlZEluZGV4O1xuICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgICAgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNGaXJzdFRhYih0YWJHcm91cDogTWF0VGFiR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGFiR3JvdXAgJiYgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIGlzTGFzdFRhYih0YWJHcm91cDogTWF0VGFiR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGFiR3JvdXAgJiYgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9PT0gKHRhYkdyb3VwLl90YWJzPy5sZW5ndGggfHwgMCkgLSAxXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ2dlZEluVXNlcicpIHx8ICd7fScpO1xuICB9XG5cbiAgaXNWYWxpZChmaWVsZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmtleSkge1xuICAgICAgaWYgKGZpZWxkLnByb3BzPy5leGNsdWRlVmFsaWRhdGlvbikgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmllbGQ/LmZvcm1Db250cm9sPy52YWxpZCB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGQuZmllbGRHcm91cFxuICAgICAgPyBmaWVsZC5maWVsZEdyb3VwLmV2ZXJ5KChmOiBhbnkpID0+IHRoaXMuaXNWYWxpZChmKSlcbiAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIG9uVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGV2ZW50LmluZGV4O1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCB0YWIgaW5kZXg6JywgdGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICBpZiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLnByb3BzPy5bJ3RhYkNoYW5nZSddKSB7XG4gICAgICB0aGlzLmZpZWxkLnByb3BzPy5bJ3RhYkNoYW5nZSddKGV2ZW50LCB0aGlzLmZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBvblRhYkluZGV4Q2hhbmdlKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHRhYi0ke2luZGV4fWApO1xuICAgIGlmICh0YXJnZXRFbGVtZW50KSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgICB9XG4gIH1cblxuICBvblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xuXG4gICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5maWVsZC5maWVsZEdyb3VwPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGFiLSR7aW5kZXh9YCk7XG4gICAgICAgICAgICBpZiAodGFiRWxlbWVudCkge1xuICAgICAgICAgICAgICBjb25zdCB0YWJUb3AgPSB0YWJFbGVtZW50Lm9mZnNldFRvcCAtIHNjcm9sbENvbnRhaW5lci5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgY29uc3QgdGFiSGVpZ2h0ID0gdGFiRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSB0YWJUb3AgJiYgc2Nyb2xsVG9wIDwgdGFiVG9wICsgdGFiSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIl19