@tilde-nlp/ngx-common 4.1.59 → 4.1.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/llm/models/llm-configuration.model.mjs +1 -1
- package/esm2022/lib/llm/services/llm-helper.service.mjs +4 -1
- package/esm2022/lib/multi-functional-table/multi-functional-table.component.mjs +8 -3
- package/fesm2022/tilde-nlp-ngx-common.mjs +10 -2
- package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
- package/lib/llm/models/llm-configuration.model.d.ts +1 -0
- package/lib/multi-functional-table/multi-functional-table.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLWNvbmZpZ3VyYXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbGxtL21vZGVscy9sbG0tY29uZmlndXJhdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBMTE1Db25maWd1cmF0aW9uIHtcclxuICBzZXJ2aWNlVXJsOiBzdHJpbmc7XHJcbiAgc3Vic2NyaXB0aW9uVXJsOiBzdHJpbmc7XHJcbiAgc3VwcG9ydEVtYWlsOiBzdHJpbmc7XHJcbiAgeEFwaUtleTogc3RyaW5nO1xyXG4gIGFwcElkOiBzdHJpbmc7XHJcbiAgbWF4Q2hhckxlbmd0aDogbnVtYmVyO1xyXG4gIHVzZUxvY2FsUXVvdGE6IGJvb2xlYW47XHJcbn0iXX0=
|
|
@@ -16,6 +16,9 @@ export class LLMHelperService {
|
|
|
16
16
|
* Returns remaining quota from API. If quota is missing, daily limit is being used from local storage.
|
|
17
17
|
*/
|
|
18
18
|
getRemainingQuota(decrease) {
|
|
19
|
+
if (this.llmService.llmConfiguration.useLocalQuota) {
|
|
20
|
+
return of(this.setQuotaLocalStorageUsage(decrease));
|
|
21
|
+
}
|
|
19
22
|
return this.quotaService.getQuotaUsage().pipe(map((response) => {
|
|
20
23
|
const quota = response.usage.find((item) => item.quotaType === QuotaType.LLM_REQUESTS);
|
|
21
24
|
if (!quota) {
|
|
@@ -96,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
96
99
|
providedIn: 'root'
|
|
97
100
|
}]
|
|
98
101
|
}], ctorParameters: function () { return [{ type: i1.LLMService }, { type: i2.QuotaService }]; } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9zZXJ2aWNlcy9sbG0taGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUYsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFNdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUE4QixVQUFzQixFQUFtQixZQUEwQjtRQUFuRSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQW1CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBSnhGLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUVmLDRCQUF1QixHQUFHLFdBQVcsQ0FBQztJQUU2QyxDQUFDO0lBRXJHOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsUUFBa0I7UUFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNsRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQzNDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FB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QVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRS9FLE9BQU8sVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNuQyxDQUFDOytHQXJHVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xyXG5pbXBvcnQgeyBMTE1TZXJ2aWNlIH0gZnJvbSAnLi9sbG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFF1b3RhU2VydmljZSwgUXVvdGFUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExMTUFjdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvbGxtLWFjdGlvbnMuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1IZWxwZXJTZXJ2aWNlIHtcclxuICByZWFkb25seSB0cmlhbFJlcXVlc3RDb3VudCA9IDE1O1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IExMTVF1b3RhTG9jYWxTdG9yYWdlS2V5ID0gJ0xMTV9RVU9UQSc7XHJcblxyXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IGxsbVNlcnZpY2U6IExMTVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcmVtYWluaW5nIHF1b3RhIGZyb20gQVBJLiBJZiBxdW90YSBpcyBtaXNzaW5nLCBkYWlseSBsaW1pdCBpcyBiZWluZyB1c2VkIGZyb20gbG9jYWwgc3RvcmFnZS5cclxuICAgKi9cclxuICBnZXRSZW1haW5pbmdRdW90YShkZWNyZWFzZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgaWYgKHRoaXMubGxtU2VydmljZS5sbG1Db25maWd1cmF0aW9uLnVzZUxvY2FsUXVvdGEpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuc2V0UXVvdGFMb2NhbFN0b3JhZ2VVc2FnZShkZWNyZWFzZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnF1b3RhU2VydmljZS5nZXRRdW90YVVzYWdlKCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1b3RhID0gcmVzcG9uc2UudXNhZ2UuZmluZCgoaXRlbSkgPT4gaXRlbS5xdW90YVR5cGUgPT09IFF1b3RhVHlwZS5MTE1fUkVRVUVTVFMpO1xyXG5cclxuICAgICAgICBpZiAoIXF1b3RhKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXRRdW90YUxvY2FsU3RvcmFnZVVzYWdlKGRlY3JlYXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHF1b3RhLnF1b3RhUmVtYWluaW5nO1xyXG4gICAgICB9KSwgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuc2V0UXVvdGFMb2NhbFN0b3JhZ2VVc2FnZShkZWNyZWFzZSkpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRFeGNlZWRlZExpbWl0TWVzc2FnZSh0b3RhbFN5bWJvbHM6IG51bWJlcik6IE5vdGlmaWNhdGlvbk1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuV0FSTklORyxcclxuICAgICAgYm9keTogJ0VSUk9SUy5NQVhfQ0hBUl9MRU5HVEgnLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHtcclxuICAgICAgICBtYXhDaGFyTGVuZ3RoOiB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5tYXhDaGFyTGVuZ3RoLFxyXG4gICAgICAgIHRvdGFsU3ltYm9sczogdG90YWxTeW1ib2xzXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhY2hlZFF1b3RhTWVzc2FnZSgpOiBOb3RpZmljYXRpb25NZXNzYWdlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLFxyXG4gICAgICBib2R5OiAnTExNLkVSUk9SUy5RVU9UQV9MSU1JVF9SRUFDSEVEJyxcclxuICAgICAgbG9jYWxpemF0aW9uUGFyYW1zOiB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uVXJsOiB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdWJzY3JpcHRpb25VcmwsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEVycm9yTWVzc2FnZSgpOiBOb3RpZmljYXRpb25NZXNzYWdlIHtcclxuICAgIHJldHVybiB7IFxyXG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5FUlJPUiwgXHJcbiAgICAgIGJvZHk6ICdMTE0uRVJST1JTLkRFRkFVTFQnLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHsgXHJcbiAgICAgICAgc3VwcG9ydEVtYWlsOiB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdXBwb3J0RW1haWwgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlcXVlc3RUaW1lb3V0TWVzc2FnZShhY3Rpb246IExMTUFjdGlvbnMpOiBOb3RpZmljYXRpb25NZXNzYWdlIHtcclxuICAgIHJldHVybiB7IFxyXG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5FUlJPUiwgXHJcbiAgICAgIGJvZHk6IGBMTE0uRVJST1JTLiR7YWN0aW9ufV9SRVFVRVNUX1RJTUVPVVRgLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHsgXHJcbiAgICAgICAgc3VwcG9ydEVtYWlsOiB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdXBwb3J0RW1haWwgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UXVvdGFMb2NhbFN0b3JhZ2VVc2FnZShkZWNyZWFzZT86IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlT2JqID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MTE1RdW90YUxvY2FsU3RvcmFnZUtleSk7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBsZXQgdHJpYWxRdW90YSA9IHtcclxuICAgICAgcmVtYWluaW5nUXVvdGE6IHRoaXMudHJpYWxSZXF1ZXN0Q291bnQsXHJcbiAgICAgIGxhc3RVc2VkQXQ6IGN1cnJlbnREYXRlXHJcbiAgICB9O1xyXG4gIFxyXG4gICAgaWYgKGxvY2FsU3RvcmFnZU9iaikge1xyXG4gICAgICBjb25zdCBwYXJzZWRPYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU9iaik7XHJcbiAgICAgIHRyaWFsUXVvdGEgPSBwYXJzZWRPYmo7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGxhc3RVc2VkRGF0ZSA9IG5ldyBEYXRlKHRyaWFsUXVvdGEubGFzdFVzZWRBdCk7XHJcbiAgXHJcbiAgICAgIC8vIENoZWNraW5nIGlmIHRoZSBsYXN0IHVzZWQgZGF0ZSBpcyBmcm9tIGEgZGlmZmVyZW50IGRheSB0aGFuIHRvZGF5XHJcbiAgICAgIGlmIChsYXN0VXNlZERhdGUuZ2V0RGF0ZSgpICE9PSBjdXJyZW50RGF0ZS5nZXREYXRlKCkgfHwgbGFzdFVzZWREYXRlLmdldE1vbnRoKCkgIT09IGN1cnJlbnREYXRlLmdldE1vbnRoKCkgfHwgbGFzdFVzZWREYXRlLmdldEZ1bGxZZWFyKCkgIT09IGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpIHtcclxuICAgICAgICAvLyBSZXNldGluZyBxdW90YSBmb3IgdGhlIG5ldyBkYXlcclxuICAgICAgICB0cmlhbFF1b3RhLnJlbWFpbmluZ1F1b3RhID0gdGhpcy50cmlhbFJlcXVlc3RDb3VudDsgIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGlmIChkZWNyZWFzZSkge1xyXG4gICAgICAgIHRyaWFsUXVvdGEucmVtYWluaW5nUXVvdGEgLT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgdHJpYWxRdW90YS5sYXN0VXNlZEF0ID0gY3VycmVudERhdGU7XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MTE1RdW90YUxvY2FsU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodHJpYWxRdW90YSkpO1xyXG5cclxuICAgIHJldHVybiB0cmlhbFF1b3RhLnJlbWFpbmluZ1F1b3RhO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -120,6 +120,9 @@ export class MultiFunctionalTableComponent {
|
|
|
120
120
|
highlightElement(element) {
|
|
121
121
|
return this.highlightedElements?.includes(element);
|
|
122
122
|
}
|
|
123
|
+
highlightErrorElement(element) {
|
|
124
|
+
return this.highlightedErrorElements?.includes(element);
|
|
125
|
+
}
|
|
123
126
|
//#region Methods for batch selection
|
|
124
127
|
isAllSelected() {
|
|
125
128
|
const numSelected = this.matSelection.selected.length;
|
|
@@ -256,15 +259,17 @@ export class MultiFunctionalTableComponent {
|
|
|
256
259
|
}
|
|
257
260
|
}
|
|
258
261
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiFunctionalTableComponent, deps: [{ token: i1.DOMService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
259
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiFunctionalTableComponent, selector: "tld-multi-functional-table", inputs: { config: "config", highlightedElements: "highlightedElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible", disablePreselectedItems: "disablePreselectedItems" }, outputs: { filterBarChange: "filterBarChange", exported: "exported", selectionChange: "selectionChange" }, queries: [{ propertyName: "noDataRow", first: true, predicate: MatNoDataRow, descendants: true }, { propertyName: "headerRowDefs", predicate: MatHeaderRowDef }, { propertyName: "rowDefs", predicate: MatRowDef, descendants: true }, { propertyName: "columnDefs", predicate: MatColumnDef }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i4.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.FilterBarComponent, selector: "tld-filter-bar", inputs: ["settings", "filterRowVisible"], outputs: ["filterBarChange"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i12.StatusDisplayComponent, selector: "lib-status-display", inputs: ["config"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
262
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiFunctionalTableComponent, selector: "tld-multi-functional-table", inputs: { config: "config", highlightedElements: "highlightedElements", highlightedErrorElements: "highlightedErrorElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible", disablePreselectedItems: "disablePreselectedItems" }, outputs: { filterBarChange: "filterBarChange", exported: "exported", selectionChange: "selectionChange" }, queries: [{ propertyName: "noDataRow", first: true, predicate: MatNoDataRow, descendants: true }, { propertyName: "headerRowDefs", predicate: MatHeaderRowDef }, { propertyName: "rowDefs", predicate: MatRowDef, descendants: true }, { propertyName: "columnDefs", predicate: MatColumnDef }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight-error]=\"highlightErrorElement(row)\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i4.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.FilterBarComponent, selector: "tld-filter-bar", inputs: ["settings", "filterRowVisible"], outputs: ["filterBarChange"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i12.StatusDisplayComponent, selector: "lib-status-display", inputs: ["config"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
260
263
|
}
|
|
261
264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiFunctionalTableComponent, decorators: [{
|
|
262
265
|
type: Component,
|
|
263
|
-
args: [{ selector: 'tld-multi-functional-table', template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
266
|
+
args: [{ selector: 'tld-multi-functional-table', template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight-error]=\"highlightErrorElement(row)\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
264
267
|
}], ctorParameters: function () { return [{ type: i1.DOMService }, { type: i2.TranslateService }]; }, propDecorators: { config: [{
|
|
265
268
|
type: Input
|
|
266
269
|
}], highlightedElements: [{
|
|
267
270
|
type: Input
|
|
271
|
+
}], highlightedErrorElements: [{
|
|
272
|
+
type: Input
|
|
268
273
|
}], selection: [{
|
|
269
274
|
type: Input
|
|
270
275
|
}], isRowCheckboxAlwaysVisible: [{
|
|
@@ -302,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
302
307
|
type: ViewChild,
|
|
303
308
|
args: [MatTable, { read: ElementRef }]
|
|
304
309
|
}] } });
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWXhDLE1BQU0sT0FBTyw2QkFBNkI7SUFLeEMsSUFBYSxTQUFTLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMs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Y0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBR2dCLGVBQWU7c0JBQXpELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJSb3dEZWYsIE1hdE5vRGF0YVJvdywgTWF0Um93RGVmLCBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLWNoYW5nZS1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgU2F2ZUZpbGVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3NhdmUtZmlsZS5oZWxwZXInO1xyXG5pbXBvcnQgeyBET01TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBESVNBQkxFX0VYUE9SVF9BVFRSSUJVVEVfTkFNRSB9IGZyb20gJy4vY29uc3RhbnRzL2Rpc2FibGUtZXhwb3J0LWF0dHJpYnV0ZS1uYW1lLmNvbnN0JztcclxuaW1wb3J0IHsgRXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuL21vZGVscy9jb2x1bW4tY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgTXVsdGlGdW5jdGlvbmFsVGFibGVDb25maWcgfSBmcm9tICcuL21vZGVscy9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0ZWQtY29sdW1uLWxvY2FsLXN0b3JhZ2UtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU3RhdHVzRGlzcGxheUNvbmZpZyB9IGZyb20gJy4uL3N0YXR1cy1kaXNwbGF5L21vZGVscy9zdGF0dXMtZGlzcGxheS1jb25maWcubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1tdWx0aS1mdW5jdGlvbmFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgbWF0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnITogTXVsdGlGdW5jdGlvbmFsVGFibGVDb25maWc8VD47XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0ZWRFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUW10pIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi4odmFsdWUgPz8gW10pKTtcclxuICB9XHJcblxyXG4gIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY2hlY2tib3hlcyBvbmx5IG9uIHJvdyBob3Zlci5cclxuICBASW5wdXQoKSBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJCYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBleHBvcnRlZDogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLm1hdFNlbGVjdGlvbi5jaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKCgpID0+IHsgcmV0dXJuIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkOyB9KSk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUHJvcGVydGllcyBmb3IgbWF0IHRhYmxlIHdyYXBwZXJcclxuICBAQ29udGVudENoaWxkcmVuKE1hdEhlYWRlclJvd0RlZikgaGVhZGVyUm93RGVmcyE6IFF1ZXJ5TGlzdDxNYXRIZWFkZXJSb3dEZWY+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPFQ+PjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdENvbHVtbkRlZikgY29sdW1uRGVmcyE6IFF1ZXJ5TGlzdDxNYXRDb2x1bW5EZWY+O1xyXG4gIEBDb250ZW50Q2hpbGQoTWF0Tm9EYXRhUm93KSBub0RhdGFSb3chOiBNYXROb0RhdGFSb3c7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlITogTWF0VGFibGU8VD47XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHByZXNlbGVjdGVkSXRlbXMhOiBUW107XHJcblxyXG4gIGdldCBpZ25vcmVBdHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfVxyXG4gIGRpc3BsYXlDb2x1bW5zITogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtblNlbGVjdEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgZXhwb3J0QWN0aXZlITogYm9vbGVhbjtcclxuICBub0RhdGFSb3dBY3RpdmUhOiBib29sZWFuO1xyXG5cclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcblxyXG4gIC8vIHByb3BlcnRpZXMgZm9yIG92ZXJmbG93IHNjcm9sbGluZyB3aXRoIG1vdXNlIGNsaWNrXHJcbiAgdGFibGVPdmVyZmxvdyE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzY3JvbGxNb3ZlbWVudCE6IG51bWJlciB8IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRZID0gMDtcclxuICBwcml2YXRlIHNjcm9sbExlZnQgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsVG9wID0gMDtcclxuXHJcbiAgZ2V0IGZpbHRlckFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbHRlcj8uZW5hYmxlZDsgfVxyXG4gIGdldCBzaG93RmlsdGVyVG9nZ2xlKCkgeyByZXR1cm4gIXRoaXMuY29uZmlnLmZpbHRlcj8uaGlkZUZpbHRlclRvZ2dsZTsgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZVZhbHVlITogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWc7XHJcbiAgcmVhZG9ubHkgYmF0Y2hDb2x1bW5OYW1lID0gXCJiYXRjaFwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERPTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAvLyNyZWdpb24gQW5ndWxhciBsaWZlY3ljbGUgaG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZEZyb21Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuc2V0RmlsdGVyVmlzaWJpbGl0eSgpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5TZWxlY3RQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldEV4cG9ydFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuc2V0Tm9EYXRhUm93UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5wcmVzZWxlY3RlZEl0ZW1zID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaChjb2x1bW5EZWYgPT4gdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uRGVmKSk7XHJcbiAgICB0aGlzLnJvd0RlZnMuZm9yRWFjaChyb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRSb3dEZWYocm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLnRhYmxlLnNldE5vRGF0YVJvdyh0aGlzLm5vRGF0YVJvdyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICB1cGRhdGVEaXNwbGF5Q29sdW1ucyhpbml0aWFsID0gZmFsc2UpIHtcclxuICAgIHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQgPSB0aGlzLmNvbmZpZy5iYXRjaENvbmZpZz8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5TZWxlY3Q/LmNvbHVtbnMgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gW107XHJcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5ub3RDb25maWd1cmFibGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmJhdGNoQ29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlVmFsdWUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgIGNvbHVtbi5zZWxlY3RlZCA9IGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnM/Lltjb2x1bW4ubmFtZV0gPz8gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyFbY29sdW1uLm5hbWVdID0gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4uc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKCFpbml0aWFsKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlckJhcigpIHtcclxuICAgIGNvbnN0IGxvY2Fsc3RvcmFnZU9iamVjdCA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIpIHtcclxuICAgICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlciA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9ICF0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyLnZpc2libGUgPSB0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbHN0b3JhZ2VPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyc0NoYW5nZWQoZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQoZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLmNvbm5lY3QoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoZGF0YSk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cz8uaW5jbHVkZXMoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTWV0aG9kcyBmb3IgYmF0Y2ggc2VsZWN0aW9uXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAvLyBkZXNlbGVjdCBvbmx5IHRob3NlIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFscmVhZHkgcHJlc2VsZWN0ZWRcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5kZXNlbGVjdChcclxuICAgICAgICAgIC4uLnRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcihlbG0gPT4gIXRoaXMucHJlc2VsZWN0ZWRJdGVtcy5tYXAoZWxtID0+IGVsbSkuaW5jbHVkZXMoZWxtKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmNvbmZpZy5kYXRhU291cmNlLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50OiBUKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVggLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgIHRoaXMuc3RhcnRZID0gZXZlbnQucGFnZVkgLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XHJcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcblxyXG4gICAgLy8gY2FuY2VsaW5nIGFueSBwcmV2aW91cyBhbmltYXRpb24gZnJhbWVcclxuICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsTW92ZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5jaGVja1RhYmxlT3ZlcmZsb3coKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3Igc21vb3RoZXIgdXBkYXRlc1xyXG4gICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50YWJsZU92ZXJmbG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtb3ZlbWVudFxyXG4gICAgICAgIGNvbnN0IHdhbGtYID0gKHggLSB0aGlzLnN0YXJ0WCkgKiAyO1xyXG4gICAgICAgIGNvbnN0IHdhbGtZID0gKHkgLSB0aGlzLnN0YXJ0WSkgKiAyO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGluZyBzY3JvbGwgcG9zaXRpb25zXHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrWDtcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3AgLSB3YWxrWTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvbk1vdXNlVXAoKSB7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHBlbmRpbmcgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5zY3JvbGxNb3ZlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbE1vdmVtZW50KTtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGNoZWNrVGFibGVPdmVyZmxvdygpOiB2b2lkIHtcclxuICAgIC8vIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgd2Ugc2hvdWxkIGNoZWNrIG9uY2UgZm9yIHRhYmxlIG92ZXJmbG93XHJcbiAgICAvLyB3aGVuIHRoZXJlIHdhc250IG92ZXJmbG93LCBidXQgd2lkdGggb2YgdGhlIHRhYmxlIGJlY2FtZSBiaWdnZXIsIHRoZW4gd2UgYXJlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGVcclxuICAgIC8vIHNhbWUgZm9yIHdoZW4gdGhlcmUgd2FzIG92ZXJmbG93LCBidXQgc2l6ZSBvZiB0aGUgdGFibGUgaXMgc2FtZSBhcyBjb250YWluZXIsIHNvIG92ZXJmbG93IGlzIGdvbmUgYW5kIHdlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGUgYWdhaW5cclxuICAgIGlmICgodGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAmJiAgdGhpcy50YWJsZU92ZXJmbG93ID09PSB1bmRlZmluZWQpIHx8XHJcbiAgICAgICghdGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8ICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB8fFxyXG4gICAgICAodGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA9PT0gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxyXG5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICA8ZGl2IGZ4RmxleCBmeExheW91dEdhcD1cIjFyZW1cIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5NZW51XCIgKm5nSWY9XCJjb2x1bW5TZWxlY3RBY3RpdmVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGNvbHVtbi1zZWxlY3QtaWNvblwiPm1lbnU8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3snTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWx0ZXJfbGlzdDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eydNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkZJTFRFUl9UT0dHTEUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1kYXRhXCIgbWF0LXN0cm9rZWQtYnV0dG9uICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRVhQT1JUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthZGRpdGlvbmFsQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtbWVudSAjY29sdW1uTWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LXdyYXBwZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWd1cmFibGVDb2x1bW5zXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBbKG5nTW9kZWwpXT1cImNvbHVtbi5zZWxlY3RlZFwiIChjaGFuZ2UpPVwidXBkYXRlRGlzcGxheUNvbHVtbnMoKVwiPlxyXG4gICAgICAgICAge3tjb2x1bW4uZGlzcGxheU5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LW1lbnU+XHJcblxyXG4gIDx0bGQtZmlsdGVyLWJhciAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCIgW2ZpbHRlclJvd1Zpc2libGVdPVwiIWZpbHRlckJhclZpc2libGVcIiBbc2V0dGluZ3NdPVwiY29uZmlnLmZpbHRlci5zZXR0aW5nc1wiIFxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPGRpdiBcclxuICAgICN0YWJsZUNvbnRhaW5lclxyXG4gICAgW2NsYXNzLnRhYmxlLXN0aWNreS1oZWFkZXJdPVwiY29uZmlnPy5zdGlja3lIZWFkZXJcIlxyXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdhYmxlXT1cInRhYmxlT3ZlcmZsb3dcIlxyXG4gICAgY2xhc3M9XCJ0YWJsZS1vdmVyZmxvd1wiXHJcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxyXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKClcIlxyXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKClcIlxyXG4gICAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgICA8dGFibGUgI3RhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJjb25maWcuZGF0YVNvdXJjZVwiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJiYXRjaENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93U2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInJvdy1zZWxlY3RcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgZGlzYWJsZS1leHBvcnQ+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1QnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSB8fCBob3ZlcmVkUm93ID09PSBlbGVtZW50IHx8IG1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCIgXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZCB8fCAocHJlc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhlbGVtZW50KSAmJiBkaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcylcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQpXCIgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXlDb2x1bW5zOyBzdGlja3k6IGNvbmZpZz8uc3RpY2t5SGVhZGVyID8/IGZhbHNlXCI+PC90cj5cclxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXlDb2x1bW5zXCIgKG1vdXNlb3Zlcik9XCJob3ZlcmVkUm93ID0gcm93XCIgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZFJvdyA9IG51bGxcIiBbY2xhc3MuaGlnaGxpZ2h0XT1cImhpZ2hsaWdodEVsZW1lbnQocm93KVwiPjwvdHI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhUm93QWN0aXZlXCI+XHJcbiAgICAgICAgPHRyICptYXROb0RhdGFSb3c+XHJcbiAgICAgICAgICA8IS0tIGFkZCByYW5kb20gbnVtYmVyIHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBmdWxsIHdpZHRoIC0tPlxyXG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI5OVwiPlxyXG4gICAgICAgICAgICA8bGliLXN0YXR1cy1kaXNwbGF5IFtjb25maWddPVwibm9EYXRhUm93Q29uZmlnXCI+PC9saWItc3RhdHVzLWRpc3BsYXk+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWXhDLE1BQU0sT0FBTyw2QkFBNkI7SUFNeEMsSUFBYSxTQUFTLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMs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dUJBQUMsWUFBWTtnQkFFYSxLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2pCLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFFVyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHZ0IsZUFBZTtzQkFBekQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdEhlYWRlclJvd0RlZiwgTWF0Tm9EYXRhUm93LCBNYXRSb3dEZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDaGFuZ2VFdmVudCB9IGZyb20gJy4uL2ZpbHRlci1iYXIvbW9kZWxzL2ZpbHRlci1iYXItY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSHRtbEVsZW1lbnRQYXJzZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBTYXZlRmlsZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvc2F2ZS1maWxlLmhlbHBlcic7XHJcbmltcG9ydCB7IERPTVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMvZGlzYWJsZS1leHBvcnQtYXR0cmlidXRlLW5hbWUuY29uc3QnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL211bHRpLWZ1bmN0aW9uYWwtdGFibGUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcgfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1jb2x1bW4tbG9jYWwtc3RvcmFnZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTdGF0dXNEaXNwbGF5Q29uZmlnIH0gZnJvbSAnLi4vc3RhdHVzLWRpc3BsYXkvbW9kZWxzL3N0YXR1cy1kaXNwbGF5LWNvbmZpZy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAndGxkLW11bHRpLWZ1bmN0aW9uYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpRnVuY3Rpb25hbFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0IHtcclxuICByZWFkb25seSBtYXRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10pO1xyXG5cclxuICBASW5wdXQoKSBjb25maWchOiBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbmZpZzxUPjtcclxuICBASW5wdXQoKSBoaWdobGlnaHRlZEVsZW1lbnRzITogVFtdO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRXJyb3JFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUW10pIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi4odmFsdWUgPz8gW10pKTtcclxuICB9XHJcblxyXG4gIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY2hlY2tib3hlcyBvbmx5IG9uIHJvdyBob3Zlci5cclxuICBASW5wdXQoKSBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJCYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBleHBvcnRlZDogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLm1hdFNlbGVjdGlvbi5jaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKCgpID0+IHsgcmV0dXJuIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkOyB9KSk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUHJvcGVydGllcyBmb3IgbWF0IHRhYmxlIHdyYXBwZXJcclxuICBAQ29udGVudENoaWxkcmVuKE1hdEhlYWRlclJvd0RlZikgaGVhZGVyUm93RGVmcyE6IFF1ZXJ5TGlzdDxNYXRIZWFkZXJSb3dEZWY+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPFQ+PjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdENvbHVtbkRlZikgY29sdW1uRGVmcyE6IFF1ZXJ5TGlzdDxNYXRDb2x1bW5EZWY+O1xyXG4gIEBDb250ZW50Q2hpbGQoTWF0Tm9EYXRhUm93KSBub0RhdGFSb3chOiBNYXROb0RhdGFSb3c7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlITogTWF0VGFibGU8VD47XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHByZXNlbGVjdGVkSXRlbXMhOiBUW107XHJcblxyXG4gIGdldCBpZ25vcmVBdHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfVxyXG4gIGRpc3BsYXlDb2x1bW5zITogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtblNlbGVjdEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgZXhwb3J0QWN0aXZlITogYm9vbGVhbjtcclxuICBub0RhdGFSb3dBY3RpdmUhOiBib29sZWFuO1xyXG5cclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcblxyXG4gIC8vIHByb3BlcnRpZXMgZm9yIG92ZXJmbG93IHNjcm9sbGluZyB3aXRoIG1vdXNlIGNsaWNrXHJcbiAgdGFibGVPdmVyZmxvdyE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzY3JvbGxNb3ZlbWVudCE6IG51bWJlciB8IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRZID0gMDtcclxuICBwcml2YXRlIHNjcm9sbExlZnQgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsVG9wID0gMDtcclxuXHJcbiAgZ2V0IGZpbHRlckFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbHRlcj8uZW5hYmxlZDsgfVxyXG4gIGdldCBzaG93RmlsdGVyVG9nZ2xlKCkgeyByZXR1cm4gIXRoaXMuY29uZmlnLmZpbHRlcj8uaGlkZUZpbHRlclRvZ2dsZTsgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZVZhbHVlITogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWc7XHJcbiAgcmVhZG9ubHkgYmF0Y2hDb2x1bW5OYW1lID0gXCJiYXRjaFwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERPTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAvLyNyZWdpb24gQW5ndWxhciBsaWZlY3ljbGUgaG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZEZyb21Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuc2V0RmlsdGVyVmlzaWJpbGl0eSgpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5TZWxlY3RQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldEV4cG9ydFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuc2V0Tm9EYXRhUm93UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5wcmVzZWxlY3RlZEl0ZW1zID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaChjb2x1bW5EZWYgPT4gdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uRGVmKSk7XHJcbiAgICB0aGlzLnJvd0RlZnMuZm9yRWFjaChyb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRSb3dEZWYocm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLnRhYmxlLnNldE5vRGF0YVJvdyh0aGlzLm5vRGF0YVJvdyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICB1cGRhdGVEaXNwbGF5Q29sdW1ucyhpbml0aWFsID0gZmFsc2UpIHtcclxuICAgIHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQgPSB0aGlzLmNvbmZpZy5iYXRjaENvbmZpZz8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5TZWxlY3Q/LmNvbHVtbnMgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gW107XHJcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5ub3RDb25maWd1cmFibGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmJhdGNoQ29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlVmFsdWUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgIGNvbHVtbi5zZWxlY3RlZCA9IGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnM/Lltjb2x1bW4ubmFtZV0gPz8gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyFbY29sdW1uLm5hbWVdID0gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4uc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKCFpbml0aWFsKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlckJhcigpIHtcclxuICAgIGNvbnN0IGxvY2Fsc3RvcmFnZU9iamVjdCA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIpIHtcclxuICAgICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlciA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9ICF0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyLnZpc2libGUgPSB0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbHN0b3JhZ2VPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyc0NoYW5nZWQoZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQoZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLmNvbm5lY3QoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoZGF0YSk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cz8uaW5jbHVkZXMoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRFcnJvckVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzPy5pbmNsdWRlcyhlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBNZXRob2RzIGZvciBiYXRjaCBzZWxlY3Rpb25cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICBpZiAodGhpcy5kaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgIC8vIGRlc2VsZWN0IG9ubHkgdGhvc2UgaXRlbXMgd2hpY2ggd2VyZSBub3QgYWxyZWFkeSBwcmVzZWxlY3RlZFxyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmRlc2VsZWN0KFxyXG4gICAgICAgICAgLi4udGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKGVsbSA9PiAhdGhpcy5wcmVzZWxlY3RlZEl0ZW1zLm1hcChlbG0gPT4gZWxtKS5pbmNsdWRlcyhlbG0pKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQ6IFQpIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHByZXZpb3VzIGFuaW1hdGlvbiBmcmFtZVxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLmNoZWNrVGFibGVPdmVyZmxvdygpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAgLy8gdXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBzbW9vdGhlciB1cGRhdGVzXHJcbiAgICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlT3ZlcmZsb3cpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LnBhZ2VZIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1vdmVtZW50XHJcbiAgICAgICAgY29uc3Qgd2Fsa1ggPSAoeCAtIHRoaXMuc3RhcnRYKSAqIDI7XHJcbiAgICAgICAgY29uc3Qgd2Fsa1kgPSAoeSAtIHRoaXMuc3RhcnRZKSAqIDI7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0aW5nIHNjcm9sbCBwb3NpdGlvbnNcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdCAtIHdhbGtYO1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcCAtIHdhbGtZO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbE1vdmVtZW50ID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIG9uTW91c2VVcCgpIHtcclxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGNhbmNlbGluZyBhbnkgcGVuZGluZyBhbmltYXRpb25cclxuICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsTW92ZW1lbnQpO1xyXG4gICAgICB0aGlzLnNjcm9sbE1vdmVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgY2hlY2tUYWJsZU92ZXJmbG93KCk6IHZvaWQge1xyXG4gICAgLy8gd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB3ZSBzaG91bGQgY2hlY2sgb25jZSBmb3IgdGFibGUgb3ZlcmZsb3dcclxuICAgIC8vIHdoZW4gdGhlcmUgd2FzbnQgb3ZlcmZsb3csIGJ1dCB3aWR0aCBvZiB0aGUgdGFibGUgYmVjYW1lIGJpZ2dlciwgdGhlbiB3ZSBhcmUgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZVxyXG4gICAgLy8gc2FtZSBmb3Igd2hlbiB0aGVyZSB3YXMgb3ZlcmZsb3csIGJ1dCBzaXplIG9mIHRoZSB0YWJsZSBpcyBzYW1lIGFzIGNvbnRhaW5lciwgc28gb3ZlcmZsb3cgaXMgZ29uZSBhbmQgd2UgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZSBhZ2FpblxyXG4gICAgaWYgKCh0aGlzLmNvbmZpZy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICYmICB0aGlzLnRhYmxlT3ZlcmZsb3cgPT09IHVuZGVmaW5lZCkgfHxcclxuICAgICAgKCF0aGlzLnRhYmxlT3ZlcmZsb3cgJiYgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDwgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHx8XHJcbiAgICAgICh0aGlzLnRhYmxlT3ZlcmZsb3cgJiYgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoID09PSB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDwgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZU92ZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50YWJsZU92ZXJmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0ZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4cG9ydD8uZmlsZU9wdGlvbnM/LnNhdmVUb0ZpbGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaWxlU3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBleHRlbnNpb24hOiBFeHBvcnRGb3JtYXQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5mb3JtYXQpIHtcclxuICAgICAgY2FzZSBFeHBvcnRGb3JtYXQuQ1NWOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGV4dGVuc2lvbiA9IEV4cG9ydEZvcm1hdC5DU1Y7XHJcbiAgICAgICAgZmlsZVN0cmluZyA9IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIudGFibGVBc0Nzdih0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmlnbm9yZUF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNsYXRlZEZpbGVOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcuZXhwb3J0LmZpbGVPcHRpb25zLmZpbGVOYW1lKTtcclxuICAgIFNhdmVGaWxlSGVscGVyLnNhdmVGaWxlKGZpbGVTdHJpbmcsIGAke3RyYW5zbGF0ZWRGaWxlTmFtZX0uJHtleHRlbnNpb259YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUxvY2FsU3RvcmFnZShuZXdWYWx1ZTogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkgJiYgbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uc2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhZEZyb21Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxTdG9yYWdlU3RyaW5nID0gdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uZ2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gICAgICBjYXRjaCB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpIHtcclxuICAgIHRoaXMuY29sdW1uU2VsZWN0QWN0aXZlID0gdGhpcy5jb25maWcuY29sdW1uU2VsZWN0Py5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5Q29sdW1ucyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVyVmlzaWJpbGl0eSgpIHtcclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWU/LmZpbHRlcj8udmlzaWJsZSA/PyB0aGlzLmNvbmZpZz8uZmlsdGVyPy52aXNpYmxlID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLm5vRGF0YVJvdykge1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMubm9EYXRhUm93Q29uZmlnID0gdGhpcy5jb25maWcubm9EYXRhUm93O1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZy5pY29uID0gdGhpcy5jb25maWcubm9EYXRhUm93Py5pY29uID8/IHRoaXMubm9EYXRhUm93SWNvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RXhwb3J0UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5leHBvcnRBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIxcmVtXCI+XHJcblxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbHVtbk1lbnVcIiAqbmdJZj1cImNvbHVtblNlbGVjdEFjdGl2ZVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY29sdW1uLXNlbGVjdC1pY29uXCI+bWVudTwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eydNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkNPTFVNTl9TRUxFQ1QnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cImZpbHRlckFjdGl2ZSAmJiBzaG93RmlsdGVyVG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZUZpbHRlckJhcigpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmZpbHRlcl9saXN0PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRklMVEVSX1RPR0dMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWRhdGFcIiBtYXQtc3Ryb2tlZC1idXR0b24gKm5nSWY9XCJleHBvcnRBY3RpdmVcIiAoY2xpY2spPVwiZXhwb3J0KClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+Y2xvdWRfZG93bmxvYWQ8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3snTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5FWFBPUlQnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FkZGl0aW9uYWxBY3Rpb25zXVwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1tZW51ICNjb2x1bW5NZW51PVwibWF0TWVudVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Qtd3JhcHBlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbmZpZ3VyYWJsZUNvbHVtbnNcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94IFsobmdNb2RlbCldPVwiY29sdW1uLnNlbGVjdGVkXCIgKGNoYW5nZSk9XCJ1cGRhdGVEaXNwbGF5Q29sdW1ucygpXCI+XHJcbiAgICAgICAgICB7e2NvbHVtbi5kaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtbWVudT5cclxuXHJcbiAgPHRsZC1maWx0ZXItYmFyICpuZ0lmPVwiY29uZmlnLmZpbHRlciAmJiBjb25maWcuZmlsdGVyLmVuYWJsZWRcIiBbZmlsdGVyUm93VmlzaWJsZV09XCIhZmlsdGVyQmFyVmlzaWJsZVwiIFtzZXR0aW5nc109XCJjb25maWcuZmlsdGVyLnNldHRpbmdzXCIgXHJcbiAgICAoZmlsdGVyQmFyQ2hhbmdlKT1cImZpbHRlcnNDaGFuZ2VkKCRldmVudClcIj5cclxuICA8L3RsZC1maWx0ZXItYmFyPlxyXG5cclxuICA8ZGl2IFxyXG4gICAgI3RhYmxlQ29udGFpbmVyXHJcbiAgICBbY2xhc3MudGFibGUtc3RpY2t5LWhlYWRlcl09XCJjb25maWc/LnN0aWNreUhlYWRlclwiXHJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2FibGVdPVwidGFibGVPdmVyZmxvd1wiXHJcbiAgICBjbGFzcz1cInRhYmxlLW92ZXJmbG93XCJcclxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXHJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxyXG4gID5cclxuICAgIDx0YWJsZSAjdGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImNvbmZpZy5kYXRhU291cmNlXCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImJhdGNoQ29sdW1uTmFtZVwiPlxyXG4gICAgICAgIDx0aCBjbGFzcz1cInJvdy1zZWxlY3RcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZS1leHBvcnQ+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVF9BTEwnIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImNvbmZpZy5iYXRjaENvbmZpZyEuY2hlY2tCb3hlc0Rpc2FibGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm1hdFNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm1hdFNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVCcgfCB0cmFuc2xhdGVcIiAqbmdJZj1cImlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlIHx8IGhvdmVyZWRSb3cgPT09IGVsZW1lbnQgfHwgbWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIiBcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5iYXRjaENvbmZpZyEuY2hlY2tCb3hlc0Rpc2FibGVkIHx8IChwcmVzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGVsZW1lbnQpICYmIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oZWxlbWVudClcIiBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheUNvbHVtbnM7IHN0aWNreTogY29uZmlnPy5zdGlja3lIZWFkZXIgPz8gZmFsc2VcIj48L3RyPlxyXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheUNvbHVtbnNcIiAobW91c2VvdmVyKT1cImhvdmVyZWRSb3cgPSByb3dcIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkUm93ID0gbnVsbFwiIFtjbGFzcy5oaWdobGlnaHQtZXJyb3JdPVwiaGlnaGxpZ2h0RXJyb3JFbGVtZW50KHJvdylcIiBbY2xhc3MuaGlnaGxpZ2h0XT1cImhpZ2hsaWdodEVsZW1lbnQocm93KVwiPjwvdHI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhUm93QWN0aXZlXCI+XHJcbiAgICAgICAgPHRyICptYXROb0RhdGFSb3c+XHJcbiAgICAgICAgICA8IS0tIGFkZCByYW5kb20gbnVtYmVyIHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBmdWxsIHdpZHRoIC0tPlxyXG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI5OVwiPlxyXG4gICAgICAgICAgICA8bGliLXN0YXR1cy1kaXNwbGF5IFtjb25maWddPVwibm9EYXRhUm93Q29uZmlnXCI+PC9saWItc3RhdHVzLWRpc3BsYXk+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -2396,6 +2396,9 @@ class MultiFunctionalTableComponent {
|
|
|
2396
2396
|
highlightElement(element) {
|
|
2397
2397
|
return this.highlightedElements?.includes(element);
|
|
2398
2398
|
}
|
|
2399
|
+
highlightErrorElement(element) {
|
|
2400
|
+
return this.highlightedErrorElements?.includes(element);
|
|
2401
|
+
}
|
|
2399
2402
|
//#region Methods for batch selection
|
|
2400
2403
|
isAllSelected() {
|
|
2401
2404
|
const numSelected = this.matSelection.selected.length;
|
|
@@ -2532,15 +2535,17 @@ class MultiFunctionalTableComponent {
|
|
|
2532
2535
|
}
|
|
2533
2536
|
}
|
|
2534
2537
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiFunctionalTableComponent, deps: [{ token: DOMService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2535
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiFunctionalTableComponent, selector: "tld-multi-functional-table", inputs: { config: "config", highlightedElements: "highlightedElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible", disablePreselectedItems: "disablePreselectedItems" }, outputs: { filterBarChange: "filterBarChange", exported: "exported", selectionChange: "selectionChange" }, queries: [{ propertyName: "noDataRow", first: true, predicate: MatNoDataRow, descendants: true }, { propertyName: "headerRowDefs", predicate: MatHeaderRowDef }, { propertyName: "rowDefs", predicate: MatRowDef, descendants: true }, { propertyName: "columnDefs", predicate: MatColumnDef }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i4$3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i4$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FilterBarComponent, selector: "tld-filter-bar", inputs: ["settings", "filterRowVisible"], outputs: ["filterBarChange"] }, { kind: "directive", type: i2$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2$3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: StatusDisplayComponent, selector: "lib-status-display", inputs: ["config"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
2538
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiFunctionalTableComponent, selector: "tld-multi-functional-table", inputs: { config: "config", highlightedElements: "highlightedElements", highlightedErrorElements: "highlightedErrorElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible", disablePreselectedItems: "disablePreselectedItems" }, outputs: { filterBarChange: "filterBarChange", exported: "exported", selectionChange: "selectionChange" }, queries: [{ propertyName: "noDataRow", first: true, predicate: MatNoDataRow, descendants: true }, { propertyName: "headerRowDefs", predicate: MatHeaderRowDef }, { propertyName: "rowDefs", predicate: MatRowDef, descendants: true }, { propertyName: "columnDefs", predicate: MatColumnDef }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight-error]=\"highlightErrorElement(row)\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i4$3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i4$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FilterBarComponent, selector: "tld-filter-bar", inputs: ["settings", "filterRowVisible"], outputs: ["filterBarChange"] }, { kind: "directive", type: i2$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2$3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: StatusDisplayComponent, selector: "lib-status-display", inputs: ["config"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
2536
2539
|
}
|
|
2537
2540
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiFunctionalTableComponent, decorators: [{
|
|
2538
2541
|
type: Component,
|
|
2539
|
-
args: [{ selector: 'tld-multi-functional-table', template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
2542
|
+
args: [{ selector: 'tld-multi-functional-table', template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive && showFilterToggle\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div \r\n #tableContainer\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n class=\"table-overflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight-error]=\"highlightErrorElement(row)\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
2540
2543
|
}], ctorParameters: function () { return [{ type: DOMService }, { type: i1$1.TranslateService }]; }, propDecorators: { config: [{
|
|
2541
2544
|
type: Input
|
|
2542
2545
|
}], highlightedElements: [{
|
|
2543
2546
|
type: Input
|
|
2547
|
+
}], highlightedErrorElements: [{
|
|
2548
|
+
type: Input
|
|
2544
2549
|
}], selection: [{
|
|
2545
2550
|
type: Input
|
|
2546
2551
|
}], isRowCheckboxAlwaysVisible: [{
|
|
@@ -4393,6 +4398,9 @@ class LLMHelperService {
|
|
|
4393
4398
|
* Returns remaining quota from API. If quota is missing, daily limit is being used from local storage.
|
|
4394
4399
|
*/
|
|
4395
4400
|
getRemainingQuota(decrease) {
|
|
4401
|
+
if (this.llmService.llmConfiguration.useLocalQuota) {
|
|
4402
|
+
return of(this.setQuotaLocalStorageUsage(decrease));
|
|
4403
|
+
}
|
|
4396
4404
|
return this.quotaService.getQuotaUsage().pipe(map((response) => {
|
|
4397
4405
|
const quota = response.usage.find((item) => item.quotaType === QuotaType.LLM_REQUESTS);
|
|
4398
4406
|
if (!quota) {
|