@muraai/mnl-form 0.0.1-alpha-db495b1 → 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 (61) hide show
  1. package/fesm2022/muraai-mnl-form.mjs +150 -143
  2. package/fesm2022/muraai-mnl-form.mjs.map +1 -1
  3. package/lib/types/upload-file.d.ts +1 -1
  4. package/lib/workflow-status/ workflow-status.module.d.ts +8 -8
  5. package/lib/workflow-status/workflow-status.component.d.ts +1 -1
  6. package/package.json +4 -5
  7. package/esm2022/lib/confirmation-dialog/confirmation-dialog.component.mjs +0 -34
  8. package/esm2022/lib/mnl-form/mnl-form-standalone.module.mjs +0 -155
  9. package/esm2022/lib/mnl-form/mnl-form.component.mjs +0 -199
  10. package/esm2022/lib/models/custom-form-field.model.mjs +0 -2
  11. package/esm2022/lib/models/workflow-status.model.mjs +0 -2
  12. package/esm2022/lib/services/graphql.service.mjs +0 -30
  13. package/esm2022/lib/services/scoring.service.mjs +0 -103
  14. package/esm2022/lib/types/action-button-renderer.component.mjs +0 -59
  15. package/esm2022/lib/types/autocomplete-type.component.mjs +0 -68
  16. package/esm2022/lib/types/button.type.mjs +0 -72
  17. package/esm2022/lib/types/comments.type.mjs +0 -102
  18. package/esm2022/lib/types/country-code-input.type.mjs +0 -181
  19. package/esm2022/lib/types/custom-date.type.mjs +0 -20
  20. package/esm2022/lib/types/custom-input.component.mjs +0 -62
  21. package/esm2022/lib/types/date-format.type.mjs +0 -196
  22. package/esm2022/lib/types/expansion-panel.types.mjs +0 -85
  23. package/esm2022/lib/types/formly-field-panel.type.mjs +0 -70
  24. package/esm2022/lib/types/grid-actionable.type.mjs +0 -197
  25. package/esm2022/lib/types/grid-formly-cell.component.mjs +0 -42
  26. package/esm2022/lib/types/grid.type.mjs +0 -125
  27. package/esm2022/lib/types/input.type.mjs +0 -43
  28. package/esm2022/lib/types/mu-helper-text.type.mjs +0 -331
  29. package/esm2022/lib/types/multi-select-autocomplete.mjs +0 -139
  30. package/esm2022/lib/types/multi-select-checkbox.component.mjs +0 -247
  31. package/esm2022/lib/types/radio.type.mjs +0 -71
  32. package/esm2022/lib/types/scrollable-tabs.types.mjs +0 -220
  33. package/esm2022/lib/types/select-api-auto-complete.component.mjs +0 -111
  34. package/esm2022/lib/types/select-autocomplete-redefined.component.mjs +0 -142
  35. package/esm2022/lib/types/select-autocomplete.type.mjs +0 -254
  36. package/esm2022/lib/types/stepper.type.mjs +0 -268
  37. package/esm2022/lib/types/table.types.mjs +0 -79
  38. package/esm2022/lib/types/tabs.types.mjs +0 -293
  39. package/esm2022/lib/types/tabular-form-dialog.component.mjs +0 -331
  40. package/esm2022/lib/types/tabular-form.type.mjs +0 -641
  41. package/esm2022/lib/types/upload-file.mjs +0 -524
  42. package/esm2022/lib/types/view-file-dialog.component.mjs +0 -90
  43. package/esm2022/lib/utils/formly.utils.mjs +0 -105
  44. package/esm2022/lib/validators/custom-email-validator.mjs +0 -18
  45. package/esm2022/lib/validators/ein-validators.mjs +0 -11
  46. package/esm2022/lib/validators/gst-validator.mjs +0 -11
  47. package/esm2022/lib/validators/normal-email-validator.mjs +0 -17
  48. package/esm2022/lib/validators/npi-validator.mjs +0 -11
  49. package/esm2022/lib/validators/pan-validator.mjs +0 -11
  50. package/esm2022/lib/validators/phone-number-validator.mjs +0 -22
  51. package/esm2022/lib/validators/select-validator.mjs +0 -7
  52. package/esm2022/lib/validators/tinSsn-validator.mjs +0 -12
  53. package/esm2022/lib/workflow-status/ workflow-status.module.mjs +0 -52
  54. package/esm2022/lib/workflow-status/workflow-status.component.mjs +0 -70
  55. package/esm2022/lib/wrappers/form-field-description-wrapper.component.mjs +0 -44
  56. package/esm2022/lib/wrappers/form-field-wrapper.component.mjs +0 -34
  57. package/esm2022/lib/wrappers/formly-wrapper-with-old-value.component.mjs +0 -140
  58. package/esm2022/lib/wrappers/prefix-suffix-wrapper.component.mjs +0 -95
  59. package/esm2022/lib/wrappers/prefix-sufix-extension.component.mjs +0 -9
  60. package/esm2022/muraai-mnl-form.mjs +0 -5
  61. package/esm2022/public-api.mjs +0 -12
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZm9ybS9zcmMvbGliL3R5cGVzL211bHRpLXNlbGVjdC1jaGVja2JveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixzQkFBc0IsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQW1CLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0s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QUFDLGFBQWEsRUFBRSxDQUFDO0lBQ25DLENBQUM7K0dBN0lVLDhDQUE4QzttR0FBOUMsOENBQThDLDZFQTFEOUMsQ0FBQyxzQkFBc0IsQ0FBQyxtRUFrRXhCLHNCQUFzQix1RUFqRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURULDJHQWhFQyxZQUFZLG9UQUNaLGFBQWEsOEJBQ2IsY0FBYyw0dUJBQ2QsZUFBZSw4QkFDZixhQUFhLG1MQUNiLGNBQWMsdVlBQ2QscUJBQXFCLHcxQkFDckIsZUFBZSw4QkFDZixpQkFBaUIsb1lBQ2pCLFlBQVkscUpBQ1osbUJBQW1CLHN5QkFDbkIsa0JBQWtCLDhCQUNsQixnQkFBZ0I7OzRGQTREUCw4Q0FBOEM7a0JBNUUxRCxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3FCQUNqQixhQUNVLENBQUMsc0JBQXNCLENBQUMsWUFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRFQsbUJBTWdCLHVCQUF1QixDQUFDLE1BQU07OEJBVVosT0FBTztzQkFBekMsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBDb21tb25zTW9kdWxlIH0gZnJvbSAnQG11cmFhaS9tbmwtY29tbW9ucyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdS1tdWx0aS1jaGVja2JveC1hdXRvY29tcGxldGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvbW1vbnNNb2R1bGUsXG4gICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtNYXRBdXRvY29tcGxldGVUcmlnZ2VyXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LWZ1bGxcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgPG1hdC1sYWJlbFxuICAgICAgICA+e3sgZmllbGQucHJvcHMubGFiZWwgfX1cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC5wcm9wcy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtY2hpcC1ncmlkXG4gICAgICAgICNjaGlwR3JpZFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICA+XG4gICAgICAgIEBmb3IgKGNoaXAgb2YgZm9ybUNvbnRyb2wudmFsdWU7IHRyYWNrICRpbmRleDsgbGV0IGNoaXBJbmRleD0gJGluZGV4KSB7XG4gICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlQ2hpcChjaGlwSW5kZXgpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiY2hpcFwiPlxuICAgICAgICAgIHt7IGNoaXAgfX1cbiAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmUgW2F0dHIuYXJpYS1sYWJlbF09XCIncmVtb3ZlICcgKyBjaGlwXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiXG4gICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcEdyaWRcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICBbcmVhZG9ubHldPVwiZmllbGQucHJvcHMucmVhZG9ubHlcIlxuICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGQucHJvcHMucmVxdWlyZWQgfHwgZmFsc2VcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJ0cmlnZ2VyLm9wZW5QYW5lbCgpXCJcbiAgICAgIC8+XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24ubGFiZWxcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb24oJGV2ZW50LCBvcHRpb24ubGFiZWwpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudCwgb3B0aW9uLmxhYmVsKVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbi5sYWJlbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkXCI+XG4gICAgICAgIHt7IGZpZWxkLnZhbGlkYXRpb24/Lm1lc3NhZ2VzPy5bJ3JlcXVpcmVkJ10gfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIGAsXG4gIHN0eWxlczogYFxuICAgIC5zZWxlY3RlZC1jaGlwcyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgfVxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5TXVsdGlTZWxlY3RDaGVja2JveEF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyZWRPcHRpb25zITogT2JzZXJ2YWJsZTxhbnk+O1xuICBwcm90ZWN0ZWQgb3B0aW9uc0xpc3Q6IGFueVtdID0gW107XG5cbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSB0cmlnZ2VyITogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBkZWJvdW5jZSA9IHRoaXMuZmllbGQucHJvcHMuZGVib3VuY2VUaW1lIHx8IDMwMDtcbiAgICBjb25zdCBmZXRjaE9uY2UgPVxuICAgICAgdGhpcy5maWVsZC5wcm9wcy5mZXRjaE9uY2UgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLmZpZWxkLnByb3BzLmZldGNoT25jZTtcblxuICAgIGlmICh0aGlzLmZpZWxkLnByb3BzLmFwaUZ1bmN0aW9uICYmIHR5cGVvZiB0aGlzLmZpZWxkLnByb3BzLmFwaUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZmV0Y2hPbmNlKSB7XG4gICAgICAgdGhpcy5maWVsZC5wcm9wc1xuICAgIC5hcGlGdW5jdGlvbignJylcbiAgICAucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zTGlzdCA9IHJlc3VsdHMgfHwgW107XG5cbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2UpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBtYXAoKHNlYXJjaFRlcm06IHN0cmluZykgPT4gdGhpcy5maWx0ZXJPcHRpb25zKHNlYXJjaFRlcm0pKVxuICAgICAgKTsgICAgICBcbiAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoc2VhcmNoVGVybTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5hcGlGdW5jdGlvbihzZWFyY2hUZXJtKS5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zTGlzdCA9IHJlc3VsdHMgfHwgW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMgfHwgW107XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZpZWxkLnByb3BzLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNMaXN0ID0gdGhpcy5maWVsZC5wcm9wcy5vcHRpb25zO1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgIGRlYm91bmNlVGltZShkZWJvdW5jZSksXG4gICAgICAgIG1hcCgoc2VhcmNoVGVybSkgPT4gdGhpcy5maWx0ZXJPcHRpb25zKHNlYXJjaFRlcm0pKVxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zJCA9IHRoaXMuZmllbGQucHJvcHMub3B0aW9ucyBhcyBPYnNlcnZhYmxlPGFueVtdPjtcblxuICAgICAgb3B0aW9ucyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKG9wdHMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zTGlzdCA9IG9wdHMgfHwgW107XG4gICAgICB9KTtcblxuICAgICAgb3B0aW9ucyQuc3Vic2NyaWJlKChvcHRzKSA9PiAodGhpcy5vcHRpb25zTGlzdCA9IG9wdHMgfHwgW10pKTtcblxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlKVxuICAgICAgICApLFxuICAgICAgICBvcHRpb25zJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIG1hcCgoW3NlYXJjaFRlcm0sIG9wdGlvbnNdOiBbc3RyaW5nLCBhbnlbXV0pID0+XG4gICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHNlYXJjaFRlcm0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlck9wdGlvbnMoc2VhcmNoVGVybTogc3RyaW5nKSB7XG4gIGNvbnN0IGxpc3QgPSB0aGlzLm9wdGlvbnNMaXN0IHx8IFtdO1xuICBjb25zdCB0ZXJtID0gKHNlYXJjaFRlcm0gfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGxpc3QuZmlsdGVyKG9wdGlvbiA9PlxuICAgIChvcHRpb24ubGFiZWwgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcbiAgKTtcbn1cblxuICBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKFsuLi5jdXJyZW50VmFsdWUsIHZhbHVlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3VycmVudFZhbHVlLmZpbHRlcigodjogYW55KSA9PiB2ICE9PSB2YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXIub3BlblBhbmVsKCk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3Rpb24oZXZlbnQ6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLnJlbW92ZU9wdGlvbih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoWy4uLnRoaXMuZm9ybUNvbnRyb2wudmFsdWUsIHZhbHVlXSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy50cmlnZ2VyLm9wZW5QYW5lbCgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICYmIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUuaW5jbHVkZXModmFsdWUpKSB8fFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlT3B0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IG9wdHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWw6IGFueSkgPT4gdmFsICE9PSB2YWx1ZSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShvcHRzKTtcbiAgfVxuXG4gIHJlbW92ZUNoaXAoY2hpcEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShbXG4gICAgICAuLi52YWx1ZS5zbGljZSgwLCBjaGlwSW5kZXgpLFxuICAgICAgLi4udmFsdWUuc2xpY2UoY2hpcEluZGV4ICsgMSwgdmFsdWUubGVuZ3RoKSxcbiAgICBdKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8udHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZm9ybS9zcmMvbGliL3R5cGVzL3JhZGlvLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0FBaUNsRSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsU0FBMEI7K0dBQTdELDBCQUEwQjttR0FBMUIsMEJBQTBCLDJGQXBCekI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCWCwyREF6QkssWUFBWSwrUEFDWixZQUFZLHFKQUNaLG9CQUFvQiw4QkFDcEIsbUJBQW1CLHlUQUNuQixjQUFjLG9sQkFDZCxrQkFBa0I7OzRGQXNCYiwwQkFBMEI7a0JBL0J0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxrQkFBa0I7cUJBQ3JCO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JYO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlNYXRlcmlhbE1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ211LXJhZGlvJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3JtbHlNb2R1bGUsXG4gICAgICAgIEZvcm1seU1hdGVyaWFsTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlXG4gICAgXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgPG1hdC1yYWRpby1ncm91cCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cInRvLmxhYmVsXCIgIFtjbGFzcy50ZXh0LXJlZC02MDBdPVwidG8ucmVxdWlyZWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCAmJiBmb3JtQ29udHJvbC5pbnZhbGlkXCI+e3sgdG8ubGFiZWwgfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidG8ucmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHRvWydyYWRpb09wdGlvbnMnXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBbZGlzYWJsZWRdPVwidG8uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5pbnZhbGlkICYmIGZvcm1Db250cm9sLnRvdWNoZWRcIj5cbiAgICAgICAgICAgIHt7IGZpZWxkLnZhbGlkYXRpb24/Lm1lc3NhZ2VzPy5bJ3JlcXVpcmVkJ10gfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZvcm1seVJhZGlvQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz4ge1xufSJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS10YWJzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mb3JtL3NyYy9saWIvdHlwZXMvc2Nyb2xsYWJsZS10YWJzLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEdBRVYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQTBHdEQsTUFBTSxPQUFPLGtDQUNYLFNBQVEsU0FBMEI7SUFjbEMsWUFBb0IsTUFBYztRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFUbEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUl4QixrQkFBYSxHQUFHLENBQUMsQ0FBQztJQU9sQixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQXFCO1FBQzNCLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUM1QyxJQUFJLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxRQUFRLENBQUMsYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXFCO1FBQy9CLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUM1QyxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsUUFBUSxDQUFDLGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFxQjtRQUM5QixPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQXFCO1FBQzdCLE9BQU8sQ0FDTCxRQUFRLElBQUksUUFBUSxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQjtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsVUFBVTtZQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBd0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVk7UUFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7WUFDcEQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDMUIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO3dCQUNuRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7NEJBRWhFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7NEJBRTFDLElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxTQUFTLEdBQUcsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO2dDQUMxRCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFLENBQUM7b0NBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dDQUM3QixDQUFDO2dDQUNELE1BQU07NEJBQ1IsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzsrR0F4R1Usa0NBQWtDO21HQUFsQyxrQ0FBa0MseVNBM0ZuQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRFQseVlBM0RDLGFBQWEscXVCQUNiLG1CQUFtQiw4QkFDbkIsWUFBWSx3SEFDWixlQUFlLDhCQUNmLFlBQVksb1ZBQ1osZUFBZSwyRkFDZixhQUFhLG1MQUNiLGdCQUFnQjs7NEZBNkZQLGtDQUFrQztrQkF4RzlDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRFQ7MkVBaURzQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBR3VCLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7XG4gIE1hdFRhYkNoYW5nZUV2ZW50LFxuICBNYXRUYWJHcm91cCxcbiAgTWF0VGFic01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgRmllbGRUeXBlLFxuICBGaWVsZFR5cGVDb25maWcsXG59IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXUtZm9ybWx5LWZpZWxkLXRhYnMxJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0YWJzLWNvbnRhaW5lclwiPlxuICAgICAgPG1hdC10YWItZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJzdGlja3ktdGFic1wiXG4gICAgICAgIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRJbmRleFwiXG4gICAgICAgIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cIm9uVGFiSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgQGZvcih0YWIgb2YgZmllbGQuZmllbGRHcm91cDsgdHJhY2sgdGFiOyBsZXQgaSA9ICRpbmRleDsgbGV0IGxhc3QgPVxuICAgICAgICAkbGFzdCl7XG4gICAgICAgIDxtYXQtdGFiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgIWlzVmFsaWQoZmllbGQuZmllbGRHcm91cCA/IGZpZWxkLmZpZWxkR3JvdXBbaV0gOiB7fSkgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybVN0YXRlPy5zaG93VmFsaWRhdGlvbkVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgICAgICAgICAgOiAnYmxhY2snXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0YWI/LnByb3BzPy5sYWJlbCB8fCAnJyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyAnTUFOREFUT1JZX0ZJRUxEU19UT09MVElQJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgIWlzVmFsaWQoZmllbGQuZmllbGRHcm91cCA/IGZpZWxkLmZpZWxkR3JvdXBbaV0gOiB7fSkgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm1TdGF0ZT8uc2hvd1ZhbGlkYXRpb25FcnJvclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVycm9yLXN0ZXBcIlxuICAgICAgICAgICAgICA+ZXJyb3I8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICB9XG4gICAgICA8L21hdC10YWItZ3JvdXA+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiBmaWVsZC5maWVsZEdyb3VwOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbaWRdPVwiJ3RhYi0nICsgaVwiXG4gICAgICAgICAgY2xhc3M9XCJ0YWItc2VjdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJ0YWItdGl0bGVcIiAqbmdJZj1cInRhYj8ucHJvcHM/LmxhYmVsXCI+XG4gICAgICAgICAgICB7eyB0YWI/LnByb3BzPy5sYWJlbCB8fCAnJyB9fVxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwidGFiXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC50YWItdGl0bGUge1xuICAgICAgICBjb2xvcjogIzAwYWU0ZDtcbiAgICAgIH1cbiAgICAgIC5lcnJvci1zdGVwIHtcbiAgICAgICAgY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC50YWJzLWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcblxuICAgICAgICAuc3RpY2t5LXRhYnMge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50YWItY29udGVudCB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIHBhZGRpbmc6IDE2cHg7XG5cbiAgICAgICAgICAudGFiLXNlY3Rpb24ge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDVweDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMDBhZTRkO1xuXG4gICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgIG1hcmdpbjogMCAwIDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnNwYWNlciB7XG4gICAgICAgICAgICAgIGhlaWdodDogNDAwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RmllbGRTY3JvbGxhYmxlVGFic0NvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIHN1Ym1pdHRlZERhdGEhOiBhbnlbXTtcblxuICByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgdXNlcjogYW55O1xuICBAVmlld0NoaWxkKCd0YWJHcm91cCcpIHRhYkdyb3VwITogTWF0VGFiR3JvdXA7XG5cbiAgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIEBWaWV3Q2hpbGQoJ3RhYkNvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFiQ29udGVudCE6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5leHRUYWIodGFiR3JvdXA6IE1hdFRhYkdyb3VwKSB7XG4gICAgaWYgKHRhYkdyb3VwICYmIHRhYkdyb3VwLnNlbGVjdGVkSW5kZXggIT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFiR3JvdXAuc2VsZWN0ZWRJbmRleDtcbiAgICAgIGlmIChjdXJyZW50SW5kZXggPCAodGFiR3JvdXAuX3RhYnM/Lmxlbmd0aCB8fCAwKSAtIDEpIHtcbiAgICAgICAgdGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJldmlvdXNUYWIodGFiR3JvdXA6IE1hdFRhYkdyb3VwKSB7XG4gICAgaWYgKHRhYkdyb3VwICYmIHRhYkdyb3VwLnNlbGVjdGVkSW5kZXggIT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFiR3JvdXAuc2VsZWN0ZWRJbmRleDtcbiAgICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICAgIHRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRmlyc3RUYWIodGFiR3JvdXA6IE1hdFRhYkdyb3VwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRhYkdyb3VwICYmIHRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPT09IDA7XG4gIH1cblxuICBpc0xhc3RUYWIodGFiR3JvdXA6IE1hdFRhYkdyb3VwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhYkdyb3VwICYmIHRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPT09ICh0YWJHcm91cC5fdGFicz8ubGVuZ3RoIHx8IDApIC0gMVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dnZWRJblVzZXInKSB8fCAne30nKTtcbiAgfVxuXG4gIGlzVmFsaWQoZmllbGQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5rZXkpIHtcbiAgICAgIGlmIChmaWVsZC5wcm9wcz8uZXhjbHVkZVZhbGlkYXRpb24pIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZpZWxkPy5mb3JtQ29udHJvbD8udmFsaWQgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgID8gZmllbGQuZmllbGRHcm91cC5ldmVyeSgoZjogYW55KSA9PiB0aGlzLmlzVmFsaWQoZikpXG4gICAgICA6IHRydWU7XG4gIH1cblxuICBvblRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBldmVudC5pbmRleDtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGFiIGluZGV4OicsIHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgaWYgKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZC5wcm9wcz8uWyd0YWJDaGFuZ2UnXSkge1xuICAgICAgdGhpcy5maWVsZC5wcm9wcz8uWyd0YWJDaGFuZ2UnXShldmVudCwgdGhpcy5maWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25UYWJJbmRleENoYW5nZShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0YWItJHtpbmRleH1gKTtcbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAgICAgdGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KTtcblxuICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHRhYi0ke2luZGV4fWApO1xuICAgICAgICAgICAgaWYgKHRhYkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGFiVG9wID0gdGFiRWxlbWVudC5vZmZzZXRUb3AgLSBzY3JvbGxDb250YWluZXIub2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRhYkhlaWdodCA9IHRhYkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxUb3AgPj0gdGFiVG9wICYmIHNjcm9sbFRvcCA8IHRhYlRvcCArIHRhYkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbn1cbiJdfQ==