ng-fusion-ui 0.3.7 → 0.3.9
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/esm2022/lib/data-grid/components/row-actions/row-actions.component.mjs +3 -3
- package/esm2022/lib/data-grid/data-grid/data-grid.component.mjs +6 -4
- package/esm2022/lib/icons/icon-names.mjs +1 -1
- package/esm2022/lib/icons/icon-registry.service.mjs +3 -2
- package/esm2022/lib/icons/icon.component.mjs +2 -2
- package/esm2022/lib/icons/icons.mjs +2 -1
- package/fesm2022/ng-fusion-ui.mjs +10 -6
- package/fesm2022/ng-fusion-ui.mjs.map +1 -1
- package/lib/data-grid/data-grid/data-grid.component.d.ts +2 -1
- package/lib/icons/icon-names.d.ts +1 -1
- package/lib/icons/icons.d.ts +1 -0
- package/package.json +1 -1
|
@@ -57,14 +57,14 @@ export class RowActionsComponent {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RowActionsComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.EditRowService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: RowActionsComponent, selector: "fu-row-actions", inputs: { editRow: { classPropertyName: "editRow", publicName: "editRow", isSignal: true, isRequired: false, transformFunction: null }, editIndex: { classPropertyName: "editIndex", publicName: "editIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editSave: "editSave", delete: "delete" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) {\r\n @if (isEditing()) {\r\n <button fu-btn-outline iconButton (click)=\"cancelEdit($event)\">\r\n <fu-icon iconName=\"editOff\" />\r\n </button>\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"success\"\r\n (click)=\"saveEdit($event)\"\r\n >\r\n <fu-icon iconName=\"
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: RowActionsComponent, selector: "fu-row-actions", inputs: { editRow: { classPropertyName: "editRow", publicName: "editRow", isSignal: true, isRequired: false, transformFunction: null }, editIndex: { classPropertyName: "editIndex", publicName: "editIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editSave: "editSave", delete: "delete" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) {\r\n @if (isEditing()) {\r\n <button fu-btn-outline iconButton (click)=\"cancelEdit($event)\">\r\n <fu-icon iconName=\"editOff\" />\r\n </button>\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"success\"\r\n (click)=\"saveEdit($event)\"\r\n >\r\n <fu-icon iconName=\"save\" />\r\n </button>\r\n } @else {\r\n <button fu-btn-outline iconButton (click)=\"setEdit($event)\">\r\n <fu-icon iconName=\"edit\" />\r\n </button>\r\n }\r\n }\r\n @if (!isEditing() && showDelete()) {\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"danger\"\r\n (click)=\"emitDelete($event)\"\r\n >\r\n <fu-icon iconName=\"trash\" />\r\n </button>\r\n }\r\n <ng-content />\r\n</div>\r\n", styles: [".fu-row-actions{display:flex;justify-content:flex-end;align-items:center;height:100%;gap:12px;margin-right:16px}@media (max-width: 900px){.fu-row-actions{justify-content:center}}\n"], dependencies: [{ kind: "component", type: i2.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i3.OutlinedButtonDirective, selector: "[fu-btn-outline]", inputs: ["variant", "iconButton", "rounded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
61
61
|
}
|
|
62
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RowActionsComponent, decorators: [{
|
|
63
63
|
type: Component,
|
|
64
|
-
args: [{ selector: 'fu-row-actions', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) {\r\n @if (isEditing()) {\r\n <button fu-btn-outline iconButton (click)=\"cancelEdit($event)\">\r\n <fu-icon iconName=\"editOff\" />\r\n </button>\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"success\"\r\n (click)=\"saveEdit($event)\"\r\n >\r\n <fu-icon iconName=\"
|
|
64
|
+
args: [{ selector: 'fu-row-actions', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) {\r\n @if (isEditing()) {\r\n <button fu-btn-outline iconButton (click)=\"cancelEdit($event)\">\r\n <fu-icon iconName=\"editOff\" />\r\n </button>\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"success\"\r\n (click)=\"saveEdit($event)\"\r\n >\r\n <fu-icon iconName=\"save\" />\r\n </button>\r\n } @else {\r\n <button fu-btn-outline iconButton (click)=\"setEdit($event)\">\r\n <fu-icon iconName=\"edit\" />\r\n </button>\r\n }\r\n }\r\n @if (!isEditing() && showDelete()) {\r\n <button\r\n fu-btn-outline\r\n iconButton\r\n variant=\"danger\"\r\n (click)=\"emitDelete($event)\"\r\n >\r\n <fu-icon iconName=\"trash\" />\r\n </button>\r\n }\r\n <ng-content />\r\n</div>\r\n", styles: [".fu-row-actions{display:flex;justify-content:flex-end;align-items:center;height:100%;gap:12px;margin-right:16px}@media (max-width: 900px){.fu-row-actions{justify-content:center}}\n"] }]
|
|
65
65
|
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.EditRowService }], propDecorators: { editSave: [{
|
|
66
66
|
type: Output
|
|
67
67
|
}], delete: [{
|
|
68
68
|
type: Output
|
|
69
69
|
}] } });
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvcm93LWFjdGlvbnMvcm93LWFjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvcm93LWFjdGlvbnMvcm93LWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUlaLE1BQU0sRUFHTixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQXdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTbEQsTUFBTSxPQUFPLG1CQUFtQjtJQWM5QixZQUNVLFFBQW1CLEVBQ25CLEVBQWMsRUFDZCxjQUE4QjtRQUY5QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFkakMsWUFBTyxHQUFHLEtBQUssRUFBSyxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUU1QixjQUFTLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25DLGVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFMUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFTakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxDQUFRO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sVUFBVSxDQUFDLENBQVE7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxDQUFRO1FBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNyRSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFPLENBQUM7WUFFL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sVUFBVSxDQUFDLENBQVE7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7OEdBckVVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhZQ3pCaEMsNDNCQWdDQTs7MkZEUGEsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJO29JQVdwQixRQUFRO3NCQUF4QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgaW5wdXQsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0Um93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXQtcm93LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1yb3ctYWN0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvdy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcm93LWFjdGlvbnMuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb3dBY3Rpb25zQ29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICBwdWJsaWMgZWRpdFJvdyA9IGlucHV0PFQ+KCk7XHJcbiAgcHVibGljIGVkaXRJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIGlzRWRpdGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHNob3dEZWxldGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGVkaXRTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGVkaXRSb3dTZXJ2aWNlOiBFZGl0Um93U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGF0YS1hY3Rpb25zJywgJ3RydWUnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snZWRpdFJvdyddICYmIGNoYW5nZXNbJ2VkaXRJbmRleCddKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5lZGl0Um93U2VydmljZS5lZGl0SW5kZXgkLnN1YnNjcmliZShpbmRleCA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcuc2V0KGluZGV4ID09PSB0aGlzLmVkaXRJbmRleCgpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dEZWxldGUuc2V0KHRoaXMuZGVsZXRlLm9ic2VydmVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFZGl0KGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLnN0YXJ0RWRpdGluZyh0aGlzLmVkaXRJbmRleCgpISk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXQoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdFJvd1NlcnZpY2Uuc3RvcEVkaXRpbmcoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUVkaXQoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdFJvd1NlcnZpY2Uuc3RvcEVkaXRpbmcoKTtcclxuXHJcbiAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLmVkaXRWYWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGVkaXRlZFZhbHVlcyA9PiB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnRoaXMuZWRpdFJvdygpLCAuLi5lZGl0ZWRWYWx1ZXMgfSBhcyBUO1xyXG5cclxuICAgICAgdGhpcy5lZGl0U2F2ZS5lbWl0KHVwZGF0ZWRSb3cpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0Um93U2VydmljZS5yZXNldEVkaXRWYWx1ZXMoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1pdERlbGV0ZShlOiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWxldGUuZW1pdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLnN0b3BFZGl0aW5nKCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmdS1yb3ctYWN0aW9uc1wiPlxyXG4gIEBpZiAoZWRpdFJvdygpICYmIGVkaXRJbmRleCgpICE9PSBudWxsKSB7XHJcbiAgICBAaWYgKGlzRWRpdGluZygpKSB7XHJcbiAgICAgIDxidXR0b24gZnUtYnRuLW91dGxpbmUgaWNvbkJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsRWRpdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJlZGl0T2ZmXCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tb3V0bGluZVxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICB2YXJpYW50PVwic3VjY2Vzc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVFZGl0KCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJzYXZlXCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgPGJ1dHRvbiBmdS1idG4tb3V0bGluZSBpY29uQnV0dG9uIChjbGljayk9XCJzZXRFZGl0KCRldmVudClcIj5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImVkaXRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICB9XHJcbiAgQGlmICghaXNFZGl0aW5nKCkgJiYgc2hvd0RlbGV0ZSgpKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGZ1LWJ0bi1vdXRsaW5lXHJcbiAgICAgIGljb25CdXR0b25cclxuICAgICAgdmFyaWFudD1cImRhbmdlclwiXHJcbiAgICAgIChjbGljayk9XCJlbWl0RGVsZXRlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cInRyYXNoXCIgLz5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bmctY29udGVudCAvPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, effect, signal, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, effect, model, signal, } from '@angular/core';
|
|
2
2
|
import { DataSortingService, } from '../services/data-sorting.service';
|
|
3
3
|
import { GridHeaderTemplateDirective } from '../directives/grid-header-template.directive';
|
|
4
4
|
import { GridBodyTemplateDirective } from '../directives/grid-body-template.directive';
|
|
@@ -85,6 +85,7 @@ export class DataGridComponent {
|
|
|
85
85
|
this.paginatedData = [];
|
|
86
86
|
this.expandedRowIndex = null;
|
|
87
87
|
this.serverPagination = signal(false);
|
|
88
|
+
this.expandIndex = model(null);
|
|
88
89
|
this.originalOrder = (a, b) => {
|
|
89
90
|
const keys = Object.keys(this.dataSource);
|
|
90
91
|
return keys.indexOf(a.key) - keys.indexOf(b.key);
|
|
@@ -177,6 +178,7 @@ export class DataGridComponent {
|
|
|
177
178
|
}
|
|
178
179
|
updatePagination() {
|
|
179
180
|
this.expandedRowIndex = null;
|
|
181
|
+
this.expandIndex.set(null);
|
|
180
182
|
if (this.serverPagination()) {
|
|
181
183
|
return this.serverSidePagination();
|
|
182
184
|
}
|
|
@@ -231,11 +233,11 @@ export class DataGridComponent {
|
|
|
231
233
|
}
|
|
232
234
|
}
|
|
233
235
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, deps: [{ token: i1.DataSortingService }, { token: i2.PaginationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
234
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: "dataSource", localStorageKey: "localStorageKey", totalCount: "totalCount", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", columnSizes: "columnSizes", dataLoading: "dataLoading", expandable: "expandable", filter: "filter", paginator: "paginator", hoverable: "hoverable", striped: "striped", firstPageOnInit: "firstPageOnInit", renderNewAddRow: "renderNewAddRow" }, outputs: { rowSelect: "rowSelect", onSort: "onSort" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }, { propertyName: "addButtonTemplate", first: true, predicate: ["addButton"], descendants: true }, { propertyName: "addNewRowTemplate", first: true, predicate: ["addNewRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"\r\n expandable || rowSelect.observed ? 'pointer' : 'default'\r\n \"\r\n (click)=\"rowClick(row, $index)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate || defaultBodyTemplate;\r\n context: { $implicit: row, index: $index, keys: row | keyMapping }\r\n \"\r\n />\r\n\r\n @if (expandable && expandedRowIndex === $index) {\r\n <div class=\"fu-expanded-row\" (click)=\"$event.stopPropagation()\">\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n expandTemplate;\r\n context: { $implicit: row, index: $index }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"footerTemplate; context: { $implicit: paginatedData }\"\r\n />\r\n\r\n @if (paginatedData.length <= 0 && !dataLoading) {\r\n <ng-container *ngTemplateOutlet=\"noDataTemplate\" />\r\n }\r\n\r\n @if (renderNewAddRow) {\r\n <ng-container *ngTemplateOutlet=\"addNewRowTemplate\" />\r\n }\r\n\r\n @if (paginator) {\r\n <ng-container\r\n *ngTemplateOutlet=\"defaultPaginator; context: { $implicit: sortData }\"\r\n />\r\n }\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-data>\r\n @for (header of data[0] | keyvalue: originalOrder; track $index) {\r\n <fu-head-row-cell\r\n [cellDef]=\"$any(header.key)\"\r\n [sortKey]=\"$any(header.key)\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultBodyTemplate let-rows>\r\n @for (row of rows | keyvalue: originalOrder; track $index) {\r\n <fu-body-row-cell [cellValue]=\"$any(row.value)\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultPaginator let-data>\r\n <div class=\"fu-data-grid-paginator\">\r\n <div class=\"fu-grid-add-button\">\r\n <ng-container *ngTemplateOutlet=\"addButtonTemplate\" />\r\n </div>\r\n\r\n <div class=\"fu-paginator-page-select\">\r\n <span>Page size:</span>\r\n <select class=\"fu-page-size-select\" (change)=\"changePageSize($event)\">\r\n <option\r\n *ngFor=\"let size of pageSizeOptions\"\r\n [value]=\"size\"\r\n [selected]=\"size === pageSize\"\r\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"fu-paginator-controls\">\r\n <div>\r\n {{ getPageStart() }} - {{ getPageEnd() }} of {{ totalItemCount() }}\r\n </div>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"doubleArrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage - 1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"arrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage + 1)\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"arrowRight\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(totalPages())\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"doubleArrowRight\" />\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color);align-items:center}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px;position:relative}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-grid-add-button{position:absolute;left:10px;top:10px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i6.TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: i7.GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: i8.BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: i9.HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i10.KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
236
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: true, transformFunction: null }, localStorageKey: { classPropertyName: "localStorageKey", publicName: "localStorageKey", isSignal: false, isRequired: true, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: false, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: false, isRequired: false, transformFunction: null }, columnSizes: { classPropertyName: "columnSizes", publicName: "columnSizes", isSignal: false, isRequired: false, transformFunction: null }, dataLoading: { classPropertyName: "dataLoading", publicName: "dataLoading", isSignal: false, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: false, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: false, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: false, isRequired: false, transformFunction: null }, firstPageOnInit: { classPropertyName: "firstPageOnInit", publicName: "firstPageOnInit", isSignal: false, isRequired: false, transformFunction: null }, renderNewAddRow: { classPropertyName: "renderNewAddRow", publicName: "renderNewAddRow", isSignal: false, isRequired: false, transformFunction: null }, expandIndex: { classPropertyName: "expandIndex", publicName: "expandIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowSelect: "rowSelect", onSort: "onSort", expandIndex: "expandIndexChange" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }, { propertyName: "addButtonTemplate", first: true, predicate: ["addButton"], descendants: true }, { propertyName: "addNewRowTemplate", first: true, predicate: ["addNewRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"\r\n expandable || rowSelect.observed ? 'pointer' : 'default'\r\n \"\r\n (click)=\"rowClick(row, $index)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate || defaultBodyTemplate;\r\n context: { $implicit: row, index: $index, keys: row | keyMapping }\r\n \"\r\n />\r\n\r\n @if (\r\n (expandable && expandedRowIndex === $index) ||\r\n expandIndex() === $index\r\n ) {\r\n <div class=\"fu-expanded-row\" (click)=\"$event.stopPropagation()\">\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n expandTemplate;\r\n context: { $implicit: row, index: $index }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"footerTemplate; context: { $implicit: paginatedData }\"\r\n />\r\n\r\n @if (paginatedData.length <= 0 && !dataLoading) {\r\n <ng-container *ngTemplateOutlet=\"noDataTemplate\" />\r\n }\r\n\r\n @if (renderNewAddRow) {\r\n <ng-container *ngTemplateOutlet=\"addNewRowTemplate\" />\r\n }\r\n\r\n @if (paginator) {\r\n <ng-container\r\n *ngTemplateOutlet=\"defaultPaginator; context: { $implicit: sortData }\"\r\n />\r\n }\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-data>\r\n @for (header of data[0] | keyvalue: originalOrder; track $index) {\r\n <fu-head-row-cell\r\n [cellDef]=\"$any(header.key)\"\r\n [sortKey]=\"$any(header.key)\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultBodyTemplate let-rows>\r\n @for (row of rows | keyvalue: originalOrder; track $index) {\r\n <fu-body-row-cell [cellValue]=\"$any(row.value)\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultPaginator let-data>\r\n <div class=\"fu-data-grid-paginator\">\r\n <div class=\"fu-grid-add-button\">\r\n <ng-container *ngTemplateOutlet=\"addButtonTemplate\" />\r\n </div>\r\n\r\n <div class=\"fu-paginator-page-select\">\r\n <span>Page size:</span>\r\n <select class=\"fu-page-size-select\" (change)=\"changePageSize($event)\">\r\n <option\r\n *ngFor=\"let size of pageSizeOptions\"\r\n [value]=\"size\"\r\n [selected]=\"size === pageSize\"\r\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"fu-paginator-controls\">\r\n <div>\r\n {{ getPageStart() }} - {{ getPageEnd() }} of {{ totalItemCount() }}\r\n </div>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"doubleArrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage - 1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"arrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage + 1)\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"arrowRight\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(totalPages())\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"doubleArrowRight\" />\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color);align-items:center}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px;position:relative}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-grid-add-button{position:absolute;left:10px;top:10px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i6.TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: i7.GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: i8.BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: i9.HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i10.KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
235
237
|
}
|
|
236
238
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, decorators: [{
|
|
237
239
|
type: Component,
|
|
238
|
-
args: [{ selector: 'fu-data-grid', providers: [DataSortingService], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"\r\n expandable || rowSelect.observed ? 'pointer' : 'default'\r\n \"\r\n (click)=\"rowClick(row, $index)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate || defaultBodyTemplate;\r\n context: { $implicit: row, index: $index, keys: row | keyMapping }\r\n \"\r\n />\r\n\r\n @if (expandable && expandedRowIndex === $index) {\r\n <div class=\"fu-expanded-row\" (click)=\"$event.stopPropagation()\">\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n expandTemplate;\r\n context: { $implicit: row, index: $index }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"footerTemplate; context: { $implicit: paginatedData }\"\r\n />\r\n\r\n @if (paginatedData.length <= 0 && !dataLoading) {\r\n <ng-container *ngTemplateOutlet=\"noDataTemplate\" />\r\n }\r\n\r\n @if (renderNewAddRow) {\r\n <ng-container *ngTemplateOutlet=\"addNewRowTemplate\" />\r\n }\r\n\r\n @if (paginator) {\r\n <ng-container\r\n *ngTemplateOutlet=\"defaultPaginator; context: { $implicit: sortData }\"\r\n />\r\n }\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-data>\r\n @for (header of data[0] | keyvalue: originalOrder; track $index) {\r\n <fu-head-row-cell\r\n [cellDef]=\"$any(header.key)\"\r\n [sortKey]=\"$any(header.key)\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultBodyTemplate let-rows>\r\n @for (row of rows | keyvalue: originalOrder; track $index) {\r\n <fu-body-row-cell [cellValue]=\"$any(row.value)\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultPaginator let-data>\r\n <div class=\"fu-data-grid-paginator\">\r\n <div class=\"fu-grid-add-button\">\r\n <ng-container *ngTemplateOutlet=\"addButtonTemplate\" />\r\n </div>\r\n\r\n <div class=\"fu-paginator-page-select\">\r\n <span>Page size:</span>\r\n <select class=\"fu-page-size-select\" (change)=\"changePageSize($event)\">\r\n <option\r\n *ngFor=\"let size of pageSizeOptions\"\r\n [value]=\"size\"\r\n [selected]=\"size === pageSize\"\r\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"fu-paginator-controls\">\r\n <div>\r\n {{ getPageStart() }} - {{ getPageEnd() }} of {{ totalItemCount() }}\r\n </div>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"doubleArrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage - 1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"arrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage + 1)\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"arrowRight\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(totalPages())\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"doubleArrowRight\" />\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color);align-items:center}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px;position:relative}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-grid-add-button{position:absolute;left:10px;top:10px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
240
|
+
args: [{ selector: 'fu-data-grid', providers: [DataSortingService], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"\r\n expandable || rowSelect.observed ? 'pointer' : 'default'\r\n \"\r\n (click)=\"rowClick(row, $index)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n bodyTemplate || defaultBodyTemplate;\r\n context: { $implicit: row, index: $index, keys: row | keyMapping }\r\n \"\r\n />\r\n\r\n @if (\r\n (expandable && expandedRowIndex === $index) ||\r\n expandIndex() === $index\r\n ) {\r\n <div class=\"fu-expanded-row\" (click)=\"$event.stopPropagation()\">\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n expandTemplate;\r\n context: { $implicit: row, index: $index }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"footerTemplate; context: { $implicit: paginatedData }\"\r\n />\r\n\r\n @if (paginatedData.length <= 0 && !dataLoading) {\r\n <ng-container *ngTemplateOutlet=\"noDataTemplate\" />\r\n }\r\n\r\n @if (renderNewAddRow) {\r\n <ng-container *ngTemplateOutlet=\"addNewRowTemplate\" />\r\n }\r\n\r\n @if (paginator) {\r\n <ng-container\r\n *ngTemplateOutlet=\"defaultPaginator; context: { $implicit: sortData }\"\r\n />\r\n }\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-data>\r\n @for (header of data[0] | keyvalue: originalOrder; track $index) {\r\n <fu-head-row-cell\r\n [cellDef]=\"$any(header.key)\"\r\n [sortKey]=\"$any(header.key)\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultBodyTemplate let-rows>\r\n @for (row of rows | keyvalue: originalOrder; track $index) {\r\n <fu-body-row-cell [cellValue]=\"$any(row.value)\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultPaginator let-data>\r\n <div class=\"fu-data-grid-paginator\">\r\n <div class=\"fu-grid-add-button\">\r\n <ng-container *ngTemplateOutlet=\"addButtonTemplate\" />\r\n </div>\r\n\r\n <div class=\"fu-paginator-page-select\">\r\n <span>Page size:</span>\r\n <select class=\"fu-page-size-select\" (change)=\"changePageSize($event)\">\r\n <option\r\n *ngFor=\"let size of pageSizeOptions\"\r\n [value]=\"size\"\r\n [selected]=\"size === pageSize\"\r\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"fu-paginator-controls\">\r\n <div>\r\n {{ getPageStart() }} - {{ getPageEnd() }} of {{ totalItemCount() }}\r\n </div>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"doubleArrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage - 1)\"\r\n [disabled]=\"currentPage === 1\"\r\n >\r\n <fu-icon iconName=\"arrowLeft\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(currentPage + 1)\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"arrowRight\" />\r\n </button>\r\n <button\r\n fu-btn-text\r\n iconButton\r\n (click)=\"goToPage(totalPages())\"\r\n [disabled]=\"currentPage >= totalPages()\"\r\n >\r\n <fu-icon iconName=\"doubleArrowRight\" />\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color);align-items:center}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px;position:relative}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-grid-add-button{position:absolute;left:10px;top:10px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
239
241
|
}], ctorParameters: () => [{ type: i1.DataSortingService }, { type: i2.PaginationService }], propDecorators: { dataSource: [{
|
|
240
242
|
type: Input,
|
|
241
243
|
args: [{ required: true }]
|
|
@@ -295,4 +297,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
295
297
|
}], onSort: [{
|
|
296
298
|
type: Output
|
|
297
299
|
}] } });
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixHQUVuQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRzNGLE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFVNUMsTUFBTSxPQUFPLGlCQUFpQjtJQW1HNUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFsRzlDOzs7V0FHRztRQUMrQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3ZEOztXQUVHO1FBQytCLG9CQUFlLEdBQVcsTUFBTSxDQUFDO1FBTW5FOztXQUVHO1FBQ2EsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQzs7V0FFRztRQUNhLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBT3hEOzs7V0FHRztRQUNhLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdDOztXQUVHO1FBQ2EsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qzs7O1dBR0c7UUFDYSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hDOztXQUVHO1FBQ2EsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQzs7V0FFRztRQUNhLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUM7O1dBRUc7UUFDYSxZQUFPLEdBQVksSUFBSSxDQUFDO1FBQ3hDOztXQUVHO1FBQ2Esb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakQ7O1dBRUc7UUFDYSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQWFqRDs7O1dBR0c7UUFDYyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUVuRCxlQUFVLEdBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxrQkFBYSxHQUFtQixLQUFLLENBQUM7UUFDdEMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRXhCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBRXhCLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMscUJBQWdCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBeUUxQyxrQkFBYSxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBVSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDO1FBcEVBLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO29CQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVU7YUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUVyQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxjQUFjLEVBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQzVCLENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN4QixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxXQUFXLENBQzNDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FDeEMsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDM0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLFdBQVcsSUFBSSxDQUFDLGVBQWUsY0FBYyxDQUM5QyxJQUFJLEdBQUcsQ0FDVCxDQUFDO2dCQUNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQU9NLFFBQVEsQ0FBQyxHQUFRO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLGFBQWEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBVztRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFakUsUUFBUTthQUNMLGdCQUFnQixDQUFDLGVBQWUsQ0FBQzthQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FDdEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3ZFLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLFdBQVcsSUFBSSxDQUFDLGVBQWUsY0FBYyxFQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVk7UUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixXQUFXLElBQUksQ0FBQyxlQUFlLGNBQWMsRUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxjQUFjLEVBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQzVCLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxXQUFXLEVBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFNLEVBQUUsUUFBZ0IsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDOzhHQW5UVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw0ZUFKakIsQ0FBQyxrQkFBa0IsQ0FBQyxtS0F1RWpCLDJCQUEyQiwyQkFBVSxXQUFXLDREQUVoRCx5QkFBeUIsMkJBQVUsV0FBVyw4REFFOUMsMkJBQTJCLDJCQUFVLFdBQVcsNmFDMUdoRSwybUpBdUpBOzsyRkRwSGEsaUJBQWlCO2tCQVI3QixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLGtCQUFrQixDQUFDLG1CQUNkLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7dUhBU0gsVUFBVTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSVMsZUFBZTtzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS1QsVUFBVTtzQkFBekIsS0FBSztnQkFJVSxRQUFRO3NCQUF2QixLQUFLO2dCQUlVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBTVUsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxXQUFXO3NCQUExQixLQUFLO2dCQUlVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsTUFBTTtzQkFBckIsS0FBSztnQkFJVSxTQUFTO3NCQUF4QixLQUFLO2dCQUlVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBSVUsT0FBTztzQkFBdEIsS0FBSztnQkFJVSxlQUFlO3NCQUE5QixLQUFLO2dCQUlVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRTBCLGVBQWU7c0JBQTlDLFlBQVk7dUJBQUMsU0FBUztnQkFFaEIsY0FBYztzQkFEcEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3pELFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUd2RCxjQUFjO3NCQURwQixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFFakMsY0FBYztzQkFBNUMsWUFBWTt1QkFBQyxRQUFRO2dCQUNZLGNBQWM7c0JBQS9DLFlBQVk7dUJBQUMsV0FBVztnQkFDUyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsV0FBVztnQkFDUyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsV0FBVztnQkFLUixTQUFTO3NCQUF6QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBlZmZlY3QsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIERhdGFTb3J0aW5nU2VydmljZSxcclxuICBPblNvcnRFdmVudCxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1ib2R5LXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRFeHBhbmRUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1leHBhbmQtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbHVtblNpemVzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWNvbHVtbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnUtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFtEYXRhU29ydGluZ1NlcnZpY2VdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PlxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gIC8qKlxyXG4gICAqIFRhYmxlIGRhdGEgLSBhcnJheSBvZiBvYmplY3RzLlxyXG4gICAqIFt0b3RhbENvdW50XSByZXF1aXJlZCB3aXRoIHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGRhdGFTb3VyY2U6IFRbXSA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIFN0cmluZyBrZXkgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHBhZ2VTaXplIGFuZCBjdXJyZW50UGFnZSBpbiBsb2NhbCBzdG9yYWdlIGZvciBlYWNoIHRhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyA9ICdkYXRhJztcclxuICAvKipcclxuICAgKiBUb3RhbCBkYXRhIGNvdW50LlxyXG4gICAqIFJlcXVpcmVkIHdpdGggc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWwgcGFnZSBzaXplIGZvciBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIC8qKlxyXG4gICAqIFBhZ2Ugc2l6ZSBvcHRpb25zZm9yIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMTVdO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGNvbHVtbiBzaXplcywgd2hlcmUgZWFjaCBzaXplIGlzIGEgdmFsaWQgQ1NTIHVuaXQgc3RyaW5nLlxyXG4gICAqIFZhbGlkIHVuaXRzIGFyZTogYHB4YCwgYGZyYCwgYHJlbWAsIGAlYC5cclxuICAgKiBFeGFtcGxlOiBbJzIwMHB4JywgJzFmcicsICcxMCUnLCAnNXJlbSddXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtblNpemVzOiBDb2x1bW5TaXplcztcclxuICAvKipcclxuICAgKiBTaG93cyBzcGlubmVyIGFuZCBvdmVybGF5IHdoZW4gbmV3IGRhdGEgaXMgYmVpbmcgbG9hZGVkLlxyXG4gICAqIFVzYWJsZSBvbmx5IHdpdGggc2VydmVyIHBhZ2luYXRpb24gd2hlbiB0b3RhbENvdW50IGlzIHByb3ZpZGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIE1ha2VzIHJvdyBleHBhbmRhYmxlIG9uIGNsaWNrLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBmaWx0ZXIgZm9yIGRhdGFTb3VyY2UuXHJcbiAgICogVXNhYmxlIG9ubHkgaWYgbm90IHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFNob3dzIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyByb3cgb24gaG92ZXIuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhvdmVyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRGFya2VyIGJhY2tncm91bmQgZm9yIGVhY2ggb2RkIHJvdy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogU2V0cyBwYWdpbmF0b3IgdG8gZmlyc3QgcGFnZSBvbiBpbml0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaXJzdFBhZ2VPbkluaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBSZW5kZXJzIGVtcHR5IGNvbnRhaW5lciBhYm92ZSBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHJlbmRlck5ld0FkZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdjYXB0aW9uJykgcHVibGljIGNhcHRpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEV4cGFuZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGV4cGFuZFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdmb290ZXInKSBwdWJsaWMgZm9vdGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ25vRGF0YVJvdycpIHB1YmxpYyBub0RhdGFUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnYWRkQnV0dG9uJykgcHVibGljIGFkZEJ1dHRvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdhZGROZXdSb3cnKSBwdWJsaWMgYWRkTmV3Um93VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgcm93IGlzIGNsaWNrZWQuXHJcbiAgICogRW1pdHMgc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPE9uU29ydEV2ZW50PigpO1xyXG5cclxuICBwdWJsaWMgc29ydGVkRGF0YTogVFtdID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIHNvcnRLZXk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWREYXRhOiBUW10gPSBbXTtcclxuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgcGFnaW5hdGVkRGF0YTogVFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZFJvd0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgc2VydmVyUGFnaW5hdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLnNvcnREYXRhKHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSkge1xyXG4gICAgICAgIHRoaXMub25Tb3J0LmVtaXQoe1xyXG4gICAgICAgICAgc29ydEtleTogdGhpcy5zb3J0U2VydmljZS5zb3J0S2V5KCksXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmZpcnN0UGFnZSRcclxuICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuY3VycmVudFBhZ2UgIT09IDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2xvY2FsU3RvcmFnZUtleSddKSB7XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlS2V5KHRoaXMubG9jYWxTdG9yYWdlS2V5KTtcclxuXHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcclxuICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYFxyXG4gICAgICAgICkgfHwgdGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF0udG9TdHJpbmcoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmlyc3RQYWdlT25Jbml0KSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbigxLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcclxuICAgICAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgXHJcbiAgICAgICAgICApIHx8ICcxJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbENvdW50J10pIHtcclxuICAgICAgdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uLnNldCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snZGF0YVNvdXJjZSddKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuc29ydGVkRGF0YSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3J0U2VydmljZS5nZXRDZWxsS2V5cyh0aGlzLmRhdGFTb3VyY2VbMF0gfHwge30pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3JpZ2luYWxPcmRlciA9IChhOiBhbnksIGI6IGFueSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhU291cmNlKTtcclxuICAgIHJldHVybiBrZXlzLmluZGV4T2YoYS5rZXkpIC0ga2V5cy5pbmRleE9mKGIua2V5KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc29ydERhdGEoa2V5OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydEtleSA9IGtleTtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGFba2V5XSA8IGJba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuICAgICAgfSBlbHNlIGlmIChhW2tleV0gPiBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZFNvcnRDbGFzcyhrZXkpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNvcnRDbGFzcyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zb3J0ZWQ9XCIke2tleX1cIl1gKTtcclxuXHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc29ydGVkXScpXHJcbiAgICAgIC5mb3JFYWNoKHRoID0+IHRoLmNsYXNzTGlzdC5yZW1vdmUoJ3NvcnQtYXNjJywgJ3NvcnQtZGVzYycpKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnc29ydC1hc2MnIDogJ3NvcnQtZGVzYycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlckRhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJUZXh0LnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSgodmFsdWU6IGFueSkgPT5cclxuICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhXTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNpZGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5kYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5zb3J0ZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKHBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbUNvdW50KCkgLyB0aGlzLnBhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlU3RhcnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZUVuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsSXRlbUNvdW50KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgLFxyXG4gICAgICB0aGlzLnBhZ2VTaXplLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxJdGVtQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsQ291bnQgfHwgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImZ1c2lvbi1kYXRhZ3JpZFwiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXdyYXBwZXJcIj5cclxuICBAaWYgKGZpbHRlcikge1xyXG4gICAgPGlucHV0XHJcbiAgICAgIGNsYXNzPVwiZnUtZGF0YS1ncmlkLWZpbHRlclwiXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcclxuICAgICAgKGlucHV0KT1cImZpbHRlckRhdGEoKVwiXHJcbiAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGtleXdvcmQuLi5cIlxyXG4gICAgLz5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3dcIiBncmlkQ29sdW1ucyBbY29sdW1uU2l6ZXNdPVwiY29sdW1uU2l6ZXNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZSB8fCBkZWZhdWx0SGVhZGVyVGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhU291cmNlLCBrZXlzOiBkYXRhU291cmNlWzBdIHwga2V5TWFwcGluZyB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWJvZHlcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImRhdGFMb2FkaW5nXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtc3Bpbm5lci1vdmVybGF5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ1LXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAZm9yIChyb3cgb2YgcGFnaW5hdGVkRGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGhvdmVyYWJsZSwgc3RyaXBlZCB9XCJcclxuICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGUgfHwgcm93U2VsZWN0Lm9ic2VydmVkID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0NsaWNrKHJvdywgJGluZGV4KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGluZGV4OiAkaW5kZXgsIGtleXM6IHJvdyB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICBAaWYgKGV4cGFuZGFibGUgJiYgZXhwYW5kZWRSb3dJbmRleCA9PT0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4IH1cclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRlZERhdGEgfVwiXHJcbiAgLz5cclxuXHJcbiAgQGlmIChwYWdpbmF0ZWREYXRhLmxlbmd0aCA8PSAwICYmICFkYXRhTG9hZGluZykge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRGF0YVRlbXBsYXRlXCIgLz5cclxuICB9XHJcblxyXG4gIEBpZiAocmVuZGVyTmV3QWRkUm93KSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkTmV3Um93VGVtcGxhdGVcIiAvPlxyXG4gIH1cclxuXHJcbiAgQGlmIChwYWdpbmF0b3IpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0UGFnaW5hdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydERhdGEgfVwiXHJcbiAgICAvPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRIZWFkZXJUZW1wbGF0ZSBsZXQtZGF0YT5cclxuICBAZm9yIChoZWFkZXIgb2YgZGF0YVswXSB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxmdS1oZWFkLXJvdy1jZWxsXHJcbiAgICAgIFtjZWxsRGVmXT1cIiRhbnkoaGVhZGVyLmtleSlcIlxyXG4gICAgICBbc29ydEtleV09XCIkYW55KGhlYWRlci5rZXkpXCJcclxuICAgIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Qm9keVRlbXBsYXRlIGxldC1yb3dzPlxyXG4gIEBmb3IgKHJvdyBvZiByb3dzIHwga2V5dmFsdWU6IG9yaWdpbmFsT3JkZXI7IHRyYWNrICRpbmRleCkge1xyXG4gICAgPGZ1LWJvZHktcm93LWNlbGwgW2NlbGxWYWx1ZV09XCIkYW55KHJvdy52YWx1ZSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2luYXRvciBsZXQtZGF0YT5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLXBhZ2luYXRvclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWdyaWQtYWRkLWJ1dHRvblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkQnV0dG9uVGVtcGxhdGVcIiAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1wYWdlLXNlbGVjdFwiPlxyXG4gICAgICA8c3Bhbj5QYWdlIHNpemU6PC9zcGFuPlxyXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiZnUtcGFnZS1zaXplLXNlbGVjdFwiIChjaGFuZ2UpPVwiY2hhbmdlUGFnZVNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzaXplIG9mIHBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwic2l6ZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRdPVwic2l6ZSA9PT0gcGFnZVNpemVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHNpemUgfX1cclxuICAgICAgICA8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1wYWdpbmF0b3ItY29udHJvbHNcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICB7eyBnZXRQYWdlU3RhcnQoKSB9fSAtIHt7IGdldFBhZ2VFbmQoKSB9fSBvZiB7eyB0b3RhbEl0ZW1Db3VudCgpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJhcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSArIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHRvdGFsUGFnZXMoKSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd1JpZ2h0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsR0FFbkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUczRixPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBVTVDLE1BQU0sT0FBTyxpQkFBaUI7SUFxRzVCLFlBQ1UsV0FBK0IsRUFDL0IsaUJBQW9DO1FBRHBDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBcEc5Qzs7O1dBR0c7UUFDK0IsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUN2RDs7V0FFRztRQUMrQixvQkFBZSxHQUFXLE1BQU0sQ0FBQztRQU1uRTs7V0FFRztRQUNhLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckM7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QkFJVSxRQUFRO3NCQUF2QixLQUFLO2dCQUlVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBTVUsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxXQUFXO3NCQUExQixLQUFLO2dCQUlVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsTUFBTTtzQkFBckIsS0FBSztnQkFJVSxTQUFTO3NCQUF4QixLQUFLO2dCQUlVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBSVUsT0FBTztzQkFBdEIsS0FBSztnQkFJVSxlQUFlO3NCQUE5QixLQUFLO2dCQUlVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRTBCLGVBQWU7c0JBQTlDLFlBQVk7dUJBQUMsU0FBUztnQkFFaEIsY0FBYztzQkFEcEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3pELFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUd2RCxjQUFjO3NCQURwQixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFFakMsY0FBYztzQkFBNUMsWUFBWTt1QkFBQyxRQUFRO2dCQUNZLGNBQWM7c0JBQS9DLFlBQVk7dUJBQUMsV0FBVztnQkFDUyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsV0FBVztnQkFDUyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsV0FBVztnQkFLUixTQUFTO3NCQUF6QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBlZmZlY3QsXHJcbiAgbW9kZWwsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIERhdGFTb3J0aW5nU2VydmljZSxcclxuICBPblNvcnRFdmVudCxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1ib2R5LXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRFeHBhbmRUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1leHBhbmQtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbHVtblNpemVzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWNvbHVtbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnUtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFtEYXRhU29ydGluZ1NlcnZpY2VdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PlxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gIC8qKlxyXG4gICAqIFRhYmxlIGRhdGEgLSBhcnJheSBvZiBvYmplY3RzLlxyXG4gICAqIFt0b3RhbENvdW50XSByZXF1aXJlZCB3aXRoIHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGRhdGFTb3VyY2U6IFRbXSA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIFN0cmluZyBrZXkgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHBhZ2VTaXplIGFuZCBjdXJyZW50UGFnZSBpbiBsb2NhbCBzdG9yYWdlIGZvciBlYWNoIHRhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyA9ICdkYXRhJztcclxuICAvKipcclxuICAgKiBUb3RhbCBkYXRhIGNvdW50LlxyXG4gICAqIFJlcXVpcmVkIHdpdGggc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWwgcGFnZSBzaXplIGZvciBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIC8qKlxyXG4gICAqIFBhZ2Ugc2l6ZSBvcHRpb25zZm9yIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMTVdO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGNvbHVtbiBzaXplcywgd2hlcmUgZWFjaCBzaXplIGlzIGEgdmFsaWQgQ1NTIHVuaXQgc3RyaW5nLlxyXG4gICAqIFZhbGlkIHVuaXRzIGFyZTogYHB4YCwgYGZyYCwgYHJlbWAsIGAlYC5cclxuICAgKiBFeGFtcGxlOiBbJzIwMHB4JywgJzFmcicsICcxMCUnLCAnNXJlbSddXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtblNpemVzOiBDb2x1bW5TaXplcztcclxuICAvKipcclxuICAgKiBTaG93cyBzcGlubmVyIGFuZCBvdmVybGF5IHdoZW4gbmV3IGRhdGEgaXMgYmVpbmcgbG9hZGVkLlxyXG4gICAqIFVzYWJsZSBvbmx5IHdpdGggc2VydmVyIHBhZ2luYXRpb24gd2hlbiB0b3RhbENvdW50IGlzIHByb3ZpZGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIE1ha2VzIHJvdyBleHBhbmRhYmxlIG9uIGNsaWNrLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBmaWx0ZXIgZm9yIGRhdGFTb3VyY2UuXHJcbiAgICogVXNhYmxlIG9ubHkgaWYgbm90IHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFNob3dzIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyByb3cgb24gaG92ZXIuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhvdmVyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRGFya2VyIGJhY2tncm91bmQgZm9yIGVhY2ggb2RkIHJvdy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogU2V0cyBwYWdpbmF0b3IgdG8gZmlyc3QgcGFnZSBvbiBpbml0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaXJzdFBhZ2VPbkluaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBSZW5kZXJzIGVtcHR5IGNvbnRhaW5lciBhYm92ZSBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHJlbmRlck5ld0FkZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdjYXB0aW9uJykgcHVibGljIGNhcHRpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEV4cGFuZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGV4cGFuZFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdmb290ZXInKSBwdWJsaWMgZm9vdGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ25vRGF0YVJvdycpIHB1YmxpYyBub0RhdGFUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnYWRkQnV0dG9uJykgcHVibGljIGFkZEJ1dHRvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdhZGROZXdSb3cnKSBwdWJsaWMgYWRkTmV3Um93VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgcm93IGlzIGNsaWNrZWQuXHJcbiAgICogRW1pdHMgc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPE9uU29ydEV2ZW50PigpO1xyXG5cclxuICBwdWJsaWMgc29ydGVkRGF0YTogVFtdID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIHNvcnRLZXk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWREYXRhOiBUW10gPSBbXTtcclxuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgcGFnaW5hdGVkRGF0YTogVFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZFJvd0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgc2VydmVyUGFnaW5hdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBleHBhbmRJbmRleCA9IG1vZGVsPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc29ydFNlcnZpY2U6IERhdGFTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGF0YSh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0U2VydmljZS5zb3J0S2V5KCkpIHtcclxuICAgICAgICB0aGlzLm9uU29ydC5lbWl0KHtcclxuICAgICAgICAgIHNvcnRLZXk6IHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpLFxyXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogdGhpcy5zb3J0U2VydmljZS5zb3J0RGlyZWN0aW9uKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5maXJzdFBhZ2UkXHJcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmN1cnJlbnRQYWdlICE9PSAxKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdFBhZ2luYXRpb24odGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydsb2NhbFN0b3JhZ2VLZXknXSkge1xyXG4gICAgICB0aGlzLnNvcnRTZXJ2aWNlLmdldExvY2FsU3RvcmFnZUtleSh0aGlzLmxvY2FsU3RvcmFnZUtleSk7XHJcblxyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gSlNPTi5wYXJzZShcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1wYWdlU2l6ZWBcclxuICAgICAgICApIHx8IHRoaXMucGFnZVNpemVPcHRpb25zWzBdLnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpcnN0UGFnZU9uSW5pdCkge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdFBhZ2luYXRpb24oMSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYFxyXG4gICAgICAgICAgKSB8fCAnMSdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdFBhZ2luYXRpb24odGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxDb3VudCddKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyUGFnaW5hdGlvbi5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgICAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbEtleXModGhpcy5kYXRhU291cmNlWzBdIHx8IHt9KTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0U2VydmljZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9yaWdpbmFsT3JkZXIgPSAoYTogYW55LCBiOiBhbnkpOiBudW1iZXIgPT4ge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVNvdXJjZSk7XHJcbiAgICByZXR1cm4ga2V5cy5pbmRleE9mKGEua2V5KSAtIGtleXMuaW5kZXhPZihiLmtleSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNvcnREYXRhKGtleTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRLZXkgPSBrZXk7XHJcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0U2VydmljZS5zb3J0RGlyZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChhW2tleV0gPCBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYVtrZXldID4gYltrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRTb3J0Q2xhc3Moa2V5KTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRTb3J0Q2xhc3Moa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc29ydGVkPVwiJHtrZXl9XCJdYCk7XHJcblxyXG4gICAgZG9jdW1lbnRcclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNvcnRlZF0nKVxyXG4gICAgICAuZm9yRWFjaCh0aCA9PiB0aC5jbGFzc0xpc3QucmVtb3ZlKCdzb3J0LWFzYycsICdzb3J0LWRlc2MnKSk7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ3NvcnQtYXNjJyA6ICdzb3J0LWRlc2MnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVGV4dC50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLnNvbWUoKHZhbHVlOiBhbnkpID0+XHJcbiAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydGVkRGF0YSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXJ2ZXJTaWRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnaW5hdGVkRGF0YSA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICB0aGlzLmV4cGFuZEluZGV4LnNldChudWxsKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5zb3J0ZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKHBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbUNvdW50KCkgLyB0aGlzLnBhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlU3RhcnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZUVuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsSXRlbUNvdW50KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgLFxyXG4gICAgICB0aGlzLnBhZ2VTaXplLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxJdGVtQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsQ291bnQgfHwgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImZ1c2lvbi1kYXRhZ3JpZFwiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXdyYXBwZXJcIj5cclxuICBAaWYgKGZpbHRlcikge1xyXG4gICAgPGlucHV0XHJcbiAgICAgIGNsYXNzPVwiZnUtZGF0YS1ncmlkLWZpbHRlclwiXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcclxuICAgICAgKGlucHV0KT1cImZpbHRlckRhdGEoKVwiXHJcbiAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGtleXdvcmQuLi5cIlxyXG4gICAgLz5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3dcIiBncmlkQ29sdW1ucyBbY29sdW1uU2l6ZXNdPVwiY29sdW1uU2l6ZXNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZSB8fCBkZWZhdWx0SGVhZGVyVGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhU291cmNlLCBrZXlzOiBkYXRhU291cmNlWzBdIHwga2V5TWFwcGluZyB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWJvZHlcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImRhdGFMb2FkaW5nXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtc3Bpbm5lci1vdmVybGF5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ1LXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAZm9yIChyb3cgb2YgcGFnaW5hdGVkRGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGhvdmVyYWJsZSwgc3RyaXBlZCB9XCJcclxuICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGUgfHwgcm93U2VsZWN0Lm9ic2VydmVkID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0NsaWNrKHJvdywgJGluZGV4KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGluZGV4OiAkaW5kZXgsIGtleXM6IHJvdyB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICBAaWYgKFxyXG4gICAgICAgICAgICAoZXhwYW5kYWJsZSAmJiBleHBhbmRlZFJvd0luZGV4ID09PSAkaW5kZXgpIHx8XHJcbiAgICAgICAgICAgIGV4cGFuZEluZGV4KCkgPT09ICRpbmRleFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4IH1cclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRlZERhdGEgfVwiXHJcbiAgLz5cclxuXHJcbiAgQGlmIChwYWdpbmF0ZWREYXRhLmxlbmd0aCA8PSAwICYmICFkYXRhTG9hZGluZykge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRGF0YVRlbXBsYXRlXCIgLz5cclxuICB9XHJcblxyXG4gIEBpZiAocmVuZGVyTmV3QWRkUm93KSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkTmV3Um93VGVtcGxhdGVcIiAvPlxyXG4gIH1cclxuXHJcbiAgQGlmIChwYWdpbmF0b3IpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0UGFnaW5hdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydERhdGEgfVwiXHJcbiAgICAvPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRIZWFkZXJUZW1wbGF0ZSBsZXQtZGF0YT5cclxuICBAZm9yIChoZWFkZXIgb2YgZGF0YVswXSB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxmdS1oZWFkLXJvdy1jZWxsXHJcbiAgICAgIFtjZWxsRGVmXT1cIiRhbnkoaGVhZGVyLmtleSlcIlxyXG4gICAgICBbc29ydEtleV09XCIkYW55KGhlYWRlci5rZXkpXCJcclxuICAgIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Qm9keVRlbXBsYXRlIGxldC1yb3dzPlxyXG4gIEBmb3IgKHJvdyBvZiByb3dzIHwga2V5dmFsdWU6IG9yaWdpbmFsT3JkZXI7IHRyYWNrICRpbmRleCkge1xyXG4gICAgPGZ1LWJvZHktcm93LWNlbGwgW2NlbGxWYWx1ZV09XCIkYW55KHJvdy52YWx1ZSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2luYXRvciBsZXQtZGF0YT5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLXBhZ2luYXRvclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWdyaWQtYWRkLWJ1dHRvblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkQnV0dG9uVGVtcGxhdGVcIiAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1wYWdlLXNlbGVjdFwiPlxyXG4gICAgICA8c3Bhbj5QYWdlIHNpemU6PC9zcGFuPlxyXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiZnUtcGFnZS1zaXplLXNlbGVjdFwiIChjaGFuZ2UpPVwiY2hhbmdlUGFnZVNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzaXplIG9mIHBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwic2l6ZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRdPVwic2l6ZSA9PT0gcGFnZVNpemVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHNpemUgfX1cclxuICAgICAgICA8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1wYWdpbmF0b3ItY29udHJvbHNcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICB7eyBnZXRQYWdlU3RhcnQoKSB9fSAtIHt7IGdldFBhZ2VFbmQoKSB9fSBvZiB7eyB0b3RhbEl0ZW1Db3VudCgpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJhcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSArIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHRvdGFsUGFnZXMoKSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd1JpZ2h0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1uYW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2ljb25zL2ljb24tbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEljb25OYW1lcyA9XHJcbiAgfCAnZWRpdCdcclxuICB8ICdlZGl0T2ZmJ1xyXG4gIHwgJ2VkaXRTYXZlJ1xyXG4gIHwgJ3RyYXNoJ1xyXG4gIHwgJ2RvdWJsZUFycm93TGVmdCdcclxuICB8ICdkb3VibGVBcnJvd1JpZ2h0J1xyXG4gIHwgJ2Fycm93TGVmdCdcclxuICB8ICdhcnJvd1JpZ2h0J1xyXG4gIHwgJ3NvcnQnXHJcbiAgfCAnc29ydEFzYydcclxuICB8ICdzb3J0RGVzYydcclxuICB8ICdmaWx0ZXJSZW1vdmUnXHJcbiAgfCAnZmlsdGVyUGx1cydcclxuICB8ICdmaWx0ZXJFZGl0J1xyXG4gIHwgJ2NoZWNrJ1xyXG4gIHwgJ3NhdmUnO1xyXG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { edit, editOff, editSave, trash, doubleArrowLeft, doubleArrowRight, arrowLeft, arrowRight, sort, sortAsc, sortDesc, filterRemove, filterPlus, filterEdit, check, } from './icons';
|
|
2
|
+
import { edit, editOff, editSave, trash, doubleArrowLeft, doubleArrowRight, arrowLeft, arrowRight, sort, sortAsc, sortDesc, filterRemove, filterPlus, filterEdit, check, save, } from './icons';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/platform-browser";
|
|
5
5
|
export class IconRegistryService {
|
|
@@ -21,6 +21,7 @@ export class IconRegistryService {
|
|
|
21
21
|
this.registerIcon('filterPlus', filterPlus);
|
|
22
22
|
this.registerIcon('filterEdit', filterEdit);
|
|
23
23
|
this.registerIcon('check', check);
|
|
24
|
+
this.registerIcon('save', save);
|
|
24
25
|
}
|
|
25
26
|
registerIcon(name, svg) {
|
|
26
27
|
const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);
|
|
@@ -38,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
38
39
|
providedIn: 'root',
|
|
39
40
|
}]
|
|
40
41
|
}], ctorParameters: () => [{ type: i1.DomSanitizer }] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvaWNvbnMvaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLElBQUksR0FDTCxNQUFNLFNBQVMsQ0FBQzs7O0FBTWpCLE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUZuQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFHMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFlLEVBQUUsR0FBVztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQTdCVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7XHJcbiAgZWRpdCxcclxuICBlZGl0T2ZmLFxyXG4gIGVkaXRTYXZlLFxyXG4gIHRyYXNoLFxyXG4gIGRvdWJsZUFycm93TGVmdCxcclxuICBkb3VibGVBcnJvd1JpZ2h0LFxyXG4gIGFycm93TGVmdCxcclxuICBhcnJvd1JpZ2h0LFxyXG4gIHNvcnQsXHJcbiAgc29ydEFzYyxcclxuICBzb3J0RGVzYyxcclxuICBmaWx0ZXJSZW1vdmUsXHJcbiAgZmlsdGVyUGx1cyxcclxuICBmaWx0ZXJFZGl0LFxyXG4gIGNoZWNrLFxyXG4gIHNhdmUsXHJcbn0gZnJvbSAnLi9pY29ucyc7XHJcbmltcG9ydCB7IEljb25OYW1lcyB9IGZyb20gJy4vaWNvbi1uYW1lcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSWNvblJlZ2lzdHJ5U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpY29ucyA9IG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2VkaXQnLCBlZGl0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdlZGl0T2ZmJywgZWRpdE9mZik7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZWRpdFNhdmUnLCBlZGl0U2F2ZSk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbigndHJhc2gnLCB0cmFzaCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignYXJyb3dMZWZ0JywgYXJyb3dMZWZ0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdhcnJvd1JpZ2h0JywgYXJyb3dSaWdodCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZG91YmxlQXJyb3dMZWZ0JywgZG91YmxlQXJyb3dMZWZ0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdkb3VibGVBcnJvd1JpZ2h0JywgZG91YmxlQXJyb3dSaWdodCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignc29ydCcsIHNvcnQpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ3NvcnRBc2MnLCBzb3J0QXNjKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdzb3J0RGVzYycsIHNvcnREZXNjKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdmaWx0ZXJSZW1vdmUnLCBmaWx0ZXJSZW1vdmUpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2ZpbHRlclBsdXMnLCBmaWx0ZXJQbHVzKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdmaWx0ZXJFZGl0JywgZmlsdGVyRWRpdCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignY2hlY2snLCBjaGVjayk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignc2F2ZScsIHNhdmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVySWNvbihuYW1lOiBJY29uTmFtZXMsIHN2Zzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzYWZlU3ZnID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoc3ZnKTtcclxuICAgIHRoaXMuaWNvbnMuc2V0KG5hbWUsIHNhZmVTdmcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEljb24obmFtZTogc3RyaW5nKTogU2FmZUh0bWwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvbnMuZ2V0KG5hbWUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -42,11 +42,11 @@ export class IconComponent {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: IconComponent, deps: [{ token: i1.IconRegistryService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: IconComponent, selector: "fu-icon", inputs: { iconName: "iconName", size: "size", strokeWidth: "strokeWidth", color: "color" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: "<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n", styles: [".fu-icon{display:block;width:var(--fu-icon-size,
|
|
45
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: IconComponent, selector: "fu-icon", inputs: { iconName: "iconName", size: "size", strokeWidth: "strokeWidth", color: "color" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: "<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n", styles: [".fu-icon{display:block;width:var(--fu-icon-size, 1rem);height:var(--fu-icon-size, 1rem)}.fu-icon-container{display:inline-block;width:var(--fu-icon-size, 1rem);height:var(--fu-icon-size, 1rem);line-height:initial;vertical-align:initial;overflow:hidden}.fu-icon-container svg{width:inherit;height:inherit;vertical-align:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
46
46
|
}
|
|
47
47
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: IconComponent, decorators: [{
|
|
48
48
|
type: Component,
|
|
49
|
-
args: [{ selector: 'fu-icon', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n", styles: [".fu-icon{display:block;width:var(--fu-icon-size,
|
|
49
|
+
args: [{ selector: 'fu-icon', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n", styles: [".fu-icon{display:block;width:var(--fu-icon-size, 1rem);height:var(--fu-icon-size, 1rem)}.fu-icon-container{display:inline-block;width:var(--fu-icon-size, 1rem);height:var(--fu-icon-size, 1rem);line-height:initial;vertical-align:initial;overflow:hidden}.fu-icon-container svg{width:inherit;height:inherit;vertical-align:inherit}\n"] }]
|
|
50
50
|
}], ctorParameters: () => [{ type: i1.IconRegistryService }, { type: i0.ElementRef }], propDecorators: { iconName: [{
|
|
51
51
|
type: Input,
|
|
52
52
|
args: [{ required: true }]
|
|
@@ -13,4 +13,5 @@ export const filterRemove = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0
|
|
|
13
13
|
export const filterPlus = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" style="stroke-width:var(--fu-icon-stroke-width, 2)" d="m12 20l-3 1v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v3m1 4h6m-3-3v6"/></svg>`;
|
|
14
14
|
export const filterEdit = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" style="stroke-width:var(--fu-icon-stroke-width, 2)" d="M10.97 20.344L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m3.42 2.11a2.1 2.1 0 0 1 2.97 2.97L18 22h-3v-3z"/></svg>`;
|
|
15
15
|
export const check = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" style="stroke-width:var(--fu-icon-stroke-width, 2)" d="m5 12l5 5L20 7"/></svg>`;
|
|
16
|
-
|
|
16
|
+
export const save = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" style="stroke-width:var(--fu-icon-stroke-width, 2)" d="M21 7v12q0 .825-.587 1.413T19 21H5q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h12zm-2 .85L16.15 5H5v14h14zM12 18q1.25 0 2.125-.875T15 15t-.875-2.125T12 12t-2.125.875T9 15t.875 2.125T12 18m-6-8h9V6H6zM5 7.85V19V5z"/></svg>`;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9pY29ucy9pY29ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOFFBQThRLENBQUM7QUFDblMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLG9UQUFvVCxDQUFDO0FBQzVVLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyw0UkFBNFIsQ0FBQztBQUNyVCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsNFRBQTRULENBQUM7QUFDbFYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZ1BBQWdQLENBQUM7QUFDalIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGlQQUFpUCxDQUFDO0FBQ2pSLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxtT0FBbU8sQ0FBQztBQUM3UCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa09BQWtPLENBQUM7QUFDN1AsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLDZQQUE2UCxDQUFDO0FBQ2xSLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw2UEFBNlAsQ0FBQztBQUNyUixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsNlBBQTZQLENBQUM7QUFDdFIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVVQUF1VSxDQUFDO0FBQ3BXLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx1VEFBdVQsQ0FBQztBQUNsVixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa1dBQWtXLENBQUM7QUFDN1gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLG1PQUFtTyxDQUFDO0FBQ3pQLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRywrV0FBK1csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlZGl0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNNCAyMGg0TDE4LjUgOS41YTIuODI4IDIuODI4IDAgMSAwLTQtNEw0IDE2em05LjUtMTMuNWw0IDRcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGVkaXRPZmYgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm0xMCAxMGwtNiA2djRoNGw2LTZtMS45OS0xLjk5bDIuNTA0LTIuNTA0YTIuODI4IDIuODI4IDAgMSAwLTQtNGwtMi41IDIuNU0xMy41IDYuNWw0IDRNMyAzbDE4IDE4XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBlZGl0U2F2ZSA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTQgMjBoNEwxOC41IDkuNWEyLjgyOCAyLjgyOCAwIDEgMC00LTRMNCAxNnptOS41LTEzLjVsNCA0TTE1IDE5bDIgMmw0LTRcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IHRyYXNoID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNNCA3aDE2bS0xMCA0djZtNC02djZNNSA3bDEgMTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJsMS0xMk05IDdWNGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYzXCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBkb3VibGVBcnJvd1JpZ2h0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtNyA3bDUgNWwtNSA1bTYtMTBsNSA1bC01IDVcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGRvdWJsZUFycm93TGVmdCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTExIDdsLTUgNWw1IDVtNi0xMGwtNSA1bDUgNVwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgYXJyb3dMZWZ0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtMTUgNmwtNiA2bDYgNlwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgYXJyb3dSaWdodCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTkgNmw2IDZsLTYgNlwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3Qgc29ydCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTMgOWw0LTRsNCA0TTcgNXYxNG0xNC00bC00IDRsLTQtNG00IDRWNVwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3Qgc29ydEFzYyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTQgNmg3bS03IDZoN20tNyA2aDltMi05bDMtM2wzIDNtLTMtM3YxMlwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3Qgc29ydERlc2MgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk00IDZoOW0tOSA2aDdtLTcgNmg3bTQtM2wzIDNsMy0zbS0zLTl2MTJcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGZpbHRlclJlbW92ZSA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTEzLjc1OCAxOS40MTRMOSAyMXYtOC41TDQuNTIgNy41NzJBMiAyIDAgMCAxIDQgNi4yMjdWNGgxNnYyLjE3MmEyIDIgMCAwIDEtLjU4NiAxLjQxNEwxNSAxMnYxLjVtNyA4LjVsLTUtNW0wIDVsNS01XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJQbHVzID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtMTIgMjBsLTMgMXYtOC41TDQuNTIgNy41NzJBMiAyIDAgMCAxIDQgNi4yMjdWNGgxNnYyLjE3MmEyIDIgMCAwIDEtLjU4NiAxLjQxNEwxNSAxMnYzbTEgNGg2bS0zLTN2NlwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZmlsdGVyRWRpdCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTEwLjk3IDIwLjM0NEw5IDIxdi04LjVMNC41MiA3LjU3MkEyIDIgMCAwIDEgNCA2LjIyN1Y0aDE2djIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0TDE1IDEydjEuNW0zLjQyIDIuMTFhMi4xIDIuMSAwIDAgMSAyLjk3IDIuOTdMMTggMjJoLTN2LTN6XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBjaGVjayA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTUgMTJsNSA1TDIwIDdcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IHNhdmUgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTIxIDd2MTJxMCAuODI1LS41ODcgMS40MTNUMTkgMjFINXEtLjgyNSAwLTEuNDEyLS41ODdUMyAxOVY1cTAtLjgyNS41ODgtMS40MTJUNSAzaDEyem0tMiAuODVMMTYuMTUgNUg1djE0aDE0ek0xMiAxOHExLjI1IDAgMi4xMjUtLjg3NVQxNSAxNXQtLjg3NS0yLjEyNVQxMiAxMnQtMi4xMjUuODc1VDkgMTV0Ljg3NSAyLjEyNVQxMiAxOG0tNi04aDlWNkg2ek01IDcuODVWMTlWNXpcIi8+PC9zdmc+YDtcclxuIl19
|