ngx-material-entity 16.0.1 → 16.0.2
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.
- package/components/input/input.component.d.ts +27 -2
- package/components/input/input.module.d.ts +2 -1
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +2 -2
- package/esm2022/components/input/input.component.mjs +90 -32
- package/esm2022/components/input/input.module.mjs +8 -4
- package/esm2022/components/table/table.component.mjs +8 -6
- package/fesm2022/ngx-material-entity.mjs +79 -18
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -19,6 +19,7 @@ import { DateUtilities } from '../../utilities/date.utilities';
|
|
|
19
19
|
import { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';
|
|
20
20
|
import { SelectionUtilities } from '../../utilities/selection.utilities';
|
|
21
21
|
import { CreateDialogDataInternal } from '../table/create-dialog/create-dialog-data.builder';
|
|
22
|
+
import { EditActionInternal } from '../table/edit-dialog/edit-data.builder';
|
|
22
23
|
import { DisplayColumn } from '../table/table-data';
|
|
23
24
|
import { BaseTableActionInternal, TableActionInternal } from '../table/table-data.builder';
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
@@ -107,8 +108,18 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
107
108
|
editArrayItemDialogData: EditArrayItemDialogDataInternal<EntityType>;
|
|
108
109
|
metadataHasMany: HasManyDecoratorConfigInternal<EntityType, EntityType>;
|
|
109
110
|
hasManyIsLoading: boolean;
|
|
110
|
-
|
|
111
|
-
|
|
111
|
+
/**
|
|
112
|
+
* A setter for the has many paginator.
|
|
113
|
+
* Is needed because the paginator is inside a switch case,
|
|
114
|
+
* which means that at ngOnInit it can't be initialized.
|
|
115
|
+
*/
|
|
116
|
+
set hasManyPaginator(paginator: MatPaginator);
|
|
117
|
+
/**
|
|
118
|
+
* A setter for the has many sort.
|
|
119
|
+
* Is needed because the sort is inside a switch case,
|
|
120
|
+
* which means that at ngOnInit it can't be initialized.
|
|
121
|
+
*/
|
|
122
|
+
set hasManySort(sort: MatSort);
|
|
112
123
|
hasManyFilter: string;
|
|
113
124
|
displayedHasManyColumns: string[];
|
|
114
125
|
hasManyDataSource: MatTableDataSource<EntityType>;
|
|
@@ -202,6 +213,20 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
202
213
|
* @returns True when the user can delete the provided entity and false otherwise.
|
|
203
214
|
*/
|
|
204
215
|
hasManyAllowDelete(entity: EntityType): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).
|
|
218
|
+
*
|
|
219
|
+
* @param action - The EditAction to check.
|
|
220
|
+
* @returns Whether or not the Action can be used.
|
|
221
|
+
*/
|
|
222
|
+
hasManyEditActionDisabled(action: EditActionInternal<EntityType>): boolean;
|
|
223
|
+
/**
|
|
224
|
+
* Runs the edit action on the entity.
|
|
225
|
+
*
|
|
226
|
+
* @param action - The action to run.
|
|
227
|
+
*/
|
|
228
|
+
hasManyRunEditAction(action: EditActionInternal<EntityType>): void;
|
|
229
|
+
private confirmHasManyRunEditAction;
|
|
205
230
|
private editHasManyDefaultPage;
|
|
206
231
|
private editHasManyDefaultDialog;
|
|
207
232
|
/**
|
|
@@ -45,8 +45,9 @@ import * as i43 from "@angular/material/menu";
|
|
|
45
45
|
import * as i44 from "@angular/material/progress-spinner";
|
|
46
46
|
import * as i45 from "@angular/material/paginator";
|
|
47
47
|
import * as i46 from "../table/display-column-value/display-column-value.component";
|
|
48
|
+
import * as i47 from "@angular/material/sort";
|
|
48
49
|
export declare class NgxMatEntityInputModule {
|
|
49
50
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityInputModule, never>;
|
|
50
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxMatEntityInputModule, [typeof i1.StringInputComponent, typeof i2.StringTextboxInputComponent, typeof i3.StringAutocompleteInputComponent, typeof i4.StringDropdownInputComponent, typeof i5.StringPasswordInputComponent, typeof i6.BooleanCheckboxInputComponent, typeof i7.BooleanToggleInputComponent, typeof i8.BooleanDropdownInputComponent, typeof i9.NumberInputComponent, typeof i10.NumberDropdownInputComponent, typeof i11.NumberSliderInputComponent, typeof i12.ArrayStringChipsInputComponent, typeof i13.ArrayStringAutocompleteChipsComponent, typeof i14.DateInputComponent, typeof i15.DateRangeInputComponent, typeof i16.DateTimeInputComponent, typeof i17.ArrayDateInputComponent, typeof i18.ArrayDateTimeInputComponent, typeof i19.ArrayDateRangeInputComponent, typeof i20.FileInputComponent, typeof i21.FileImageInputComponent, typeof i22.FileDefaultInputComponent, typeof i23.DragDropDirective, typeof i24.ReferencesManyInputComponent, typeof i25.CustomInputComponent, typeof i26.NgxMatEntityInputComponent], [typeof i27.CommonModule, typeof i28.MatInputModule, typeof i29.FormsModule, typeof i30.MatFormFieldModule, typeof i31.MatSelectModule, typeof i32.MatAutocompleteModule, typeof i33.MatCheckboxModule, typeof i34.MatSlideToggleModule, typeof i35.MatChipsModule, typeof i36.MatIconModule, typeof i37.MatTableModule, typeof i38.MatDialogModule, typeof i39.MatButtonModule, typeof i40.MatDatepickerModule, typeof i41.MatSliderModule, typeof i42.MatTabsModule, typeof i43.MatMenuModule, typeof i44.MatProgressSpinnerModule, typeof i45.MatPaginatorModule, typeof i46.DisplayColumnValueComponent], [typeof i26.NgxMatEntityInputComponent]>;
|
|
51
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxMatEntityInputModule, [typeof i1.StringInputComponent, typeof i2.StringTextboxInputComponent, typeof i3.StringAutocompleteInputComponent, typeof i4.StringDropdownInputComponent, typeof i5.StringPasswordInputComponent, typeof i6.BooleanCheckboxInputComponent, typeof i7.BooleanToggleInputComponent, typeof i8.BooleanDropdownInputComponent, typeof i9.NumberInputComponent, typeof i10.NumberDropdownInputComponent, typeof i11.NumberSliderInputComponent, typeof i12.ArrayStringChipsInputComponent, typeof i13.ArrayStringAutocompleteChipsComponent, typeof i14.DateInputComponent, typeof i15.DateRangeInputComponent, typeof i16.DateTimeInputComponent, typeof i17.ArrayDateInputComponent, typeof i18.ArrayDateTimeInputComponent, typeof i19.ArrayDateRangeInputComponent, typeof i20.FileInputComponent, typeof i21.FileImageInputComponent, typeof i22.FileDefaultInputComponent, typeof i23.DragDropDirective, typeof i24.ReferencesManyInputComponent, typeof i25.CustomInputComponent, typeof i26.NgxMatEntityInputComponent], [typeof i27.CommonModule, typeof i28.MatInputModule, typeof i29.FormsModule, typeof i30.MatFormFieldModule, typeof i31.MatSelectModule, typeof i32.MatAutocompleteModule, typeof i33.MatCheckboxModule, typeof i34.MatSlideToggleModule, typeof i35.MatChipsModule, typeof i36.MatIconModule, typeof i37.MatTableModule, typeof i38.MatDialogModule, typeof i39.MatButtonModule, typeof i40.MatDatepickerModule, typeof i41.MatSliderModule, typeof i42.MatTabsModule, typeof i43.MatMenuModule, typeof i44.MatProgressSpinnerModule, typeof i45.MatPaginatorModule, typeof i46.DisplayColumnValueComponent, typeof i47.MatSortModule], [typeof i26.NgxMatEntityInputComponent]>;
|
|
51
52
|
static ɵinj: i0.ɵɵInjectorDeclaration<NgxMatEntityInputModule>;
|
|
52
53
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable jsdoc/require-jsdoc */
|
|
2
2
|
import { Component } from '@angular/core';
|
|
3
|
-
import { UUIDUtilities } from '
|
|
3
|
+
import { UUIDUtilities } from '../../../../encapsulation/uuid.utilities';
|
|
4
4
|
import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
|
|
|
66
66
|
type: Component,
|
|
67
67
|
args: [{ selector: 'array-string-chips-input', template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString() + uuid\" #model=\"ngModel\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip-row *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip-row>\n <input matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString() + uuid2\" #chipsModel=\"ngModel\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n />\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-grid>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"] }]
|
|
68
68
|
}] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXkvYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC9hcnJheS1zdHJpbmctY2hpcHMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBUTVFLE1BQU0sT0FBTyw4QkFDVCxTQUFRLDhCQUF1RjtJQUUvRixLQUFLLEdBQVcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZDLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFFeEI7Ozs7Ozs7Ozs7T0FVRztJQUNILHVCQUF1QixDQUFDLEtBQXdCO1FBQzVDLE1BQU0sS0FBSyxHQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDBCQUEwQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWpGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRVMsMkJBQTJCLENBQUMsS0FBYTtRQUMvQyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDbkUsT0FBTzthQUNWO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO2dCQUNuRSxPQUFPO2FBQ1Y7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzt1R0F6RFEsOEJBQThCOzJGQUE5Qiw4QkFBOEIsdUZDZDNDLG13Q0F5QmlCOzsyRkRYSiw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBRUksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBVVUlEVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW5jYXBzdWxhdGlvbi91dWlkLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYXNlLWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcnJheS1zdHJpbmctY2hpcHMtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1zdHJpbmctY2hpcHMtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U3RyaW5nQ2hpcHNJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTLCBzdHJpbmdbXT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgdXVpZDI6IHN0cmluZyA9IFVVSURVdGlsaXRpZXMuY3JlYXRlKCk7XG4gICAgY2hpcHNJbnB1dDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFkZGluZyBzdHJpbmdzIHRvIHRoZSBjaGlwc0FycmF5LlxuICAgICAqIENoZWNrcyB2YWxpZGF0aW9uIGFuZCBhbHNvIGNyZWF0ZXMgYSBuZXcgYXJyYXkgaWYgaXQgaXMgdW5kZWZpbmVkLlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdHdvIHRoaW5ncyBhcmUgdmFsaWRhdGVkOiBUaGUgYXJyYXkgaXRzZWxmXG4gICAgICogYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkuIEFuZCB3ZSBuZWVkIGEgd2F5IHRvIGRpc3BsYXkgYW5cbiAgICAgKiBtYXQtZXJyb3IuIEFzIHRoZSBvbmx5IHZhbGlkYXRpb24gZm9yIHRoZSBhcnJheSBpcyB3aGV0aGVyIG9yIG5vdFxuICAgICAqIGl0IGNvbnRhaW5zIHZhbHVlcywgd2UgY2FuIHNldCBpdCB0byB1bmRlZmluZWQgd2hlbiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlbW92ZWRcbiAgICAgKiAocmVtb3ZlU3RyaW5nQ2hpcEFycmF5VmFsdWUpLiBUaGF0IHdheSB3ZSBjYW4gdXNlIHRoZSBcInJlcXVpcmVkXCIgdmFsaWRhdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRoYXQgZmlyZXMgd2hlbiBhIG5ldyBjaGlwIGlzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBhZGRTdHJpbmdDaGlwQXJyYXlWYWx1ZShldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlQW5kU2V0UHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGV2ZW50LmNoaXBJbnB1dD8uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jaGlwc0lucHV0ID0gJyc7XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgYXJyYXkuXG4gICAgICogU2V0cyB0aGUgYXJyYXkgdG8gdW5kZWZpbmVkIGlmIGl0IGlzIG5vdyBlbXB0eS5cbiAgICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHR3byB0aGluZ3MgYXJlIHZhbGlkYXRlZDogVGhlIGFycmF5IGl0c2VsZlxuICAgICAqIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIGFycmF5LiBBbmQgd2UgbmVlZCBhIHdheSB0byBkaXNwbGF5IGFuXG4gICAgICogbWF0LWVycm9yLiBBcyB0aGUgb25seSB2YWxpZGF0aW9uIGZvciB0aGUgYXJyYXkgaXMgd2hldGhlciBvciBub3RcbiAgICAgKiBpdCBpcyBlbXB0eSwgc2V0dGluZyBpdCB0byB1bmRlZmluZWQgaGVyZSBlbmFibGVzIHVzIHRvIHVzZSB0aGUgXCJyZXF1aXJlZFwiIHZhbGlkYXRvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gcmVtb3ZlIGZyb20gdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHJlbW92ZVN0cmluZ0NoaXBBcnJheVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlPy5zcGxpY2UodGhpcy5wcm9wZXJ0eVZhbHVlLmluZGV4T2YodmFsdWUpLCAxKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlPy5sZW5ndGggPyB0aGlzLnByb3BlcnR5VmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlQW5kU2V0UHJvcGVydHlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMubWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKHRoaXMubWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufSIsIjxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwR3JpZFxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5VmFsdWVcIiBbbmFtZV09XCJrZXkudG9TdHJpbmcoKSArIHV1aWRcIiAjbW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkT25seVwiXG4gICAgPlxuICAgICAgICA8bWF0LWNoaXAtcm93ICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBwcm9wZXJ0eVZhbHVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlU3RyaW5nQ2hpcEFycmF5VmFsdWUodmFsdWUpXCI+XG4gICAgICAgICAgICB7e3ZhbHVlfX1cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e21ldGFkYXRhLmRlbGV0ZUljb259fVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBHcmlkXCJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkU3RyaW5nQ2hpcEFycmF5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaXBzSW5wdXRcIiBbbmFtZV09XCJrZXkudG9TdHJpbmcoKSArIHV1aWQyXCIgI2NoaXBzTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIFttaW5sZW5ndGhdPVwibWV0YWRhdGEubWluTGVuZ3RoID8/IG51bGxcIlxuICAgICAgICAgICAgW21heGxlbmd0aF09XCJtZXRhZGF0YS5tYXhMZW5ndGggPz8gbnVsbFwiXG4gICAgICAgICAgICBbcGF0dGVybl09XCJtZXRhZGF0YS5yZWdleCA/PyAnW1xcXFxzXFxcXFNdKidcIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiY2hpcHNNb2RlbC5lcnJvcnNcIj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UoY2hpcHNNb2RlbCl9fTwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiIWNoaXBzTW9kZWwuZXJyb3JzXCI+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKG1vZGVsKX19PC9tYXQtZXJyb3I+XG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
|