i-tech-shared-components 1.1.49 → 1.1.50
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.
|
@@ -61,7 +61,7 @@ export class AutocompleteSelectComponent {
|
|
|
61
61
|
this.emitAction = new EventEmitter();
|
|
62
62
|
this.pending = false;
|
|
63
63
|
this.data = [];
|
|
64
|
-
this.paginationData = { current: 1, last: 0 };
|
|
64
|
+
this.paginationData = { current: 1, last: 0, searchValue: '' };
|
|
65
65
|
this.firstRequest = false;
|
|
66
66
|
this.showPlaceholder = true;
|
|
67
67
|
this.isNeededForRecall = false;
|
|
@@ -126,8 +126,9 @@ export class AutocompleteSelectComponent {
|
|
|
126
126
|
if (fromSearch) {
|
|
127
127
|
this.paginationData.current = 1;
|
|
128
128
|
this.accessToNextRequest = true;
|
|
129
|
+
this.paginationData.searchValue = searchText || '';
|
|
129
130
|
}
|
|
130
|
-
const functionToDo = this.selectConfig.paginate(this.paginationData.current,
|
|
131
|
+
const functionToDo = this.selectConfig.paginate(this.paginationData.current, this.paginationData?.searchValue || '');
|
|
131
132
|
this.requestLoading = true;
|
|
132
133
|
functionToDo?.subscribe((data) => {
|
|
133
134
|
const dataToAdd = ('content' in data) ? data.content : data;
|
|
@@ -374,7 +375,7 @@ export class AutocompleteSelectComponent {
|
|
|
374
375
|
this.pending = true;
|
|
375
376
|
this.paginationData = {
|
|
376
377
|
current: 1,
|
|
377
|
-
last: 0
|
|
378
|
+
last: 0,
|
|
378
379
|
};
|
|
379
380
|
this.accessToNextRequest = true;
|
|
380
381
|
if ((typeof this.selectConfig.paginate) === 'function') {
|
|
@@ -451,4 +452,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
451
452
|
type: HostListener,
|
|
452
453
|
args: ['document:visibilitychange']
|
|
453
454
|
}] } });
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlLXNlbGVjdC9hdXRvY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUtc2VsZWN0L2F1dG9jb21wbGV0ZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR0EsWUFBWSxFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FB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ZSw0RkFDZixtQkFBbUIsZ0tBQ25CLG1CQUFtQix5VEFDbkIsZUFBZSwreENBQ2YsZUFBZSxzTUFDZiwyQkFBMkIsZ0VBRTNCLGdCQUFnQixnUEFDaEIsT0FBTyxzSUFDUCx5QkFBeUIsOERBQ3pCLG1CQUFtQixpSUFDbkIsa0JBQWtCOzs0RkFJVCwyQkFBMkI7a0JBeEJ2QyxTQUFTOytCQUNFLDRCQUE0QixXQUc3Qjt3QkFDUCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSixLQUFLO3dCQUNMLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZiwyQkFBMkI7d0JBQzNCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLHlCQUF5Qjt3QkFDekIsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLGNBQ1csSUFBSTtpRkFHUSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0ksV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNmLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQW1CRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDbUIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQXNCeEIsc0JBQXNCO3NCQURyQixZQUFZO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2VsZWN0LCBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0XCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb25maWdzSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvYXV0b2NvbXBsZXRlLWNvbmZpZ3MuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbE5hbWUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IElucHV0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYnV0dG9uLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nT3B0aW1pemVkSW1hZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ljb24tYnV0dG9uL2ljb24tYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBHZXRWYWx1ZUJ5S2V5RnJvbU9iamVjdFBpcGUgfSBmcm9tIFwiLi4vLi4vcGlwZXMvZ2V0LXZhbHVlLWJ5LWtleS1mcm9tLW9iamVjdC5waXBlXCI7XG5pbXBvcnQgeyBBcnJheVRvU3RyaW5nUGlwZSB9IGZyb20gXCIuLi8uLi9waXBlcy9hcnJheS10by1zdHJpbmcucGlwZVwiO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBHZW5lcmF0ZUVycm9yTWVzc2FnZXNQaXBlIH0gZnJvbSBcIi4uLy4uL3BpcGVzL2dlbmVyYXRlLWVycm9yLW1lc3NhZ2VzLnBpcGVcIjtcbmltcG9ydCB7IENsZWFyVmFsdWVDb21wb25lbnQgfSBmcm9tIFwiLi4vY2xlYXItdmFsdWUvY2xlYXItdmFsdWUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpLXRlY2gtYXV0b2NvbXBsZXRlLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBNYXRUb29sdGlwLFxuICAgIE5nSWYsXG4gICAgTmdGb3IsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEljb25CdXR0b25Db21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEdldFZhbHVlQnlLZXlGcm9tT2JqZWN0UGlwZSxcbiAgICBBcnJheVRvU3RyaW5nUGlwZSxcbiAgICBOZ09wdGltaXplZEltYWdlLFxuICAgIE1hdEljb24sXG4gICAgR2VuZXJhdGVFcnJvck1lc3NhZ2VzUGlwZSxcbiAgICBDbGVhclZhbHVlQ29tcG9uZW50LFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ21hdFNlbGVjdCcpIG1hdFNlbGVjdCE6IE1hdFNlbGVjdDtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3VibWl0VmFsdWUhOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZWUgQXV0b2NvbXBsZXRlQ29uZmlnc0ludGVyZmFjZSBmb3IgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGNvbmZpZ3MoZGF0YTogQXV0b2NvbXBsZXRlQ29uZmlnc0ludGVyZmFjZSkge1xuICAgIHRoaXMuc2VsZWN0Q29uZmlnID0gZGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB0aGlzLnNlbGVjdENvbmZpZy5wYWdpbmF0ZSkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0UmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgIHRoaXMuZmlyc3RSZXF1ZXN0ID0gdHJ1ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YSA9IHRoaXMuc2VsZWN0Q29uZmlnLnBhZ2luYXRlO1xuICAgIHRoaXMuZmluZEFuZFNldERlZmF1bHRWYWx1ZUZyb21EYXRhKCk7XG4gIH07XG5cbiAgQElucHV0KCkgZGV0ZWN0Q2hhbmdlcyE6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVtaXRBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgnYWxsU2VsZWN0ZWQnKSBhbGxTZWxlY3RlZCE6IE1hdFNlbGVjdDtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICBkZWZhdWx0VmFsdWUhOiBhbnk7XG4gIGRhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgcGFnaW5hdGlvbkRhdGE6IGFueSA9IHsgY3VycmVudDogMSwgbGFzdDogMCB9O1xuICBuZ0NvbnRyb2w6IEZvcm1Db250cm9sTmFtZTtcbiAgc2VsZWN0Q29uZmlnITogQXV0b2NvbXBsZXRlQ29uZmlnc0ludGVyZmFjZTtcbiAgZmlyc3RSZXF1ZXN0ID0gZmFsc2U7XG4gIHNob3dQbGFjZWhvbGRlciA9IHRydWU7XG4gIGlzTmVlZGVkRm9yUmVjYWxsID0gZmFsc2U7XG4gIHNob3dpbmdWYWx1ZTogYW55O1xuICBzZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uOiBBcnJheTxhbnk+ID0gW107XG4gIHNlYXJjaFRpbWVvdXRJZDogYW55O1xuICB0YWJWaXNpYmlsaXR5ITogYm9vbGVhbjtcbiAgYWNjZXNzVG9OZXh0UmVxdWVzdCA9IHRydWU7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIGJsb2NrUmVjYWxsRGVmYXVsdFZhbHVlU2V0dGVyID0gZmFsc2U7XG4gIGJhc2VEYXRhOiBhbnk7XG4gIHJlcXVlc3RMb2FkaW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBCdXR0b25UeXBlID0gQnV0dG9uVHlwZTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJylcbiAgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYlZpc2liaWxpdHkgPSAhZG9jdW1lbnQuaGlkZGVuO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKTtcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbikge1xuICAgICAgdGhpcy5pc05lZWRlZEZvclJlY2FsbCA9IHRydWU7XG4gICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlXG4gICAgICB9LCA0MDAwKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXRTZXJ2aWNlOiBJbnB1dFNlcnZpY2UpIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5wdXRTZXJ2aWNlLmluamVjdE5nQ29udHJvbCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RDb25maWcnXSAmJiB0aGlzLnNlbGVjdENvbmZpZykge1xuICAgICAgaWYgKCh0eXBlb2YgdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIC8vIElmIHdlIGhhdmUgZGF0YSBhbmQgYSB2YWx1ZVxuICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggJiYgbmV3VmFsdWUpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZGVmYXVsdCB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSBuZXcgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZSB8fCB0aGlzLmRlZmF1bHRWYWx1ZS5pZCAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAvLyBSZXNldCB0aGUgYmxvY2sgZmxhZyB0byBhbGxvdyB1cGRhdGluZyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLmJsb2NrUmVjYWxsRGVmYXVsdFZhbHVlU2V0dGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5maW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsdWUgYnV0IG5vIGRhdGEsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGRhdGFcbiAgICAgICAgdGhpcy5ibG9ja1JlY2FsbERlZmF1bHRWYWx1ZVNldHRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTmVlZGVkRm9yUmVjYWxsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZUNhbGxEYXRhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXJkUmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0RGF0YSgnJywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyByZXF1ZXN0IGZvciBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgLSBUaGUgaW5wdXQgdmFsdWUgdG8gc2VhcmNoIG9wdGlvbnMgYnkuXG4gICAqIEBwYXJhbSBmcm9tU2VhcmNoIC0gQWNjZXNzIGZvciBzZWFyY2guXG4gICAqIEByZXR1cm5zIFNlbGVjdCBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YShzZWFyY2hUZXh0Pzogc3RyaW5nLCBmcm9tU2VhcmNoPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghZnJvbVNlYXJjaCAmJiAhdGhpcy5hY2Nlc3NUb05leHRSZXF1ZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdExvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnJvbVNlYXJjaCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5jdXJyZW50ID0gMTtcbiAgICAgIHRoaXMuYWNjZXNzVG9OZXh0UmVxdWVzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZnVuY3Rpb25Ub0RvID0gdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGUodGhpcy5wYWdpbmF0aW9uRGF0YS5jdXJyZW50LCBzZWFyY2hUZXh0KTtcblxuICAgIHRoaXMucmVxdWVzdExvYWRpbmcgPSB0cnVlO1xuICAgIGZ1bmN0aW9uVG9Ebz8uc3Vic2NyaWJlKChkYXRhOiBBcnJheTxhbnk+IHwgYW55KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVG9BZGQgPSAoJ2NvbnRlbnQnIGluIGRhdGEpID8gZGF0YS5jb250ZW50IDogZGF0YTtcblxuICAgICAgaWYgKCdjb250ZW50JyBpbiBkYXRhKSB7XG4gICAgICAgIHRoaXMuYWNjZXNzVG9OZXh0UmVxdWVzdCA9ICFkYXRhLmxhc3QgfHwgKGRhdGEudG90YWxQYWdlcyA+IHRoaXMucGFnaW5hdGlvbkRhdGEuY3VycmVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YSA9IChmcm9tU2VhcmNoIHx8IHRoaXMuc2VsZWN0Q29uZmlnPy5ibG9ja1BhZ2luYXRpb24pID8gZGF0YVRvQWRkIDogWy4uLnRoaXMuZGF0YSwgLi4uZGF0YVRvQWRkXTtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXF1ZXN0TG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWRhdGFUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5sYXN0ID0gdGhpcy5wYWdpbmF0aW9uRGF0YS5jdXJyZW50O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFnaW5hdGlvbkRhdGEuY3VycmVudCArPSAxO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5sYXN0ICs9IDE7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTtcbiAgICAgIH0sIDEwKVxuICAgIH0sICgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXF1ZXN0TG9hZGluZyA9IGZhbHNlO1xuICAgIH0pXG4gIH1cblxuICBmaW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29uZmlnLm11bHRpcGxlKSB7XG4gICAgICBpZiAodGhpcy5uZ0NvbnRyb2wudmFsdWUgJiYgdGhpcy5uZ0NvbnRyb2wudmFsdWUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93aW5nVmFsdWUodGhpcy5kYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMubmdDb250cm9sLnZhbHVlWzBdKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgYWZ0ZXIgbWlncmF0aW5nIGFsbCBzZWxlY3RzXG4gICAgICAgIC8vIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIC8vIGlmICghdGhpcy5uZ0NvbnRyb2wudmFsdWUgJiYgIXRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIC8vIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbC52YWx1ZSAmJiAhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBzZXREZWZhdWx0VmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGhpcy5uZ0NvbnRyb2wudmFsdWUpO1xuICAgIHRoaXMuYmFzZURhdGEgPSB0aGlzLmRlZmF1bHRWYWx1ZVxuICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCgpXG4gICAgdGhpcy5zZXRTaG93aW5nVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgb3B0aW9uQ2xpY2soc2hvd2luZ0RhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYmFzZURhdGEgPSBzaG93aW5nRGF0YVxuICAgIGlmICghdGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuc2V0U2hvd2luZ1ZhbHVlKHNob3dpbmdEYXRhKTtcbiAgICAgIHRoaXMubWF0U2VsZWN0LmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVTaG93aW5nRGF0YUluU2VsZWN0ZWRPcHRpb25zTXVsdGlwbGVDYXNlKHNob3dpbmdEYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1c091dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd2luZ1ZhbHVlKHNob3dpbmdEYXRhKTtcbiAgICB0aGlzLnNob3dQbGFjZWhvbGRlciA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlU2hvd2luZ0RhdGFJblNlbGVjdGVkT3B0aW9uc011bHRpcGxlQ2FzZShzaG93aW5nRGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc2hvd2luZ0RhdGFCeUpzb24gPSBKU09OLnN0cmluZ2lmeShzaG93aW5nRGF0YSk7XG4gICAgY29uc3QgaW5kZXhPZkV4aXN0aW5nT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLmZpbmRJbmRleChcbiAgICAgIChvcHRpb25WYWx1ZTogYW55KSA9PiBKU09OLnN0cmluZ2lmeShvcHRpb25WYWx1ZSkgPT09IHNob3dpbmdEYXRhQnlKc29uXG4gICAgKVxuICAgIGlmIChpbmRleE9mRXhpc3RpbmdPcHRpb24gPj0gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLnNwbGljZShpbmRleE9mRXhpc3RpbmdPcHRpb24sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uRm9yTXVsdGlwbGVTZWxlY3Rpb24ucHVzaChzaG93aW5nRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYWRkTmV3SXRlbUV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuaXNOZWVkZWRGb3JSZWNhbGwgPSB0cnVlO1xuICAgIHRoaXMuZW1pdEFjdGlvbi5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGFuZCBzaG93LlxuICAgKiBAcGFyYW0gZGF0YSAtIEV4aXN0aW5nIGNob3NlbiBkYXRhLlxuICAgKi9cbiAgc2V0U2hvd2luZ1ZhbHVlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RDb25maWcuc2VhcmNoKSB7XG4gICAgICBjb25zdCBmdWxsVGV4dDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLmZvckVhY2goKG9wdGlvbkRhdGE6IGFueSkgPT4ge1xuICAgICAgICBmdWxsVGV4dC5wdXNoKHRoaXMuY29sbGVjdEFuZEdldFNlbGVjdGlvblRvU2hvd0Zvck9uZU9wdGlvbihvcHRpb25EYXRhKSlcbiAgICAgIH0pXG4gICAgICB0aGlzLnNob3dpbmdWYWx1ZSA9IGZ1bGxUZXh0LmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93aW5nVmFsdWUgPSB0aGlzLmNvbGxlY3RBbmRHZXRTZWxlY3Rpb25Ub1Nob3dGb3JPbmVPcHRpb24oZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuYmxvY2tSZWNhbGxEZWZhdWx0VmFsdWVTZXR0ZXIgPSB0cnVlO1xuICB9XG5cbiAgY29sbGVjdEFuZEdldFNlbGVjdGlvblRvU2hvd0Zvck9uZU9wdGlvbihkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBpbmNsdWRlID0gZGF0YTtcbiAgICBsZXQgaW5jbHVkZU9wdGlvbmFsID0gZGF0YTtcblxuICAgIGlmICh0aGlzLnNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5S2V5LmZvckVhY2goKHBhcmFtOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBwYXJhbS5mb3JFYWNoKChrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaW5jbHVkZSA9IChpbmNsdWRlKSA/IGluY2x1ZGVba2V5XSA6IG51bGw7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmNsdWRlID0gaW5jbHVkZVtwYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuc2hvd0Z1bGxUZXh0V2l0aE9wdGlvbmFsT25TZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q29uZmlnLnZhbHVlVG9TaG93QnlQYXJhbT8uZm9yRWFjaCgocGFyYW06IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCBzdHJpbmcpID0+IHtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBwYXJhbS5mb3JFYWNoKChrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBpbmNsdWRlT3B0aW9uYWwgPSAoaW5jbHVkZU9wdGlvbmFsKSA/IGluY2x1ZGVPcHRpb25hbFtrZXldIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluY2x1ZGVPcHRpb25hbCA9IGluY2x1ZGVPcHRpb25hbFtwYXJhbV07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcudmFsdWVUb1Nob3dCeVBhcmFtICYmIHR5cGVvZiBpbmNsdWRlT3B0aW9uYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaW5jbHVkZSArPSAodGhpcy5zZWxlY3RDb25maWcud2l0aFBhcmFtU3ltYm9sIHx8ICcnKSArIGluY2x1ZGVPcHRpb25hbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGU7XG4gIH1cblxuICAvKipcbiAgICogQmxvY2sgYW5vdGhlciBldmVudHMuXG4gICAqIEBwYXJhbSBldmVudCAtIEVsZW1lbnQgY2xpY2sgZXZlbnQuXG4gICAqL1xuICBwcmV2ZW50RGVmYXVsdChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdENvbmZpZy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICByZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQoZWxlbWVudDogTWF0U2VsZWN0KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29uZmlnLnBhZ2luYXRlT25TY3JvbGwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFuZWwgPSBlbGVtZW50LnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGV2ZW50OiBhbnkpID0+IHRoaXMubG9hZERhdGFPblNjcm9sbChldmVudCkpO1xuICB9XG5cbiAgbG9hZERhdGFPblNjcm9sbChldmVudDogYW55KSB7XG4gICAgY29uc3QgcG9zID0gKGV2ZW50LnRhcmdldC5zY3JvbGxUb3AgfHwgZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCkgKyBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IG1heCA9IGV2ZW50LnRhcmdldC5zY3JvbGxIZWlnaHQ7XG4gICAgaWYgKChwb3MgKyAxKSA+PSBtYXgpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EYXRhLmN1cnJlbnQgPT09IHRoaXMucGFnaW5hdGlvbkRhdGEubGFzdCB8fCB0aGlzLnNlbGVjdENvbmZpZy5ibG9ja1BhZ2luYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNTZWFyY2hJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuc2VhcmNoICYmIHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Rm9jdXNPdXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc05lZWRlZEZvclJlY2FsbCA9ICEhdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyVGltZW91dEZvclNlYXJjaCgpO1xuICB9XG5cbiAgcmVzZXRWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG51bGwpO1xuICAgIHRoaXMubmdDb250cm9sLnJlc2V0KG51bGwpO1xuICAgIHRoaXMuaW5wdXRGb2N1c091dCgpO1xuICB9XG5cbiAgZ2V0RGF0YVdpdGhTZWFyY2godmFsdWU6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0Rm9yU2VhcmNoKCk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAxKSB7XG4gICAgICB0aGlzLnNlYXJjaFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmdldERhdGEodmFsdWUsIHRydWUpXG4gICAgICB9LCA4MDApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoIDw9IDEgJiYgZXZlbnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgdGhpcy5nZXREYXRhKHZhbHVlLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyVGltZW91dEZvclNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnNlYXJjaFRpbWVvdXRJZCA9IDA7XG4gICAgfVxuICB9XG5cbiAgb3BlblNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuZGlzYWJsZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93UGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Lm9wZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNob3dQbGFjZWhvbGRlciA9ICF0aGlzLnNob3dQbGFjZWhvbGRlcjtcbiAgICBpZiAoIXRoaXMuc2hvd1BsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlQ2FsbERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hdFNlbGVjdC5jbG9zZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpXG4gICAgfVxuICB9XG5cbiAgb3BlbmVkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmlzTmVlZGVkRm9yUmVjYWxsKSB7XG4gICAgICAgIHRoaXMucmVDYWxsRGF0YSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0Q29uZmlnLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLnJlQ2FsbERhdGEoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHJlQ2FsbERhdGEoKTogdm9pZCB7XG4gICAgLy8gVE9ETyByZWZhY3RvciB0aGlzIHBhcnRcbiAgICBpZiAoIXRoaXMuaXNOZWVkZWRGb3JSZWNhbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2luYXRpb25EYXRhID0ge1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGxhc3Q6IDBcbiAgICB9O1xuICAgIHRoaXMuYWNjZXNzVG9OZXh0UmVxdWVzdCA9IHRydWU7XG4gICAgaWYgKCh0eXBlb2YgdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnNlbGVjdENvbmZpZy5wYWdpbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5pc05lZWRlZEZvclJlY2FsbCA9IGZhbHNlO1xuICB9XG5cbiAgZW1pdFNlbGVjdGlvbkNoYW5nZUFuZENsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50LnZhbHVlKTtcbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUpIHtcbiAgICAgIGlmICghZXZlbnQudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWF0U2VsZWN0LmNsb3NlKCk7XG4gIH1cblxuICAvKlxuICAgKiBPcGVuIG1hdC1zZWxlY3QgYW5kIGZvY3VzIG9uIHNlYXJjaCBvbiBpY29uIGNsaWNrXG4gICAqL1xuICBpY29uQ2xpY2sobWF0U2VsZWN0OiBNYXRTZWxlY3QsIHNlYXJjaElucHV0PzogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIG1hdFNlbGVjdC5vcGVuKCk7XG4gICAgc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICAvKlxuICAqIEN1c3RvbSBlcnJvciBzdGF0ZSBtYXRjaGVyIGZvciBtYXQtc2VsZWN0IHRvIHByb3Blcmx5IHNob3cgZXJyb3Igc3RhdGUgaW4gbWF0LWZvcm0tZmllbGRcbiAgICovXG4gIGN1c3RvbUVycm9yU3RhdGVNYXRjaGVyID0ge1xuICAgIGlzRXJyb3JTdGF0ZTogKGNvbnRyb2w6IGFueSwgZm9ybTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gISEoY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgdGhpcy5zdWJtaXRWYWx1ZSk7XG4gICAgfVxuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cIm5ldy1tYXQtYXV0b2NvbXBsZXRlXCIgaWQ9XCJtYXRfYXV0b2NvbXBsZXRlXCJcbiAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ21hdC1zZWxlY3Qtd2l0aG91dF9pY29uJzogIXNlbGVjdENvbmZpZy5pY29uVXJsICYmICFzZWxlY3RDb25maWcuYWN0aXZlU3RhdGVJY29uVXJsLFxuICAgICAgICAgICAgJ21hdC1zZWxlY3Qtd2l0aC1zZWFyY2gnOiBzZWxlY3RDb25maWcuc2VhcmNoLFxuICAgICAgICAgICAgJ3dpdGhvdXQtbGFiZWwnOiBzZWxlY3RDb25maWcuaGlkZUxhYmVsLFxuICAgICAgICAgICAgJ2ludmFsaWRfZmllbGQnOiBuZ0NvbnRyb2wuY29udHJvbC5lcnJvcnMgJiYgc3VibWl0VmFsdWUsXG4gICAgICAgICAgICAncmVhZG9ubHktZmllbGQnOiBzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWRcbiAgICAgICAgIH1cIlxuICAgICBbbWF0VG9vbHRpcF09XCIoc2VsZWN0Q29uZmlnLmhvdmVyICYmICFuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCA/ICgoc2VsZWN0Q29uZmlnLmhvdmVyIHx8ICcnKSB8IHRyYW5zbGF0ZSkgOiAnJylcIlxuICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIidtYXQtbWRjLXRvb2x0aXAgYmlnLXRkLW1hdC10b29sdGlwJ1wiXG4gICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiXG4gICAgICpuZ0lmPVwic2VsZWN0Q29uZmlnICYmIG5nQ29udHJvbFwiPlxuXG4gIDxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiIXNlbGVjdENvbmZpZy5oaWRlTGFiZWxcIj5cbiAgICA8bWF0LWxhYmVsIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAncmVhZG9ubHktY29sb3InIDogc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkLFxuICAgICAgICAgICdpbnZhbGlkLWxhYmVsLWNvbG9yJzogISEobmdDb250cm9sLmNvbnRyb2wuZXJyb3JzICYmIHN1Ym1pdFZhbHVlKVxuICAgICAgICB9XCI+XG4gICAgICB7eyBzZWxlY3RDb25maWcubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1sYWJlbD5cbiAgICA8c3BhbiAqbmdJZj1cInNlbGVjdENvbmZpZy5yZXF1aXJlZFwiIGNsYXNzPVwicmVxdWlyZWQtaW5wdXRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVhZG9ubHktY29sb3InIDogbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWR9XCI+Kjwvc3Bhbj5cbiAgPC9kaXY+XG5cblxuICA8IS0tIFNlYXJjaCBJbnB1dCAtLT5cbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dCB3LTEwMFwiXG4gICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTskZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyBoaWRlX2lucHV0X3BsYWNlaG9sZGVyOiBzaG93UGxhY2Vob2xkZXIgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgfVwiXG4gICAgICAgKm5nSWY9XCJzZWxlY3RDb25maWcuc2VhcmNoXCJcbiAgPlxuICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICBpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J3ByLTI1JzogIXNlbGVjdENvbmZpZy5pY29uVXJsfVwiXG4gICAgICAgICAgICNzZWFyY2hJbnB1dFxuICAgICAgICAgICBbZGlzYWJsZWRdPVwibmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgfHwgc2VsZWN0Q29uZmlnLmhvdmVyXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCB8fCBzZWxlY3RDb25maWcuaG92ZXIpID8gJycgOiAnU2VhcmNoJ1wiXG4gICAgICAgICAgIChmb2N1c291dCk9XCJpbnB1dEZvY3VzT3V0KClcIlxuICAgICAgICAgICAoZm9jdXMpPVwib3BlblNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgKGtleXVwKT1cImdldERhdGFXaXRoU2VhcmNoKHNlYXJjaElucHV0LnZhbHVlLCRldmVudClcIj5cblxuICAgIDwhLS0gU2VhcmNoIEljb24gLS0+XG4gICAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaWNvblwiPlxuICAgICAgICAgICAgPGktdGVjaC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1yLTEwXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkID8gJ3JlYWRvbmx5LWNvbG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGVmYXVsdC1mb3JtLWljb24tY29sb3InXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RDb25maWcuaWNvblByZWZpeCAmJiAhc2hvd1BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW2ljb25OYW1lXT1cInNlbGVjdENvbmZpZy5pY29uUHJlZml4IHx8ICcnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIG1hdFByZWZpeFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9pLXRlY2gtaWNvbi1idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQbGFjZWhvbGRlci9TZWxlY3RlZCBWYWx1ZSBEaXNwbGF5IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1BsYWNlaG9sZGVyICYmIHNlbGVjdENvbmZpZy5zZWFyY2hcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICpuZ0lmPVwiKCFuZ0NvbnRyb2w/LnZhbHVlICYmICFuZ0NvbnRyb2w/LnZhbHVlPy5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgIChzZWxlY3RDb25maWcubXVsdGlwbGUgJiYgbmdDb250cm9sPy52YWx1ZSAmJiAhbmdDb250cm9sPy52YWx1ZT8ubGVuZ3RoKVwiXG4gICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgPyAncmVhZG9ubHktY29sb3InIDogJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJ1wiXG4gICAgPlxuICAgICAge3sgKChzZWxlY3RDb25maWcucGxhY2Vob2xkZXIgfHwgJycpIHwgdHJhbnNsYXRlKSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcGxhY2Vob2xkZXIgY3VzdG9tLXZhbHVlIGVsbGlwc2lzXCJcbiAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncHItNDInOiBzZWxlY3RDb25maWcuaWNvblVybCxcbiAgICAgICAgICAgICAgICAncmVhZG9ubHktY29sb3InOiBzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJzogIShzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAqbmdJZj1cIm5nQ29udHJvbD8udmFsdWVcIlxuICAgID5cbiAgICAgIHt7c2hvd2luZ1ZhbHVlfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBDdXN0b20gSWNvbiAtLT5cbiAgPGltZyBjbGFzcz1cImxlZnRfaWNvbl9uZXcgcG9pbnRlclwiXG4gICAgICAgYWx0PVwiVG9nZ2xlIFNlbGVjdGlvblwiXG4gICAgICAgKGNsaWNrKT1cImljb25DbGljayhtYXRTZWxlY3QsIHNlYXJjaElucHV0KVwiXG4gICAgICAgKm5nSWY9XCIhc2VsZWN0Q29uZmlnLm1hdEljb25OYW1lICYmIChzZWxlY3RDb25maWcuaWNvblVybCB8fCBzZWxlY3RDb25maWcuYWN0aXZlU3RhdGVJY29uVXJsKVwiXG4gICAgICAgW3NyY109XCInYXNzZXRzL2ltYWdlcy9pY29ucy9nbG9iYWwvJyArIChuZ0NvbnRyb2wuY29udHJvbD8udmFsdWUgJiYgc2VsZWN0Q29uZmlnPy5hY3RpdmVTdGF0ZUljb25VcmwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnLmFjdGl2ZVN0YXRlSWNvblVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RDb25maWcuaWNvblVybClcIj5cblxuICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctMTAwXCIgKGNsaWNrKT1cInNlbGVjdENvbmZpZz8uc2VhcmNoID8gZm9jdXNTZWFyY2hJbnB1dCgpIDogbnVsbFwiPlxuICAgIDwhLS0gTWF0ZXJpYWwgU2VsZWN0IC0tPlxuICAgIDxtYXQtc2VsZWN0ICNtYXRTZWxlY3Q9XCJtYXRTZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtwYW5lbENsYXNzXT1cIidhdXRvY29tcGxldGUtdHJhbnNmb3JtLXBhbmVsLWxvY2F0aW9uJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wbGFjZWhvbGRlcl09XCIoc2VsZWN0Q29uZmlnLnBsYWNlaG9sZGVyIHx8ICcnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwic2VsZWN0Q29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwic2VsZWN0Q29uZmlnLmZpbHRyYXRpb25LZXkgfHwgJydcIlxuICAgICAgICAgICAgICAgIChvcGVuZWQpPVwicmVnaXN0ZXJQYW5lbFNjcm9sbEV2ZW50KG1hdFNlbGVjdClcIlxuICAgICAgICAgICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib3BlbmVkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJuZ0NvbnRyb2wuY29udHJvbFwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInNlbGVjdENvbmZpZy5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJlbWl0U2VsZWN0aW9uQ2hhbmdlQW5kQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImN1c3RvbUVycm9yU3RhdGVNYXRjaGVyXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHNlbGVjdENvbmZpZy5wbGFjZWhvbGRlciB8fCAnJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZFwiXG4gICAgPlxuXG4gICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInBlbmRpbmdcIiBjbGFzcz1cIm9wdGlvbl9sb2FkaW5nIHJlbGF0aXZlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1ZXN0X2xvYWRpbmdcIj5cbiAgICAgICAgICA8aW1nIG5nU3JjPVwiLi9sb2FkZXIuc3ZnXCIgYWx0PVwiXCIgaGVpZ2h0PVwiMjAwXCIgd2lkdGg9XCIyMDBcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICA8IS0tIE9wdGlvbnMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubGVuZ3RoICYmICFwZW5kaW5nXCI+XG4gICAgICAgIDwhLS0gQWRkIE5ldyBPcHRpb24gLS0+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwic2VsZWN0Q29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXIgYWRkX25ld1wiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpO2FkZE5ld0l0ZW1FdmVudCgpXCI+XG4gICAgICAgICAgPCEtLShjbGljayk9XCJuZ0NvbnRyb2wuY29udHJvbC5yZXNldChudWxsKTtcbiAgICAgICAgICAgICAgbWF0U2VsZWN0Ll9vbkJsdXIoKTtjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpO2FkZE5ld0l0ZW1FdmVudCgpXCI+LS0+XG4gICAgICAgICAgPGktdGVjaC1idXR0b25cbiAgICAgICAgICAgIFt0eXBlXT1cIkJ1dHRvblR5cGUuT1VUTElORVwiXG4gICAgICAgICAgICBbZm9udEljb25dPVwiJ2FkZCdcIlxuICAgICAgICAgICAgW3RleHRdPVwiKCdkcm9wZG93bl9hZGRfaXRlbScgfCB0cmFuc2xhdGUgOiB7SU5QVVRfTkFNRTogKHNlbGVjdENvbmZpZy5sYWJlbCB8IHRyYW5zbGF0ZSl9KSBcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIid3LTEwMCBtYXQtYXV0b2NvbXBsZXRlLXNlbGVjdC1idXR0b24nXCI+XG4gICAgICAgICAgPC9pLXRlY2gtYnV0dG9uPlxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgPCEtLSBSZWd1bGFyIE9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0Q29uZmlnPy5jaGFuZ2VUZXh0ICYmIGRhdGEubGVuZ3RoXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdENvbmZpZy52YWx1ZUJ5S2V5IHwgZ2V0VmFsdWVCeUtleUZyb21PYmplY3QgOiBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCJvcHRpb25DbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50RGVmYXVsdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdENvbmZpZz8ubmVlZFRyYW5zbGF0ZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAoKHNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5S2V5IHwgZ2V0VmFsdWVCeUtleUZyb21PYmplY3RcbiAgICAgICAgICAgICAgOiBpdGVtIDogc2VsZWN0Q29uZmlnLnZhbHVlVG9TaG93QnlQYXJhbSA6IHNlbGVjdENvbmZpZy53aXRoUGFyYW1TeW1ib2wpIHx8ICcnKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIH1AZWxzZSB7XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgKChzZWxlY3RDb25maWcudmFsdWVUb1Nob3dCeUtleSB8IGdldFZhbHVlQnlLZXlGcm9tT2JqZWN0XG4gICAgICAgICAgICAgIDogaXRlbSA6IHNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5UGFyYW0gOiBzZWxlY3RDb25maWcud2l0aFBhcmFtU3ltYm9sKSB8fCAnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQ3VzdG9tIFRleHQgT3B0aW9ucyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdENvbmZpZz8uY2hhbmdlVGV4dCAmJiBkYXRhLmxlbmd0aFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RDb25maWcudmFsdWVCeUtleSB8IGdldFZhbHVlQnlLZXlGcm9tT2JqZWN0IDogaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwib3B0aW9uQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwicHJldmVudERlZmF1bHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdENvbmZpZz8uY2hhbmdlVGV4dFtpdGVtXS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAge3sgc2VsZWN0Q29uZmlnPy5uZWVkVHJhbnNsYXRlT3B0aW9ucyA/IChzZWxlY3RDb25maWc/LmNoYW5nZVRleHRbaXRlbV0udGV4dCB8IHRyYW5zbGF0ZSApIDogc2VsZWN0Q29uZmlnPy5jaGFuZ2VUZXh0W2l0ZW1dLnRleHR9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcGVuZGluZyAmJiAhZGF0YS5sZW5ndGhcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQgY2xhc3M9XCJlbXB0eV9zZWxlY3Rpb25fc3RhdGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc19hbmRfdGlsZSBhZGRfbmV3IGZsZXhfY29sdW1uIHctMTAwIGZsZXhfY2VudGVyX2FsaWduX2NlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgJ2Ryb3Bkb3duX25vX2l0ZW1zJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xMFwiPlxuICAgICAgICAgICAgICA8aS10ZWNoLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0Q29uZmlnPy5hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJCdXR0b25UeXBlLk9VVExJTkVcIlxuICAgICAgICAgICAgICAgIChidXR0b25DbGljayk9XCJjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpO2FkZE5ld0l0ZW1FdmVudCgpXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ21hdC1hdXRvY29tcGxldGUtc2VsZWN0LWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgIFtmb250SWNvbl09XCInYWRkJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdkcm9wZG93bl9hZGRfaXRlbScgfCB0cmFuc2xhdGUgOiB7SU5QVVRfTkFNRTogKHNlbGVjdENvbmZpZy5sYWJlbCB8IHRyYW5zbGF0ZSl9KSBcIj5cbiAgICAgICAgICAgICAgPC9pLXRlY2gtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJzZWxlY3RDb25maWcuaWNvblByZWZpeFwiXG4gICAgICAgICAgICAgIG1hdFByZWZpeFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdyZWFkb25seS1jb2xvcicgOiAhc2VsZWN0Q29uZmlnWydpY29uUHJlZml4Q29sb3InXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQpLFxuICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdC1mb3JtLWljb24tY29sb3InIDogIXNlbGVjdENvbmZpZ1snaWNvblByZWZpeENvbG9yJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIigoc2VsZWN0Q29uZmlnPy5bJ2ljb25QcmVmaXhUb29sdGlwJ10gfHwgJycpIHwgdHJhbnNsYXRlKVwiXG4gICAgPnt7IHNlbGVjdENvbmZpZy5pY29uUHJlZml4IH19XG4gICAgPC9tYXQtaWNvbj5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlbGVjdENvbmZpZ1snaWNvblByZWZpeFN2ZyddXCJcbiAgICAgICAgICAgICAgbWF0UHJlZml4XG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIigoc2VsZWN0Q29uZmlnPy5bJ2ljb25QcmVmaXhUb29sdGlwJ10gfHwgJycpIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgIFtzdmdJY29uXT1cInNlbGVjdENvbmZpZ1snaWNvblByZWZpeFN2ZyddIHx8ICcnXCJcbiAgICA+PC9tYXQtaWNvbj5cblxuICAgIDxpLXRlY2gtaWNvbi1idXR0b25cbiAgICAgICpuZ0lmPVwic2VsZWN0Q29uZmlnLnNlYXJjaCAmJiBzZWxlY3RDb25maWcuY2xlYXJhYmxlICYmICFuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCAmJiAhIW5nQ29udHJvbC5jb250cm9sLnZhbHVlXCJcbiAgICAgIGljb25OYW1lPVwiY2FuY2VsXCJcbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBmYWxzZVwiXG4gICAgICBbbmdDbGFzc109XCJzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgPyAncmVhZG9ubHktY29sb3InIDogJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJ1wiXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG5nQ29udHJvbC5jb250cm9sLnJlc2V0KG51bGwpO1xuICAgICAgICBtYXRTZWxlY3QuX29uQmx1cigpO1xuICAgICAgICBjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpXG4gICAgICBcIlxuICAgID5cbiAgICA8L2ktdGVjaC1pY29uLWJ1dHRvbj5cbiAgICA8bWF0LWljb25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgY2xhc3M9XCJzZWxlY3QtYXJyb3dcIlxuICAgICAgW2NsYXNzLm9wZW5dPVwibWF0U2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAncmVhZG9ubHktY29sb3InOiBzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQsXG4gICAgICAgICAgICAnZGVmYXVsdC1mb3JtLWljb24tY29sb3InOiAhKHNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCksXG4gICAgICAgICAgICAnbXQtOCc6ICEhbmdDb250cm9sLmNvbnRyb2wudmFsdWUgJiYgc2VsZWN0Q29uZmlnLmNsZWFyYWJsZVxuICAgICAgICAgfVwiXG4gICAgPlxuICAgICAga2V5Ym9hcmRfYXJyb3dfZG93blxuICAgIDwvbWF0LWljb24+XG4gICAgPCEtLSBFcnJvciBNZXNzYWdlIC0tPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCIhIShuZ0NvbnRyb2wuY29udHJvbC5lcnJvcnMgJiYgc3VibWl0VmFsdWUpXCI+XG4gICAgICB7eyBuZ0NvbnRyb2wuY29udHJvbCB8IGdlbmVyYXRlRXJyb3JNZXNzYWdlcyA6IHNlbGVjdENvbmZpZy5sYWJlbCA6IHNlbGVjdENvbmZpZy5kZWZhdWx0UGF0dGVybktleSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwhLS0gUmVzZXQgQnV0dG9uIC0tPlxuICA8aS10ZWNoLWNsZWFyLXZhbHVlICpuZ0lmPVwic2VsZWN0Q29uZmlnLnJlc2V0XCIgKHJlc2V0VmFsdWUpPVwicmVzZXRWYWx1ZSgpXCI+PC9pLXRlY2gtY2xlYXItdmFsdWU+XG48L2Rpdj5cbiJdfQ==
|
|
455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlLXNlbGVjdC9hdXRvY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUtc2VsZWN0L2F1dG9jb21wbGV0ZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR0EsWUFBWSxFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FB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LENBQUM7K0dBMWFVLDJCQUEyQjttR0FBM0IsMkJBQTJCLDhwQkNuRHhDLGl4VkEyT0EsczhCRDNNSSxPQUFPLG9GQUNQLFVBQVUsaVJBQ1YsSUFBSSw2RkFDSixLQUFLLGtIQUNMLGVBQWUsNEZBQ2YsbUJBQW1CLGdLQUNuQixtQkFBbUIseVRBQ25CLGVBQWUsK3hDQUNmLGVBQWUsc01BQ2YsMkJBQTJCLGdFQUUzQixnQkFBZ0IsZ1BBQ2hCLE9BQU8sc0lBQ1AseUJBQXlCLDhEQUN6QixtQkFBbUIsaUlBQ25CLGtCQUFrQjs7NEZBSVQsMkJBQTJCO2tCQXhCdkMsU0FBUzsrQkFDRSw0QkFBNEIsV0FHN0I7d0JBQ1AsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsMkJBQTJCO3dCQUMzQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCx5QkFBeUI7d0JBQ3pCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3FCQUNuQixjQUNXLElBQUk7aUZBR1EsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNJLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS08sT0FBTztzQkFBbkIsS0FBSztnQkFtQkcsYUFBYTtzQkFBckIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ21CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFzQnhCLHNCQUFzQjtzQkFEckIsWUFBWTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29uZmlnc0ludGVyZmFjZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2F1dG9jb21wbGV0ZS1jb25maWdzLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xOYW1lLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBJbnB1dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2J1dHRvbi10eXBlcy5lbnVtJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ09wdGltaXplZEltYWdlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgR2V0VmFsdWVCeUtleUZyb21PYmplY3RQaXBlIH0gZnJvbSBcIi4uLy4uL3BpcGVzL2dldC12YWx1ZS1ieS1rZXktZnJvbS1vYmplY3QucGlwZVwiO1xuaW1wb3J0IHsgQXJyYXlUb1N0cmluZ1BpcGUgfSBmcm9tIFwiLi4vLi4vcGlwZXMvYXJyYXktdG8tc3RyaW5nLnBpcGVcIjtcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgR2VuZXJhdGVFcnJvck1lc3NhZ2VzUGlwZSB9IGZyb20gXCIuLi8uLi9waXBlcy9nZW5lcmF0ZS1lcnJvci1tZXNzYWdlcy5waXBlXCI7XG5pbXBvcnQgeyBDbGVhclZhbHVlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NsZWFyLXZhbHVlL2NsZWFyLXZhbHVlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaS10ZWNoLWF1dG9jb21wbGV0ZS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgTWF0VG9vbHRpcCxcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBHZXRWYWx1ZUJ5S2V5RnJvbU9iamVjdFBpcGUsXG4gICAgQXJyYXlUb1N0cmluZ1BpcGUsXG4gICAgTmdPcHRpbWl6ZWRJbWFnZSxcbiAgICBNYXRJY29uLFxuICAgIEdlbmVyYXRlRXJyb3JNZXNzYWdlc1BpcGUsXG4gICAgQ2xlYXJWYWx1ZUNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdtYXRTZWxlY3QnKSBtYXRTZWxlY3QhOiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0Jykgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBjbGFzc05hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Ym1pdFZhbHVlITogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VlIEF1dG9jb21wbGV0ZUNvbmZpZ3NJbnRlcmZhY2UgZm9yIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBjb25maWdzKGRhdGE6IEF1dG9jb21wbGV0ZUNvbmZpZ3NJbnRlcmZhY2UpIHtcbiAgICB0aGlzLnNlbGVjdENvbmZpZyA9IGRhdGE7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2YgdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodGhpcy5maXJzdFJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IHRydWVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSB0aGlzLnNlbGVjdENvbmZpZy5wYWdpbmF0ZTtcbiAgICB0aGlzLmZpbmRBbmRTZXREZWZhdWx0VmFsdWVGcm9tRGF0YSgpO1xuICB9O1xuXG4gIEBJbnB1dCgpIGRldGVjdENoYW5nZXMhOiBib29sZWFuO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlbWl0QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoJ2FsbFNlbGVjdGVkJykgYWxsU2VsZWN0ZWQhOiBNYXRTZWxlY3Q7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgZGVmYXVsdFZhbHVlITogYW55O1xuICBkYXRhOiBBcnJheTxhbnk+ID0gW107XG4gIHBhZ2luYXRpb25EYXRhOiBhbnkgPSB7IGN1cnJlbnQ6IDEsIGxhc3Q6IDAsIHNlYXJjaFZhbHVlOiAnJyB9O1xuICBuZ0NvbnRyb2w6IEZvcm1Db250cm9sTmFtZTtcbiAgc2VsZWN0Q29uZmlnITogQXV0b2NvbXBsZXRlQ29uZmlnc0ludGVyZmFjZTtcbiAgZmlyc3RSZXF1ZXN0ID0gZmFsc2U7XG4gIHNob3dQbGFjZWhvbGRlciA9IHRydWU7XG4gIGlzTmVlZGVkRm9yUmVjYWxsID0gZmFsc2U7XG4gIHNob3dpbmdWYWx1ZTogYW55O1xuICBzZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uOiBBcnJheTxhbnk+ID0gW107XG4gIHNlYXJjaFRpbWVvdXRJZDogYW55O1xuICB0YWJWaXNpYmlsaXR5ITogYm9vbGVhbjtcbiAgYWNjZXNzVG9OZXh0UmVxdWVzdCA9IHRydWU7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIGJsb2NrUmVjYWxsRGVmYXVsdFZhbHVlU2V0dGVyID0gZmFsc2U7XG4gIGJhc2VEYXRhOiBhbnk7XG4gIHJlcXVlc3RMb2FkaW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBCdXR0b25UeXBlID0gQnV0dG9uVHlwZTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJylcbiAgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYlZpc2liaWxpdHkgPSAhZG9jdW1lbnQuaGlkZGVuO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKTtcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbikge1xuICAgICAgdGhpcy5pc05lZWRlZEZvclJlY2FsbCA9IHRydWU7XG4gICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlXG4gICAgICB9LCA0MDAwKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXRTZXJ2aWNlOiBJbnB1dFNlcnZpY2UpIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5wdXRTZXJ2aWNlLmluamVjdE5nQ29udHJvbCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RDb25maWcnXSAmJiB0aGlzLnNlbGVjdENvbmZpZykge1xuICAgICAgaWYgKCh0eXBlb2YgdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGUpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIC8vIElmIHdlIGhhdmUgZGF0YSBhbmQgYSB2YWx1ZVxuICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggJiYgbmV3VmFsdWUpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZGVmYXVsdCB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSBuZXcgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZSB8fCB0aGlzLmRlZmF1bHRWYWx1ZS5pZCAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAvLyBSZXNldCB0aGUgYmxvY2sgZmxhZyB0byBhbGxvdyB1cGRhdGluZyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLmJsb2NrUmVjYWxsRGVmYXVsdFZhbHVlU2V0dGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5maW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsdWUgYnV0IG5vIGRhdGEsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGRhdGFcbiAgICAgICAgdGhpcy5ibG9ja1JlY2FsbERlZmF1bHRWYWx1ZVNldHRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTmVlZGVkRm9yUmVjYWxsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZUNhbGxEYXRhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXJkUmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0RGF0YSgnJywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHluYW1pYyByZXF1ZXN0IGZvciBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgLSBUaGUgaW5wdXQgdmFsdWUgdG8gc2VhcmNoIG9wdGlvbnMgYnkuXG4gICAqIEBwYXJhbSBmcm9tU2VhcmNoIC0gQWNjZXNzIGZvciBzZWFyY2guXG4gICAqIEByZXR1cm5zIFNlbGVjdCBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YShzZWFyY2hUZXh0Pzogc3RyaW5nLCBmcm9tU2VhcmNoPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghZnJvbVNlYXJjaCAmJiAhdGhpcy5hY2Nlc3NUb05leHRSZXF1ZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdExvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnJvbVNlYXJjaCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5jdXJyZW50ID0gMTtcbiAgICAgIHRoaXMuYWNjZXNzVG9OZXh0UmVxdWVzdCA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2luYXRpb25EYXRhLnNlYXJjaFZhbHVlID0gc2VhcmNoVGV4dCB8fCAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmdW5jdGlvblRvRG8gPSB0aGlzLnNlbGVjdENvbmZpZy5wYWdpbmF0ZSh0aGlzLnBhZ2luYXRpb25EYXRhLmN1cnJlbnQsIHRoaXMucGFnaW5hdGlvbkRhdGE/LnNlYXJjaFZhbHVlIHx8ICcnKTtcblxuICAgIHRoaXMucmVxdWVzdExvYWRpbmcgPSB0cnVlO1xuICAgIGZ1bmN0aW9uVG9Ebz8uc3Vic2NyaWJlKChkYXRhOiBBcnJheTxhbnk+IHwgYW55KSA9PiB7XG4gICAgICBjb25zdCBkYXRhVG9BZGQgPSAoJ2NvbnRlbnQnIGluIGRhdGEpID8gZGF0YS5jb250ZW50IDogZGF0YTtcblxuICAgICAgaWYgKCdjb250ZW50JyBpbiBkYXRhKSB7XG4gICAgICAgIHRoaXMuYWNjZXNzVG9OZXh0UmVxdWVzdCA9ICFkYXRhLmxhc3QgfHwgKGRhdGEudG90YWxQYWdlcyA+IHRoaXMucGFnaW5hdGlvbkRhdGEuY3VycmVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YSA9IChmcm9tU2VhcmNoIHx8IHRoaXMuc2VsZWN0Q29uZmlnPy5ibG9ja1BhZ2luYXRpb24pID8gZGF0YVRvQWRkIDogWy4uLnRoaXMuZGF0YSwgLi4uZGF0YVRvQWRkXTtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXF1ZXN0TG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWRhdGFUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5sYXN0ID0gdGhpcy5wYWdpbmF0aW9uRGF0YS5jdXJyZW50O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFnaW5hdGlvbkRhdGEuY3VycmVudCArPSAxO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRGF0YS5sYXN0ICs9IDE7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTtcbiAgICAgIH0sIDEwKVxuICAgIH0sICgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXF1ZXN0TG9hZGluZyA9IGZhbHNlO1xuICAgIH0pXG4gIH1cblxuICBmaW5kQW5kU2V0RGVmYXVsdFZhbHVlRnJvbURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29uZmlnLm11bHRpcGxlKSB7XG4gICAgICBpZiAodGhpcy5uZ0NvbnRyb2wudmFsdWUgJiYgdGhpcy5uZ0NvbnRyb2wudmFsdWUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93aW5nVmFsdWUodGhpcy5kYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMubmdDb250cm9sLnZhbHVlWzBdKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgYWZ0ZXIgbWlncmF0aW5nIGFsbCBzZWxlY3RzXG4gICAgICAgIC8vIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIC8vIGlmICghdGhpcy5uZ0NvbnRyb2wudmFsdWUgJiYgIXRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIC8vIHRoaXMubmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbC52YWx1ZSAmJiAhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBzZXREZWZhdWx0VmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGhpcy5uZ0NvbnRyb2wudmFsdWUpO1xuICAgIHRoaXMuYmFzZURhdGEgPSB0aGlzLmRlZmF1bHRWYWx1ZVxuICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCgpXG4gICAgdGhpcy5zZXRTaG93aW5nVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgb3B0aW9uQ2xpY2soc2hvd2luZ0RhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYmFzZURhdGEgPSBzaG93aW5nRGF0YVxuICAgIGlmICghdGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuc2V0U2hvd2luZ1ZhbHVlKHNob3dpbmdEYXRhKTtcbiAgICAgIHRoaXMubWF0U2VsZWN0LmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVTaG93aW5nRGF0YUluU2VsZWN0ZWRPcHRpb25zTXVsdGlwbGVDYXNlKHNob3dpbmdEYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1c091dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd2luZ1ZhbHVlKHNob3dpbmdEYXRhKTtcbiAgICB0aGlzLnNob3dQbGFjZWhvbGRlciA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlU2hvd2luZ0RhdGFJblNlbGVjdGVkT3B0aW9uc011bHRpcGxlQ2FzZShzaG93aW5nRGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc2hvd2luZ0RhdGFCeUpzb24gPSBKU09OLnN0cmluZ2lmeShzaG93aW5nRGF0YSk7XG4gICAgY29uc3QgaW5kZXhPZkV4aXN0aW5nT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLmZpbmRJbmRleChcbiAgICAgIChvcHRpb25WYWx1ZTogYW55KSA9PiBKU09OLnN0cmluZ2lmeShvcHRpb25WYWx1ZSkgPT09IHNob3dpbmdEYXRhQnlKc29uXG4gICAgKVxuICAgIGlmIChpbmRleE9mRXhpc3RpbmdPcHRpb24gPj0gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLnNwbGljZShpbmRleE9mRXhpc3RpbmdPcHRpb24sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uRm9yTXVsdGlwbGVTZWxlY3Rpb24ucHVzaChzaG93aW5nRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYWRkTmV3SXRlbUV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuaXNOZWVkZWRGb3JSZWNhbGwgPSB0cnVlO1xuICAgIHRoaXMuZW1pdEFjdGlvbi5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGFuZCBzaG93LlxuICAgKiBAcGFyYW0gZGF0YSAtIEV4aXN0aW5nIGNob3NlbiBkYXRhLlxuICAgKi9cbiAgc2V0U2hvd2luZ1ZhbHVlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RDb25maWcuc2VhcmNoKSB7XG4gICAgICBjb25zdCBmdWxsVGV4dDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkZvck11bHRpcGxlU2VsZWN0aW9uLmZvckVhY2goKG9wdGlvbkRhdGE6IGFueSkgPT4ge1xuICAgICAgICBmdWxsVGV4dC5wdXNoKHRoaXMuY29sbGVjdEFuZEdldFNlbGVjdGlvblRvU2hvd0Zvck9uZU9wdGlvbihvcHRpb25EYXRhKSlcbiAgICAgIH0pXG4gICAgICB0aGlzLnNob3dpbmdWYWx1ZSA9IGZ1bGxUZXh0LmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93aW5nVmFsdWUgPSB0aGlzLmNvbGxlY3RBbmRHZXRTZWxlY3Rpb25Ub1Nob3dGb3JPbmVPcHRpb24oZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuYmxvY2tSZWNhbGxEZWZhdWx0VmFsdWVTZXR0ZXIgPSB0cnVlO1xuICB9XG5cbiAgY29sbGVjdEFuZEdldFNlbGVjdGlvblRvU2hvd0Zvck9uZU9wdGlvbihkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBpbmNsdWRlID0gZGF0YTtcbiAgICBsZXQgaW5jbHVkZU9wdGlvbmFsID0gZGF0YTtcblxuICAgIGlmICh0aGlzLnNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5S2V5LmZvckVhY2goKHBhcmFtOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBwYXJhbS5mb3JFYWNoKChrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaW5jbHVkZSA9IChpbmNsdWRlKSA/IGluY2x1ZGVba2V5XSA6IG51bGw7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmNsdWRlID0gaW5jbHVkZVtwYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuc2hvd0Z1bGxUZXh0V2l0aE9wdGlvbmFsT25TZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q29uZmlnLnZhbHVlVG9TaG93QnlQYXJhbT8uZm9yRWFjaCgocGFyYW06IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCBzdHJpbmcpID0+IHtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBwYXJhbS5mb3JFYWNoKChrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBpbmNsdWRlT3B0aW9uYWwgPSAoaW5jbHVkZU9wdGlvbmFsKSA/IGluY2x1ZGVPcHRpb25hbFtrZXldIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluY2x1ZGVPcHRpb25hbCA9IGluY2x1ZGVPcHRpb25hbFtwYXJhbV07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RDb25maWcudmFsdWVUb1Nob3dCeVBhcmFtICYmIHR5cGVvZiBpbmNsdWRlT3B0aW9uYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaW5jbHVkZSArPSAodGhpcy5zZWxlY3RDb25maWcud2l0aFBhcmFtU3ltYm9sIHx8ICcnKSArIGluY2x1ZGVPcHRpb25hbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGU7XG4gIH1cblxuICAvKipcbiAgICogQmxvY2sgYW5vdGhlciBldmVudHMuXG4gICAqIEBwYXJhbSBldmVudCAtIEVsZW1lbnQgY2xpY2sgZXZlbnQuXG4gICAqL1xuICBwcmV2ZW50RGVmYXVsdChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdENvbmZpZy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICByZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQoZWxlbWVudDogTWF0U2VsZWN0KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29uZmlnLnBhZ2luYXRlT25TY3JvbGwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFuZWwgPSBlbGVtZW50LnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGV2ZW50OiBhbnkpID0+IHRoaXMubG9hZERhdGFPblNjcm9sbChldmVudCkpO1xuICB9XG5cbiAgbG9hZERhdGFPblNjcm9sbChldmVudDogYW55KSB7XG4gICAgY29uc3QgcG9zID0gKGV2ZW50LnRhcmdldC5zY3JvbGxUb3AgfHwgZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCkgKyBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IG1heCA9IGV2ZW50LnRhcmdldC5zY3JvbGxIZWlnaHQ7XG4gICAgaWYgKChwb3MgKyAxKSA+PSBtYXgpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EYXRhLmN1cnJlbnQgPT09IHRoaXMucGFnaW5hdGlvbkRhdGEubGFzdCB8fCB0aGlzLnNlbGVjdENvbmZpZy5ibG9ja1BhZ2luYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNTZWFyY2hJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuc2VhcmNoICYmIHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Rm9jdXNPdXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc05lZWRlZEZvclJlY2FsbCA9ICEhdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyVGltZW91dEZvclNlYXJjaCgpO1xuICB9XG5cbiAgcmVzZXRWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG51bGwpO1xuICAgIHRoaXMubmdDb250cm9sLnJlc2V0KG51bGwpO1xuICAgIHRoaXMuaW5wdXRGb2N1c091dCgpO1xuICB9XG5cbiAgZ2V0RGF0YVdpdGhTZWFyY2godmFsdWU6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0Rm9yU2VhcmNoKCk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAxKSB7XG4gICAgICB0aGlzLnNlYXJjaFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmdldERhdGEodmFsdWUsIHRydWUpXG4gICAgICB9LCA4MDApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoIDw9IDEgJiYgZXZlbnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgdGhpcy5nZXREYXRhKHZhbHVlLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyVGltZW91dEZvclNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnNlYXJjaFRpbWVvdXRJZCA9IDA7XG4gICAgfVxuICB9XG5cbiAgb3BlblNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb25maWcuZGlzYWJsZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93UGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Lm9wZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNob3dQbGFjZWhvbGRlciA9ICF0aGlzLnNob3dQbGFjZWhvbGRlcjtcbiAgICBpZiAoIXRoaXMuc2hvd1BsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlQ2FsbERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVBhbmVsQW5kVW5zZXRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hdFNlbGVjdC5jbG9zZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpXG4gICAgfVxuICB9XG5cbiAgb3BlbmVkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmlzTmVlZGVkRm9yUmVjYWxsKSB7XG4gICAgICAgIHRoaXMucmVDYWxsRGF0YSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0Q29uZmlnLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLnJlQ2FsbERhdGEoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHJlQ2FsbERhdGEoKTogdm9pZCB7XG4gICAgLy8gVE9ETyByZWZhY3RvciB0aGlzIHBhcnRcbiAgICBpZiAoIXRoaXMuaXNOZWVkZWRGb3JSZWNhbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2luYXRpb25EYXRhID0ge1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGxhc3Q6IDAsXG4gICAgfTtcbiAgICB0aGlzLmFjY2Vzc1RvTmV4dFJlcXVlc3QgPSB0cnVlO1xuICAgIGlmICgodHlwZW9mIHRoaXMuc2VsZWN0Q29uZmlnLnBhZ2luYXRlKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5zZWxlY3RDb25maWcucGFnaW5hdGU7XG4gICAgfVxuICAgIHRoaXMuaXNOZWVkZWRGb3JSZWNhbGwgPSBmYWxzZTtcbiAgfVxuXG4gIGVtaXRTZWxlY3Rpb25DaGFuZ2VBbmRDbG9zZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29uZmlnLm11bHRpcGxlKSB7XG4gICAgICBpZiAoIWV2ZW50LnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1hdFNlbGVjdC5jbG9zZSgpO1xuICB9XG5cbiAgLypcbiAgICogT3BlbiBtYXQtc2VsZWN0IGFuZCBmb2N1cyBvbiBzZWFyY2ggb24gaWNvbiBjbGlja1xuICAgKi9cbiAgaWNvbkNsaWNrKG1hdFNlbGVjdDogTWF0U2VsZWN0LCBzZWFyY2hJbnB1dD86IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICBtYXRTZWxlY3Qub3BlbigpO1xuICAgIHNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICB9XG5cbiAgLypcbiAgKiBDdXN0b20gZXJyb3Igc3RhdGUgbWF0Y2hlciBmb3IgbWF0LXNlbGVjdCB0byBwcm9wZXJseSBzaG93IGVycm9yIHN0YXRlIGluIG1hdC1mb3JtLWZpZWxkXG4gICAqL1xuICBjdXN0b21FcnJvclN0YXRlTWF0Y2hlciA9IHtcbiAgICBpc0Vycm9yU3RhdGU6IChjb250cm9sOiBhbnksIGZvcm06IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIHRoaXMuc3VibWl0VmFsdWUpO1xuICAgIH1cbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJuZXctbWF0LWF1dG9jb21wbGV0ZVwiIGlkPVwibWF0X2F1dG9jb21wbGV0ZVwiXG4gICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdtYXQtc2VsZWN0LXdpdGhvdXRfaWNvbic6ICFzZWxlY3RDb25maWcuaWNvblVybCAmJiAhc2VsZWN0Q29uZmlnLmFjdGl2ZVN0YXRlSWNvblVybCxcbiAgICAgICAgICAgICdtYXQtc2VsZWN0LXdpdGgtc2VhcmNoJzogc2VsZWN0Q29uZmlnLnNlYXJjaCxcbiAgICAgICAgICAgICd3aXRob3V0LWxhYmVsJzogc2VsZWN0Q29uZmlnLmhpZGVMYWJlbCxcbiAgICAgICAgICAgICdpbnZhbGlkX2ZpZWxkJzogbmdDb250cm9sLmNvbnRyb2wuZXJyb3JzICYmIHN1Ym1pdFZhbHVlLFxuICAgICAgICAgICAgJ3JlYWRvbmx5LWZpZWxkJzogc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkXG4gICAgICAgICB9XCJcbiAgICAgW21hdFRvb2x0aXBdPVwiKHNlbGVjdENvbmZpZy5ob3ZlciAmJiAhbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgPyAoKHNlbGVjdENvbmZpZy5ob3ZlciB8fCAnJykgfCB0cmFuc2xhdGUpIDogJycpXCJcbiAgICAgW21hdFRvb2x0aXBDbGFzc109XCInbWF0LW1kYy10b29sdGlwIGJpZy10ZC1tYXQtdG9vbHRpcCdcIlxuICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidhYm92ZSdcIlxuICAgICAqbmdJZj1cInNlbGVjdENvbmZpZyAmJiBuZ0NvbnRyb2xcIj5cblxuICA8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cIiFzZWxlY3RDb25maWcuaGlkZUxhYmVsXCI+XG4gICAgPG1hdC1sYWJlbCBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3JlYWRvbmx5LWNvbG9yJyA6IHNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCxcbiAgICAgICAgICAnaW52YWxpZC1sYWJlbC1jb2xvcic6ICEhKG5nQ29udHJvbC5jb250cm9sLmVycm9ycyAmJiBzdWJtaXRWYWx1ZSlcbiAgICAgICAgfVwiPlxuICAgICAge3sgc2VsZWN0Q29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtbGFiZWw+XG4gICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RDb25maWcucmVxdWlyZWRcIiBjbGFzcz1cInJlcXVpcmVkLWlucHV0XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlYWRvbmx5LWNvbG9yJyA6IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkfVwiPio8L3NwYW4+XG4gIDwvZGl2PlxuXG5cbiAgPCEtLSBTZWFyY2ggSW5wdXQgLS0+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQgdy0xMDBcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgIFtuZ0NsYXNzXT1cInsgaGlkZV9pbnB1dF9wbGFjZWhvbGRlcjogc2hvd1BsYWNlaG9sZGVyIHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkIH1cIlxuICAgICAgICpuZ0lmPVwic2VsZWN0Q29uZmlnLnNlYXJjaFwiXG4gID5cbiAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgaWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydwci0yNSc6ICFzZWxlY3RDb25maWcuaWNvblVybH1cIlxuICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkIHx8IHNlbGVjdENvbmZpZy5ob3ZlclwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIobmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgfHwgc2VsZWN0Q29uZmlnLmhvdmVyKSA/ICcnIDogJ1NlYXJjaCdcIlxuICAgICAgICAgICAoZm9jdXNvdXQpPVwiaW5wdXRGb2N1c091dCgpXCJcbiAgICAgICAgICAgKGZvY3VzKT1cIm9wZW5TZWxlY3Rpb24oKVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgIChrZXl1cCk9XCJnZXREYXRhV2l0aFNlYXJjaChzZWFyY2hJbnB1dC52YWx1ZSwkZXZlbnQpXCI+XG5cbiAgICA8IS0tIFNlYXJjaCBJY29uIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoLWljb25cIj5cbiAgICAgICAgICAgIDxpLXRlY2gtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtci0xMFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdENvbmZpZy5yZWFkT25seSB8fCBuZ0NvbnRyb2wuY29udHJvbC5kaXNhYmxlZCA/ICdyZWFkb25seS1jb2xvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJ1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0Q29uZmlnLmljb25QcmVmaXggJiYgIXNob3dQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtpY29uTmFtZV09XCJzZWxlY3RDb25maWcuaWNvblByZWZpeCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBtYXRQcmVmaXhcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvaS10ZWNoLWljb24tYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUGxhY2Vob2xkZXIvU2VsZWN0ZWQgVmFsdWUgRGlzcGxheSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQbGFjZWhvbGRlciAmJiBzZWxlY3RDb25maWcuc2VhcmNoXCI+XG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS1wbGFjZWhvbGRlclwiXG4gICAgICAgICAqbmdJZj1cIighbmdDb250cm9sPy52YWx1ZSAmJiAhbmdDb250cm9sPy52YWx1ZT8ubGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAgICAoc2VsZWN0Q29uZmlnLm11bHRpcGxlICYmIG5nQ29udHJvbD8udmFsdWUgJiYgIW5nQ29udHJvbD8udmFsdWU/Lmxlbmd0aClcIlxuICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkID8gJ3JlYWRvbmx5LWNvbG9yJyA6ICdkZWZhdWx0LWZvcm0taWNvbi1jb2xvcidcIlxuICAgID5cbiAgICAgIHt7ICgoc2VsZWN0Q29uZmlnLnBsYWNlaG9sZGVyIHx8ICcnKSB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXBsYWNlaG9sZGVyIGN1c3RvbS12YWx1ZSBlbGxpcHNpc1wiXG4gICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3ByLTQyJzogc2VsZWN0Q29uZmlnLmljb25VcmwsXG4gICAgICAgICAgICAgICAgJ3JlYWRvbmx5LWNvbG9yJzogc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICdkZWZhdWx0LWZvcm0taWNvbi1jb2xvcic6ICEoc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkKVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgKm5nSWY9XCJuZ0NvbnRyb2w/LnZhbHVlXCJcbiAgICA+XG4gICAgICB7e3Nob3dpbmdWYWx1ZX19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ3VzdG9tIEljb24gLS0+XG4gIDxpbWcgY2xhc3M9XCJsZWZ0X2ljb25fbmV3IHBvaW50ZXJcIlxuICAgICAgIGFsdD1cIlRvZ2dsZSBTZWxlY3Rpb25cIlxuICAgICAgIChjbGljayk9XCJpY29uQ2xpY2sobWF0U2VsZWN0LCBzZWFyY2hJbnB1dClcIlxuICAgICAgICpuZ0lmPVwiIXNlbGVjdENvbmZpZy5tYXRJY29uTmFtZSAmJiAoc2VsZWN0Q29uZmlnLmljb25VcmwgfHwgc2VsZWN0Q29uZmlnLmFjdGl2ZVN0YXRlSWNvblVybClcIlxuICAgICAgIFtzcmNdPVwiJ2Fzc2V0cy9pbWFnZXMvaWNvbnMvZ2xvYmFsLycgKyAobmdDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmIHNlbGVjdENvbmZpZz8uYWN0aXZlU3RhdGVJY29uVXJsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENvbmZpZy5hY3RpdmVTdGF0ZUljb25VcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZWN0Q29uZmlnLmljb25VcmwpXCI+XG5cbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LTEwMFwiIChjbGljayk9XCJzZWxlY3RDb25maWc/LnNlYXJjaCA/IGZvY3VzU2VhcmNoSW5wdXQoKSA6IG51bGxcIj5cbiAgICA8IS0tIE1hdGVyaWFsIFNlbGVjdCAtLT5cbiAgICA8bWF0LXNlbGVjdCAjbWF0U2VsZWN0PVwibWF0U2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCInYXV0b2NvbXBsZXRlLXRyYW5zZm9ybS1wYW5lbC1sb2NhdGlvbidcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcGxhY2Vob2xkZXJdPVwiKHNlbGVjdENvbmZpZy5wbGFjZWhvbGRlciB8fCAnJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cInNlbGVjdENvbmZpZy5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cInNlbGVjdENvbmZpZy5maWx0cmF0aW9uS2V5IHx8ICcnXCJcbiAgICAgICAgICAgICAgICAob3BlbmVkKT1cInJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudChtYXRTZWxlY3QpXCJcbiAgICAgICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cIm9wZW5lZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJzZWxlY3RDb25maWcubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiZW1pdFNlbGVjdGlvbkNoYW5nZUFuZENsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJjdXN0b21FcnJvclN0YXRlTWF0Y2hlclwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihzZWxlY3RDb25maWcucGxhY2Vob2xkZXIgfHwgJycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWRcIlxuICAgID5cblxuICAgICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJwZW5kaW5nXCIgY2xhc3M9XCJvcHRpb25fbG9hZGluZyByZWxhdGl2ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdF9sb2FkaW5nXCI+XG4gICAgICAgICAgPGltZyBuZ1NyYz1cIi4vbG9hZGVyLnN2Z1wiIGFsdD1cIlwiIGhlaWdodD1cIjIwMFwiIHdpZHRoPVwiMjAwXCIvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lmxlbmd0aCAmJiAhcGVuZGluZ1wiPlxuICAgICAgICA8IS0tIEFkZCBOZXcgT3B0aW9uIC0tPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInNlbGVjdENvbmZpZy5hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb2ludGVyIGFkZF9uZXdcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKTthZGROZXdJdGVtRXZlbnQoKVwiPlxuICAgICAgICAgIDwhLS0oY2xpY2spPVwibmdDb250cm9sLmNvbnRyb2wucmVzZXQobnVsbCk7XG4gICAgICAgICAgICAgIG1hdFNlbGVjdC5fb25CbHVyKCk7Y2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKTthZGROZXdJdGVtRXZlbnQoKVwiPi0tPlxuICAgICAgICAgIDxpLXRlY2gtYnV0dG9uXG4gICAgICAgICAgICBbdHlwZV09XCJCdXR0b25UeXBlLk9VVExJTkVcIlxuICAgICAgICAgICAgW2ZvbnRJY29uXT1cIidhZGQnXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIignZHJvcGRvd25fYWRkX2l0ZW0nIHwgdHJhbnNsYXRlIDoge0lOUFVUX05BTUU6IChzZWxlY3RDb25maWcubGFiZWwgfCB0cmFuc2xhdGUpfSkgXCJcbiAgICAgICAgICAgIFtjdXN0b21DbGFzc109XCIndy0xMDAgbWF0LWF1dG9jb21wbGV0ZS1zZWxlY3QtYnV0dG9uJ1wiPlxuICAgICAgICAgIDwvaS10ZWNoLWJ1dHRvbj5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgIDwhLS0gUmVndWxhciBPcHRpb25zIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdENvbmZpZz8uY2hhbmdlVGV4dCAmJiBkYXRhLmxlbmd0aFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RDb25maWcudmFsdWVCeUtleSB8IGdldFZhbHVlQnlLZXlGcm9tT2JqZWN0IDogaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwib3B0aW9uQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwicHJldmVudERlZmF1bHQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RDb25maWc/Lm5lZWRUcmFuc2xhdGVPcHRpb25zKSB7XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgKChzZWxlY3RDb25maWcudmFsdWVUb1Nob3dCeUtleSB8IGdldFZhbHVlQnlLZXlGcm9tT2JqZWN0XG4gICAgICAgICAgICAgIDogaXRlbSA6IHNlbGVjdENvbmZpZy52YWx1ZVRvU2hvd0J5UGFyYW0gOiBzZWxlY3RDb25maWcud2l0aFBhcmFtU3ltYm9sKSB8fCAnJykgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB9QGVsc2Uge1xuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICgoc2VsZWN0Q29uZmlnLnZhbHVlVG9TaG93QnlLZXkgfCBnZXRWYWx1ZUJ5S2V5RnJvbU9iamVjdFxuICAgICAgICAgICAgICA6IGl0ZW0gOiBzZWxlY3RDb25maWcudmFsdWVUb1Nob3dCeVBhcmFtIDogc2VsZWN0Q29uZmlnLndpdGhQYXJhbVN5bWJvbCkgfHwgJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEN1c3RvbSBUZXh0IE9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RDb25maWc/LmNoYW5nZVRleHQgJiYgZGF0YS5sZW5ndGhcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0Q29uZmlnLnZhbHVlQnlLZXkgfCBnZXRWYWx1ZUJ5S2V5RnJvbU9iamVjdCA6IGl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9wdGlvbkNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInByZXZlbnREZWZhdWx0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RDb25maWc/LmNoYW5nZVRleHRbaXRlbV0uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIHt7IHNlbGVjdENvbmZpZz8ubmVlZFRyYW5zbGF0ZU9wdGlvbnMgPyAoc2VsZWN0Q29uZmlnPy5jaGFuZ2VUZXh0W2l0ZW1dLnRleHQgfCB0cmFuc2xhdGUgKSA6IHNlbGVjdENvbmZpZz8uY2hhbmdlVGV4dFtpdGVtXS50ZXh0fX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRW1wdHkgU3RhdGUgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBlbmRpbmcgJiYgIWRhdGEubGVuZ3RoXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uIGRpc2FibGVkIGNsYXNzPVwiZW1wdHlfc2VsZWN0aW9uX3N0YXRlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNfYW5kX3RpbGUgYWRkX25ldyBmbGV4X2NvbHVtbiB3LTEwMCBmbGV4X2NlbnRlcl9hbGlnbl9jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdkcm9wZG93bl9ub19pdGVtcycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMTBcIj5cbiAgICAgICAgICAgICAgPGktdGVjaC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdENvbmZpZz8uYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiQnV0dG9uVHlwZS5PVVRMSU5FXCJcbiAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwiY2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKTthZGROZXdJdGVtRXZlbnQoKVwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidtYXQtYXV0b2NvbXBsZXRlLXNlbGVjdC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICBbZm9udEljb25dPVwiJ2FkZCdcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIignZHJvcGRvd25fYWRkX2l0ZW0nIHwgdHJhbnNsYXRlIDoge0lOUFVUX05BTUU6IChzZWxlY3RDb25maWcubGFiZWwgfCB0cmFuc2xhdGUpfSkgXCI+XG4gICAgICAgICAgICAgIDwvaS10ZWNoLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwic2VsZWN0Q29uZmlnLmljb25QcmVmaXhcIlxuICAgICAgICAgICAgICBtYXRQcmVmaXhcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAncmVhZG9ubHktY29sb3InIDogIXNlbGVjdENvbmZpZ1snaWNvblByZWZpeENvbG9yJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkKSxcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJyA6ICFzZWxlY3RDb25maWdbJ2ljb25QcmVmaXhDb2xvciddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoKHNlbGVjdENvbmZpZz8uWydpY29uUHJlZml4VG9vbHRpcCddIHx8ICcnKSB8IHRyYW5zbGF0ZSlcIlxuICAgID57eyBzZWxlY3RDb25maWcuaWNvblByZWZpeCB9fVxuICAgIDwvbWF0LWljb24+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJzZWxlY3RDb25maWdbJ2ljb25QcmVmaXhTdmcnXVwiXG4gICAgICAgICAgICAgIG1hdFByZWZpeFxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoKHNlbGVjdENvbmZpZz8uWydpY29uUHJlZml4VG9vbHRpcCddIHx8ICcnKSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICBbc3ZnSWNvbl09XCJzZWxlY3RDb25maWdbJ2ljb25QcmVmaXhTdmcnXSB8fCAnJ1wiXG4gICAgPjwvbWF0LWljb24+XG5cbiAgICA8aS10ZWNoLWljb24tYnV0dG9uXG4gICAgICAqbmdJZj1cInNlbGVjdENvbmZpZy5zZWFyY2ggJiYgc2VsZWN0Q29uZmlnLmNsZWFyYWJsZSAmJiAhbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQgJiYgISFuZ0NvbnRyb2wuY29udHJvbC52YWx1ZVwiXG4gICAgICBpY29uTmFtZT1cImNhbmNlbFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgZmFsc2VcIlxuICAgICAgW25nQ2xhc3NdPVwic2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkID8gJ3JlYWRvbmx5LWNvbG9yJyA6ICdkZWZhdWx0LWZvcm0taWNvbi1jb2xvcidcIlxuICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBuZ0NvbnRyb2wuY29udHJvbC5yZXNldChudWxsKTtcbiAgICAgICAgbWF0U2VsZWN0Ll9vbkJsdXIoKTtcbiAgICAgICAgY2xvc2VQYW5lbEFuZFVuc2V0Rm9jdXMoKVxuICAgICAgXCJcbiAgICA+XG4gICAgPC9pLXRlY2gtaWNvbi1idXR0b24+XG4gICAgPG1hdC1pY29uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIGNsYXNzPVwic2VsZWN0LWFycm93XCJcbiAgICAgIFtjbGFzcy5vcGVuXT1cIm1hdFNlbGVjdC5wYW5lbE9wZW5cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3JlYWRvbmx5LWNvbG9yJzogc2VsZWN0Q29uZmlnLnJlYWRPbmx5IHx8IG5nQ29udHJvbC5jb250cm9sLmRpc2FibGVkLFxuICAgICAgICAgICAgJ2RlZmF1bHQtZm9ybS1pY29uLWNvbG9yJzogIShzZWxlY3RDb25maWcucmVhZE9ubHkgfHwgbmdDb250cm9sLmNvbnRyb2wuZGlzYWJsZWQpLFxuICAgICAgICAgICAgJ210LTgnOiAhIW5nQ29udHJvbC5jb250cm9sLnZhbHVlICYmIHNlbGVjdENvbmZpZy5jbGVhcmFibGVcbiAgICAgICAgIH1cIlxuICAgID5cbiAgICAgIGtleWJvYXJkX2Fycm93X2Rvd25cbiAgICA8L21hdC1pY29uPlxuICAgIDwhLS0gRXJyb3IgTWVzc2FnZSAtLT5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiISEobmdDb250cm9sLmNvbnRyb2wuZXJyb3JzICYmIHN1Ym1pdFZhbHVlKVwiPlxuICAgICAge3sgbmdDb250cm9sLmNvbnRyb2wgfCBnZW5lcmF0ZUVycm9yTWVzc2FnZXMgOiBzZWxlY3RDb25maWcubGFiZWwgOiBzZWxlY3RDb25maWcuZGVmYXVsdFBhdHRlcm5LZXkgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIFJlc2V0IEJ1dHRvbiAtLT5cbiAgPGktdGVjaC1jbGVhci12YWx1ZSAqbmdJZj1cInNlbGVjdENvbmZpZy5yZXNldFwiIChyZXNldFZhbHVlKT1cInJlc2V0VmFsdWUoKVwiPjwvaS10ZWNoLWNsZWFyLXZhbHVlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -642,7 +642,7 @@ class AutocompleteSelectComponent {
|
|
|
642
642
|
this.emitAction = new EventEmitter();
|
|
643
643
|
this.pending = false;
|
|
644
644
|
this.data = [];
|
|
645
|
-
this.paginationData = { current: 1, last: 0 };
|
|
645
|
+
this.paginationData = { current: 1, last: 0, searchValue: '' };
|
|
646
646
|
this.firstRequest = false;
|
|
647
647
|
this.showPlaceholder = true;
|
|
648
648
|
this.isNeededForRecall = false;
|
|
@@ -707,8 +707,9 @@ class AutocompleteSelectComponent {
|
|
|
707
707
|
if (fromSearch) {
|
|
708
708
|
this.paginationData.current = 1;
|
|
709
709
|
this.accessToNextRequest = true;
|
|
710
|
+
this.paginationData.searchValue = searchText || '';
|
|
710
711
|
}
|
|
711
|
-
const functionToDo = this.selectConfig.paginate(this.paginationData.current,
|
|
712
|
+
const functionToDo = this.selectConfig.paginate(this.paginationData.current, this.paginationData?.searchValue || '');
|
|
712
713
|
this.requestLoading = true;
|
|
713
714
|
functionToDo?.subscribe((data) => {
|
|
714
715
|
const dataToAdd = ('content' in data) ? data.content : data;
|
|
@@ -955,7 +956,7 @@ class AutocompleteSelectComponent {
|
|
|
955
956
|
this.pending = true;
|
|
956
957
|
this.paginationData = {
|
|
957
958
|
current: 1,
|
|
958
|
-
last: 0
|
|
959
|
+
last: 0,
|
|
959
960
|
};
|
|
960
961
|
this.accessToNextRequest = true;
|
|
961
962
|
if ((typeof this.selectConfig.paginate) === 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i-tech-shared-components.mjs","sources":["../../../projects/shared-components/src/lib/pipes/generate-error-messages.pipe.ts","../../../projects/shared-components/src/lib/pipes/array-to-string.pipe.ts","../../../projects/shared-components/src/lib/pipes/get-value-by-key-from-object.pipe.ts","../../../projects/shared-components/src/lib/services/input.service.ts","../../../projects/shared-components/src/lib/services/parse-date.service.ts","../../../projects/shared-components/src/lib/interfaces/button-types.enum.ts","../../../projects/shared-components/src/lib/interfaces/label-type.enum.ts","../../../projects/shared-components/src/lib/directives/input-mask.directive.ts","../../../projects/shared-components/src/lib/components/icon-button/icon-button.component.ts","../../../projects/shared-components/src/lib/components/icon-button/icon-button.component.html","../../../projects/shared-components/src/lib/components/text/text-input.component.ts","../../../projects/shared-components/src/lib/components/text/text-input.component.html","../../../projects/shared-components/src/lib/components/button/button.component.ts","../../../projects/shared-components/src/lib/components/button/button.component.html","../../../projects/shared-components/src/lib/components/clear-value/clear-value.component.ts","../../../projects/shared-components/src/lib/components/autocomplete-select/autocomplete-select.component.ts","../../../projects/shared-components/src/lib/components/autocomplete-select/autocomplete-select.component.html","../../../projects/shared-components/src/lib/directives/date-mask.directive.ts","../../../projects/shared-components/src/lib/components/date-picker/date-picker.component.ts","../../../projects/shared-components/src/lib/components/date-picker/date-picker.component.html","../../../projects/shared-components/src/lib/components/date-range-datepicker/date-range-datepicker.component.ts","../../../projects/shared-components/src/lib/components/date-range-datepicker/date-range-datepicker.component.html","../../../projects/shared-components/src/lib/interfaces/dropdown-selection.constants.ts","../../../projects/shared-components/src/lib/components/menu/menu.component.ts","../../../projects/shared-components/src/lib/components/menu/menu.component.html","../../../projects/shared-components/src/lib/components/label/label.component.ts","../../../projects/shared-components/src/lib/components/label/label.component.html","../../../projects/shared-components/src/lib/components/date-time-picker/date-time-picker.component.ts","../../../projects/shared-components/src/lib/components/date-time-picker/date-time-picker.component.html","../../../projects/shared-components/src/public-api.ts","../../../projects/shared-components/src/i-tech-shared-components.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({\n name: 'generateErrorMessages',\n standalone: true,\n pure: true\n})\nexport class GenerateErrorMessagesPipe implements PipeTransform {\n\n constructor(private translateService: TranslateService) {\n }\n\n transform(control: any,label: string,defaultPatternKey = 'fixed'): string {\n\n if (!control.errors) {\n return '';\n }\n const key = (Object.keys(control.errors)[0]);\n const translateParams: {ERROR_KEY: string} = { ERROR_KEY: this.translateService.instant(label) || 'Field' };\n const errorMessageKey = (key === 'pattern') ?\n 'errorMessages.pattern.' + defaultPatternKey : 'errorMessages.' + key;\n\n return this.translateService.instant(errorMessageKey,translateParams);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'arrayToString',\n standalone: true\n})\nexport class ArrayToStringPipe implements PipeTransform {\n\n transform(value: Array<string | number> | string): string {\n return (typeof value === 'string') ? value : value.join(',');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'getValueByKeyFromObject',\n standalone: true\n})\nexport class GetValueByKeyFromObjectPipe implements PipeTransform {\n\n transform(\n keys: string | Array<string | number>,\n data: any,\n withParams: Array<string | Array<string | number>> | null = null,\n withParamSymbol?: string\n ): string {\n if (typeof keys === 'string') {\n return data[keys];\n } else {\n let returnValue: any = data;\n keys.forEach((key: string | number) => {\n if (!returnValue) { return; }\n returnValue = returnValue[key];\n })\n if (withParams) {\n\n withParams.forEach((param: Array<string | number> | string) => {\n let include = data;\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n include = (include) ? include[key] : null;\n })\n } else {\n include = include[param];\n }\n\n if (include !== undefined && include !== null) {\n returnValue += (withParamSymbol ? withParamSymbol : ' ') + include;\n }\n })\n }\n\n return ((returnValue !== \"undefined\") && (returnValue !== null) ) ? returnValue : '---';\n }\n }\n\n}\n","import { ControlValueAccessor, FormControlName, NgControl } from \"@angular/forms\";\nimport { inject, Injectable } from \"@angular/core\";\n\nclass NoopValueAccessor implements ControlValueAccessor {\n writeValue() {\n // No-op: Intentionally empty to prevent value updates\n }\n\n registerOnChange() {\n // No-op: Intentionally empty to prevent change notifications\n }\n\n registerOnTouched() {\n // No-op: Intentionally empty to prevent touch notifications\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class InputService {\n injectNgControl(): FormControlName {\n const ngControl = inject(NgControl, { self: true, optional: true });\n\n if (!ngControl) throw new Error('...');\n\n if (ngControl instanceof FormControlName) {\n ngControl.valueAccessor = new NoopValueAccessor();\n return ngControl;\n }\n\n throw new Error(`...`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\nimport * as momentTimezone from 'moment-timezone';\nimport { HourMinute } from \"../interfaces/hour-minute.interface\";\n\n@Injectable()\nexport class ParseDateService {\n\n toLocaleTime(time: any, format = '', timezoneId: string | null): string {\n format = (format) ? format : 'MM/DD/yyyy hh:mm A';\n const momentDate = momentTimezone.utc(time);\n if (timezoneId) {\n momentDate.tz(timezoneId);\n }\n return momentDate.format(format);\n }\n\n fromLocaleToUtc(time: any, format = '', timezoneId: string | null): string {\n format = (format) ? format : 'MM/DD/yyyy hh:mm A';\n if (timezoneId) {\n return momentTimezone.tz(moment(time).format(format), timezoneId).utc(false).format();\n }\n return '';\n }\n\n toDate(date: string | undefined): Date {\n return moment(date).toDate();\n }\n\n toDateWithFormat(date: string, format: string): Date {\n return moment(date, format).toDate();\n }\n\n getDayDifferentFromCurrentDay(date: Date): number {\n return moment(date).diff(moment(), 'days')\n }\n\n changeFormat(time: any, format: string): string {\n return moment(time).format(format);\n }\n\n changeLocalFormat(time: any, format: string, timezone: string): string {\n return moment(time).tz(timezone).format(format);\n }\n\n addToDate(date: Date | null, toAdd: {second?: number , minute?: number, days?: number} = {}, format?: string | null, type: 'format' | 'date' = 'format' ): string | Date {\n const momentDate = (date ? moment(date) : moment())\n .add(toAdd.second || 0, 'second')\n .add(toAdd.minute || 0, 'minute')\n .add(toAdd.days || 0, 'days');\n\n if (type === 'format') {\n return momentDate.format(format || 'MM/DD/yyyy');\n }\n\n return momentDate.toDate();\n }\n\n getDateForWeekDay(day: number, forWeek = 0): Date {\n return moment().add(forWeek, 'week').day(day).toDate();\n }\n\n getLocalDateForWeekDay(day: number, forWeek = 0, timezoneId: string): Date {\n return moment().tz(timezoneId).add(forWeek, 'week').day(day).toDate();\n }\n\n containsDay(startDate: string, endDate: string, date: string): boolean {\n return moment(date).isBetween(startDate, endDate, 'days', '[]');\n }\n\n getDiff(startDate: string, endDate: string): any {\n return moment(startDate).diff(endDate);\n }\n\n transformHourMinuteToCorrectFormat(data: string | HourMinute, format = 'hh:mm A'): string {\n const dateObj = JSON.parse(JSON.stringify(data));\n const time = '2022-12-12T' + ((+dateObj.hour < 10 ? ('0' + (+dateObj.hour)) : dateObj.hour)\n + ':' + (+dateObj.minute < 10 ? ('0' + (+dateObj.minute)) : dateObj.minute) + ':00');\n return this.changeFormat(time, format);\n }\n\n\n}\n","/**\n * Enum representing different types of buttons.\n */\nexport enum ButtonType {\n /** A filled button with solid background, typically used for primary actions. */\n FILLED = 'FILLED',\n\n /** A tonal button with lighter background, used for secondary actions. */\n TONAL = 'TONAL',\n\n /** An outlined button with a border and no background. */\n OUTLINE = 'OUTLINE',\n\n /** A text button with no background or border, ideal for minimal UI. */\n TEXT = 'TEXT',\n\n /** A warning button with special styling to indicate caution or alert actions. */\n WARNING = 'WARNING',\n\n /** A warning outlined button with a border and no background. */\n WARN_OUTLINE = 'WARN_OUTLINE'\n}\n","export enum LabelTypeEnum {\n 'purple' = 'purple',\n 'teal' = 'teal',\n 'olive' = 'olive',\n 'orange' = 'orange',\n 'blue' = 'blue',\n 'cyan' = 'cyan',\n 'raspberry' = 'raspberry',\n 'yellow' = 'yellow',\n 'wine' = 'wine',\n 'primary' = 'primary',\n 'green' = 'green',\n 'red' = 'red',\n 'neutral' = 'neutral',\n 'white' = 'white',\n 'gray' = 'gray',\n 'canceled' = 'canceled'\n}\n","import {\n Directive,\n ElementRef, HostListener,\n Input\n} from '@angular/core';\n\n@Directive({\n selector: '[inputMask]',\n standalone: true\n})\nexport class InputMaskDirective {\n @Input() inputMask!: 'number' | 'string';\n @Input() set min(value: string) {\n this.minimumValue = Number(value);\n }\n @Input() set max(value: string) {\n this.maximumValue = Number(value);\n }\n @Input() set float(value: string) {\n this.isFloat = value === 'true';\n }\n minimumValue!: number;\n maximumValue!: number;\n isFloat!: boolean;\n regexFloat = new RegExp(/^([0-9]*[.])?[0-9]+$/);\n regexOnlyNumbers = new RegExp(/^-?[0-9]+(?:\\.[0-9]+)?$/);\n\n @HostListener('paste', ['$event'])\n onPaste(event: any) {\n this.makeValidation(event, true)\n }\n\n constructor(private elementRef: ElementRef) {\n this.elementRef.nativeElement.addEventListener('keypress', (event: Event) => {\n this.makeValidation(event)\n })\n }\n\n makeValidation(event: any, fromPaste = false): boolean {\n let value: any;\n let newChar: any;\n\n if (!fromPaste) {\n newChar = String.fromCharCode(event.keyCode);\n const cursorPos = event.target.selectionStart;\n const inputText = event.target.value;\n value = `${inputText.slice(0, cursorPos)}${newChar}${inputText.slice(cursorPos, inputText.length)}`;\n } else {\n value = event.clipboardData?.getData('text/plain');\n }\n\n if (this.inputMask === 'number') {\n return this.checkingForNumbers(value, event, newChar, fromPaste);\n } else if (this.inputMask === 'string') {\n return this.checkingForTexts(value, event);\n } else {\n return true\n }\n }\n\n checkingForNumbers(value: any, event: any, newChar: string, fromPaste = false): boolean {\n if ((isNaN(this.minimumValue) || this.minimumValue < 0) && value === '-') { value = Number('-0'); }\n\n if (this.isFloat && (newChar === '.')) {\n value += '0';\n }\n if (!this.isFloat && fromPaste && value.includes('.')) {\n event.preventDefault();\n return false;\n }\n\n const regex = (this.isFloat) ? this.regexFloat : this.regexOnlyNumbers;\n\n if (!regex.test(value) ||\n (this.minimumValue && value < this.minimumValue) ||\n (this.maximumValue && value > this.maximumValue)\n ) {\n event.preventDefault();\n return false;\n }\n\n return true;\n }\n\n checkingForTexts(value: any, event: any): boolean {\n const regex = new RegExp(/^[A-Za-z0-9]*$/);\n if (!regex.test(value)) {\n event.preventDefault();\n return false;\n }\n\n return true;\n }\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatFabButton, MatIconButton } from \"@angular/material/button\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n selector: 'i-tech-icon-button',\n templateUrl: './icon-button.component.html',\n styleUrl: './icon-button.component.scss',\n imports: [\n MatIconButton,\n NgClass,\n MatTooltip,\n TranslateModule,\n MatIcon,\n MatFabButton,\n NgIf\n ],\n standalone: true\n})\nexport class IconButtonComponent {\n @Input() size: 'medium' | 'small' = 'medium';\n @Input() type: 'standard' | 'filled' | 'tonal' = 'tonal';\n @Input() iconSvg!: string;\n @Input() iconName!: string;\n @Input() tooltip!: string;\n @Input() disabled!: boolean;\n @Output() buttonClick = new EventEmitter<void>();\n\n onClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.buttonClick.emit();\n }\n }\n}\n","<button\n *ngIf=\"['tonal','standard'].includes(type)\"\n mat-icon-button\n [ngClass]=\"{small: size === 'small', tonal: type === 'tonal', standard: type === 'standard'}\"\n [matTooltip]=\"tooltip | translate\"\n [matTooltipDisabled]=\"!tooltip\"\n [disabled]=\"disabled || false\"\n (click)=\"onClick($event)\"\n>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg\"></mat-icon>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n</button>\n\n<button\n *ngIf=\"type === 'filled'\"\n mat-fab\n class=\"filled\"\n [ngClass]=\"{small: size === 'small'}\"\n [matTooltip]=\"tooltip | translate\"\n [matTooltipDisabled]=\"!tooltip\"\n [color]=\"'primary'\"\n [disabled]=\"disabled || false\"\n (click)=\"onClick($event)\"\n>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg\"></mat-icon>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n</button>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormControlName, ReactiveFormsModule } from '@angular/forms';\nimport { InputService } from '../../services/input.service';\nimport { AppInputInterface } from \"../../interfaces/app-input.interface\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatInput } from \"@angular/material/input\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { InputMaskDirective } from \"../../directives/input-mask.directive\";\nimport { NgxMaskDirective } from \"ngx-mask\";\n\n@Component({\n selector: 'i-tech-text-input',\n templateUrl: './text-input.component.html',\n styleUrls: [],\n imports: [\n TranslateModule,\n NgClass,\n MatIcon,\n MatTooltip,\n MatInput,\n ReactiveFormsModule,\n NgIf,\n GenerateErrorMessagesPipe,\n IconButtonComponent,\n InputMaskDirective,\n NgxMaskDirective,\n MatFormFieldModule\n ],\n standalone: true\n})\nexport class TextInputComponent {\n @ViewChild('inputElement', { static: true }) input!: MatInput;\n\n @Input() set inputData(data: AppInputInterface) {\n // If submit becomes true, mark the control as touched\n if (data?.submit && this.ngControl.control) {\n this.ngControl.control.markAsTouched();\n }\n this._inputData = data;\n }\n\n get inputData(): AppInputInterface {\n return this._inputData;\n }\n\n @Output() focusOutEmitter = new EventEmitter<void>();\n @Output() valueChangeEmitter = new EventEmitter<any>();\n\n private _inputData!: AppInputInterface;\n ngControl: FormControlName;\n closed = false;\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl();\n\n // Subscribe to value changes of the control\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.valueChanges.subscribe(value => {\n if (this._inputData?.emitValueChanges) {\n this.valueChangeEmitter.emit(value);\n }\n });\n }\n }\n\n onFocusOut(): void {\n if (this._inputData.focusOutEmit) {\n this.focusOutEmitter.emit();\n }\n }\n\n clear(): void {\n if (this.ngControl) {\n this.ngControl.control.reset();\n }\n }\n\n toggleEye(): void {\n this.closed = !this.closed;\n this.input.type = this.closed ? 'password' : 'text';\n }\n\n onValueChange(): void {\n if (this._inputData?.emitValueChanges) {\n this.valueChangeEmitter.emit(this.ngControl.control.value);\n }\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.inputData?.submit);\n }\n };\n}\n","<div *ngIf=\"inputData && ngControl\">\n <div class=\"w-100\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : inputData.readOnly || ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && inputData.submit)\n }\"\n *ngIf=\"inputData.label\">\n {{ inputData.label | translate }}\n </mat-label>\n <span *ngIf=\"inputData.required\" class=\"required-input\"\n [ngClass]=\"{'readonly-color' : inputData.readOnly || ngControl.control.disabled}\">*</span>\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-100\"\n [class.readonly-field]=\"inputData.readOnly || ngControl.control.disabled\"\n >\n <!-- Leading Icon -->\n <mat-icon *ngIf=\"inputData.iconPrefix\"\n matPrefix\n [ngClass]=\"{\n 'readonly-color' : !inputData.iconPrefixColor &&\n (inputData.readOnly || ngControl.control.disabled),\n 'default-form-icon-color' : !inputData.iconPrefixColor &&\n !(inputData.readOnly || ngControl.control.disabled)\n }\"\n [matTooltip]=\"((inputData.iconPrefixTooltip || '') | translate)\"\n [style.color]=\"inputData.iconPrefixColor || null\"\n >{{ inputData.iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"inputData.iconPrefixSvg\"\n matPrefix\n [matTooltip]=\"((inputData.iconPrefixTooltip || '') | translate)\"\n [svgIcon]=\"inputData.iconPrefixSvg\"\n ></mat-icon>\n\n <!-- Input Field -->\n <input matInput #inputElement\n *ngIf=\"!inputData.textarea\"\n [type]=\"inputData.type || 'text'\"\n [readonly]=\"inputData.readOnly\"\n [placeholder]=\"(inputData.placeholder || '') | translate\"\n [pattern]=\"inputData.pattern!\"\n [formControl]=\"ngControl.control\"\n [mask]=\"inputData.mask || ''\"\n [ngClass]=\"{'readonly-color readonly-cursor' : inputData.readOnly || ngControl.control.disabled}\"\n [inputMask]=\"inputData.inputMask!\"\n [float]=\"'' + (inputData.float || false)\"\n [min]=\"('' + inputData.min)\"\n [max]=\"('' + inputData.max)\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n (blur)=\"onFocusOut()\"\n (keyup)=\"onValueChange()\"\n (change)=\"onValueChange()\"\n >\n\n <textarea matInput\n *ngIf=\"inputData.textarea\"\n [type]=\"inputData.type || 'text'\"\n [readonly]=\"inputData.readOnly\"\n [placeholder]=\"(inputData.placeholder || '') | translate\"\n [pattern]=\"inputData.pattern!\"\n [formControl]=\"ngControl.control\"\n [ngClass]=\"{'readonly-color' : inputData.readOnly || ngControl.control.disabled}\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n (keyup)=\"onValueChange()\"\n (change)=\"onValueChange()\"\n ></textarea>\n\n <!-- Clear Icon -->\n <i-tech-icon-button\n *ngIf=\"inputData.clearable\"\n iconName=\"cancel\"\n matSuffix\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"clear()\"\n >\n </i-tech-icon-button>\n\n <i-tech-icon-button\n *ngIf=\"inputData.type === 'password'\"\n [iconName]=\"closed ? 'visible' : 'visibility_off'\"\n matSuffix\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"toggleEye()\"\n >\n </i-tech-icon-button>\n\n <!-- Trailing Icon -->\n <i-tech-icon-button\n *ngIf=\"inputData.iconSuffix\"\n [iconName]=\"inputData.iconSuffix\"\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n matSuffix\n >\n </i-tech-icon-button>\n\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && inputData.submit)\">\n {{ ngControl.control | generateErrorMessages : (inputData.label || '') : inputData.defaultPatternKey }}\n </mat-error>\n\n <!-- Helper Text -->\n <mat-hint *ngIf=\"!(!!(ngControl.control.errors && inputData.submit)) && inputData.hint\">\n {{ inputData.hint | translate }}\n </mat-hint>\n </mat-form-field>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButton } from \"@angular/material/button\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule, TranslatePipe, TranslateService } from \"@ngx-translate/core\";\nimport { ButtonType } from '../../interfaces/button-types.enum';\nimport { NgxMaskDirective, NgxMaskPipe } from 'ngx-mask';\n\n/**\n * A reusable button component with Material Design styling and custom functionality.\n */\n@Component({\n selector: 'i-tech-button',\n standalone: true,\n imports: [\n MatButton,\n NgClass,\n MatProgressSpinner,\n NgIf,\n MatIconModule,\n TranslateModule\n ],\n templateUrl: './button.component.html',\n styleUrl: './button.component.css',\n providers: [\n NgxMaskDirective,\n NgxMaskPipe,\n TranslatePipe,\n TranslateService\n ]\n})\nexport class ButtonComponent {\n /**\n * The text displayed inside the button.\n */\n @Input() text = '';\n\n /**\n * Data attribute used for Cypress or other testing frameworks.\n */\n @Input() data_cy = '';\n\n /**\n * Font icon class for displaying an icon (e.g., Material Icons).\n */\n @Input() fontIcon = '';\n\n /**\n * SVG icon name for displaying an SVG icon.\n */\n @Input() svgIcon = '';\n\n /**\n * Defines the type of button (e.g., `FILLED`, `OUTLINED`).\n */\n @Input() type: ButtonType = ButtonType.FILLED;\n\n /**\n * Additional custom classes to style the button.\n */\n @Input() customClass = '';\n\n /**\n * If true, the button acts as a submit button.\n */\n @Input() submit = false;\n\n /**\n * If true, the button is disabled and cannot be clicked.\n */\n @Input() disabled = false;\n\n /**\n * Indicates whether the button is currently activated.\n */\n @Input() activated = false;\n\n /**\n * The color of the button (e.g., `primary`, `warn`).\n */\n @Input() color: 'primary' | 'warn' = 'primary';\n\n /**\n * Emits an event when the button is clicked.\n */\n @Output() buttonClick = new EventEmitter<void>();\n\n /**\n * Enum reference for `ButtonType` to use in templates.\n */\n protected readonly ButtonType = ButtonType;\n\n /**\n * Handles the button click event.\n *\n * @param event - The mouse event triggered by clicking the button.\n */\n onClick(event: MouseEvent): void {\n if (!this.disabled && !this.submit) {\n this.buttonClick.emit();\n }\n }\n}\n","<button *ngIf=\"[ButtonType.FILLED,ButtonType.WARNING].includes(type)\"\n mat-flat-button\n [attr.data-cy]=\"data_cy\"\n [color]=\"type === ButtonType.WARNING ? 'warn' : color\"\n [class.activated]=\"activated\"\n [ngClass]=\"(customClass || '')\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\">{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span>{{text | translate}}</span>\n</button>\n<button *ngIf=\"[ButtonType.TONAL,ButtonType.TEXT].includes(type)\"\n mat-button\n [attr.data-cy]=\"data_cy\"\n [ngClass]=\"(type === ButtonType.TONAL ? 'tertiary ' : '') + (customClass || '')\"\n [class.activated]=\"activated\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\">{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n\n <span>{{text | translate}}</span>\n</button>\n<button *ngIf=\"[ButtonType.OUTLINE,ButtonType.WARN_OUTLINE].includes(type)\"\n mat-stroked-button\n [attr.data-cy]=\"data_cy\"\n [ngClass]=\"(customClass || '') \"\n [color]=\"type === ButtonType.WARN_OUTLINE ? 'warn' : color\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n [class.activated]=\"activated\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\" >{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span>{{text | translate}}</span>\n</button>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NgClass, NgOptimizedImage } from \"@angular/common\";\n\n@Component({\n selector: 'i-tech-clear-value',\n template: `<img\n class=\"pointer\"\n [ngClass]=\"className || 'standard'\"\n (click)=\"resetValue.emit()\"\n ngSrc=\"./ic_close.svg\"\n height=\"24\" width=\"24\" alt=\"\"/>`,\n styles: [`\n img {\n position: absolute;\n width: 15px;\n height: 15px;\n }\n\n .big {\n width: 25px;\n height: 25px;\n }\n\n .range_date {\n right: -65px;\n top: 15px;\n }\n\n .standard {\n right: -20px;\n top: 40px;\n }\n `],\n imports: [\n NgClass,\n NgOptimizedImage\n ],\n standalone: true\n})\nexport class ClearValueComponent {\n @Input() className!: string;\n @Input() additionalClass!: string;\n @Output() resetValue = new EventEmitter<any>();\n}\n","import {\n Component,\n ViewChild,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ElementRef, HostListener, AfterViewInit\n} from '@angular/core';\nimport { MatSelect, MatSelectModule } from \"@angular/material/select\";\nimport { AutocompleteConfigsInterface } from \"../../interfaces/autocomplete-configs.interface\";\nimport { FormControlName, ReactiveFormsModule } from \"@angular/forms\";\nimport { InputService } from '../../services/input.service';\nimport { ButtonType } from '../../interfaces/button-types.enum';\nimport { NgClass, NgFor, NgIf, NgOptimizedImage } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { ButtonComponent } from \"../button/button.component\";\nimport { GetValueByKeyFromObjectPipe } from \"../../pipes/get-value-by-key-from-object.pipe\";\nimport { ArrayToStringPipe } from \"../../pipes/array-to-string.pipe\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { ClearValueComponent } from \"../clear-value/clear-value.component\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\n\n@Component({\n selector: 'i-tech-autocomplete-select',\n templateUrl: './autocomplete-select.component.html',\n styleUrls: ['./autocomplete-select.component.scss'],\n imports: [\n NgClass,\n MatTooltip,\n NgIf,\n NgFor,\n TranslateModule,\n IconButtonComponent,\n ReactiveFormsModule,\n MatSelectModule,\n ButtonComponent,\n GetValueByKeyFromObjectPipe,\n ArrayToStringPipe,\n NgOptimizedImage,\n MatIcon,\n GenerateErrorMessagesPipe,\n ClearValueComponent,\n MatFormFieldModule\n ],\n standalone: true\n})\nexport class AutocompleteSelectComponent implements OnChanges, AfterViewInit {\n @ViewChild('matSelect') matSelect!: MatSelect;\n @ViewChild('searchInput') searchInput!: ElementRef;\n @Input() className!: string;\n @Input() submitValue!: boolean;\n\n /**\n * See AutocompleteConfigsInterface for available configurations.\n */\n @Input() set configs(data: AutocompleteConfigsInterface) {\n this.selectConfig = data;\n if (!data) {\n return;\n }\n\n if ((typeof this.selectConfig.paginate) === 'function') {\n if (this.firstRequest) {\n return;\n }\n this.getData();\n this.firstRequest = true\n return;\n }\n\n this.data = this.selectConfig.paginate;\n this.findAndSetDefaultValueFromData();\n };\n\n @Input() detectChanges!: boolean;\n @Output() selectionChange = new EventEmitter<any>();\n @Output() emitAction = new EventEmitter<any>();\n @ViewChild('allSelected') allSelected!: MatSelect;\n pending = false;\n defaultValue!: any;\n data: Array<any> = [];\n paginationData: any = { current: 1, last: 0 };\n ngControl: FormControlName;\n selectConfig!: AutocompleteConfigsInterface;\n firstRequest = false;\n showPlaceholder = true;\n isNeededForRecall = false;\n showingValue: any;\n selectedOptionForMultipleSelection: Array<any> = [];\n searchTimeoutId: any;\n tabVisibility!: boolean;\n accessToNextRequest = true;\n disabled = false;\n blockRecallDefaultValueSetter = false;\n baseData: any;\n requestLoading = false;\n protected readonly ButtonType = ButtonType;\n\n @HostListener('document:visibilitychange')\n handleVisibilityChange(): void {\n this.tabVisibility = !document.hidden;\n if (this.ngControl.control.value) {\n return;\n }\n this.closePanelAndUnsetFocus();\n if (!document.hidden) {\n this.isNeededForRecall = true;\n this.pending = true;\n setTimeout(() => {\n this.pending = false\n }, 4000)\n }\n }\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['selectConfig'] && this.selectConfig) {\n if ((typeof this.selectConfig.paginate) === 'function') {\n this.getData();\n }\n }\n }\n\n ngAfterViewInit() {\n this.ngControl.control.valueChanges.subscribe((newValue: any) => {\n // If we have data and a value\n if (this.data.length && newValue) {\n // Check if the current default value doesn't match the new value\n if (!this.defaultValue || this.defaultValue.id !== newValue) {\n // Reset the block flag to allow updating the value\n this.blockRecallDefaultValueSetter = false;\n this.findAndSetDefaultValueFromData();\n }\n } else if (newValue && !this.data.length) {\n // If we have a value but no data, we need to fetch the data\n this.blockRecallDefaultValueSetter = false;\n this.isNeededForRecall = true;\n this.reCallData();\n }\n });\n }\n\n hardReload(): void {\n this.getData('', true);\n }\n\n /**\n * Dynamic request for select data.\n * @param searchText - The input value to search options by.\n * @param fromSearch - Access for search.\n * @returns Select data.\n */\n getData(searchText?: string, fromSearch?: boolean): void {\n if (!fromSearch && !this.accessToNextRequest) {\n return;\n }\n\n if (this.requestLoading) {\n return;\n }\n\n if (fromSearch) {\n this.paginationData.current = 1;\n this.accessToNextRequest = true;\n }\n\n const functionToDo = this.selectConfig.paginate(this.paginationData.current, searchText);\n\n this.requestLoading = true;\n functionToDo?.subscribe((data: Array<any> | any) => {\n const dataToAdd = ('content' in data) ? data.content : data;\n\n if ('content' in data) {\n this.accessToNextRequest = !data.last || (data.totalPages > this.paginationData.current);\n }\n\n this.data = (fromSearch || this.selectConfig?.blockPagination) ? dataToAdd : [...this.data, ...dataToAdd];\n this.pending = false;\n this.requestLoading = false;\n\n if (!dataToAdd.length) {\n this.paginationData.last = this.paginationData.current;\n return;\n }\n\n this.paginationData.current += 1;\n this.paginationData.last += 1;\n setTimeout(() => {\n this.findAndSetDefaultValueFromData();\n }, 10)\n }, () => {\n this.pending = false;\n this.requestLoading = false;\n })\n }\n\n findAndSetDefaultValueFromData(): void {\n if (this.selectConfig.multiple) {\n if (this.ngControl.value && this.ngControl.value.length == 1) {\n this.setShowingValue(this.data.find((item) => item.id === this.ngControl.value[0]))\n }\n } else {\n const isDisabled = this.ngControl.disabled;\n if (isDisabled) {\n // TODO Remove after migrating all selects\n // this.ngControl.control.enable();\n // if (!this.ngControl.value && !this.data.length) {\n // this.ngControl.control.disable();\n // return;\n // }\n // this.setDefaultValue();\n // this.ngControl.control.disable();\n } else {\n if (!this.ngControl.value && !this.data) {\n return;\n }\n this.setDefaultValue();\n }\n\n }\n }\n\n setDefaultValue(): void {\n this.defaultValue = this.data.find((item) => item.id === this.ngControl.value);\n this.baseData = this.defaultValue\n if (!this.defaultValue) {\n return;\n }\n this.selectionChange.emit()\n this.setShowingValue(this.defaultValue);\n }\n\n optionClick(showingData: any): void {\n this.baseData = showingData\n if (!this.selectConfig.multiple) {\n this.setShowingValue(showingData);\n this.matSelect.close();\n return;\n }\n if (this.searchInput) {\n if (this.selectConfig.multiple) {\n this.toggleShowingDataInSelectedOptionsMultipleCase(showingData);\n } else {\n this.inputFocusOut();\n }\n }\n\n this.setShowingValue(showingData);\n this.showPlaceholder = false;\n }\n\n toggleShowingDataInSelectedOptionsMultipleCase(showingData: any): void {\n const showingDataByJson = JSON.stringify(showingData);\n const indexOfExistingOption = this.selectedOptionForMultipleSelection.findIndex(\n (optionValue: any) => JSON.stringify(optionValue) === showingDataByJson\n )\n if (indexOfExistingOption >= 0) {\n this.selectedOptionForMultipleSelection.splice(indexOfExistingOption, 1);\n } else {\n this.selectedOptionForMultipleSelection.push(showingData);\n }\n }\n\n addNewItemEvent(): void {\n this.isNeededForRecall = true;\n this.emitAction.emit();\n }\n\n /**\n * Filter and show.\n * @param data - Existing chosen data.\n */\n setShowingValue(data: any): void {\n if (!data) {\n return;\n }\n if (this.selectConfig.multiple && this.selectConfig.search) {\n const fullText: Array<string> = [];\n this.selectedOptionForMultipleSelection.forEach((optionData: any) => {\n fullText.push(this.collectAndGetSelectionToShowForOneOption(optionData))\n })\n this.showingValue = fullText.join(',');\n } else {\n this.showingValue = this.collectAndGetSelectionToShowForOneOption(data);\n }\n this.blockRecallDefaultValueSetter = true;\n }\n\n collectAndGetSelectionToShowForOneOption(data: any): string {\n let include = data;\n let includeOptional = data;\n\n if (this.selectConfig.valueToShowByKey) {\n this.selectConfig.valueToShowByKey.forEach((param: Array<string | number> | string) => {\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n include = (include) ? include[key] : null;\n })\n } else {\n include = include[param];\n }\n })\n if (this.selectConfig.showFullTextWithOptionalOnSelectedValue) {\n this.selectConfig.valueToShowByParam?.forEach((param: Array<string | number> | string) => {\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n includeOptional = (includeOptional) ? includeOptional[key] : null;\n })\n } else {\n includeOptional = includeOptional[param];\n }\n })\n if (this.selectConfig.valueToShowByParam && typeof includeOptional === 'string') {\n include += (this.selectConfig.withParamSymbol || '') + includeOptional\n }\n }\n }\n\n return include;\n }\n\n /**\n * Block another events.\n * @param event - Element click event.\n */\n preventDefault(event: any) {\n if (!this.selectConfig.multiple) {\n return;\n }\n event.preventDefault()\n }\n\n registerPanelScrollEvent(element: MatSelect) {\n if (this.selectConfig.paginateOnScroll === false) {\n return;\n }\n\n const panel = element.panel.nativeElement;\n panel.addEventListener('scroll', (event: any) => this.loadDataOnScroll(event));\n }\n\n loadDataOnScroll(event: any) {\n const pos = (event.target.scrollTop || event.target.scrollTop) + event.target.offsetHeight;\n const max = event.target.scrollHeight;\n if ((pos + 1) >= max) {\n if (this.paginationData.current === this.paginationData.last || this.selectConfig.blockPagination) {\n return;\n }\n this.getData();\n }\n }\n\n focusSearchInput() {\n if (this.selectConfig.search && this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n\n inputFocusOut(): void {\n this.isNeededForRecall = !!this.searchInput.nativeElement.value;\n this.searchInput.nativeElement.value = '';\n this.showPlaceholder = true;\n this.clearTimeoutForSearch();\n }\n\n resetValue(): void {\n this.selectionChange.emit(null);\n this.ngControl.reset(null);\n this.inputFocusOut();\n }\n\n getDataWithSearch(value: any, event: any): void {\n this.clearTimeoutForSearch();\n if (value.length >= 1) {\n this.searchTimeoutId = setTimeout(() => {\n this.getData(value, true)\n }, 800);\n } else if (value.length <= 1 && event.keyCode === 8) {\n this.getData(value, true)\n }\n }\n\n clearTimeoutForSearch(): void {\n if (this.searchTimeoutId) {\n clearTimeout(this.searchTimeoutId);\n this.searchTimeoutId = 0;\n }\n }\n\n openSelection(): void {\n if (this.selectConfig.disabled || this.ngControl.control.disabled) {\n return;\n }\n if (this.showPlaceholder) {\n this.matSelect.open();\n } else {\n this.closePanelAndUnsetFocus();\n }\n this.showPlaceholder = !this.showPlaceholder;\n if (!this.showPlaceholder) {\n this.reCallData();\n }\n }\n\n closePanelAndUnsetFocus(): void {\n this.matSelect.close();\n if (this.searchInput) {\n this.searchInput.nativeElement.blur()\n }\n }\n\n openedChange(event: any) {\n if (event) {\n if (this.isNeededForRecall) {\n this.reCallData();\n return;\n }\n if (!this.selectConfig.search) {\n this.pending = false\n this.reCallData();\n }\n\n return;\n }\n\n this.showPlaceholder = true;\n }\n\n reCallData(): void {\n // TODO refactor this part\n if (!this.isNeededForRecall) {\n return;\n }\n this.data = [];\n this.pending = true;\n this.paginationData = {\n current: 1,\n last: 0\n };\n this.accessToNextRequest = true;\n if ((typeof this.selectConfig.paginate) === 'function') {\n this.getData();\n } else {\n this.pending = false;\n this.data = this.selectConfig.paginate;\n }\n this.isNeededForRecall = false;\n }\n\n emitSelectionChangeAndClose(event: any) {\n this.selectionChange.emit(event.value);\n if (this.selectConfig.multiple) {\n if (!event.value?.length) {\n this.ngControl.control.reset();\n }\n return;\n }\n this.matSelect.close();\n }\n\n /*\n * Open mat-select and focus on search on icon click\n */\n iconClick(matSelect: MatSelect, searchInput?: ElementRef): void {\n matSelect.open();\n searchInput?.nativeElement?.focus();\n }\n\n /*\n * Custom error state matcher for mat-select to properly show error state in mat-form-field\n */\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submitValue);\n }\n };\n}\n","<div class=\"new-mat-autocomplete\" id=\"mat_autocomplete\"\n [ngClass]=\"{\n 'mat-select-without_icon': !selectConfig.iconUrl && !selectConfig.activeStateIconUrl,\n 'mat-select-with-search': selectConfig.search,\n 'without-label': selectConfig.hideLabel,\n 'invalid_field': ngControl.control.errors && submitValue,\n 'readonly-field': selectConfig.readOnly || ngControl.control.disabled\n }\"\n [matTooltip]=\"(selectConfig.hover && !ngControl.control.disabled ? ((selectConfig.hover || '') | translate) : '')\"\n [matTooltipClass]=\"'mat-mdc-tooltip big-td-mat-tooltip'\"\n [matTooltipPosition]=\"'above'\"\n *ngIf=\"selectConfig && ngControl\">\n\n <div class=\"w-100\" *ngIf=\"!selectConfig.hideLabel\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : selectConfig.readOnly || ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && submitValue)\n }\">\n {{ selectConfig.label | translate }}\n </mat-label>\n <span *ngIf=\"selectConfig.required\" class=\"required-input\"\n [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\">*</span>\n </div>\n\n\n <!-- Search Input -->\n <div class=\"search-input w-100\"\n (click)=\"$event.stopPropagation();$event.preventDefault()\"\n [ngClass]=\"{ hide_input_placeholder: showPlaceholder || ngControl.control.disabled }\"\n *ngIf=\"selectConfig.search\"\n >\n <input autocomplete=\"off\"\n id=\"searchInput\"\n type=\"text\"\n [ngClass]=\"{'pr-25': !selectConfig.iconUrl}\"\n #searchInput\n [disabled]=\"ngControl.control.disabled || selectConfig.hover\"\n [placeholder]=\"(ngControl.control.disabled || selectConfig.hover) ? '' : 'Search'\"\n (focusout)=\"inputFocusOut()\"\n (focus)=\"openSelection()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"getDataWithSearch(searchInput.value,$event)\">\n\n <!-- Search Icon -->\n <span class=\"search-icon\">\n <i-tech-icon-button\n class=\"mr-10\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color'\n : 'default-form-icon-color'\"\n *ngIf=\"selectConfig.iconPrefix && !showPlaceholder\"\n [iconName]=\"selectConfig.iconPrefix || ''\"\n [disabled]=\"selectConfig.readOnly || false\"\n matPrefix\n >\n </i-tech-icon-button>\n </span>\n </div>\n\n <!-- Placeholder/Selected Value Display -->\n <ng-container *ngIf=\"showPlaceholder && selectConfig.search\">\n <div class=\"custom-placeholder\"\n *ngIf=\"(!ngControl?.value && !ngControl?.value?.length) ||\n (selectConfig.multiple && ngControl?.value && !ngControl?.value?.length)\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n >\n {{ ((selectConfig.placeholder || '') | translate) }}\n </div>\n <div class=\"custom-placeholder custom-value ellipsis\"\n [ngClass]=\"{\n 'pr-42': selectConfig.iconUrl,\n 'readonly-color': selectConfig.readOnly || ngControl.control.disabled,\n 'default-form-icon-color': !(selectConfig.readOnly || ngControl.control.disabled)\n }\"\n *ngIf=\"ngControl?.value\"\n >\n {{showingValue}}\n </div>\n </ng-container>\n\n <!-- Custom Icon -->\n <img class=\"left_icon_new pointer\"\n alt=\"Toggle Selection\"\n (click)=\"iconClick(matSelect, searchInput)\"\n *ngIf=\"!selectConfig.matIconName && (selectConfig.iconUrl || selectConfig.activeStateIconUrl)\"\n [src]=\"'assets/images/icons/global/' + (ngControl.control?.value && selectConfig?.activeStateIconUrl ?\n selectConfig.activeStateIconUrl\n : selectConfig.iconUrl)\">\n\n <mat-form-field appearance=\"outline\" class=\"w-100\" (click)=\"selectConfig?.search ? focusSearchInput() : null\">\n <!-- Material Select -->\n <mat-select #matSelect=\"matSelect\"\n [panelClass]=\"'autocomplete-transform-panel-location'\"\n [attr.aria-placeholder]=\"(selectConfig.placeholder || '') | translate\"\n [aria-label]=\"selectConfig.label | translate\"\n [id]=\"selectConfig.filtrationKey || ''\"\n (opened)=\"registerPanelScrollEvent(matSelect)\"\n (openedChange)=\"openedChange($event)\"\n [formControl]=\"ngControl.control\"\n [multiple]=\"selectConfig.multiple\"\n (selectionChange)=\"emitSelectionChangeAndClose($event)\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [placeholder]=\"(selectConfig.placeholder || '') | translate\"\n [disabled]=\"ngControl.control.disabled\"\n >\n\n <!-- Loading State -->\n <mat-option *ngIf=\"pending\" class=\"option_loading relative\">\n <div class=\"request_loading\">\n <img ngSrc=\"./loader.svg\" alt=\"\" height=\"200\" width=\"200\"/>\n </div>\n </mat-option>\n\n <!-- Options -->\n <ng-container *ngIf=\"data?.length && !pending\">\n <!-- Add New Option -->\n <mat-option *ngIf=\"selectConfig.actions\"\n class=\"pointer add_new\"\n disabled\n (click)=\"closePanelAndUnsetFocus();addNewItemEvent()\">\n <!--(click)=\"ngControl.control.reset(null);\n matSelect._onBlur();closePanelAndUnsetFocus();addNewItemEvent()\">-->\n <i-tech-button\n [type]=\"ButtonType.OUTLINE\"\n [fontIcon]=\"'add'\"\n [text]=\"('dropdown_add_item' | translate : {INPUT_NAME: (selectConfig.label | translate)}) \"\n [customClass]=\"'w-100 mat-autocomplete-select-button'\">\n </i-tech-button>\n </mat-option>\n\n <!-- Regular Options -->\n <ng-container *ngIf=\"!selectConfig?.changeText && data.length\">\n <mat-option *ngFor=\"let item of data\"\n [value]=\"selectConfig.valueByKey | getValueByKeyFromObject : item\"\n (mouseup)=\"optionClick(item)\"\n (mousedown)=\"preventDefault($event)\">\n @if (selectConfig?.needTranslateOptions) {\n {{\n ((selectConfig.valueToShowByKey | getValueByKeyFromObject\n : item : selectConfig.valueToShowByParam : selectConfig.withParamSymbol) || '') | translate\n }}\n }@else {\n {{\n ((selectConfig.valueToShowByKey | getValueByKeyFromObject\n : item : selectConfig.valueToShowByParam : selectConfig.withParamSymbol) || '')\n }}\n }\n\n </mat-option>\n </ng-container>\n\n <!-- Custom Text Options -->\n <ng-container *ngIf=\"selectConfig?.changeText && data.length\">\n <mat-option *ngFor=\"let item of data\"\n [value]=\"selectConfig.valueByKey | getValueByKeyFromObject : item\"\n (mouseup)=\"optionClick(item)\"\n (mousedown)=\"preventDefault($event)\"\n [disabled]=\"selectConfig?.changeText[item].disabled\">\n {{ selectConfig?.needTranslateOptions ? (selectConfig?.changeText[item].text | translate ) : selectConfig?.changeText[item].text}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <!-- Empty State -->\n <ng-container *ngIf=\"!pending && !data.length\">\n <mat-option disabled class=\"empty_selection_state\">\n <div class=\"actions_and_tile add_new flex_column w-100 flex_center_align_center\">\n <span>{{ 'dropdown_no_items' | translate }}</span>\n <div class=\"mt-10\">\n <i-tech-button\n *ngIf=\"selectConfig?.actions\"\n [type]=\"ButtonType.OUTLINE\"\n (buttonClick)=\"closePanelAndUnsetFocus();addNewItemEvent()\"\n [customClass]=\"'mat-autocomplete-select-button'\"\n [fontIcon]=\"'add'\"\n [text]=\"('dropdown_add_item' | translate : {INPUT_NAME: (selectConfig.label | translate)}) \">\n </i-tech-button>\n </div>\n </div>\n </mat-option>\n </ng-container>\n </mat-select>\n <mat-icon *ngIf=\"selectConfig.iconPrefix\"\n matPrefix\n [ngClass]=\"{\n 'readonly-color' : !selectConfig['iconPrefixColor']\n && (selectConfig.readOnly || ngControl.control.disabled),\n 'default-form-icon-color' : !selectConfig['iconPrefixColor']\n && !(selectConfig.readOnly || ngControl.control.disabled)\n }\"\n [matTooltip]=\"((selectConfig?.['iconPrefixTooltip'] || '') | translate)\"\n >{{ selectConfig.iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"selectConfig['iconPrefixSvg']\"\n matPrefix\n [matTooltip]=\"((selectConfig?.['iconPrefixTooltip'] || '') | translate)\"\n [svgIcon]=\"selectConfig['iconPrefixSvg'] || ''\"\n ></mat-icon>\n\n <i-tech-icon-button\n *ngIf=\"selectConfig.search && selectConfig.clearable && !ngControl.control.disabled && !!ngControl.control.value\"\n iconName=\"cancel\"\n matSuffix\n [disabled]=\"selectConfig.readOnly || false\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"\n $event.stopPropagation();\n $event.preventDefault();\n ngControl.control.reset(null);\n matSelect._onBlur();\n closePanelAndUnsetFocus()\n \"\n >\n </i-tech-icon-button>\n <mat-icon\n matSuffix\n class=\"select-arrow\"\n [class.open]=\"matSelect.panelOpen\"\n [ngClass]=\"{\n 'readonly-color': selectConfig.readOnly || ngControl.control.disabled,\n 'default-form-icon-color': !(selectConfig.readOnly || ngControl.control.disabled),\n 'mt-8': !!ngControl.control.value && selectConfig.clearable\n }\"\n >\n keyboard_arrow_down\n </mat-icon>\n <!-- Error Message -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submitValue)\">\n {{ ngControl.control | generateErrorMessages : selectConfig.label : selectConfig.defaultPatternKey }}\n </mat-error>\n </mat-form-field>\n\n <!-- Reset Button -->\n <i-tech-clear-value *ngIf=\"selectConfig.reset\" (resetValue)=\"resetValue()\"></i-tech-clear-value>\n</div>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Injector, Input\n} from '@angular/core';\nimport { NgxMaskDirective, NgxMaskService } from 'ngx-mask';\nimport { MatDatepicker } from \"@angular/material/datepicker\";\nimport { AbstractControl } from \"@angular/forms\";\n\n@Directive({\n selector: '[dateMask]',\n providers:[NgxMaskDirective],\n standalone: true\n})\nexport class DateMaskDirective {\n @Input() maskType!: string;\n @Input() matDatepicker!: MatDatepicker<any>;\n @Input() rangeFormControl!: AbstractControl;\n\n expressions = {\n DMY: 'M0/d0/0000',\n DM: 'M0/d0'\n }\n maskService: any;\n dateRegex = new RegExp(/^\\s*(1[012]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])\\/((?:19|20)\\d{2})\\s*$/);\n dayMonthRegex = new RegExp(/^\\s*(1[012]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])$/);\n previousValue = '';\n\n constructor(\n private elementRef: ElementRef,\n private injector: Injector,\n ) {\n this.maskService = this.injector.get(NgxMaskService);\n }\n\n @HostListener('input')\n onInput() {\n let value = this.elementRef.nativeElement.value;\n\n if (this.existsZerosInString(value)) {\n value = this.previousValue;\n }\n\n const maskedValue = this.maskService.applyMask(\n value,\n this.maskType === 'DAY_MONTH' ? this.expressions.DM : this.expressions.DMY\n );\n\n if (this.maskType !== 'DAY_MONTH' && !isNaN(new Date(maskedValue).getTime())) {\n if (this.matDatepicker) {\n this.matDatepicker.select(new Date(maskedValue));\n } else if (this.rangeFormControl) {\n this.rangeFormControl.setValue(new Date(maskedValue));\n }\n }\n\n if (isNaN(new Date(maskedValue).getTime())) {\n this.matDatepicker.select(null)\n }\n\n this.elementRef.nativeElement.value = maskedValue || null;\n this.previousValue = maskedValue || null;\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n const pastedValue = event.clipboardData?.getData('text/plain');\n if (!pastedValue) { return; }\n if (this.maskType === 'DAY_MONTH') {\n if (!this.dayMonthRegex.test(pastedValue)) {\n event?.preventDefault();\n }\n } else {\n if (!this.dateRegex.test(pastedValue)) {\n event?.preventDefault();\n }\n }\n }\n\n existsZerosInString(date: string): boolean {\n const dateToArray = date.split('/');\n let isValid;\n if (this.maskType === 'DAY_MONTH') {\n isValid = !!dateToArray.find((part: string) => part.includes('00'));\n } else {\n if (dateToArray.length < 3) {\n isValid = !!dateToArray.find((part: string) => part.includes('00'));\n } else {\n isValid = (dateToArray[2][0] == '0') || (+dateToArray[2][0] > 2);\n }\n\n }\n return isValid;\n }\n\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormControlName, ReactiveFormsModule } from \"@angular/forms\";\nimport { InputService } from '../../services/input.service';\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\n\n@Component({\n selector: 'i-tech-date-picker',\n templateUrl: './date-picker.component.html',\n imports: [\n NgClass, NgIf,\n TranslateModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatInput,\n MatTooltip,\n MatIconModule,\n DateMaskDirective,\n GenerateErrorMessagesPipe, IconButtonComponent\n ],\n standalone: true\n})\nexport class DatePickerComponent {\n @Input() label = '';\n @Input() defaultPatternKey!: string ;\n @Input() required = false;\n @Input() pastDatesDisabled = false;\n @Input() hintText = '';\n @Input() placeholder = 'MM/DD/YYYY';\n @Input() iconPrefix?: string;\n @Input() iconPrefixSvg?: string;\n @Input() iconPrefixTooltip?: string;\n @Input() iconPrefixColor?: string;\n @Input() iconPrefixVariant?: string;\n @Input() valueChangeEmit?: boolean;\n @Input() minDate: Date | null = null;\n @Input() clearable = false;\n\n @Input() submit = false;\n @ViewChild('inputElement') inputElement!: ElementRef;\n @Output() valueChangeEmitter = new EventEmitter<void>();\n\n isOpen = false;\n focused = false;\n\n ngControl: FormControlName;\n\n today: Date = new Date();\n\n // Filter to disable past dates\n dateFilter = (date: Date | null): boolean => {\n if (this.pastDatesDisabled) {\n const today = this.today;\n return date ? date >= today : false;\n } else {\n return true;\n }\n };\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl() as FormControlName;\n }\n\n emitChange(): void {\n if (!this.valueChangeEmit) { return; }\n this.valueChangeEmitter.emit();\n }\n\n clickForFocusOut(): void {\n setTimeout(() => {\n this.inputElement.nativeElement.focus();\n this.inputElement.nativeElement.blur();\n },120)\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submit);\n }\n };\n}\n","<div class=\"flex_column relative mat-date-range-input\" *ngIf=\"ngControl\" [ngClass]=\"{'check_requirements': submit}\">\n <div class=\"w-100\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && submit)\n }\">\n {{ label | translate }}\n </mat-label>\n <span *ngIf=\"required\" class=\"required-input\" [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\">*</span>\n </div>\n <mat-form-field appearance=\"outline\" [ngClass]=\"{'opened_calendar': isOpen}\"\n [class.readonly-field]=\"ngControl.control.disabled\">\n <input matInput #inputElement\n type=\"text\"\n [formControl]=\"ngControl.control\"\n [placeholder]=\"placeholder | translate\"\n [min]=\"minDate\"\n dateMask\n [matDatepicker]=\"datePicker\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [matDatepickerFilter]=\"dateFilter\"\n (focus)=\"focused = true\"\n (click)=\"datePicker.open();\"\n (dateChange)=\"emitChange()\"\n >\n\n <mat-icon *ngIf=\"iconPrefix\"\n matPrefix\n [matTooltip]=\"((iconPrefixTooltip || '') | translate)\"\n [style.color]=\"iconPrefixColor\"\n >{{ iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"iconPrefixSvg\"\n matPrefix\n [matTooltip]=\"((iconPrefixTooltip || '') | translate)\"\n [svgIcon]=\"iconPrefixSvg\"\n ></mat-icon>\n\n <app-icon-button\n *ngIf=\"clearable && !ngControl.control.disabled && !!ngControl.control.value\"\n iconName=\"cancel\"\n matSuffix\n [ngClass]=\"ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"$event.stopPropagation();$event.preventDefault();ngControl.control.reset(null);\"\n >\n </app-icon-button>\n\n <i-tech-icon-button matSuffix\n [iconName]=\"'date_range'\"\n [disabled]=\"ngControl.control.disabled\"\n (click)=\"datePicker.open()\"\n [ngClass]=\"ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n ></i-tech-icon-button>\n\n <mat-datepicker #datePicker (closed)=\"isOpen = false;clickForFocusOut()\"\n (opened)=\"isOpen = true;focused = true\"></mat-datepicker>\n\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submit)\">\n {{ ngControl.control | generateErrorMessages : label : defaultPatternKey }}\n </mat-error>\n\n <!-- Helper Text -->\n <mat-hint *ngIf=\"!(!!(ngControl.control.errors && submit)) && hintText\"\n [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\"\n >\n {{ hintText | translate }}\n </mat-hint>\n\n </mat-form-field>\n</div>\n","import {\n AfterViewInit,\n Component, ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDatepickerModule, MatDateRangePicker } from \"@angular/material/datepicker\";\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup, Validators } from \"@angular/forms\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\n\n@Component({\n selector: 'i-tech-mat-range-datepicker',\n templateUrl: './date-range-datepicker.component.html',\n imports: [\n MatFormFieldModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n NgClass, NgIf,\n TranslateModule,\n IconButtonComponent, DateMaskDirective\n ],\n standalone: true\n})\nexport class DateRangeDatepickerComponent implements OnChanges, AfterViewInit {\n @Input() label?: string;\n @Input() placeholder?: Array<string>;\n @Input() value?: Array<string | null>;\n @Input() defaultValue?: Array<Date>;\n @Input() key?: {start: string, end: string, title: string};\n @Input() submit = false;\n @Input() clearValue = true;\n @Input() errorMessage = '';\n @Input() onePlaceholder?: string;\n @Input() hintText = 'MM/DD/YYYY - MM/DD/YYYY';\n @Output() resetForm = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<any>();\n @ViewChild('picker') picker!: MatDateRangePicker<any>;\n @ViewChild('min') min!: ElementRef;\n @ViewChild('max') max!: ElementRef;\n isOpen = false;\n isSelectingRange = false;\n\n dateRangeForm = new UntypedFormGroup({\n startDate: new UntypedFormControl('', [Validators.maxLength(10)]),\n endDate: new UntypedFormControl('', [Validators.maxLength(10)]),\n });\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.defaultValue?.length) {\n this.dateRangeForm.patchValue({\n startDate: this.defaultValue[0],\n endDate: this.defaultValue[1]\n })\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n setTimeout(() => {\n if (changes['value']?.currentValue && !(changes['value'].currentValue[0])) {\n if (this.picker) {\n this.dateRangeForm.reset();\n this.picker.select(null)\n }\n } else if (changes['value'] && this.value?.length) {\n this.dateRangeForm.setValue({\n startDate: new Date(this.value[0] || ''),\n endDate: new Date(this.value[1] || '')\n })\n }\n }, 10)\n }\n\n clickForFocusOut(): void {\n setTimeout(() => {\n this.min.nativeElement.focus();\n this.min.nativeElement.blur();\n },120)\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submit);\n }\n };\n\n setDate(value: Array<string | null>, element: any): void {\n const startDate = value[0];\n const endDate = value[1];\n\n // If this is the start date being selected (matStartDate input)\n if (element === this.min?.nativeElement) {\n // We're starting a new selection process\n this.isSelectingRange = true;\n // Don't emit any event yet\n }\n // If this is the end date being selected (matEndDate input)\n else if (element === this.max?.nativeElement) {\n // We're completing a selection\n this.isSelectingRange = false;\n\n if (startDate === null && endDate === null) {\n this.dateRangeForm.reset();\n this.selectionChange.emit(value);\n } else if (startDate && endDate) {\n this.selectionChange.emit(value);\n }\n }\n\n element.blur();\n }\n\n keyEventHandler(event: KeyboardEvent,value: Array<string | null>, element: any): void {\n if (event.code === 'Enter') {\n this.setDate(value,element)\n }\n }\n\n}\n","<div class=\"flex_column relative mat-date-range-input\"\n [formGroup]=\"dateRangeForm\"\n>\n <div class=\"w-100\" *ngIf=\"label\">\n <mat-label>\n {{ (label || '') | translate }}\n </mat-label>\n </div>\n <mat-form-field appearance=\"outline\" [ngClass]=\"{'opened_calendar': isOpen}\">\n <mat-date-range-input [rangePicker]=\"picker\">\n <input formControlName=\"startDate\"\n [placeholder]=\" (placeholder ? placeholder[0] : 'Start Date')\"\n [title]=\"key ? key.title : 'Date'\"\n [attr.data-accessKey]=\"key ? key.start : 'minStartDate'\"\n [attr.data-parentKey]=\"key ? (key.start + '_' + key.end) : 'minStartDate_maxEndDate'\"\n matStartDate #min\n dateMask\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [rangeFormControl]=\"dateRangeForm.controls['startDate']\"\n (keydown)=\"keyEventHandler($event,[min.value, max.value || null],min)\"\n (dateChange)=\"setDate([min.value, max.value || null],min)\">\n <input formControlName=\"endDate\"\n [placeholder]=\"(placeholder ? placeholder[1] : 'End Date')\"\n [title]=\"key ? key.title : 'Date'\"\n [attr.data-accessKey]=\"key ? key.end : 'maxEndDate'\"\n [attr.data-parentKey]=\"key ? (key.start + '_' + key.end) : 'minStartDate_maxEndDate'\"\n matEndDate #max\n dateMask\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [rangeFormControl]=\"dateRangeForm.controls['endDate']\"\n (keydown)=\"keyEventHandler($event,[min.value, max.value || null],max)\"\n (dateChange)=\"setDate([min.value, max.value || null],max)\">\n </mat-date-range-input>\n <i-tech-icon-button matSuffix\n [iconName]=\"'cancel'\"\n (buttonClick)=\"setDate([null,null], max)\"\n class=\"default-form-icon-color\"\n *ngIf=\"dateRangeForm.get('startDate')?.value && this.dateRangeForm.get('endDate')?.value\"\n ></i-tech-icon-button>\n <i-tech-icon-button\n matSuffix\n [iconName]=\"'date_range'\"\n (buttonClick)=\"picker.open()\"\n class=\"default-form-icon-color\"\n ></i-tech-icon-button>\n <mat-date-range-picker\n #picker\n (closed)=\"isOpen = false;clickForFocusOut()\"\n (opened)=\"isOpen = true\"\n ></mat-date-range-picker>\n <mat-hint *ngIf=\"hintText && !errorMessage\">{{ hintText }}</mat-hint>\n </mat-form-field>\n</div>\n","export enum DropdownSelectionType {\n UPLOAD = \"UPLOAD\",\n DOWNLOAD = \"DOWNLOAD\",\n BLANK = \"BLANK\"\n}\n\nexport const DropdownItemIcon = {\n [DropdownSelectionType.UPLOAD]: 'upload',\n [DropdownSelectionType.DOWNLOAD]: 'download',\n [DropdownSelectionType.BLANK]: 'blank',\n}","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { ButtonType } from \"../../interfaces/button-types.enum\";\nimport { DropdownItemIcon, DropdownSelectionType } from \"../../interfaces/dropdown-selection.constants\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger, MenuPositionX } from \"@angular/material/menu\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { NgClass, NgForOf, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { ButtonComponent } from \"../button/button.component\";\nimport { MatLabel } from \"@angular/material/form-field\";\n\n@Component({\n selector: \"i-tech-menu\",\n standalone: true,\n imports: [\n MatMenuTrigger,\n MatMenu,\n MatIcon,\n NgIf,\n NgForOf,\n MatMenuItem,\n TranslateModule,\n NgClass,\n ButtonComponent,\n MatLabel\n ],\n templateUrl: \"./menu.component.html\",\n styleUrls: [\"./menu.component.scss\"]\n})\nexport class MenuComponent {\n @Input() text!: string;\n @Input() dataName!: string;\n @Input() containerClass!: string;\n @Input() positionX: MenuPositionX = 'before';\n @Input() menuOptions: Array<{\n value: string;\n text: string;\n src?: string;\n class?: string;\n type?: DropdownSelectionType;\n }> = [];\n @Output() emitEvent = new EventEmitter<any>();\n protected readonly ButtonType = ButtonType;\n protected readonly DropdownItemIcon = DropdownItemIcon;\n matMenuState = false;\n}\n","<div class=\"custom_dropdown_container\"\n [attr.data-name]=\"dataName\"\n [ngClass]=\"containerClass\"\n>\n <i-tech-button\n [matMenuTriggerFor]=\"beforeMenu\"\n [type]=\"ButtonType.OUTLINE\"\n [fontIcon]=\"'keyboard_arrow_down'\"\n [text]=\"(text || '') \"\n (menuOpened)=\"matMenuState = true\"\n (menuClosed)=\"matMenuState = false\"\n [activated]=\"matMenuState\"\n ></i-tech-button>\n <mat-menu #beforeMenu=\"matMenu\" [xPosition]=\"positionX\">\n <button mat-menu-item *ngFor=\"let option of menuOptions\" (click)=\"emitEvent.emit(option.value)\">\n <mat-icon *ngIf=\"option.type\" [svgIcon]=\"DropdownItemIcon[option.type]\"></mat-icon>\n <mat-label class=\"meu_item_label\">{{(option.text || '') | translate}}</mat-label>\n </button>\n </mat-menu>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { LabelTypeEnum } from \"../../interfaces/label-type.enum\";\nimport { MatChip } from \"@angular/material/chips\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n selector: 'i-tech-label',\n templateUrl: './label.component.html',\n styleUrls: [],\n imports: [\n MatChip,\n MatTooltip,\n NgClass,\n TranslateModule,\n MatIcon,\n NgIf\n ],\n standalone: true\n})\nexport class LabelComponent {\n @Input() color: LabelTypeEnum = LabelTypeEnum.primary;\n @Input() text!: string;\n @Input() innerHtml!: string;\n @Input() bordered = false;\n @Input() tooltip?: string;\n @Input() size: 'small' | 'standard' = 'standard';\n @Input() iconName?: string;\n @Input() iconSvg = '';\n @Input() disableRipple = false;\n @Input() matChipAction = false;\n @Input() forTable = false;\n}\n","<div [class]=\"{table_row_item: forTable,'trailing-icon' : iconName || iconSvg}\">\n <mat-chip\n [class]=\"'label_' + color\"\n [ngClass]=\"{bordered: bordered, small: size === 'small', matChipAction: 'pointer'}\"\n [matTooltip]=\"(tooltip || '') | translate\"\n [disableRipple]=\"disableRipple\"\n >\n <div class=\"flex_align_center flex_gap\" [ngClass]=\"matChipAction ? 'pointer' : ''\">\n <span *ngIf=\"!innerHtml\">{{text | translate}}</span>\n <span *ngIf=\"innerHtml\" [innerHtml]=\"innerHtml | translate\"></span>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg!\"></mat-icon>\n </div>\n </mat-chip>\n</div>\n","import { AfterViewInit, Component, EventEmitter, Input, Output, ViewChild, ElementRef, OnDestroy } from '@angular/core';\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { NgxMaskDirective } from \"ngx-mask\";\nimport {\n FormControlName,\n FormsModule,\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup\n} from \"@angular/forms\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatError, MatLabel } from \"@angular/material/form-field\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\nimport { ParseDateService } from \"../../services/parse-date.service\";\nimport { InputService } from \"../../services/input.service\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\n\n@Component({\n selector: 'i-tech-date-time-picker',\n imports: [MatDatepickerModule, NgxMaskDirective, DateMaskDirective, TranslateModule,\n FormsModule, NgClass, ReactiveFormsModule, MatLabel, GenerateErrorMessagesPipe, NgIf, MatError\n ],\n standalone: true,\n providers: [ParseDateService],\n templateUrl: './date-time-picker.component.html',\n styleUrl: './date-time-picker.component.scss'\n})\nexport class DateTimePickerComponent implements AfterViewInit, OnDestroy {\n @Output() dateChangeEvent = new EventEmitter<void>();\n @Input() label!: string;\n @Input() submit = false;\n @Input() required = false;\n @Input() set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.form.get('time')?.disable();\n this.form.get('date')?.disable();\n } else {\n this.form.get('time')?.enable();\n this.form.get('date')?.enable();\n }\n };\n get disabled(): boolean {\n return this._disabled;\n }\n private _disabled = false;\n\n @ViewChild('dateElement') timeInput!: ElementRef;\n\n isFocused = false;\n form = new UntypedFormGroup({\n time: new UntypedFormControl(),\n date: new UntypedFormControl(),\n })\n ngControl: FormControlName;\n\n // Track datepicker state\n private focusTimeoutId: any = null;\n private datePickerJustClosed = false;\n\n constructor(\n private inputService: InputService,\n private parseDateService: ParseDateService\n ) {\n this.ngControl = this.inputService.injectNgControl();\n }\n\n ngAfterViewInit(): void {\n this.setValue();\n this.ngControl.control.valueChanges.subscribe(() => {\n this.setValue()\n })\n }\n\n ngOnDestroy(): void {\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n }\n\n private setValue(): void {\n if (!this.ngControl?.control) {\n return;\n }\n const dateTime = this.ngControl.control.value;\n if (!dateTime) {\n this.form.patchValue({\n date: null,\n time: null\n }, { emitEvent: false });\n return;\n }\n\n this.form.patchValue({\n date: new Date(this.parseDateService.changeFormat(dateTime, 'YYYY-MM-DD') + 'T' + '00:00:00'),\n time: this.parseDateService.changeFormat(dateTime, 'HH:mm')\n }, { emitEvent: false })\n }\n\n public onDatePickerClosed(): void {\n // Update form value first\n this.setDateTimeValue();\n\n // Mark that the datepicker just closed\n this.datePickerJustClosed = true;\n\n // Clear any existing timeout\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n\n // Use a callback that runs outside Angular's change detection\n this.focusTimeoutId = setTimeout(() => {\n // Focus time input\n if (this.timeInput?.nativeElement) {\n this.timeInput.nativeElement.focus();\n }\n\n // Reset flag after enough time\n setTimeout(() => {\n this.datePickerJustClosed = false;\n }, 200);\n }, 100); // Longer delay to let Angular Material finish its work\n }\n\n public setDateTimeValue(): void {\n if (this.form.value.date && this.form.value.time) {\n const date = this.parseDateService.changeFormat(this.form.value.date, 'YYYY-MM-DD');\n const time = this.form.value.time;\n this.ngControl.control.patchValue(date + 'T' + time, { emitEvent: false });\n } else {\n this.ngControl.control.patchValue(null, { emitEvent: false });\n }\n this.dateChangeEvent.emit();\n }\n\n public onFocus(event: FocusEvent): void {\n // If datepicker just closed and focus is going to date input, move it to time input\n if (this.datePickerJustClosed) {\n const target = event.target as HTMLElement;\n const dateInput = document.querySelector('input[formControlName=\"date\"]');\n\n if (target === dateInput) {\n // Cancel any existing focus timeout\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n\n // Set new timeout to focus time input\n this.focusTimeoutId = setTimeout(() => {\n if (this.timeInput?.nativeElement) {\n this.timeInput.nativeElement.focus();\n }\n }, 10);\n\n return;\n }\n }\n\n this.isFocused = true;\n }\n\n public onBlur(event?: FocusEvent): void {\n // Don't handle blur during datepicker transitions\n if (this.datePickerJustClosed) {\n return;\n }\n\n // Check if focus is moving to another element within our component\n setTimeout(() => {\n const dateInput = document.querySelector('input[formControlName=\"date\"]');\n const timeInput = this.timeInput?.nativeElement;\n const activeElement = document.activeElement;\n\n if (activeElement !== dateInput && activeElement !== timeInput) {\n this.isFocused = false;\n }\n }, 50);\n }\n}\n","<div class=\"date_time_picker_container\"\n *ngIf=\"ngControl?.control\"\n [class.readonly_field]=\"disabled\"\n>\n <mat-label [ngClass]=\"{'readonly-color': disabled}\">{{label | translate}}</mat-label>\n <span *ngIf=\"required\" class=\"required-input\" [ngClass]=\"{'readonly-color': disabled}\"> *</span>\n\n <div class=\"date_time_picker\"\n [formGroup]=\"form\"\n [ngClass]=\"{'focused': isFocused, 'disabled': disabled}\"\n >\n <input type=\"text\" dateMask class=\"date\"\n placeholder=\"mm/dd/yy\"\n formControlName=\"date\"\n [matDatepicker]=\"DatePicker\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && DatePicker.open()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n >\n <mat-datepicker #DatePicker\n (closed)=\"onDatePickerClosed()\">\n </mat-datepicker>\n <input type=\"time\"\n #dateElement\n class=\"time\"\n formControlName=\"time\"\n [disabled]=\"disabled\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"setDateTimeValue()\"\n />\n </div>\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submit)\">\n {{ngControl.control | generateErrorMessages : (label || '')}}\n </mat-error>\n</div>\n","/*\n * Public API Surface of shared-components\n */\n\nexport * from './lib/pipes/generate-error-messages.pipe';\nexport * from './lib/pipes/array-to-string.pipe';\nexport * from './lib/pipes/get-value-by-key-from-object.pipe';\nexport * from './lib/services/input.service';\nexport * from './lib/services/parse-date.service';\nexport * from './lib/interfaces/app-input.interface';\nexport * from './lib/interfaces/button-types.enum';\nexport * from './lib/interfaces/label-type.enum';\nexport * from './lib/interfaces/autocomplete-configs.interface';\nexport * from './lib/directives/input-mask.directive';\nexport * from './lib/components/icon-button/icon-button.component';\nexport * from './lib/components/text/text-input.component';\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/autocomplete-select/autocomplete-select.component';\nexport * from './lib/components/date-picker/date-picker.component';\nexport * from './lib/components/clear-value/clear-value.component';\nexport * from './lib/components/date-range-datepicker/date-range-datepicker.component';\nexport * from './lib/components/menu/menu.component';\nexport * from './lib/components/label/label.component';\nexport * from './lib/components/date-time-picker/date-time-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.InputService","i2","i1","i5","i6","i3","i4","i2.ParseDateService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"i-tech-shared-components.mjs","sources":["../../../projects/shared-components/src/lib/pipes/generate-error-messages.pipe.ts","../../../projects/shared-components/src/lib/pipes/array-to-string.pipe.ts","../../../projects/shared-components/src/lib/pipes/get-value-by-key-from-object.pipe.ts","../../../projects/shared-components/src/lib/services/input.service.ts","../../../projects/shared-components/src/lib/services/parse-date.service.ts","../../../projects/shared-components/src/lib/interfaces/button-types.enum.ts","../../../projects/shared-components/src/lib/interfaces/label-type.enum.ts","../../../projects/shared-components/src/lib/directives/input-mask.directive.ts","../../../projects/shared-components/src/lib/components/icon-button/icon-button.component.ts","../../../projects/shared-components/src/lib/components/icon-button/icon-button.component.html","../../../projects/shared-components/src/lib/components/text/text-input.component.ts","../../../projects/shared-components/src/lib/components/text/text-input.component.html","../../../projects/shared-components/src/lib/components/button/button.component.ts","../../../projects/shared-components/src/lib/components/button/button.component.html","../../../projects/shared-components/src/lib/components/clear-value/clear-value.component.ts","../../../projects/shared-components/src/lib/components/autocomplete-select/autocomplete-select.component.ts","../../../projects/shared-components/src/lib/components/autocomplete-select/autocomplete-select.component.html","../../../projects/shared-components/src/lib/directives/date-mask.directive.ts","../../../projects/shared-components/src/lib/components/date-picker/date-picker.component.ts","../../../projects/shared-components/src/lib/components/date-picker/date-picker.component.html","../../../projects/shared-components/src/lib/components/date-range-datepicker/date-range-datepicker.component.ts","../../../projects/shared-components/src/lib/components/date-range-datepicker/date-range-datepicker.component.html","../../../projects/shared-components/src/lib/interfaces/dropdown-selection.constants.ts","../../../projects/shared-components/src/lib/components/menu/menu.component.ts","../../../projects/shared-components/src/lib/components/menu/menu.component.html","../../../projects/shared-components/src/lib/components/label/label.component.ts","../../../projects/shared-components/src/lib/components/label/label.component.html","../../../projects/shared-components/src/lib/components/date-time-picker/date-time-picker.component.ts","../../../projects/shared-components/src/lib/components/date-time-picker/date-time-picker.component.html","../../../projects/shared-components/src/public-api.ts","../../../projects/shared-components/src/i-tech-shared-components.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({\n name: 'generateErrorMessages',\n standalone: true,\n pure: true\n})\nexport class GenerateErrorMessagesPipe implements PipeTransform {\n\n constructor(private translateService: TranslateService) {\n }\n\n transform(control: any,label: string,defaultPatternKey = 'fixed'): string {\n\n if (!control.errors) {\n return '';\n }\n const key = (Object.keys(control.errors)[0]);\n const translateParams: {ERROR_KEY: string} = { ERROR_KEY: this.translateService.instant(label) || 'Field' };\n const errorMessageKey = (key === 'pattern') ?\n 'errorMessages.pattern.' + defaultPatternKey : 'errorMessages.' + key;\n\n return this.translateService.instant(errorMessageKey,translateParams);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'arrayToString',\n standalone: true\n})\nexport class ArrayToStringPipe implements PipeTransform {\n\n transform(value: Array<string | number> | string): string {\n return (typeof value === 'string') ? value : value.join(',');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'getValueByKeyFromObject',\n standalone: true\n})\nexport class GetValueByKeyFromObjectPipe implements PipeTransform {\n\n transform(\n keys: string | Array<string | number>,\n data: any,\n withParams: Array<string | Array<string | number>> | null = null,\n withParamSymbol?: string\n ): string {\n if (typeof keys === 'string') {\n return data[keys];\n } else {\n let returnValue: any = data;\n keys.forEach((key: string | number) => {\n if (!returnValue) { return; }\n returnValue = returnValue[key];\n })\n if (withParams) {\n\n withParams.forEach((param: Array<string | number> | string) => {\n let include = data;\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n include = (include) ? include[key] : null;\n })\n } else {\n include = include[param];\n }\n\n if (include !== undefined && include !== null) {\n returnValue += (withParamSymbol ? withParamSymbol : ' ') + include;\n }\n })\n }\n\n return ((returnValue !== \"undefined\") && (returnValue !== null) ) ? returnValue : '---';\n }\n }\n\n}\n","import { ControlValueAccessor, FormControlName, NgControl } from \"@angular/forms\";\nimport { inject, Injectable } from \"@angular/core\";\n\nclass NoopValueAccessor implements ControlValueAccessor {\n writeValue() {\n // No-op: Intentionally empty to prevent value updates\n }\n\n registerOnChange() {\n // No-op: Intentionally empty to prevent change notifications\n }\n\n registerOnTouched() {\n // No-op: Intentionally empty to prevent touch notifications\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class InputService {\n injectNgControl(): FormControlName {\n const ngControl = inject(NgControl, { self: true, optional: true });\n\n if (!ngControl) throw new Error('...');\n\n if (ngControl instanceof FormControlName) {\n ngControl.valueAccessor = new NoopValueAccessor();\n return ngControl;\n }\n\n throw new Error(`...`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\nimport * as momentTimezone from 'moment-timezone';\nimport { HourMinute } from \"../interfaces/hour-minute.interface\";\n\n@Injectable()\nexport class ParseDateService {\n\n toLocaleTime(time: any, format = '', timezoneId: string | null): string {\n format = (format) ? format : 'MM/DD/yyyy hh:mm A';\n const momentDate = momentTimezone.utc(time);\n if (timezoneId) {\n momentDate.tz(timezoneId);\n }\n return momentDate.format(format);\n }\n\n fromLocaleToUtc(time: any, format = '', timezoneId: string | null): string {\n format = (format) ? format : 'MM/DD/yyyy hh:mm A';\n if (timezoneId) {\n return momentTimezone.tz(moment(time).format(format), timezoneId).utc(false).format();\n }\n return '';\n }\n\n toDate(date: string | undefined): Date {\n return moment(date).toDate();\n }\n\n toDateWithFormat(date: string, format: string): Date {\n return moment(date, format).toDate();\n }\n\n getDayDifferentFromCurrentDay(date: Date): number {\n return moment(date).diff(moment(), 'days')\n }\n\n changeFormat(time: any, format: string): string {\n return moment(time).format(format);\n }\n\n changeLocalFormat(time: any, format: string, timezone: string): string {\n return moment(time).tz(timezone).format(format);\n }\n\n addToDate(date: Date | null, toAdd: {second?: number , minute?: number, days?: number} = {}, format?: string | null, type: 'format' | 'date' = 'format' ): string | Date {\n const momentDate = (date ? moment(date) : moment())\n .add(toAdd.second || 0, 'second')\n .add(toAdd.minute || 0, 'minute')\n .add(toAdd.days || 0, 'days');\n\n if (type === 'format') {\n return momentDate.format(format || 'MM/DD/yyyy');\n }\n\n return momentDate.toDate();\n }\n\n getDateForWeekDay(day: number, forWeek = 0): Date {\n return moment().add(forWeek, 'week').day(day).toDate();\n }\n\n getLocalDateForWeekDay(day: number, forWeek = 0, timezoneId: string): Date {\n return moment().tz(timezoneId).add(forWeek, 'week').day(day).toDate();\n }\n\n containsDay(startDate: string, endDate: string, date: string): boolean {\n return moment(date).isBetween(startDate, endDate, 'days', '[]');\n }\n\n getDiff(startDate: string, endDate: string): any {\n return moment(startDate).diff(endDate);\n }\n\n transformHourMinuteToCorrectFormat(data: string | HourMinute, format = 'hh:mm A'): string {\n const dateObj = JSON.parse(JSON.stringify(data));\n const time = '2022-12-12T' + ((+dateObj.hour < 10 ? ('0' + (+dateObj.hour)) : dateObj.hour)\n + ':' + (+dateObj.minute < 10 ? ('0' + (+dateObj.minute)) : dateObj.minute) + ':00');\n return this.changeFormat(time, format);\n }\n\n\n}\n","/**\n * Enum representing different types of buttons.\n */\nexport enum ButtonType {\n /** A filled button with solid background, typically used for primary actions. */\n FILLED = 'FILLED',\n\n /** A tonal button with lighter background, used for secondary actions. */\n TONAL = 'TONAL',\n\n /** An outlined button with a border and no background. */\n OUTLINE = 'OUTLINE',\n\n /** A text button with no background or border, ideal for minimal UI. */\n TEXT = 'TEXT',\n\n /** A warning button with special styling to indicate caution or alert actions. */\n WARNING = 'WARNING',\n\n /** A warning outlined button with a border and no background. */\n WARN_OUTLINE = 'WARN_OUTLINE'\n}\n","export enum LabelTypeEnum {\n 'purple' = 'purple',\n 'teal' = 'teal',\n 'olive' = 'olive',\n 'orange' = 'orange',\n 'blue' = 'blue',\n 'cyan' = 'cyan',\n 'raspberry' = 'raspberry',\n 'yellow' = 'yellow',\n 'wine' = 'wine',\n 'primary' = 'primary',\n 'green' = 'green',\n 'red' = 'red',\n 'neutral' = 'neutral',\n 'white' = 'white',\n 'gray' = 'gray',\n 'canceled' = 'canceled'\n}\n","import {\n Directive,\n ElementRef, HostListener,\n Input\n} from '@angular/core';\n\n@Directive({\n selector: '[inputMask]',\n standalone: true\n})\nexport class InputMaskDirective {\n @Input() inputMask!: 'number' | 'string';\n @Input() set min(value: string) {\n this.minimumValue = Number(value);\n }\n @Input() set max(value: string) {\n this.maximumValue = Number(value);\n }\n @Input() set float(value: string) {\n this.isFloat = value === 'true';\n }\n minimumValue!: number;\n maximumValue!: number;\n isFloat!: boolean;\n regexFloat = new RegExp(/^([0-9]*[.])?[0-9]+$/);\n regexOnlyNumbers = new RegExp(/^-?[0-9]+(?:\\.[0-9]+)?$/);\n\n @HostListener('paste', ['$event'])\n onPaste(event: any) {\n this.makeValidation(event, true)\n }\n\n constructor(private elementRef: ElementRef) {\n this.elementRef.nativeElement.addEventListener('keypress', (event: Event) => {\n this.makeValidation(event)\n })\n }\n\n makeValidation(event: any, fromPaste = false): boolean {\n let value: any;\n let newChar: any;\n\n if (!fromPaste) {\n newChar = String.fromCharCode(event.keyCode);\n const cursorPos = event.target.selectionStart;\n const inputText = event.target.value;\n value = `${inputText.slice(0, cursorPos)}${newChar}${inputText.slice(cursorPos, inputText.length)}`;\n } else {\n value = event.clipboardData?.getData('text/plain');\n }\n\n if (this.inputMask === 'number') {\n return this.checkingForNumbers(value, event, newChar, fromPaste);\n } else if (this.inputMask === 'string') {\n return this.checkingForTexts(value, event);\n } else {\n return true\n }\n }\n\n checkingForNumbers(value: any, event: any, newChar: string, fromPaste = false): boolean {\n if ((isNaN(this.minimumValue) || this.minimumValue < 0) && value === '-') { value = Number('-0'); }\n\n if (this.isFloat && (newChar === '.')) {\n value += '0';\n }\n if (!this.isFloat && fromPaste && value.includes('.')) {\n event.preventDefault();\n return false;\n }\n\n const regex = (this.isFloat) ? this.regexFloat : this.regexOnlyNumbers;\n\n if (!regex.test(value) ||\n (this.minimumValue && value < this.minimumValue) ||\n (this.maximumValue && value > this.maximumValue)\n ) {\n event.preventDefault();\n return false;\n }\n\n return true;\n }\n\n checkingForTexts(value: any, event: any): boolean {\n const regex = new RegExp(/^[A-Za-z0-9]*$/);\n if (!regex.test(value)) {\n event.preventDefault();\n return false;\n }\n\n return true;\n }\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatFabButton, MatIconButton } from \"@angular/material/button\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n selector: 'i-tech-icon-button',\n templateUrl: './icon-button.component.html',\n styleUrl: './icon-button.component.scss',\n imports: [\n MatIconButton,\n NgClass,\n MatTooltip,\n TranslateModule,\n MatIcon,\n MatFabButton,\n NgIf\n ],\n standalone: true\n})\nexport class IconButtonComponent {\n @Input() size: 'medium' | 'small' = 'medium';\n @Input() type: 'standard' | 'filled' | 'tonal' = 'tonal';\n @Input() iconSvg!: string;\n @Input() iconName!: string;\n @Input() tooltip!: string;\n @Input() disabled!: boolean;\n @Output() buttonClick = new EventEmitter<void>();\n\n onClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.buttonClick.emit();\n }\n }\n}\n","<button\n *ngIf=\"['tonal','standard'].includes(type)\"\n mat-icon-button\n [ngClass]=\"{small: size === 'small', tonal: type === 'tonal', standard: type === 'standard'}\"\n [matTooltip]=\"tooltip | translate\"\n [matTooltipDisabled]=\"!tooltip\"\n [disabled]=\"disabled || false\"\n (click)=\"onClick($event)\"\n>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg\"></mat-icon>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n</button>\n\n<button\n *ngIf=\"type === 'filled'\"\n mat-fab\n class=\"filled\"\n [ngClass]=\"{small: size === 'small'}\"\n [matTooltip]=\"tooltip | translate\"\n [matTooltipDisabled]=\"!tooltip\"\n [color]=\"'primary'\"\n [disabled]=\"disabled || false\"\n (click)=\"onClick($event)\"\n>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg\"></mat-icon>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n</button>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormControlName, ReactiveFormsModule } from '@angular/forms';\nimport { InputService } from '../../services/input.service';\nimport { AppInputInterface } from \"../../interfaces/app-input.interface\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatInput } from \"@angular/material/input\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { InputMaskDirective } from \"../../directives/input-mask.directive\";\nimport { NgxMaskDirective } from \"ngx-mask\";\n\n@Component({\n selector: 'i-tech-text-input',\n templateUrl: './text-input.component.html',\n styleUrls: [],\n imports: [\n TranslateModule,\n NgClass,\n MatIcon,\n MatTooltip,\n MatInput,\n ReactiveFormsModule,\n NgIf,\n GenerateErrorMessagesPipe,\n IconButtonComponent,\n InputMaskDirective,\n NgxMaskDirective,\n MatFormFieldModule\n ],\n standalone: true\n})\nexport class TextInputComponent {\n @ViewChild('inputElement', { static: true }) input!: MatInput;\n\n @Input() set inputData(data: AppInputInterface) {\n // If submit becomes true, mark the control as touched\n if (data?.submit && this.ngControl.control) {\n this.ngControl.control.markAsTouched();\n }\n this._inputData = data;\n }\n\n get inputData(): AppInputInterface {\n return this._inputData;\n }\n\n @Output() focusOutEmitter = new EventEmitter<void>();\n @Output() valueChangeEmitter = new EventEmitter<any>();\n\n private _inputData!: AppInputInterface;\n ngControl: FormControlName;\n closed = false;\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl();\n\n // Subscribe to value changes of the control\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.valueChanges.subscribe(value => {\n if (this._inputData?.emitValueChanges) {\n this.valueChangeEmitter.emit(value);\n }\n });\n }\n }\n\n onFocusOut(): void {\n if (this._inputData.focusOutEmit) {\n this.focusOutEmitter.emit();\n }\n }\n\n clear(): void {\n if (this.ngControl) {\n this.ngControl.control.reset();\n }\n }\n\n toggleEye(): void {\n this.closed = !this.closed;\n this.input.type = this.closed ? 'password' : 'text';\n }\n\n onValueChange(): void {\n if (this._inputData?.emitValueChanges) {\n this.valueChangeEmitter.emit(this.ngControl.control.value);\n }\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.inputData?.submit);\n }\n };\n}\n","<div *ngIf=\"inputData && ngControl\">\n <div class=\"w-100\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : inputData.readOnly || ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && inputData.submit)\n }\"\n *ngIf=\"inputData.label\">\n {{ inputData.label | translate }}\n </mat-label>\n <span *ngIf=\"inputData.required\" class=\"required-input\"\n [ngClass]=\"{'readonly-color' : inputData.readOnly || ngControl.control.disabled}\">*</span>\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-100\"\n [class.readonly-field]=\"inputData.readOnly || ngControl.control.disabled\"\n >\n <!-- Leading Icon -->\n <mat-icon *ngIf=\"inputData.iconPrefix\"\n matPrefix\n [ngClass]=\"{\n 'readonly-color' : !inputData.iconPrefixColor &&\n (inputData.readOnly || ngControl.control.disabled),\n 'default-form-icon-color' : !inputData.iconPrefixColor &&\n !(inputData.readOnly || ngControl.control.disabled)\n }\"\n [matTooltip]=\"((inputData.iconPrefixTooltip || '') | translate)\"\n [style.color]=\"inputData.iconPrefixColor || null\"\n >{{ inputData.iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"inputData.iconPrefixSvg\"\n matPrefix\n [matTooltip]=\"((inputData.iconPrefixTooltip || '') | translate)\"\n [svgIcon]=\"inputData.iconPrefixSvg\"\n ></mat-icon>\n\n <!-- Input Field -->\n <input matInput #inputElement\n *ngIf=\"!inputData.textarea\"\n [type]=\"inputData.type || 'text'\"\n [readonly]=\"inputData.readOnly\"\n [placeholder]=\"(inputData.placeholder || '') | translate\"\n [pattern]=\"inputData.pattern!\"\n [formControl]=\"ngControl.control\"\n [mask]=\"inputData.mask || ''\"\n [ngClass]=\"{'readonly-color readonly-cursor' : inputData.readOnly || ngControl.control.disabled}\"\n [inputMask]=\"inputData.inputMask!\"\n [float]=\"'' + (inputData.float || false)\"\n [min]=\"('' + inputData.min)\"\n [max]=\"('' + inputData.max)\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n (blur)=\"onFocusOut()\"\n (keyup)=\"onValueChange()\"\n (change)=\"onValueChange()\"\n >\n\n <textarea matInput\n *ngIf=\"inputData.textarea\"\n [type]=\"inputData.type || 'text'\"\n [readonly]=\"inputData.readOnly\"\n [placeholder]=\"(inputData.placeholder || '') | translate\"\n [pattern]=\"inputData.pattern!\"\n [formControl]=\"ngControl.control\"\n [ngClass]=\"{'readonly-color' : inputData.readOnly || ngControl.control.disabled}\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n (keyup)=\"onValueChange()\"\n (change)=\"onValueChange()\"\n ></textarea>\n\n <!-- Clear Icon -->\n <i-tech-icon-button\n *ngIf=\"inputData.clearable\"\n iconName=\"cancel\"\n matSuffix\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"clear()\"\n >\n </i-tech-icon-button>\n\n <i-tech-icon-button\n *ngIf=\"inputData.type === 'password'\"\n [iconName]=\"closed ? 'visible' : 'visibility_off'\"\n matSuffix\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"toggleEye()\"\n >\n </i-tech-icon-button>\n\n <!-- Trailing Icon -->\n <i-tech-icon-button\n *ngIf=\"inputData.iconSuffix\"\n [iconName]=\"inputData.iconSuffix\"\n [disabled]=\"inputData.readOnly || ngControl.control.disabled || false\"\n [ngClass]=\"inputData.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n matSuffix\n >\n </i-tech-icon-button>\n\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && inputData.submit)\">\n {{ ngControl.control | generateErrorMessages : (inputData.label || '') : inputData.defaultPatternKey }}\n </mat-error>\n\n <!-- Helper Text -->\n <mat-hint *ngIf=\"!(!!(ngControl.control.errors && inputData.submit)) && inputData.hint\">\n {{ inputData.hint | translate }}\n </mat-hint>\n </mat-form-field>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButton } from \"@angular/material/button\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule, TranslatePipe, TranslateService } from \"@ngx-translate/core\";\nimport { ButtonType } from '../../interfaces/button-types.enum';\nimport { NgxMaskDirective, NgxMaskPipe } from 'ngx-mask';\n\n/**\n * A reusable button component with Material Design styling and custom functionality.\n */\n@Component({\n selector: 'i-tech-button',\n standalone: true,\n imports: [\n MatButton,\n NgClass,\n MatProgressSpinner,\n NgIf,\n MatIconModule,\n TranslateModule\n ],\n templateUrl: './button.component.html',\n styleUrl: './button.component.css',\n providers: [\n NgxMaskDirective,\n NgxMaskPipe,\n TranslatePipe,\n TranslateService\n ]\n})\nexport class ButtonComponent {\n /**\n * The text displayed inside the button.\n */\n @Input() text = '';\n\n /**\n * Data attribute used for Cypress or other testing frameworks.\n */\n @Input() data_cy = '';\n\n /**\n * Font icon class for displaying an icon (e.g., Material Icons).\n */\n @Input() fontIcon = '';\n\n /**\n * SVG icon name for displaying an SVG icon.\n */\n @Input() svgIcon = '';\n\n /**\n * Defines the type of button (e.g., `FILLED`, `OUTLINED`).\n */\n @Input() type: ButtonType = ButtonType.FILLED;\n\n /**\n * Additional custom classes to style the button.\n */\n @Input() customClass = '';\n\n /**\n * If true, the button acts as a submit button.\n */\n @Input() submit = false;\n\n /**\n * If true, the button is disabled and cannot be clicked.\n */\n @Input() disabled = false;\n\n /**\n * Indicates whether the button is currently activated.\n */\n @Input() activated = false;\n\n /**\n * The color of the button (e.g., `primary`, `warn`).\n */\n @Input() color: 'primary' | 'warn' = 'primary';\n\n /**\n * Emits an event when the button is clicked.\n */\n @Output() buttonClick = new EventEmitter<void>();\n\n /**\n * Enum reference for `ButtonType` to use in templates.\n */\n protected readonly ButtonType = ButtonType;\n\n /**\n * Handles the button click event.\n *\n * @param event - The mouse event triggered by clicking the button.\n */\n onClick(event: MouseEvent): void {\n if (!this.disabled && !this.submit) {\n this.buttonClick.emit();\n }\n }\n}\n","<button *ngIf=\"[ButtonType.FILLED,ButtonType.WARNING].includes(type)\"\n mat-flat-button\n [attr.data-cy]=\"data_cy\"\n [color]=\"type === ButtonType.WARNING ? 'warn' : color\"\n [class.activated]=\"activated\"\n [ngClass]=\"(customClass || '')\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\">{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span>{{text | translate}}</span>\n</button>\n<button *ngIf=\"[ButtonType.TONAL,ButtonType.TEXT].includes(type)\"\n mat-button\n [attr.data-cy]=\"data_cy\"\n [ngClass]=\"(type === ButtonType.TONAL ? 'tertiary ' : '') + (customClass || '')\"\n [class.activated]=\"activated\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\">{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n\n <span>{{text | translate}}</span>\n</button>\n<button *ngIf=\"[ButtonType.OUTLINE,ButtonType.WARN_OUTLINE].includes(type)\"\n mat-stroked-button\n [attr.data-cy]=\"data_cy\"\n [ngClass]=\"(customClass || '') \"\n [color]=\"type === ButtonType.WARN_OUTLINE ? 'warn' : color\"\n [disabled]=\"disabled || submit\"\n (click)=\"onClick($event)\"\n [class.activated]=\"activated\"\n>\n <span *ngIf=\"submit\" class=\"spinner-overlay\">\n <mat-spinner diameter=\"16\"></mat-spinner>\n </span>\n <mat-icon *ngIf=\"fontIcon && !submit\" >{{fontIcon}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon && !submit\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span>{{text | translate}}</span>\n</button>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NgClass, NgOptimizedImage } from \"@angular/common\";\n\n@Component({\n selector: 'i-tech-clear-value',\n template: `<img\n class=\"pointer\"\n [ngClass]=\"className || 'standard'\"\n (click)=\"resetValue.emit()\"\n ngSrc=\"./ic_close.svg\"\n height=\"24\" width=\"24\" alt=\"\"/>`,\n styles: [`\n img {\n position: absolute;\n width: 15px;\n height: 15px;\n }\n\n .big {\n width: 25px;\n height: 25px;\n }\n\n .range_date {\n right: -65px;\n top: 15px;\n }\n\n .standard {\n right: -20px;\n top: 40px;\n }\n `],\n imports: [\n NgClass,\n NgOptimizedImage\n ],\n standalone: true\n})\nexport class ClearValueComponent {\n @Input() className!: string;\n @Input() additionalClass!: string;\n @Output() resetValue = new EventEmitter<any>();\n}\n","import {\n Component,\n ViewChild,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ElementRef, HostListener, AfterViewInit\n} from '@angular/core';\nimport { MatSelect, MatSelectModule } from \"@angular/material/select\";\nimport { AutocompleteConfigsInterface } from \"../../interfaces/autocomplete-configs.interface\";\nimport { FormControlName, ReactiveFormsModule } from \"@angular/forms\";\nimport { InputService } from '../../services/input.service';\nimport { ButtonType } from '../../interfaces/button-types.enum';\nimport { NgClass, NgFor, NgIf, NgOptimizedImage } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { ButtonComponent } from \"../button/button.component\";\nimport { GetValueByKeyFromObjectPipe } from \"../../pipes/get-value-by-key-from-object.pipe\";\nimport { ArrayToStringPipe } from \"../../pipes/array-to-string.pipe\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { ClearValueComponent } from \"../clear-value/clear-value.component\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\n\n@Component({\n selector: 'i-tech-autocomplete-select',\n templateUrl: './autocomplete-select.component.html',\n styleUrls: ['./autocomplete-select.component.scss'],\n imports: [\n NgClass,\n MatTooltip,\n NgIf,\n NgFor,\n TranslateModule,\n IconButtonComponent,\n ReactiveFormsModule,\n MatSelectModule,\n ButtonComponent,\n GetValueByKeyFromObjectPipe,\n ArrayToStringPipe,\n NgOptimizedImage,\n MatIcon,\n GenerateErrorMessagesPipe,\n ClearValueComponent,\n MatFormFieldModule\n ],\n standalone: true\n})\nexport class AutocompleteSelectComponent implements OnChanges, AfterViewInit {\n @ViewChild('matSelect') matSelect!: MatSelect;\n @ViewChild('searchInput') searchInput!: ElementRef;\n @Input() className!: string;\n @Input() submitValue!: boolean;\n\n /**\n * See AutocompleteConfigsInterface for available configurations.\n */\n @Input() set configs(data: AutocompleteConfigsInterface) {\n this.selectConfig = data;\n if (!data) {\n return;\n }\n\n if ((typeof this.selectConfig.paginate) === 'function') {\n if (this.firstRequest) {\n return;\n }\n this.getData();\n this.firstRequest = true\n return;\n }\n\n this.data = this.selectConfig.paginate;\n this.findAndSetDefaultValueFromData();\n };\n\n @Input() detectChanges!: boolean;\n @Output() selectionChange = new EventEmitter<any>();\n @Output() emitAction = new EventEmitter<any>();\n @ViewChild('allSelected') allSelected!: MatSelect;\n pending = false;\n defaultValue!: any;\n data: Array<any> = [];\n paginationData: any = { current: 1, last: 0, searchValue: '' };\n ngControl: FormControlName;\n selectConfig!: AutocompleteConfigsInterface;\n firstRequest = false;\n showPlaceholder = true;\n isNeededForRecall = false;\n showingValue: any;\n selectedOptionForMultipleSelection: Array<any> = [];\n searchTimeoutId: any;\n tabVisibility!: boolean;\n accessToNextRequest = true;\n disabled = false;\n blockRecallDefaultValueSetter = false;\n baseData: any;\n requestLoading = false;\n protected readonly ButtonType = ButtonType;\n\n @HostListener('document:visibilitychange')\n handleVisibilityChange(): void {\n this.tabVisibility = !document.hidden;\n if (this.ngControl.control.value) {\n return;\n }\n this.closePanelAndUnsetFocus();\n if (!document.hidden) {\n this.isNeededForRecall = true;\n this.pending = true;\n setTimeout(() => {\n this.pending = false\n }, 4000)\n }\n }\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['selectConfig'] && this.selectConfig) {\n if ((typeof this.selectConfig.paginate) === 'function') {\n this.getData();\n }\n }\n }\n\n ngAfterViewInit() {\n this.ngControl.control.valueChanges.subscribe((newValue: any) => {\n // If we have data and a value\n if (this.data.length && newValue) {\n // Check if the current default value doesn't match the new value\n if (!this.defaultValue || this.defaultValue.id !== newValue) {\n // Reset the block flag to allow updating the value\n this.blockRecallDefaultValueSetter = false;\n this.findAndSetDefaultValueFromData();\n }\n } else if (newValue && !this.data.length) {\n // If we have a value but no data, we need to fetch the data\n this.blockRecallDefaultValueSetter = false;\n this.isNeededForRecall = true;\n this.reCallData();\n }\n });\n }\n\n hardReload(): void {\n this.getData('', true);\n }\n\n /**\n * Dynamic request for select data.\n * @param searchText - The input value to search options by.\n * @param fromSearch - Access for search.\n * @returns Select data.\n */\n getData(searchText?: string, fromSearch?: boolean): void {\n if (!fromSearch && !this.accessToNextRequest) {\n return;\n }\n\n if (this.requestLoading) {\n return;\n }\n\n if (fromSearch) {\n this.paginationData.current = 1;\n this.accessToNextRequest = true;\n this.paginationData.searchValue = searchText || '';\n }\n\n const functionToDo = this.selectConfig.paginate(this.paginationData.current, this.paginationData?.searchValue || '');\n\n this.requestLoading = true;\n functionToDo?.subscribe((data: Array<any> | any) => {\n const dataToAdd = ('content' in data) ? data.content : data;\n\n if ('content' in data) {\n this.accessToNextRequest = !data.last || (data.totalPages > this.paginationData.current);\n }\n\n this.data = (fromSearch || this.selectConfig?.blockPagination) ? dataToAdd : [...this.data, ...dataToAdd];\n this.pending = false;\n this.requestLoading = false;\n\n if (!dataToAdd.length) {\n this.paginationData.last = this.paginationData.current;\n return;\n }\n\n this.paginationData.current += 1;\n this.paginationData.last += 1;\n setTimeout(() => {\n this.findAndSetDefaultValueFromData();\n }, 10)\n }, () => {\n this.pending = false;\n this.requestLoading = false;\n })\n }\n\n findAndSetDefaultValueFromData(): void {\n if (this.selectConfig.multiple) {\n if (this.ngControl.value && this.ngControl.value.length == 1) {\n this.setShowingValue(this.data.find((item) => item.id === this.ngControl.value[0]))\n }\n } else {\n const isDisabled = this.ngControl.disabled;\n if (isDisabled) {\n // TODO Remove after migrating all selects\n // this.ngControl.control.enable();\n // if (!this.ngControl.value && !this.data.length) {\n // this.ngControl.control.disable();\n // return;\n // }\n // this.setDefaultValue();\n // this.ngControl.control.disable();\n } else {\n if (!this.ngControl.value && !this.data) {\n return;\n }\n this.setDefaultValue();\n }\n\n }\n }\n\n setDefaultValue(): void {\n this.defaultValue = this.data.find((item) => item.id === this.ngControl.value);\n this.baseData = this.defaultValue\n if (!this.defaultValue) {\n return;\n }\n this.selectionChange.emit()\n this.setShowingValue(this.defaultValue);\n }\n\n optionClick(showingData: any): void {\n this.baseData = showingData\n if (!this.selectConfig.multiple) {\n this.setShowingValue(showingData);\n this.matSelect.close();\n return;\n }\n if (this.searchInput) {\n if (this.selectConfig.multiple) {\n this.toggleShowingDataInSelectedOptionsMultipleCase(showingData);\n } else {\n this.inputFocusOut();\n }\n }\n\n this.setShowingValue(showingData);\n this.showPlaceholder = false;\n }\n\n toggleShowingDataInSelectedOptionsMultipleCase(showingData: any): void {\n const showingDataByJson = JSON.stringify(showingData);\n const indexOfExistingOption = this.selectedOptionForMultipleSelection.findIndex(\n (optionValue: any) => JSON.stringify(optionValue) === showingDataByJson\n )\n if (indexOfExistingOption >= 0) {\n this.selectedOptionForMultipleSelection.splice(indexOfExistingOption, 1);\n } else {\n this.selectedOptionForMultipleSelection.push(showingData);\n }\n }\n\n addNewItemEvent(): void {\n this.isNeededForRecall = true;\n this.emitAction.emit();\n }\n\n /**\n * Filter and show.\n * @param data - Existing chosen data.\n */\n setShowingValue(data: any): void {\n if (!data) {\n return;\n }\n if (this.selectConfig.multiple && this.selectConfig.search) {\n const fullText: Array<string> = [];\n this.selectedOptionForMultipleSelection.forEach((optionData: any) => {\n fullText.push(this.collectAndGetSelectionToShowForOneOption(optionData))\n })\n this.showingValue = fullText.join(',');\n } else {\n this.showingValue = this.collectAndGetSelectionToShowForOneOption(data);\n }\n this.blockRecallDefaultValueSetter = true;\n }\n\n collectAndGetSelectionToShowForOneOption(data: any): string {\n let include = data;\n let includeOptional = data;\n\n if (this.selectConfig.valueToShowByKey) {\n this.selectConfig.valueToShowByKey.forEach((param: Array<string | number> | string) => {\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n include = (include) ? include[key] : null;\n })\n } else {\n include = include[param];\n }\n })\n if (this.selectConfig.showFullTextWithOptionalOnSelectedValue) {\n this.selectConfig.valueToShowByParam?.forEach((param: Array<string | number> | string) => {\n\n if (typeof param === 'object') {\n param.forEach((key: string | number) => {\n includeOptional = (includeOptional) ? includeOptional[key] : null;\n })\n } else {\n includeOptional = includeOptional[param];\n }\n })\n if (this.selectConfig.valueToShowByParam && typeof includeOptional === 'string') {\n include += (this.selectConfig.withParamSymbol || '') + includeOptional\n }\n }\n }\n\n return include;\n }\n\n /**\n * Block another events.\n * @param event - Element click event.\n */\n preventDefault(event: any) {\n if (!this.selectConfig.multiple) {\n return;\n }\n event.preventDefault()\n }\n\n registerPanelScrollEvent(element: MatSelect) {\n if (this.selectConfig.paginateOnScroll === false) {\n return;\n }\n\n const panel = element.panel.nativeElement;\n panel.addEventListener('scroll', (event: any) => this.loadDataOnScroll(event));\n }\n\n loadDataOnScroll(event: any) {\n const pos = (event.target.scrollTop || event.target.scrollTop) + event.target.offsetHeight;\n const max = event.target.scrollHeight;\n if ((pos + 1) >= max) {\n if (this.paginationData.current === this.paginationData.last || this.selectConfig.blockPagination) {\n return;\n }\n this.getData();\n }\n }\n\n focusSearchInput() {\n if (this.selectConfig.search && this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n\n inputFocusOut(): void {\n this.isNeededForRecall = !!this.searchInput.nativeElement.value;\n this.searchInput.nativeElement.value = '';\n this.showPlaceholder = true;\n this.clearTimeoutForSearch();\n }\n\n resetValue(): void {\n this.selectionChange.emit(null);\n this.ngControl.reset(null);\n this.inputFocusOut();\n }\n\n getDataWithSearch(value: any, event: any): void {\n this.clearTimeoutForSearch();\n if (value.length >= 1) {\n this.searchTimeoutId = setTimeout(() => {\n this.getData(value, true)\n }, 800);\n } else if (value.length <= 1 && event.keyCode === 8) {\n this.getData(value, true)\n }\n }\n\n clearTimeoutForSearch(): void {\n if (this.searchTimeoutId) {\n clearTimeout(this.searchTimeoutId);\n this.searchTimeoutId = 0;\n }\n }\n\n openSelection(): void {\n if (this.selectConfig.disabled || this.ngControl.control.disabled) {\n return;\n }\n if (this.showPlaceholder) {\n this.matSelect.open();\n } else {\n this.closePanelAndUnsetFocus();\n }\n this.showPlaceholder = !this.showPlaceholder;\n if (!this.showPlaceholder) {\n this.reCallData();\n }\n }\n\n closePanelAndUnsetFocus(): void {\n this.matSelect.close();\n if (this.searchInput) {\n this.searchInput.nativeElement.blur()\n }\n }\n\n openedChange(event: any) {\n if (event) {\n if (this.isNeededForRecall) {\n this.reCallData();\n return;\n }\n if (!this.selectConfig.search) {\n this.pending = false\n this.reCallData();\n }\n\n return;\n }\n\n this.showPlaceholder = true;\n }\n\n reCallData(): void {\n // TODO refactor this part\n if (!this.isNeededForRecall) {\n return;\n }\n this.data = [];\n this.pending = true;\n this.paginationData = {\n current: 1,\n last: 0,\n };\n this.accessToNextRequest = true;\n if ((typeof this.selectConfig.paginate) === 'function') {\n this.getData();\n } else {\n this.pending = false;\n this.data = this.selectConfig.paginate;\n }\n this.isNeededForRecall = false;\n }\n\n emitSelectionChangeAndClose(event: any) {\n this.selectionChange.emit(event.value);\n if (this.selectConfig.multiple) {\n if (!event.value?.length) {\n this.ngControl.control.reset();\n }\n return;\n }\n this.matSelect.close();\n }\n\n /*\n * Open mat-select and focus on search on icon click\n */\n iconClick(matSelect: MatSelect, searchInput?: ElementRef): void {\n matSelect.open();\n searchInput?.nativeElement?.focus();\n }\n\n /*\n * Custom error state matcher for mat-select to properly show error state in mat-form-field\n */\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submitValue);\n }\n };\n}\n","<div class=\"new-mat-autocomplete\" id=\"mat_autocomplete\"\n [ngClass]=\"{\n 'mat-select-without_icon': !selectConfig.iconUrl && !selectConfig.activeStateIconUrl,\n 'mat-select-with-search': selectConfig.search,\n 'without-label': selectConfig.hideLabel,\n 'invalid_field': ngControl.control.errors && submitValue,\n 'readonly-field': selectConfig.readOnly || ngControl.control.disabled\n }\"\n [matTooltip]=\"(selectConfig.hover && !ngControl.control.disabled ? ((selectConfig.hover || '') | translate) : '')\"\n [matTooltipClass]=\"'mat-mdc-tooltip big-td-mat-tooltip'\"\n [matTooltipPosition]=\"'above'\"\n *ngIf=\"selectConfig && ngControl\">\n\n <div class=\"w-100\" *ngIf=\"!selectConfig.hideLabel\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : selectConfig.readOnly || ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && submitValue)\n }\">\n {{ selectConfig.label | translate }}\n </mat-label>\n <span *ngIf=\"selectConfig.required\" class=\"required-input\"\n [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\">*</span>\n </div>\n\n\n <!-- Search Input -->\n <div class=\"search-input w-100\"\n (click)=\"$event.stopPropagation();$event.preventDefault()\"\n [ngClass]=\"{ hide_input_placeholder: showPlaceholder || ngControl.control.disabled }\"\n *ngIf=\"selectConfig.search\"\n >\n <input autocomplete=\"off\"\n id=\"searchInput\"\n type=\"text\"\n [ngClass]=\"{'pr-25': !selectConfig.iconUrl}\"\n #searchInput\n [disabled]=\"ngControl.control.disabled || selectConfig.hover\"\n [placeholder]=\"(ngControl.control.disabled || selectConfig.hover) ? '' : 'Search'\"\n (focusout)=\"inputFocusOut()\"\n (focus)=\"openSelection()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"getDataWithSearch(searchInput.value,$event)\">\n\n <!-- Search Icon -->\n <span class=\"search-icon\">\n <i-tech-icon-button\n class=\"mr-10\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color'\n : 'default-form-icon-color'\"\n *ngIf=\"selectConfig.iconPrefix && !showPlaceholder\"\n [iconName]=\"selectConfig.iconPrefix || ''\"\n [disabled]=\"selectConfig.readOnly || false\"\n matPrefix\n >\n </i-tech-icon-button>\n </span>\n </div>\n\n <!-- Placeholder/Selected Value Display -->\n <ng-container *ngIf=\"showPlaceholder && selectConfig.search\">\n <div class=\"custom-placeholder\"\n *ngIf=\"(!ngControl?.value && !ngControl?.value?.length) ||\n (selectConfig.multiple && ngControl?.value && !ngControl?.value?.length)\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n >\n {{ ((selectConfig.placeholder || '') | translate) }}\n </div>\n <div class=\"custom-placeholder custom-value ellipsis\"\n [ngClass]=\"{\n 'pr-42': selectConfig.iconUrl,\n 'readonly-color': selectConfig.readOnly || ngControl.control.disabled,\n 'default-form-icon-color': !(selectConfig.readOnly || ngControl.control.disabled)\n }\"\n *ngIf=\"ngControl?.value\"\n >\n {{showingValue}}\n </div>\n </ng-container>\n\n <!-- Custom Icon -->\n <img class=\"left_icon_new pointer\"\n alt=\"Toggle Selection\"\n (click)=\"iconClick(matSelect, searchInput)\"\n *ngIf=\"!selectConfig.matIconName && (selectConfig.iconUrl || selectConfig.activeStateIconUrl)\"\n [src]=\"'assets/images/icons/global/' + (ngControl.control?.value && selectConfig?.activeStateIconUrl ?\n selectConfig.activeStateIconUrl\n : selectConfig.iconUrl)\">\n\n <mat-form-field appearance=\"outline\" class=\"w-100\" (click)=\"selectConfig?.search ? focusSearchInput() : null\">\n <!-- Material Select -->\n <mat-select #matSelect=\"matSelect\"\n [panelClass]=\"'autocomplete-transform-panel-location'\"\n [attr.aria-placeholder]=\"(selectConfig.placeholder || '') | translate\"\n [aria-label]=\"selectConfig.label | translate\"\n [id]=\"selectConfig.filtrationKey || ''\"\n (opened)=\"registerPanelScrollEvent(matSelect)\"\n (openedChange)=\"openedChange($event)\"\n [formControl]=\"ngControl.control\"\n [multiple]=\"selectConfig.multiple\"\n (selectionChange)=\"emitSelectionChangeAndClose($event)\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [placeholder]=\"(selectConfig.placeholder || '') | translate\"\n [disabled]=\"ngControl.control.disabled\"\n >\n\n <!-- Loading State -->\n <mat-option *ngIf=\"pending\" class=\"option_loading relative\">\n <div class=\"request_loading\">\n <img ngSrc=\"./loader.svg\" alt=\"\" height=\"200\" width=\"200\"/>\n </div>\n </mat-option>\n\n <!-- Options -->\n <ng-container *ngIf=\"data?.length && !pending\">\n <!-- Add New Option -->\n <mat-option *ngIf=\"selectConfig.actions\"\n class=\"pointer add_new\"\n disabled\n (click)=\"closePanelAndUnsetFocus();addNewItemEvent()\">\n <!--(click)=\"ngControl.control.reset(null);\n matSelect._onBlur();closePanelAndUnsetFocus();addNewItemEvent()\">-->\n <i-tech-button\n [type]=\"ButtonType.OUTLINE\"\n [fontIcon]=\"'add'\"\n [text]=\"('dropdown_add_item' | translate : {INPUT_NAME: (selectConfig.label | translate)}) \"\n [customClass]=\"'w-100 mat-autocomplete-select-button'\">\n </i-tech-button>\n </mat-option>\n\n <!-- Regular Options -->\n <ng-container *ngIf=\"!selectConfig?.changeText && data.length\">\n <mat-option *ngFor=\"let item of data\"\n [value]=\"selectConfig.valueByKey | getValueByKeyFromObject : item\"\n (mouseup)=\"optionClick(item)\"\n (mousedown)=\"preventDefault($event)\">\n @if (selectConfig?.needTranslateOptions) {\n {{\n ((selectConfig.valueToShowByKey | getValueByKeyFromObject\n : item : selectConfig.valueToShowByParam : selectConfig.withParamSymbol) || '') | translate\n }}\n }@else {\n {{\n ((selectConfig.valueToShowByKey | getValueByKeyFromObject\n : item : selectConfig.valueToShowByParam : selectConfig.withParamSymbol) || '')\n }}\n }\n\n </mat-option>\n </ng-container>\n\n <!-- Custom Text Options -->\n <ng-container *ngIf=\"selectConfig?.changeText && data.length\">\n <mat-option *ngFor=\"let item of data\"\n [value]=\"selectConfig.valueByKey | getValueByKeyFromObject : item\"\n (mouseup)=\"optionClick(item)\"\n (mousedown)=\"preventDefault($event)\"\n [disabled]=\"selectConfig?.changeText[item].disabled\">\n {{ selectConfig?.needTranslateOptions ? (selectConfig?.changeText[item].text | translate ) : selectConfig?.changeText[item].text}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <!-- Empty State -->\n <ng-container *ngIf=\"!pending && !data.length\">\n <mat-option disabled class=\"empty_selection_state\">\n <div class=\"actions_and_tile add_new flex_column w-100 flex_center_align_center\">\n <span>{{ 'dropdown_no_items' | translate }}</span>\n <div class=\"mt-10\">\n <i-tech-button\n *ngIf=\"selectConfig?.actions\"\n [type]=\"ButtonType.OUTLINE\"\n (buttonClick)=\"closePanelAndUnsetFocus();addNewItemEvent()\"\n [customClass]=\"'mat-autocomplete-select-button'\"\n [fontIcon]=\"'add'\"\n [text]=\"('dropdown_add_item' | translate : {INPUT_NAME: (selectConfig.label | translate)}) \">\n </i-tech-button>\n </div>\n </div>\n </mat-option>\n </ng-container>\n </mat-select>\n <mat-icon *ngIf=\"selectConfig.iconPrefix\"\n matPrefix\n [ngClass]=\"{\n 'readonly-color' : !selectConfig['iconPrefixColor']\n && (selectConfig.readOnly || ngControl.control.disabled),\n 'default-form-icon-color' : !selectConfig['iconPrefixColor']\n && !(selectConfig.readOnly || ngControl.control.disabled)\n }\"\n [matTooltip]=\"((selectConfig?.['iconPrefixTooltip'] || '') | translate)\"\n >{{ selectConfig.iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"selectConfig['iconPrefixSvg']\"\n matPrefix\n [matTooltip]=\"((selectConfig?.['iconPrefixTooltip'] || '') | translate)\"\n [svgIcon]=\"selectConfig['iconPrefixSvg'] || ''\"\n ></mat-icon>\n\n <i-tech-icon-button\n *ngIf=\"selectConfig.search && selectConfig.clearable && !ngControl.control.disabled && !!ngControl.control.value\"\n iconName=\"cancel\"\n matSuffix\n [disabled]=\"selectConfig.readOnly || false\"\n [ngClass]=\"selectConfig.readOnly || ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"\n $event.stopPropagation();\n $event.preventDefault();\n ngControl.control.reset(null);\n matSelect._onBlur();\n closePanelAndUnsetFocus()\n \"\n >\n </i-tech-icon-button>\n <mat-icon\n matSuffix\n class=\"select-arrow\"\n [class.open]=\"matSelect.panelOpen\"\n [ngClass]=\"{\n 'readonly-color': selectConfig.readOnly || ngControl.control.disabled,\n 'default-form-icon-color': !(selectConfig.readOnly || ngControl.control.disabled),\n 'mt-8': !!ngControl.control.value && selectConfig.clearable\n }\"\n >\n keyboard_arrow_down\n </mat-icon>\n <!-- Error Message -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submitValue)\">\n {{ ngControl.control | generateErrorMessages : selectConfig.label : selectConfig.defaultPatternKey }}\n </mat-error>\n </mat-form-field>\n\n <!-- Reset Button -->\n <i-tech-clear-value *ngIf=\"selectConfig.reset\" (resetValue)=\"resetValue()\"></i-tech-clear-value>\n</div>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Injector, Input\n} from '@angular/core';\nimport { NgxMaskDirective, NgxMaskService } from 'ngx-mask';\nimport { MatDatepicker } from \"@angular/material/datepicker\";\nimport { AbstractControl } from \"@angular/forms\";\n\n@Directive({\n selector: '[dateMask]',\n providers:[NgxMaskDirective],\n standalone: true\n})\nexport class DateMaskDirective {\n @Input() maskType!: string;\n @Input() matDatepicker!: MatDatepicker<any>;\n @Input() rangeFormControl!: AbstractControl;\n\n expressions = {\n DMY: 'M0/d0/0000',\n DM: 'M0/d0'\n }\n maskService: any;\n dateRegex = new RegExp(/^\\s*(1[012]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])\\/((?:19|20)\\d{2})\\s*$/);\n dayMonthRegex = new RegExp(/^\\s*(1[012]|0?[1-9])\\/(3[01]|[12][0-9]|0?[1-9])$/);\n previousValue = '';\n\n constructor(\n private elementRef: ElementRef,\n private injector: Injector,\n ) {\n this.maskService = this.injector.get(NgxMaskService);\n }\n\n @HostListener('input')\n onInput() {\n let value = this.elementRef.nativeElement.value;\n\n if (this.existsZerosInString(value)) {\n value = this.previousValue;\n }\n\n const maskedValue = this.maskService.applyMask(\n value,\n this.maskType === 'DAY_MONTH' ? this.expressions.DM : this.expressions.DMY\n );\n\n if (this.maskType !== 'DAY_MONTH' && !isNaN(new Date(maskedValue).getTime())) {\n if (this.matDatepicker) {\n this.matDatepicker.select(new Date(maskedValue));\n } else if (this.rangeFormControl) {\n this.rangeFormControl.setValue(new Date(maskedValue));\n }\n }\n\n if (isNaN(new Date(maskedValue).getTime())) {\n this.matDatepicker.select(null)\n }\n\n this.elementRef.nativeElement.value = maskedValue || null;\n this.previousValue = maskedValue || null;\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n const pastedValue = event.clipboardData?.getData('text/plain');\n if (!pastedValue) { return; }\n if (this.maskType === 'DAY_MONTH') {\n if (!this.dayMonthRegex.test(pastedValue)) {\n event?.preventDefault();\n }\n } else {\n if (!this.dateRegex.test(pastedValue)) {\n event?.preventDefault();\n }\n }\n }\n\n existsZerosInString(date: string): boolean {\n const dateToArray = date.split('/');\n let isValid;\n if (this.maskType === 'DAY_MONTH') {\n isValid = !!dateToArray.find((part: string) => part.includes('00'));\n } else {\n if (dateToArray.length < 3) {\n isValid = !!dateToArray.find((part: string) => part.includes('00'));\n } else {\n isValid = (dateToArray[2][0] == '0') || (+dateToArray[2][0] > 2);\n }\n\n }\n return isValid;\n }\n\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormControlName, ReactiveFormsModule } from \"@angular/forms\";\nimport { InputService } from '../../services/input.service';\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\n\n@Component({\n selector: 'i-tech-date-picker',\n templateUrl: './date-picker.component.html',\n imports: [\n NgClass, NgIf,\n TranslateModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatInput,\n MatTooltip,\n MatIconModule,\n DateMaskDirective,\n GenerateErrorMessagesPipe, IconButtonComponent\n ],\n standalone: true\n})\nexport class DatePickerComponent {\n @Input() label = '';\n @Input() defaultPatternKey!: string ;\n @Input() required = false;\n @Input() pastDatesDisabled = false;\n @Input() hintText = '';\n @Input() placeholder = 'MM/DD/YYYY';\n @Input() iconPrefix?: string;\n @Input() iconPrefixSvg?: string;\n @Input() iconPrefixTooltip?: string;\n @Input() iconPrefixColor?: string;\n @Input() iconPrefixVariant?: string;\n @Input() valueChangeEmit?: boolean;\n @Input() minDate: Date | null = null;\n @Input() clearable = false;\n\n @Input() submit = false;\n @ViewChild('inputElement') inputElement!: ElementRef;\n @Output() valueChangeEmitter = new EventEmitter<void>();\n\n isOpen = false;\n focused = false;\n\n ngControl: FormControlName;\n\n today: Date = new Date();\n\n // Filter to disable past dates\n dateFilter = (date: Date | null): boolean => {\n if (this.pastDatesDisabled) {\n const today = this.today;\n return date ? date >= today : false;\n } else {\n return true;\n }\n };\n\n constructor(private inputService: InputService) {\n this.ngControl = this.inputService.injectNgControl() as FormControlName;\n }\n\n emitChange(): void {\n if (!this.valueChangeEmit) { return; }\n this.valueChangeEmitter.emit();\n }\n\n clickForFocusOut(): void {\n setTimeout(() => {\n this.inputElement.nativeElement.focus();\n this.inputElement.nativeElement.blur();\n },120)\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submit);\n }\n };\n}\n","<div class=\"flex_column relative mat-date-range-input\" *ngIf=\"ngControl\" [ngClass]=\"{'check_requirements': submit}\">\n <div class=\"w-100\">\n <mat-label [ngClass]=\"{\n 'readonly-color' : ngControl.control.disabled,\n 'invalid-label-color': !!(ngControl.control.errors && submit)\n }\">\n {{ label | translate }}\n </mat-label>\n <span *ngIf=\"required\" class=\"required-input\" [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\">*</span>\n </div>\n <mat-form-field appearance=\"outline\" [ngClass]=\"{'opened_calendar': isOpen}\"\n [class.readonly-field]=\"ngControl.control.disabled\">\n <input matInput #inputElement\n type=\"text\"\n [formControl]=\"ngControl.control\"\n [placeholder]=\"placeholder | translate\"\n [min]=\"minDate\"\n dateMask\n [matDatepicker]=\"datePicker\"\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [matDatepickerFilter]=\"dateFilter\"\n (focus)=\"focused = true\"\n (click)=\"datePicker.open();\"\n (dateChange)=\"emitChange()\"\n >\n\n <mat-icon *ngIf=\"iconPrefix\"\n matPrefix\n [matTooltip]=\"((iconPrefixTooltip || '') | translate)\"\n [style.color]=\"iconPrefixColor\"\n >{{ iconPrefix }}\n </mat-icon>\n\n <mat-icon *ngIf=\"iconPrefixSvg\"\n matPrefix\n [matTooltip]=\"((iconPrefixTooltip || '') | translate)\"\n [svgIcon]=\"iconPrefixSvg\"\n ></mat-icon>\n\n <app-icon-button\n *ngIf=\"clearable && !ngControl.control.disabled && !!ngControl.control.value\"\n iconName=\"cancel\"\n matSuffix\n [ngClass]=\"ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n (click)=\"$event.stopPropagation();$event.preventDefault();ngControl.control.reset(null);\"\n >\n </app-icon-button>\n\n <i-tech-icon-button matSuffix\n [iconName]=\"'date_range'\"\n [disabled]=\"ngControl.control.disabled\"\n (click)=\"datePicker.open()\"\n [ngClass]=\"ngControl.control.disabled ? 'readonly-color' : 'default-form-icon-color'\"\n ></i-tech-icon-button>\n\n <mat-datepicker #datePicker (closed)=\"isOpen = false;clickForFocusOut()\"\n (opened)=\"isOpen = true;focused = true\"></mat-datepicker>\n\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submit)\">\n {{ ngControl.control | generateErrorMessages : label : defaultPatternKey }}\n </mat-error>\n\n <!-- Helper Text -->\n <mat-hint *ngIf=\"!(!!(ngControl.control.errors && submit)) && hintText\"\n [ngClass]=\"{'readonly-color' : ngControl.control.disabled}\"\n >\n {{ hintText | translate }}\n </mat-hint>\n\n </mat-form-field>\n</div>\n","import {\n AfterViewInit,\n Component, ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDatepickerModule, MatDateRangePicker } from \"@angular/material/datepicker\";\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup, Validators } from \"@angular/forms\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IconButtonComponent } from \"../icon-button/icon-button.component\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\n\n@Component({\n selector: 'i-tech-mat-range-datepicker',\n templateUrl: './date-range-datepicker.component.html',\n imports: [\n MatFormFieldModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n NgClass, NgIf,\n TranslateModule,\n IconButtonComponent, DateMaskDirective\n ],\n standalone: true\n})\nexport class DateRangeDatepickerComponent implements OnChanges, AfterViewInit {\n @Input() label?: string;\n @Input() placeholder?: Array<string>;\n @Input() value?: Array<string | null>;\n @Input() defaultValue?: Array<Date>;\n @Input() key?: {start: string, end: string, title: string};\n @Input() submit = false;\n @Input() clearValue = true;\n @Input() errorMessage = '';\n @Input() onePlaceholder?: string;\n @Input() hintText = 'MM/DD/YYYY - MM/DD/YYYY';\n @Output() resetForm = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<any>();\n @ViewChild('picker') picker!: MatDateRangePicker<any>;\n @ViewChild('min') min!: ElementRef;\n @ViewChild('max') max!: ElementRef;\n isOpen = false;\n isSelectingRange = false;\n\n dateRangeForm = new UntypedFormGroup({\n startDate: new UntypedFormControl('', [Validators.maxLength(10)]),\n endDate: new UntypedFormControl('', [Validators.maxLength(10)]),\n });\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.defaultValue?.length) {\n this.dateRangeForm.patchValue({\n startDate: this.defaultValue[0],\n endDate: this.defaultValue[1]\n })\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n setTimeout(() => {\n if (changes['value']?.currentValue && !(changes['value'].currentValue[0])) {\n if (this.picker) {\n this.dateRangeForm.reset();\n this.picker.select(null)\n }\n } else if (changes['value'] && this.value?.length) {\n this.dateRangeForm.setValue({\n startDate: new Date(this.value[0] || ''),\n endDate: new Date(this.value[1] || '')\n })\n }\n }, 10)\n }\n\n clickForFocusOut(): void {\n setTimeout(() => {\n this.min.nativeElement.focus();\n this.min.nativeElement.blur();\n },120)\n }\n\n customErrorStateMatcher = {\n isErrorState: (control: any, form: any): boolean => {\n return !!(control && control.invalid && this.submit);\n }\n };\n\n setDate(value: Array<string | null>, element: any): void {\n const startDate = value[0];\n const endDate = value[1];\n\n // If this is the start date being selected (matStartDate input)\n if (element === this.min?.nativeElement) {\n // We're starting a new selection process\n this.isSelectingRange = true;\n // Don't emit any event yet\n }\n // If this is the end date being selected (matEndDate input)\n else if (element === this.max?.nativeElement) {\n // We're completing a selection\n this.isSelectingRange = false;\n\n if (startDate === null && endDate === null) {\n this.dateRangeForm.reset();\n this.selectionChange.emit(value);\n } else if (startDate && endDate) {\n this.selectionChange.emit(value);\n }\n }\n\n element.blur();\n }\n\n keyEventHandler(event: KeyboardEvent,value: Array<string | null>, element: any): void {\n if (event.code === 'Enter') {\n this.setDate(value,element)\n }\n }\n\n}\n","<div class=\"flex_column relative mat-date-range-input\"\n [formGroup]=\"dateRangeForm\"\n>\n <div class=\"w-100\" *ngIf=\"label\">\n <mat-label>\n {{ (label || '') | translate }}\n </mat-label>\n </div>\n <mat-form-field appearance=\"outline\" [ngClass]=\"{'opened_calendar': isOpen}\">\n <mat-date-range-input [rangePicker]=\"picker\">\n <input formControlName=\"startDate\"\n [placeholder]=\" (placeholder ? placeholder[0] : 'Start Date')\"\n [title]=\"key ? key.title : 'Date'\"\n [attr.data-accessKey]=\"key ? key.start : 'minStartDate'\"\n [attr.data-parentKey]=\"key ? (key.start + '_' + key.end) : 'minStartDate_maxEndDate'\"\n matStartDate #min\n dateMask\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [rangeFormControl]=\"dateRangeForm.controls['startDate']\"\n (keydown)=\"keyEventHandler($event,[min.value, max.value || null],min)\"\n (dateChange)=\"setDate([min.value, max.value || null],min)\">\n <input formControlName=\"endDate\"\n [placeholder]=\"(placeholder ? placeholder[1] : 'End Date')\"\n [title]=\"key ? key.title : 'Date'\"\n [attr.data-accessKey]=\"key ? key.end : 'maxEndDate'\"\n [attr.data-parentKey]=\"key ? (key.start + '_' + key.end) : 'minStartDate_maxEndDate'\"\n matEndDate #max\n dateMask\n [errorStateMatcher]=\"customErrorStateMatcher\"\n [rangeFormControl]=\"dateRangeForm.controls['endDate']\"\n (keydown)=\"keyEventHandler($event,[min.value, max.value || null],max)\"\n (dateChange)=\"setDate([min.value, max.value || null],max)\">\n </mat-date-range-input>\n <i-tech-icon-button matSuffix\n [iconName]=\"'cancel'\"\n (buttonClick)=\"setDate([null,null], max)\"\n class=\"default-form-icon-color\"\n *ngIf=\"dateRangeForm.get('startDate')?.value && this.dateRangeForm.get('endDate')?.value\"\n ></i-tech-icon-button>\n <i-tech-icon-button\n matSuffix\n [iconName]=\"'date_range'\"\n (buttonClick)=\"picker.open()\"\n class=\"default-form-icon-color\"\n ></i-tech-icon-button>\n <mat-date-range-picker\n #picker\n (closed)=\"isOpen = false;clickForFocusOut()\"\n (opened)=\"isOpen = true\"\n ></mat-date-range-picker>\n <mat-hint *ngIf=\"hintText && !errorMessage\">{{ hintText }}</mat-hint>\n </mat-form-field>\n</div>\n","export enum DropdownSelectionType {\n UPLOAD = \"UPLOAD\",\n DOWNLOAD = \"DOWNLOAD\",\n BLANK = \"BLANK\"\n}\n\nexport const DropdownItemIcon = {\n [DropdownSelectionType.UPLOAD]: 'upload',\n [DropdownSelectionType.DOWNLOAD]: 'download',\n [DropdownSelectionType.BLANK]: 'blank',\n}","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { ButtonType } from \"../../interfaces/button-types.enum\";\nimport { DropdownItemIcon, DropdownSelectionType } from \"../../interfaces/dropdown-selection.constants\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger, MenuPositionX } from \"@angular/material/menu\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { NgClass, NgForOf, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { ButtonComponent } from \"../button/button.component\";\nimport { MatLabel } from \"@angular/material/form-field\";\n\n@Component({\n selector: \"i-tech-menu\",\n standalone: true,\n imports: [\n MatMenuTrigger,\n MatMenu,\n MatIcon,\n NgIf,\n NgForOf,\n MatMenuItem,\n TranslateModule,\n NgClass,\n ButtonComponent,\n MatLabel\n ],\n templateUrl: \"./menu.component.html\",\n styleUrls: [\"./menu.component.scss\"]\n})\nexport class MenuComponent {\n @Input() text!: string;\n @Input() dataName!: string;\n @Input() containerClass!: string;\n @Input() positionX: MenuPositionX = 'before';\n @Input() menuOptions: Array<{\n value: string;\n text: string;\n src?: string;\n class?: string;\n type?: DropdownSelectionType;\n }> = [];\n @Output() emitEvent = new EventEmitter<any>();\n protected readonly ButtonType = ButtonType;\n protected readonly DropdownItemIcon = DropdownItemIcon;\n matMenuState = false;\n}\n","<div class=\"custom_dropdown_container\"\n [attr.data-name]=\"dataName\"\n [ngClass]=\"containerClass\"\n>\n <i-tech-button\n [matMenuTriggerFor]=\"beforeMenu\"\n [type]=\"ButtonType.OUTLINE\"\n [fontIcon]=\"'keyboard_arrow_down'\"\n [text]=\"(text || '') \"\n (menuOpened)=\"matMenuState = true\"\n (menuClosed)=\"matMenuState = false\"\n [activated]=\"matMenuState\"\n ></i-tech-button>\n <mat-menu #beforeMenu=\"matMenu\" [xPosition]=\"positionX\">\n <button mat-menu-item *ngFor=\"let option of menuOptions\" (click)=\"emitEvent.emit(option.value)\">\n <mat-icon *ngIf=\"option.type\" [svgIcon]=\"DropdownItemIcon[option.type]\"></mat-icon>\n <mat-label class=\"meu_item_label\">{{(option.text || '') | translate}}</mat-label>\n </button>\n </mat-menu>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { LabelTypeEnum } from \"../../interfaces/label-type.enum\";\nimport { MatChip } from \"@angular/material/chips\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n selector: 'i-tech-label',\n templateUrl: './label.component.html',\n styleUrls: [],\n imports: [\n MatChip,\n MatTooltip,\n NgClass,\n TranslateModule,\n MatIcon,\n NgIf\n ],\n standalone: true\n})\nexport class LabelComponent {\n @Input() color: LabelTypeEnum = LabelTypeEnum.primary;\n @Input() text!: string;\n @Input() innerHtml!: string;\n @Input() bordered = false;\n @Input() tooltip?: string;\n @Input() size: 'small' | 'standard' = 'standard';\n @Input() iconName?: string;\n @Input() iconSvg = '';\n @Input() disableRipple = false;\n @Input() matChipAction = false;\n @Input() forTable = false;\n}\n","<div [class]=\"{table_row_item: forTable,'trailing-icon' : iconName || iconSvg}\">\n <mat-chip\n [class]=\"'label_' + color\"\n [ngClass]=\"{bordered: bordered, small: size === 'small', matChipAction: 'pointer'}\"\n [matTooltip]=\"(tooltip || '') | translate\"\n [disableRipple]=\"disableRipple\"\n >\n <div class=\"flex_align_center flex_gap\" [ngClass]=\"matChipAction ? 'pointer' : ''\">\n <span *ngIf=\"!innerHtml\">{{text | translate}}</span>\n <span *ngIf=\"innerHtml\" [innerHtml]=\"innerHtml | translate\"></span>\n <mat-icon *ngIf=\"iconName\">{{iconName}}</mat-icon>\n <mat-icon *ngIf=\"iconSvg\" [svgIcon]=\"iconSvg!\"></mat-icon>\n </div>\n </mat-chip>\n</div>\n","import { AfterViewInit, Component, EventEmitter, Input, Output, ViewChild, ElementRef, OnDestroy } from '@angular/core';\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { NgxMaskDirective } from \"ngx-mask\";\nimport {\n FormControlName,\n FormsModule,\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup\n} from \"@angular/forms\";\nimport { NgClass, NgIf } from \"@angular/common\";\nimport { MatError, MatLabel } from \"@angular/material/form-field\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { DateMaskDirective } from \"../../directives/date-mask.directive\";\nimport { ParseDateService } from \"../../services/parse-date.service\";\nimport { InputService } from \"../../services/input.service\";\nimport { GenerateErrorMessagesPipe } from \"../../pipes/generate-error-messages.pipe\";\n\n@Component({\n selector: 'i-tech-date-time-picker',\n imports: [MatDatepickerModule, NgxMaskDirective, DateMaskDirective, TranslateModule,\n FormsModule, NgClass, ReactiveFormsModule, MatLabel, GenerateErrorMessagesPipe, NgIf, MatError\n ],\n standalone: true,\n providers: [ParseDateService],\n templateUrl: './date-time-picker.component.html',\n styleUrl: './date-time-picker.component.scss'\n})\nexport class DateTimePickerComponent implements AfterViewInit, OnDestroy {\n @Output() dateChangeEvent = new EventEmitter<void>();\n @Input() label!: string;\n @Input() submit = false;\n @Input() required = false;\n @Input() set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.form.get('time')?.disable();\n this.form.get('date')?.disable();\n } else {\n this.form.get('time')?.enable();\n this.form.get('date')?.enable();\n }\n };\n get disabled(): boolean {\n return this._disabled;\n }\n private _disabled = false;\n\n @ViewChild('dateElement') timeInput!: ElementRef;\n\n isFocused = false;\n form = new UntypedFormGroup({\n time: new UntypedFormControl(),\n date: new UntypedFormControl(),\n })\n ngControl: FormControlName;\n\n // Track datepicker state\n private focusTimeoutId: any = null;\n private datePickerJustClosed = false;\n\n constructor(\n private inputService: InputService,\n private parseDateService: ParseDateService\n ) {\n this.ngControl = this.inputService.injectNgControl();\n }\n\n ngAfterViewInit(): void {\n this.setValue();\n this.ngControl.control.valueChanges.subscribe(() => {\n this.setValue()\n })\n }\n\n ngOnDestroy(): void {\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n }\n\n private setValue(): void {\n if (!this.ngControl?.control) {\n return;\n }\n const dateTime = this.ngControl.control.value;\n if (!dateTime) {\n this.form.patchValue({\n date: null,\n time: null\n }, { emitEvent: false });\n return;\n }\n\n this.form.patchValue({\n date: new Date(this.parseDateService.changeFormat(dateTime, 'YYYY-MM-DD') + 'T' + '00:00:00'),\n time: this.parseDateService.changeFormat(dateTime, 'HH:mm')\n }, { emitEvent: false })\n }\n\n public onDatePickerClosed(): void {\n // Update form value first\n this.setDateTimeValue();\n\n // Mark that the datepicker just closed\n this.datePickerJustClosed = true;\n\n // Clear any existing timeout\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n\n // Use a callback that runs outside Angular's change detection\n this.focusTimeoutId = setTimeout(() => {\n // Focus time input\n if (this.timeInput?.nativeElement) {\n this.timeInput.nativeElement.focus();\n }\n\n // Reset flag after enough time\n setTimeout(() => {\n this.datePickerJustClosed = false;\n }, 200);\n }, 100); // Longer delay to let Angular Material finish its work\n }\n\n public setDateTimeValue(): void {\n if (this.form.value.date && this.form.value.time) {\n const date = this.parseDateService.changeFormat(this.form.value.date, 'YYYY-MM-DD');\n const time = this.form.value.time;\n this.ngControl.control.patchValue(date + 'T' + time, { emitEvent: false });\n } else {\n this.ngControl.control.patchValue(null, { emitEvent: false });\n }\n this.dateChangeEvent.emit();\n }\n\n public onFocus(event: FocusEvent): void {\n // If datepicker just closed and focus is going to date input, move it to time input\n if (this.datePickerJustClosed) {\n const target = event.target as HTMLElement;\n const dateInput = document.querySelector('input[formControlName=\"date\"]');\n\n if (target === dateInput) {\n // Cancel any existing focus timeout\n if (this.focusTimeoutId) {\n clearTimeout(this.focusTimeoutId);\n }\n\n // Set new timeout to focus time input\n this.focusTimeoutId = setTimeout(() => {\n if (this.timeInput?.nativeElement) {\n this.timeInput.nativeElement.focus();\n }\n }, 10);\n\n return;\n }\n }\n\n this.isFocused = true;\n }\n\n public onBlur(event?: FocusEvent): void {\n // Don't handle blur during datepicker transitions\n if (this.datePickerJustClosed) {\n return;\n }\n\n // Check if focus is moving to another element within our component\n setTimeout(() => {\n const dateInput = document.querySelector('input[formControlName=\"date\"]');\n const timeInput = this.timeInput?.nativeElement;\n const activeElement = document.activeElement;\n\n if (activeElement !== dateInput && activeElement !== timeInput) {\n this.isFocused = false;\n }\n }, 50);\n }\n}\n","<div class=\"date_time_picker_container\"\n *ngIf=\"ngControl?.control\"\n [class.readonly_field]=\"disabled\"\n>\n <mat-label [ngClass]=\"{'readonly-color': disabled}\">{{label | translate}}</mat-label>\n <span *ngIf=\"required\" class=\"required-input\" [ngClass]=\"{'readonly-color': disabled}\"> *</span>\n\n <div class=\"date_time_picker\"\n [formGroup]=\"form\"\n [ngClass]=\"{'focused': isFocused, 'disabled': disabled}\"\n >\n <input type=\"text\" dateMask class=\"date\"\n placeholder=\"mm/dd/yy\"\n formControlName=\"date\"\n [matDatepicker]=\"DatePicker\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && DatePicker.open()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n >\n <mat-datepicker #DatePicker\n (closed)=\"onDatePickerClosed()\">\n </mat-datepicker>\n <input type=\"time\"\n #dateElement\n class=\"time\"\n formControlName=\"time\"\n [disabled]=\"disabled\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"setDateTimeValue()\"\n />\n </div>\n <!-- Error Messages -->\n <mat-error *ngIf=\"!!(ngControl.control.errors && submit)\">\n {{ngControl.control | generateErrorMessages : (label || '')}}\n </mat-error>\n</div>\n","/*\n * Public API Surface of shared-components\n */\n\nexport * from './lib/pipes/generate-error-messages.pipe';\nexport * from './lib/pipes/array-to-string.pipe';\nexport * from './lib/pipes/get-value-by-key-from-object.pipe';\nexport * from './lib/services/input.service';\nexport * from './lib/services/parse-date.service';\nexport * from './lib/interfaces/app-input.interface';\nexport * from './lib/interfaces/button-types.enum';\nexport * from './lib/interfaces/label-type.enum';\nexport * from './lib/interfaces/autocomplete-configs.interface';\nexport * from './lib/directives/input-mask.directive';\nexport * from './lib/components/icon-button/icon-button.component';\nexport * from './lib/components/text/text-input.component';\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/autocomplete-select/autocomplete-select.component';\nexport * from './lib/components/date-picker/date-picker.component';\nexport * from './lib/components/clear-value/clear-value.component';\nexport * from './lib/components/date-range-datepicker/date-range-datepicker.component';\nexport * from './lib/components/menu/menu.component';\nexport * from './lib/components/label/label.component';\nexport * from './lib/components/date-time-picker/date-time-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.InputService","i2","i1","i5","i6","i3","i4","i2.ParseDateService"],"mappings":"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"}
|