ng-fusion-ui 0.3.2 → 0.3.3

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.
@@ -1,9 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, model, signal, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input, model, signal, } from '@angular/core';
2
2
  import { filter } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../services/data-sorting.service";
5
5
  import * as i2 from "../../services/edit-row.service";
6
6
  import * as i3 from "@angular/forms";
7
+ import * as i4 from "../../../icons/icon.component";
7
8
  export class BodyRowCellComponent {
8
9
  constructor(sortService, editRowService, elementRef) {
9
10
  this.sortService = sortService;
@@ -15,6 +16,7 @@ export class BodyRowCellComponent {
15
16
  this.editCellValue = model();
16
17
  this.isEditing = signal(false);
17
18
  this.hasCellValue = signal(false);
19
+ this.isCellBoolean = computed(() => typeof this.cellValue() === 'boolean');
18
20
  }
19
21
  ngOnChanges(changes) {
20
22
  const rowIndex = this.getRowIndex();
@@ -64,10 +66,10 @@ export class BodyRowCellComponent {
64
66
  }
65
67
  }
66
68
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, deps: [{ token: i1.DataSortingService }, { token: i2.EditRowService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: { cellValue: { classPropertyName: "cellValue", publicName: "cellValue", isSignal: true, isRequired: false, transformFunction: null }, editKey: { classPropertyName: "editKey", publicName: "editKey", isSignal: true, isRequired: false, transformFunction: null }, editCellValue: { classPropertyName: "editCellValue", publicName: "editCellValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editCellValue: "editCellValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) { @if(isEditing()){\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }@else {\r\n <span>{{ cellValue() }}</span>\r\n } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4px;border:none;outline:1px solid gray;border-radius:4px}\n"], dependencies: [{ kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
69
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: { cellValue: { classPropertyName: "cellValue", publicName: "cellValue", isSignal: true, isRequired: false, transformFunction: null }, editKey: { classPropertyName: "editKey", publicName: "editKey", isSignal: true, isRequired: false, transformFunction: null }, editCellValue: { classPropertyName: "editCellValue", publicName: "editCellValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editCellValue: "editCellValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) {\r\n <!-- WRAP -->\r\n @if(isEditing()){ @if (isCellBoolean()) {\r\n <div class=\"fu-checkbox-input\">\r\n <input\r\n id=\"tmp-fu\"\r\n type=\"checkbox\"\r\n class=\"hidden-input-checkbox\"\r\n [checked]=\"cellValue()\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <svg><use xlink:href=\"#checkmark-fu\" /></svg>\r\n <label for=\"tmp-fu\"> </label>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n <symbol id=\"checkmark-fu\" viewBox=\"0 0 24 24\">\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-miterlimit=\"10\"\r\n fill=\"none\"\r\n d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n ></path>\r\n </symbol>\r\n </svg>\r\n </div>\r\n\r\n }@else {\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } }@else {\r\n <!-- WRAP -->\r\n @if (isCellBoolean() ) { @if (cellValue()) {\r\n <div style=\"margin-left: 4px\">\r\n <fu-icon iconName=\"check\" size=\"16px\" strokeWidth=\"3\" />\r\n </div>\r\n\r\n } }@else {\r\n <span>{{ cellValue() }}</span>\r\n } } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px;align-items:center}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4.5px;border:none;outline:1px solid gray;border-radius:4px}.fu-checkbox-input{--size: 24px;position:relative}.fu-checkbox-input *,.fu-checkbox-input *:before,.fu-checkbox-input *:after{box-sizing:border-box}.fu-checkbox-input .hidden-input-checkbox{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fu-checkbox-input input:checked~svg{height:calc(var(--size) * .6)}.fu-checkbox-input label{color:var(--fu-grid-cell-edit-input);line-height:var(--size);cursor:pointer;position:relative}.fu-checkbox-input label:after{content:\"\";height:var(--size);width:var(--size);margin-right:8px;float:left;border:2px solid var(--fu-grid-cell-edit-input);border-radius:3px;transition:.15s all ease-out}.fu-checkbox-input svg{stroke:var(--fu-grid-cell-edit-input);stroke-width:3px;height:0;width:calc(var(--size) * .6);position:absolute;left:calc(var(--size) * .21);top:calc(var(--size) * .2);stroke-dasharray:33}@-webkit-keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}@keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}\n"], dependencies: [{ kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
68
70
  }
69
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, decorators: [{
70
72
  type: Component,
71
- args: [{ selector: 'fu-body-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) { @if(isEditing()){\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }@else {\r\n <span>{{ cellValue() }}</span>\r\n } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4px;border:none;outline:1px solid gray;border-radius:4px}\n"] }]
73
+ args: [{ selector: 'fu-body-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) {\r\n <!-- WRAP -->\r\n @if(isEditing()){ @if (isCellBoolean()) {\r\n <div class=\"fu-checkbox-input\">\r\n <input\r\n id=\"tmp-fu\"\r\n type=\"checkbox\"\r\n class=\"hidden-input-checkbox\"\r\n [checked]=\"cellValue()\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <svg><use xlink:href=\"#checkmark-fu\" /></svg>\r\n <label for=\"tmp-fu\"> </label>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n <symbol id=\"checkmark-fu\" viewBox=\"0 0 24 24\">\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-miterlimit=\"10\"\r\n fill=\"none\"\r\n d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n ></path>\r\n </symbol>\r\n </svg>\r\n </div>\r\n\r\n }@else {\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } }@else {\r\n <!-- WRAP -->\r\n @if (isCellBoolean() ) { @if (cellValue()) {\r\n <div style=\"margin-left: 4px\">\r\n <fu-icon iconName=\"check\" size=\"16px\" strokeWidth=\"3\" />\r\n </div>\r\n\r\n } }@else {\r\n <span>{{ cellValue() }}</span>\r\n } } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px;align-items:center}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4.5px;border:none;outline:1px solid gray;border-radius:4px}.fu-checkbox-input{--size: 24px;position:relative}.fu-checkbox-input *,.fu-checkbox-input *:before,.fu-checkbox-input *:after{box-sizing:border-box}.fu-checkbox-input .hidden-input-checkbox{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fu-checkbox-input input:checked~svg{height:calc(var(--size) * .6)}.fu-checkbox-input label{color:var(--fu-grid-cell-edit-input);line-height:var(--size);cursor:pointer;position:relative}.fu-checkbox-input label:after{content:\"\";height:var(--size);width:var(--size);margin-right:8px;float:left;border:2px solid var(--fu-grid-cell-edit-input);border-radius:3px;transition:.15s all ease-out}.fu-checkbox-input svg{stroke:var(--fu-grid-cell-edit-input);stroke-width:3px;height:0;width:calc(var(--size) * .6);position:absolute;left:calc(var(--size) * .21);top:calc(var(--size) * .2);stroke-dasharray:33}@-webkit-keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}@keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}\n"] }]
72
74
  }], ctorParameters: () => [{ type: i1.DataSortingService }, { type: i2.EditRowService }, { type: i0.ElementRef }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9ib2R5LXJvdy1jZWxsL2JvZHktcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvYm9keS1yb3ctY2VsbC9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQU1ULGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTNUMsTUFBTSxPQUFPLG9CQUFvQjtJQVcvQixZQUNVLFdBQStCLEVBQy9CLGNBQThCLEVBQzlCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJ6QixjQUFTLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUN2QyxZQUFPLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLFlBQU8sR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxLQUFLLEVBQW1CLENBQUM7UUFDekMsY0FBUyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQVExQyxDQUFDO0lBRUcsV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLE1B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QWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBpbnB1dCxcclxuICBtb2RlbCxcclxuICBzaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEtc29ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWRpdFJvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0LXJvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnUtYm9keS1yb3ctY2VsbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2JvZHktcm93LWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9keVJvd0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwdWJsaWMgY2VsbFZhbHVlID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyPignJyk7XHJcbiAgcHVibGljIGVkaXRLZXkgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgcHVibGljIGNlbGxEZWYgPSBzaWduYWw8c3RyaW5nPignJyk7XHJcbiAgcHVibGljIGVkaXRDZWxsVmFsdWUgPSBtb2RlbDxzdHJpbmcgfCBudW1iZXI+KCk7XHJcbiAgcHVibGljIGlzRWRpdGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIGhhc0NlbGxWYWx1ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0Um93U2VydmljZTogRWRpdFJvd1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0Um93SW5kZXgoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlc1snY2VsbFZhbHVlJ10pIHtcclxuICAgICAgdGhpcy5oYXNDZWxsVmFsdWUuc2V0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydlZGl0S2V5J10pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUtleSgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmVkaXRSb3dTZXJ2aWNlLmVkaXRJbmRleCRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLmVkaXRLZXkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsVmFsdWUuc2V0KHRoaXMuY2VsbFZhbHVlKCkpO1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcuc2V0KGluZGV4ID09PSByb3dJbmRleCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2VsbEluZGV4KCk7XHJcbiAgICB0aGlzLmNlbGxEZWYuc2V0KHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbERlZihpbmRleCkgfHwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Q2VsbFZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcoKSkge1xyXG4gICAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLnVwZGF0ZUVkaXRWYWx1ZXModGhpcy5lZGl0S2V5KCksIHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVLZXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc29ydFNlcnZpY2UuY2VsbEtleXMoKS5pbmNsdWRlcyh0aGlzLmVkaXRLZXkoKSkpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGVkaXRLZXkgJyR7dGhpcy5lZGl0S2V5fScgcHJvdmlkZWQuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENlbGxJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0luZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIGlmICghcGFyZW50KSByZXR1cm4gLTE7XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbik7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZnUtYm9keS1yb3ctY2VsbFwiIFthdHRyLmRhdGEtZWRpdF09XCJpc0VkaXRpbmcoKVwiPlxyXG4gIDxzcGFuPnt7IGNlbGxEZWYoKSB9fTwvc3Bhbj5cclxuXHJcbiAgQGlmIChoYXNDZWxsVmFsdWUoKSkgeyBAaWYoaXNFZGl0aW5nKCkpe1xyXG4gIDxpbnB1dFxyXG4gICAgY2xhc3M9XCJmdS1lZGl0LWlucHV0XCJcclxuICAgIFsobmdNb2RlbCldPVwiZWRpdENlbGxWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgLz5cclxuICB9QGVsc2Uge1xyXG4gIDxzcGFuPnt7IGNlbGxWYWx1ZSgpIH19PC9zcGFuPlxyXG4gIH0gfVxyXG4gIDwhLS0gV1JBUCAtLT5cclxuICBAaWYgKCFoYXNDZWxsVmFsdWUoKSkge1xyXG4gIDxzcGFuPlxyXG4gICAgPG5nLWNvbnRlbnQgLz5cclxuICA8L3NwYW4+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9ib2R5LXJvdy1jZWxsL2JvZHktcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvYm9keS1yb3ctY2VsbC9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQU1ULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVM1QyxNQUFNLE9BQU8sb0JBQW9CO0lBYy9CLFlBQ1UsV0FBK0IsRUFDL0IsY0FBOEIsRUFDOUIsVUFBc0I7UUFGdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBaEJ6QixjQUFTLEdBQUcsS0FBSyxDQUE0QixFQUFFLENBQUMsQ0FBQztRQUNqRCxZQUFPLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLFlBQU8sR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxLQUFLLEVBQTZCLENBQUM7UUFDbkQsY0FBUyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0QyxrQkFBYSxHQUFHLFFBQVEsQ0FDN0Is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QUFwQixvQkFBb0IsOGhCQ3pCakMsb2lEQXNEQTs7MkZEN0JhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBjb21wdXRlZCxcclxuICBpbnB1dCxcclxuICBtb2RlbCxcclxuICBzaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEtc29ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWRpdFJvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0LXJvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnUtYm9keS1yb3ctY2VsbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2JvZHktcm93LWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9keVJvd0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwdWJsaWMgY2VsbFZhbHVlID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4oJycpO1xyXG4gIHB1YmxpYyBlZGl0S2V5ID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblxyXG4gIHB1YmxpYyBjZWxsRGVmID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHB1YmxpYyBlZGl0Q2VsbFZhbHVlID0gbW9kZWw8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4oKTtcclxuICBwdWJsaWMgaXNFZGl0aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgaGFzQ2VsbFZhbHVlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgaXNDZWxsQm9vbGVhbiA9IGNvbXB1dGVkPGJvb2xlYW4+KFxyXG4gICAgKCkgPT4gdHlwZW9mIHRoaXMuY2VsbFZhbHVlKCkgPT09ICdib29sZWFuJ1xyXG4gICk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0Um93U2VydmljZTogRWRpdFJvd1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0Um93SW5kZXgoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlc1snY2VsbFZhbHVlJ10pIHtcclxuICAgICAgdGhpcy5oYXNDZWxsVmFsdWUuc2V0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydlZGl0S2V5J10pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUtleSgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmVkaXRSb3dTZXJ2aWNlLmVkaXRJbmRleCRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLmVkaXRLZXkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsVmFsdWUuc2V0KHRoaXMuY2VsbFZhbHVlKCkpO1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcuc2V0KGluZGV4ID09PSByb3dJbmRleCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2VsbEluZGV4KCk7XHJcbiAgICB0aGlzLmNlbGxEZWYuc2V0KHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbERlZihpbmRleCkgfHwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Q2VsbFZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcoKSkge1xyXG4gICAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLnVwZGF0ZUVkaXRWYWx1ZXModGhpcy5lZGl0S2V5KCksIHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVLZXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc29ydFNlcnZpY2UuY2VsbEtleXMoKS5pbmNsdWRlcyh0aGlzLmVkaXRLZXkoKSkpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGVkaXRLZXkgJyR7dGhpcy5lZGl0S2V5fScgcHJvdmlkZWQuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENlbGxJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0luZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIGlmICghcGFyZW50KSByZXR1cm4gLTE7XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbik7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZnUtYm9keS1yb3ctY2VsbFwiIFthdHRyLmRhdGEtZWRpdF09XCJpc0VkaXRpbmcoKVwiPlxyXG4gIDxzcGFuPnt7IGNlbGxEZWYoKSB9fTwvc3Bhbj5cclxuXHJcbiAgQGlmIChoYXNDZWxsVmFsdWUoKSkge1xyXG4gIDwhLS0gV1JBUCAtLT5cclxuICBAaWYoaXNFZGl0aW5nKCkpeyBAaWYgKGlzQ2VsbEJvb2xlYW4oKSkge1xyXG4gIDxkaXYgY2xhc3M9XCJmdS1jaGVja2JveC1pbnB1dFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIGlkPVwidG1wLWZ1XCJcclxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgY2xhc3M9XCJoaWRkZW4taW5wdXQtY2hlY2tib3hcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjZWxsVmFsdWUoKVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwiZWRpdENlbGxWYWx1ZVwiXHJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgLz5cclxuICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwiI2NoZWNrbWFyay1mdVwiIC8+PC9zdmc+XHJcbiAgICA8bGFiZWwgZm9yPVwidG1wLWZ1XCI+IDwvbGFiZWw+XHJcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cclxuICAgICAgPHN5bWJvbCBpZD1cImNoZWNrbWFyay1mdVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCJcclxuICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgIGQ9XCJNMjIuOSAzLjdsLTE1LjIgMTYuNi02LjYtNy4xXCJcclxuICAgICAgICA+PC9wYXRoPlxyXG4gICAgICA8L3N5bWJvbD5cclxuICAgIDwvc3ZnPlxyXG4gIDwvZGl2PlxyXG5cclxuICB9QGVsc2Uge1xyXG4gIDxpbnB1dFxyXG4gICAgY2xhc3M9XCJmdS1lZGl0LWlucHV0XCJcclxuICAgIFsobmdNb2RlbCldPVwiZWRpdENlbGxWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgLz5cclxuICB9IH1AZWxzZSB7XHJcbiAgPCEtLSBXUkFQIC0tPlxyXG4gIEBpZiAoaXNDZWxsQm9vbGVhbigpICkgeyBAaWYgKGNlbGxWYWx1ZSgpKSB7XHJcbiAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA0cHhcIj5cclxuICAgIDxmdS1pY29uIGljb25OYW1lPVwiY2hlY2tcIiBzaXplPVwiMTZweFwiIHN0cm9rZVdpZHRoPVwiM1wiIC8+XHJcbiAgPC9kaXY+XHJcblxyXG4gIH0gfUBlbHNlIHtcclxuICA8c3Bhbj57eyBjZWxsVmFsdWUoKSB9fTwvc3Bhbj5cclxuICB9IH0gfVxyXG4gIDwhLS0gV1JBUCAtLT5cclxuICBAaWYgKCFoYXNDZWxsVmFsdWUoKSkge1xyXG4gIDxzcGFuPlxyXG4gICAgPG5nLWNvbnRlbnQgLz5cclxuICA8L3NwYW4+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -3,6 +3,7 @@ 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';
5
5
  import { GridExpandTemplateDirective } from '../directives/grid-expand-template.directive';
6
+ import { filter } from 'rxjs';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "../services/data-sorting.service";
8
9
  import * as i2 from "../services/paginator.service";
@@ -76,6 +77,7 @@ export class DataGridComponent {
76
77
  this.paginatedData = [];
77
78
  this.expandedRowIndex = null;
78
79
  this.serverPagination = signal(false);
80
+ this.initialLoad = true;
79
81
  this.originalOrder = (a, b) => {
80
82
  const keys = Object.keys(this.dataSource);
81
83
  return keys.indexOf(a.key) - keys.indexOf(b.key);
@@ -89,9 +91,15 @@ export class DataGridComponent {
89
91
  sortKey: this.sortService.sortKey(),
90
92
  sortDirection: this.sortService.sortDirection(),
91
93
  });
94
+ if (!this.initialLoad) {
95
+ this.paginationService.firstPage();
96
+ }
97
+ this.initialLoad = false;
92
98
  }
93
99
  });
94
- this.subscription = this.paginationService.firstPage$.subscribe(() => {
100
+ this.subscription = this.paginationService.firstPage$
101
+ .pipe(filter(() => this.currentPage !== 1))
102
+ .subscribe(() => {
95
103
  this.currentPage = 1;
96
104
  window.localStorage.setItem(`fu-grid-${this.localStorageKey}-currentPage`, this.currentPage.toString());
97
105
  this.paginationService.initPagination(this.currentPage, this.pageSize);
@@ -269,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
269
277
  }], onSort: [{
270
278
  type: Output
271
279
  }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixHQUVuQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFhM0YsTUFBTSxPQUFPLGlCQUFpQjtJQXlGNUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF4RjlDOzs7V0FHRztRQUMrQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBTXZEOztXQUVHO1FBQ2EsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQzs7V0FFRztRQUNhLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBT3hEOztXQUVHO1FBQytCLG9CQUFlLEdBQVcs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LEVBQUU7Z0JBRWpDLGNBQWM7c0JBQTVDLFlBQVk7dUJBQUMsUUFBUTtnQkFDWSxjQUFjO3NCQUEvQyxZQUFZO3VCQUFDLFdBQVc7Z0JBS1IsU0FBUztzQkFBekIsTUFBTTtnQkFDVSxNQUFNO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgZWZmZWN0LFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgT25Tb3J0RXZlbnQsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtaGVhZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRCb2R5VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtYm9keS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtZXhwYW5kLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnaW5hdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5TaXplcyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1jb2x1bW5zLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW0RhdGFTb3J0aW5nU2VydmljZV0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgLyoqXHJcbiAgICogVGFibGUgZGF0YSAtIGFycmF5IG9mIG9iamVjdHMuXHJcbiAgICogW3RvdGFsQ291bnRdIHJlcXVpcmVkIHdpdGggc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgZGF0YVNvdXJjZTogVFtdID0gW107XHJcbiAgLyoqXHJcbiAgICogVG90YWwgZGF0YSBjb3VudC5cclxuICAgKiBSZXF1aXJlZCB3aXRoIHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHRvdGFsQ291bnQ6IG51bWJlcjtcclxuICAvKipcclxuICAgKiBJbml0aWFsIHBhZ2Ugc2l6ZSBmb3IgcGFnaW5hdG9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gNTtcclxuICAvKipcclxuICAgKiBQYWdlIHNpemUgb3B0aW9uc2ZvciBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDE1XTtcclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBjb2x1bW4gc2l6ZXMsIHdoZXJlIGVhY2ggc2l6ZSBpcyBhIHZhbGlkIENTUyB1bml0IHN0cmluZy5cclxuICAgKiBWYWxpZCB1bml0cyBhcmU6IGBweGAsIGBmcmAsIGByZW1gLCBgJWAuXHJcbiAgICogRXhhbXBsZTogWycyMDBweCcsICcxZnInLCAnMTAlJywgJzVyZW0nXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5TaXplczogQ29sdW1uU2l6ZXM7XHJcbiAgLyoqXHJcbiAgICogU3RyaW5nIGtleSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgcGFnZVNpemUgYW5kIGN1cnJlbnRQYWdlIGluIGxvY2FsIHN0b3JhZ2UgZm9yIGVhY2ggdGFibGUuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGxvY2FsU3RvcmFnZUtleTogc3RyaW5nID0gJ2RhdGEnO1xyXG4gIC8qKlxyXG4gICAqIFNob3dzIHNwaW5uZXIgYW5kIG92ZXJsYXkgd2hlbiBuZXcgZGF0YSBpcyBiZWluZyBsb2FkZWQuXHJcbiAgICogVXNhYmxlIG9ubHkgd2l0aCBzZXJ2ZXIgcGFnaW5hdGlvbiB3aGVuIHRvdGFsQ291bnQgaXMgcHJvdmlkZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRhdGFMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogTWFrZXMgcm93IGV4cGFuZGFibGUgb24gY2xpY2suXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBFbmFibGVzIGZpbHRlciBmb3IgZGF0YVNvdXJjZS5cclxuICAgKiBVc2FibGUgb25seSBpZiBub3Qgc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogU2hvd3MgcGFnaW5hdG9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHJvdyBvbiBob3Zlci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaG92ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBEYXJrZXIgYmFja2dyb3VuZCBmb3IgZWFjaCBvZGQgcm93LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdHJpcGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnY2FwdGlvbicpIHB1YmxpYyBjYXB0aW9uVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEdyaWRCb2R5VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgYm9keVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEdyaWRFeHBhbmRUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBleHBhbmRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJykgcHVibGljIGZvb3RlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdub0RhdGFSb3cnKSBwdWJsaWMgbm9EYXRhVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgcm93IGlzIGNsaWNrZWQuXHJcbiAgICogRW1pdHMgc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPE9uU29ydEV2ZW50PigpO1xyXG5cclxuICBwdWJsaWMgc29ydGVkRGF0YTogVFtdID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIHNvcnRLZXk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWREYXRhOiBUW10gPSBbXTtcclxuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgcGFnaW5hdGVkRGF0YTogVFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZFJvd0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgc2VydmVyUGFnaW5hdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLnNvcnREYXRhKHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSkge1xyXG4gICAgICAgIHRoaXMub25Tb3J0LmVtaXQoe1xyXG4gICAgICAgICAgc29ydEtleTogdGhpcy5zb3J0U2VydmljZS5zb3J0S2V5KCksXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmZpcnN0UGFnZSQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydsb2NhbFN0b3JhZ2VLZXknXSkge1xyXG4gICAgICB0aGlzLnNvcnRTZXJ2aWNlLmdldExvY2FsU3RvcmFnZUtleSh0aGlzLmxvY2FsU3RvcmFnZUtleSk7XHJcblxyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gSlNPTi5wYXJzZShcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1wYWdlU2l6ZWBcclxuICAgICAgICApIHx8IHRoaXMucGFnZVNpemVPcHRpb25zWzBdLnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgXHJcbiAgICAgICAgKSB8fCAnMSdcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdFBhZ2luYXRpb24odGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3RvdGFsQ291bnQnXSkge1xyXG4gICAgICB0aGlzLnNlcnZlclBhZ2luYXRpb24uc2V0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydkYXRhU291cmNlJ10pIHtcclxuICAgICAgaWYgKCF0aGlzLnNlcnZlclBhZ2luYXRpb24oKSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICAgICAgdGhpcy5zb3J0ZWREYXRhID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNvcnRTZXJ2aWNlLmdldENlbGxLZXlzKHRoaXMuZGF0YVNvdXJjZVswXSB8fCB7fSk7XHJcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydFNlcnZpY2UuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcmlnaW5hbE9yZGVyID0gKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFTb3VyY2UpO1xyXG4gICAgcmV0dXJuIGtleXMuaW5kZXhPZihhLmtleSkgLSBrZXlzLmluZGV4T2YoYi5rZXkpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzb3J0RGF0YShrZXk6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0S2V5ID0ga2V5O1xyXG4gICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc29ydGVkRGF0YS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoYVtrZXldIDwgYltrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxO1xyXG4gICAgICB9IGVsc2UgaWYgKGFba2V5XSA+IGJba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkU29ydENsYXNzKGtleSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkU29ydENsYXNzKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0U2VydmljZS5zb3J0RGlyZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXNvcnRlZD1cIiR7a2V5fVwiXWApO1xyXG5cclxuICAgIGRvY3VtZW50XHJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zb3J0ZWRdJylcclxuICAgICAgLmZvckVhY2goKHRoKSA9PiB0aC5jbGFzc0xpc3QucmVtb3ZlKCdzb3J0LWFzYycsICdzb3J0LWRlc2MnKSk7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ3NvcnQtYXNjJyA6ICdzb3J0LWRlc2MnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVGV4dC50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLnNvbWUoKHZhbHVlOiBhbnkpID0+XHJcbiAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydGVkRGF0YSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXJ2ZXJTaWRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnaW5hdGVkRGF0YSA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdGVkRGF0YSA9IHRoaXMuc29ydGVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy50b3RhbFBhZ2VzKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZShwYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1Db3VudCgpIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZVN0YXJ0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhZ2VFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy50b3RhbEl0ZW1Db3VudCgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQYWdlU2l6ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2VTaXplKHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYCxcclxuICAgICAgdGhpcy5wYWdlU2l6ZS50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsSXRlbUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbENvdW50IHx8IHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dDbGljayhyb3c6IFQsIGluZGV4OiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRhYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkUm93SW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3dTZWxlY3QuZW1pdChyb3cpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJmdXNpb24tZGF0YWdyaWRcIiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC13cmFwcGVyXCI+XHJcbiAgQGlmIChmaWx0ZXIpIHtcclxuICA8aW5wdXRcclxuICAgIGNsYXNzPVwiZnUtZGF0YS1ncmlkLWZpbHRlclwiXHJcbiAgICB0eXBlPVwidGV4dFwiXHJcbiAgICBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIlxyXG4gICAgKGlucHV0KT1cImZpbHRlckRhdGEoKVwiXHJcbiAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBrZXl3b3JkLi4uXCJcclxuICAvPlxyXG4gIH1cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdS1oZWFkLXJvd1wiIGdyaWRDb2x1bW5zIFtjb2x1bW5TaXplc109XCJjb2x1bW5TaXplc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlIHx8IGRlZmF1bHRIZWFkZXJUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGRhdGFTb3VyY2UsIGtleXM6IGRhdGFTb3VyY2VbMF0gfCBrZXlNYXBwaW5nIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtYm9keVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZGF0YUxvYWRpbmdcIiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1zcGlubmVyLW92ZXJsYXlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnUtc3Bpbm5lclwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIEBmb3IgKHJvdyBvZiBwYWdpbmF0ZWREYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZnUtYm9keS1yb3dcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgaG92ZXJhYmxlLCBzdHJpcGVkIH1cIlxyXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiZXhwYW5kYWJsZSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInJvd0NsaWNrKHJvdywgJGluZGV4KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBib2R5VGVtcGxhdGUgfHwgZGVmYXVsdEJvZHlUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6ICRpbmRleCwga2V5czogcm93IHwga2V5TWFwcGluZyB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgIC8+XHJcblxyXG4gICAgICAgIEBpZiAoZXhwYW5kYWJsZSAmJiBleHBhbmRlZFJvd0luZGV4ID09PSAkaW5kZXgpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnUtZXhwYW5kZWQtcm93XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBleHBhbmRUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGluZGV4OiAkaW5kZXggfVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRlZERhdGEgfVwiXHJcbiAgLz5cclxuXHJcbiAgQGlmKHBhZ2luYXRlZERhdGEubGVuZ3RoIDw9IDAgJiYgIWRhdGFMb2FkaW5nKXtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9EYXRhVGVtcGxhdGVcIiAvPlxyXG4gIH1cclxuICA8IS0tIFdSQVAgLS0+XHJcbiAgQGlmIChwYWdpbmF0b3IpIHtcclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRQYWdpbmF0b3I7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzb3J0RGF0YSB9XCJcclxuICAvPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRIZWFkZXJUZW1wbGF0ZSBsZXQtZGF0YT5cclxuICBAZm9yIChoZWFkZXIgb2YgZGF0YVswXSB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICA8ZnUtaGVhZC1yb3ctY2VsbCBbY2VsbERlZl09XCIkYW55KGhlYWRlci5rZXkpXCIgW3NvcnRLZXldPVwiJGFueShoZWFkZXIua2V5KVwiIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Qm9keVRlbXBsYXRlIGxldC1yb3dzPlxyXG4gIEBmb3IgKHJvdyBvZiByb3dzIHwga2V5dmFsdWU6IG9yaWdpbmFsT3JkZXI7IHRyYWNrICRpbmRleCkge1xyXG4gIDxmdS1ib2R5LXJvdy1jZWxsIFtjZWxsVmFsdWVdPVwiJGFueShyb3cudmFsdWUpXCIgLz5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdpbmF0b3IgbGV0LWRhdGE+XHJcbiAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1wYWdpbmF0b3JcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1wYWdpbmF0b3ItcGFnZS1zZWxlY3RcIj5cclxuICAgICAgPHNwYW4+SXRlbXMgcGVyIHBhZ2U6PC9zcGFuPlxyXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiZnUtcGFnZS1zaXplLXNlbGVjdFwiIChjaGFuZ2UpPVwiY2hhbmdlUGFnZVNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzaXplIG9mIHBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwic2l6ZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRdPVwic2l6ZSA9PT0gcGFnZVNpemVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHNpemUgfX1cclxuICAgICAgICA8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmdS1wYWdpbmF0b3ItY29udHJvbHNcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICB7eyBnZXRQYWdlU3RhcnQoKSB9fSAtIHt7IGdldFBhZ2VFbmQoKSB9fSBvZiB7eyB0b3RhbEl0ZW1Db3VudCgpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJhcnJvd0xlZnRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSArIDEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHRvdGFsUGFnZXMoKSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJkb3VibGVBcnJvd1JpZ2h0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixHQUVuQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRzNGLE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFVNUMsTUFBTSxPQUFPLGlCQUFpQjtJQTBGNUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF6RjlDOzs7V0FHRztRQUMrQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBTXZEOztXQUVHO1FBQ2EsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQzs7V0FFRztRQUNhLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVB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QUs7Z0JBSVUsU0FBUztzQkFBeEIsS0FBSztnQkFJVSxPQUFPO3NCQUF0QixLQUFLO2dCQUUwQixlQUFlO3NCQUE5QyxZQUFZO3VCQUFDLFNBQVM7Z0JBRWhCLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUd6RCxZQUFZO3NCQURsQixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHdkQsY0FBYztzQkFEcEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRWpDLGNBQWM7c0JBQTVDLFlBQVk7dUJBQUMsUUFBUTtnQkFDWSxjQUFjO3NCQUEvQyxZQUFZO3VCQUFDLFdBQVc7Z0JBS1IsU0FBUztzQkFBekIsTUFBTTtnQkFDVSxNQUFNO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgZWZmZWN0LFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgT25Tb3J0RXZlbnQsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtaGVhZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRCb2R5VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtYm9keS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtZXhwYW5kLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnaW5hdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5TaXplcyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1jb2x1bW5zLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbRGF0YVNvcnRpbmdTZXJ2aWNlXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD5cclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XHJcbntcclxuICAvKipcclxuICAgKiBUYWJsZSBkYXRhIC0gYXJyYXkgb2Ygb2JqZWN0cy5cclxuICAgKiBbdG90YWxDb3VudF0gcmVxdWlyZWQgd2l0aCBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBkYXRhU291cmNlOiBUW10gPSBbXTtcclxuICAvKipcclxuICAgKiBUb3RhbCBkYXRhIGNvdW50LlxyXG4gICAqIFJlcXVpcmVkIHdpdGggc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWwgcGFnZSBzaXplIGZvciBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIC8qKlxyXG4gICAqIFBhZ2Ugc2l6ZSBvcHRpb25zZm9yIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMTVdO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGNvbHVtbiBzaXplcywgd2hlcmUgZWFjaCBzaXplIGlzIGEgdmFsaWQgQ1NTIHVuaXQgc3RyaW5nLlxyXG4gICAqIFZhbGlkIHVuaXRzIGFyZTogYHB4YCwgYGZyYCwgYHJlbWAsIGAlYC5cclxuICAgKiBFeGFtcGxlOiBbJzIwMHB4JywgJzFmcicsICcxMCUnLCAnNXJlbSddXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtblNpemVzOiBDb2x1bW5TaXplcztcclxuICAvKipcclxuICAgKiBTdHJpbmcga2V5IHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzdG9yZSBwYWdlU2l6ZSBhbmQgY3VycmVudFBhZ2UgaW4gbG9jYWwgc3RvcmFnZSBmb3IgZWFjaCB0YWJsZS5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgbG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcgPSAnZGF0YSc7XHJcbiAgLyoqXHJcbiAgICogU2hvd3Mgc3Bpbm5lciBhbmQgb3ZlcmxheSB3aGVuIG5ldyBkYXRhIGlzIGJlaW5nIGxvYWRlZC5cclxuICAgKiBVc2FibGUgb25seSB3aXRoIHNlcnZlciBwYWdpbmF0aW9uIHdoZW4gdG90YWxDb3VudCBpcyBwcm92aWRlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGF0YUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBNYWtlcyByb3cgZXhwYW5kYWJsZSBvbiBjbGljay5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZXhwYW5kYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEVuYWJsZXMgZmlsdGVyIGZvciBkYXRhU291cmNlLlxyXG4gICAqIFVzYWJsZSBvbmx5IGlmIG5vdCBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBTaG93cyBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgcm93IG9uIGhvdmVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBob3ZlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIERhcmtlciBiYWNrZ3JvdW5kIGZvciBlYWNoIG9kZCByb3cuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0cmlwZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdjYXB0aW9uJykgcHVibGljIGNhcHRpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEV4cGFuZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGV4cGFuZFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdmb290ZXInKSBwdWJsaWMgZm9vdGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ25vRGF0YVJvdycpIHB1YmxpYyBub0RhdGFUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSByb3cgaXMgY2xpY2tlZC5cclxuICAgKiBFbWl0cyBzZWxlY3RlZCByb3cgZGF0YS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIHJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8T25Tb3J0RXZlbnQ+KCk7XHJcblxyXG4gIHB1YmxpYyBzb3J0ZWREYXRhOiBUW10gPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICBwdWJsaWMgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcclxuICBwdWJsaWMgc29ydEtleTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZERhdGE6IFRbXSA9IFtdO1xyXG4gIHB1YmxpYyBmaWx0ZXJUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwYWdpbmF0ZWREYXRhOiBUW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGV4cGFuZGVkUm93SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBzZXJ2ZXJQYWdpbmF0aW9uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGluaXRpYWxMb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnNlcnZlclBhZ2luYXRpb24oKSkge1xyXG4gICAgICAgIHRoaXMuc29ydERhdGEodGhpcy5zb3J0U2VydmljZS5zb3J0S2V5KCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKSB7XHJcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdCh7XHJcbiAgICAgICAgICBzb3J0S2V5OiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSxcclxuICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZmlyc3RQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGlhbExvYWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmZpcnN0UGFnZSRcclxuICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuY3VycmVudFBhZ2UgIT09IDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2xvY2FsU3RvcmFnZUtleSddKSB7XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlS2V5KHRoaXMubG9jYWxTdG9yYWdlS2V5KTtcclxuXHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcclxuICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYFxyXG4gICAgICAgICkgfHwgdGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF0udG9TdHJpbmcoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gSlNPTi5wYXJzZShcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWBcclxuICAgICAgICApIHx8ICcxJ1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxDb3VudCddKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyUGFnaW5hdGlvbi5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgICAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbEtleXModGhpcy5kYXRhU291cmNlWzBdIHx8IHt9KTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0U2VydmljZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9yaWdpbmFsT3JkZXIgPSAoYTogYW55LCBiOiBhbnkpOiBudW1iZXIgPT4ge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVNvdXJjZSk7XHJcbiAgICByZXR1cm4ga2V5cy5pbmRleE9mKGEua2V5KSAtIGtleXMuaW5kZXhPZihiLmtleSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNvcnREYXRhKGtleTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRLZXkgPSBrZXk7XHJcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0U2VydmljZS5zb3J0RGlyZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChhW2tleV0gPCBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYVtrZXldID4gYltrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRTb3J0Q2xhc3Moa2V5KTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRTb3J0Q2xhc3Moa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc29ydGVkPVwiJHtrZXl9XCJdYCk7XHJcblxyXG4gICAgZG9jdW1lbnRcclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNvcnRlZF0nKVxyXG4gICAgICAuZm9yRWFjaCgodGgpID0+IHRoLmNsYXNzTGlzdC5yZW1vdmUoJ3NvcnQtYXNjJywgJ3NvcnQtZGVzYycpKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnc29ydC1hc2MnIDogJ3NvcnQtZGVzYycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlckRhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJUZXh0LnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSgodmFsdWU6IGFueSkgPT5cclxuICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhXTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNpZGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5kYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5zb3J0ZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKHBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbUNvdW50KCkgLyB0aGlzLnBhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlU3RhcnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZUVuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsSXRlbUNvdW50KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgLFxyXG4gICAgICB0aGlzLnBhZ2VTaXplLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxJdGVtQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsQ291bnQgfHwgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImZ1c2lvbi1kYXRhZ3JpZFwiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXdyYXBwZXJcIj5cclxuICBAaWYgKGZpbHRlcikge1xyXG4gIDxpbnB1dFxyXG4gICAgY2xhc3M9XCJmdS1kYXRhLWdyaWQtZmlsdGVyXCJcclxuICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgIFsobmdNb2RlbCldPVwiZmlsdGVyVGV4dFwiXHJcbiAgICAoaW5wdXQpPVwiZmlsdGVyRGF0YSgpXCJcclxuICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGtleXdvcmQuLi5cIlxyXG4gIC8+XHJcbiAgfVxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZ1LWhlYWQtcm93XCIgZ3JpZENvbHVtbnMgW2NvbHVtblNpemVzXT1cImNvbHVtblNpemVzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGUgfHwgZGVmYXVsdEhlYWRlclRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YVNvdXJjZSwga2V5czogZGF0YVNvdXJjZVswXSB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJkYXRhTG9hZGluZ1wiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXNwaW5uZXItb3ZlcmxheVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBob3ZlcmFibGUsIHN0cmlwZWQgfVwiXHJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJleHBhbmRhYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93LCAkaW5kZXgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4LCBrZXlzOiByb3cgfCBrZXlNYXBwaW5nIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgQGlmIChleHBhbmRhYmxlICYmIGV4cGFuZGVkUm93SW5kZXggPT09ICRpbmRleCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgIGV4cGFuZFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6ICRpbmRleCB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGVkRGF0YSB9XCJcclxuICAvPlxyXG5cclxuICBAaWYocGFnaW5hdGVkRGF0YS5sZW5ndGggPD0gMCAmJiAhZGF0YUxvYWRpbmcpe1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RhdGFUZW1wbGF0ZVwiIC8+XHJcbiAgfVxyXG4gIDwhLS0gV1JBUCAtLT5cclxuICBAaWYgKHBhZ2luYXRvcikge1xyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFBhZ2luYXRvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNvcnREYXRhIH1cIlxyXG4gIC8+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlclRlbXBsYXRlIGxldC1kYXRhPlxyXG4gIEBmb3IgKGhlYWRlciBvZiBkYXRhWzBdIHwga2V5dmFsdWU6IG9yaWdpbmFsT3JkZXI7IHRyYWNrICRpbmRleCkge1xyXG4gIDxmdS1oZWFkLXJvdy1jZWxsIFtjZWxsRGVmXT1cIiRhbnkoaGVhZGVyLmtleSlcIiBbc29ydEtleV09XCIkYW55KGhlYWRlci5rZXkpXCIgLz5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRCb2R5VGVtcGxhdGUgbGV0LXJvd3M+XHJcbiAgQGZvciAocm93IG9mIHJvd3MgfCBrZXl2YWx1ZTogb3JpZ2luYWxPcmRlcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGZ1LWJvZHktcm93LWNlbGwgW2NlbGxWYWx1ZV09XCIkYW55KHJvdy52YWx1ZSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2luYXRvciBsZXQtZGF0YT5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLXBhZ2luYXRvclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1wYWdlLXNlbGVjdFwiPlxyXG4gICAgICA8c3Bhbj5JdGVtcyBwZXIgcGFnZTo8L3NwYW4+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmdS1wYWdlLXNpemUtc2VsZWN0XCIgKGNoYW5nZSk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHNpemUgb2YgcGFnZVNpemVPcHRpb25zXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJzaXplXCJcclxuICAgICAgICAgIFtzZWxlY3RlZF09XCJzaXplID09PSBwYWdlU2l6ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgc2l6ZSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1jb250cm9sc1wiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIHt7IGdldFBhZ2VTdGFydCgpIH19IC0ge3sgZ2V0UGFnZUVuZCgpIH19IG9mIHt7IHRvdGFsSXRlbUNvdW50KCkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImRvdWJsZUFycm93TGVmdFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlIC0gMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImFycm93TGVmdFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJhcnJvd1JpZ2h0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UodG90YWxQYWdlcygpKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImRvdWJsZUFycm93UmlnaHRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1uYW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2ljb25zL2ljb24tbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEljb25OYW1lcyA9XHJcbiAgfCAnZWRpdCdcclxuICB8ICdlZGl0T2ZmJ1xyXG4gIHwgJ2VkaXRTYXZlJ1xyXG4gIHwgJ3RyYXNoJ1xyXG4gIHwgJ2RvdWJsZUFycm93TGVmdCdcclxuICB8ICdkb3VibGVBcnJvd1JpZ2h0J1xyXG4gIHwgJ2Fycm93TGVmdCdcclxuICB8ICdhcnJvd1JpZ2h0J1xyXG4gIHwgJ3NvcnQnXHJcbiAgfCAnc29ydEFzYydcclxuICB8ICdzb3J0RGVzYydcclxuICB8ICdmaWx0ZXJSZW1vdmUnXHJcbiAgfCAnZmlsdGVyUGx1cydcclxuICB8ICdmaWx0ZXJFZGl0JztcclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1uYW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2ljb25zL2ljb24tbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEljb25OYW1lcyA9XHJcbiAgfCAnZWRpdCdcclxuICB8ICdlZGl0T2ZmJ1xyXG4gIHwgJ2VkaXRTYXZlJ1xyXG4gIHwgJ3RyYXNoJ1xyXG4gIHwgJ2RvdWJsZUFycm93TGVmdCdcclxuICB8ICdkb3VibGVBcnJvd1JpZ2h0J1xyXG4gIHwgJ2Fycm93TGVmdCdcclxuICB8ICdhcnJvd1JpZ2h0J1xyXG4gIHwgJ3NvcnQnXHJcbiAgfCAnc29ydEFzYydcclxuICB8ICdzb3J0RGVzYydcclxuICB8ICdmaWx0ZXJSZW1vdmUnXHJcbiAgfCAnZmlsdGVyUGx1cydcclxuICB8ICdmaWx0ZXJFZGl0J1xyXG4gIHwgJ2NoZWNrJztcclxuIl19
@@ -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, } from './icons';
2
+ import { edit, editOff, editSave, trash, doubleArrowLeft, doubleArrowRight, arrowLeft, arrowRight, sort, sortAsc, sortDesc, filterRemove, filterPlus, filterEdit, check, } from './icons';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/platform-browser";
5
5
  export class IconRegistryService {
@@ -20,6 +20,7 @@ export class IconRegistryService {
20
20
  this.registerIcon('filterRemove', filterRemove);
21
21
  this.registerIcon('filterPlus', filterPlus);
22
22
  this.registerIcon('filterEdit', filterEdit);
23
+ this.registerIcon('check', check);
23
24
  }
24
25
  registerIcon(name, svg) {
25
26
  const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);
@@ -37,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
37
38
  providedIn: 'root',
38
39
  }]
39
40
  }], ctorParameters: () => [{ type: i1.DomSanitizer }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvaWNvbnMvaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSxTQUFTLENBQUM7OztBQU1qQixNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFGbkMsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBRzFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBZSxFQUFFLEdBQVc7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0EzQlUsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1xyXG4gIGVkaXQsXHJcbiAgZWRpdE9mZixcclxuICBlZGl0U2F2ZSxcclxuICB0cmFzaCxcclxuICBkb3VibGVBcnJvd0xlZnQsXHJcbiAgZG91YmxlQXJyb3dSaWdodCxcclxuICBhcnJvd0xlZnQsXHJcbiAgYXJyb3dSaWdodCxcclxuICBzb3J0LFxyXG4gIHNvcnRBc2MsXHJcbiAgc29ydERlc2MsXHJcbiAgZmlsdGVyUmVtb3ZlLFxyXG4gIGZpbHRlclBsdXMsXHJcbiAgZmlsdGVyRWRpdCxcclxufSBmcm9tICcuL2ljb25zJztcclxuaW1wb3J0IHsgSWNvbk5hbWVzIH0gZnJvbSAnLi9pY29uLW5hbWVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJY29uUmVnaXN0cnlTZXJ2aWNlIHtcclxuICBwcml2YXRlIGljb25zID0gbmV3IE1hcDxzdHJpbmcsIFNhZmVIdG1sPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZWRpdCcsIGVkaXQpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2VkaXRPZmYnLCBlZGl0T2ZmKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdlZGl0U2F2ZScsIGVkaXRTYXZlKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCd0cmFzaCcsIHRyYXNoKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdhcnJvd0xlZnQnLCBhcnJvd0xlZnQpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2Fycm93UmlnaHQnLCBhcnJvd1JpZ2h0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdkb3VibGVBcnJvd0xlZnQnLCBkb3VibGVBcnJvd0xlZnQpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2RvdWJsZUFycm93UmlnaHQnLCBkb3VibGVBcnJvd1JpZ2h0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdzb3J0Jywgc29ydCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignc29ydEFzYycsIHNvcnRBc2MpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ3NvcnREZXNjJywgc29ydERlc2MpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2ZpbHRlclJlbW92ZScsIGZpbHRlclJlbW92ZSk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZmlsdGVyUGx1cycsIGZpbHRlclBsdXMpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2ZpbHRlckVkaXQnLCBmaWx0ZXJFZGl0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlckljb24obmFtZTogSWNvbk5hbWVzLCBzdmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2FmZVN2ZyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHN2Zyk7XHJcbiAgICB0aGlzLmljb25zLnNldChuYW1lLCBzYWZlU3ZnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJY29uKG5hbWU6IHN0cmluZyk6IFNhZmVIdG1sIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmljb25zLmdldChuYW1lKTtcclxuICB9XHJcbn1cclxuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvaWNvbnMvaWNvbi1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxHQUNOLE1BQU0sU0FBUyxDQUFDOzs7QUFNakIsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBRm5DLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUcxQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQWUsRUFBRSxHQUFXO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBNUJVLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtcclxuICBlZGl0LFxyXG4gIGVkaXRPZmYsXHJcbiAgZWRpdFNhdmUsXHJcbiAgdHJhc2gsXHJcbiAgZG91YmxlQXJyb3dMZWZ0LFxyXG4gIGRvdWJsZUFycm93UmlnaHQsXHJcbiAgYXJyb3dMZWZ0LFxyXG4gIGFycm93UmlnaHQsXHJcbiAgc29ydCxcclxuICBzb3J0QXNjLFxyXG4gIHNvcnREZXNjLFxyXG4gIGZpbHRlclJlbW92ZSxcclxuICBmaWx0ZXJQbHVzLFxyXG4gIGZpbHRlckVkaXQsXHJcbiAgY2hlY2ssXHJcbn0gZnJvbSAnLi9pY29ucyc7XHJcbmltcG9ydCB7IEljb25OYW1lcyB9IGZyb20gJy4vaWNvbi1uYW1lcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSWNvblJlZ2lzdHJ5U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpY29ucyA9IG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2VkaXQnLCBlZGl0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdlZGl0T2ZmJywgZWRpdE9mZik7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZWRpdFNhdmUnLCBlZGl0U2F2ZSk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbigndHJhc2gnLCB0cmFzaCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignYXJyb3dMZWZ0JywgYXJyb3dMZWZ0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdhcnJvd1JpZ2h0JywgYXJyb3dSaWdodCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignZG91YmxlQXJyb3dMZWZ0JywgZG91YmxlQXJyb3dMZWZ0KTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdkb3VibGVBcnJvd1JpZ2h0JywgZG91YmxlQXJyb3dSaWdodCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignc29ydCcsIHNvcnQpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ3NvcnRBc2MnLCBzb3J0QXNjKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdzb3J0RGVzYycsIHNvcnREZXNjKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdmaWx0ZXJSZW1vdmUnLCBmaWx0ZXJSZW1vdmUpO1xyXG4gICAgdGhpcy5yZWdpc3Rlckljb24oJ2ZpbHRlclBsdXMnLCBmaWx0ZXJQbHVzKTtcclxuICAgIHRoaXMucmVnaXN0ZXJJY29uKCdmaWx0ZXJFZGl0JywgZmlsdGVyRWRpdCk7XHJcbiAgICB0aGlzLnJlZ2lzdGVySWNvbignY2hlY2snLCBjaGVjayk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJJY29uKG5hbWU6IEljb25OYW1lcywgc3ZnOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNhZmVTdmcgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChzdmcpO1xyXG4gICAgdGhpcy5pY29ucy5zZXQobmFtZSwgc2FmZVN2Zyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SWNvbihuYW1lOiBzdHJpbmcpOiBTYWZlSHRtbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29ucy5nZXQobmFtZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -12,4 +12,5 @@ export const sortDesc = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24
12
12
  export const filterRemove = `<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="M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5"/></svg>`;
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9pY29ucy9pY29ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOFFBQThRLENBQUM7QUFDblMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLG9UQUFvVCxDQUFDO0FBQzVVLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyw0UkFBNFIsQ0FBQztBQUNyVCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsNFRBQTRULENBQUM7QUFDbFYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZ1BBQWdQLENBQUM7QUFDalIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGlQQUFpUCxDQUFDO0FBQ2pSLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxtT0FBbU8sQ0FBQztBQUM3UCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa09BQWtPLENBQUM7QUFDN1AsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLDZQQUE2UCxDQUFDO0FBQ2xSLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw2UEFBNlAsQ0FBQztBQUNyUixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsNlBBQTZQLENBQUM7QUFDdFIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVVQUF1VSxDQUFDO0FBQ3BXLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx1VEFBdVQsQ0FBQztBQUNsVixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa1dBQWtXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZWRpdCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTQgMjBoNEwxOC41IDkuNWEyLjgyOCAyLjgyOCAwIDEgMC00LTRMNCAxNnptOS41LTEzLjVsNCA0XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBlZGl0T2ZmID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtMTAgMTBsLTYgNnY0aDRsNi02bTEuOTktMS45OWwyLjUwNC0yLjUwNGEyLjgyOCAyLjgyOCAwIDEgMC00LTRsLTIuNSAyLjVNMTMuNSA2LjVsNCA0TTMgM2wxOCAxOFwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZWRpdFNhdmUgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk00IDIwaDRMMTguNSA5LjVhMi44MjggMi44MjggMCAxIDAtNC00TDQgMTZ6bTkuNS0xMy41bDQgNE0xNSAxOWwyIDJsNC00XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCB0cmFzaCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTQgN2gxNm0tMTAgNHY2bTQtNnY2TTUgN2wxIDEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0ybDEtMTJNOSA3VjRhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2M1wiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZG91YmxlQXJyb3dSaWdodCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTcgN2w1IDVsLTUgNW02LTEwbDUgNWwtNSA1XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBkb3VibGVBcnJvd0xlZnQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm0xMSA3bC01IDVsNSA1bTYtMTBsLTUgNWw1IDVcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGFycm93TGVmdCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTE1IDZsLTYgNmw2IDZcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGFycm93UmlnaHQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm05IDZsNiA2bC02IDZcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IHNvcnQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm0zIDlsNC00bDQgNE03IDV2MTRtMTQtNGwtNCA0bC00LTRtNCA0VjVcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IHNvcnRBc2MgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk00IDZoN20tNyA2aDdtLTcgNmg5bTItOWwzLTNsMyAzbS0zLTN2MTJcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IHNvcnREZXNjID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNNCA2aDltLTkgNmg3bS03IDZoN200LTNsMyAzbDMtM20tMy05djEyXCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJSZW1vdmUgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk0xMy43NTggMTkuNDE0TDkgMjF2LTguNUw0LjUyIDcuNTcyQTIgMiAwIDAgMSA0IDYuMjI3VjRoMTZ2Mi4xNzJhMiAyIDAgMCAxLS41ODYgMS40MTRMMTUgMTJ2MS41bTcgOC41bC01LTVtMCA1bDUtNVwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZmlsdGVyUGx1cyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTEyIDIwbC0zIDF2LTguNUw0LjUyIDcuNTcyQTIgMiAwIDAgMSA0IDYuMjI3VjRoMTZ2Mi4xNzJhMiAyIDAgMCAxLS41ODYgMS40MTRMMTUgMTJ2M20xIDRoNm0tMy0zdjZcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGZpbHRlckVkaXQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk0xMC45NyAyMC4zNDRMOSAyMXYtOC41TDQuNTIgNy41NzJBMiAyIDAgMCAxIDQgNi4yMjdWNGgxNnYyLjE3MmEyIDIgMCAwIDEtLjU4NiAxLjQxNEwxNSAxMnYxLjVtMy40MiAyLjExYTIuMSAyLjEgMCAwIDEgMi45NyAyLjk3TDE4IDIyaC0zdi0zelwiLz48L3N2Zz5gO1xyXG4iXX0=
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
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9pY29ucy9pY29ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsOFFBQThRLENBQUM7QUFDblMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLG9UQUFvVCxDQUFDO0FBQzVVLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyw0UkFBNFIsQ0FBQztBQUNyVCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsNFRBQTRULENBQUM7QUFDbFYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZ1BBQWdQLENBQUM7QUFDalIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGlQQUFpUCxDQUFDO0FBQ2pSLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxtT0FBbU8sQ0FBQztBQUM3UCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa09BQWtPLENBQUM7QUFDN1AsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLDZQQUE2UCxDQUFDO0FBQ2xSLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw2UEFBNlAsQ0FBQztBQUNyUixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsNlBBQTZQLENBQUM7QUFDdFIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVVQUF1VSxDQUFDO0FBQ3BXLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx1VEFBdVQsQ0FBQztBQUNsVixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa1dBQWtXLENBQUM7QUFDN1gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLG1PQUFtTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVkaXQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk00IDIwaDRMMTguNSA5LjVhMi44MjggMi44MjggMCAxIDAtNC00TDQgMTZ6bTkuNS0xMy41bDQgNFwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZWRpdE9mZiA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwibTEwIDEwbC02IDZ2NGg0bDYtNm0xLjk5LTEuOTlsMi41MDQtMi41MDRhMi44MjggMi44MjggMCAxIDAtNC00bC0yLjUgMi41TTEzLjUgNi41bDQgNE0zIDNsMTggMThcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGVkaXRTYXZlID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNNCAyMGg0TDE4LjUgOS41YTIuODI4IDIuODI4IDAgMSAwLTQtNEw0IDE2em05LjUtMTMuNWw0IDRNMTUgMTlsMiAybDQtNFwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgdHJhc2ggPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIk00IDdoMTZtLTEwIDR2Nm00LTZ2Nk01IDdsMSAxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMmwxLTEyTTkgN1Y0YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjNcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGRvdWJsZUFycm93UmlnaHQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm03IDdsNSA1bC01IDVtNi0xMGw1IDVsLTUgNVwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZG91YmxlQXJyb3dMZWZ0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtMTEgN2wtNSA1bDUgNW02LTEwbC01IDVsNSA1XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBhcnJvd0xlZnQgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm0xNSA2bC02IDZsNiA2XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBhcnJvd1JpZ2h0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtOSA2bDYgNmwtNiA2XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBzb3J0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtMyA5bDQtNGw0IDRNNyA1djE0bTE0LTRsLTQgNGwtNC00bTQgNFY1XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBzb3J0QXNjID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNNCA2aDdtLTcgNmg3bS03IDZoOW0yLTlsMy0zbDMgM20tMy0zdjEyXCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBzb3J0RGVzYyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInN0cm9rZS13aWR0aDp2YXIoLS1mdS1pY29uLXN0cm9rZS13aWR0aCwgMilcIiBkPVwiTTQgNmg5bS05IDZoN20tNyA2aDdtNC0zbDMgM2wzLTNtLTMtOXYxMlwiLz48L3N2Zz5gO1xyXG5leHBvcnQgY29uc3QgZmlsdGVyUmVtb3ZlID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNMTMuNzU4IDE5LjQxNEw5IDIxdi04LjVMNC41MiA3LjU3MkEyIDIgMCAwIDEgNCA2LjIyN1Y0aDE2djIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0TDE1IDEydjEuNW03IDguNWwtNS01bTAgNWw1LTVcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGZpbHRlclBsdXMgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6dmFyKC0tZnUtaWNvbi1zdHJva2Utd2lkdGgsIDIpXCIgZD1cIm0xMiAyMGwtMyAxdi04LjVMNC41MiA3LjU3MkEyIDIgMCAwIDEgNCA2LjIyN1Y0aDE2djIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0TDE1IDEydjNtMSA0aDZtLTMtM3Y2XCIvPjwvc3ZnPmA7XHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJFZGl0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJNMTAuOTcgMjAuMzQ0TDkgMjF2LTguNUw0LjUyIDcuNTcyQTIgMiAwIDAgMSA0IDYuMjI3VjRoMTZ2Mi4xNzJhMiAyIDAgMCAxLS41ODYgMS40MTRMMTUgMTJ2MS41bTMuNDIgMi4xMWEyLjEgMi4xIDAgMCAxIDIuOTcgMi45N0wxOCAyMmgtM3YtM3pcIi8+PC9zdmc+YDtcclxuZXhwb3J0IGNvbnN0IGNoZWNrID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOnZhcigtLWZ1LWljb24tc3Ryb2tlLXdpZHRoLCAyKVwiIGQ9XCJtNSAxMmw1IDVMMjAgN1wiLz48L3N2Zz5gO1xyXG4iXX0=
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, computed, effect, Injectable, input, model, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, Directive, booleanAttribute, EventEmitter, Output, HostListener, Pipe, TemplateRef, ContentChild, NgModule } from '@angular/core';
2
+ import { signal, computed, effect, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, input, model, Directive, booleanAttribute, EventEmitter, Output, HostListener, Pipe, TemplateRef, ContentChild, NgModule } from '@angular/core';
3
3
  import { BehaviorSubject, filter, take, Subject } from 'rxjs';
4
4
  import * as i4 from '@angular/forms';
5
5
  import { FormsModule } from '@angular/forms';
6
+ import * as i1 from '@angular/platform-browser';
6
7
  import * as i3 from '@angular/common';
7
8
  import { CommonModule } from '@angular/common';
8
- import * as i1 from '@angular/platform-browser';
9
9
 
10
10
  class DataSortingService {
11
11
  constructor() {
@@ -92,73 +92,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
92
92
  }]
93
93
  }] });
94
94
 
95
- class BodyRowCellComponent {
96
- constructor(sortService, editRowService, elementRef) {
97
- this.sortService = sortService;
98
- this.editRowService = editRowService;
99
- this.elementRef = elementRef;
100
- this.cellValue = input('');
101
- this.editKey = input('');
102
- this.cellDef = signal('');
103
- this.editCellValue = model();
104
- this.isEditing = signal(false);
105
- this.hasCellValue = signal(false);
106
- }
107
- ngOnChanges(changes) {
108
- const rowIndex = this.getRowIndex();
109
- if (changes['cellValue']) {
110
- this.hasCellValue.set(true);
111
- }
112
- if (changes['editKey']) {
113
- this.validateKey();
114
- this.subscription = this.editRowService.editIndex$
115
- .pipe(filter(() => !!this.editKey))
116
- .subscribe((index) => {
117
- this.editCellValue.set(this.cellValue());
118
- this.isEditing.set(index === rowIndex);
119
- });
120
- }
121
- }
122
- ngOnInit() {
123
- const index = this.getCellIndex();
124
- this.cellDef.set(this.sortService.getCellDef(index) || '');
125
- }
126
- onInputChange(value) {
127
- this.editCellValue.set(value);
128
- if (this.isEditing()) {
129
- this.editRowService.updateEditValues(this.editKey(), value);
130
- }
131
- }
132
- validateKey() {
133
- if (!this.sortService.cellKeys().includes(this.editKey())) {
134
- console.warn(`Invalid editKey '${this.editKey}' provided.`);
135
- }
136
- }
137
- getCellIndex() {
138
- const parent = this.elementRef.nativeElement.parentElement;
139
- return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
140
- }
141
- getRowIndex() {
142
- const element = this.elementRef.nativeElement.parentElement;
143
- const parent = element.parentElement;
144
- if (!parent)
145
- return -1;
146
- const children = Array.from(parent.children);
147
- return children.indexOf(element);
148
- }
149
- ngOnDestroy() {
150
- if (this.subscription) {
151
- this.subscription.unsubscribe();
152
- }
153
- }
154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, deps: [{ token: DataSortingService }, { token: EditRowService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: { cellValue: { classPropertyName: "cellValue", publicName: "cellValue", isSignal: true, isRequired: false, transformFunction: null }, editKey: { classPropertyName: "editKey", publicName: "editKey", isSignal: true, isRequired: false, transformFunction: null }, editCellValue: { classPropertyName: "editCellValue", publicName: "editCellValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editCellValue: "editCellValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) { @if(isEditing()){\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }@else {\r\n <span>{{ cellValue() }}</span>\r\n } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4px;border:none;outline:1px solid gray;border-radius:4px}\n"], dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
156
- }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, decorators: [{
158
- type: Component,
159
- args: [{ selector: 'fu-body-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) { @if(isEditing()){\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }@else {\r\n <span>{{ cellValue() }}</span>\r\n } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4px;border:none;outline:1px solid gray;border-radius:4px}\n"] }]
160
- }], ctorParameters: () => [{ type: DataSortingService }, { type: EditRowService }, { type: i0.ElementRef }] });
161
-
162
95
  const edit = `<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="M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4"/></svg>`;
163
96
  const editOff = `<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 10l-6 6v4h4l6-6m1.99-1.99l2.504-2.504a2.828 2.828 0 1 0-4-4l-2.5 2.5M13.5 6.5l4 4M3 3l18 18"/></svg>`;
164
97
  const editSave = `<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="M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4M15 19l2 2l4-4"/></svg>`;
@@ -173,6 +106,7 @@ const sortDesc = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><p
173
106
  const filterRemove = `<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="M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5"/></svg>`;
174
107
  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>`;
175
108
  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>`;
109
+ 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>`;
176
110
 
177
111
  class IconRegistryService {
178
112
  constructor(sanitizer) {
@@ -192,6 +126,7 @@ class IconRegistryService {
192
126
  this.registerIcon('filterRemove', filterRemove);
193
127
  this.registerIcon('filterPlus', filterPlus);
194
128
  this.registerIcon('filterEdit', filterEdit);
129
+ this.registerIcon('check', check);
195
130
  }
196
131
  registerIcon(name, svg) {
197
132
  const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);
@@ -270,6 +205,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
270
205
  args: ['class']
271
206
  }] } });
272
207
 
208
+ class BodyRowCellComponent {
209
+ constructor(sortService, editRowService, elementRef) {
210
+ this.sortService = sortService;
211
+ this.editRowService = editRowService;
212
+ this.elementRef = elementRef;
213
+ this.cellValue = input('');
214
+ this.editKey = input('');
215
+ this.cellDef = signal('');
216
+ this.editCellValue = model();
217
+ this.isEditing = signal(false);
218
+ this.hasCellValue = signal(false);
219
+ this.isCellBoolean = computed(() => typeof this.cellValue() === 'boolean');
220
+ }
221
+ ngOnChanges(changes) {
222
+ const rowIndex = this.getRowIndex();
223
+ if (changes['cellValue']) {
224
+ this.hasCellValue.set(true);
225
+ }
226
+ if (changes['editKey']) {
227
+ this.validateKey();
228
+ this.subscription = this.editRowService.editIndex$
229
+ .pipe(filter(() => !!this.editKey))
230
+ .subscribe((index) => {
231
+ this.editCellValue.set(this.cellValue());
232
+ this.isEditing.set(index === rowIndex);
233
+ });
234
+ }
235
+ }
236
+ ngOnInit() {
237
+ const index = this.getCellIndex();
238
+ this.cellDef.set(this.sortService.getCellDef(index) || '');
239
+ }
240
+ onInputChange(value) {
241
+ this.editCellValue.set(value);
242
+ if (this.isEditing()) {
243
+ this.editRowService.updateEditValues(this.editKey(), value);
244
+ }
245
+ }
246
+ validateKey() {
247
+ if (!this.sortService.cellKeys().includes(this.editKey())) {
248
+ console.warn(`Invalid editKey '${this.editKey}' provided.`);
249
+ }
250
+ }
251
+ getCellIndex() {
252
+ const parent = this.elementRef.nativeElement.parentElement;
253
+ return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
254
+ }
255
+ getRowIndex() {
256
+ const element = this.elementRef.nativeElement.parentElement;
257
+ const parent = element.parentElement;
258
+ if (!parent)
259
+ return -1;
260
+ const children = Array.from(parent.children);
261
+ return children.indexOf(element);
262
+ }
263
+ ngOnDestroy() {
264
+ if (this.subscription) {
265
+ this.subscription.unsubscribe();
266
+ }
267
+ }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, deps: [{ token: DataSortingService }, { token: EditRowService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: { cellValue: { classPropertyName: "cellValue", publicName: "cellValue", isSignal: true, isRequired: false, transformFunction: null }, editKey: { classPropertyName: "editKey", publicName: "editKey", isSignal: true, isRequired: false, transformFunction: null }, editCellValue: { classPropertyName: "editCellValue", publicName: "editCellValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editCellValue: "editCellValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) {\r\n <!-- WRAP -->\r\n @if(isEditing()){ @if (isCellBoolean()) {\r\n <div class=\"fu-checkbox-input\">\r\n <input\r\n id=\"tmp-fu\"\r\n type=\"checkbox\"\r\n class=\"hidden-input-checkbox\"\r\n [checked]=\"cellValue()\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <svg><use xlink:href=\"#checkmark-fu\" /></svg>\r\n <label for=\"tmp-fu\"> </label>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n <symbol id=\"checkmark-fu\" viewBox=\"0 0 24 24\">\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-miterlimit=\"10\"\r\n fill=\"none\"\r\n d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n ></path>\r\n </symbol>\r\n </svg>\r\n </div>\r\n\r\n }@else {\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } }@else {\r\n <!-- WRAP -->\r\n @if (isCellBoolean() ) { @if (cellValue()) {\r\n <div style=\"margin-left: 4px\">\r\n <fu-icon iconName=\"check\" size=\"16px\" strokeWidth=\"3\" />\r\n </div>\r\n\r\n } }@else {\r\n <span>{{ cellValue() }}</span>\r\n } } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px;align-items:center}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4.5px;border:none;outline:1px solid gray;border-radius:4px}.fu-checkbox-input{--size: 24px;position:relative}.fu-checkbox-input *,.fu-checkbox-input *:before,.fu-checkbox-input *:after{box-sizing:border-box}.fu-checkbox-input .hidden-input-checkbox{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fu-checkbox-input input:checked~svg{height:calc(var(--size) * .6)}.fu-checkbox-input label{color:var(--fu-grid-cell-edit-input);line-height:var(--size);cursor:pointer;position:relative}.fu-checkbox-input label:after{content:\"\";height:var(--size);width:var(--size);margin-right:8px;float:left;border:2px solid var(--fu-grid-cell-edit-input);border-radius:3px;transition:.15s all ease-out}.fu-checkbox-input svg{stroke:var(--fu-grid-cell-edit-input);stroke-width:3px;height:0;width:calc(var(--size) * .6);position:absolute;left:calc(var(--size) * .21);top:calc(var(--size) * .2);stroke-dasharray:33}@-webkit-keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}@keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}\n"], dependencies: [{ 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BodyRowCellComponent, decorators: [{
272
+ type: Component,
273
+ args: [{ selector: 'fu-body-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) {\r\n <!-- WRAP -->\r\n @if(isEditing()){ @if (isCellBoolean()) {\r\n <div class=\"fu-checkbox-input\">\r\n <input\r\n id=\"tmp-fu\"\r\n type=\"checkbox\"\r\n class=\"hidden-input-checkbox\"\r\n [checked]=\"cellValue()\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <svg><use xlink:href=\"#checkmark-fu\" /></svg>\r\n <label for=\"tmp-fu\"> </label>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n <symbol id=\"checkmark-fu\" viewBox=\"0 0 24 24\">\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-miterlimit=\"10\"\r\n fill=\"none\"\r\n d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n ></path>\r\n </symbol>\r\n </svg>\r\n </div>\r\n\r\n }@else {\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } }@else {\r\n <!-- WRAP -->\r\n @if (isCellBoolean() ) { @if (cellValue()) {\r\n <div style=\"margin-left: 4px\">\r\n <fu-icon iconName=\"check\" size=\"16px\" strokeWidth=\"3\" />\r\n </div>\r\n\r\n } }@else {\r\n <span>{{ cellValue() }}</span>\r\n } } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n", styles: [".fu-body-row-cell{padding:12px 16px}.fu-body-row-cell[data-edit=true]{padding:8px 16px;align-items:center}.fu-body-row-cell>span:nth-child(1){display:none}@media (max-width: 900px){.fu-body-row-cell>span:nth-child(1){display:inline;font-weight:700}}.fu-body-row-cell>span:nth-child(2){color:var(--fu-grid-cell-color);word-break:break-all}@media (max-width: 900px){.fu-body-row-cell{display:grid;grid-template-columns:repeat(2,1fr);padding:8px 16px}}@media (max-width: 600px){.fu-body-row-cell{grid-template-columns:35% 1fr;padding:6px 16px}}.fu-edit-input{background-color:transparent;color:var(--fu-grid-cell-edit-input);width:100%;padding:4.5px;border:none;outline:1px solid gray;border-radius:4px}.fu-checkbox-input{--size: 24px;position:relative}.fu-checkbox-input *,.fu-checkbox-input *:before,.fu-checkbox-input *:after{box-sizing:border-box}.fu-checkbox-input .hidden-input-checkbox{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fu-checkbox-input input:checked~svg{height:calc(var(--size) * .6)}.fu-checkbox-input label{color:var(--fu-grid-cell-edit-input);line-height:var(--size);cursor:pointer;position:relative}.fu-checkbox-input label:after{content:\"\";height:var(--size);width:var(--size);margin-right:8px;float:left;border:2px solid var(--fu-grid-cell-edit-input);border-radius:3px;transition:.15s all ease-out}.fu-checkbox-input svg{stroke:var(--fu-grid-cell-edit-input);stroke-width:3px;height:0;width:calc(var(--size) * .6);position:absolute;left:calc(var(--size) * .21);top:calc(var(--size) * .2);stroke-dasharray:33}@-webkit-keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}@keyframes draw-checkbox{0%{stroke-dashoffset:33}to{stroke-dashoffset:0}}\n"] }]
274
+ }], ctorParameters: () => [{ type: DataSortingService }, { type: EditRowService }, { type: i0.ElementRef }] });
275
+
273
276
  class SortColumnDirective {
274
277
  constructor(el, renderer) {
275
278
  this.el = el;
@@ -681,6 +684,7 @@ class DataGridComponent {
681
684
  this.paginatedData = [];
682
685
  this.expandedRowIndex = null;
683
686
  this.serverPagination = signal(false);
687
+ this.initialLoad = true;
684
688
  this.originalOrder = (a, b) => {
685
689
  const keys = Object.keys(this.dataSource);
686
690
  return keys.indexOf(a.key) - keys.indexOf(b.key);
@@ -694,9 +698,15 @@ class DataGridComponent {
694
698
  sortKey: this.sortService.sortKey(),
695
699
  sortDirection: this.sortService.sortDirection(),
696
700
  });
701
+ if (!this.initialLoad) {
702
+ this.paginationService.firstPage();
703
+ }
704
+ this.initialLoad = false;
697
705
  }
698
706
  });
699
- this.subscription = this.paginationService.firstPage$.subscribe(() => {
707
+ this.subscription = this.paginationService.firstPage$
708
+ .pipe(filter(() => this.currentPage !== 1))
709
+ .subscribe(() => {
700
710
  this.currentPage = 1;
701
711
  window.localStorage.setItem(`fu-grid-${this.localStorageKey}-currentPage`, this.currentPage.toString());
702
712
  this.paginationService.initPagination(this.currentPage, this.pageSize);
@@ -1 +1 @@
1
- {"version":3,"file":"ng-fusion-ui.mjs","sources":["../../../projects/ng-fusion-ui/src/lib/data-grid/services/data-sorting.service.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/services/edit-row.service.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/body-row-cell/body-row-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/body-row-cell/body-row-cell.component.html","../../../projects/ng-fusion-ui/src/lib/icons/icons.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon-registry.service.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/sort-column.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/head-row-cell/head-row-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/head-row-cell/head-row-cell.component.html","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-outline.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/row-actions/row-actions.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/row-actions/row-actions.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-header-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-body-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-expand-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/services/paginator.service.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-text.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-columns.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/pipes/key-mapping.pipe.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid/data-grid.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid/data-grid.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/services/data-grid-paginator.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.module.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-raised.directive.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-flat.directive.ts","../../../projects/ng-fusion-ui/src/lib/button/button.module.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid.module.ts","../../../projects/ng-fusion-ui/src/public-api.ts","../../../projects/ng-fusion-ui/src/ng-fusion-ui.ts"],"sourcesContent":["import { Injectable, OnInit, computed, effect, signal } from '@angular/core';\r\n\r\nexport type OnSortEvent = {\r\n sortKey: string | number;\r\n sortDirection: TSort;\r\n};\r\n\r\nexport type TSort = 'asc' | 'desc';\r\n\r\n@Injectable()\r\nexport class DataSortingService {\r\n private sortKeyValue = signal<string>('');\r\n private sortDirectionValue = signal<TSort>('asc');\r\n private cellDefs: string[] = [];\r\n private localStorageKey = signal<string>('');\r\n\r\n public cellKeys = signal<string[]>([]);\r\n public sortKey = computed(() => this.sortKeyValue());\r\n public sortDirection = computed(() => this.sortDirectionValue());\r\n public storedValues = signal<OnSortEvent>({\r\n sortKey: '',\r\n sortDirection: 'asc',\r\n });\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const storedData = window.localStorage.getItem(this.localStorageKey());\r\n\r\n if (storedData) {\r\n const parsedData = JSON.parse(storedData);\r\n this.storedValues.set(parsedData);\r\n this.sortKeyValue.set(parsedData.sortKey as string);\r\n this.sortDirectionValue.set(parsedData.sortDirection);\r\n }\r\n },\r\n { allowSignalWrites: true }\r\n );\r\n }\r\n\r\n public getLocalStorageKey(key: string): void {\r\n this.localStorageKey.set(`fu-${key}-sort`);\r\n }\r\n\r\n public setSortKey(key: TSort): void {\r\n if (this.sortKey() !== key) {\r\n this.sortDirectionValue.set('asc');\r\n } else {\r\n this.sortDirectionValue.update((val) => (val === 'asc' ? 'desc' : 'asc'));\r\n }\r\n this.sortKeyValue.set(key);\r\n\r\n window.localStorage.setItem(\r\n this.localStorageKey(),\r\n JSON.stringify({ sortKey: key, sortDirection: this.sortDirectionValue() })\r\n );\r\n }\r\n\r\n public setCellDef(index: number, cellDef: string): void {\r\n this.cellDefs[index] = cellDef;\r\n }\r\n\r\n public getCellDef(index: number): string | undefined {\r\n return this.cellDefs[index];\r\n }\r\n\r\n public clear(): void {\r\n this.cellDefs = [];\r\n }\r\n\r\n public getCellKeys(data: object): void {\r\n this.cellKeys.set(Object.keys(data));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EditRowService {\r\n private editIndexSubject = new BehaviorSubject<number | null>(null);\r\n public editIndex$: Observable<number | null> =\r\n this.editIndexSubject.asObservable();\r\n\r\n private editValuesSubject = new BehaviorSubject<{ [key: string]: any }>({});\r\n public editValues$: Observable<{ [key: string]: any }> =\r\n this.editValuesSubject.asObservable();\r\n\r\n public startEditing(rowIndex: number): void {\r\n this.editIndexSubject.next(rowIndex);\r\n }\r\n\r\n public stopEditing(): void {\r\n this.editIndexSubject.next(null);\r\n }\r\n\r\n public updateEditValues(key: string, value: any): void {\r\n const currentValues = this.editValuesSubject.value;\r\n this.editValuesSubject.next({ ...currentValues, [key]: value });\r\n }\r\n\r\n public resetEditValues(): void {\r\n this.editValuesSubject.next({});\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { DataSortingService } from '../../services/data-sorting.service';\r\nimport { EditRowService } from '../../services/edit-row.service';\r\nimport { Subscription, filter } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-body-row-cell',\r\n templateUrl: './body-row-cell.component.html',\r\n styleUrl: './body-row-cell.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class BodyRowCellComponent implements OnInit, OnChanges, OnDestroy {\r\n public cellValue = input<string | number>('');\r\n public editKey = input<string>('');\r\n\r\n public cellDef = signal<string>('');\r\n public editCellValue = model<string | number>();\r\n public isEditing = signal<boolean>(false);\r\n public hasCellValue = signal<boolean>(false);\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private editRowService: EditRowService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const rowIndex = this.getRowIndex();\r\n\r\n if (changes['cellValue']) {\r\n this.hasCellValue.set(true);\r\n }\r\n\r\n if (changes['editKey']) {\r\n this.validateKey();\r\n\r\n this.subscription = this.editRowService.editIndex$\r\n .pipe(filter(() => !!this.editKey))\r\n .subscribe((index) => {\r\n this.editCellValue.set(this.cellValue());\r\n this.isEditing.set(index === rowIndex);\r\n });\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n const index = this.getCellIndex();\r\n this.cellDef.set(this.sortService.getCellDef(index) || '');\r\n }\r\n\r\n public onInputChange(value: any): void {\r\n this.editCellValue.set(value);\r\n if (this.isEditing()) {\r\n this.editRowService.updateEditValues(this.editKey(), value);\r\n }\r\n }\r\n\r\n private validateKey(): void {\r\n if (!this.sortService.cellKeys().includes(this.editKey())) {\r\n console.warn(`Invalid editKey '${this.editKey}' provided.`);\r\n }\r\n }\r\n\r\n private getCellIndex(): number {\r\n const parent = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n }\r\n\r\n private getRowIndex(): number {\r\n const element = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n const parent = element.parentElement;\r\n if (!parent) return -1;\r\n\r\n const children = Array.from(parent.children);\r\n return children.indexOf(element);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) { @if(isEditing()){\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n }@else {\r\n <span>{{ cellValue() }}</span>\r\n } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n","export const edit = `<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=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4\"/></svg>`;\r\nexport const editOff = `<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 10l-6 6v4h4l6-6m1.99-1.99l2.504-2.504a2.828 2.828 0 1 0-4-4l-2.5 2.5M13.5 6.5l4 4M3 3l18 18\"/></svg>`;\r\nexport const editSave = `<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=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4M15 19l2 2l4-4\"/></svg>`;\r\nexport const trash = `<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=\"M4 7h16m-10 4v6m4-6v6M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12M9 7V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/></svg>`;\r\nexport const doubleArrowRight = `<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=\"m7 7l5 5l-5 5m6-10l5 5l-5 5\"/></svg>`;\r\nexport const doubleArrowLeft = `<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=\"m11 7l-5 5l5 5m6-10l-5 5l5 5\"/></svg>`;\r\nexport const arrowLeft = `<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=\"m15 6l-6 6l6 6\"/></svg>`;\r\nexport const arrowRight = `<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=\"m9 6l6 6l-6 6\"/></svg>`;\r\nexport const sort = `<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=\"m3 9l4-4l4 4M7 5v14m14-4l-4 4l-4-4m4 4V5\"/></svg>`;\r\nexport const sortAsc = `<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=\"M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12\"/></svg>`;\r\nexport const sortDesc = `<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=\"M4 6h9m-9 6h7m-7 6h7m4-3l3 3l3-3m-3-9v12\"/></svg>`;\r\nexport const filterRemove = `<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=\"M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5\"/></svg>`;\r\nexport 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>`;\r\nexport 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>`;\r\n","import { Injectable } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport {\r\n edit,\r\n editOff,\r\n editSave,\r\n trash,\r\n doubleArrowLeft,\r\n doubleArrowRight,\r\n arrowLeft,\r\n arrowRight,\r\n sort,\r\n sortAsc,\r\n sortDesc,\r\n filterRemove,\r\n filterPlus,\r\n filterEdit,\r\n} from './icons';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class IconRegistryService {\r\n private icons = new Map<string, SafeHtml>();\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.registerIcon('edit', edit);\r\n this.registerIcon('editOff', editOff);\r\n this.registerIcon('editSave', editSave);\r\n this.registerIcon('trash', trash);\r\n this.registerIcon('arrowLeft', arrowLeft);\r\n this.registerIcon('arrowRight', arrowRight);\r\n this.registerIcon('doubleArrowLeft', doubleArrowLeft);\r\n this.registerIcon('doubleArrowRight', doubleArrowRight);\r\n this.registerIcon('sort', sort);\r\n this.registerIcon('sortAsc', sortAsc);\r\n this.registerIcon('sortDesc', sortDesc);\r\n this.registerIcon('filterRemove', filterRemove);\r\n this.registerIcon('filterPlus', filterPlus);\r\n this.registerIcon('filterEdit', filterEdit);\r\n }\r\n\r\n public registerIcon(name: IconNames, svg: string): void {\r\n const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n this.icons.set(name, safeSvg);\r\n }\r\n\r\n public getIcon(name: string): SafeHtml | undefined {\r\n return this.icons.get(name);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Component({\r\n selector: 'fu-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrl: './icon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class IconComponent implements OnChanges, OnInit {\r\n @Input({ required: true }) iconName: IconNames;\r\n\r\n @Input() size: string;\r\n @Input() strokeWidth: string;\r\n @Input() color: string;\r\n\r\n @HostBinding('class') get classList() {\r\n return `fu-icon`;\r\n }\r\n\r\n public iconSvg: SafeHtml | undefined;\r\n\r\n constructor(\r\n private iconRegistry: IconRegistryService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['size']) {\r\n this.setIconSize();\r\n }\r\n if (changes['color']) {\r\n this.setIconColor();\r\n }\r\n if (changes['strokeWidth']) {\r\n this.setIconStrokeWidth();\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.iconSvg = this.iconRegistry.getIcon(this.iconName);\r\n }\r\n\r\n private setIconColor(): void {\r\n this.elementRef.nativeElement.style.removeProperty('color');\r\n\r\n if (this.color !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty('color', this.color);\r\n }\r\n }\r\n\r\n private setIconSize(): void {\r\n this.elementRef.nativeElement.style.removeProperty('--fu-icon-size');\r\n\r\n if (this.size !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty(\r\n '--fu-icon-size',\r\n this.size.toString()\r\n );\r\n }\r\n }\r\n\r\n private setIconStrokeWidth(): void {\r\n this.elementRef.nativeElement.style.removeProperty(\r\n '--fu-icon-stroke-width'\r\n );\r\n if (this.strokeWidth !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty(\r\n '--fu-icon-stroke-width',\r\n this.strokeWidth.toString()\r\n );\r\n }\r\n }\r\n}\r\n","<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sortColumn]',\r\n})\r\nexport class SortColumnDirective implements OnInit {\r\n @Input('sortColumn') public column: any;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n if (this.column) {\r\n this.renderer.setAttribute(\r\n this.el.nativeElement,\r\n 'data-sorted',\r\n this.column\r\n );\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnInit,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n} from '@angular/core';\r\nimport { DataSortingService, TSort } from '../../services/data-sorting.service';\r\n\r\n@Component({\r\n selector: 'fu-head-row-cell',\r\n templateUrl: './head-row-cell.component.html',\r\n styleUrl: './head-row-cell.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HeadRowCellComponent implements OnInit {\r\n public cellDef = input.required<string>();\r\n public sortKey = input<string | number>();\r\n\r\n public direction = computed<TSort>(() => this.sortService.sortDirection());\r\n public sorting = computed<string>(() => this.sortService.sortKey());\r\n\r\n // private storedValues = computed<OnSortEvent>(() =>\r\n // this.sortService.storedValues()\r\n // );\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n const index = this.getIndex();\r\n this.sortService.setCellDef(index, this.cellDef());\r\n }\r\n\r\n public onSorting(): void {\r\n this.sortService.setSortKey(this.sortKey()! as TSort);\r\n }\r\n\r\n // private validateKey(): void {\r\n // if (this.sortService.cellKeys().length > 0) {\r\n // if (!this.sortService.cellKeys().includes(this.sortKey()! as string)) {\r\n // console.warn(`Invalid sortKey '${this.sortKey}' provided.`);\r\n // }\r\n // }\r\n // }\r\n\r\n private getIndex(): number {\r\n const parent = this.elementRef.nativeElement.parentElement;\r\n return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n }\r\n}\r\n","<div\r\n class=\"fu-head-row-cell\"\r\n [ngClass]=\"{ disabled: !sortKey() }\"\r\n [sortColumn]=\"sortKey()\"\r\n (click)=\"onSorting()\"\r\n>\r\n <span>{{ cellDef() }}</span>\r\n @if (sortKey()) {\r\n <!-- wrap -->\r\n @if (sortKey() == sorting()) {\r\n <button>\r\n @if(direction() === 'asc') {\r\n <fu-icon strokeWidth=\"2.5\" iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon strokeWidth=\"2.5\" iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon color=\"gray\" iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-outline]',\r\n})\r\nexport class OutlinedButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-outline');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { EditRowService } from '../../services/edit-row.service';\r\nimport { Subscription, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-row-actions',\r\n templateUrl: './row-actions.component.html',\r\n styleUrl: './row-actions.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RowActionsComponent<T extends object>\r\n implements OnChanges, OnInit, OnDestroy\r\n{\r\n public editRow = input<T>();\r\n public editIndex = input<number>();\r\n\r\n public isEditing = signal<boolean>(false);\r\n public showDelete = signal<boolean>(false);\r\n\r\n @Output() public editSave = new EventEmitter<T>();\r\n @Output() public delete = new EventEmitter<void>();\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private el: ElementRef,\r\n private editRowService: EditRowService\r\n ) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'data-actions', 'true');\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['editRow'] && changes['editIndex']) {\r\n this.subscription = this.editRowService.editIndex$.subscribe((index) => {\r\n this.isEditing.set(index === this.editIndex());\r\n });\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.showDelete.set(this.delete.observed);\r\n }\r\n\r\n public setEdit(e: Event): void {\r\n this.editRowService.startEditing(this.editIndex()!);\r\n\r\n e.stopPropagation();\r\n }\r\n\r\n public cancelEdit(e: Event): void {\r\n this.editRowService.stopEditing();\r\n\r\n e.stopPropagation();\r\n }\r\n\r\n public saveEdit(e: Event): void {\r\n this.editRowService.stopEditing();\r\n\r\n this.editRowService.editValues$.pipe(take(1)).subscribe((editedValues) => {\r\n const updatedRow = { ...this.editRow(), ...editedValues } as T;\r\n\r\n this.editSave.emit(updatedRow);\r\n });\r\n\r\n this.editRowService.resetEditValues();\r\n e.stopPropagation();\r\n }\r\n\r\n public emitDelete(e: Event): void {\r\n this.delete.emit();\r\n e.stopPropagation();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) { @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=\"editSave\" />\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 } } @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","import { Directive, Input } from '@angular/core';\r\n\r\ninterface HeaderTemplateContext<T extends object> {\r\n $implicit: T;\r\n keys: Record<keyof T, keyof T>;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuHeaderTemplate]',\r\n})\r\nexport class GridHeaderTemplateDirective<T extends object> {\r\n @Input('fuHeaderTemplate') public dataSource: T[] | '';\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridHeaderTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is HeaderTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Directive, Input } from '@angular/core';\r\n\r\ninterface BodyTemplateContext<T extends object> {\r\n $implicit: T;\r\n index: number;\r\n keys: Record<keyof T, keyof T>;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuBodyTemplate]',\r\n})\r\nexport class GridBodyTemplateDirective<T extends object> {\r\n @Input('fuBodyTemplate') public dataSource: T[] = [];\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridBodyTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is BodyTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Directive, Input } from '@angular/core';\r\n\r\ninterface ExpandTemplateContext<T extends object> {\r\n $implicit: T;\r\n index: number;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuExpandTemplate]',\r\n})\r\nexport class GridExpandTemplateDirective<T extends object> {\r\n @Input('fuExpandTemplate') public dataSource: T[] | '';\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridExpandTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is ExpandTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DataGridPaginator } from './data-grid-paginator';\r\n\r\nexport interface PaginationState {\r\n page: number;\r\n pageSize: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'any',\r\n})\r\nexport class PaginationService implements DataGridPaginator {\r\n private paginationSubject = new Subject<PaginationState>();\r\n private firstPageSubject = new Subject<boolean>();\r\n\r\n public paginator$: Observable<PaginationState> =\r\n this.paginationSubject.asObservable();\r\n public firstPage$ = this.firstPageSubject.asObservable();\r\n\r\n public setPage(page: number, pageSize: number): void {\r\n // const currentState = this.paginationSubject.value;\r\n this.paginationSubject.next({ page, pageSize });\r\n }\r\n\r\n public setPageSize(pageSize: number): void {\r\n this.paginationSubject.next({ page: 1, pageSize });\r\n }\r\n\r\n public initPagination(page: number, pageSize: number): void {\r\n this.paginationSubject.next({ page, pageSize });\r\n }\r\n\r\n public firstPage(): void {\r\n this.firstPageSubject.next(true);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-text]',\r\n})\r\nexport class TextButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-text');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n input,\r\n} from '@angular/core';\r\n\r\nexport type CssUnit = `${number}${'px' | 'fr' | 'rem' | '%'}`;\r\nexport type ColumnSizes = CssUnit[];\r\n\r\n@Directive({\r\n selector: '[gridColumns]',\r\n})\r\nexport class GridColumnsDirective implements AfterViewInit {\r\n public columnSizes = input<ColumnSizes>([]);\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n public ngAfterViewInit(): void {\r\n this.updateGridColumns();\r\n }\r\n\r\n @HostListener('window:resize')\r\n private onResize(): void {\r\n this.updateGridColumns();\r\n }\r\n\r\n private generateColumns(count: number): string {\r\n if (this.columnSizes()) {\r\n const columnsCount = this.columnSizes().length;\r\n if (columnsCount !== count) {\r\n console.warn(\r\n `Incorect amount of Column sizes ${columnsCount}/${count} provided!`\r\n );\r\n }\r\n return this.columnSizes().join(' ');\r\n }\r\n return Array(count).fill('1fr').join(' ');\r\n }\r\n\r\n private updateGridColumns(): void {\r\n const childrenCount = this.el.nativeElement.children.length as number;\r\n\r\n const dataGrid = this.el.nativeElement.closest(\r\n '#fusion-datagrid'\r\n ) as HTMLElement;\r\n\r\n const columns = this.generateColumns(childrenCount);\r\n\r\n if (dataGrid) {\r\n dataGrid.style.setProperty('--grid-columns', columns);\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'keyMapping',\r\n})\r\nexport class KeyMappingPipe implements PipeTransform {\r\n transform(value: object): object {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const mappedObject: Record<string, string> = {};\r\n Object.keys(value).forEach((key) => {\r\n mappedObject[key] = key;\r\n });\r\n\r\n return mappedObject;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n DataSortingService,\r\n OnSortEvent,\r\n} from '../services/data-sorting.service';\r\nimport { GridHeaderTemplateDirective } from '../directives/grid-header-template.directive';\r\nimport { GridBodyTemplateDirective } from '../directives/grid-body-template.directive';\r\nimport { GridExpandTemplateDirective } from '../directives/grid-expand-template.directive';\r\nimport { PaginationService } from '../services/paginator.service';\r\nimport { ColumnSizes } from '../directives/grid-columns.directive';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-data-grid',\r\n templateUrl: './data-grid.component.html',\r\n styleUrl: './data-grid.component.scss',\r\n providers: [DataSortingService],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DataGridComponent<T extends object>\r\n implements OnChanges, AfterContentInit, OnDestroy\r\n{\r\n /**\r\n * Table data - array of objects.\r\n * [totalCount] required with server side pagination.\r\n */\r\n @Input({ required: true }) public dataSource: T[] = [];\r\n /**\r\n * Total data count.\r\n * Required with server side pagination.\r\n */\r\n @Input() public totalCount: number;\r\n /**\r\n * Initial page size for paginator.\r\n */\r\n @Input() public pageSize: number = 5;\r\n /**\r\n * Page size optionsfor paginator.\r\n */\r\n @Input() public pageSizeOptions: number[] = [5, 10, 15];\r\n /**\r\n * An array of column sizes, where each size is a valid CSS unit string.\r\n * Valid units are: `px`, `fr`, `rem`, `%`.\r\n * Example: ['200px', '1fr', '10%', '5rem']\r\n */\r\n @Input() public columnSizes: ColumnSizes;\r\n /**\r\n * String key which will be used to store pageSize and currentPage in local storage for each table.\r\n */\r\n @Input({ required: true }) public localStorageKey: string = 'data';\r\n /**\r\n * Shows spinner and overlay when new data is being loaded.\r\n * Usable only with server pagination when totalCount is provided.\r\n */\r\n @Input() public dataLoading: boolean = false;\r\n /**\r\n * Makes row expandable on click.\r\n */\r\n @Input() public expandable: boolean = false;\r\n /**\r\n * Enables filter for dataSource.\r\n * Usable only if not server side pagination.\r\n */\r\n @Input() public filter: boolean = false;\r\n /**\r\n * Shows paginator.\r\n */\r\n @Input() public paginator: boolean = false;\r\n /**\r\n * Highlights row on hover.\r\n */\r\n @Input() public hoverable: boolean = true;\r\n /**\r\n * Darker background for each odd row.\r\n */\r\n @Input() public striped: boolean = true;\r\n\r\n @ContentChild('caption') public captionTemplate!: TemplateRef<any>;\r\n @ContentChild(GridHeaderTemplateDirective, { read: TemplateRef })\r\n public headerTemplate!: TemplateRef<any>;\r\n @ContentChild(GridBodyTemplateDirective, { read: TemplateRef })\r\n public bodyTemplate!: TemplateRef<any>;\r\n @ContentChild(GridExpandTemplateDirective, { read: TemplateRef })\r\n public expandTemplate!: TemplateRef<any>;\r\n @ContentChild('footer') public footerTemplate!: TemplateRef<any>;\r\n @ContentChild('noDataRow') public noDataTemplate!: TemplateRef<any>;\r\n /**\r\n * Callback to invoke when a row is clicked.\r\n * Emits selected row data.\r\n */\r\n @Output() public rowSelect = new EventEmitter<T>();\r\n @Output() public onSort = new EventEmitter<OnSortEvent>();\r\n\r\n public sortedData: T[] = [...this.dataSource];\r\n public sortDirection: 'asc' | 'desc' = 'asc';\r\n public sortKey: string = '';\r\n\r\n public filteredData: T[] = [];\r\n public filterText: string = '';\r\n\r\n public currentPage: number = 1;\r\n public paginatedData: T[] = [];\r\n\r\n public expandedRowIndex: number | null = null;\r\n public serverPagination = signal<boolean>(false);\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private paginationService: PaginationService\r\n ) {\r\n effect(() => {\r\n if (!this.serverPagination()) {\r\n this.sortData(this.sortService.sortKey());\r\n } else if (this.sortService.sortKey()) {\r\n this.onSort.emit({\r\n sortKey: this.sortService.sortKey(),\r\n sortDirection: this.sortService.sortDirection(),\r\n });\r\n }\r\n });\r\n\r\n this.subscription = this.paginationService.firstPage$.subscribe(() => {\r\n this.currentPage = 1;\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n this.paginationService.initPagination(this.currentPage, this.pageSize);\r\n });\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['localStorageKey']) {\r\n this.sortService.getLocalStorageKey(this.localStorageKey);\r\n\r\n this.pageSize = JSON.parse(\r\n window.localStorage.getItem(\r\n `fu-grid-${this.localStorageKey}-pageSize`\r\n ) || this.pageSizeOptions[0].toString()\r\n );\r\n this.currentPage = JSON.parse(\r\n window.localStorage.getItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`\r\n ) || '1'\r\n );\r\n\r\n this.paginationService.initPagination(this.currentPage, this.pageSize);\r\n }\r\n\r\n if (changes['totalCount']) {\r\n this.serverPagination.set(true);\r\n }\r\n\r\n if (changes['dataSource']) {\r\n if (!this.serverPagination()) {\r\n this.filteredData = [...this.dataSource];\r\n this.sortedData = [...this.filteredData];\r\n }\r\n this.sortService.getCellKeys(this.dataSource[0] || {});\r\n this.updatePagination();\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.sortService.clear();\r\n }\r\n\r\n public originalOrder = (a: any, b: any): number => {\r\n const keys = Object.keys(this.dataSource);\r\n return keys.indexOf(a.key) - keys.indexOf(b.key);\r\n };\r\n\r\n public sortData(key: any): void {\r\n this.sortKey = key;\r\n const sortDirection = this.sortService.sortDirection();\r\n\r\n this.sortedData.sort((a: any, b: any) => {\r\n if (a[key] < b[key]) {\r\n return sortDirection === 'asc' ? -1 : 1;\r\n } else if (a[key] > b[key]) {\r\n return sortDirection === 'asc' ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n\r\n this.addSortClass(key);\r\n this.updatePagination();\r\n }\r\n\r\n private addSortClass(key: string): void {\r\n const sortDirection = this.sortService.sortDirection();\r\n\r\n const element = document.querySelector(`[data-sorted=\"${key}\"]`);\r\n\r\n document\r\n .querySelectorAll('[data-sorted]')\r\n .forEach((th) => th.classList.remove('sort-asc', 'sort-desc'));\r\n\r\n if (element) {\r\n element.classList.add(sortDirection === 'asc' ? 'sort-asc' : 'sort-desc');\r\n }\r\n }\r\n\r\n public filterData(): void {\r\n if (this.filterText.trim() === '') {\r\n this.filteredData = [...this.dataSource];\r\n } else {\r\n this.filteredData = this.dataSource.filter((item: any) =>\r\n Object.values(item).some((value: any) =>\r\n value.toString().toLowerCase().includes(this.filterText.toLowerCase())\r\n )\r\n );\r\n }\r\n\r\n this.sortedData = [...this.filteredData];\r\n this.currentPage = 1;\r\n\r\n this.updatePagination();\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n }\r\n\r\n private serverSidePagination(): void {\r\n this.paginatedData = this.dataSource;\r\n }\r\n\r\n private updatePagination(): void {\r\n this.expandedRowIndex = null;\r\n\r\n if (this.serverPagination()) {\r\n return this.serverSidePagination();\r\n }\r\n\r\n const start = (this.currentPage - 1) * this.pageSize;\r\n const end = start + this.pageSize;\r\n this.paginatedData = this.sortedData.slice(start, end);\r\n }\r\n\r\n public goToPage(page: number): void {\r\n if (page < 1 || page > this.totalPages()) {\r\n return;\r\n }\r\n this.currentPage = page;\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n this.paginationService.setPage(page, this.pageSize);\r\n this.updatePagination();\r\n }\r\n\r\n public totalPages(): number {\r\n return Math.ceil(this.totalItemCount() / this.pageSize);\r\n }\r\n\r\n public getPageStart(): number {\r\n return (this.currentPage - 1) * this.pageSize + 1;\r\n }\r\n\r\n public getPageEnd(): number {\r\n return Math.min(this.currentPage * this.pageSize, this.totalItemCount());\r\n }\r\n\r\n public changePageSize(event: any): void {\r\n this.pageSize = Number(event.target.value);\r\n this.currentPage = 1;\r\n\r\n this.paginationService.setPageSize(this.pageSize);\r\n this.updatePagination();\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-pageSize`,\r\n this.pageSize.toString()\r\n );\r\n }\r\n\r\n public totalItemCount(): number {\r\n return this.totalCount || this.filteredData.length;\r\n }\r\n\r\n public rowClick(row: T, index: number = 0): void {\r\n if (this.expandable) {\r\n if (this.expandedRowIndex === index) {\r\n this.expandedRowIndex = null;\r\n } else {\r\n this.expandedRowIndex = index;\r\n }\r\n return;\r\n }\r\n\r\n this.rowSelect.emit(row);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<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]=\"expandable ? 'pointer' : 'default'\"\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 <!-- WRAP -->\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 [cellDef]=\"$any(header.key)\" [sortKey]=\"$any(header.key)\" />\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-paginator-page-select\">\r\n <span>Items per page:</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","import { Observable } from 'rxjs';\r\nimport { PaginationState } from './paginator.service';\r\n\r\nexport abstract class DataGridPaginator {\r\n abstract paginator$: Observable<PaginationState>;\r\n abstract firstPage: () => void;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconComponent } from './icon.component';\r\n\r\n@NgModule({\r\n declarations: [IconComponent],\r\n imports: [CommonModule],\r\n providers: [IconRegistryService],\r\n exports: [IconComponent],\r\n})\r\nexport class IconModule {}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-raised]',\r\n})\r\nexport class RaisedButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-raised');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-filled]',\r\n})\r\nexport class FilledButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-filled');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutlinedButtonDirective } from './directives/btn-outline.directive';\r\nimport { RaisedButtonDirective } from './directives/btn-raised.directive';\r\nimport { TextButtonDirective } from './directives/btn-text.directive';\r\nimport { FilledButtonDirective } from './directives/btn-flat.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n OutlinedButtonDirective,\r\n FilledButtonDirective,\r\n RaisedButtonDirective,\r\n TextButtonDirective,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n OutlinedButtonDirective,\r\n FilledButtonDirective,\r\n RaisedButtonDirective,\r\n TextButtonDirective,\r\n ],\r\n})\r\nexport class ButtonModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { DataGridComponent } from './data-grid/data-grid.component';\r\nimport { HeadRowCellComponent } from './components/head-row-cell/head-row-cell.component';\r\nimport { BodyRowCellComponent } from './components/body-row-cell/body-row-cell.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SortColumnDirective } from './directives/sort-column.directive';\r\nimport { GridColumnsDirective } from './directives/grid-columns.directive';\r\nimport { GridBodyTemplateDirective } from './directives/grid-body-template.directive';\r\nimport { GridHeaderTemplateDirective } from './directives/grid-header-template.directive';\r\nimport { GridExpandTemplateDirective } from './directives/grid-expand-template.directive';\r\nimport { RowActionsComponent } from './components/row-actions/row-actions.component';\r\nimport { PaginationService } from './services/paginator.service';\r\nimport { DataGridPaginator } from './services/data-grid-paginator';\r\nimport { KeyMappingPipe } from './pipes/key-mapping.pipe';\r\nimport { IconModule } from '../icons/icon.module';\r\nimport { ButtonModule } from '../button/button.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n SortColumnDirective,\r\n GridColumnsDirective,\r\n DataGridComponent,\r\n BodyRowCellComponent,\r\n HeadRowCellComponent,\r\n GridHeaderTemplateDirective,\r\n GridExpandTemplateDirective,\r\n GridBodyTemplateDirective,\r\n RowActionsComponent,\r\n KeyMappingPipe,\r\n ],\r\n imports: [CommonModule, FormsModule, IconModule, ButtonModule],\r\n exports: [\r\n DataGridComponent,\r\n HeadRowCellComponent,\r\n BodyRowCellComponent,\r\n RowActionsComponent,\r\n GridHeaderTemplateDirective,\r\n GridExpandTemplateDirective,\r\n GridBodyTemplateDirective,\r\n ],\r\n providers: [{ provide: DataGridPaginator, useExisting: PaginationService }],\r\n})\r\nexport class DataGridModule {}\r\n","/*\r\n * Public API Surface of ng-fusion-ui\r\n */\r\n\r\nexport * from './lib/data-grid/index';\r\nexport * from './lib/button/index';\r\nexport * from './lib/icons/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DataSortingService","i2.EditRowService","i3","i1.IconRegistryService","i2","i3.IconComponent","i4.SortColumnDirective","i1.EditRowService","i2.IconComponent","i3.OutlinedButtonDirective","i2.PaginationService","i5.IconComponent","i6.TextButtonDirective","i7.GridColumnsDirective","i8.BodyRowCellComponent","i9.HeadRowCellComponent","i10.KeyMappingPipe"],"mappings":"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"}
1
+ {"version":3,"file":"ng-fusion-ui.mjs","sources":["../../../projects/ng-fusion-ui/src/lib/data-grid/services/data-sorting.service.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/services/edit-row.service.ts","../../../projects/ng-fusion-ui/src/lib/icons/icons.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon-registry.service.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/components/body-row-cell/body-row-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/body-row-cell/body-row-cell.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/sort-column.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/head-row-cell/head-row-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/head-row-cell/head-row-cell.component.html","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-outline.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/row-actions/row-actions.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/components/row-actions/row-actions.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-header-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-body-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-expand-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/services/paginator.service.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-text.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/directives/grid-columns.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/pipes/key-mapping.pipe.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid/data-grid.component.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid/data-grid.component.html","../../../projects/ng-fusion-ui/src/lib/data-grid/services/data-grid-paginator.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.module.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-raised.directive.ts","../../../projects/ng-fusion-ui/src/lib/button/directives/btn-flat.directive.ts","../../../projects/ng-fusion-ui/src/lib/button/button.module.ts","../../../projects/ng-fusion-ui/src/lib/data-grid/data-grid.module.ts","../../../projects/ng-fusion-ui/src/public-api.ts","../../../projects/ng-fusion-ui/src/ng-fusion-ui.ts"],"sourcesContent":["import { Injectable, OnInit, computed, effect, signal } from '@angular/core';\r\n\r\nexport type OnSortEvent = {\r\n sortKey: string | number;\r\n sortDirection: TSort;\r\n};\r\n\r\nexport type TSort = 'asc' | 'desc';\r\n\r\n@Injectable()\r\nexport class DataSortingService {\r\n private sortKeyValue = signal<string>('');\r\n private sortDirectionValue = signal<TSort>('asc');\r\n private cellDefs: string[] = [];\r\n private localStorageKey = signal<string>('');\r\n\r\n public cellKeys = signal<string[]>([]);\r\n public sortKey = computed(() => this.sortKeyValue());\r\n public sortDirection = computed(() => this.sortDirectionValue());\r\n public storedValues = signal<OnSortEvent>({\r\n sortKey: '',\r\n sortDirection: 'asc',\r\n });\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const storedData = window.localStorage.getItem(this.localStorageKey());\r\n\r\n if (storedData) {\r\n const parsedData = JSON.parse(storedData);\r\n this.storedValues.set(parsedData);\r\n this.sortKeyValue.set(parsedData.sortKey as string);\r\n this.sortDirectionValue.set(parsedData.sortDirection);\r\n }\r\n },\r\n { allowSignalWrites: true }\r\n );\r\n }\r\n\r\n public getLocalStorageKey(key: string): void {\r\n this.localStorageKey.set(`fu-${key}-sort`);\r\n }\r\n\r\n public setSortKey(key: TSort): void {\r\n if (this.sortKey() !== key) {\r\n this.sortDirectionValue.set('asc');\r\n } else {\r\n this.sortDirectionValue.update((val) => (val === 'asc' ? 'desc' : 'asc'));\r\n }\r\n this.sortKeyValue.set(key);\r\n\r\n window.localStorage.setItem(\r\n this.localStorageKey(),\r\n JSON.stringify({ sortKey: key, sortDirection: this.sortDirectionValue() })\r\n );\r\n }\r\n\r\n public setCellDef(index: number, cellDef: string): void {\r\n this.cellDefs[index] = cellDef;\r\n }\r\n\r\n public getCellDef(index: number): string | undefined {\r\n return this.cellDefs[index];\r\n }\r\n\r\n public clear(): void {\r\n this.cellDefs = [];\r\n }\r\n\r\n public getCellKeys(data: object): void {\r\n this.cellKeys.set(Object.keys(data));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EditRowService {\r\n private editIndexSubject = new BehaviorSubject<number | null>(null);\r\n public editIndex$: Observable<number | null> =\r\n this.editIndexSubject.asObservable();\r\n\r\n private editValuesSubject = new BehaviorSubject<{ [key: string]: any }>({});\r\n public editValues$: Observable<{ [key: string]: any }> =\r\n this.editValuesSubject.asObservable();\r\n\r\n public startEditing(rowIndex: number): void {\r\n this.editIndexSubject.next(rowIndex);\r\n }\r\n\r\n public stopEditing(): void {\r\n this.editIndexSubject.next(null);\r\n }\r\n\r\n public updateEditValues(key: string, value: any): void {\r\n const currentValues = this.editValuesSubject.value;\r\n this.editValuesSubject.next({ ...currentValues, [key]: value });\r\n }\r\n\r\n public resetEditValues(): void {\r\n this.editValuesSubject.next({});\r\n }\r\n}\r\n","export const edit = `<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=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4\"/></svg>`;\r\nexport const editOff = `<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 10l-6 6v4h4l6-6m1.99-1.99l2.504-2.504a2.828 2.828 0 1 0-4-4l-2.5 2.5M13.5 6.5l4 4M3 3l18 18\"/></svg>`;\r\nexport const editSave = `<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=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4M15 19l2 2l4-4\"/></svg>`;\r\nexport const trash = `<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=\"M4 7h16m-10 4v6m4-6v6M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12M9 7V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/></svg>`;\r\nexport const doubleArrowRight = `<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=\"m7 7l5 5l-5 5m6-10l5 5l-5 5\"/></svg>`;\r\nexport const doubleArrowLeft = `<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=\"m11 7l-5 5l5 5m6-10l-5 5l5 5\"/></svg>`;\r\nexport const arrowLeft = `<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=\"m15 6l-6 6l6 6\"/></svg>`;\r\nexport const arrowRight = `<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=\"m9 6l6 6l-6 6\"/></svg>`;\r\nexport const sort = `<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=\"m3 9l4-4l4 4M7 5v14m14-4l-4 4l-4-4m4 4V5\"/></svg>`;\r\nexport const sortAsc = `<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=\"M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12\"/></svg>`;\r\nexport const sortDesc = `<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=\"M4 6h9m-9 6h7m-7 6h7m4-3l3 3l3-3m-3-9v12\"/></svg>`;\r\nexport const filterRemove = `<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=\"M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5\"/></svg>`;\r\nexport 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>`;\r\nexport 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>`;\r\nexport 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>`;\r\n","import { Injectable } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport {\r\n edit,\r\n editOff,\r\n editSave,\r\n trash,\r\n doubleArrowLeft,\r\n doubleArrowRight,\r\n arrowLeft,\r\n arrowRight,\r\n sort,\r\n sortAsc,\r\n sortDesc,\r\n filterRemove,\r\n filterPlus,\r\n filterEdit,\r\n check,\r\n} from './icons';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class IconRegistryService {\r\n private icons = new Map<string, SafeHtml>();\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.registerIcon('edit', edit);\r\n this.registerIcon('editOff', editOff);\r\n this.registerIcon('editSave', editSave);\r\n this.registerIcon('trash', trash);\r\n this.registerIcon('arrowLeft', arrowLeft);\r\n this.registerIcon('arrowRight', arrowRight);\r\n this.registerIcon('doubleArrowLeft', doubleArrowLeft);\r\n this.registerIcon('doubleArrowRight', doubleArrowRight);\r\n this.registerIcon('sort', sort);\r\n this.registerIcon('sortAsc', sortAsc);\r\n this.registerIcon('sortDesc', sortDesc);\r\n this.registerIcon('filterRemove', filterRemove);\r\n this.registerIcon('filterPlus', filterPlus);\r\n this.registerIcon('filterEdit', filterEdit);\r\n this.registerIcon('check', check);\r\n }\r\n\r\n public registerIcon(name: IconNames, svg: string): void {\r\n const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n this.icons.set(name, safeSvg);\r\n }\r\n\r\n public getIcon(name: string): SafeHtml | undefined {\r\n return this.icons.get(name);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Component({\r\n selector: 'fu-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrl: './icon.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class IconComponent implements OnChanges, OnInit {\r\n @Input({ required: true }) iconName: IconNames;\r\n\r\n @Input() size: string;\r\n @Input() strokeWidth: string;\r\n @Input() color: string;\r\n\r\n @HostBinding('class') get classList() {\r\n return `fu-icon`;\r\n }\r\n\r\n public iconSvg: SafeHtml | undefined;\r\n\r\n constructor(\r\n private iconRegistry: IconRegistryService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['size']) {\r\n this.setIconSize();\r\n }\r\n if (changes['color']) {\r\n this.setIconColor();\r\n }\r\n if (changes['strokeWidth']) {\r\n this.setIconStrokeWidth();\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.iconSvg = this.iconRegistry.getIcon(this.iconName);\r\n }\r\n\r\n private setIconColor(): void {\r\n this.elementRef.nativeElement.style.removeProperty('color');\r\n\r\n if (this.color !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty('color', this.color);\r\n }\r\n }\r\n\r\n private setIconSize(): void {\r\n this.elementRef.nativeElement.style.removeProperty('--fu-icon-size');\r\n\r\n if (this.size !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty(\r\n '--fu-icon-size',\r\n this.size.toString()\r\n );\r\n }\r\n }\r\n\r\n private setIconStrokeWidth(): void {\r\n this.elementRef.nativeElement.style.removeProperty(\r\n '--fu-icon-stroke-width'\r\n );\r\n if (this.strokeWidth !== undefined) {\r\n this.elementRef.nativeElement.style.setProperty(\r\n '--fu-icon-stroke-width',\r\n this.strokeWidth.toString()\r\n );\r\n }\r\n }\r\n}\r\n","<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { DataSortingService } from '../../services/data-sorting.service';\r\nimport { EditRowService } from '../../services/edit-row.service';\r\nimport { Subscription, filter } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-body-row-cell',\r\n templateUrl: './body-row-cell.component.html',\r\n styleUrl: './body-row-cell.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class BodyRowCellComponent implements OnInit, OnChanges, OnDestroy {\r\n public cellValue = input<string | number | boolean>('');\r\n public editKey = input<string>('');\r\n\r\n public cellDef = signal<string>('');\r\n public editCellValue = model<string | number | boolean>();\r\n public isEditing = signal<boolean>(false);\r\n public hasCellValue = signal<boolean>(false);\r\n public isCellBoolean = computed<boolean>(\r\n () => typeof this.cellValue() === 'boolean'\r\n );\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private editRowService: EditRowService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const rowIndex = this.getRowIndex();\r\n\r\n if (changes['cellValue']) {\r\n this.hasCellValue.set(true);\r\n }\r\n\r\n if (changes['editKey']) {\r\n this.validateKey();\r\n\r\n this.subscription = this.editRowService.editIndex$\r\n .pipe(filter(() => !!this.editKey))\r\n .subscribe((index) => {\r\n this.editCellValue.set(this.cellValue());\r\n this.isEditing.set(index === rowIndex);\r\n });\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n const index = this.getCellIndex();\r\n this.cellDef.set(this.sortService.getCellDef(index) || '');\r\n }\r\n\r\n public onInputChange(value: any): void {\r\n this.editCellValue.set(value);\r\n if (this.isEditing()) {\r\n this.editRowService.updateEditValues(this.editKey(), value);\r\n }\r\n }\r\n\r\n private validateKey(): void {\r\n if (!this.sortService.cellKeys().includes(this.editKey())) {\r\n console.warn(`Invalid editKey '${this.editKey}' provided.`);\r\n }\r\n }\r\n\r\n private getCellIndex(): number {\r\n const parent = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n }\r\n\r\n private getRowIndex(): number {\r\n const element = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n const parent = element.parentElement;\r\n if (!parent) return -1;\r\n\r\n const children = Array.from(parent.children);\r\n return children.indexOf(element);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"fu-body-row-cell\" [attr.data-edit]=\"isEditing()\">\r\n <span>{{ cellDef() }}</span>\r\n\r\n @if (hasCellValue()) {\r\n <!-- WRAP -->\r\n @if(isEditing()){ @if (isCellBoolean()) {\r\n <div class=\"fu-checkbox-input\">\r\n <input\r\n id=\"tmp-fu\"\r\n type=\"checkbox\"\r\n class=\"hidden-input-checkbox\"\r\n [checked]=\"cellValue()\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <svg><use xlink:href=\"#checkmark-fu\" /></svg>\r\n <label for=\"tmp-fu\"> </label>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n <symbol id=\"checkmark-fu\" viewBox=\"0 0 24 24\">\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-miterlimit=\"10\"\r\n fill=\"none\"\r\n d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n ></path>\r\n </symbol>\r\n </svg>\r\n </div>\r\n\r\n }@else {\r\n <input\r\n class=\"fu-edit-input\"\r\n [(ngModel)]=\"editCellValue\"\r\n (ngModelChange)=\"onInputChange($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n } }@else {\r\n <!-- WRAP -->\r\n @if (isCellBoolean() ) { @if (cellValue()) {\r\n <div style=\"margin-left: 4px\">\r\n <fu-icon iconName=\"check\" size=\"16px\" strokeWidth=\"3\" />\r\n </div>\r\n\r\n } }@else {\r\n <span>{{ cellValue() }}</span>\r\n } } }\r\n <!-- WRAP -->\r\n @if (!hasCellValue()) {\r\n <span>\r\n <ng-content />\r\n </span>\r\n }\r\n</div>\r\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sortColumn]',\r\n})\r\nexport class SortColumnDirective implements OnInit {\r\n @Input('sortColumn') public column: any;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n if (this.column) {\r\n this.renderer.setAttribute(\r\n this.el.nativeElement,\r\n 'data-sorted',\r\n this.column\r\n );\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnInit,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n} from '@angular/core';\r\nimport { DataSortingService, TSort } from '../../services/data-sorting.service';\r\n\r\n@Component({\r\n selector: 'fu-head-row-cell',\r\n templateUrl: './head-row-cell.component.html',\r\n styleUrl: './head-row-cell.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HeadRowCellComponent implements OnInit {\r\n public cellDef = input.required<string>();\r\n public sortKey = input<string | number>();\r\n\r\n public direction = computed<TSort>(() => this.sortService.sortDirection());\r\n public sorting = computed<string>(() => this.sortService.sortKey());\r\n\r\n // private storedValues = computed<OnSortEvent>(() =>\r\n // this.sortService.storedValues()\r\n // );\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n const index = this.getIndex();\r\n this.sortService.setCellDef(index, this.cellDef());\r\n }\r\n\r\n public onSorting(): void {\r\n this.sortService.setSortKey(this.sortKey()! as TSort);\r\n }\r\n\r\n // private validateKey(): void {\r\n // if (this.sortService.cellKeys().length > 0) {\r\n // if (!this.sortService.cellKeys().includes(this.sortKey()! as string)) {\r\n // console.warn(`Invalid sortKey '${this.sortKey}' provided.`);\r\n // }\r\n // }\r\n // }\r\n\r\n private getIndex(): number {\r\n const parent = this.elementRef.nativeElement.parentElement;\r\n return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n }\r\n}\r\n","<div\r\n class=\"fu-head-row-cell\"\r\n [ngClass]=\"{ disabled: !sortKey() }\"\r\n [sortColumn]=\"sortKey()\"\r\n (click)=\"onSorting()\"\r\n>\r\n <span>{{ cellDef() }}</span>\r\n @if (sortKey()) {\r\n <!-- wrap -->\r\n @if (sortKey() == sorting()) {\r\n <button>\r\n @if(direction() === 'asc') {\r\n <fu-icon strokeWidth=\"2.5\" iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon strokeWidth=\"2.5\" iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon color=\"gray\" iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-outline]',\r\n})\r\nexport class OutlinedButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-outline');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { EditRowService } from '../../services/edit-row.service';\r\nimport { Subscription, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-row-actions',\r\n templateUrl: './row-actions.component.html',\r\n styleUrl: './row-actions.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RowActionsComponent<T extends object>\r\n implements OnChanges, OnInit, OnDestroy\r\n{\r\n public editRow = input<T>();\r\n public editIndex = input<number>();\r\n\r\n public isEditing = signal<boolean>(false);\r\n public showDelete = signal<boolean>(false);\r\n\r\n @Output() public editSave = new EventEmitter<T>();\r\n @Output() public delete = new EventEmitter<void>();\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private el: ElementRef,\r\n private editRowService: EditRowService\r\n ) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'data-actions', 'true');\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['editRow'] && changes['editIndex']) {\r\n this.subscription = this.editRowService.editIndex$.subscribe((index) => {\r\n this.isEditing.set(index === this.editIndex());\r\n });\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.showDelete.set(this.delete.observed);\r\n }\r\n\r\n public setEdit(e: Event): void {\r\n this.editRowService.startEditing(this.editIndex()!);\r\n\r\n e.stopPropagation();\r\n }\r\n\r\n public cancelEdit(e: Event): void {\r\n this.editRowService.stopEditing();\r\n\r\n e.stopPropagation();\r\n }\r\n\r\n public saveEdit(e: Event): void {\r\n this.editRowService.stopEditing();\r\n\r\n this.editRowService.editValues$.pipe(take(1)).subscribe((editedValues) => {\r\n const updatedRow = { ...this.editRow(), ...editedValues } as T;\r\n\r\n this.editSave.emit(updatedRow);\r\n });\r\n\r\n this.editRowService.resetEditValues();\r\n e.stopPropagation();\r\n }\r\n\r\n public emitDelete(e: Event): void {\r\n this.delete.emit();\r\n e.stopPropagation();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"fu-row-actions\">\r\n @if (editRow() && editIndex() !== null) { @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=\"editSave\" />\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 } } @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","import { Directive, Input } from '@angular/core';\r\n\r\ninterface HeaderTemplateContext<T extends object> {\r\n $implicit: T;\r\n keys: Record<keyof T, keyof T>;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuHeaderTemplate]',\r\n})\r\nexport class GridHeaderTemplateDirective<T extends object> {\r\n @Input('fuHeaderTemplate') public dataSource: T[] | '';\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridHeaderTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is HeaderTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Directive, Input } from '@angular/core';\r\n\r\ninterface BodyTemplateContext<T extends object> {\r\n $implicit: T;\r\n index: number;\r\n keys: Record<keyof T, keyof T>;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuBodyTemplate]',\r\n})\r\nexport class GridBodyTemplateDirective<T extends object> {\r\n @Input('fuBodyTemplate') public dataSource: T[] = [];\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridBodyTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is BodyTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Directive, Input } from '@angular/core';\r\n\r\ninterface ExpandTemplateContext<T extends object> {\r\n $implicit: T;\r\n index: number;\r\n}\r\n\r\n@Directive({\r\n selector: '[fuExpandTemplate]',\r\n})\r\nexport class GridExpandTemplateDirective<T extends object> {\r\n @Input('fuExpandTemplate') public dataSource: T[] | '';\r\n\r\n static ngTemplateContextGuard<TContextItem extends object>(\r\n dir: GridExpandTemplateDirective<TContextItem>,\r\n ctx: unknown\r\n ): ctx is ExpandTemplateContext<TContextItem> {\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DataGridPaginator } from './data-grid-paginator';\r\n\r\nexport interface PaginationState {\r\n page: number;\r\n pageSize: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'any',\r\n})\r\nexport class PaginationService implements DataGridPaginator {\r\n private paginationSubject = new Subject<PaginationState>();\r\n private firstPageSubject = new Subject<boolean>();\r\n\r\n public paginator$: Observable<PaginationState> =\r\n this.paginationSubject.asObservable();\r\n public firstPage$ = this.firstPageSubject.asObservable();\r\n\r\n public setPage(page: number, pageSize: number): void {\r\n // const currentState = this.paginationSubject.value;\r\n this.paginationSubject.next({ page, pageSize });\r\n }\r\n\r\n public setPageSize(pageSize: number): void {\r\n this.paginationSubject.next({ page: 1, pageSize });\r\n }\r\n\r\n public initPagination(page: number, pageSize: number): void {\r\n this.paginationSubject.next({ page, pageSize });\r\n }\r\n\r\n public firstPage(): void {\r\n this.firstPageSubject.next(true);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-text]',\r\n})\r\nexport class TextButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-text');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n input,\r\n} from '@angular/core';\r\n\r\nexport type CssUnit = `${number}${'px' | 'fr' | 'rem' | '%'}`;\r\nexport type ColumnSizes = CssUnit[];\r\n\r\n@Directive({\r\n selector: '[gridColumns]',\r\n})\r\nexport class GridColumnsDirective implements AfterViewInit {\r\n public columnSizes = input<ColumnSizes>([]);\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n public ngAfterViewInit(): void {\r\n this.updateGridColumns();\r\n }\r\n\r\n @HostListener('window:resize')\r\n private onResize(): void {\r\n this.updateGridColumns();\r\n }\r\n\r\n private generateColumns(count: number): string {\r\n if (this.columnSizes()) {\r\n const columnsCount = this.columnSizes().length;\r\n if (columnsCount !== count) {\r\n console.warn(\r\n `Incorect amount of Column sizes ${columnsCount}/${count} provided!`\r\n );\r\n }\r\n return this.columnSizes().join(' ');\r\n }\r\n return Array(count).fill('1fr').join(' ');\r\n }\r\n\r\n private updateGridColumns(): void {\r\n const childrenCount = this.el.nativeElement.children.length as number;\r\n\r\n const dataGrid = this.el.nativeElement.closest(\r\n '#fusion-datagrid'\r\n ) as HTMLElement;\r\n\r\n const columns = this.generateColumns(childrenCount);\r\n\r\n if (dataGrid) {\r\n dataGrid.style.setProperty('--grid-columns', columns);\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'keyMapping',\r\n})\r\nexport class KeyMappingPipe implements PipeTransform {\r\n transform(value: object): object {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const mappedObject: Record<string, string> = {};\r\n Object.keys(value).forEach((key) => {\r\n mappedObject[key] = key;\r\n });\r\n\r\n return mappedObject;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n DataSortingService,\r\n OnSortEvent,\r\n} from '../services/data-sorting.service';\r\nimport { GridHeaderTemplateDirective } from '../directives/grid-header-template.directive';\r\nimport { GridBodyTemplateDirective } from '../directives/grid-body-template.directive';\r\nimport { GridExpandTemplateDirective } from '../directives/grid-expand-template.directive';\r\nimport { PaginationService } from '../services/paginator.service';\r\nimport { ColumnSizes } from '../directives/grid-columns.directive';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fu-data-grid',\r\n templateUrl: './data-grid.component.html',\r\n styleUrl: './data-grid.component.scss',\r\n providers: [DataSortingService],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DataGridComponent<T extends object>\r\n implements OnChanges, AfterContentInit, OnDestroy\r\n{\r\n /**\r\n * Table data - array of objects.\r\n * [totalCount] required with server side pagination.\r\n */\r\n @Input({ required: true }) public dataSource: T[] = [];\r\n /**\r\n * Total data count.\r\n * Required with server side pagination.\r\n */\r\n @Input() public totalCount: number;\r\n /**\r\n * Initial page size for paginator.\r\n */\r\n @Input() public pageSize: number = 5;\r\n /**\r\n * Page size optionsfor paginator.\r\n */\r\n @Input() public pageSizeOptions: number[] = [5, 10, 15];\r\n /**\r\n * An array of column sizes, where each size is a valid CSS unit string.\r\n * Valid units are: `px`, `fr`, `rem`, `%`.\r\n * Example: ['200px', '1fr', '10%', '5rem']\r\n */\r\n @Input() public columnSizes: ColumnSizes;\r\n /**\r\n * String key which will be used to store pageSize and currentPage in local storage for each table.\r\n */\r\n @Input({ required: true }) public localStorageKey: string = 'data';\r\n /**\r\n * Shows spinner and overlay when new data is being loaded.\r\n * Usable only with server pagination when totalCount is provided.\r\n */\r\n @Input() public dataLoading: boolean = false;\r\n /**\r\n * Makes row expandable on click.\r\n */\r\n @Input() public expandable: boolean = false;\r\n /**\r\n * Enables filter for dataSource.\r\n * Usable only if not server side pagination.\r\n */\r\n @Input() public filter: boolean = false;\r\n /**\r\n * Shows paginator.\r\n */\r\n @Input() public paginator: boolean = false;\r\n /**\r\n * Highlights row on hover.\r\n */\r\n @Input() public hoverable: boolean = true;\r\n /**\r\n * Darker background for each odd row.\r\n */\r\n @Input() public striped: boolean = true;\r\n\r\n @ContentChild('caption') public captionTemplate!: TemplateRef<any>;\r\n @ContentChild(GridHeaderTemplateDirective, { read: TemplateRef })\r\n public headerTemplate!: TemplateRef<any>;\r\n @ContentChild(GridBodyTemplateDirective, { read: TemplateRef })\r\n public bodyTemplate!: TemplateRef<any>;\r\n @ContentChild(GridExpandTemplateDirective, { read: TemplateRef })\r\n public expandTemplate!: TemplateRef<any>;\r\n @ContentChild('footer') public footerTemplate!: TemplateRef<any>;\r\n @ContentChild('noDataRow') public noDataTemplate!: TemplateRef<any>;\r\n /**\r\n * Callback to invoke when a row is clicked.\r\n * Emits selected row data.\r\n */\r\n @Output() public rowSelect = new EventEmitter<T>();\r\n @Output() public onSort = new EventEmitter<OnSortEvent>();\r\n\r\n public sortedData: T[] = [...this.dataSource];\r\n public sortDirection: 'asc' | 'desc' = 'asc';\r\n public sortKey: string = '';\r\n\r\n public filteredData: T[] = [];\r\n public filterText: string = '';\r\n\r\n public currentPage: number = 1;\r\n public paginatedData: T[] = [];\r\n\r\n public expandedRowIndex: number | null = null;\r\n public serverPagination = signal<boolean>(false);\r\n\r\n private subscription: Subscription;\r\n private initialLoad: boolean = true;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private paginationService: PaginationService\r\n ) {\r\n effect(() => {\r\n if (!this.serverPagination()) {\r\n this.sortData(this.sortService.sortKey());\r\n } else if (this.sortService.sortKey()) {\r\n this.onSort.emit({\r\n sortKey: this.sortService.sortKey(),\r\n sortDirection: this.sortService.sortDirection(),\r\n });\r\n\r\n if (!this.initialLoad) {\r\n this.paginationService.firstPage();\r\n }\r\n this.initialLoad = false;\r\n }\r\n });\r\n\r\n this.subscription = this.paginationService.firstPage$\r\n .pipe(filter(() => this.currentPage !== 1))\r\n .subscribe(() => {\r\n this.currentPage = 1;\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n this.paginationService.initPagination(this.currentPage, this.pageSize);\r\n });\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['localStorageKey']) {\r\n this.sortService.getLocalStorageKey(this.localStorageKey);\r\n\r\n this.pageSize = JSON.parse(\r\n window.localStorage.getItem(\r\n `fu-grid-${this.localStorageKey}-pageSize`\r\n ) || this.pageSizeOptions[0].toString()\r\n );\r\n this.currentPage = JSON.parse(\r\n window.localStorage.getItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`\r\n ) || '1'\r\n );\r\n\r\n this.paginationService.initPagination(this.currentPage, this.pageSize);\r\n }\r\n\r\n if (changes['totalCount']) {\r\n this.serverPagination.set(true);\r\n }\r\n\r\n if (changes['dataSource']) {\r\n if (!this.serverPagination()) {\r\n this.filteredData = [...this.dataSource];\r\n this.sortedData = [...this.filteredData];\r\n }\r\n this.sortService.getCellKeys(this.dataSource[0] || {});\r\n this.updatePagination();\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.sortService.clear();\r\n }\r\n\r\n public originalOrder = (a: any, b: any): number => {\r\n const keys = Object.keys(this.dataSource);\r\n return keys.indexOf(a.key) - keys.indexOf(b.key);\r\n };\r\n\r\n public sortData(key: any): void {\r\n this.sortKey = key;\r\n const sortDirection = this.sortService.sortDirection();\r\n\r\n this.sortedData.sort((a: any, b: any) => {\r\n if (a[key] < b[key]) {\r\n return sortDirection === 'asc' ? -1 : 1;\r\n } else if (a[key] > b[key]) {\r\n return sortDirection === 'asc' ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n\r\n this.addSortClass(key);\r\n this.updatePagination();\r\n }\r\n\r\n private addSortClass(key: string): void {\r\n const sortDirection = this.sortService.sortDirection();\r\n\r\n const element = document.querySelector(`[data-sorted=\"${key}\"]`);\r\n\r\n document\r\n .querySelectorAll('[data-sorted]')\r\n .forEach((th) => th.classList.remove('sort-asc', 'sort-desc'));\r\n\r\n if (element) {\r\n element.classList.add(sortDirection === 'asc' ? 'sort-asc' : 'sort-desc');\r\n }\r\n }\r\n\r\n public filterData(): void {\r\n if (this.filterText.trim() === '') {\r\n this.filteredData = [...this.dataSource];\r\n } else {\r\n this.filteredData = this.dataSource.filter((item: any) =>\r\n Object.values(item).some((value: any) =>\r\n value.toString().toLowerCase().includes(this.filterText.toLowerCase())\r\n )\r\n );\r\n }\r\n\r\n this.sortedData = [...this.filteredData];\r\n this.currentPage = 1;\r\n\r\n this.updatePagination();\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n }\r\n\r\n private serverSidePagination(): void {\r\n this.paginatedData = this.dataSource;\r\n }\r\n\r\n private updatePagination(): void {\r\n this.expandedRowIndex = null;\r\n\r\n if (this.serverPagination()) {\r\n return this.serverSidePagination();\r\n }\r\n\r\n const start = (this.currentPage - 1) * this.pageSize;\r\n const end = start + this.pageSize;\r\n this.paginatedData = this.sortedData.slice(start, end);\r\n }\r\n\r\n public goToPage(page: number): void {\r\n if (page < 1 || page > this.totalPages()) {\r\n return;\r\n }\r\n this.currentPage = page;\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n this.paginationService.setPage(page, this.pageSize);\r\n this.updatePagination();\r\n }\r\n\r\n public totalPages(): number {\r\n return Math.ceil(this.totalItemCount() / this.pageSize);\r\n }\r\n\r\n public getPageStart(): number {\r\n return (this.currentPage - 1) * this.pageSize + 1;\r\n }\r\n\r\n public getPageEnd(): number {\r\n return Math.min(this.currentPage * this.pageSize, this.totalItemCount());\r\n }\r\n\r\n public changePageSize(event: any): void {\r\n this.pageSize = Number(event.target.value);\r\n this.currentPage = 1;\r\n\r\n this.paginationService.setPageSize(this.pageSize);\r\n this.updatePagination();\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-currentPage`,\r\n this.currentPage.toString()\r\n );\r\n\r\n window.localStorage.setItem(\r\n `fu-grid-${this.localStorageKey}-pageSize`,\r\n this.pageSize.toString()\r\n );\r\n }\r\n\r\n public totalItemCount(): number {\r\n return this.totalCount || this.filteredData.length;\r\n }\r\n\r\n public rowClick(row: T, index: number = 0): void {\r\n if (this.expandable) {\r\n if (this.expandedRowIndex === index) {\r\n this.expandedRowIndex = null;\r\n } else {\r\n this.expandedRowIndex = index;\r\n }\r\n return;\r\n }\r\n\r\n this.rowSelect.emit(row);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<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]=\"expandable ? 'pointer' : 'default'\"\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 <!-- WRAP -->\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 [cellDef]=\"$any(header.key)\" [sortKey]=\"$any(header.key)\" />\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-paginator-page-select\">\r\n <span>Items per page:</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","import { Observable } from 'rxjs';\r\nimport { PaginationState } from './paginator.service';\r\n\r\nexport abstract class DataGridPaginator {\r\n abstract paginator$: Observable<PaginationState>;\r\n abstract firstPage: () => void;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconComponent } from './icon.component';\r\n\r\n@NgModule({\r\n declarations: [IconComponent],\r\n imports: [CommonModule],\r\n providers: [IconRegistryService],\r\n exports: [IconComponent],\r\n})\r\nexport class IconModule {}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-raised]',\r\n})\r\nexport class RaisedButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-raised');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n Input,\r\n OnInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[fu-btn-filled]',\r\n})\r\nexport class FilledButtonDirective implements OnInit {\r\n @Input() variant: 'regular' | 'danger' | 'success' | 'info' | 'warning' =\r\n 'regular';\r\n\r\n @Input({ transform: booleanAttribute }) iconButton: boolean = false;\r\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n public ngOnInit() {\r\n this.setInitialStyles();\r\n }\r\n\r\n private setInitialStyles() {\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n this.renderer.addClass(this.el.nativeElement, 'fu-btn-filled');\r\n this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant}`);\r\n\r\n if (this.iconButton) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n }\r\n\r\n if (this.rounded) {\r\n this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutlinedButtonDirective } from './directives/btn-outline.directive';\r\nimport { RaisedButtonDirective } from './directives/btn-raised.directive';\r\nimport { TextButtonDirective } from './directives/btn-text.directive';\r\nimport { FilledButtonDirective } from './directives/btn-flat.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n OutlinedButtonDirective,\r\n FilledButtonDirective,\r\n RaisedButtonDirective,\r\n TextButtonDirective,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n OutlinedButtonDirective,\r\n FilledButtonDirective,\r\n RaisedButtonDirective,\r\n TextButtonDirective,\r\n ],\r\n})\r\nexport class ButtonModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { DataGridComponent } from './data-grid/data-grid.component';\r\nimport { HeadRowCellComponent } from './components/head-row-cell/head-row-cell.component';\r\nimport { BodyRowCellComponent } from './components/body-row-cell/body-row-cell.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SortColumnDirective } from './directives/sort-column.directive';\r\nimport { GridColumnsDirective } from './directives/grid-columns.directive';\r\nimport { GridBodyTemplateDirective } from './directives/grid-body-template.directive';\r\nimport { GridHeaderTemplateDirective } from './directives/grid-header-template.directive';\r\nimport { GridExpandTemplateDirective } from './directives/grid-expand-template.directive';\r\nimport { RowActionsComponent } from './components/row-actions/row-actions.component';\r\nimport { PaginationService } from './services/paginator.service';\r\nimport { DataGridPaginator } from './services/data-grid-paginator';\r\nimport { KeyMappingPipe } from './pipes/key-mapping.pipe';\r\nimport { IconModule } from '../icons/icon.module';\r\nimport { ButtonModule } from '../button/button.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n SortColumnDirective,\r\n GridColumnsDirective,\r\n DataGridComponent,\r\n BodyRowCellComponent,\r\n HeadRowCellComponent,\r\n GridHeaderTemplateDirective,\r\n GridExpandTemplateDirective,\r\n GridBodyTemplateDirective,\r\n RowActionsComponent,\r\n KeyMappingPipe,\r\n ],\r\n imports: [CommonModule, FormsModule, IconModule, ButtonModule],\r\n exports: [\r\n DataGridComponent,\r\n HeadRowCellComponent,\r\n BodyRowCellComponent,\r\n RowActionsComponent,\r\n GridHeaderTemplateDirective,\r\n GridExpandTemplateDirective,\r\n GridBodyTemplateDirective,\r\n ],\r\n providers: [{ provide: DataGridPaginator, useExisting: PaginationService }],\r\n})\r\nexport class DataGridModule {}\r\n","/*\r\n * Public API Surface of ng-fusion-ui\r\n */\r\n\r\nexport * from './lib/data-grid/index';\r\nexport * from './lib/button/index';\r\nexport * from './lib/icons/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconRegistryService","i1.DataSortingService","i2.EditRowService","i3","i4.IconComponent","i2","i3.IconComponent","i4.SortColumnDirective","i1.EditRowService","i2.IconComponent","i3.OutlinedButtonDirective","i2.PaginationService","i5.IconComponent","i6.TextButtonDirective","i7.GridColumnsDirective","i8.BodyRowCellComponent","i9.HeadRowCellComponent","i10.KeyMappingPipe"],"mappings":"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"}
@@ -6,12 +6,13 @@ export declare class BodyRowCellComponent implements OnInit, OnChanges, OnDestro
6
6
  private sortService;
7
7
  private editRowService;
8
8
  private elementRef;
9
- cellValue: import("@angular/core").InputSignal<string | number>;
9
+ cellValue: import("@angular/core").InputSignal<string | number | boolean>;
10
10
  editKey: import("@angular/core").InputSignal<string>;
11
11
  cellDef: import("@angular/core").WritableSignal<string>;
12
- editCellValue: import("@angular/core").ModelSignal<string | number | undefined>;
12
+ editCellValue: import("@angular/core").ModelSignal<string | number | boolean | undefined>;
13
13
  isEditing: import("@angular/core").WritableSignal<boolean>;
14
14
  hasCellValue: import("@angular/core").WritableSignal<boolean>;
15
+ isCellBoolean: import("@angular/core").Signal<boolean>;
15
16
  private subscription;
16
17
  constructor(sortService: DataSortingService, editRowService: EditRowService, elementRef: ElementRef);
17
18
  ngOnChanges(changes: SimpleChanges): void;
@@ -82,6 +82,7 @@ export declare class DataGridComponent<T extends object> implements OnChanges, A
82
82
  expandedRowIndex: number | null;
83
83
  serverPagination: import("@angular/core").WritableSignal<boolean>;
84
84
  private subscription;
85
+ private initialLoad;
85
86
  constructor(sortService: DataSortingService, paginationService: PaginationService);
86
87
  ngOnChanges(changes: SimpleChanges): void;
87
88
  ngAfterContentInit(): void;
@@ -1 +1 @@
1
- export type IconNames = 'edit' | 'editOff' | 'editSave' | 'trash' | 'doubleArrowLeft' | 'doubleArrowRight' | 'arrowLeft' | 'arrowRight' | 'sort' | 'sortAsc' | 'sortDesc' | 'filterRemove' | 'filterPlus' | 'filterEdit';
1
+ export type IconNames = 'edit' | 'editOff' | 'editSave' | 'trash' | 'doubleArrowLeft' | 'doubleArrowRight' | 'arrowLeft' | 'arrowRight' | 'sort' | 'sortAsc' | 'sortDesc' | 'filterRemove' | 'filterPlus' | 'filterEdit' | 'check';
@@ -12,3 +12,4 @@ export declare const sortDesc = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewB
12
12
  export declare const filterRemove = "<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=\"M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5\"/></svg>";
13
13
  export declare 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 declare 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
+ export declare 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>";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-fusion-ui",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "New Angular component library!",
5
5
  "homepage": "https://fusion-ui.up.railway.app",
6
6
  "license": "MIT",