ng-fusion-ui 0.2.2 → 0.2.4

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/README.md CHANGED
@@ -4,7 +4,7 @@ Angular - mobile firednly and type safe data-grid system and more..!
4
4
 
5
5
  ## Documentation
6
6
 
7
- For full documentation, visit [Your Site](https://fusion-ui.up.railway.app).
7
+ For full documentation, visit [Fusion Ui](https://fusion-ui.up.railway.app).
8
8
 
9
9
  ## Installation
10
10
 
@@ -35,7 +35,7 @@ export class BodyRowCellComponent {
35
35
  }
36
36
  }
37
37
  validateKey() {
38
- if (!this.sortService.cellKeys.includes(this.editKey)) {
38
+ if (!this.sortService.cellKeys().includes(this.editKey)) {
39
39
  console.warn(`Invalid editKey '${this.editKey}' provided.`);
40
40
  }
41
41
  }
@@ -67,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
67
67
  }], editKey: [{
68
68
  type: Input
69
69
  }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9ib2R5LXJvdy1jZWxsL2JvZHktcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvYm9keS1yb3ctY2VsbC9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFLTCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTNUMsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUNVLFdBQStCLEVBQy9CLGNBQThCLEVBQzlCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVJ6QixrQkFBYSxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUN6QyxjQUFTLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBUXZDLENBQUM7SUFFRyxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRW5CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVO2lCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2xDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sYUFBYSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQTRCLENBQUM7UUFDMUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUE0QixDQUFDO1FBQzNFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDOzhHQW5FVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixnaUJDeEJqQywrYUFnQkE7OzJGRFFhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs2SUFHckIsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIG1vZGVsLFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFZGl0Um93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXQtcm93LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1ib2R5LXJvdy1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYm9keS1yb3ctY2VsbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2JvZHktcm93LWNlbGwuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb2R5Um93Q2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjZWxsVmFsdWU6IHN0cmluZyB8IG51bWJlcjtcclxuICBASW5wdXQoKSBwdWJsaWMgZWRpdEtleTogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY2VsbERlZjogc3RyaW5nO1xyXG4gIHB1YmxpYyBlZGl0Q2VsbFZhbHVlID0gbW9kZWw8c3RyaW5nIHwgbnVtYmVyPigpO1xyXG4gIHB1YmxpYyBpc0VkaXRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc29ydFNlcnZpY2U6IERhdGFTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgZWRpdFJvd1NlcnZpY2U6IEVkaXRSb3dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2VsbEluZGV4KCk7XHJcbiAgICB0aGlzLmNlbGxEZWYgPSB0aGlzLnNvcnRTZXJ2aWNlLmdldENlbGxEZWYoaW5kZXgpIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRSb3dJbmRleCgpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydlZGl0S2V5J10pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUtleSgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmVkaXRSb3dTZXJ2aWNlLmVkaXRTdGF0ZSRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLmVkaXRLZXkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsVmFsdWUuc2V0KHRoaXMuY2VsbFZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuaXNFZGl0aW5nLnNldChzdGF0ZSA9PT0gaW5kZXgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Q2VsbFZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcoKSkge1xyXG4gICAgICB0aGlzLmVkaXRSb3dTZXJ2aWNlLnVwZGF0ZUVkaXRWYWx1ZXModGhpcy5lZGl0S2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlS2V5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNvcnRTZXJ2aWNlLmNlbGxLZXlzLmluY2x1ZGVzKHRoaXMuZWRpdEtleSkpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGVkaXRLZXkgJyR7dGhpcy5lZGl0S2V5fScgcHJvdmlkZWQuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENlbGxJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0luZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIGlmICghcGFyZW50KSByZXR1cm4gLTE7XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbik7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZnUtYm9keS1yb3ctY2VsbFwiIFthdHRyLmRhdGEtZWRpdF09XCJpc0VkaXRpbmcoKVwiPlxyXG4gIDxzcGFuPnt7IGNlbGxEZWYgfX08L3NwYW4+XHJcblxyXG4gIEBpZiAoY2VsbFZhbHVlKSB7IEBpZihpc0VkaXRpbmcoKSl7XHJcbiAgPGlucHV0XHJcbiAgICBjbGFzcz1cImZ1LWVkaXQtaW5wdXRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJlZGl0Q2VsbFZhbHVlXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAvPlxyXG4gIH1AZWxzZSB7XHJcbiAgPHNwYW4+e3sgY2VsbFZhbHVlIH19PC9zcGFuPlxyXG4gIH0gfSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRlbnQgLz5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9ib2R5LXJvdy1jZWxsL2JvZHktcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvYm9keS1yb3ctY2VsbC9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFLTCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTNUMsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUNVLFdBQStCLEVBQy9CLGNBQThCLEVBQzlCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVJ6QixrQkFBYSxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUN6QyxjQUFTLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBUXZDLENBQUM7SUFFRyxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRW5CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVO2lCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2xDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsT0FBTyxhQUFhLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBNEIsQ0FBQztRQUMxRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQTRCLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7OEdBbkVVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLGdpQkN4QmpDLCthQWdCQTs7MkZEUWEsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzZJQUdyQixTQUFTO3NCQUF4QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgbW9kZWwsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhU29ydGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEVkaXRSb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRpdC1yb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWJvZHktcm93LWNlbGwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ib2R5LXJvdy1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYm9keS1yb3ctY2VsbC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvZHlSb3dDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcHVibGljIGNlbGxWYWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0S2V5OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBjZWxsRGVmOiBzdHJpbmc7XHJcbiAgcHVibGljIGVkaXRDZWxsVmFsdWUgPSBtb2RlbDxzdHJpbmcgfCBudW1iZXI+KCk7XHJcbiAgcHVibGljIGlzRWRpdGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogRGF0YVNvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlZGl0Um93U2VydmljZTogRWRpdFJvd1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDZWxsSW5kZXgoKTtcclxuICAgIHRoaXMuY2VsbERlZiA9IHRoaXMuc29ydFNlcnZpY2UuZ2V0Q2VsbERlZihpbmRleCkgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFJvd0luZGV4KCk7XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2VkaXRLZXknXSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlS2V5KCk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZWRpdFJvd1NlcnZpY2UuZWRpdFN0YXRlJFxyXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuZWRpdEtleSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcclxuICAgICAgICAgIHRoaXMuZWRpdENlbGxWYWx1ZS5zZXQodGhpcy5jZWxsVmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcuc2V0KHN0YXRlID09PSBpbmRleCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JbnB1dENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRDZWxsVmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIGlmICh0aGlzLmlzRWRpdGluZygpKSB7XHJcbiAgICAgIHRoaXMuZWRpdFJvd1NlcnZpY2UudXBkYXRlRWRpdFZhbHVlcyh0aGlzLmVkaXRLZXksIHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVLZXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc29ydFNlcnZpY2UuY2VsbEtleXMoKS5pbmNsdWRlcyh0aGlzLmVkaXRLZXkpKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBlZGl0S2V5ICcke3RoaXMuZWRpdEtleX0nIHByb3ZpZGVkLmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDZWxsSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShwYXJlbnQuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb3dJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIC0xO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShwYXJlbnQuY2hpbGRyZW4pO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZ1LWJvZHktcm93LWNlbGxcIiBbYXR0ci5kYXRhLWVkaXRdPVwiaXNFZGl0aW5nKClcIj5cclxuICA8c3Bhbj57eyBjZWxsRGVmIH19PC9zcGFuPlxyXG5cclxuICBAaWYgKGNlbGxWYWx1ZSkgeyBAaWYoaXNFZGl0aW5nKCkpe1xyXG4gIDxpbnB1dFxyXG4gICAgY2xhc3M9XCJmdS1lZGl0LWlucHV0XCJcclxuICAgIFsobmdNb2RlbCldPVwiZWRpdENlbGxWYWx1ZVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgLz5cclxuICB9QGVsc2Uge1xyXG4gIDxzcGFuPnt7IGNlbGxWYWx1ZSB9fTwvc3Bhbj5cclxuICB9IH0gQGVsc2Uge1xyXG4gIDxuZy1jb250ZW50IC8+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -12,6 +12,7 @@ export class HeadRowCellComponent {
12
12
  if (this.sortKey) {
13
13
  this.direction.set(this.sortService.sortDirection());
14
14
  this.sorting = this.sortService.sortKey();
15
+ this.validateKey();
15
16
  }
16
17
  }, { allowSignalWrites: true });
17
18
  }
@@ -19,17 +20,14 @@ export class HeadRowCellComponent {
19
20
  const index = this.getIndex();
20
21
  this.sortService.setCellDef(index, this.cellDef);
21
22
  }
22
- ngOnChanges(changes) {
23
- if (changes['sortKey']) {
24
- this.validateKey();
25
- }
26
- }
27
23
  onSort() {
28
24
  this.sortService.setSortKey(this.sortKey);
29
25
  }
30
26
  validateKey() {
31
- if (!this.sortService.cellKeys.includes(this.sortKey)) {
32
- console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
27
+ if (this.sortService.cellKeys().length > 0) {
28
+ if (!this.sortService.cellKeys().includes(this.sortKey)) {
29
+ console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
30
+ }
33
31
  }
34
32
  }
35
33
  getIndex() {
@@ -37,7 +35,7 @@ export class HeadRowCellComponent {
37
35
  return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
38
36
  }
39
37
  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 }); }
40
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: "cellDef", sortKey: "sortKey" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey\" (click)=\"onSort()\">\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 }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: "cellDef", sortKey: "sortKey" }, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey\" (click)=\"onSort()\">\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 }); }
41
39
  }
42
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, decorators: [{
43
41
  type: Component,
@@ -48,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
48
46
  }], sortKey: [{
49
47
  type: Input
50
48
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9oZWFkLXJvdy1jZWxsL2hlYWQtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvaGVhZC1yb3ctY2VsbC9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFJTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVdkIsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixZQUNVLFdBQStCLEVBQy9CLFVBQXNCO1FBRHRCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTHpCLGNBQVMsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFPcEMsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sYUFBYSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBQzNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUUsQ0FBQzs4R0E5Q1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsaUlDckJqQyxzZEFnQkE7OzJGREthLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTtnSEFHSCxPQUFPO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDVCxPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgZWZmZWN0LFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1oZWFkLXJvdy1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hlYWQtcm93LWNlbGwuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFkUm93Q2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY2VsbERlZjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3J0S2V5OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBkaXJlY3Rpb24gPSBzaWduYWw8c3RyaW5nPignJyk7XHJcbiAgcHVibGljIHNvcnRpbmc6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICAgIGVmZmVjdChcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNvcnRLZXkpIHtcclxuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldCh0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSk7XHJcbiAgICAgICAgICB0aGlzLnNvcnRpbmcgPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJbmRleCgpO1xyXG4gICAgdGhpcy5zb3J0U2VydmljZS5zZXRDZWxsRGVmKGluZGV4LCB0aGlzLmNlbGxEZWYpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzb3J0S2V5J10pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUtleSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU29ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydFNlcnZpY2Uuc2V0U29ydEtleSh0aGlzLnNvcnRLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUtleSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zb3J0U2VydmljZS5jZWxsS2V5cy5pbmNsdWRlcyh0aGlzLnNvcnRLZXkpKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBzb3J0S2V5ICcke3RoaXMuc29ydEtleX0nIHByb3ZpZGVkLmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmdS1oZWFkLXJvdy1jZWxsXCIgW3NvcnRDb2x1bW5dPVwic29ydEtleVwiIChjbGljayk9XCJvblNvcnQoKVwiPlxyXG4gIDxzcGFuPnt7IGNlbGxEZWYgfX08L3NwYW4+XHJcbiAgQGlmIChzb3J0S2V5KSB7XHJcbiAgPCEtLSB3cmFwIC0tPlxyXG4gIEBpZiAoc29ydEtleSA9PT0gc29ydGluZykge1xyXG4gIDxidXR0b24+XHJcbiAgICBAaWYoZGlyZWN0aW9uKCkgPT09ICdhc2MnKSB7XHJcbiAgICA8ZnUtaWNvbiBpY29uTmFtZT1cInNvcnRBc2NcIiAvPlxyXG4gICAgfSBAaWYgKGRpcmVjdGlvbigpID09PSAnZGVzYycpIHtcclxuICAgIDxmdS1pY29uIGljb25OYW1lPVwic29ydERlc2NcIiAvPlxyXG4gICAgfVxyXG4gIDwvYnV0dG9uPlxyXG4gIH0gQGVsc2Uge1xyXG4gIDxidXR0b24+PGZ1LWljb24gaWNvbk5hbWU9XCJzb3J0XCIgLz48L2J1dHRvbj5cclxuICB9IH1cclxuPC9kaXY+XHJcbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvY29tcG9uZW50cy9oZWFkLXJvdy1jZWxsL2hlYWQtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZnVzaW9uLXVpL3NyYy9saWIvZGF0YS1ncmlkL2NvbXBvbmVudHMvaGVhZC1yb3ctY2VsbC9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFFTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVdkIsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixZQUNVLFdBQStCLEVBQy9CLFVBQXNCO1FBRHRCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTHpCLGNBQVMsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFPcEMsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFTSxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxPQUFPLGFBQWEsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVE7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RSxDQUFDOzhHQTVDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw0R0NuQmpDLHNkQWdCQTs7MkZER2Esb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJO2dIQUdILE9BQU87c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNULE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBlZmZlY3QsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhU29ydGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXNvcnRpbmcuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z1LWhlYWQtcm93LWNlbGwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkLXJvdy1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaGVhZC1yb3ctY2VsbC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRSb3dDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY2VsbERlZjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3J0S2V5OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBkaXJlY3Rpb24gPSBzaWduYWw8c3RyaW5nPignJyk7XHJcbiAgcHVibGljIHNvcnRpbmc6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICAgIGVmZmVjdChcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNvcnRLZXkpIHtcclxuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldCh0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKSk7XHJcbiAgICAgICAgICB0aGlzLnNvcnRpbmcgPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlS2V5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoKTtcclxuICAgIHRoaXMuc29ydFNlcnZpY2Uuc2V0Q2VsbERlZihpbmRleCwgdGhpcy5jZWxsRGVmKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNvcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLnNldFNvcnRLZXkodGhpcy5zb3J0S2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVLZXkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0U2VydmljZS5jZWxsS2V5cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKCF0aGlzLnNvcnRTZXJ2aWNlLmNlbGxLZXlzKCkuaW5jbHVkZXModGhpcy5zb3J0S2V5KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBzb3J0S2V5ICcke3RoaXMuc29ydEtleX0nIHByb3ZpZGVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEluZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZ1LWhlYWQtcm93LWNlbGxcIiBbc29ydENvbHVtbl09XCJzb3J0S2V5XCIgKGNsaWNrKT1cIm9uU29ydCgpXCI+XHJcbiAgPHNwYW4+e3sgY2VsbERlZiB9fTwvc3Bhbj5cclxuICBAaWYgKHNvcnRLZXkpIHtcclxuICA8IS0tIHdyYXAgLS0+XHJcbiAgQGlmIChzb3J0S2V5ID09PSBzb3J0aW5nKSB7XHJcbiAgPGJ1dHRvbj5cclxuICAgIEBpZihkaXJlY3Rpb24oKSA9PT0gJ2FzYycpIHtcclxuICAgIDxmdS1pY29uIGljb25OYW1lPVwic29ydEFzY1wiIC8+XHJcbiAgICB9IEBpZiAoZGlyZWN0aW9uKCkgPT09ICdkZXNjJykge1xyXG4gICAgPGZ1LWljb24gaWNvbk5hbWU9XCJzb3J0RGVzY1wiIC8+XHJcbiAgICB9XHJcbiAgPC9idXR0b24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgPGJ1dHRvbj48ZnUtaWNvbiBpY29uTmFtZT1cInNvcnRcIiAvPjwvYnV0dG9uPlxyXG4gIH0gfVxyXG48L2Rpdj5cclxuIl19
@@ -40,11 +40,6 @@ export class DataGridComponent {
40
40
  this.currentPage = 1;
41
41
  this.paginatedData = [];
42
42
  this.expandedRowIndex = null;
43
- this.keys = {
44
- name: 'name',
45
- age: 'age',
46
- data: 'data',
47
- };
48
43
  this.originalOrder = (a, b) => {
49
44
  const keys = Object.keys(this.dataSource);
50
45
  return keys.indexOf(a.key) - keys.indexOf(b.key);
@@ -64,12 +59,12 @@ export class DataGridComponent {
64
59
  this.filteredData = [...this.dataSource];
65
60
  this.sortedData = [...this.filteredData];
66
61
  }
62
+ this.sortService.getCellKeys(this.dataSource[0] || {});
67
63
  this.updatePagination();
68
64
  }
69
65
  }
70
66
  ngAfterContentInit() {
71
67
  this.sortService.clear();
72
- this.sortService.getCellKeys(this.dataSource[0]);
73
68
  }
74
69
  sortData(key) {
75
70
  this.sortKey = key;
@@ -215,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
215
210
  }], rowSelect: [{
216
211
  type: Output
217
212
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQWlCbkUsTUFBTSxPQUFPLGlCQUFpQjtJQWdENUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEvQ1osZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUV2QyxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLG9CQUFlLEdBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBa0IsV0FBVyxDQUFDO1FBQ3hD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dEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGVmZmVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtaGVhZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRCb2R5VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtYm9keS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtZXhwYW5kLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnaW5hdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpbml0Q29sdW1ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1jb2x1bW5zLmRpcmVjdGl2ZSc7XHJcblxyXG50eXBlIFBhZ2VTaXplID0gNSB8IDEwIHwgMTU7XHJcblxyXG5leHBvcnQgdHlwZSBUUmVzcG9uc2l2ZSA9IHtcclxuICBicmVha3BvaW50OiBudW1iZXI7XHJcbiAgY29sdW1uczogbnVtYmVyO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW0RhdGFTb3J0aW5nU2VydmljZV0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXRcclxue1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBkYXRhU291cmNlOiBUW10gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBQYWdlU2l6ZVtdID0gWzUsIDEwLCAxNV07XHJcbiAgQElucHV0KCkgcHVibGljIHJlc3BvbnNpdmU6IFRSZXNwb25zaXZlW10gPSBpbml0Q29sdW1ucztcclxuICBASW5wdXQoKSBwdWJsaWMgbG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcgPSAnZGF0YSc7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYXp5TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaG92ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2NhcHRpb24nKSBwdWJsaWMgY2FwdGlvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkQm9keVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgZXhwYW5kVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicpIHB1YmxpYyBmb290ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnbm9jb250ZW50JykgcHVibGljIG5vQ29udGVudFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gIHB1YmxpYyBzb3J0ZWREYXRhOiBUW10gPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICBwdWJsaWMgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcclxuICBwdWJsaWMgc29ydEtleTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZERhdGE6IFRbXSA9IFtdO1xyXG4gIHB1YmxpYyBmaWx0ZXJUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwYWdpbmF0ZWREYXRhOiBUW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGV4cGFuZGVkUm93SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMga2V5cyA9IHtcclxuICAgIG5hbWU6ICduYW1lJyxcclxuICAgIGFnZTogJ2FnZScsXHJcbiAgICBkYXRhOiAnZGF0YScsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBEYXRhU29ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5zb3J0RGF0YSh0aGlzLnNvcnRTZXJ2aWNlLnNvcnRLZXkoKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gSlNPTi5wYXJzZShcclxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYCkgfHxcclxuICAgICAgICAnNSdcclxuICAgICk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gSlNPTi5wYXJzZShcclxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYFxyXG4gICAgICApIHx8ICcxJ1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2VTaXplKHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydkYXRhU291cmNlJ10pIHtcclxuICAgICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgICAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLmdldENlbGxLZXlzKHRoaXMuZGF0YVNvdXJjZVswXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3JpZ2luYWxPcmRlciA9IChhOiBhbnksIGI6IGFueSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhU291cmNlKTtcclxuICAgIHJldHVybiBrZXlzLmluZGV4T2YoYS5rZXkpIC0ga2V5cy5pbmRleE9mKGIua2V5KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc29ydERhdGEoa2V5OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydEtleSA9IGtleTtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGFba2V5XSA8IGJba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuICAgICAgfSBlbHNlIGlmIChhW2tleV0gPiBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZFNvcnRDbGFzcyhrZXkpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNvcnRDbGFzcyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zb3J0ZWQ9XCIke2tleX1cIl1gKTtcclxuXHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc29ydGVkXScpXHJcbiAgICAgIC5mb3JFYWNoKCh0aCkgPT4gdGguY2xhc3NMaXN0LnJlbW92ZSgnc29ydC1hc2MnLCAnc29ydC1kZXNjJykpO1xyXG5cclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdzb3J0LWFzYycgOiAnc29ydC1kZXNjJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclRleHQudHJpbSgpID09PSAnJykge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKCh2YWx1ZTogYW55KSA9PlxyXG4gICAgICAgICAgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VydmVyU2lkZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdGVkRGF0YSA9IHRoaXMuc29ydGVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy50b3RhbFBhZ2VzKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZShwYWdlKTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1Db3VudCgpIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZVN0YXJ0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhZ2VFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy50b3RhbEl0ZW1Db3VudCgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQYWdlU2l6ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2VTaXplKHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYCxcclxuICAgICAgdGhpcy5wYWdlU2l6ZS50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsSXRlbUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbENvdW50IHx8IHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dDbGljayhyb3c6IFQsIGluZGV4OiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRhYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkUm93SW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5yb3dTZWxlY3QuZW1pdChyb3cpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiZnVzaW9uLWRhdGFncmlkXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtd3JhcHBlclwiPlxyXG4gIEBpZiAoZmlsdGVyKSB7XHJcbiAgPGlucHV0XHJcbiAgICBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1maWx0ZXJcIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcclxuICAgIChpbnB1dCk9XCJmaWx0ZXJEYXRhKClcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZWFyY2gga2V5d29yZC4uLlwiXHJcbiAgLz5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3dcIiBncmlkQ29sdW1ucyBbcmVzcG9uc2l2ZV09XCJyZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGUgfHwgZGVmYXVsdEhlYWRlclRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YVNvdXJjZSwga2V5czogZGF0YVNvdXJjZVswXSB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJkYXRhTG9hZGluZ1wiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXNwaW5uZXItb3ZlcmxheVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBob3ZlcmFibGUsIHN0cmlwZWQgfVwiXHJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJleHBhbmRhYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93LCAkaW5kZXgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4LCBrZXlzOiByb3cgfCBrZXlNYXBwaW5nIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgQGlmIChleHBhbmRhYmxlICYmIGV4cGFuZGVkUm93SW5kZXggPT09ICRpbmRleCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgIGV4cGFuZFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6ICRpbmRleCB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGVkRGF0YSB9XCJcclxuICAvPlxyXG5cclxuICBAaWYocGFnaW5hdGVkRGF0YS5sZW5ndGggPD0gMCl7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vQ29udGVudFRlbXBsYXRlXCIgLz5cclxuICB9XHJcbiAgPCEtLSBXUkFQIC0tPlxyXG4gIEBpZiAocGFnaW5hdG9yKSB7XHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0UGFnaW5hdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydERhdGEgfVwiXHJcbiAgLz5cclxuICB9XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyVGVtcGxhdGUgbGV0LWRhdGE+XHJcbiAgQGZvciAoaGVhZGVyIG9mIGRhdGFbMF0gfCBrZXl2YWx1ZTogb3JpZ2luYWxPcmRlcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGZ1LWhlYWQtcm93LWNlbGwgW2NlbGxEZWZdPVwiJGFueShoZWFkZXIua2V5KVwiIFtzb3J0S2V5XT1cIiRhbnkoaGVhZGVyLmtleSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJvZHlUZW1wbGF0ZSBsZXQtcm93cz5cclxuICBAZm9yIChyb3cgb2Ygcm93cyB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICA8ZnUtYm9keS1yb3ctY2VsbCBbY2VsbFZhbHVlXT1cIiRhbnkocm93LnZhbHVlKVwiIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnaW5hdG9yIGxldC1kYXRhPlxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtcGFnaW5hdG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLXBhZ2Utc2VsZWN0XCI+XHJcbiAgICAgIDxzcGFuPkl0ZW1zIHBlciBwYWdlOjwvc3Bhbj5cclxuICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImNoYW5nZVBhZ2VTaXplKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cInNpemVcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNpemUgPT09IHBhZ2VTaXplXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBzaXplIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLWNvbnRyb2xzXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAge3sgZ2V0UGFnZVN0YXJ0KCkgfX0gLSB7eyBnZXRQYWdlRW5kKCkgfX0gb2Yge3sgdG90YWxJdGVtQ291bnQoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSgxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgLSAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgKyAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImFycm93UmlnaHRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSh0b3RhbFBhZ2VzKCkpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZ1c2lvbi11aS9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQWlCbkUsTUFBTSxPQUFPLGlCQUFpQjtJQTBDNUIsWUFDVSxXQUErQixFQUMvQixpQkFBb0M7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF6Q1osZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUV2QyxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLG9CQUFlLEdBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBa0IsV0FBVyxDQUFDO1FBQ3hD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M0RoRSw2cklBMElBOzsyRkR0R2EsaUJBQWlCO2tCQVI3QixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLGtCQUFrQixDQUFDLG1CQUNkLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7dUhBS0gsVUFBVTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ1QsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUVVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRTBCLGVBQWU7c0JBQTlDLFlBQVk7dUJBQUMsU0FBUztnQkFFaEIsY0FBYztzQkFEcEIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3pELFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUd2RCxjQUFjO3NCQURwQixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFFakMsY0FBYztzQkFBNUMsWUFBWTt1QkFBQyxRQUFRO2dCQUNZLGlCQUFpQjtzQkFBbEQsWUFBWTt1QkFBQyxXQUFXO2dCQUVSLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGVmZmVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtaGVhZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRCb2R5VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtYm9keS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2dyaWQtZXhwYW5kLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnaW5hdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpbml0Q29sdW1ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC1jb2x1bW5zLmRpcmVjdGl2ZSc7XHJcblxyXG50eXBlIFBhZ2VTaXplID0gNSB8IDEwIHwgMTU7XHJcblxyXG5leHBvcnQgdHlwZSBUUmVzcG9uc2l2ZSA9IHtcclxuICBicmVha3BvaW50OiBudW1iZXI7XHJcbiAgY29sdW1uczogbnVtYmVyO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmdS1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW0RhdGFTb3J0aW5nU2VydmljZV0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXRcclxue1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBkYXRhU291cmNlOiBUW10gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBQYWdlU2l6ZVtdID0gWzUsIDEwLCAxNV07XHJcbiAgQElucHV0KCkgcHVibGljIHJlc3BvbnNpdmU6IFRSZXNwb25zaXZlW10gPSBpbml0Q29sdW1ucztcclxuICBASW5wdXQoKSBwdWJsaWMgbG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcgPSAnZGF0YSc7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYXp5TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaG92ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2NhcHRpb24nKSBwdWJsaWMgY2FwdGlvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEdyaWRIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkQm9keVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChHcmlkRXhwYW5kVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwdWJsaWMgZXhwYW5kVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicpIHB1YmxpYyBmb290ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZCgnbm9jb250ZW50JykgcHVibGljIG5vQ29udGVudFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gIHB1YmxpYyBzb3J0ZWREYXRhOiBUW10gPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICBwdWJsaWMgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcclxuICBwdWJsaWMgc29ydEtleTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZERhdGE6IFRbXSA9IFtdO1xyXG4gIHB1YmxpYyBmaWx0ZXJUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBwYWdpbmF0ZWREYXRhOiBUW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGV4cGFuZGVkUm93SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc29ydFNlcnZpY2U6IERhdGFTb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNvcnREYXRhKHRoaXMuc29ydFNlcnZpY2Uuc29ydEtleSgpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFnZVNpemUgPSBKU09OLnBhcnNlKFxyXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tcGFnZVNpemVgKSB8fFxyXG4gICAgICAgICc1J1xyXG4gICAgKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBKU09OLnBhcnNlKFxyXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgYGZ1LWdyaWQtJHt0aGlzLmxvY2FsU3RvcmFnZUtleX0tY3VycmVudFBhZ2VgXHJcbiAgICAgICkgfHwgJzEnXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2UodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSkge1xyXG4gICAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuc29ydGVkRGF0YSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3J0U2VydmljZS5nZXRDZWxsS2V5cyh0aGlzLmRhdGFTb3VyY2VbMF0gfHwge30pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3JpZ2luYWxPcmRlciA9IChhOiBhbnksIGI6IGFueSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhU291cmNlKTtcclxuICAgIHJldHVybiBrZXlzLmluZGV4T2YoYS5rZXkpIC0ga2V5cy5pbmRleE9mKGIua2V5KTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc29ydERhdGEoa2V5OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydEtleSA9IGtleTtcclxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnREaXJlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGFba2V5XSA8IGJba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuICAgICAgfSBlbHNlIGlmIChhW2tleV0gPiBiW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZFNvcnRDbGFzcyhrZXkpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNvcnRDbGFzcyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydERpcmVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zb3J0ZWQ9XCIke2tleX1cIl1gKTtcclxuXHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc29ydGVkXScpXHJcbiAgICAgIC5mb3JFYWNoKCh0aCkgPT4gdGguY2xhc3NMaXN0LnJlbW92ZSgnc29ydC1hc2MnLCAnc29ydC1kZXNjJykpO1xyXG5cclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChzb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdzb3J0LWFzYycgOiAnc29ydC1kZXNjJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclRleHQudHJpbSgpID09PSAnJykge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtKS5zb21lKCh2YWx1ZTogYW55KSA9PlxyXG4gICAgICAgICAgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRlZERhdGEgPSBbLi4udGhpcy5maWx0ZXJlZERhdGFdO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcblxyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VydmVyU2lkZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRlZERhdGEgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdGVkRGF0YSA9IHRoaXMuc29ydGVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy50b3RhbFBhZ2VzKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LWN1cnJlbnRQYWdlYCxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZS50b1N0cmluZygpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZShwYWdlKTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1Db3VudCgpIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZVN0YXJ0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhZ2VFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy50b3RhbEl0ZW1Db3VudCgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQYWdlU2l6ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2VTaXplKHRoaXMucGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcblxyXG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICBgZnUtZ3JpZC0ke3RoaXMubG9jYWxTdG9yYWdlS2V5fS1jdXJyZW50UGFnZWAsXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIGBmdS1ncmlkLSR7dGhpcy5sb2NhbFN0b3JhZ2VLZXl9LXBhZ2VTaXplYCxcclxuICAgICAgdGhpcy5wYWdlU2l6ZS50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvdGFsSXRlbUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbENvdW50IHx8IHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dDbGljayhyb3c6IFQsIGluZGV4OiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRhYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkUm93SW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5yb3dTZWxlY3QuZW1pdChyb3cpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiZnVzaW9uLWRhdGFncmlkXCIgY2xhc3M9XCJmdS1kYXRhLWdyaWQtd3JhcHBlclwiPlxyXG4gIEBpZiAoZmlsdGVyKSB7XHJcbiAgPGlucHV0XHJcbiAgICBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1maWx0ZXJcIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcclxuICAgIChpbnB1dCk9XCJmaWx0ZXJEYXRhKClcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZWFyY2gga2V5d29yZC4uLlwiXHJcbiAgLz5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtZGF0YS1ncmlkLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnUtaGVhZC1yb3dcIiBncmlkQ29sdW1ucyBbcmVzcG9uc2l2ZV09XCJyZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGUgfHwgZGVmYXVsdEhlYWRlclRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YVNvdXJjZSwga2V5czogZGF0YVNvdXJjZVswXSB8IGtleU1hcHBpbmcgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ1LWRhdGEtZ3JpZC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJkYXRhTG9hZGluZ1wiIGNsYXNzPVwiZnUtZGF0YS1ncmlkLXNwaW5uZXItb3ZlcmxheVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmdS1ib2R5LXJvd1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBob3ZlcmFibGUsIHN0cmlwZWQgfVwiXHJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJleHBhbmRhYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93LCAkaW5kZXgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZSB8fCBkZWZhdWx0Qm9keVRlbXBsYXRlO1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogJGluZGV4LCBrZXlzOiByb3cgfCBrZXlNYXBwaW5nIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgQGlmIChleHBhbmRhYmxlICYmIGV4cGFuZGVkUm93SW5kZXggPT09ICRpbmRleCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdS1leHBhbmRlZC1yb3dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgIGV4cGFuZFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6ICRpbmRleCB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGVkRGF0YSB9XCJcclxuICAvPlxyXG5cclxuICBAaWYocGFnaW5hdGVkRGF0YS5sZW5ndGggPD0gMCl7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vQ29udGVudFRlbXBsYXRlXCIgLz5cclxuICB9XHJcbiAgPCEtLSBXUkFQIC0tPlxyXG4gIEBpZiAocGFnaW5hdG9yKSB7XHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0UGFnaW5hdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc29ydERhdGEgfVwiXHJcbiAgLz5cclxuICB9XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyVGVtcGxhdGUgbGV0LWRhdGE+XHJcbiAgQGZvciAoaGVhZGVyIG9mIGRhdGFbMF0gfCBrZXl2YWx1ZTogb3JpZ2luYWxPcmRlcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgPGZ1LWhlYWQtcm93LWNlbGwgW2NlbGxEZWZdPVwiJGFueShoZWFkZXIua2V5KVwiIFtzb3J0S2V5XT1cIiRhbnkoaGVhZGVyLmtleSlcIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJvZHlUZW1wbGF0ZSBsZXQtcm93cz5cclxuICBAZm9yIChyb3cgb2Ygcm93cyB8IGtleXZhbHVlOiBvcmlnaW5hbE9yZGVyOyB0cmFjayAkaW5kZXgpIHtcclxuICA8ZnUtYm9keS1yb3ctY2VsbCBbY2VsbFZhbHVlXT1cIiRhbnkocm93LnZhbHVlKVwiIC8+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnaW5hdG9yIGxldC1kYXRhPlxyXG4gIDxkaXYgY2xhc3M9XCJmdS1kYXRhLWdyaWQtcGFnaW5hdG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLXBhZ2Utc2VsZWN0XCI+XHJcbiAgICAgIDxzcGFuPkl0ZW1zIHBlciBwYWdlOjwvc3Bhbj5cclxuICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImNoYW5nZVBhZ2VTaXplKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cInNpemVcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNpemUgPT09IHBhZ2VTaXplXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBzaXplIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnUtcGFnaW5hdG9yLWNvbnRyb2xzXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAge3sgZ2V0UGFnZVN0YXJ0KCkgfX0gLSB7eyBnZXRQYWdlRW5kKCkgfX0gb2Yge3sgdG90YWxJdGVtQ291bnQoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSgxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgLSAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiYXJyb3dMZWZ0XCIgLz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBmdS1idG4tdGV4dFxyXG4gICAgICAgIGljb25CdXR0b25cclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgKyAxKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZnUtaWNvbiBpY29uTmFtZT1cImFycm93UmlnaHRcIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGZ1LWJ0bi10ZXh0XHJcbiAgICAgICAgaWNvbkJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJnb1RvUGFnZSh0b3RhbFBhZ2VzKCkpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxmdS1pY29uIGljb25OYW1lPVwiZG91YmxlQXJyb3dSaWdodFwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -5,7 +5,7 @@ export class DataSortingService {
5
5
  this.sortKeyValue = signal('');
6
6
  this.sortDirectionValue = signal('asc');
7
7
  this.cellDefs = [];
8
- this.cellKeys = [];
8
+ this.cellKeys = signal([]);
9
9
  this.sortKey = computed(() => this.sortKeyValue());
10
10
  this.sortDirection = computed(() => this.sortDirectionValue());
11
11
  }
@@ -23,7 +23,7 @@ export class DataSortingService {
23
23
  this.cellDefs = [];
24
24
  }
25
25
  getCellKeys(data) {
26
- this.cellKeys = Object.keys(data);
26
+ this.cellKeys.set(Object.keys(data));
27
27
  }
28
28
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataSortingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
29
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataSortingService }); }
@@ -31,4 +31,4 @@ export class DataSortingService {
31
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataSortingService, decorators: [{
32
32
  type: Injectable
33
33
  }] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0aW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUs3RCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVUsaUJBQVksR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEMsdUJBQWtCLEdBQUcsTUFBTSxDQUFRLEtBQUssQ0FBQyxDQUFDO1FBQzFDLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7S0FzQmxFO0lBcEJRLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBWTtRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0E1QlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG50eXBlIFRTb3J0ID0gJ2FzYycgfCAnZGVzYyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEYXRhU29ydGluZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgc29ydEtleVZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHByaXZhdGUgc29ydERpcmVjdGlvblZhbHVlID0gc2lnbmFsPFRTb3J0PignYXNjJyk7XHJcbiAgcHJpdmF0ZSBjZWxsRGVmczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGNlbGxLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBzb3J0S2V5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zb3J0S2V5VmFsdWUoKSk7XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNvcnREaXJlY3Rpb25WYWx1ZSgpKTtcclxuXHJcbiAgcHVibGljIHNldFNvcnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydEtleVZhbHVlLnNldChrZXkpO1xyXG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uVmFsdWUudXBkYXRlKCh2YWwpID0+ICh2YWwgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDZWxsRGVmKGluZGV4OiBudW1iZXIsIGNlbGxEZWY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jZWxsRGVmc1tpbmRleF0gPSBjZWxsRGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxEZWYoaW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5jZWxsRGVmc1tpbmRleF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNlbGxEZWZzID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2VsbEtleXMoZGF0YTogb2JqZWN0KTogdm9pZCB7XHJcbiAgICB0aGlzLmNlbGxLZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0aW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mdXNpb24tdWkvc3JjL2xpYi9kYXRhLWdyaWQvc2VydmljZXMvZGF0YS1zb3J0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUs3RCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVUsaUJBQVksR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEMsdUJBQWtCLEdBQUcsTUFBTSxDQUFRLEtBQUssQ0FBQyxDQUFDO1FBQzFDLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoQyxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7S0FzQmxFO0lBcEJRLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBWTtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs4R0E1QlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG50eXBlIFRTb3J0ID0gJ2FzYycgfCAnZGVzYyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEYXRhU29ydGluZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgc29ydEtleVZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHByaXZhdGUgc29ydERpcmVjdGlvblZhbHVlID0gc2lnbmFsPFRTb3J0PignYXNjJyk7XHJcbiAgcHJpdmF0ZSBjZWxsRGVmczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGNlbGxLZXlzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XHJcbiAgcHVibGljIHNvcnRLZXkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNvcnRLZXlWYWx1ZSgpKTtcclxuICBwdWJsaWMgc29ydERpcmVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc29ydERpcmVjdGlvblZhbHVlKCkpO1xyXG5cclxuICBwdWJsaWMgc2V0U29ydEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0S2V5VmFsdWUuc2V0KGtleSk7XHJcbiAgICB0aGlzLnNvcnREaXJlY3Rpb25WYWx1ZS51cGRhdGUoKHZhbCkgPT4gKHZhbCA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxEZWYoaW5kZXg6IG51bWJlciwgY2VsbERlZjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNlbGxEZWZzW2luZGV4XSA9IGNlbGxEZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2VsbERlZihpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmNlbGxEZWZzW2luZGV4XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuY2VsbERlZnMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDZWxsS2V5cyhkYXRhOiBvYmplY3QpOiB2b2lkIHtcclxuICAgIHRoaXMuY2VsbEtleXMuc2V0KE9iamVjdC5rZXlzKGRhdGEpKTtcclxuICB9XHJcbn1cclxuIl19
@@ -12,7 +12,7 @@ class DataSortingService {
12
12
  this.sortKeyValue = signal('');
13
13
  this.sortDirectionValue = signal('asc');
14
14
  this.cellDefs = [];
15
- this.cellKeys = [];
15
+ this.cellKeys = signal([]);
16
16
  this.sortKey = computed(() => this.sortKeyValue());
17
17
  this.sortDirection = computed(() => this.sortDirectionValue());
18
18
  }
@@ -30,7 +30,7 @@ class DataSortingService {
30
30
  this.cellDefs = [];
31
31
  }
32
32
  getCellKeys(data) {
33
- this.cellKeys = Object.keys(data);
33
+ this.cellKeys.set(Object.keys(data));
34
34
  }
35
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataSortingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
36
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DataSortingService }); }
@@ -100,7 +100,7 @@ class BodyRowCellComponent {
100
100
  }
101
101
  }
102
102
  validateKey() {
103
- if (!this.sortService.cellKeys.includes(this.editKey)) {
103
+ if (!this.sortService.cellKeys().includes(this.editKey)) {
104
104
  console.warn(`Invalid editKey '${this.editKey}' provided.`);
105
105
  }
106
106
  }
@@ -270,6 +270,7 @@ class HeadRowCellComponent {
270
270
  if (this.sortKey) {
271
271
  this.direction.set(this.sortService.sortDirection());
272
272
  this.sorting = this.sortService.sortKey();
273
+ this.validateKey();
273
274
  }
274
275
  }, { allowSignalWrites: true });
275
276
  }
@@ -277,17 +278,14 @@ class HeadRowCellComponent {
277
278
  const index = this.getIndex();
278
279
  this.sortService.setCellDef(index, this.cellDef);
279
280
  }
280
- ngOnChanges(changes) {
281
- if (changes['sortKey']) {
282
- this.validateKey();
283
- }
284
- }
285
281
  onSort() {
286
282
  this.sortService.setSortKey(this.sortKey);
287
283
  }
288
284
  validateKey() {
289
- if (!this.sortService.cellKeys.includes(this.sortKey)) {
290
- console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
285
+ if (this.sortService.cellKeys().length > 0) {
286
+ if (!this.sortService.cellKeys().includes(this.sortKey)) {
287
+ console.warn(`Invalid sortKey '${this.sortKey}' provided.`);
288
+ }
291
289
  }
292
290
  }
293
291
  getIndex() {
@@ -295,7 +293,7 @@ class HeadRowCellComponent {
295
293
  return Array.from(parent.children).indexOf(this.elementRef.nativeElement);
296
294
  }
297
295
  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 }); }
298
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: "cellDef", sortKey: "sortKey" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey\" (click)=\"onSort()\">\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 }); }
296
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: HeadRowCellComponent, selector: "fu-head-row-cell", inputs: { cellDef: "cellDef", sortKey: "sortKey" }, ngImport: i0, template: "<div class=\"fu-head-row-cell\" [sortColumn]=\"sortKey\" (click)=\"onSort()\">\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 }); }
299
297
  }
300
298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: HeadRowCellComponent, decorators: [{
301
299
  type: Component,
@@ -617,11 +615,6 @@ class DataGridComponent {
617
615
  this.currentPage = 1;
618
616
  this.paginatedData = [];
619
617
  this.expandedRowIndex = null;
620
- this.keys = {
621
- name: 'name',
622
- age: 'age',
623
- data: 'data',
624
- };
625
618
  this.originalOrder = (a, b) => {
626
619
  const keys = Object.keys(this.dataSource);
627
620
  return keys.indexOf(a.key) - keys.indexOf(b.key);
@@ -641,12 +634,12 @@ class DataGridComponent {
641
634
  this.filteredData = [...this.dataSource];
642
635
  this.sortedData = [...this.filteredData];
643
636
  }
637
+ this.sortService.getCellKeys(this.dataSource[0] || {});
644
638
  this.updatePagination();
645
639
  }
646
640
  }
647
641
  ngAfterContentInit() {
648
642
  this.sortService.clear();
649
- this.sortService.getCellKeys(this.dataSource[0]);
650
643
  }
651
644
  sortData(key) {
652
645
  this.sortKey = key;
@@ -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/directives/grid-columns.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/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, computed, signal } from '@angular/core';\r\n\r\ntype 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\r\n public cellKeys: string[] = [];\r\n public sortKey = computed(() => this.sortKeyValue());\r\n public sortDirection = computed(() => this.sortDirectionValue());\r\n\r\n public setSortKey(key: string): void {\r\n this.sortKeyValue.set(key);\r\n this.sortDirectionValue.update((val) => (val === 'asc' ? 'desc' : 'asc'));\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 = 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 editStateSubject = new BehaviorSubject<number | null>(null);\r\n public editState$: Observable<number | null> =\r\n this.editStateSubject.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.editStateSubject.next(rowIndex);\r\n }\r\n\r\n public stopEditing(): void {\r\n this.editStateSubject.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 Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\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 @Input() public cellValue: string | number;\r\n @Input() public editKey: string;\r\n\r\n public cellDef: string;\r\n public editCellValue = model<string | number>();\r\n public isEditing = 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 ngOnInit(): void {\r\n const index = this.getCellIndex();\r\n this.cellDef = this.sortService.getCellDef(index) || '';\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const index = this.getRowIndex();\r\n\r\n if (changes['editKey']) {\r\n this.validateKey();\r\n\r\n this.subscription = this.editRowService.editState$\r\n .pipe(filter(() => !!this.editKey))\r\n .subscribe((state) => {\r\n this.editCellValue.set(this.cellValue);\r\n this.isEditing.set(state === index);\r\n });\r\n }\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 (cellValue) { @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 } } @else {\r\n <ng-content />\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\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} from './icons';\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 }\r\n\r\n public registerIcon(name: string, 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 Input,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\nimport { DataSortingService } 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, OnChanges {\r\n @Input({ required: true }) public cellDef: string;\r\n @Input() public sortKey: string;\r\n\r\n public direction = signal<string>('');\r\n public sorting: string;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private elementRef: ElementRef\r\n ) {\r\n effect(\r\n () => {\r\n if (this.sortKey) {\r\n this.direction.set(this.sortService.sortDirection());\r\n this.sorting = this.sortService.sortKey();\r\n }\r\n },\r\n { allowSignalWrites: true }\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\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['sortKey']) {\r\n this.validateKey();\r\n }\r\n }\r\n\r\n public onSort(): void {\r\n this.sortService.setSortKey(this.sortKey);\r\n }\r\n\r\n private validateKey(): void {\r\n if (!this.sortService.cellKeys.includes(this.sortKey)) {\r\n console.warn(`Invalid sortKey '${this.sortKey}' provided.`);\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)=\"onSort()\">\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 Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation,\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> implements OnChanges, OnInit, OnDestroy {\r\n @Input() public editRow: T;\r\n @Input() public editIndex: number;\r\n\r\n public isEditing = signal<boolean>(false);\r\n public showDelete: 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 ngOnInit(): void {\r\n this.showDelete = this.delete.observers.length > 0;\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['editRow'] && changes['editIndex']) {\r\n this.subscription = this.editRowService.editState$.subscribe((state) => {\r\n this.isEditing.set(state === this.editIndex);\r\n });\r\n }\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 };\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 {\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 TResponsive = {\r\n breakpoint: number;\r\n columns: number;\r\n};\r\n\r\nexport const initColumns: TResponsive[] = [\r\n { breakpoint: 900, columns: 2 },\r\n { breakpoint: 600, columns: 1 },\r\n];\r\n\r\n@Directive({\r\n selector: '[gridColumns]',\r\n})\r\nexport class GridColumnsDirective implements AfterViewInit {\r\n public responsive = input<TResponsive[]>(initColumns);\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 updateGridColumns(): void {\r\n const childrenCount = this.el.nativeElement.children.length as number;\r\n const currentWidth = window.innerWidth;\r\n\r\n const dataGrid = this.el.nativeElement.closest(\r\n '#fusion-datagrid'\r\n ) as HTMLElement;\r\n\r\n const responsiveSetting = this.responsive()\r\n .sort((a, b) => a.breakpoint - b.breakpoint)\r\n .find((setting) => currentWidth < setting.breakpoint);\r\n\r\n const columns = responsiveSetting\r\n ? responsiveSetting.columns\r\n : childrenCount;\r\n\r\n if (dataGrid) {\r\n dataGrid.style.setProperty('--grid-columns', columns.toString());\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } 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 BehaviorSubject<PaginationState>({\r\n page: 1,\r\n pageSize: 5,\r\n });\r\n\r\n public paginator$: Observable<PaginationState> =\r\n this.paginationSubject.asObservable();\r\n\r\n public setPage(page: number): void {\r\n const currentState = this.paginationSubject.value;\r\n this.paginationSubject.next({ ...currentState, page });\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","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 { 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 Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n effect,\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 { initColumns } from '../directives/grid-columns.directive';\r\n\r\ntype PageSize = 5 | 10 | 15;\r\n\r\nexport type TResponsive = {\r\n breakpoint: number;\r\n columns: number;\r\n};\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\r\n{\r\n @Input({ required: true }) public dataSource: T[] = [];\r\n @Input() public totalCount: number;\r\n @Input() public pageSize: number = 5;\r\n @Input() public pageSizeOptions: PageSize[] = [5, 10, 15];\r\n @Input() public responsive: TResponsive[] = initColumns;\r\n @Input() public localStorageKey: string = 'data';\r\n\r\n @Input() public dataLoading: boolean = false;\r\n @Input() public lazyLoading: boolean = false;\r\n @Input() public expandable: boolean = false;\r\n @Input() public filter: boolean = false;\r\n @Input() public paginator: boolean = false;\r\n @Input() public hoverable: boolean = true;\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('nocontent') public noContentTemplate!: TemplateRef<any>;\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\r\n public keys = {\r\n name: 'name',\r\n age: 'age',\r\n data: 'data',\r\n };\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private paginationService: PaginationService\r\n ) {\r\n effect(() => {\r\n this.sortData(this.sortService.sortKey());\r\n });\r\n\r\n this.pageSize = JSON.parse(\r\n window.localStorage.getItem(`fu-grid-${this.localStorageKey}-pageSize`) ||\r\n '5'\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.setPageSize(this.pageSize);\r\n this.paginationService.setPage(this.currentPage);\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['dataSource']) {\r\n if (!this.lazyLoading) {\r\n this.filteredData = [...this.dataSource];\r\n this.sortedData = [...this.filteredData];\r\n }\r\n\r\n this.updatePagination();\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.sortService.clear();\r\n this.sortService.getCellKeys(this.dataSource[0]);\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.lazyLoading) {\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);\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","<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 [responsive]=\"responsive\">\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){\r\n <ng-container *ngTemplateOutlet=\"noContentTemplate\" />\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 (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}\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/directives/grid-columns.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/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, computed, signal } from '@angular/core';\r\n\r\ntype 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\r\n public cellKeys = signal<string[]>([]);\r\n public sortKey = computed(() => this.sortKeyValue());\r\n public sortDirection = computed(() => this.sortDirectionValue());\r\n\r\n public setSortKey(key: string): void {\r\n this.sortKeyValue.set(key);\r\n this.sortDirectionValue.update((val) => (val === 'asc' ? 'desc' : 'asc'));\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 editStateSubject = new BehaviorSubject<number | null>(null);\r\n public editState$: Observable<number | null> =\r\n this.editStateSubject.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.editStateSubject.next(rowIndex);\r\n }\r\n\r\n public stopEditing(): void {\r\n this.editStateSubject.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 Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n ViewEncapsulation,\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 @Input() public cellValue: string | number;\r\n @Input() public editKey: string;\r\n\r\n public cellDef: string;\r\n public editCellValue = model<string | number>();\r\n public isEditing = 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 ngOnInit(): void {\r\n const index = this.getCellIndex();\r\n this.cellDef = this.sortService.getCellDef(index) || '';\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const index = this.getRowIndex();\r\n\r\n if (changes['editKey']) {\r\n this.validateKey();\r\n\r\n this.subscription = this.editRowService.editState$\r\n .pipe(filter(() => !!this.editKey))\r\n .subscribe((state) => {\r\n this.editCellValue.set(this.cellValue);\r\n this.isEditing.set(state === index);\r\n });\r\n }\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 (cellValue) { @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 } } @else {\r\n <ng-content />\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\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} from './icons';\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 }\r\n\r\n public registerIcon(name: string, 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 Input,\r\n OnInit,\r\n ViewEncapsulation,\r\n effect,\r\n signal,\r\n} from '@angular/core';\r\nimport { DataSortingService } 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 @Input({ required: true }) public cellDef: string;\r\n @Input() public sortKey: string;\r\n\r\n public direction = signal<string>('');\r\n public sorting: string;\r\n\r\n constructor(\r\n private sortService: DataSortingService,\r\n private elementRef: ElementRef\r\n ) {\r\n effect(\r\n () => {\r\n if (this.sortKey) {\r\n this.direction.set(this.sortService.sortDirection());\r\n this.sorting = this.sortService.sortKey();\r\n\r\n this.validateKey();\r\n }\r\n },\r\n { allowSignalWrites: true }\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\r\n public onSort(): void {\r\n this.sortService.setSortKey(this.sortKey);\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)) {\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)=\"onSort()\">\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 Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation,\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> implements OnChanges, OnInit, OnDestroy {\r\n @Input() public editRow: T;\r\n @Input() public editIndex: number;\r\n\r\n public isEditing = signal<boolean>(false);\r\n public showDelete: 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 ngOnInit(): void {\r\n this.showDelete = this.delete.observers.length > 0;\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['editRow'] && changes['editIndex']) {\r\n this.subscription = this.editRowService.editState$.subscribe((state) => {\r\n this.isEditing.set(state === this.editIndex);\r\n });\r\n }\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 };\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 {\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 TResponsive = {\r\n breakpoint: number;\r\n columns: number;\r\n};\r\n\r\nexport const initColumns: TResponsive[] = [\r\n { breakpoint: 900, columns: 2 },\r\n { breakpoint: 600, columns: 1 },\r\n];\r\n\r\n@Directive({\r\n selector: '[gridColumns]',\r\n})\r\nexport class GridColumnsDirective implements AfterViewInit {\r\n public responsive = input<TResponsive[]>(initColumns);\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 updateGridColumns(): void {\r\n const childrenCount = this.el.nativeElement.children.length as number;\r\n const currentWidth = window.innerWidth;\r\n\r\n const dataGrid = this.el.nativeElement.closest(\r\n '#fusion-datagrid'\r\n ) as HTMLElement;\r\n\r\n const responsiveSetting = this.responsive()\r\n .sort((a, b) => a.breakpoint - b.breakpoint)\r\n .find((setting) => currentWidth < setting.breakpoint);\r\n\r\n const columns = responsiveSetting\r\n ? responsiveSetting.columns\r\n : childrenCount;\r\n\r\n if (dataGrid) {\r\n dataGrid.style.setProperty('--grid-columns', columns.toString());\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } 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 BehaviorSubject<PaginationState>({\r\n page: 1,\r\n pageSize: 5,\r\n });\r\n\r\n public paginator$: Observable<PaginationState> =\r\n this.paginationSubject.asObservable();\r\n\r\n public setPage(page: number): void {\r\n const currentState = this.paginationSubject.value;\r\n this.paginationSubject.next({ ...currentState, page });\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","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 { 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 Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n effect,\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 { initColumns } from '../directives/grid-columns.directive';\r\n\r\ntype PageSize = 5 | 10 | 15;\r\n\r\nexport type TResponsive = {\r\n breakpoint: number;\r\n columns: number;\r\n};\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\r\n{\r\n @Input({ required: true }) public dataSource: T[] = [];\r\n @Input() public totalCount: number;\r\n @Input() public pageSize: number = 5;\r\n @Input() public pageSizeOptions: PageSize[] = [5, 10, 15];\r\n @Input() public responsive: TResponsive[] = initColumns;\r\n @Input() public localStorageKey: string = 'data';\r\n\r\n @Input() public dataLoading: boolean = false;\r\n @Input() public lazyLoading: boolean = false;\r\n @Input() public expandable: boolean = false;\r\n @Input() public filter: boolean = false;\r\n @Input() public paginator: boolean = false;\r\n @Input() public hoverable: boolean = true;\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('nocontent') public noContentTemplate!: TemplateRef<any>;\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\r\n constructor(\r\n private sortService: DataSortingService,\r\n private paginationService: PaginationService\r\n ) {\r\n effect(() => {\r\n this.sortData(this.sortService.sortKey());\r\n });\r\n\r\n this.pageSize = JSON.parse(\r\n window.localStorage.getItem(`fu-grid-${this.localStorageKey}-pageSize`) ||\r\n '5'\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.setPageSize(this.pageSize);\r\n this.paginationService.setPage(this.currentPage);\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['dataSource']) {\r\n if (!this.lazyLoading) {\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.lazyLoading) {\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);\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","<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 [responsive]=\"responsive\">\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){\r\n <ng-container *ngTemplateOutlet=\"noContentTemplate\" />\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 (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}\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,7 +1,7 @@
1
- import { ElementRef, OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
+ import { ElementRef, OnInit } from '@angular/core';
2
2
  import { DataSortingService } from '../../services/data-sorting.service';
3
3
  import * as i0 from "@angular/core";
4
- export declare class HeadRowCellComponent implements OnInit, OnChanges {
4
+ export declare class HeadRowCellComponent implements OnInit {
5
5
  private sortService;
6
6
  private elementRef;
7
7
  cellDef: string;
@@ -10,7 +10,6 @@ export declare class HeadRowCellComponent implements OnInit, OnChanges {
10
10
  sorting: string;
11
11
  constructor(sortService: DataSortingService, elementRef: ElementRef);
12
12
  ngOnInit(): void;
13
- ngOnChanges(changes: SimpleChanges): void;
14
13
  onSort(): void;
15
14
  private validateKey;
16
15
  private getIndex;
@@ -38,11 +38,6 @@ export declare class DataGridComponent<T extends object> implements OnChanges, A
38
38
  currentPage: number;
39
39
  paginatedData: T[];
40
40
  expandedRowIndex: number | null;
41
- keys: {
42
- name: string;
43
- age: string;
44
- data: string;
45
- };
46
41
  constructor(sortService: DataSortingService, paginationService: PaginationService);
47
42
  ngOnChanges(changes: SimpleChanges): void;
48
43
  ngAfterContentInit(): void;
@@ -4,7 +4,7 @@ export declare class DataSortingService {
4
4
  private sortKeyValue;
5
5
  private sortDirectionValue;
6
6
  private cellDefs;
7
- cellKeys: string[];
7
+ cellKeys: import("@angular/core").WritableSignal<string[]>;
8
8
  sortKey: import("@angular/core").Signal<string>;
9
9
  sortDirection: import("@angular/core").Signal<TSort>;
10
10
  setSortKey(key: string): void;
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "ng-fusion-ui",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "New Angular component library!",
5
5
  "homepage": "https://fusion-ui.up.railway.app",
6
6
  "license": "MIT",
7
+ "keywords": [
8
+ "Angular"
9
+ ],
7
10
  "peerDependencies": {
8
11
  "@angular/common": ">=18.0.0",
9
12
  "@angular/core": ">=18.0.0",
@@ -10,6 +10,7 @@
10
10
  height: 2rem;
11
11
  min-width: 5rem;
12
12
  place-content: center;
13
+ font-family: "Roboto", sans-serif;
13
14
 
14
15
  &[rounded]{
15
16
  border-radius: 1rem;