ng-fusion-ui 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/data-grid/components/head-row-cell/head-row-cell.component.mjs +14 -28
- package/esm2022/lib/data-grid/data-grid/data-grid.component.mjs +12 -3
- package/fesm2022/ng-fusion-ui.mjs +23 -28
- package/fesm2022/ng-fusion-ui.mjs.map +1 -1
- package/lib/data-grid/components/head-row-cell/head-row-cell.component.d.ts +3 -6
- package/lib/data-grid/data-grid/data-grid.component.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input, } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "../../services/data-sorting.service";
|
|
4
4
|
import * as i2 from "../../../icons/icon.component";
|
|
5
5
|
import * as i3 from "../../directives/sort-column.directive";
|
|
6
6
|
export class HeadRowCellComponent {
|
|
7
|
+
// private storedValues = computed<OnSortEvent>(() =>
|
|
8
|
+
// this.sortService.storedValues()
|
|
9
|
+
// );
|
|
7
10
|
constructor(sortService, elementRef) {
|
|
8
11
|
this.sortService = sortService;
|
|
9
12
|
this.elementRef = elementRef;
|
|
@@ -11,47 +14,30 @@ export class HeadRowCellComponent {
|
|
|
11
14
|
this.sortKey = input();
|
|
12
15
|
this.direction = computed(() => this.sortService.sortDirection());
|
|
13
16
|
this.sorting = computed(() => this.sortService.sortKey());
|
|
14
|
-
this.storedValues = computed(() => this.sortService.storedValues());
|
|
15
|
-
this.onSort = new EventEmitter();
|
|
16
|
-
effect(() => {
|
|
17
|
-
if (this.sortKey() && !this.onSort.observed) {
|
|
18
|
-
this.validateKey();
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
17
|
}
|
|
22
18
|
ngOnInit() {
|
|
23
19
|
const index = this.getIndex();
|
|
24
20
|
this.sortService.setCellDef(index, this.cellDef());
|
|
25
|
-
if (this.onSort.observed &&
|
|
26
|
-
this.storedValues().sortKey === this.sortKey()) {
|
|
27
|
-
this.onSort.emit(this.storedValues());
|
|
28
|
-
}
|
|
29
21
|
}
|
|
30
22
|
onSorting() {
|
|
31
|
-
this.onSort.emit({
|
|
32
|
-
sortKey: this.sortKey(),
|
|
33
|
-
sortDirection: this.direction() === 'asc' ? 'desc' : 'asc',
|
|
34
|
-
});
|
|
35
23
|
this.sortService.setSortKey(this.sortKey());
|
|
36
24
|
}
|
|
37
|
-
validateKey() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
25
|
+
// private validateKey(): void {
|
|
26
|
+
// if (this.sortService.cellKeys().length > 0) {
|
|
27
|
+
// if (!this.sortService.cellKeys().includes(this.sortKey()! as string)) {
|
|
28
|
+
// console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
|
|
29
|
+
// }
|
|
30
|
+
// }
|
|
31
|
+
// }
|
|
44
32
|
getIndex() {
|
|
45
33
|
const parent = this.elementRef.nativeElement.parentElement;
|
|
46
34
|
return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
|
|
47
35
|
}
|
|
48
36
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, deps: [{ token: i1.DataSortingService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: { classPropertyName: "cellDef", publicName: "cellDef", isSignal: true, isRequired: true, transformFunction: null }, sortKey: { classPropertyName: "sortKey", publicName: "sortKey", isSignal: true, isRequired: false, transformFunction: null } },
|
|
37
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: { classPropertyName: "cellDef", publicName: "cellDef", isSignal: true, isRequired: true, transformFunction: null }, sortKey: { classPropertyName: "sortKey", publicName: "sortKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n", styles: [".fu-head-row-cell{padding:16px;font-weight:700;display:flex}.fu-head-row-cell>span{margin-right:4px}.fu-head-row-cell>button{cursor:pointer;background-color:transparent;color:var(--fu-grid-text-color);font-weight:700;border:none}@media (max-width: 900px){.fu-head-row-cell{display:none}.fu-head-row-cell[data-sorted]{display:flex}}.fu-head-row-cell[data-sorted]:hover{cursor:pointer;background-color:var(--fu-grid-hover-color)}.fu-head-row-cell.sort-asc,.fu-head-row-cell.sort-desc{background-color:var(--fu-grid-fg-color)}\n"], dependencies: [{ kind: "component", type: i2.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i3.SortColumnDirective, selector: "[sortColumn]", inputs: ["sortColumn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
50
38
|
}
|
|
51
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, decorators: [{
|
|
52
40
|
type: Component,
|
|
53
41
|
args: [{ selector: 'fu-head-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n", styles: [".fu-head-row-cell{padding:16px;font-weight:700;display:flex}.fu-head-row-cell>span{margin-right:4px}.fu-head-row-cell>button{cursor:pointer;background-color:transparent;color:var(--fu-grid-text-color);font-weight:700;border:none}@media (max-width: 900px){.fu-head-row-cell{display:none}.fu-head-row-cell[data-sorted]{display:flex}}.fu-head-row-cell[data-sorted]:hover{cursor:pointer;background-color:var(--fu-grid-hover-color)}.fu-head-row-cell.sort-asc,.fu-head-row-cell.sort-desc{background-color:var(--fu-grid-fg-color)}\n"] }]
|
|
54
|
-
}], ctorParameters: () => [{ type: i1.DataSortingService }, { type: i0.ElementRef }]
|
|
55
|
-
|
|
56
|
-
}] } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9oZWFkLXJvdy1jZWxsL2hlYWQtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvaGVhZC1yb3ctY2VsbC9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFFWixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDOzs7OztBQWN2QixNQUFNLE9BQU8sb0JBQW9CO0lBYS9CLFlBQ1UsV0FBK0IsRUFDL0IsVUFBc0I7UUFEdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFkekIsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNuQyxZQUFPLEdBQUcsS0FBSyxFQUFtQixDQUFDO1FBRW5DLGNBQVMsR0FBRyxRQUFRLENBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFlBQU8sR0FBRyxRQUFRLENBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRTVELGlCQUFZLEdBQUcsUUFBUSxDQUFjLEdBQUcsRUFBRSxDQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUNoQyxDQUFDO1FBRWUsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFNeEQsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFDOUMsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUc7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsT0FBTyxhQUFhLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBQzNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUUsQ0FBQzs4R0F4RFUsb0JBQW9CO2tHQUFwQixvQkFBb0IsOFZDekJqQyxrZUFnQkE7OzJGRFNhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTtnSEFhcEIsTUFBTTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG4gIGlucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIERhdGFTb3J0aW5nU2VydmljZSxcclxuICBPblNvcnRFdmVudCxcclxuICBUU29ydCxcclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWhlYWQtcm93LWNlbGwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRSb3dDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgY2VsbERlZiA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICBwdWJsaWMgc29ydEtleSA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIGRpcmVjdGlvbiA9IGNvbXB1dGVkPFRTb3J0PigoKSA9PiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSk7XHJcbiAgcHVibGljIHNvcnRpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuXHJcbiAgcHJpdmF0ZSBzdG9yZWRWYWx1ZXMgPSBjb21wdXRlZDxPblNvcnRFdmVudD4oKCkgPT5cclxuICAgIHRoaXMuc29ydFNlcnZpY2Uuc3RvcmVkVmFsdWVzKClcclxuICApO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8T25Tb3J0RXZlbnQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zb3J0S2V5KCkgJiYgIXRoaXMub25Tb3J0Lm9ic2VydmVkKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZUtleSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJbmRleCgpO1xyXG4gICAgdGhpcy5zb3J0U2VydmljZS5zZXRDZWxsRGVmKGluZGV4LCB0aGlzLmNlbGxEZWYoKSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9uU29ydC5vYnNlcnZlZCAmJlxyXG4gICAgICB0aGlzLnN0b3JlZFZhbHVlcygpLnNvcnRLZXkgPT09IHRoaXMuc29ydEtleSgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vblNvcnQuZW1pdCh0aGlzLnN0b3JlZFZhbHVlcygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNvcnRpbmcoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uU29ydC5lbWl0KHtcclxuICAgICAgc29ydEtleTogdGhpcy5zb3J0S2V5KCkhLFxyXG4gICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbigpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zb3J0U2VydmljZS5zZXRTb3J0S2V5KHRoaXMuc29ydEtleSgpISBhcyBUU29ydCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlS2V5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydFNlcnZpY2UuY2VsbEtleXMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICghdGhpcy5zb3J0U2VydmljZS5jZWxsS2V5cygpLmluY2x1ZGVzKHRoaXMuc29ydEtleSgpISBhcyBzdHJpbmcpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHNvcnRLZXkgJyR7dGhpcy5zb3J0S2V5fScgcHJvdmlkZWQuYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShwYXJlbnQuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3ctY2VsbFwiIFtzb3J0Q29sdW1uXT1cInNvcnRLZXkoKVwiIChjbGljayk9XCJvblNvcnRpbmcoKVwiPlxyXG4gIDxzcGFuPnt7IGNlbGxEZWYoKSB9fTwvc3Bhbj5cclxuICBAaWYgKHNvcnRLZXkoKSkge1xyXG4gIDwhLS0gd3JhcCAtLT5cclxuICBAaWYgKHNvcnRLZXkoKSA9PSBzb3J0aW5nKCkpIHtcclxuICA8YnV0dG9uPlxyXG4gICAgQGlmKGRpcmVjdGlvbigpID09PSAnYXNjJykge1xyXG4gICAgPGZ1LWljb24gaWNvbk5hbWU9XCJzb3J0QXNjXCIgLz5cclxuICAgIH0gQGlmIChkaXJlY3Rpb24oKSA9PT0gJ2Rlc2MnKSB7XHJcbiAgICA8ZnUtaWNvbiBpY29uTmFtZT1cInNvcnREZXNjXCIgLz5cclxuICAgIH1cclxuICA8L2J1dHRvbj5cclxuICB9IEBlbHNlIHtcclxuICA8YnV0dG9uPjxmdS1pY29uIGljb25OYW1lPVwic29ydFwiIC8+PC9idXR0b24+XHJcbiAgfSB9XHJcbjwvZGl2PlxyXG4iXX0=
|
|
42
|
+
}], ctorParameters: () => [{ type: i1.DataSortingService }, { type: i0.ElementRef }] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9oZWFkLXJvdy1jZWxsL2hlYWQtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvaGVhZC1yb3ctY2VsbC9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUlULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDOzs7OztBQVV2QixNQUFNLE9BQU8sb0JBQW9CO0lBTy9CLHFEQUFxRDtJQUNyRCxvQ0FBb0M7SUFDcEMsS0FBSztJQUVMLFlBQ1UsV0FBK0IsRUFDL0IsVUFBc0I7UUFEdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFaekIsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNuQyxZQUFPLEdBQUcsS0FBSyxFQUFtQixDQUFDO1FBRW5DLGNBQVMsR0FBRyxRQUFRLENBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFlBQU8sR0FBRyxRQUFRLENBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBU2pFLENBQUM7SUFFRyxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsa0RBQWtEO0lBQ2xELDhFQUE4RTtJQUM5RSxxRUFBcUU7SUFDckUsUUFBUTtJQUNSLE1BQU07SUFDTixJQUFJO0lBRUksUUFBUTtRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUMzRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7OEdBcENVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtUQ25CakMsa2VBZ0JBOzsyRkRHYSxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgY29tcHV0ZWQsXHJcbiAgaW5wdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTb3J0aW5nU2VydmljZSwgVFNvcnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWhlYWQtcm93LWNlbGwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRSb3dDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgY2VsbERlZiA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICBwdWJsaWMgc29ydEtleSA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIGRpcmVjdGlvbiA9IGNvbXB1dGVkPFRTb3J0PigoKSA9PiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSk7XHJcbiAgcHVibGljIHNvcnRpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuXHJcbiAgLy8gcHJpdmF0ZSBzdG9yZWRWYWx1ZXMgPSBjb21wdXRlZDxPblNvcnRFdmVudD4oKCkgPT5cclxuICAvLyAgIHRoaXMuc29ydFNlcnZpY2Uuc3RvcmVkVmFsdWVzKClcclxuICAvLyApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc29ydFNlcnZpY2U6IERhdGFTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge31cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEluZGV4KCk7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLnNldENlbGxEZWYoaW5kZXgsIHRoaXMuY2VsbERlZigpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNvcnRpbmcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLnNldFNvcnRLZXkodGhpcy5zb3J0S2V5KCkhIGFzIFRTb3J0KTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgdmFsaWRhdGVLZXkoKTogdm9pZCB7XHJcbiAgLy8gICBpZiAodGhpcy5zb3J0U2VydmljZS5jZWxsS2V5cygpLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgaWYgKCF0aGlzLnNvcnRTZXJ2aWNlLmNlbGxLZXlzKCkuaW5jbHVkZXModGhpcy5zb3J0S2V5KCkhIGFzIHN0cmluZykpIHtcclxuICAvLyAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgc29ydEtleSAnJHt0aGlzLnNvcnRLZXl9JyBwcm92aWRlZC5gKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmdS1oZWFkLXJvdy1jZWxsXCIgW3NvcnRDb2x1bW5dPVwic29ydEtleSgpXCIgKGNsaWNrKT1cIm9uU29ydGluZygpXCI+XHJcbiAgPHNwYW4+e3sgY2VsbERlZigpIH19PC9zcGFuPlxyXG4gIEBpZiAoc29ydEtleSgpKSB7XHJcbiAgPCEtLSB3cmFwIC0tPlxyXG4gIEBpZiAoc29ydEtleSgpID09IHNvcnRpbmcoKSkge1xyXG4gIDxidXR0b24+XHJcbiAgICBAaWYoZGlyZWN0aW9uKCkgPT09ICdhc2MnKSB7XHJcbiAgICA8ZnUtaWNvbiBpY29uTmFtZT1cInNvcnRBc2NcIiAvPlxyXG4gICAgfSBAaWYgKGRpcmVjdGlvbigpID09PSAnZGVzYycpIHtcclxuICAgIDxmdS1pY29uIGljb25OYW1lPVwic29ydERlc2NcIiAvPlxyXG4gICAgfVxyXG4gIDwvYnV0dG9uPlxyXG4gIH0gQGVsc2Uge1xyXG4gIDxidXR0b24+PGZ1LWljb24gaWNvbk5hbWU9XCJzb3J0XCIgLz48L2J1dHRvbj5cclxuICB9IH1cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, effect, signal, } from '@angular/core';
|
|
2
|
-
import { DataSortingService } from '../services/data-sorting.service';
|
|
2
|
+
import { DataSortingService, } from '../services/data-sorting.service';
|
|
3
3
|
import { GridHeaderTemplateDirective } from '../directives/grid-header-template.directive';
|
|
4
4
|
import { GridBodyTemplateDirective } from '../directives/grid-body-template.directive';
|
|
5
5
|
import { GridExpandTemplateDirective } from '../directives/grid-expand-template.directive';
|
|
@@ -66,6 +66,7 @@ export class DataGridComponent {
|
|
|
66
66
|
* Emits selected row data.
|
|
67
67
|
*/
|
|
68
68
|
this.rowSelect = new EventEmitter();
|
|
69
|
+
this.sortEmit = new EventEmitter();
|
|
69
70
|
this.sortedData = [...this.dataSource];
|
|
70
71
|
this.sortDirection = 'asc';
|
|
71
72
|
this.sortKey = '';
|
|
@@ -83,6 +84,12 @@ export class DataGridComponent {
|
|
|
83
84
|
if (!this.serverPagination()) {
|
|
84
85
|
this.sortData(this.sortService.sortKey());
|
|
85
86
|
}
|
|
87
|
+
else if (this.sortService.sortKey()) {
|
|
88
|
+
this.sortEmit.emit({
|
|
89
|
+
sortKey: this.sortService.sortKey(),
|
|
90
|
+
sortDirection: this.sortService.sortDirection(),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
86
93
|
});
|
|
87
94
|
this.subscription = this.paginationService.firstPage$.subscribe(() => {
|
|
88
95
|
this.currentPage = 1;
|
|
@@ -208,7 +215,7 @@ export class DataGridComponent {
|
|
|
208
215
|
}
|
|
209
216
|
}
|
|
210
217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, deps: [{ token: i1.DataSortingService }, { token: i2.PaginationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: "dataSource", totalCount: "totalCount", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", columnSizes: "columnSizes", localStorageKey: "localStorageKey", dataLoading: "dataLoading", expandable: "expandable", filter: "filter", paginator: "paginator", hoverable: "hoverable", striped: "striped" }, outputs: { rowSelect: "rowSelect" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"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", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i6.TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: i7.GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: i8.BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: i9.HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"], outputs: ["onSort"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i10.KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
218
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: "dataSource", totalCount: "totalCount", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", columnSizes: "columnSizes", localStorageKey: "localStorageKey", dataLoading: "dataLoading", expandable: "expandable", filter: "filter", paginator: "paginator", hoverable: "hoverable", striped: "striped" }, outputs: { rowSelect: "rowSelect", sortEmit: "sortEmit" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"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", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: i6.TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: i7.GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: i8.BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: i9.HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i10.KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
212
219
|
}
|
|
213
220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, decorators: [{
|
|
214
221
|
type: Component,
|
|
@@ -259,5 +266,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
259
266
|
args: ['noDataRow']
|
|
260
267
|
}], rowSelect: [{
|
|
261
268
|
type: Output
|
|
269
|
+
}], sortEmit: [{
|
|
270
|
+
type: Output
|
|
262
271
|
}] } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7OztBQWEzRixNQUFNLE9BQU8saUJBQWlCO0lBd0Y1QixZQUNVLFdBQStCLEVBQy9CLGlCQUFvQztRQURwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXZGOUM7OztXQUdHO1FBQytCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFNdkQ7O1dBRUc7UUFDYSxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JDOztXQUVHO1FBQ2Esb0JBQWUsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFPeEQ7O1dBRUc7UUFDK0Isb0JBQWUsR0FBVyxNQUFNLENBQUM7UUFDbkU7OztXQUdHO1FBQ2EsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0M7O1dBRUc7UUFDYSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVDOzs7V0FHRztRQUNhLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEM7O1dBRUc7UUFDYSxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNDOztXQUVHO1FBQ2EsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQzs7V0FFRztRQUNhLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFXeEM7OztXQUdHO1FBQ2MsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFFNUMsZUFBVSxHQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsa0JBQWEsR0FBbUIsS0FBSyxDQUFDO1FBQ3RDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFckIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUV4QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV4QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQThEMUMsa0JBQWEsR0FBRyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVUsRUFBRTtZQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQztRQXpEQSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBRXJCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixXQUFXLElBQUksQ0FBQyxlQUFlLGNBQWMsRUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FDNUIsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3hCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixXQUFXLElBQUksQ0FBQyxlQUFlLFdBQVcsQ0FDM0MsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUN4QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUMzQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxjQUFjLENBQzlDLElBQUksR0FBRyxDQUNULENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQU9NLFFBQVEsQ0FBQyxHQUFRO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLGFBQWEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBVztRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFakUsUUFBUTthQUNMLGdCQUFnQixDQUFDLGVBQWUsQ0FBQzthQUNqQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUN0QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDdkUsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDekIsV0FBVyxJQUFJLENBQUMsZUFBZSxjQUFjLEVBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3JELE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWTtRQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLFdBQVcsSUFBSSxDQUFDLGVBQWUsY0FBYyxFQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixXQUFXLElBQUksQ0FBQyxlQUFlLGNBQWMsRUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixXQUFXLElBQUksQ0FBQyxlQUFlLFdBQVcsRUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FDekIsQ0FBQztJQUNKLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNyRCxDQUFDO0lBRU0sUUFBUSxDQUFDLEdBQU0sRUFBRSxRQUFnQixDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7OEdBN1JVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGtaQUpqQixDQUFDLGtCQUFrQixDQUFDLG1LQStEakIsMkJBQTJCLDJCQUFVLFdBQVcsNERBRWhELHlCQUF5QiwyQkFBVSxXQUFXLDhEQUU5QywyQkFBMkIsMkJBQVUsV0FBVywyT0MvRmhFLDB1SUEwSUE7OzJGRDFHYSxpQkFBaUI7a0JBUjdCLFNBQVM7K0JBQ0UsY0FBYyxhQUdiLENBQUMsa0JBQWtCLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTt1SEFTSCxVQUFVO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLVCxVQUFVO3NCQUF6QixLQUFLO2dCQUlVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBSVUsZUFBZTtzQkFBOUIsS0FBSztnQkFNVSxXQUFXO3NCQUExQixLQUFLO2dCQUk0QixlQUFlO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLVCxXQUFXO3NCQUExQixLQUFLO2dCQUlVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsTUFBTTtzQkFBckIsS0FBSztnQkFJVSxTQUFTO3NCQUF4QixLQUFLO2dCQUlVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBSVUsT0FBTztzQkFBdEIsS0FBSztnQkFFMEIsZUFBZTtzQkFBOUMsWUFBWTt1QkFBQyxTQUFTO2dCQUVoQixjQUFjO3NCQURwQixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHekQsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3ZELGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUVqQyxjQUFjO3NCQUE1QyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ1ksY0FBYztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXO2dCQUtSLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBlZmZlY3QsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhU29ydGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1ib2R5LXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRFeHBhbmRUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1leHBhbmQtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbHVtblNpemVzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWNvbHVtbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbRGF0YVNvcnRpbmdTZXJ2aWNlXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD5cclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XHJcbntcclxuICAvKipcclxuICAgKiBUYWJsZSBkYXRhIC0gYXJyYXkgb2Ygb2JqZWN0cy5cclxuICAgKiBbdG90YWxDb3VudF0gcmVxdWlyZWQgd2l0aCBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBkYXRhU291cmNlOiBUW10gPSBbXTtcclxuICAvKipcclxuICAgKiBUb3RhbCBkYXRhIGNvdW50LlxyXG4gICAqIFJlcXVpcmVkIHdpdGggc2VydmVyIHNpZGUgcGFnaW5hdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWwgcGFnZSBzaXplIGZvciBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIC8qKlxyXG4gICAqIFBhZ2Ugc2l6ZSBvcHRpb25zZm9yIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMTVdO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGNvbHVtbiBzaXplcywgd2hlcmUgZWFjaCBzaXplIGlzIGEgdmFsaWQgQ1NTIHVuaXQgc3RyaW5nLlxyXG4gICAqIFZhbGlkIHVuaXRzIGFyZTogYHB4YCwgYGZyYCwgYHJlbWAsIGAlYC5cclxuICAgKiBFeGFtcGxlOiBbJzIwMHB4JywgJzFmcicsICcxMCUnLCAnNXJlbSddXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtblNpemVzOiBDb2x1bW5TaXplcztcclxuICAvKipcclxuICAgKiBTdHJpbmcga2V5IHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzdG9yZSBwYWdlU2l6ZSBhbmQgY3VycmVudFBhZ2UgaW4gbG9jYWwgc3RvcmFnZSBmb3IgZWFjaCB0YWJsZS5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgbG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcgPSAnZGF0YSc7XHJcbiAgLyoqXHJcbiAgICogU2hvd3Mgc3Bpbm5lciBhbmQgb3ZlcmxheSB3aGVuIG5ldyBkYXRhIGlzIGJlaW5nIGxvYWRlZC5cclxuICAgKiBVc2FibGUgb25seSB3aXRoIHNlcnZlciBwYWdpbmF0aW9uIHdoZW4gdG90YWxDb3VudCBpcyBwcm92aWRlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGF0YUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBNYWtlcyByb3cgZXhwYW5kYWJsZSBvbiBjbGljay5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZXhwYW5kYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEVuYWJsZXMgZmlsdGVyIGZvciBkYXRhU291cmNlLlxyXG4gICAqIFVzYWJsZSBvbmx5IGlmIG5vdCBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBTaG93cyBwYWdpbmF0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgcm93IG9uIGhvdmVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBob3ZlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIERhcmtlciBiYWNrZ3JvdW5kIGZvciBlYWNoIG9kZCByb3cuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0cmlwZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdjYXB0aW9uJykgcHVibGljIGNhcHRpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEJvZHlUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoR3JpZEV4cGFuZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGV4cGFuZFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKCdmb290ZXInKSBwdWJsaWMgZm9vdGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ25vRGF0YVJvdycpIHB1YmxpYyBub0RhdGFUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSByb3cgaXMgY2xpY2tlZC5cclxuICAgKiBFbWl0cyBzZWxlY3RlZCByb3cgZGF0YS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIHJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgcHVibGljIHNvcnRlZERhdGE6IFRbXSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnO1xyXG4gIHB1YmxpYyBzb3J0S2V5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGZpbHRlcmVkRGF0YTogVFtdID0gW107XHJcbiAgcHVibGljIGZpbHRlclRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHBhZ2luYXRlZERhdGE6IFRbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZXhwYW5kZWRSb3dJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIHNlcnZlclBhZ2luYXRpb24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc29ydFNlcnZpY2U6IERhdGFTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGF0YSh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5maXJzdFBhZ2UkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuaW5pdFBhZ2luYXRpb24odGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snbG9jYWxTdG9yYWdlS2V5J10pIHtcclxuICAgICAgdGhpcy5zb3J0U2VydmljZS5nZXRMb2NhbFN0b3JhZ2VLZXkodGhpcy5sb2NhbFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgXHJcbiAgICAgICAgKSB8fCB0aGlzLnBhZ2VTaXplT3B0aW9uc1swXS50b1N0cmluZygpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcclxuICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYFxyXG4gICAgICAgICkgfHwgJzEnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmluaXRQYWdpbmF0aW9uKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbENvdW50J10pIHtcclxuICAgICAgdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uLnNldCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snZGF0YVNvdXJjZSddKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuc29ydGVkRGF0YSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3J0U2VydmljZS5nZXRDZWxsS2V5cyh0aGlzLmRhdGFTb3VyY2VbMF0gfHwge30pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3JpZ2luYWxPcmRlciA9IChhOiBhbnksIGI6IGFueSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhU291cmNlKTtcclxuICAgIHJldHVybiBrZXlzLmluZGV4T2YoYS5rZXkpIC0ga2V5cy5pbmRleE9mKGIua2V5KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc29ydERhdGEoa2V5OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydEtleSA9IGtleTtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGFba2V5XSA8IGJba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuICAgICAgfSBlbHNlIGlmIChhW2tleV0gPiBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZFNvcnRDbGFzcyhrZXkpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNvcnRDbGFzcyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zb3J0ZWQ9XCIke2tleX1cIl1gKTtcclxuXHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc29ydGVkXScpXHJcbiAgICAgIC5mb3JFYWNoKCh0aCkgPT4gdGguY2xhc3NMaXN0LnJlbW92ZSgnc29ydC1hc2MnLCAnc29ydC1kZXNjJykpO1xyXG5cclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdzb3J0LWFzYycgOiAnc29ydC1kZXNjJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclRleHQudHJpbSgpID09PSAnJykge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKCh2YWx1ZTogYW55KSA9PlxyXG4gICAgICAgICAgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VydmVyU2lkZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLnNlcnZlclBhZ2luYXRpb24oKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemU7XHJcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2luYXRlZERhdGEgPSB0aGlzLnNvcnRlZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAocGFnZSA8IDEgfHwgcGFnZSA+IHRoaXMudG90YWxQYWdlcygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2UocGFnZSwgdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b3RhbFBhZ2VzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtQ291bnQoKSAvIHRoaXMucGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhZ2VTdGFydCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlRW5kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWxJdGVtQ291bnQoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlUGFnZVNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlU2l6ZSh0aGlzLnBhZ2VTaXplKTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1wYWdlU2l6ZWAsXHJcbiAgICAgIHRoaXMucGFnZVNpemUudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b3RhbEl0ZW1Db3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxDb3VudCB8fCB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm93Q2xpY2socm93OiBULCBpbmRleDogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kYWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZFJvd0luZGV4ID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gaW5kZXg7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93U2VsZWN0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiZnVzaW9uLWRhdGFncmlkXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtd3JhcHBlclwiPlxyXG4gIEBpZiAoZmlsdGVyKSB7XHJcbiAgPGlucHV0XHJcbiAgICBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1maWx0ZXJcIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcclxuICAgIChpbnB1dCk9XCJmaWx0ZXJEYXRhKClcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZWFyY2gga2V5d29yZC4uLlwiXHJcbiAgLz5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3dcIiBncmlkQ29sdW1ucyBbY29sdW1uU2l6ZXNdPVwiY29sdW1uU2l6ZXNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZSB8fCBkZWZhdWx0SGVhZGVyVGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhU291cmNlLCBrZXlzOiBkYXRhU291cmNlWzBdIHwga2V5TWFwcGluZyB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWJvZHlcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImRhdGFMb2FkaW5nXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtc3Bpbm5lci1vdmVybGF5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ1LXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAZm9yIChyb3cgb2YgcGFnaW5hdGVkRGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZ1LWJvZHktcm93XCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGhvdmVyYWJsZSwgc3RyaXBlZCB9XCJcclxuICAgICAgICBbc3R5bGUuY3Vyc29yXT1cImV4cGFuZGFibGUgPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcIlxyXG4gICAgICAgIChjbGljayk9XCJyb3dDbGljayhyb3csICRpbmRleClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgYm9keVRlbXBsYXRlIHx8IGRlZmF1bHRCb2R5VGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGluZGV4OiAkaW5kZXgsIGtleXM6IHJvdyB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAvPlxyXG5cclxuICAgICAgICBAaWYgKGV4cGFuZGFibGUgJiYgZXhwYW5kZWRSb3dJbmRleCA9PT0gJGluZGV4KSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ1LWV4cGFuZGVkLXJvd1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgZXhwYW5kVGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4IH1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwYWdpbmF0ZWREYXRhIH1cIlxyXG4gIC8+XHJcblxyXG4gIEBpZihwYWdpbmF0ZWREYXRhLmxlbmd0aCA8PSAwICYmICFkYXRhTG9hZGluZyl7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRGF0YVRlbXBsYXRlXCIgLz5cclxuICB9XHJcbiAgPCEtLSBXUkFQIC0tPlxyXG4gIEBpZiAocGFnaW5hdG9yKSB7XHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0UGFnaW5hdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydERhdGEgfVwiXHJcbiAgLz5cclxuICB9XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyVGVtcGxhdGUgbGV0LWRhdGE+XHJcbiAgQGZvciAoaGVhZGVyIG9mIGRhdGFbMF0gfCBrZXl2YWx1ZTogb3JpZ2luYWxPcmRlcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGZ1LWhlYWQtcm93LWNlbGwgW2NlbGxEZWZdPVwiJGFueShoZWFkZXIua2V5KVwiIFtzb3J0S2V5XT1cIiRhbnkoaGVhZGVyLmtleSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJvZHlUZW1wbGF0ZSBsZXQtcm93cz5cclxuICBAZm9yIChyb3cgb2Ygcm93cyB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICA8ZnUtYm9keS1yb3ctY2VsbCBbY2VsbFZhbHVlXT1cIiRhbnkocm93LnZhbHVlKVwiIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnaW5hdG9yIGxldC1kYXRhPlxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtcGFnaW5hdG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLXBhZ2Utc2VsZWN0XCI+XHJcbiAgICAgIDxzcGFuPkl0ZW1zIHBlciBwYWdlOjwvc3Bhbj5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cImZ1LXBhZ2Utc2l6ZS1zZWxlY3RcIiAoY2hhbmdlKT1cImNoYW5nZVBhZ2VTaXplKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cInNpemVcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNpemUgPT09IHBhZ2VTaXplXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBzaXplIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLWNvbnRyb2xzXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAge3sgZ2V0UGFnZVN0YXJ0KCkgfX0gLSB7eyBnZXRQYWdlRW5kKCkgfX0gb2Yge3sgdG90YWxJdGVtQ291bnQoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSgxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgLSAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgKyAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImFycm93UmlnaHRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSh0b3RhbFBhZ2VzKCkpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixHQUVuQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFhM0YsTUFBTSxPQUFPLGlCQUFpQjtJQXlGNUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF4RjlDOzs7V0FHRztRQUMrQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBTXZEOztXQUVHO1FBQ2EsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQzs7V0FFRztRQUNhLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBT3hEOztXQUVHO1FBQytCLG9CQUFlLEdBQVcs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VyxFQUFFO2dCQUVqQyxjQUFjO3NCQUE1QyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ1ksY0FBYztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXO2dCQUtSLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsUUFBUTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGVmZmVjdCxcclxuICBzaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gIE9uU29ydEV2ZW50LFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL2RhdGEtc29ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JpZEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWhlYWRlci10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkQm9keVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWJvZHktdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgR3JpZEV4cGFuZFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLWV4cGFuZC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhZ2luYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sdW1uU2l6ZXMgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtY29sdW1ucy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnUtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFtEYXRhU29ydGluZ1NlcnZpY2VdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PlxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gIC8qKlxyXG4gICAqIFRhYmxlIGRhdGEgLSBhcnJheSBvZiBvYmplY3RzLlxyXG4gICAqIFt0b3RhbENvdW50XSByZXF1aXJlZCB3aXRoIHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGRhdGFTb3VyY2U6IFRbXSA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIFRvdGFsIGRhdGEgY291bnQuXHJcbiAgICogUmVxdWlyZWQgd2l0aCBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0b3RhbENvdW50OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbCBwYWdlIHNpemUgZm9yIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemU6IG51bWJlciA9IDU7XHJcbiAgLyoqXHJcbiAgICogUGFnZSBzaXplIG9wdGlvbnNmb3IgcGFnaW5hdG9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAxNV07XHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgY29sdW1uIHNpemVzLCB3aGVyZSBlYWNoIHNpemUgaXMgYSB2YWxpZCBDU1MgdW5pdCBzdHJpbmcuXHJcbiAgICogVmFsaWQgdW5pdHMgYXJlOiBgcHhgLCBgZnJgLCBgcmVtYCwgYCVgLlxyXG4gICAqIEV4YW1wbGU6IFsnMjAwcHgnLCAnMWZyJywgJzEwJScsICc1cmVtJ11cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY29sdW1uU2l6ZXM6IENvbHVtblNpemVzO1xyXG4gIC8qKlxyXG4gICAqIFN0cmluZyBrZXkgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHBhZ2VTaXplIGFuZCBjdXJyZW50UGFnZSBpbiBsb2NhbCBzdG9yYWdlIGZvciBlYWNoIHRhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyA9ICdkYXRhJztcclxuICAvKipcclxuICAgKiBTaG93cyBzcGlubmVyIGFuZCBvdmVybGF5IHdoZW4gbmV3IGRhdGEgaXMgYmVpbmcgbG9hZGVkLlxyXG4gICAqIFVzYWJsZSBvbmx5IHdpdGggc2VydmVyIHBhZ2luYXRpb24gd2hlbiB0b3RhbENvdW50IGlzIHByb3ZpZGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIE1ha2VzIHJvdyBleHBhbmRhYmxlIG9uIGNsaWNrLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBmaWx0ZXIgZm9yIGRhdGFTb3VyY2UuXHJcbiAgICogVXNhYmxlIG9ubHkgaWYgbm90IHNlcnZlciBzaWRlIHBhZ2luYXRpb24uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFNob3dzIHBhZ2luYXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyByb3cgb24gaG92ZXIuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhvdmVyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRGFya2VyIGJhY2tncm91bmQgZm9yIGVhY2ggb2RkIHJvdy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2NhcHRpb24nKSBwdWJsaWMgY2FwdGlvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkQm9keVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgZXhwYW5kVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicpIHB1YmxpYyBmb290ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnbm9EYXRhUm93JykgcHVibGljIG5vRGF0YVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvKipcclxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIHJvdyBpcyBjbGlja2VkLlxyXG4gICAqIEVtaXRzIHNlbGVjdGVkIHJvdyBkYXRhLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcm93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc29ydEVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPE9uU29ydEV2ZW50PigpO1xyXG5cclxuICBwdWJsaWMgc29ydGVkRGF0YTogVFtdID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIHNvcnRLZXk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWREYXRhOiBUW10gPSBbXTtcclxuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgcGFnaW5hdGVkRGF0YTogVFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZFJvd0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgc2VydmVyUGFnaW5hdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLnNvcnREYXRhKHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSkge1xyXG4gICAgICAgIHRoaXMuc29ydEVtaXQuZW1pdCh7XHJcbiAgICAgICAgICBzb3J0S2V5OiB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSxcclxuICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZmlyc3RQYWdlJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmluaXRQYWdpbmF0aW9uKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2xvY2FsU3RvcmFnZUtleSddKSB7XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlS2V5KHRoaXMubG9jYWxTdG9yYWdlS2V5KTtcclxuXHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcclxuICAgICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYFxyXG4gICAgICAgICkgfHwgdGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF0udG9TdHJpbmcoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gSlNPTi5wYXJzZShcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWBcclxuICAgICAgICApIHx8ICcxJ1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5pbml0UGFnaW5hdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxDb3VudCddKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyUGFnaW5hdGlvbi5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmVyUGFnaW5hdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgICAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbEtleXModGhpcy5kYXRhU291cmNlWzBdIHx8IHt9KTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0U2VydmljZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9yaWdpbmFsT3JkZXIgPSAoYTogYW55LCBiOiBhbnkpOiBudW1iZXIgPT4ge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVNvdXJjZSk7XHJcbiAgICByZXR1cm4ga2V5cy5pbmRleE9mKGEua2V5KSAtIGtleXMuaW5kZXhPZihiLmtleSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNvcnREYXRhKGtleTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRLZXkgPSBrZXk7XHJcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0U2VydmljZS5zb3J0RGlyZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChhW2tleV0gPCBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYVtrZXldID4gYltrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRTb3J0Q2xhc3Moa2V5KTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRTb3J0Q2xhc3Moa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc29ydGVkPVwiJHtrZXl9XCJdYCk7XHJcblxyXG4gICAgZG9jdW1lbnRcclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNvcnRlZF0nKVxyXG4gICAgICAuZm9yRWFjaCgodGgpID0+IHRoLmNsYXNzTGlzdC5yZW1vdmUoJ3NvcnQtYXNjJywgJ3NvcnQtZGVzYycpKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnc29ydC1hc2MnIDogJ3NvcnQtZGVzYycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlckRhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJUZXh0LnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSgodmFsdWU6IGFueSkgPT5cclxuICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb3J0ZWREYXRhID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhXTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNpZGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5kYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJQYWdpbmF0aW9uKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0ZWREYXRhID0gdGhpcy5zb3J0ZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKHBhZ2UsIHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbUNvdW50KCkgLyB0aGlzLnBhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlU3RhcnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZUVuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsSXRlbUNvdW50KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgLFxyXG4gICAgICB0aGlzLnBhZ2VTaXplLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG90YWxJdGVtQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsQ291bnQgfHwgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImZ1c2lvbi1kYXRhZ3JpZFwiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXdyYXBwZXJcIj5cclxuICBAaWYgKGZpbHRlcikge1xyXG4gIDxpbnB1dFxyXG4gICAgY2xhc3M9XCJmdS1kYXRhLWdyaWQtZmlsdGVyXCJcclxuICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgIFsobmdNb2RlbCldPVwiZmlsdGVyVGV4dFwiXHJcbiAgICAoaW5wdXQpPVwiZmlsdGVyRGF0YSgpXCJcclxuICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGtleXdvcmQuLi5cIlxyXG4gIC8+XHJcbiAgfVxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZ1LWhlYWQtcm93XCIgZ3JpZENvbHVtbnMgW2NvbHVtblNpemVzXT1cImNvbHVtblNpemVzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGUgfHwgZGVmYXVsdEhlYWRlclRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YVNvdXJjZSwga2V5czogZGF0YVNvdXJjZVswXSB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJkYXRhTG9hZGluZ1wiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXNwaW5uZXItb3ZlcmxheVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBob3ZlcmFibGUsIHN0cmlwZWQgfVwiXHJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJleHBhbmRhYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93LCAkaW5kZXgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4LCBrZXlzOiByb3cgfCBrZXlNYXBwaW5nIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgQGlmIChleHBhbmRhYmxlICYmIGV4cGFuZGVkUm93SW5kZXggPT09ICRpbmRleCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgIGV4cGFuZFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6ICRpbmRleCB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGVkRGF0YSB9XCJcclxuICAvPlxyXG5cclxuICBAaWYocGFnaW5hdGVkRGF0YS5sZW5ndGggPD0gMCAmJiAhZGF0YUxvYWRpbmcpe1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RhdGFUZW1wbGF0ZVwiIC8+XHJcbiAgfVxyXG4gIDwhLS0gV1JBUCAtLT5cclxuICBAaWYgKHBhZ2luYXRvcikge1xyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFBhZ2luYXRvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNvcnREYXRhIH1cIlxyXG4gIC8+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlclRlbXBsYXRlIGxldC1kYXRhPlxyXG4gIEBmb3IgKGhlYWRlciBvZiBkYXRhWzBdIHwga2V5dmFsdWU6IG9yaWdpbmFsT3JkZXI7IHRyYWNrICRpbmRleCkge1xyXG4gIDxmdS1oZWFkLXJvdy1jZWxsIFtjZWxsRGVmXT1cIiRhbnkoaGVhZGVyLmtleSlcIiBbc29ydEtleV09XCIkYW55KGhlYWRlci5rZXkpXCIgLz5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRCb2R5VGVtcGxhdGUgbGV0LXJvd3M+XHJcbiAgQGZvciAocm93IG9mIHJvd3MgfCBrZXl2YWx1ZTogb3JpZ2luYWxPcmRlcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGZ1LWJvZHktcm93LWNlbGwgW2NlbGxWYWx1ZV09XCIkYW55KHJvdy52YWx1ZSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2luYXRvciBsZXQtZGF0YT5cclxuICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLXBhZ2luYXRvclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1wYWdlLXNlbGVjdFwiPlxyXG4gICAgICA8c3Bhbj5JdGVtcyBwZXIgcGFnZTo8L3NwYW4+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmdS1wYWdlLXNpemUtc2VsZWN0XCIgKGNoYW5nZSk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHNpemUgb2YgcGFnZVNpemVPcHRpb25zXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJzaXplXCJcclxuICAgICAgICAgIFtzZWxlY3RlZF09XCJzaXplID09PSBwYWdlU2l6ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgc2l6ZSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LXBhZ2luYXRvci1jb250cm9sc1wiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIHt7IGdldFBhZ2VTdGFydCgpIH19IC0ge3sgZ2V0UGFnZUVuZCgpIH19IG9mIHt7IHRvdGFsSXRlbUNvdW50KCkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImRvdWJsZUFycm93TGVmdFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlIC0gMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImFycm93TGVmdFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgZnUtYnRuLXRleHRcclxuICAgICAgICBpY29uQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGZ1LWljb24gaWNvbk5hbWU9XCJhcnJvd1JpZ2h0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UodG90YWxQYWdlcygpKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImRvdWJsZUFycm93UmlnaHRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, effect, Injectable, input, model, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, Directive, EventEmitter, Output,
|
|
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';
|
|
3
3
|
import { BehaviorSubject, filter, take, Subject } from 'rxjs';
|
|
4
4
|
import * as i4 from '@angular/forms';
|
|
5
5
|
import { FormsModule } from '@angular/forms';
|
|
@@ -294,6 +294,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
294
294
|
}] } });
|
|
295
295
|
|
|
296
296
|
class HeadRowCellComponent {
|
|
297
|
+
// private storedValues = computed<OnSortEvent>(() =>
|
|
298
|
+
// this.sortService.storedValues()
|
|
299
|
+
// );
|
|
297
300
|
constructor(sortService, elementRef) {
|
|
298
301
|
this.sortService = sortService;
|
|
299
302
|
this.elementRef = elementRef;
|
|
@@ -301,49 +304,32 @@ class HeadRowCellComponent {
|
|
|
301
304
|
this.sortKey = input();
|
|
302
305
|
this.direction = computed(() => this.sortService.sortDirection());
|
|
303
306
|
this.sorting = computed(() => this.sortService.sortKey());
|
|
304
|
-
this.storedValues = computed(() => this.sortService.storedValues());
|
|
305
|
-
this.onSort = new EventEmitter();
|
|
306
|
-
effect(() => {
|
|
307
|
-
if (this.sortKey() && !this.onSort.observed) {
|
|
308
|
-
this.validateKey();
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
307
|
}
|
|
312
308
|
ngOnInit() {
|
|
313
309
|
const index = this.getIndex();
|
|
314
310
|
this.sortService.setCellDef(index, this.cellDef());
|
|
315
|
-
if (this.onSort.observed &&
|
|
316
|
-
this.storedValues().sortKey === this.sortKey()) {
|
|
317
|
-
this.onSort.emit(this.storedValues());
|
|
318
|
-
}
|
|
319
311
|
}
|
|
320
312
|
onSorting() {
|
|
321
|
-
this.onSort.emit({
|
|
322
|
-
sortKey: this.sortKey(),
|
|
323
|
-
sortDirection: this.direction() === 'asc' ? 'desc' : 'asc',
|
|
324
|
-
});
|
|
325
313
|
this.sortService.setSortKey(this.sortKey());
|
|
326
314
|
}
|
|
327
|
-
validateKey() {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
}
|
|
315
|
+
// private validateKey(): void {
|
|
316
|
+
// if (this.sortService.cellKeys().length > 0) {
|
|
317
|
+
// if (!this.sortService.cellKeys().includes(this.sortKey()! as string)) {
|
|
318
|
+
// console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
|
|
319
|
+
// }
|
|
320
|
+
// }
|
|
321
|
+
// }
|
|
334
322
|
getIndex() {
|
|
335
323
|
const parent = this.elementRef.nativeElement.parentElement;
|
|
336
324
|
return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
|
|
337
325
|
}
|
|
338
326
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, deps: [{ token: DataSortingService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
339
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: { classPropertyName: "cellDef", publicName: "cellDef", isSignal: true, isRequired: true, transformFunction: null }, sortKey: { classPropertyName: "sortKey", publicName: "sortKey", isSignal: true, isRequired: false, transformFunction: null } },
|
|
327
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: { classPropertyName: "cellDef", publicName: "cellDef", isSignal: true, isRequired: true, transformFunction: null }, sortKey: { classPropertyName: "sortKey", publicName: "sortKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n", styles: [".fu-head-row-cell{padding:16px;font-weight:700;display:flex}.fu-head-row-cell>span{margin-right:4px}.fu-head-row-cell>button{cursor:pointer;background-color:transparent;color:var(--fu-grid-text-color);font-weight:700;border:none}@media (max-width: 900px){.fu-head-row-cell{display:none}.fu-head-row-cell[data-sorted]{display:flex}}.fu-head-row-cell[data-sorted]:hover{cursor:pointer;background-color:var(--fu-grid-hover-color)}.fu-head-row-cell.sort-asc,.fu-head-row-cell.sort-desc{background-color:var(--fu-grid-fg-color)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: SortColumnDirective, selector: "[sortColumn]", inputs: ["sortColumn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
340
328
|
}
|
|
341
329
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, decorators: [{
|
|
342
330
|
type: Component,
|
|
343
331
|
args: [{ selector: 'fu-head-row-cell', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon iconName=\"sort\" /></button>\r\n } }\r\n</div>\r\n", styles: [".fu-head-row-cell{padding:16px;font-weight:700;display:flex}.fu-head-row-cell>span{margin-right:4px}.fu-head-row-cell>button{cursor:pointer;background-color:transparent;color:var(--fu-grid-text-color);font-weight:700;border:none}@media (max-width: 900px){.fu-head-row-cell{display:none}.fu-head-row-cell[data-sorted]{display:flex}}.fu-head-row-cell[data-sorted]:hover{cursor:pointer;background-color:var(--fu-grid-hover-color)}.fu-head-row-cell.sort-asc,.fu-head-row-cell.sort-desc{background-color:var(--fu-grid-fg-color)}\n"] }]
|
|
344
|
-
}], ctorParameters: () => [{ type: DataSortingService }, { type: i0.ElementRef }]
|
|
345
|
-
type: Output
|
|
346
|
-
}] } });
|
|
332
|
+
}], ctorParameters: () => [{ type: DataSortingService }, { type: i0.ElementRef }] });
|
|
347
333
|
|
|
348
334
|
class OutlinedButtonDirective {
|
|
349
335
|
constructor(el, renderer) {
|
|
@@ -685,6 +671,7 @@ class DataGridComponent {
|
|
|
685
671
|
* Emits selected row data.
|
|
686
672
|
*/
|
|
687
673
|
this.rowSelect = new EventEmitter();
|
|
674
|
+
this.sortEmit = new EventEmitter();
|
|
688
675
|
this.sortedData = [...this.dataSource];
|
|
689
676
|
this.sortDirection = 'asc';
|
|
690
677
|
this.sortKey = '';
|
|
@@ -702,6 +689,12 @@ class DataGridComponent {
|
|
|
702
689
|
if (!this.serverPagination()) {
|
|
703
690
|
this.sortData(this.sortService.sortKey());
|
|
704
691
|
}
|
|
692
|
+
else if (this.sortService.sortKey()) {
|
|
693
|
+
this.sortEmit.emit({
|
|
694
|
+
sortKey: this.sortService.sortKey(),
|
|
695
|
+
sortDirection: this.sortService.sortDirection(),
|
|
696
|
+
});
|
|
697
|
+
}
|
|
705
698
|
});
|
|
706
699
|
this.subscription = this.paginationService.firstPage$.subscribe(() => {
|
|
707
700
|
this.currentPage = 1;
|
|
@@ -827,7 +820,7 @@ class DataGridComponent {
|
|
|
827
820
|
}
|
|
828
821
|
}
|
|
829
822
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, deps: [{ token: DataSortingService }, { token: PaginationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
830
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: "dataSource", totalCount: "totalCount", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", columnSizes: "columnSizes", localStorageKey: "localStorageKey", dataLoading: "dataLoading", expandable: "expandable", filter: "filter", paginator: "paginator", hoverable: "hoverable", striped: "striped" }, outputs: { rowSelect: "rowSelect" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"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", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"], outputs: ["onSort"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
823
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: DataGridComponent, selector: "fu-data-grid", inputs: { dataSource: "dataSource", totalCount: "totalCount", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", columnSizes: "columnSizes", localStorageKey: "localStorageKey", dataLoading: "dataLoading", expandable: "expandable", filter: "filter", paginator: "paginator", hoverable: "hoverable", striped: "striped" }, outputs: { rowSelect: "rowSelect", sortEmit: "sortEmit" }, providers: [DataSortingService], queries: [{ propertyName: "captionTemplate", first: true, predicate: ["caption"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: GridHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "bodyTemplate", first: true, predicate: GridBodyTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "expandTemplate", first: true, predicate: GridExpandTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: ["noDataRow"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"fusion-datagrid\" class=\"fu-data-grid-wrapper\">\r\n @if (filter) {\r\n <input\r\n class=\"fu-data-grid-filter\"\r\n type=\"text\"\r\n [(ngModel)]=\"filterText\"\r\n (input)=\"filterData()\"\r\n placeholder=\"Search keyword...\"\r\n />\r\n }\r\n\r\n <div class=\"fu-data-grid-container\">\r\n <div class=\"fu-data-grid-header\">\r\n <div class=\"fu-head-row\" gridColumns [columnSizes]=\"columnSizes\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate || defaultHeaderTemplate;\r\n context: { $implicit: dataSource, keys: dataSource[0] | keyMapping }\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"fu-data-grid-body\">\r\n <div *ngIf=\"dataLoading\" class=\"fu-data-grid-spinner-overlay\">\r\n <div class=\"fu-spinner\"></div>\r\n </div>\r\n\r\n @for (row of paginatedData; track $index) {\r\n <div\r\n class=\"fu-body-row\"\r\n [ngClass]=\"{ hoverable, striped }\"\r\n [style.cursor]=\"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", styles: ["html{--fu-grid-fg-color: #232534;--fu-grid-bg-color: #1e1f2b;--fu-grid-hover-color: #12121240;--fu-grid-striped-color: #22232e;--fu-grid-border-color: #4b444d;--fu-grid-text-color: #ffffff;--fu-grid-cell-color: #bab9b9;--fu-filter-input-color: #ccc;--fu-grid-cell-edit-input: #fff;--fu-grid-shape: 4px}.fu-data-grid-wrapper{border-radius:var(--fu-grid-shape);box-shadow:0 2px 4px #00000080;background-color:var(--fu-grid-bg-color);color:var(--fu-grid-text-color);font-family:Roboto,sans-serif;font-size:14px}.fu-data-grid-container{width:100%}.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-header .fu-head-row{display:flex;justify-content:space-between;flex-wrap:wrap}.fu-data-grid-container .fu-data-grid-header .fu-head-row>*{flex:1 1 auto}}.fu-data-grid-container .fu-data-grid-body{position:relative}.fu-data-grid-container .fu-data-grid-body .fu-body-row{display:grid;grid-template-columns:var(--grid-columns);border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.striped:nth-child(2n){background-color:var(--fu-grid-striped-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row.hoverable:hover{background-color:var(--fu-grid-hover-color)}@media (max-width: 900px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:repeat(2,1fr)}.fu-data-grid-container .fu-data-grid-body .fu-body-row :nth-child(odd):last-child{grid-column:span 2}.fu-data-grid-container .fu-data-grid-body .fu-body-row [data-actions]{grid-column:1/-1;margin:8px 0}}@media (max-width: 600px){.fu-data-grid-container .fu-data-grid-body .fu-body-row{grid-template-columns:1fr;border-bottom:1px solid var(--fu-grid-border-color)}.fu-data-grid-container .fu-data-grid-body .fu-body-row>:nth-child(odd):last-child{grid-column:span 1}}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row{grid-column:1/-1;border-top:1px solid rgba(128,128,128,.1);padding:12px 16px}.fu-data-grid-container .fu-data-grid-body .fu-body-row .fu-expanded-row>div{cursor:default}.fu-data-grid-paginator{display:flex;justify-content:flex-end;padding:16px}.fu-data-grid-paginator .fu-page-size-select{background-color:var(--fu-grid-fg-color);color:var(--fu-grid-cell-edit-input);padding:4px;border:1px solid var(--fu-grid-border-color)}@media (max-width: 600px){.fu-data-grid-paginator{gap:12px;flex-direction:column;padding:12px 16px}}.fu-data-grid-paginator .fu-paginator-page-select{display:flex;justify-content:flex-end;align-items:center;margin-right:12px;font-size:14px}@media (max-width: 600px){.fu-data-grid-paginator .fu-paginator-page-select{margin-right:0}}.fu-data-grid-paginator .fu-paginator-page-select span{margin-right:8px}.fu-data-grid-paginator .fu-paginator-controls{display:flex;justify-content:flex-end;align-items:center;gap:8px}.fu-data-grid-filter{box-sizing:border-box;background-color:var(--fu-grid-fg-color);color:var(--fu-filter-input-color);width:calc(100% - 32px);padding:12px 8px;margin:16px;outline:none;border:none}.fu-data-grid-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#78787880;display:flex;justify-content:center;align-items:center;z-index:1000}.fu-data-grid-spinner-overlay .fu-spinner{border:10px solid var(--fu-grid-bg-color);border-top:10px solid #3498db;border-radius:50%;width:30px;height:30px;animation:spin 2s linear infinite;margin:5px auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fu-icon", inputs: ["iconName", "size", "strokeWidth", "color"] }, { kind: "directive", type: TextButtonDirective, selector: "[fu-btn-text]", inputs: ["variant", "iconButton", "rounded"] }, { kind: "directive", type: GridColumnsDirective, selector: "[gridColumns]", inputs: ["columnSizes"] }, { kind: "component", type: BodyRowCellComponent, selector: "fu-body-row-cell", inputs: ["cellValue", "editKey", "editCellValue"], outputs: ["editCellValueChange"] }, { kind: "component", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: ["cellDef", "sortKey"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: KeyMappingPipe, name: "keyMapping" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
831
824
|
}
|
|
832
825
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataGridComponent, decorators: [{
|
|
833
826
|
type: Component,
|
|
@@ -878,6 +871,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
878
871
|
args: ['noDataRow']
|
|
879
872
|
}], rowSelect: [{
|
|
880
873
|
type: Output
|
|
874
|
+
}], sortEmit: [{
|
|
875
|
+
type: Output
|
|
881
876
|
}] } });
|
|
882
877
|
|
|
883
878
|
class DataGridPaginator {
|
|
@@ -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 Output,\r\n ViewEncapsulation,\r\n computed,\r\n effect,\r\n input,\r\n} from '@angular/core';\r\nimport {\r\n DataSortingService,\r\n OnSortEvent,\r\n TSort,\r\n} 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 @Output() public onSort = new EventEmitter<OnSortEvent>();\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private elementRef: ElementRef\r\n ) {\r\n effect(() => {\r\n if (this.sortKey() && !this.onSort.observed) {\r\n this.validateKey();\r\n }\r\n });\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 if (\r\n this.onSort.observed &&\r\n this.storedValues().sortKey === this.sortKey()\r\n ) {\r\n this.onSort.emit(this.storedValues());\r\n }\r\n }\r\n\r\n public onSorting(): void {\r\n this.onSort.emit({\r\n sortKey: this.sortKey()!,\r\n sortDirection: this.direction() === 'asc' ? 'desc' : 'asc',\r\n });\r\n\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 class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon 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 { DataSortingService } 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\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 }\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.IconComponent","i3.SortColumnDirective","i1.EditRowService","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/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 class=\"fu-head-row-cell\" [sortColumn]=\"sortKey()\" (click)=\"onSorting()\">\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 iconName=\"sortAsc\" />\r\n } @if (direction() === 'desc') {\r\n <fu-icon iconName=\"sortDesc\" />\r\n }\r\n </button>\r\n } @else {\r\n <button><fu-icon 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 sortEmit = 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.sortEmit.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.IconComponent","i3.SortColumnDirective","i1.EditRowService","i3.OutlinedButtonDirective","i2.PaginationService","i5.IconComponent","i6.TextButtonDirective","i7.GridColumnsDirective","i8.BodyRowCellComponent","i9.HeadRowCellComponent","i10.KeyMappingPipe"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ElementRef,
|
|
2
|
-
import { DataSortingService,
|
|
1
|
+
import { ElementRef, OnInit } from '@angular/core';
|
|
2
|
+
import { DataSortingService, TSort } from '../../services/data-sorting.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class HeadRowCellComponent implements OnInit {
|
|
5
5
|
private sortService;
|
|
@@ -8,13 +8,10 @@ export declare class HeadRowCellComponent implements OnInit {
|
|
|
8
8
|
sortKey: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9
9
|
direction: import("@angular/core").Signal<TSort>;
|
|
10
10
|
sorting: import("@angular/core").Signal<string>;
|
|
11
|
-
private storedValues;
|
|
12
|
-
onSort: EventEmitter<OnSortEvent>;
|
|
13
11
|
constructor(sortService: DataSortingService, elementRef: ElementRef);
|
|
14
12
|
ngOnInit(): void;
|
|
15
13
|
onSorting(): void;
|
|
16
|
-
private validateKey;
|
|
17
14
|
private getIndex;
|
|
18
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeadRowCellComponent, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HeadRowCellComponent, "fu-head-row-cell", never, { "cellDef": { "alias": "cellDef"; "required": true; "isSignal": true; }; "sortKey": { "alias": "sortKey"; "required": false; "isSignal": true; }; }, {
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HeadRowCellComponent, "fu-head-row-cell", never, { "cellDef": { "alias": "cellDef"; "required": true; "isSignal": true; }; "sortKey": { "alias": "sortKey"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
|
|
20
17
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AfterContentInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
|
-
import { DataSortingService } from '../services/data-sorting.service';
|
|
2
|
+
import { DataSortingService, OnSortEvent } from '../services/data-sorting.service';
|
|
3
3
|
import { PaginationService } from '../services/paginator.service';
|
|
4
4
|
import { ColumnSizes } from '../directives/grid-columns.directive';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -71,6 +71,7 @@ export declare class DataGridComponent<T extends object> implements OnChanges, A
|
|
|
71
71
|
* Emits selected row data.
|
|
72
72
|
*/
|
|
73
73
|
rowSelect: EventEmitter<T>;
|
|
74
|
+
sortEmit: EventEmitter<OnSortEvent>;
|
|
74
75
|
sortedData: T[];
|
|
75
76
|
sortDirection: 'asc' | 'desc';
|
|
76
77
|
sortKey: string;
|
|
@@ -99,5 +100,5 @@ export declare class DataGridComponent<T extends object> implements OnChanges, A
|
|
|
99
100
|
rowClick(row: T, index?: number): void;
|
|
100
101
|
ngOnDestroy(): void;
|
|
101
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
|
|
102
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DataGridComponent<any>, "fu-data-grid", never, { "dataSource": { "alias": "dataSource"; "required": true; }; "totalCount": { "alias": "totalCount"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "columnSizes": { "alias": "columnSizes"; "required": false; }; "localStorageKey": { "alias": "localStorageKey"; "required": true; }; "dataLoading": { "alias": "dataLoading"; "required": false; }; "expandable": { "alias": "expandable"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "striped": { "alias": "striped"; "required": false; }; }, { "rowSelect": "rowSelect"; }, ["captionTemplate", "headerTemplate", "bodyTemplate", "expandTemplate", "footerTemplate", "noDataTemplate"], never, false, never>;
|
|
103
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DataGridComponent<any>, "fu-data-grid", never, { "dataSource": { "alias": "dataSource"; "required": true; }; "totalCount": { "alias": "totalCount"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "columnSizes": { "alias": "columnSizes"; "required": false; }; "localStorageKey": { "alias": "localStorageKey"; "required": true; }; "dataLoading": { "alias": "dataLoading"; "required": false; }; "expandable": { "alias": "expandable"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "striped": { "alias": "striped"; "required": false; }; }, { "rowSelect": "rowSelect"; "sortEmit": "sortEmit"; }, ["captionTemplate", "headerTemplate", "bodyTemplate", "expandTemplate", "footerTemplate", "noDataTemplate"], never, false, never>;
|
|
103
104
|
}
|