From a2cf743e07b7e20e92bd77ea49c1c93f54d58a9e Mon Sep 17 00:00:00 2001 From: ERICK Carvalho Paulette de Oliveira Date: Fri, 6 Sep 2024 11:52:28 -0300 Subject: [PATCH] =?UTF-8?q?v1.11.5-test=20|=20Commit=20autom=C3=A1tico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit automático realizado via script pós build --- .../lib/widgets/lib-combobox/lib-combobox.component.mjs | 4 +++- dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs | 2 ++ dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map | 2 +- dist/ngx-sp-infra/package.json | 2 +- projects/ngx-sp-infra/package-lock.json | 4 ++-- projects/ngx-sp-infra/package.json | 2 +- .../src/lib/widgets/lib-combobox/lib-combobox.component.ts | 5 ++++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/dist/ngx-sp-infra/esm2022/lib/widgets/lib-combobox/lib-combobox.component.mjs b/dist/ngx-sp-infra/esm2022/lib/widgets/lib-combobox/lib-combobox.component.mjs index d57cdbb..7b7fe4e 100644 --- a/dist/ngx-sp-infra/esm2022/lib/widgets/lib-combobox/lib-combobox.component.mjs +++ b/dist/ngx-sp-infra/esm2022/lib/widgets/lib-combobox/lib-combobox.component.mjs @@ -151,6 +151,8 @@ export class LibComboboxComponent { this.innerControl.setValue(item.LABEL); this.ariaExpanded = false; this.setControlStatus(this.innerControl.status); + console.log("returnRecord:", this.returnRecord); + console.log("return ", this.returnRecord ? item : item.ID); this.onChange.emit(this.returnRecord ? item : item.ID); } clearValue() { @@ -253,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo type: HostListener, args: ['window:resize', ['$event']] }] } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWNvbWJvYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvbGliLWNvbWJvYm94L2xpYi1jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2xpYi1jb21ib2JveC9saWItY29tYm9ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBbUIsV0FBVyxFQUFxQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUlwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsSUFBYyxZQUFZLEtBQWMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFjLFlBQVksQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBaUIxRSxxQkFBcUI7SUFFckIsaUJBQWlCO0lBRWpCOzt5REFFcUQ7SUFDckQsSUFDVyxZQUFZLEtBQXVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQSxDQUFDLENBQUM7SUFDekUsSUFBVyxZQUFZLENBQUMsS0FBOEM7UUFDcEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFvQixDQUFDO1FBRTFDLDhFQUE4RTtRQUM5RSxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV6RCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFpQkQ7O3dCQUVvQjtJQUNwQixJQUNXLFFBQVEsS0FBYyxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFXLFFBQVEsQ0FBQyxLQUEwQjtRQUM1QyxJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7O1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsMEJBQTBCO0lBQzVCLENBQUM7SUEyQ0Qsb0JBQW9CO0lBRXBCLGdEQUFnRDtJQUdoRCxpREFBaUQ7SUFDakQ7UUFySEEsNkNBQTZDO1FBRTdDLG9CQUFvQjtRQUNWLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBSzNCLGlCQUFZLEdBQWdCLElBQUksV0FBVyxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUMxRSxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsVUFBSyxHQUFZLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ25DLHVCQUF1QjtRQUV2QixrQkFBa0I7UUFDVixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakQsa0JBQWEsR0FBZ0IsSUFBSSxXQUFXLENBQXlCLElBQUksQ0FBQyxDQUFDO1FBOEJuRjs7OzRCQUdvQjtRQUNKLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBYzlDOzs7K0NBR3VDO1FBQ04seUJBQW9CLEdBQVksd0JBQXdCLENBQUM7UUFFMUY7OztvQ0FHNEI7UUFDTywyQkFBc0IsR0FBWSxhQUFhLENBQUM7UUFFbkY7Ozs7VUFJRTtRQUNxQixlQUFVLEdBQVksU0FBUyxDQUFDO1FBRXZEOzs7VUFHRTtRQUNjLGlCQUFZLEdBQWEsS0FBSyxDQUFDO1FBRS9DOzs7MENBR2tDO1FBQ2pCLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFHakY7OzswREFHa0Q7UUFDakMsYUFBUSxHQUEwRCxJQUFJLFlBQVksRUFBMkMsQ0FBQztJQVcvSCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVk7WUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN0RSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxZQUFZO1lBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25JLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsMkRBQTJEO0lBRTNELFFBQVEsQ0FBQyxLQUFZLElBQVUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUEsQ0FBQyxDQUFDO0lBQzNELG9EQUFvRDtJQUdwRCx3Q0FBd0M7SUFDakMsUUFBUSxDQUFDLElBQW9CO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUE4QjtRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztRQUMxRSxNQUFNLGFBQWEsR0FBMkIsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBRWhGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssRUFBRSxDQUFDO1lBQUUsT0FBTztRQUVuRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsQ0FBQTtRQUNsRixJQUFJLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpFLG9EQUFvRDtJQUN0RCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLElBQUksQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQTZCO1FBQ3BELFFBQU8sVUFBVSxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNO1FBRVYsQ0FBQztJQUNILENBQUM7SUFFTSxVQUFVLEtBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBLENBQUMsQ0FBQzsrR0F2TzdELG9CQUFvQjttR0FBcEIsb0JBQW9CLHl3QkN6Q2pDLDZzR0FzQ0E7OzRGREdhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjO3dEQXFDYixZQUFZO3NCQUR0QixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWdCTSxZQUFZO3NCQUE1RCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl4QixTQUFTO3NCQUF4QixLQUFLO2dCQU1VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBTUssUUFBUTtzQkFEbEIsS0FBSztnQkFhMkIsb0JBQW9CO3NCQUFwRCxLQUFLO3VCQUFDLGlCQUFpQjtnQkFNVyxzQkFBc0I7c0JBQXhELEtBQUs7dUJBQUMsbUJBQW1CO2dCQU9ILFVBQVU7c0JBQWhDLEtBQUs7dUJBQUMsT0FBTztnQkFNRSxZQUFZO3NCQUEzQixLQUFLO2dCQU1XLFlBQVk7c0JBQTVCLE1BQU07Z0JBT1UsUUFBUTtzQkFBeEIsTUFBTTtnQkFHeUIsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxXQUFXO2dCQUNhLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsY0FBYztnQkErQnpCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWNvcmRDb21ib2JveCB9IGZyb20gJy4uLy4uL21vZGVscy9jb21ib2JveC9yZWNvcmQtY29tYm9ib3gnO1xyXG5cclxuLyoqXHJcbiAqIEBjb21wb25lbnQgTGliQ29tYm9ib3hDb21wb25lbnRcclxuICogQHNlbGVjdG9yIGxpYi1jb21ib2JveFxyXG4gKiBcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIE8gY29tcG9uZW50ZSBMaWJDb21ib2JveENvbXBvbmVudCDDqSBwcm9qZXRhZG8gcGFyYSBmb3JuZWNlciBhb3MgdXN1w6FyaW9zIHVtYSBpbnRlcmZhY2UgcGFyYSBwZXNxdWlzYXIgZSBzZWxlY2lvbmFyIGl0ZW5zIGRlIHVtYSBsaXN0YS5cclxuICogRWxlIHN1cG9ydGEgYSBmaWx0cmFnZW0gZGUgaXRlbnMgY29tIGJhc2UgbmEgZW50cmFkYSBkbyB1c3XDoXJpbywgcGVybWl0aW5kbyB1bWEgc2VsZcOnw6NvIG1haXMgZsOhY2lsIGVtIGxpc3RhcyBleHRlbnNhcy5cclxuICogXHJcbiAqICMjIEZ1bmNpb25hbGlkYWRlczpcclxuICogLSBQZXNxdWlzYSBlIGZpbHRyYWdlbSBkZSBpdGVucyBuYSBsaXN0YSBkbyBjb21ib2JveC5cclxuICogLSBTZWxlw6fDo28gZGUgaXRlbnMgY29tIGZlZWRiYWNrIHZpc3VhbC5cclxuICogLSBFbWlzc8OjbyBkZSBldmVudG9zIHBlcnNvbmFsaXphZG9zIHBhcmEgaW50ZXJhw6fDtWVzIGRvIHVzdcOhcmlvLCBjb21vIHJlY2FycmVnYXIgYSBsaXN0YSBvdSBzZWxlY2lvbmFyIHVtIGl0ZW0uXHJcbiAqIC0gQWp1c3RlIGRpbsOibWljbyBkYSBsYXJndXJhIGRvIGRyb3Bkb3duIHBhcmEgY29ycmVzcG9uZGVyIGFvIGlucHV0IHByaW5jaXBhbC5cclxuICogLSBJbmljaWFsaXphw6fDo28gZGUgdW0gdmFsb3Igc2VsZWNpb25hZG8sIHNlIGZvcm5lY2lkby5cclxuICogXHJcbiAqICMjIElucHV0czpcclxuICogLSBgb3V0ZXJDb250cm9sYCAoRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2wpOiBDb250cm9sIHBhcmEgc2VsZcOnw6NvIGRvcyB2YWxvcmVzLCBhdHVhbGl6YXLDoSBhdXRvbWF0aWNhbWVudGUgbyBjb250cm9sIGRvIGNvbXBvbmVudGUgcGFpIHRhbWLDqW1cclxuICogLSBgY29tYm9ib3hMaXN0YCAoUmVjb3JkQ29tYm9ib3hbXSk6IExpc3RhIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGV4aWJpZG9zIG5vIGNvbWJvLCBlbnF1YW50byBlbGVzIGVzdGl2ZXJlbSBjYXJyZWdhbmRvIHNlcsOhIGV4aWJpZG8gdW0gc3Bpbm5lclxyXG4gKiAtIGBsYWJlbFRleHRgIChzdHJpbmcpOiBUZXh0byBkbyByw7N0dWxvIHF1ZSBzZXLDoSBleGliaWRvIGFjaW1hIGRvIGNvbWJvLiBDYXNvIG7Do28gaW5mb3JtYWRvIG5hZGEgc2Vyw6EgZXhpYmlkb1xyXG4gKiAtIGBkaXNhYmxlZGAgKGJvb2xlYW4pOiBEZWZpbmUgc2UgbyBjYW1wbyBlc3TDoSBkZXNhYmlsaXRhZG8uIERldmUgc2VyIHVzYWRvIHBhcmEgdmFsaWRhw6fDtWVzIGRlIGhhYmlsaXRhw6fDo28gZGluw6JtaWNhIGRvIGNhbXBvXHJcbiAqIC0gYGxpYlJlcXVpcmVkYCAoYm9vbGVhbik6IERlZmluZSBzZSBvIGNhbXBvIMOpIG9icmlnYXTDs3JpbywgdmFpIGV4aWJpciBvICcqJyB2ZXJtZWxobyBhbyBsYWRvIGRvIGxhYmVsIChzZSBlbGUgZXN0aXZlciBwcmVzZW50ZSlcclxuICogLSBgbWFpbklucHV0UGxhY2Vob2xkZXJgIChzdHJpbmcpOiBQbGFjZWhvbGRlciBkbyBjYW1wbyBwcmluY2lwYWwgZG8gY29tYm9cclxuICogLSBgc2VhcmNoSW5wdXRQbGFjZWhvbGRlcmAgKHN0cmluZyk6IFBsYWNlaG9sZGVyIGRvIGNhbXBvIGRlIHBlc3F1aXNhIGRlbnRybyBkbyBjb21ib1xyXG4gKiAtIGBjb2xvclRoZW1lYCAoXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIiB8IFwibGlnaHRcIiB8IFwiZGFya1wiKTogRGVmaW5lIG8gdGVtYSBkZSBjb3IgZG8gY29tcG9uZW50ZSwgY29tbyBcInByaW1hcnlcIiwgXCJzdWNjZXNzXCIsIG91IFwiZGFuZ2VyXCJcclxuICogLSBgcmV0dXJuUmVjb3JkYCAoYm9vbGVhbik6IERlZmluZSBzZSBvIHRpcG8gZGUgcmV0b3JubyBhbyBzZWxlY2lvbmFyIHVtYSBvcMOnw6NvIHNlcsOhIG8gUmVjb3JkIGludGVpcm8gb3UgYXBlbmFzIG8gSURcclxuICogXHJcbiAqICMjIE91dHB1dHM6XHJcbiAqIC0gYG9uUmVsb2FkTGlzdGAgKEV2ZW50RW1pdHRlcjxzdHJpbmc+KTogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIGEgbGlzdGEgcHJlY2lzYSBzZXIgcmVjYXJyZWdhZGEuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb21ib2JveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpYi1jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2xpYi1jb21ib2JveC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIExpYkNvbWJvYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFBST1BFUlRJRVMgPD09PT09PT09PT1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQUk9URUNURURcclxuICBwcm90ZWN0ZWQgdGV4dG9QZXNxdWlzYTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgcHJvdGVjdGVkIGdldCBhcmlhRXhwYW5kZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9hcmlhRXhwYW5kZWQ7IH1cclxuICBwcm90ZWN0ZWQgc2V0IGFyaWFFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLl9hcmlhRXhwYW5kZWQgPSB2YWx1ZTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5uZXJDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgaW52YWxpZENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBkaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCB0b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gI2VuZHJlZ2lvbiBQUk9URUNURURcclxuXHJcbiAgLy8gI3JlZ2lvbiBQUklWQVRFXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYXJpYUV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIHByaXZhdGUgX291dGVyQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgLy8gI2VuZHJlZ2lvbiBQUklWQVRFXHJcblxyXG4gIC8vICNyZWdpb24gUFVCTElDXHJcblxyXG4gIC8qKiAob2JyaWdhdMOzcmlvKSBDb250cm9sIHBhcmEgc2VsZcOnw6NvIGRvcyB2YWxvcmVzLCBhdHVhbGl6YXLDoSBhdXRvbWF0aWNhbWVudGUgbyBjb250cm9sIGRvIGNvbXBvbmVudGUgcGFpIHRhbWLDqW1cclxuICAgKiBAYWxpYXMgJ2NvbnRyb2wnXHJcbiAgICogQHR5cGUge0Zvcm1Db250cm9sPGFueT4gfCBBYnN0cmFjdENvbnRyb2w8YW55Pn0gKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2NvbnRyb2wnLCByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBnZXQgb3V0ZXJDb250cm9sKCk6IEZvcm1Db250cm9sPGFueT4geyByZXR1cm4gdGhpcy5fb3V0ZXJDb250cm9sIH1cclxuICBwdWJsaWMgc2V0IG91dGVyQ29udHJvbCh2YWx1ZTogRm9ybUNvbnRyb2w8YW55PiB8IEFic3RyYWN0Q29udHJvbDxhbnk+KSB7XHJcbiAgICB0aGlzLl9vdXRlckNvbnRyb2wgPSB2YWx1ZSBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvLyBDYW5jZWxhIGEgc3Vic2NyacOnw6NvIGFudGVyaW9yIChzZSBob3V2ZXIpIHBhcmEgZXZpdGFyIG3Dumx0aXBsYXMgc3Vic2NyacOnw7Vlc1xyXG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgLy8gU3Vic2NyacOnw6NvIGFvIG9ic2VydsOhdmVsIHZhbHVlQ2hhbmdlcyBwYXJhIHJlYWdpciBhIG11ZGFuw6dhcyBubyB2YWxvclxyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fb3V0ZXJDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4geyB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUodmFsdWUpIH0pO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fb3V0ZXJDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB7IHRoaXMuc2V0Q29udHJvbFN0YXR1cyhzdGF0dXMpIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIChvYnJpZ2F0w7NyaW8pIExpc3RhIGRlIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGV4aWJpZG9zIG5vIGNvbWJvLCBlbnF1YW50byBlbGVzIGVzdGl2ZXJlbSBjYXJyZWdhbmRvIHNlcsOhIGV4aWJpZG8gdW0gc3Bpbm5lclxyXG4gICAqIEBhbGlhcyAnbGlzdCdcclxuICAgKiBAdHlwZSB7UmVjb3JkQ29tYm9ib3hbXX0gKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2xpc3QnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29tYm9ib3hMaXN0PzogUmVjb3JkQ29tYm9ib3hbXTtcclxuXHJcbiAgLyoqIChvcGNpb25hbCkgVGV4dG8gZG8gcsOzdHVsbyBxdWUgc2Vyw6EgZXhpYmlkbyBhY2ltYSBkbyBjb21iby4gQ2FzbyBuw6NvIGluZm9ybWFkbyBuYWRhIHNlcsOhIGV4aWJpZG9cclxuICAgKiBAdHlwZSB7c3RyaW5nfSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbFRleHQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiAob3BjaW9uYWwpIERlZmluZSBzZSBvIGNhbXBvIMOpIG9icmlnYXTDs3JpbywgdmFpIGV4aWJpciBvICcqJyB2ZXJtZWxobyBhbyBsYWRvIGRvIGxhYmVsIChzZSBlbGUgZXN0aXZlciBwcmVzZW50ZSlcclxuICAgKiAhIFNFUsOBIERFUFJFQ0lBRE8gRU0gQlJFVkVcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsaWJSZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIChvcGNpb25hbCkgRGVmaW5lIHNlIG8gY2FtcG8gZXN0w6EgZGVzYWJpbGl0YWRvLiBEZXZlIHNlciB1c2FkbyBwYXJhIHZhbGlkYcOnw7VlcyBkZSBoYWJpbGl0YcOnw6NvIGRpbsOibWljYSBkbyBjYW1wb1xyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQgPz8gZmFsc2U7IH1cclxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgPT09IHRydWUpIHRoaXMuaW5uZXJDb250cm9sLmRpc2FibGUoKTtcclxuICAgIGVsc2UgdGhpcy5pbm5lckNvbnRyb2wuZW5hYmxlKCk7XHJcblxyXG4gICAgLy90aGlzLnNldENvbnRyb2xTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiAob3BjaW9uYWwpIFBsYWNlaG9sZGVyIGRvIGNhbXBvIHByaW5jaXBhbCBkbyBjb21ib1xyXG4gICAqIEBhbGlhcyAnbWFpblBsYWNlaG9sZGVyJ1xyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogQGRlZmF1bHQgXCJTZWxlY2lvbmUgdW1hIG9ww6fDo28uLi5cIiAqL1xyXG4gIEBJbnB1dCgnbWFpblBsYWNlaG9sZGVyJykgcHVibGljIG1haW5JbnB1dFBsYWNlaG9sZGVyPzogc3RyaW5nID0gXCJTZWxlY2lvbmUgdW1hIG9ww6fDo28uLi5cIjtcclxuXHJcbiAgLyoqIChvcGNpb25hbCkgUGxhY2Vob2xkZXIgZG8gY2FtcG8gZGUgcGVzcXVpc2EgZGVudHJvIGRvIGNvbWJvXHJcbiAgICogQGFsaWFzICdzZWFyY2hQbGFjZWhvbGRlcidcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqIEBkZWZhdWx0IFwiUGVzcXVpc2EuLi5cIiAqL1xyXG4gIEBJbnB1dCgnc2VhcmNoUGxhY2Vob2xkZXInKSBwdWJsaWMgc2VhcmNoSW5wdXRQbGFjZWhvbGRlcj86IHN0cmluZyA9IFwiUGVzcXVpc2EuLi5cIjtcclxuXHJcbiAgLyoqIChvcGNpb25hbCkgRGVmaW5lIG8gdGVtYSBkZSBjb3IgZG8gY29tcG9uZW50ZSwgY29tbyBcInByaW1hcnlcIiwgXCJzdWNjZXNzXCIsIG91IFwiZGFuZ2VyXCJcclxuICAgKiBAYWxpYXMgJ3RoZW1lJ1xyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogQGRlZmF1bHQgXCJwcmltYXJ5XCJcclxuICAqL1xyXG4gIEBJbnB1dCgndGhlbWUnKSBwdWJsaWMgY29sb3JUaGVtZT86IHN0cmluZyA9IFwicHJpbWFyeVwiO1xyXG5cclxuICAvKiogKG9wY2lvbmFsKSBEZWZpbmUgc2UgbyB0aXBvIGRlIHJldG9ybm8gYW8gc2VsZWNpb25hciB1bWEgb3DDp8OjbyBzZXLDoSBvIFJlY29yZCBpbnRlaXJvIG91IGFwZW5hcyBvIElELlxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcmV0dXJuUmVjb3JkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gYW8gcmVjYXJyZWdhciBhIGxpc3RhIGRlIHJlZ2lzdHJvc1xyXG4gICAqIEBleGFtcGxlIEFvIHNlciBlbWl0aWRvLCBvIGNvbXBvbmVudGUgcGFpIHBvZGUgcmVmYXplciBvIEdFVCBkYSBsaXN0YSwgcG9yIGV4ZW1wbG8uXHJcbiAgICogQGVtaXRzIEV2ZW50RW1pdHRlcjxzdHJpbmc+IHF1ZSBsZXZhIG8gdmFsb3Igc3RyaW5nIGRhIHBlc3F1aXNhIGZlaXRhIHBhcmEgc2VyIGVudmlhZGEgcGFyYSBvIEdFVFxyXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn0gKi9cclxuICBAT3V0cHV0KCkgcHVibGljIG9uUmVsb2FkTGlzdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBhbyBzZWxlY2lvbmFyIHVtIHJlZ2lzdHJvIGRhIGxpc3RhIGRvIGNvbWJvYm94XHJcbiAgICogQGV4YW1wbGUgQW8gc2VyIGVtaXRpZG8sIG8gY29tcG9uZW50ZSBwYWkgcG9kZSByZWFsaXphciB1bWEgdmFsaWRhw6fDo28gY29tIG8gdmFsb3Igc2VsZWNpb25hZG8uXHJcbiAgICogQGVtaXRzIEV2ZW50RW1pdHRlcjxzdHJpbmd8bnVtYmVyfG51bGw+IHF1ZSBsZXZhIG8gdmFsb3Igc3RyaW5nIGRhIHBlc3F1aXNhIGZlaXRhIHBhcmEgc2VyIGVudmlhZGEgcGFyYSBvIEdFVFxyXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVtYmVyIHwgbnVsbD59ICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZENvbWJvYm94IHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZENvbWJvYm94IHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4oKTtcclxuICBcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWFpbklucHV0JykgcHJpdmF0ZSBfbWFpbklucHV0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkcm9wZG93bk1lbnUnKSBwcml2YXRlIF9kcm9wZG93bk1lbnUhOiBFbGVtZW50UmVmO1xyXG4gIC8vICNlbmRyZWdpb24gUFVCTElDXHJcblxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFJPUEVSVElFUyA8PT09PT09PT09PVxyXG5cclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklUSUFMSVpBVElPTiA8PT09PT09PT09PVxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGp1c3REcm9wZG93bldpZHRoKCk7XHJcblxyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3IoKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGp1c3REcm9wZG93bldpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcImNvbWJvYm94TGlzdFwiXT8uY3VycmVudFZhbHVlKSB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgIGlmIChjaGFuZ2VzW1wib3V0ZXJDb250cm9sXCJdPy5jdXJyZW50VmFsdWUpIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgoY2hhbmdlc1tcIm91dGVyQ29udHJvbFwiXS5jdXJyZW50VmFsdWUgYXMgRm9ybUNvbnRyb2wpLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBPIHF1ZSBmYXplciBxdWFuZG8gbyBldmVudG8gZGUgcmVkaW1lbnNpb25hbWVudG8gb2NvcnJlclxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKGV2ZW50OiBFdmVudCk6IHZvaWQgeyB0aGlzLmFkanVzdERyb3Bkb3duV2lkdGgoKSB9XHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBJTklUSUFMSVpBVElPTiA8PT09PT09PT09PVxyXG5cclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBVVElMUyA8PT09PT09PT09PVxyXG4gIHB1YmxpYyBzZXRWYWx1ZShpdGVtOiBSZWNvcmRDb21ib2JveCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZXh0b1Blc3F1aXNhID0gXCJcIjtcclxuICAgIHRoaXMuaW5uZXJDb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLl9vdXRlckNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIFxyXG4gICAgdGhpcy5fb3V0ZXJDb250cm9sLnNldFZhbHVlKGl0ZW0uSUQpO1xyXG4gICAgdGhpcy5pbm5lckNvbnRyb2wuc2V0VmFsdWUoaXRlbS5MQUJFTCk7XHJcblxyXG4gICAgdGhpcy5hcmlhRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0Q29udHJvbFN0YXR1cyh0aGlzLmlubmVyQ29udHJvbC5zdGF0dXMpO1xyXG5cclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJldHVyblJlY29yZCA/IGl0ZW0gOiBpdGVtLklEKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZXh0b1Blc3F1aXNhID0gXCJcIjtcclxuICAgIHRoaXMuaW5uZXJDb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLl9vdXRlckNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHJcbiAgICB0aGlzLl9vdXRlckNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmlubmVyQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuXHJcbiAgICB0aGlzLmFyaWFFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZXRDb250cm9sU3RhdHVzKHRoaXMuaW5uZXJDb250cm9sLnN0YXR1cyk7XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckNvbnRyb2wuc2V0VmFsdWUobnVsbCk7IC8vIExpbXBhIG8gY2FtcG8gYW50ZXMgZGUgcXVhbHF1ZXIgY29pc2FcclxuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSB2YWx1ZSA/PyB0aGlzLl9vdXRlckNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbWJvYm94TGlzdCB8fCAoc2VsZWN0ZWRWYWx1ZSA9PT0gbnVsbCAmJiBzZWxlY3RlZFZhbHVlID09PSAnJykpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpbml0aWFsaXplZFZhbHVlID0gdGhpcy5jb21ib2JveExpc3QuZmluZChpdGVtID0+IGl0ZW0uSUQgPT09IHNlbGVjdGVkVmFsdWUpXHJcbiAgICBpZiAoaW5pdGlhbGl6ZWRWYWx1ZSkgdGhpcy5pbm5lckNvbnRyb2wuc2V0VmFsdWUoaW5pdGlhbGl6ZWRWYWx1ZS5MQUJFTCk7XHJcblxyXG4gICAgLy8gdGhpcy5zZXRDb250cm9sU3RhdHVzKHRoaXMuX291dGVyQ29udHJvbC5zdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3REcm9wZG93bldpZHRoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX21haW5JbnB1dCAmJiB0aGlzLl9kcm9wZG93bk1lbnUpIHtcclxuICAgICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuX21haW5JbnB1dC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICB0aGlzLl9kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2lucHV0V2lkdGh9cHhgO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZGF0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3V0ZXJDb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xyXG4gICAgICB0aGlzLmlubmVyQ29udHJvbC5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB0aGlzLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250cm9sLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb250cm9sU3RhdHVzKGZvcm1TdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzKTogdm9pZCB7XHJcbiAgICBzd2l0Y2goZm9ybVN0YXR1cykge1xyXG4gICAgICBjYXNlICdWQUxJRCc6XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5uZXJDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnSU5WQUxJRCc6XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkQ29udHJvbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbm5lckNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdQRU5ESU5HJzpcclxuICAgICAgICB0aGlzLmludmFsaWRDb250cm9sID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdESVNBQkxFRCc6XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5uZXJDb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVsb2FkTGlzdCgpOiB2b2lkIHsgdGhpcy5vblJlbG9hZExpc3QuZW1pdCh0aGlzLnRleHRvUGVzcXVpc2EpIH1cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFVUSUxTIDw9PT09PT09PT09XHJcblxyXG59XHJcbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsVGV4dCAmJiBsYWJlbFRleHQgIT0gJydcIiBbbGliUmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBmdy1ib2xkXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cclxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRyb3Bkb3duIGZsZXgtZmlsbCBnbGItbWF4LWhlaWdodC0zNTBweFwiPlxyXG5cclxuICAgPCEtLSBFc3RlIGVsZW1lbnRvIG5nLWNvbnRlbnQgY29tIG8gYXRyaWJ1dG8gW2J0bkxlZnRdIHBlcm1pdGUgcXVlIG8gdXN1w6FyaW8gZmluYWwgZm9ybmXDp2EgY29udGXDumRvIHBlcnNvbmFsaXphZG8gcGFyYSBzZXIgZXhpYmlkbyBubyBsYWRvIGVzcXVlcmRvIGRvIGNvbWJvYm94IGRlIHBlc3F1aXNhLlxyXG4gICBBbyB1c2FyIG8gYXRyaWJ1dG8gW2J0bkxlZnRdLCBvIHVzdcOhcmlvIHBvZGUgZmFjaWxtZW50ZSBhZGljaW9uYXIgYm90w7VlcyBvdSBvdXRyb3MgZWxlbWVudG9zIHBhcmEgbWVsaG9yYXIgYSBmdW5jaW9uYWxpZGFkZSBvdSBhcGFyw6puY2lhIGRvIGNvbWJvYm94IGRlIHBlc3F1aXNhLiAtLT5cclxuICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2J0bkxlZnRdXCI+PC9uZy1jb250ZW50PlxyXG5cclxuICAgPGlucHV0ICAjbWFpbklucHV0IGNsYXNzPVwiZm9ybS1zZWxlY3QgdGV4dC1zdGFydCByb3VuZGVkLWVuZFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIFtwbGFjZWhvbGRlcl09XCJtYWluSW5wdXRQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbm5lckNvbnRyb2xcIiBkYXRhLWJzLWF1dG8tY2xvc2U9XCJvdXRzaWRlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgcmVhZG9ubHkgW2NsYXNzLmlzLWludmFsaWRdPVwiaW52YWxpZENvbnRyb2xcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXJpYUV4cGFuZGVkID0gIWFyaWFFeHBhbmRlZDsgc2VhcmNoSW5wdXQuZm9jdXMoKVwiIChmb2N1cyk9XCJzZWFyY2hJbnB1dC5mb2N1cygpXCI+XHJcblxyXG4gICA8dWwgICNkcm9wZG93bk1lbnUgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBwLTIgZ2xiLW1heC1oZWlnaHQtMzUwcHggb3ZlcmZsb3cteS1zY3JvbGwgei1pbmRleC0xMDIwXCIgW2NsYXNzLnNob3ddPVwiYXJpYUV4cGFuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgKGlucHV0KT1cInRleHRvUGVzcXVpc2EgPSBzZWFyY2hJbnB1dC52YWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzZWFyY2hJbnB1dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGdsYi1pbnB1dC1uby1nbG93XCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaElucHV0UGxhY2Vob2xkZXJcIiAoa2V5dXAuZW50ZXIpPVwicmVsb2FkTGlzdCgpXCI+XHJcbiAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXt7Y29sb3JUaGVtZX19XCIgKGNsaWNrKT1cInJlbG9hZExpc3QoKVwiPiA8YXBwLXN2Zy1zdG9yYWdlIHN2Z05hbWU9XCJsdXBhXCIgc3ZnU2l6ZT1cIm1lZGl1bS1zbWFsbFwiIC8+IDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIEBpZiAoY29tYm9ib3hMaXN0KSB7XHJcbiAgICAgICAgIDxsaSAqbmdJZj1cImlubmVyQ29udHJvbC52YWx1ZSAhPSAnJyAmJiBpbm5lckNvbnRyb2wudmFsdWUgIT0gbnVsbFwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJjbGVhclZhbHVlKClcIj4gPHNwYW4gY2xhc3M9XCJmdy1ib2xkXCI+TGltcGFyIG9ww6fDo28gc2VsZWNpb25hZGE8L3NwYW4+IDwvbGk+XHJcbiAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY29tYm9ib3hMaXN0IHwgdGV4dEZpbHRlcjp0ZXh0b1Blc3F1aXNhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJzZXRWYWx1ZShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uQWRkaXRpb25hbFN0cmluZ1Byb3BlcnR5MSB8fCBpdGVtLkFkZGl0aW9uYWxTdHJpbmdQcm9wZXJ0eTEgIT0gJydcIiBjbGFzcz1cImdsYi1mcy0xMiBmdy1ib2xkIGQtaW5saW5lLWJsb2NrIHctMTI1XCI+e3sgaXRlbS5BZGRpdGlvbmFsU3RyaW5nUHJvcGVydHkxIH19PC9zcGFuPiB7eyBpdGVtLkxBQkVMIH19XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgQGVtcHR5IHsgPGxpIGNsYXNzPVwiZHJvcGRvd24taXRlbSBmc3QtaXRhbGljXCI+TmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG8gY29tIGVzdGEgcGVzcXVpc2EuLi48L2xpPiB9XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2UgeyA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHRleHQtY2VudGVyXCI+IDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj48c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkNhcnJlZ2FuZG8gZGFkb3MuLi48L3NwYW4+PC9kaXY+IDwvbGk+IH1cclxuICAgPC91bD5cclxuXHJcbiAgIDwhLS0gRXN0ZSBlbGVtZW50byBuZy1jb250ZW50IGNvbSBvIGF0cmlidXRvIFtidG5SaWdodF0gcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBmaW5hbCBmb3JuZcOnYSBjb250ZcO6ZG8gcGVyc29uYWxpemFkbyBwYXJhIHNlciBleGliaWRvIG5vIGxhZG8gZGlyZWl0byBkbyBjb21ib2JveCBkZSBwZXNxdWlzYS5cclxuICAgQW8gdXNhciBvIGF0cmlidXRvIFtidG5SaWdodF0sIG8gdXN1w6FyaW8gcG9kZSBmYWNpbG1lbnRlIGFkaWNpb25hciBib3TDtWVzIG91IG91dHJvcyBlbGVtZW50b3MgcGFyYSBtZWxob3JhciBhIGZ1bmNpb25hbGlkYWRlIG91IGFwYXLDqm5jaWEgZG8gY29tYm9ib3ggZGUgcGVzcXVpc2EuIC0tPlxyXG4gICA8bmctY29udGVudCBzZWxlY3Q9XCJbYnRuUmlnaHRdXCI+PC9uZy1jb250ZW50PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tICNyZWdpb24gTUVOU0FHRU0gREUgRVJSTyBERSBWQUxJREHDh8ODTyAtLT5cclxuPGFwcC1maWVsZC1lcnJvci1tZXNzYWdlICpuZ0lmPVwiaW52YWxpZENvbnRyb2xcIiBjdXN0b21NZXNzYWdlPVwiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uXCIgLz5cclxuPCEtLSAjZW5kcmVnaW9uIE1FTlNBR0VNIERFIEVSUk8gREUgVkFMSURBw4fDg08gLS0+XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWNvbWJvYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvbGliLWNvbWJvYm94L2xpYi1jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2xpYi1jb21ib2JveC9saWItY29tYm9ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBbUIsV0FBVyxFQUFxQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUlwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsSUFBYyxZQUFZLEtBQWMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFjLFlBQVksQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBaUIxRSxxQkFBcUI7SUFFckIsaUJBQWlCO0lBRWpCOzt5REFFcUQ7SUFDckQsSUFDVyxZQUFZLEtBQXVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQSxDQUFDLENBQUM7SUFDekUsSUFBVyxZQUFZLENBQUMsS0FBOEM7UUFDcEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFvQixDQUFDO1FBRTFDLDhFQUE4RTtRQUM5RSxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsSUFBSSxDQUFDLGFBQWEs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QUEsQ0FBQyxDQUFDOytHQTFPN0Qsb0JBQW9CO21HQUFwQixvQkFBb0IseXdCQ3pDakMsNnNHQXNDQTs7NEZER2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7d0RBcUNiLFlBQVk7c0JBRHRCLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZ0JNLFlBQVk7c0JBQTVELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXhCLFNBQVM7c0JBQXhCLEtBQUs7Z0JBTVUsV0FBVztzQkFBMUIsS0FBSztnQkFNSyxRQUFRO3NCQURsQixLQUFLO2dCQWEyQixvQkFBb0I7c0JBQXBELEtBQUs7dUJBQUMsaUJBQWlCO2dCQU1XLHNCQUFzQjtzQkFBeEQsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBT0gsVUFBVTtzQkFBaEMsS0FBSzt1QkFBQyxPQUFPO2dCQU1FLFlBQVk7c0JBQTNCLEtBQUs7Z0JBTVcsWUFBWTtzQkFBNUIsTUFBTTtnQkFPVSxRQUFRO3NCQUF4QixNQUFNO2dCQUd5QixVQUFVO3NCQUF6QyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ2EsYUFBYTtzQkFBL0MsU0FBUzt1QkFBQyxjQUFjO2dCQStCekIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFJlY29yZENvbWJvYm94IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbWJvYm94L3JlY29yZC1jb21ib2JveCc7XHJcblxyXG4vKipcclxuICogQGNvbXBvbmVudCBMaWJDb21ib2JveENvbXBvbmVudFxyXG4gKiBAc2VsZWN0b3IgbGliLWNvbWJvYm94XHJcbiAqIFxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogTyBjb21wb25lbnRlIExpYkNvbWJvYm94Q29tcG9uZW50IMOpIHByb2pldGFkbyBwYXJhIGZvcm5lY2VyIGFvcyB1c3XDoXJpb3MgdW1hIGludGVyZmFjZSBwYXJhIHBlc3F1aXNhciBlIHNlbGVjaW9uYXIgaXRlbnMgZGUgdW1hIGxpc3RhLlxyXG4gKiBFbGUgc3Vwb3J0YSBhIGZpbHRyYWdlbSBkZSBpdGVucyBjb20gYmFzZSBuYSBlbnRyYWRhIGRvIHVzdcOhcmlvLCBwZXJtaXRpbmRvIHVtYSBzZWxlw6fDo28gbWFpcyBmw6FjaWwgZW0gbGlzdGFzIGV4dGVuc2FzLlxyXG4gKiBcclxuICogIyMgRnVuY2lvbmFsaWRhZGVzOlxyXG4gKiAtIFBlc3F1aXNhIGUgZmlsdHJhZ2VtIGRlIGl0ZW5zIG5hIGxpc3RhIGRvIGNvbWJvYm94LlxyXG4gKiAtIFNlbGXDp8OjbyBkZSBpdGVucyBjb20gZmVlZGJhY2sgdmlzdWFsLlxyXG4gKiAtIEVtaXNzw6NvIGRlIGV2ZW50b3MgcGVyc29uYWxpemFkb3MgcGFyYSBpbnRlcmHDp8O1ZXMgZG8gdXN1w6FyaW8sIGNvbW8gcmVjYXJyZWdhciBhIGxpc3RhIG91IHNlbGVjaW9uYXIgdW0gaXRlbS5cclxuICogLSBBanVzdGUgZGluw6JtaWNvIGRhIGxhcmd1cmEgZG8gZHJvcGRvd24gcGFyYSBjb3JyZXNwb25kZXIgYW8gaW5wdXQgcHJpbmNpcGFsLlxyXG4gKiAtIEluaWNpYWxpemHDp8OjbyBkZSB1bSB2YWxvciBzZWxlY2lvbmFkbywgc2UgZm9ybmVjaWRvLlxyXG4gKiBcclxuICogIyMgSW5wdXRzOlxyXG4gKiAtIGBvdXRlckNvbnRyb2xgIChGb3JtQ29udHJvbCB8IEFic3RyYWN0Q29udHJvbCk6IENvbnRyb2wgcGFyYSBzZWxlw6fDo28gZG9zIHZhbG9yZXMsIGF0dWFsaXphcsOhIGF1dG9tYXRpY2FtZW50ZSBvIGNvbnRyb2wgZG8gY29tcG9uZW50ZSBwYWkgdGFtYsOpbVxyXG4gKiAtIGBjb21ib2JveExpc3RgIChSZWNvcmRDb21ib2JveFtdKTogTGlzdGEgZGUgcmVnaXN0cm9zIHF1ZSBzZXLDo28gZXhpYmlkb3Mgbm8gY29tYm8sIGVucXVhbnRvIGVsZXMgZXN0aXZlcmVtIGNhcnJlZ2FuZG8gc2Vyw6EgZXhpYmlkbyB1bSBzcGlubmVyXHJcbiAqIC0gYGxhYmVsVGV4dGAgKHN0cmluZyk6IFRleHRvIGRvIHLDs3R1bG8gcXVlIHNlcsOhIGV4aWJpZG8gYWNpbWEgZG8gY29tYm8uIENhc28gbsOjbyBpbmZvcm1hZG8gbmFkYSBzZXLDoSBleGliaWRvXHJcbiAqIC0gYGRpc2FibGVkYCAoYm9vbGVhbik6IERlZmluZSBzZSBvIGNhbXBvIGVzdMOhIGRlc2FiaWxpdGFkby4gRGV2ZSBzZXIgdXNhZG8gcGFyYSB2YWxpZGHDp8O1ZXMgZGUgaGFiaWxpdGHDp8OjbyBkaW7Dom1pY2EgZG8gY2FtcG9cclxuICogLSBgbGliUmVxdWlyZWRgIChib29sZWFuKTogRGVmaW5lIHNlIG8gY2FtcG8gw6kgb2JyaWdhdMOzcmlvLCB2YWkgZXhpYmlyIG8gJyonIHZlcm1lbGhvIGFvIGxhZG8gZG8gbGFiZWwgKHNlIGVsZSBlc3RpdmVyIHByZXNlbnRlKVxyXG4gKiAtIGBtYWluSW5wdXRQbGFjZWhvbGRlcmAgKHN0cmluZyk6IFBsYWNlaG9sZGVyIGRvIGNhbXBvIHByaW5jaXBhbCBkbyBjb21ib1xyXG4gKiAtIGBzZWFyY2hJbnB1dFBsYWNlaG9sZGVyYCAoc3RyaW5nKTogUGxhY2Vob2xkZXIgZG8gY2FtcG8gZGUgcGVzcXVpc2EgZGVudHJvIGRvIGNvbWJvXHJcbiAqIC0gYGNvbG9yVGhlbWVgIChcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiIHwgXCJsaWdodFwiIHwgXCJkYXJrXCIpOiBEZWZpbmUgbyB0ZW1hIGRlIGNvciBkbyBjb21wb25lbnRlLCBjb21vIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgb3UgXCJkYW5nZXJcIlxyXG4gKiAtIGByZXR1cm5SZWNvcmRgIChib29sZWFuKTogRGVmaW5lIHNlIG8gdGlwbyBkZSByZXRvcm5vIGFvIHNlbGVjaW9uYXIgdW1hIG9ww6fDo28gc2Vyw6EgbyBSZWNvcmQgaW50ZWlybyBvdSBhcGVuYXMgbyBJRFxyXG4gKiBcclxuICogIyMgT3V0cHV0czpcclxuICogLSBgb25SZWxvYWRMaXN0YCAoRXZlbnRFbWl0dGVyPHN0cmluZz4pOiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBwcmVjaXNhIHNlciByZWNhcnJlZ2FkYS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbWJvYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGliLWNvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbGliLWNvbWJvYm94LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTGliQ29tYm9ib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUEVSVElFUyA8PT09PT09PT09PVxyXG5cclxuICAvLyAjcmVnaW9uIFBST1RFQ1RFRFxyXG4gIHByb3RlY3RlZCB0ZXh0b1Blc3F1aXNhOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGFyaWFFeHBhbmRlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2FyaWFFeHBhbmRlZDsgfVxyXG4gIHByb3RlY3RlZCBzZXQgYXJpYUV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX2FyaWFFeHBhbmRlZCA9IHZhbHVlOyB9XHJcblxyXG4gIHByb3RlY3RlZCBpbm5lckNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bWJlciB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCBpbnZhbGlkQ29udHJvbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBpbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHRvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyAjZW5kcmVnaW9uIFBST1RFQ1RFRFxyXG5cclxuICAvLyAjcmVnaW9uIFBSSVZBVEVcclxuICBwcml2YXRlIF9kaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hcmlhRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3V0ZXJDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPihudWxsKTtcclxuICAvLyAjZW5kcmVnaW9uIFBSSVZBVEVcclxuXHJcbiAgLy8gI3JlZ2lvbiBQVUJMSUNcclxuXHJcbiAgLyoqIChvYnJpZ2F0w7NyaW8pIENvbnRyb2wgcGFyYSBzZWxlw6fDo28gZG9zIHZhbG9yZXMsIGF0dWFsaXphcsOhIGF1dG9tYXRpY2FtZW50ZSBvIGNvbnRyb2wgZG8gY29tcG9uZW50ZSBwYWkgdGFtYsOpbVxyXG4gICAqIEBhbGlhcyAnY29udHJvbCdcclxuICAgKiBAdHlwZSB7Rm9ybUNvbnRyb2w8YW55PiB8IEFic3RyYWN0Q29udHJvbDxhbnk+fSAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnY29udHJvbCcsIHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIGdldCBvdXRlckNvbnRyb2woKTogRm9ybUNvbnRyb2w8YW55PiB7IHJldHVybiB0aGlzLl9vdXRlckNvbnRyb2wgfVxyXG4gIHB1YmxpYyBzZXQgb3V0ZXJDb250cm9sKHZhbHVlOiBGb3JtQ29udHJvbDxhbnk+IHwgQWJzdHJhY3RDb250cm9sPGFueT4pIHtcclxuICAgIHRoaXMuX291dGVyQ29udHJvbCA9IHZhbHVlIGFzIEZvcm1Db250cm9sO1xyXG5cclxuICAgIC8vIENhbmNlbGEgYSBzdWJzY3Jpw6fDo28gYW50ZXJpb3IgKHNlIGhvdXZlcikgcGFyYSBldml0YXIgbcO6bHRpcGxhcyBzdWJzY3Jpw6fDtWVzXHJcbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uKSB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvLyBTdWJzY3Jpw6fDo28gYW8gb2JzZXJ2w6F2ZWwgdmFsdWVDaGFuZ2VzIHBhcmEgcmVhZ2lyIGEgbXVkYW7Dp2FzIG5vIHZhbG9yXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9vdXRlckNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7IHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSh2YWx1ZSkgfSk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9vdXRlckNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoc3RhdHVzID0+IHsgdGhpcy5zZXRDb250cm9sU3RhdHVzKHN0YXR1cykgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogKG9icmlnYXTDs3JpbykgTGlzdGEgZGUgcmVnaXN0cm9zIHF1ZSBzZXLDo28gZXhpYmlkb3Mgbm8gY29tYm8sIGVucXVhbnRvIGVsZXMgZXN0aXZlcmVtIGNhcnJlZ2FuZG8gc2Vyw6EgZXhpYmlkbyB1bSBzcGlubmVyXHJcbiAgICogQGFsaWFzICdsaXN0J1xyXG4gICAqIEB0eXBlIHtSZWNvcmRDb21ib2JveFtdfSAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnbGlzdCcsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBjb21ib2JveExpc3Q/OiBSZWNvcmRDb21ib2JveFtdO1xyXG5cclxuICAvKiogKG9wY2lvbmFsKSBUZXh0byBkbyByw7N0dWxvIHF1ZSBzZXLDoSBleGliaWRvIGFjaW1hIGRvIGNvbWJvLiBDYXNvIG7Do28gaW5mb3JtYWRvIG5hZGEgc2Vyw6EgZXhpYmlkb1xyXG4gICAqIEB0eXBlIHtzdHJpbmd9ICovXHJcbiAgQElucHV0KCkgcHVibGljIGxhYmVsVGV4dD86IHN0cmluZztcclxuXHJcbiAgLyoqIChvcGNpb25hbCkgRGVmaW5lIHNlIG8gY2FtcG8gw6kgb2JyaWdhdMOzcmlvLCB2YWkgZXhpYmlyIG8gJyonIHZlcm1lbGhvIGFvIGxhZG8gZG8gbGFiZWwgKHNlIGVsZSBlc3RpdmVyIHByZXNlbnRlKVxyXG4gICAqICEgU0VSw4EgREVQUkVDSUFETyBFTSBCUkVWRVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgQElucHV0KCkgcHVibGljIGxpYlJlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogKG9wY2lvbmFsKSBEZWZpbmUgc2UgbyBjYW1wbyBlc3TDoSBkZXNhYmlsaXRhZG8uIERldmUgc2VyIHVzYWRvIHBhcmEgdmFsaWRhw6fDtWVzIGRlIGhhYmlsaXRhw6fDo28gZGluw6JtaWNhIGRvIGNhbXBvXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICogQGRlZmF1bHQgZmFsc2UgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZCA/PyBmYWxzZTsgfVxyXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkgdGhpcy5pbm5lckNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgZWxzZSB0aGlzLmlubmVyQ29udHJvbC5lbmFibGUoKTtcclxuXHJcbiAgICAvL3RoaXMuc2V0Q29udHJvbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqIChvcGNpb25hbCkgUGxhY2Vob2xkZXIgZG8gY2FtcG8gcHJpbmNpcGFsIGRvIGNvbWJvXHJcbiAgICogQGFsaWFzICdtYWluUGxhY2Vob2xkZXInXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKiBAZGVmYXVsdCBcIlNlbGVjaW9uZSB1bWEgb3DDp8Ojby4uLlwiICovXHJcbiAgQElucHV0KCdtYWluUGxhY2Vob2xkZXInKSBwdWJsaWMgbWFpbklucHV0UGxhY2Vob2xkZXI/OiBzdHJpbmcgPSBcIlNlbGVjaW9uZSB1bWEgb3DDp8Ojby4uLlwiO1xyXG5cclxuICAvKiogKG9wY2lvbmFsKSBQbGFjZWhvbGRlciBkbyBjYW1wbyBkZSBwZXNxdWlzYSBkZW50cm8gZG8gY29tYm9cclxuICAgKiBAYWxpYXMgJ3NlYXJjaFBsYWNlaG9sZGVyJ1xyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogQGRlZmF1bHQgXCJQZXNxdWlzYS4uLlwiICovXHJcbiAgQElucHV0KCdzZWFyY2hQbGFjZWhvbGRlcicpIHB1YmxpYyBzZWFyY2hJbnB1dFBsYWNlaG9sZGVyPzogc3RyaW5nID0gXCJQZXNxdWlzYS4uLlwiO1xyXG5cclxuICAvKiogKG9wY2lvbmFsKSBEZWZpbmUgbyB0ZW1hIGRlIGNvciBkbyBjb21wb25lbnRlLCBjb21vIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgb3UgXCJkYW5nZXJcIlxyXG4gICAqIEBhbGlhcyAndGhlbWUnXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKiBAZGVmYXVsdCBcInByaW1hcnlcIlxyXG4gICovXHJcbiAgQElucHV0KCd0aGVtZScpIHB1YmxpYyBjb2xvclRoZW1lPzogc3RyaW5nID0gXCJwcmltYXJ5XCI7XHJcblxyXG4gIC8qKiAob3BjaW9uYWwpIERlZmluZSBzZSBvIHRpcG8gZGUgcmV0b3JubyBhbyBzZWxlY2lvbmFyIHVtYSBvcMOnw6NvIHNlcsOhIG8gUmVjb3JkIGludGVpcm8gb3UgYXBlbmFzIG8gSUQuXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZXR1cm5SZWNvcmQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBhbyByZWNhcnJlZ2FyIGEgbGlzdGEgZGUgcmVnaXN0cm9zXHJcbiAgICogQGV4YW1wbGUgQW8gc2VyIGVtaXRpZG8sIG8gY29tcG9uZW50ZSBwYWkgcG9kZSByZWZhemVyIG8gR0VUIGRhIGxpc3RhLCBwb3IgZXhlbXBsby5cclxuICAgKiBAZW1pdHMgRXZlbnRFbWl0dGVyPHN0cmluZz4gcXVlIGxldmEgbyB2YWxvciBzdHJpbmcgZGEgcGVzcXVpc2EgZmVpdGEgcGFyYSBzZXIgZW52aWFkYSBwYXJhIG8gR0VUXHJcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fSAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25SZWxvYWRMaXN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIGFvIHNlbGVjaW9uYXIgdW0gcmVnaXN0cm8gZGEgbGlzdGEgZG8gY29tYm9ib3hcclxuICAgKiBAZXhhbXBsZSBBbyBzZXIgZW1pdGlkbywgbyBjb21wb25lbnRlIHBhaSBwb2RlIHJlYWxpemFyIHVtYSB2YWxpZGHDp8OjbyBjb20gbyB2YWxvciBzZWxlY2lvbmFkby5cclxuICAgKiBAZW1pdHMgRXZlbnRFbWl0dGVyPHN0cmluZ3xudW1iZXJ8bnVsbD4gcXVlIGxldmEgbyB2YWxvciBzdHJpbmcgZGEgcGVzcXVpc2EgZmVpdGEgcGFyYSBzZXIgZW52aWFkYSBwYXJhIG8gR0VUXHJcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmcgfCBudW1iZXIgfCBudWxsPn0gKi9cclxuICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkQ29tYm9ib3ggfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkQ29tYm9ib3ggfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsPigpO1xyXG4gIFxyXG5cclxuICBAVmlld0NoaWxkKCdtYWluSW5wdXQnKSBwcml2YXRlIF9tYWluSW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTWVudScpIHByaXZhdGUgX2Ryb3Bkb3duTWVudSE6IEVsZW1lbnRSZWY7XHJcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QRVJUSUVTIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IElOSVRJQUxJWkFUSU9OIDw9PT09PT09PT09XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkanVzdERyb3Bkb3duV2lkdGgoKTtcclxuXHJcbiAgICB0aGlzLnNldFZhbGlkYXRvcigpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkanVzdERyb3Bkb3duV2lkdGgoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiY29tYm9ib3hMaXN0XCJdPy5jdXJyZW50VmFsdWUpIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJvdXRlckNvbnRyb2xcIl0/LmN1cnJlbnRWYWx1ZSkgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKChjaGFuZ2VzW1wib3V0ZXJDb250cm9sXCJdLmN1cnJlbnRWYWx1ZSBhcyBGb3JtQ29udHJvbCkudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8vIE8gcXVlIGZhemVyIHF1YW5kbyBvIGV2ZW50byBkZSByZWRpbWVuc2lvbmFtZW50byBvY29ycmVyXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7IHRoaXMuYWRqdXN0RHJvcGRvd25XaWR0aCgpIH1cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IElOSVRJQUxJWkFUSU9OIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxTIDw9PT09PT09PT09XHJcbiAgcHVibGljIHNldFZhbHVlKGl0ZW06IFJlY29yZENvbWJvYm94KTogdm9pZCB7XHJcbiAgICB0aGlzLnRleHRvUGVzcXVpc2EgPSBcIlwiO1xyXG4gICAgdGhpcy5pbm5lckNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuX291dGVyQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgXHJcbiAgICB0aGlzLl9vdXRlckNvbnRyb2wuc2V0VmFsdWUoaXRlbS5JRCk7XHJcbiAgICB0aGlzLmlubmVyQ29udHJvbC5zZXRWYWx1ZShpdGVtLkxBQkVMKTtcclxuXHJcbiAgICB0aGlzLmFyaWFFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZXRDb250cm9sU3RhdHVzKHRoaXMuaW5uZXJDb250cm9sLnN0YXR1cyk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJyZXR1cm5SZWNvcmQ6XCIsIHRoaXMucmV0dXJuUmVjb3JkKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmV0dXJuIFwiLCB0aGlzLnJldHVyblJlY29yZCA/IGl0ZW0gOiBpdGVtLklEKTtcclxuICAgIFxyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucmV0dXJuUmVjb3JkID8gaXRlbSBhcyBSZWNvcmRDb21ib2JveCA6IGl0ZW0uSUQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRleHRvUGVzcXVpc2EgPSBcIlwiO1xyXG4gICAgdGhpcy5pbm5lckNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuX291dGVyQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG5cclxuICAgIHRoaXMuX291dGVyQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuaW5uZXJDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuYXJpYUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNldENvbnRyb2xTdGF0dXModGhpcy5pbm5lckNvbnRyb2wuc3RhdHVzKTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkVmFsdWUodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmlubmVyQ29udHJvbC5zZXRWYWx1ZShudWxsKTsgLy8gTGltcGEgbyBjYW1wbyBhbnRlcyBkZSBxdWFscXVlciBjb2lzYVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IHZhbHVlID8/IHRoaXMuX291dGVyQ29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29tYm9ib3hMaXN0IHx8IChzZWxlY3RlZFZhbHVlID09PSBudWxsICYmIHNlbGVjdGVkVmFsdWUgPT09ICcnKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGluaXRpYWxpemVkVmFsdWUgPSB0aGlzLmNvbWJvYm94TGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5JRCA9PT0gc2VsZWN0ZWRWYWx1ZSlcclxuICAgIGlmIChpbml0aWFsaXplZFZhbHVlKSB0aGlzLmlubmVyQ29udHJvbC5zZXRWYWx1ZShpbml0aWFsaXplZFZhbHVlLkxBQkVMKTtcclxuXHJcbiAgICAvLyB0aGlzLnNldENvbnRyb2xTdGF0dXModGhpcy5fb3V0ZXJDb250cm9sLnN0YXR1cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkanVzdERyb3Bkb3duV2lkdGgoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fbWFpbklucHV0ICYmIHRoaXMuX2Ryb3Bkb3duTWVudSkge1xyXG4gICAgICBjb25zdCBpbnB1dFdpZHRoID0gdGhpcy5fbWFpbklucHV0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7aW5wdXRXaWR0aH1weGA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbGlkYXRvcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRlckNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pbm5lckNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbnRyb2xTdGF0dXMoZm9ybVN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpOiB2b2lkIHtcclxuICAgIHN3aXRjaChmb3JtU3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ1ZBTElEJzpcclxuICAgICAgICB0aGlzLmludmFsaWRDb250cm9sID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdJTlZBTElEJzpcclxuICAgICAgICB0aGlzLmludmFsaWRDb250cm9sID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlubmVyQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ1BFTkRJTkcnOlxyXG4gICAgICAgIHRoaXMuaW52YWxpZENvbnRyb2wgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlubmVyQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0RJU0FCTEVEJzpcclxuICAgICAgICB0aGlzLmludmFsaWRDb250cm9sID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWxvYWRMaXN0KCk6IHZvaWQgeyB0aGlzLm9uUmVsb2FkTGlzdC5lbWl0KHRoaXMudGV4dG9QZXNxdWlzYSkgfVxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTFMgPD09PT09PT09PT1cclxuXHJcbn1cclxuIiwiPGxhYmVsICpuZ0lmPVwibGFiZWxUZXh0ICYmIGxhYmVsVGV4dCAhPSAnJ1wiIFtsaWJSZXF1aXJlZF09XCJpc1JlcXVpcmVkXCIgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LWJvbGRcIj57eyBsYWJlbFRleHQgfX08L2xhYmVsPlxyXG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZHJvcGRvd24gZmxleC1maWxsIGdsYi1tYXgtaGVpZ2h0LTM1MHB4XCI+XHJcblxyXG4gICA8IS0tIEVzdGUgZWxlbWVudG8gbmctY29udGVudCBjb20gbyBhdHJpYnV0byBbYnRuTGVmdF0gcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBmaW5hbCBmb3JuZcOnYSBjb250ZcO6ZG8gcGVyc29uYWxpemFkbyBwYXJhIHNlciBleGliaWRvIG5vIGxhZG8gZXNxdWVyZG8gZG8gY29tYm9ib3ggZGUgcGVzcXVpc2EuXHJcbiAgIEFvIHVzYXIgbyBhdHJpYnV0byBbYnRuTGVmdF0sIG8gdXN1w6FyaW8gcG9kZSBmYWNpbG1lbnRlIGFkaWNpb25hciBib3TDtWVzIG91IG91dHJvcyBlbGVtZW50b3MgcGFyYSBtZWxob3JhciBhIGZ1bmNpb25hbGlkYWRlIG91IGFwYXLDqm5jaWEgZG8gY29tYm9ib3ggZGUgcGVzcXVpc2EuIC0tPlxyXG4gICA8bmctY29udGVudCBzZWxlY3Q9XCJbYnRuTGVmdF1cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gICA8aW5wdXQgICNtYWluSW5wdXQgY2xhc3M9XCJmb3JtLXNlbGVjdCB0ZXh0LXN0YXJ0IHJvdW5kZWQtZW5kXCIgdHlwZT1cInRleHRcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgW3BsYWNlaG9sZGVyXT1cIm1haW5JbnB1dFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImlubmVyQ29udHJvbFwiIGRhdGEtYnMtYXV0by1jbG9zZT1cIm91dHNpZGVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiByZWFkb25seSBbY2xhc3MuaXMtaW52YWxpZF09XCJpbnZhbGlkQ29udHJvbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhcmlhRXhwYW5kZWQgPSAhYXJpYUV4cGFuZGVkOyBzZWFyY2hJbnB1dC5mb2N1cygpXCIgKGZvY3VzKT1cInNlYXJjaElucHV0LmZvY3VzKClcIj5cclxuXHJcbiAgIDx1bCAgI2Ryb3Bkb3duTWVudSAgY2xhc3M9XCJkcm9wZG93bi1tZW51IHAtMiBnbGItbWF4LWhlaWdodC0zNTBweCBvdmVyZmxvdy15LXNjcm9sbCB6LWluZGV4LTEwMjBcIiBbY2xhc3Muc2hvd109XCJhcmlhRXhwYW5kZWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCAoaW5wdXQpPVwidGV4dG9QZXNxdWlzYSA9IHNlYXJjaElucHV0LnZhbHVlXCIgdHlwZT1cInRleHRcIiBpZD1cInNlYXJjaElucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ2xiLWlucHV0LW5vLWdsb3dcIiBbcGxhY2Vob2xkZXJdPVwic2VhcmNoSW5wdXRQbGFjZWhvbGRlclwiIChrZXl1cC5lbnRlcik9XCJyZWxvYWRMaXN0KClcIj5cclxuICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4te3tjb2xvclRoZW1lfX1cIiAoY2xpY2spPVwicmVsb2FkTGlzdCgpXCI+IDxhcHAtc3ZnLXN0b3JhZ2Ugc3ZnTmFtZT1cImx1cGFcIiBzdmdTaXplPVwibWVkaXVtLXNtYWxsXCIgLz4gPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgQGlmIChjb21ib2JveExpc3QpIHtcclxuICAgICAgICAgPGxpICpuZ0lmPVwiaW5uZXJDb250cm9sLnZhbHVlICE9ICcnICYmIGlubmVyQ29udHJvbC52YWx1ZSAhPSBudWxsXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiPiA8c3BhbiBjbGFzcz1cImZ3LWJvbGRcIj5MaW1wYXIgb3DDp8OjbyBzZWxlY2lvbmFkYTwvc3Bhbj4gPC9saT5cclxuICAgICAgICAgQGZvciAoaXRlbSBvZiBjb21ib2JveExpc3QgfCB0ZXh0RmlsdGVyOnRleHRvUGVzcXVpc2E7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNldFZhbHVlKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5BZGRpdGlvbmFsU3RyaW5nUHJvcGVydHkxIHx8IGl0ZW0uQWRkaXRpb25hbFN0cmluZ1Byb3BlcnR5MSAhPSAnJ1wiIGNsYXNzPVwiZ2xiLWZzLTEyIGZ3LWJvbGQgZC1pbmxpbmUtYmxvY2sgdy0xMjVcIj57eyBpdGVtLkFkZGl0aW9uYWxTdHJpbmdQcm9wZXJ0eTEgfX08L3NwYW4+IHt7IGl0ZW0uTEFCRUwgfX1cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgfVxyXG4gICAgICAgICBAZW1wdHkgeyA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZzdC1pdGFsaWNcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbyBjb20gZXN0YSBwZXNxdWlzYS4uLjwvbGk+IH1cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7IDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gdGV4dC1jZW50ZXJcIj4gPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPjxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2FycmVnYW5kbyBkYWRvcy4uLjwvc3Bhbj48L2Rpdj4gPC9saT4gfVxyXG4gICA8L3VsPlxyXG5cclxuICAgPCEtLSBFc3RlIGVsZW1lbnRvIG5nLWNvbnRlbnQgY29tIG8gYXRyaWJ1dG8gW2J0blJpZ2h0XSBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGZpbmFsIGZvcm5lw6dhIGNvbnRlw7pkbyBwZXJzb25hbGl6YWRvIHBhcmEgc2VyIGV4aWJpZG8gbm8gbGFkbyBkaXJlaXRvIGRvIGNvbWJvYm94IGRlIHBlc3F1aXNhLlxyXG4gICBBbyB1c2FyIG8gYXRyaWJ1dG8gW2J0blJpZ2h0XSwgbyB1c3XDoXJpbyBwb2RlIGZhY2lsbWVudGUgYWRpY2lvbmFyIGJvdMO1ZXMgb3Ugb3V0cm9zIGVsZW1lbnRvcyBwYXJhIG1lbGhvcmFyIGEgZnVuY2lvbmFsaWRhZGUgb3UgYXBhcsOqbmNpYSBkbyBjb21ib2JveCBkZSBwZXNxdWlzYS4gLS0+XHJcbiAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltidG5SaWdodF1cIj48L25nLWNvbnRlbnQ+XHJcblxyXG48L2Rpdj5cclxuXHJcbjwhLS0gI3JlZ2lvbiBNRU5TQUdFTSBERSBFUlJPIERFIFZBTElEQcOHw4NPIC0tPlxyXG48YXBwLWZpZWxkLWVycm9yLW1lc3NhZ2UgKm5nSWY9XCJpbnZhbGlkQ29udHJvbFwiIGN1c3RvbU1lc3NhZ2U9XCJFc3RlIGNhbXBvIMOpIG9icmlnYXTDs3Jpby5cIiAvPlxyXG48IS0tICNlbmRyZWdpb24gTUVOU0FHRU0gREUgRVJSTyBERSBWQUxJREHDh8ODTyAtLT5cclxuIl19 \ No newline at end of file diff --git a/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs b/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs index 908b024..c7e67a5 100644 --- a/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs +++ b/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs @@ -4392,6 +4392,8 @@ class LibComboboxComponent { this.innerControl.setValue(item.LABEL); this.ariaExpanded = false; this.setControlStatus(this.innerControl.status); + console.log("returnRecord:", this.returnRecord); + console.log("return ", this.returnRecord ? item : item.ID); this.onChange.emit(this.returnRecord ? item : item.ID); } clearValue() { diff --git a/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map b/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map index ef5a5ac..f2983f8 100644 --- a/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map +++ b/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map @@ -1 +1 @@ -{"version":3,"file":"ngx-sp-infra.mjs","sources":["../../../projects/ngx-sp-infra/src/lib/message/alert/alert.component.ts","../../../projects/ngx-sp-infra/src/lib/message/alert/alert.component.html","../../../projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.ts","../../../projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.html","../../../projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.ts","../../../projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.html","../../../projects/ngx-sp-infra/src/lib/message/save/save.component.ts","../../../projects/ngx-sp-infra/src/lib/message/save/save.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/filter-by.pipe.ts","../../../projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/limit-to.pipe.ts","../../../projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.html","../../../projects/ngx-sp-infra/src/lib/utils/form-utils.ts","../../../projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/tree/pipes/search-tree.pipe.ts","../../../projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.html","../../../projects/ngx-sp-infra/src/lib/pipes/to-url.pipe.ts","../../../projects/ngx-sp-infra/src/lib/pipes/cpf-cnpj.pipe.ts","../../../projects/ngx-sp-infra/src/lib/widgets/click-outside/clickoutside.directive.ts","../../../projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.html","../../../projects/ngx-sp-infra/src/lib/directives/required.directive.ts","../../../projects/ngx-sp-infra/src/lib/pipes/text-filter.pipe.ts","../../../projects/ngx-sp-infra/src/lib/widgets/search-combobox/search-combobox.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/search-combobox/search-combobox.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/simple-header/simple-header.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/simple-header/simple-header.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/lib-icons/lib-icons.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/lib-icons/lib-icons.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/content-container/content-container.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/content-container/content-container.component.html","../../../projects/ngx-sp-infra/src/lib/directives/copy-clipboard.directive.ts","../../../projects/ngx-sp-infra/src/lib/widgets/table/table.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/table/table.component.html","../../../projects/ngx-sp-infra/src/lib/widgets/lib-combobox/lib-combobox.component.ts","../../../projects/ngx-sp-infra/src/lib/widgets/lib-combobox/lib-combobox.component.html","../../../projects/ngx-sp-infra/src/lib/infra.module.ts","../../../projects/ngx-sp-infra/src/lib/message/message-enum.ts","../../../projects/ngx-sp-infra/src/lib/message/message.service.ts","../../../projects/ngx-sp-infra/src/lib/models/DownloadArquivos.ts","../../../projects/ngx-sp-infra/src/lib/models/email-model.ts","../../../projects/ngx-sp-infra/src/lib/models/report-file.ts","../../../projects/ngx-sp-infra/src/lib/models/ret-error.ts","../../../projects/ngx-sp-infra/src/lib/models/ret-feedback-message.ts","../../../projects/ngx-sp-infra/src/lib/models/ret-report-file.ts","../../../projects/ngx-sp-infra/src/lib/models/combobox/record-combobox.ts","../../../projects/ngx-sp-infra/src/lib/models/combobox/ret-records-combobox.ts","../../../projects/ngx-sp-infra/src/lib/models/icons/icon.model.ts","../../../projects/ngx-sp-infra/src/lib/models/forms/custom-form-control.ts","../../../projects/ngx-sp-infra/src/lib/pipes/currency.pipe.ts","../../../projects/ngx-sp-infra/src/lib/utils/check-url-and-method.service.ts","../../../projects/ngx-sp-infra/src/lib/utils/settings.service.ts","../../../projects/ngx-sp-infra/src/lib/utils/ip-service.service.ts","../../../projects/ngx-sp-infra/src/lib/utils/utils.ts","../../../projects/ngx-sp-infra/src/lib/service/modal-utils.service.ts","../../../projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.ts","../../../projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.directive.ts","../../../projects/ngx-sp-infra/src/lib/widgets/tree/models/ret-tree.ts","../../../projects/ngx-sp-infra/src/lib/widgets/tree/models/tree-item.ts","../../../projects/ngx-sp-infra/src/public-api.ts","../../../projects/ngx-sp-infra/src/ngx-sp-infra.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\r\n\r\nimport { BsModalRef } from 'ngx-bootstrap/modal'\r\n\r\nimport { alertTypes } from '../message-enum';\r\n\r\n@Component({\r\n selector: 'app-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss']\r\n})\r\nexport class AlertComponent implements OnInit {\r\n @Input() message: string;\r\n @Input() type: alertTypes;\r\n \r\n constructor(public _bsModalRef: BsModalRef) { }\r\n \r\n ngOnInit(): void {\r\n const elSpan = document.createElement('span');\r\n\r\n elSpan.classList.add('xoverflow')\r\n\r\n elSpan.innerHTML = this.message;\r\n\r\n // Caso a mensagem seja muito grande, é quebrada para a próxima linha\r\n elSpan.style.wordBreak = \"break-word\";\r\n\r\n let elDivMessage = document.getElementById( \"divMessage\" );\r\n \r\n elDivMessage?.appendChild(elSpan);\r\n }\r\n\r\n public closeAlert(): void {\r\n this.message = '';\r\n \r\n this._bsModalRef.hide();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Input, OnInit, EventEmitter, Output } from '@angular/core';\r\n\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { BsModalRef } from 'ngx-bootstrap/modal';\r\n\r\n@Component({\r\n selector: 'app-confirm',\r\n templateUrl: './confirm.component.html',\r\n styleUrls: ['./confirm.component.scss'],\r\n})\r\nexport class ConfirmComponent implements OnInit {\r\n @Input() title: string;\r\n @Input() message: string;\r\n @Input() cancelText: string = 'Cancelar';\r\n @Input() okText: string = 'Sim';\r\n @Input() okButton: Function;\r\n @Input() parametroOkButton: boolean;\r\n @Output() clickButton = new EventEmitter<'confirmado' | 'cancelado'>();\r\n\r\n confirmResult: Subject<'confirmado' | 'cancelado'>;\r\n\r\n constructor(public bsModalRef: BsModalRef) {}\r\n\r\n ngOnInit(): void {\r\n this.confirmResult = new Subject();\r\n \r\n const elSpan = document.createElement('span');\r\n\r\n elSpan.classList.add('xoverflow')\r\n\r\n elSpan.innerHTML = this.message;\r\n\r\n let elDivMessage = document.getElementById( \"divMessage\" );\r\n \r\n elDivMessage?.appendChild(elSpan);\r\n }\r\n\r\n confirm() {\r\n this.confirmAndClose('confirmado');\r\n }\r\n\r\n closeConfirm() {\r\n this.confirmAndClose('cancelado');\r\n }\r\n\r\n private confirmAndClose(value: 'confirmado' | 'cancelado') {\r\n this.bsModalRef.hide();\r\n this.confirmResult.next( value )\r\n this.clickButton.emit(value);\r\n }\r\n}\r\n","
\r\n
\r\n
{{ title }}
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-confirm-modal',\r\n templateUrl: './confirm-modal.component.html',\r\n styleUrls: ['./confirm-modal.component.scss']\r\n})\r\nexport class ConfirmModalComponent {\r\n\r\n constructor() { }\r\n\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n @Output() public _closingModal: EventEmitter = new EventEmitter();\r\n // #endregion PRIVATE\r\n\r\n // #region PUBLIC\r\n @Input() public modalSubject: string;\r\n @Input() public modalType: 'Excluir' | 'Inativar' | 'Ativar';\r\n @Input() public genreAndPluralitySubject: 'masc singular' | 'masc plural' |\r\n 'fem singular' | 'fem plural' = 'masc singular';\r\n\r\n // Estas variáveis abaixo servem para deixar o mais genérico possível o modal de confirmalçao\r\n @Input() public customMessage: string = '';\r\n @Input() public customTitle: string = '';\r\n @Input() public customButton: string = '';\r\n @Input() public customButtonLoading: string = '';\r\n\r\n @Input() public importantMessage: boolean = false;\r\n\r\n public showSpinner: boolean = false;\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n\r\n // #region ==========> UTILITIES <==========\r\n /**\r\n * Este método recebe uma palavra (podendo ser uma palavra composta), vai\r\n * separá-la em outras palavras caso ela seja uma palavra composta, irá percorrer\r\n * as palavras separadas, colocando a inicial de cada palavra em maiúsculo, e\r\n * depois vai uní-las em uma nova palavra, que terá todas as primeiras letras em\r\n * maiúsculo para mostrar no título.\r\n * @param fateWord Palavra (podendo ser ou não palavra composta) que\r\n * será alterada para ter suas iniciais maiúsculas.\r\n * @returns Palavra com iniciais maiúscula.\r\n */\r\n public firstLetterIsLowercase(fateWord: string): string {\r\n const fateWordSplit: string[] = fateWord.split(\" \");\r\n\r\n for (let i = 0; i < fateWordSplit.length; i++) {\r\n fateWordSplit[i] = fateWordSplit[i][0].toLowerCase() + fateWordSplit[i].substring(1);\r\n }\r\n\r\n return fateWordSplit.join(\" \");\r\n }\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n\r\n // #region ==========> MODALS <==========\r\n /**\r\n * Função com o objetivo de mandar um evento para o componente pai para que\r\n * ele feche o modal.\r\n */\r\n public closeModal(isExecuteAction: boolean = false): void {\r\n this._closingModal.emit(isExecuteAction);\r\n }\r\n // #endregion ==========> MODALS <==========\r\n\r\n\r\n}\r\n","
\r\n

{{ customTitle === '' ? [modalType + ' ' + modalSubject] : customTitle }}

\r\n \r\n
\r\n
\r\n
\r\n Tem certeza que você quer {{ firstLetterIsLowercase(modalType) }}\r\n \r\n este \r\n estes \r\n esta \r\n estas \r\n \r\n {{ firstLetterIsLowercase(modalSubject) }}?\r\n \r\n\r\n \r\n {{ customMessage }} \r\n \r\n\r\n (esta ação é irreversível) \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { BsModalRef } from 'ngx-bootstrap/modal';\r\n\r\n@Component({\r\n selector: 'app-save',\r\n templateUrl: './save.component.html',\r\n styleUrls: ['./save.component.scss'],\r\n})\r\nexport class SaveComponent implements OnInit {\r\n @Input() title: string;\r\n @Input() message: string;\r\n @Input() cancelText: string = 'Cancelar';\r\n @Input() okText: string = 'Sim';\r\n @Input() okButton: Function;\r\n @Input() fields: string[];\r\n\r\n confirmResult: Subject;\r\n\r\n constructor(public bsModalRef: BsModalRef) {}\r\n\r\n ngOnInit(): void {\r\n this.confirmResult = new Subject();\r\n }\r\n\r\n confirm() {\r\n \r\n\r\n this.okButton({Id: 15});\r\n this.confirmAndClose(true);\r\n }\r\n\r\n closeConfirm() {\r\n this.confirmAndClose(false);\r\n }\r\n\r\n private confirmAndClose(value: boolean) {\r\n this.confirmResult.next(value);\r\n\r\n this.bsModalRef.hide();\r\n }\r\n}\r\n","
\r\n
\r\n

{{ title }}

\r\n \r\n
\r\n
\r\n

{{ message }}

\r\n\r\n
\r\n
\r\n
\r\n dados \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Component, ElementRef, OnInit } from '@angular/core';\r\n\r\n/**\r\n * Item da lista padrão da Sispro.\r\n * \r\n * Deve ser utilizado em conjunto com o InfraBreadCrumb\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'li[infra-breadcrumb-item]',\r\n templateUrl: './infra-breadcrumb-item.component.html',\r\n styleUrls: ['./infra-breadcrumb-item.component.css']\r\n})\r\nexport class InfraBreadcrumbItemComponent implements OnInit {\r\n\r\n constructor(private elem: ElementRef) { }\r\n \r\n ngOnInit(): void {\r\n this.elem.nativeElement.classList.add(\"breadcrumb-item\")\r\n \r\n if (this.elem.nativeElement.children.length > 0) {\r\n let isAnchor = this.elem.nativeElement.children[0] instanceof HTMLAnchorElement;\r\n \r\n if (isAnchor) {\r\n this.elem.nativeElement.classList.add(\"active\");\r\n }\r\n }\r\n }\r\n}\r\n","","import { Component } from '@angular/core';\r\n/**\r\n * Breadcrumbs padrão Sispro.\r\n * \r\n * ## Utilização\r\n * \r\n * Colocar o componente infra-breadcrumb com elementos li que possuem o seletor infra-breadcrumb-item.\r\n * Como demonstrado da seguinte forma:\r\n * \r\n * \r\n *
  • \r\n * Home\r\n *
  • \r\n *
  • \r\n * Consultar\r\n *
  • \r\n *
    \r\n * \r\n * ## Peculiaridades\r\n * \r\n * Não é necessário colocar o item como ativo pois ele verifica se algum dos filhos do elemento li é\r\n * uma âncora ()\r\n * \r\n */\r\n@Component({\r\n selector: 'infra-breadcrumb',\r\n templateUrl: './infra-breadcrumb.component.html',\r\n styleUrls: ['./infra-breadcrumb.component.css']\r\n})\r\nexport class InfraBreadcrumbComponent {\r\n\r\n constructor() { }\r\n\r\n}\r\n","
      \r\n \r\n
    ","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.css']\r\n})\r\nexport class BreadcrumbComponent implements OnInit {\r\n \r\n @Input() menu: string = '';\r\n @Input() opcao: string = '';\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","\r\n
      \r\n
    1. {{ menu }}
    2. \r\n
    3. {{ opcao }}
    4. \r\n
    \r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * filters an array based on searctext\r\n */\r\n@Pipe({\r\n name: 'filterBy'\r\n})\r\nexport class FilterByPipe implements PipeTransform {\r\n public transform(array: any[], searchText?: string, keyName?: string) {\r\n if (!array || !searchText || !Array.isArray(array)) {\r\n return array;\r\n }\r\n if (typeof array[0] === 'string') {\r\n return array.filter((item) => item.toLowerCase().indexOf(searchText.toLowerCase()) > -1);\r\n }\r\n // filter array, items which match and return true will be\r\n // kept, false will be filtered out\r\n if (!keyName) {\r\n return array.filter((item: any) => {\r\n for (const key in item) {\r\n if (typeof item[key] !== 'object' && item[key].toString().toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n } else {\r\n return array.filter((item: any) => {\r\n if (typeof item[keyName] !== 'object' && item[keyName].toString().toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n }\r\n}\r\n","import { Component, OnChanges, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-svg-storage',\r\n templateUrl: './svg-storage.component.html',\r\n styleUrls: ['./svg-storage.component.scss']\r\n})\r\nexport class SvgStorageComponent implements OnChanges {\r\n\r\n constructor() { }\r\n\r\n public ngOnChanges(): void {\r\n switch (this.svgSize) {\r\n case \"default\": this.svgName == 'edit' ? this.size = 20 : this.size = 24; break;\r\n\r\n case \"medium-small\": this.svgName == 'edit' ? this.size = 16 : this.size = 20; break;\r\n\r\n case \"small\": this.svgName == 'edit' ? this.size = 12 : this.size = 16; break;\r\n\r\n default: this.size = this.svgSize; break;\r\n }\r\n\r\n this.color = this.svgColor;\r\n\r\n switch (this.svgColor) {\r\n case \"white\": this.color = \"#FFFFFF\"; break;\r\n\r\n case \"blue\": this.color = \"#2847A0\"; break;\r\n\r\n case \"gray\": this.color = \"#6C757D\"; break;\r\n\r\n case \"lightgray\": this.color = \"#bfbfbf\"; break;\r\n\r\n case \"green\": this.color = \"#198754\"; break;\r\n\r\n case \"light-blue\": this.color = \"#0dcaf0\"; break;\r\n\r\n case \"yellow\": this.color = \"#ffc107\"; break;\r\n\r\n case \"red\": this.color = \"#dc3545\"; break;\r\n\r\n case \"currentColor\": this.color = \"currentColor\"; break;\r\n }\r\n\r\n switch (this.svgStrokeWidth) {\r\n case \"super-lighter\": this.strokeWidth = 0.5; break;\r\n\r\n case \"lighter\": this.strokeWidth = 1; break;\r\n\r\n case \"light\": this.strokeWidth = 1.5; break;\r\n\r\n case \"default\": this.strokeWidth = 2; break;\r\n\r\n case \"bold\": this.strokeWidth = 2.5; break;\r\n\r\n case \"bolder\": this.strokeWidth = 3; break\r\n }\r\n }\r\n\r\n // #region PROPERTIES\r\n\r\n // #region PRIVATE\r\n // #endregion PRIVATE\r\n\r\n // #region PUBLIC\r\n @Input({ required: true }) public svgName: 'arrow-up' | 'arrow-down' | 'copy' | 'chevron-left' | 'cloud' | 'duplicate' | 'eye'\r\n | 'eye-off' | 'more-vertical' | 'plus' | 'save' | 'inativar' | 'trash' | 'edit' | 'ativar' | 'search' | 'cancel'\r\n | 'info' | 'rocket' | 'plus-circle' | 'menu' | 'building' | 'star' | 'star-outline' | 'file-download'\r\n | 'file-download-alt' | 'flag' | 'cancel-circle' | 'warning' | 'gavel' | 'chevron-right' | 'chevron-up'\r\n | 'chevron-down' | 'code' | 'square-pencil' | 'document' | 'document-sign' | 'timer-clock' | 'download-doc'\r\n | 'file-alt' | 'file-upload-alt' | 'file-upload' | 'file-blank' | 'refresh' | 'send' | 'arrow-left-right'\r\n | 'exclamation-circle' | 'camera' | 'user' | 'user-iconscout' | 'angry' | 'frown' | 'meh' | 'smile' | 'grin-tongue'\r\n | 'fases' | 'list-ul' | 'list-ol' | 'file-docx' | 'file-pdf' | 'table' | 'dash-circle' | 'file-slash'\r\n | 'file-info-alt' | 'signout' | 'calculator-alt' | 'prancheta-icon' | 'minus' | 'esfera-cheia'\r\n | string\r\n | 'folha' | 'folha-linhas' | 'folha-upload' | 'folha-lapis' | 'folha-mais' | 'folha-check' | 'folha-marcador'\r\n | 'prancheta' | 'folha-dupla' | 'folha-dupla-linhas' | 'seta-baixo' | 'seta-cima' | 'seta-esquerda' | 'seta-direita'\r\n | 'upload' | 'download' | 'login' | 'logout' | 'fechar' | 'mais' | 'check' | 'aspas' | 'cubo' | 'caixa'\r\n | 'engrenagem' | 'editar' | 'escrita-linha' | 'janelas' | 'atencao' | 'pare' | 'cronometro' | 'olho' | 'sino' | 'estrela'\r\n | 'lupa' | 'usuarios' | 'usuario-quadro' | 'adicionar-usuario' | 'foguete' | 'predio' | 'casa' | 'monitor'\r\n | 'monitor-painel' | 'calendario' | 'fluxo' | 'nuvem' | 'aviao-papel' | 'disquete' | 'lixeira' | 'atualizar'\r\n | 'menu-hamburguer' | 'menu-pontos' | 'linkedin' | 'facebook' | 'instagram' | 'auditoria' | 'cifrao' | 'moedas'\r\n | 'reajuste' | 'cimabaixo' | 'toggle-on' | 'toggle-off' | 'folha-pdf' | 'folha-docx' | 'download-docx'\r\n | 'download-pdf' | 'link' | 'iniciar' | 'timeline' | 'acessoexterno' | 'olho-fechado' | 'tabela-fixa'\r\n | 'eventos-tabela' | 'eventos-nao-periodicos' | 'eventos-periodicos' | 'eventos-saude' | 'eventos-de-fechamento'\r\n | 'evento-tabela' | 'testes' | 'log' | 'eventos-p' | 'eventos-np' | 'contraparte' | 'copiar' | 'logs'\r\n | 'ver-assinaturas' | 'configurar-assinaturas' | 'recalcular' | 'estornar' | 'solicitacao' | 'perguntas' | 'centraldeajuda'\r\n | 'sorriso' | 'lampada' | 'sol' | 'seta-grande-cima' | 'seta-grande-baixo' | 'historico' | 'verificado' | 'logo-contratos'\r\n | 'reverter-reajuste' | 'transporte-caminhao' | 'meia-lua' | 'retornar-workflow' | 'ger-nota-fiscal' | 'prod-financeiro-icone'\r\n | 'certificado' | 'relatorio' | 'relatorio-nucleo' | 'relatorio-contrato' | 'relatorio-condicao-pagamento' | 'relatorio-objeto'\r\n | 'relatorio-reajuste' | 'relatorio-vencido-vincendo' | 'alarme' | 'gestor' | 'consulta' | 'cadeado' | 'cadeado-outline' | 'cadeado-semiaberto-outline'\r\n | 'cadeado-aberto-outline' | 'chave' | 'notificacoes';\r\n\r\n @Input() public svgColor: 'white' | 'blue' | 'gray' | 'green' | 'light-blue' | 'yellow' | 'red' | 'currentColor' | string = 'currentColor';\r\n\r\n @Input() public svgFill: string = 'none';\r\n\r\n @Input() public svgSize: 'default' | 'medium-small' | 'small' | number = 'default';\r\n\r\n @Input() public svgStrokeWidth: 'super-lighter' | 'lighter' | 'light' | 'default' | 'bold' | 'bolder' = 'default';\r\n\r\n public size: number;\r\n public color: string;\r\n public strokeWidth: number;\r\n // #endregion PUBLIC\r\n\r\n // #endregion PROPERTIES\r\n\r\n}\r\n","\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'limitTo'\r\n})\r\nexport class LimitToPipe implements PipeTransform {\r\n public transform(array: any[], itemsCount: number, startIndex: number = 0) {\r\n if (!Array.isArray(array) || itemsCount === 0) {\r\n return array;\r\n }\r\n return array.slice(startIndex, startIndex + itemsCount);\r\n }\r\n}\r\n","import {\r\n Component, OnInit, Input,\r\n EventEmitter,\r\n Output,\r\n HostListener,\r\n OnChanges,\r\n SimpleChanges,\r\n ViewChildren,\r\n ElementRef,\r\n QueryList,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FilterByPipe } from './pipes/filter-by.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'app-combobox',\r\n templateUrl: './combobox.component.html',\r\n styleUrls: ['./combobox.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ComboboxComponent),\r\n multi: true,\r\n },\r\n ]\r\n})\r\nexport class ComboboxComponent implements OnInit, OnChanges, AfterViewInit {\r\n\r\n /** value of the dropdown */\r\n @Input() public _value: any;\r\n\r\n /**\r\n * Get the required inputs\r\n */\r\n @Input() public options: any = [];\r\n\r\n /**\r\n * configuration options\r\n */\r\n @Input() public config: any = {};\r\n\r\n /**\r\n * Whether multiple selection or single selection allowed\r\n */\r\n @Input() public multiple = false;\r\n\r\n /**\r\n * Value\r\n */\r\n @Input() public disabled: boolean;\r\n\r\n /**\r\n * change event when value changes to provide user to handle things in change event\r\n */\r\n @Output() public change: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * The search text change event emitter emitted when user type in the search input\r\n */\r\n @Output() public searchChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Event emitted when dropdown is open.\r\n */\r\n @Output() public open: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Event emitted when dropdown is open.\r\n */\r\n @Output() public close: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Toogle the dropdown list\r\n */\r\n public toggleDropdown = false;\r\n\r\n /**\r\n * Available items for selection\r\n */\r\n public availableItems: any = [];\r\n\r\n /**\r\n * Selected Items\r\n */\r\n public selectedItems: any = [];\r\n\r\n /**\r\n * Selection text to be Displayed\r\n */\r\n public selectedDisplayText = '-';\r\n\r\n /**\r\n * Search text\r\n */\r\n public searchText: string | undefined;\r\n\r\n /**\r\n * variable to track if clicked inside or outside of component\r\n */\r\n public clickedInside = false;\r\n\r\n /**\r\n * variable to track keypress event inside and outsid of component\r\n */\r\n public insideKeyPress = false;\r\n\r\n /**\r\n * variable to track the focused item whenuser uses arrow keys to select item\r\n */\r\n public focusedItemIndex: number | null;\r\n\r\n /**\r\n * element to show not found text when not itmes match the search\r\n */\r\n\r\n public showNotFound = false;\r\n /**\r\n * Hold the reference to available items in the list to focus on the item when scrolling\r\n */\r\n @ViewChildren('availableOption')\r\n public availableOptions: QueryList;\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n set value(val) {\r\n this._value = val;\r\n this.onChange(val);\r\n this.onTouched();\r\n }\r\n\r\n constructor(\r\n private cdref: ChangeDetectorRef,\r\n public _elementRef: ElementRef\r\n ) {\r\n this.multiple = false;\r\n }\r\n\r\n public onChange: any = () => {\r\n // empty\r\n }\r\n public onTouched: any = () => {\r\n // empty\r\n }\r\n\r\n /**\r\n * click listener for host inside this component i.e\r\n * if many instances are there, this detects if clicked inside\r\n * this instance\r\n */\r\n @HostListener('click')\r\n public clickInsideComponent() {\r\n this.clickedInside = true;\r\n }\r\n\r\n @HostListener('blur') public blur() {\r\n this.toggleDropdown = false;\r\n }\r\n\r\n @HostListener('focus') public focus() {\r\n /* istanbul ignore else */\r\n if (!this.disabled) {\r\n this.toggleSelectDropdown();\r\n }\r\n }\r\n /**\r\n * click handler on documnent to hide the open dropdown if clicked outside\r\n */\r\n @HostListener('document:click')\r\n public clickOutsideComponent() {\r\n /* istanbul ignore else */\r\n if (!this.clickedInside) {\r\n this.toggleDropdown = false;\r\n this.resetArrowKeyActiveElement();\r\n // clear searh on close\r\n this.searchText = undefined;\r\n this.close.emit();\r\n }\r\n this.clickedInside = false;\r\n }\r\n\r\n /**\r\n * click handler on documnent to hide the open dropdown if clicked outside\r\n */\r\n @HostListener('document:keydown')\r\n public KeyPressOutsideComponent() {\r\n /* istanbul ignore else */\r\n if (!this.insideKeyPress) {\r\n this.toggleDropdown = false;\r\n this.resetArrowKeyActiveElement();\r\n }\r\n this.insideKeyPress = false;\r\n }\r\n /**\r\n * Event handler for key up and down event and enter press for selecting element\r\n */\r\n @HostListener('keydown', ['$event'])\r\n public handleKeyboardEvent($event: KeyboardEvent) {\r\n this.insideKeyPress = true;\r\n /* istanbul ignore else */\r\n if ($event.keyCode === 27 || this.disabled) {\r\n this.toggleDropdown = false;\r\n this.insideKeyPress = false;\r\n return;\r\n }\r\n const avaOpts = this.availableOptions.toArray();\r\n /* istanbul ignore else */\r\n if ($event.keyCode !== 9 && avaOpts.length === 0 && !this.toggleDropdown) {\r\n this.toggleDropdown = true;\r\n }\r\n // Arrow Down\r\n /* istanbul ignore else */\r\n if ($event.keyCode === 40 && avaOpts.length > 0) {\r\n this.onArrowKeyDown();\r\n /* istanbul ignore else */\r\n if (this.focusedItemIndex! >= avaOpts.length) {\r\n this.focusedItemIndex = 0;\r\n }\r\n avaOpts[this.focusedItemIndex!].nativeElement.focus();\r\n $event.preventDefault();\r\n }\r\n // Arrow Up\r\n /* istanbul ignore else */\r\n if ($event.keyCode === 38 && avaOpts.length) {\r\n this.onArrowKeyUp();\r\n /* istanbul ignore else */\r\n if (this.focusedItemIndex! >= avaOpts.length) {\r\n this.focusedItemIndex = avaOpts.length - 1;\r\n }\r\n avaOpts[this.focusedItemIndex!].nativeElement.focus();\r\n $event.preventDefault();\r\n }\r\n // Enter\r\n /* istanbul ignore else */\r\n if ($event.keyCode === 13 && this.focusedItemIndex !== null) {\r\n const filteredItems = new FilterByPipe().transform(\r\n this.availableItems,\r\n this.searchText!,\r\n this.config.searchOnKey\r\n );\r\n this.selectItem(\r\n filteredItems[this.focusedItemIndex],\r\n this.availableItems.indexOf(filteredItems[this.focusedItemIndex])\r\n );\r\n return false;\r\n }\r\n\r\n return $event.key\r\n\r\n }\r\n\r\n /**\r\n * Component onInit\r\n */\r\n public ngOnInit() {\r\n /* istanbul ignore else */\r\n if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {\r\n if (!this.config.isNotSort) this.availableItems = [...this.options.sort(this.config.customComparator)];\r\n else this.availableItems = [...this.options];\r\n this.initDropdownValuesAndOptions();\r\n }\r\n }\r\n\r\n /**\r\n * after view init to subscribe to available option changes\r\n */\r\n public ngAfterViewInit() {\r\n this.availableOptions.changes.subscribe(this.setNotFoundState.bind(this));\r\n }\r\n\r\n public registerOnChange(fn: any) {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: any) {\r\n this.onTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public writeValue(value: any, internal?: boolean) {\r\n if (value) {\r\n if (Array.isArray(value)) {\r\n if (this.multiple) {\r\n this.value = value;\r\n } else if (value.length > 0) {\r\n this.value = value[0];\r\n }\r\n } else {\r\n this.value = value;\r\n }\r\n /* istanbul ignore else */\r\n if (this.selectedItems.length === 0) {\r\n if (Array.isArray(value)) {\r\n this.selectedItems = value;\r\n } else {\r\n this.selectedItems.push(value);\r\n }\r\n this.initDropdownValuesAndOptions();\r\n }\r\n } else {\r\n this.value = [];\r\n /* istanbul ignore else */\r\n if (!internal) {\r\n this.reset();\r\n }\r\n }\r\n /* istanbul ignore else */\r\n if (!internal) {\r\n this.reset();\r\n }\r\n }\r\n\r\n public reset() {\r\n this.selectedItems = [];\r\n if (!this.config.isNotSort) this.availableItems = [...this.options.sort(this.config.customComparator)];\r\n else this.availableItems = [...this.options]\r\n this.initDropdownValuesAndOptions();\r\n }\r\n /**\r\n * function sets whether to show items not found text or not\r\n */\r\n public setNotFoundState() {\r\n if (this.availableOptions.length === 0) {\r\n this.showNotFound = true;\r\n } else {\r\n this.showNotFound = false;\r\n }\r\n this.cdref.detectChanges();\r\n }\r\n /**\r\n * Component onchage i.e when any of the input properties change\r\n */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n this.selectedItems = [];\r\n // this.searchText = null;\r\n this.options = this.options || [];\r\n /* istanbul ignore else */\r\n if (changes['options']) {\r\n if (!this.config.isNotSort) this.availableItems = [...this.options.sort(this.config.customComparator)];\r\n else this.availableItems = [...this.options];\r\n }\r\n /* istanbul ignore else */\r\n if (changes['value']) {\r\n /* istanbul ignore else */\r\n if (\r\n JSON.stringify(changes['value'].currentValue) === JSON.stringify([]) ||\r\n changes['value'].currentValue === '' ||\r\n changes['value'].currentValue === null\r\n ) {\r\n if (!this.config.isNotSort) this.availableItems = [...this.options.sort(this.config.customComparator)];\r\n else this.availableItems = [...this.options];\r\n }\r\n }\r\n this.initDropdownValuesAndOptions();\r\n }\r\n\r\n /**\r\n * Deselct a selected items\r\n * @param item: item to be deselected\r\n * @param index: index of the item\r\n */\r\n public deselectItem(item: any, index: number) {\r\n this.selectedItems.forEach((element: any, i: number) => {\r\n /* istanbul ignore else */\r\n if (item === element) {\r\n this.selectedItems.splice(i, 1);\r\n }\r\n });\r\n let sortedItems = [...this.availableItems];\r\n /* istanbul ignore else */\r\n if (!this.availableItems.includes(item)) {\r\n this.availableItems.push(item);\r\n if (!this.config.isNotSort) sortedItems = this.availableItems.sort(this.config.customComparator);\r\n else sortedItems = this.availableItems;\r\n }\r\n this.selectedItems = [...this.selectedItems];\r\n this.availableItems = [...sortedItems];\r\n /* istanbul ignore else */\r\n if (!Array.isArray(this.value)) {\r\n this.value = [];\r\n }\r\n\r\n if (this.config.defaultSort) {\r\n const set1: Set = new Set(this.selectedItems);\r\n this.selectedItems = (this.config.defaultSort as [number, string][]).sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e))\r\n\r\n const set2: Set = new Set(this.availableItems);\r\n this.availableItems = (this.config.defaultSort as [number, string][]).sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e))\r\n }\r\n\r\n this.valueChanged();\r\n this.resetArrowKeyActiveElement();\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item: item to be selected\r\n * @param index: index of the item\r\n */\r\n public selectItem(item: string, index?: number) {\r\n /* istanbul ignore else */\r\n if (!this.multiple) {\r\n /* istanbul ignore else */\r\n if (this.selectedItems.length > 0) {\r\n this.availableItems.push(this.selectedItems[0]);\r\n }\r\n this.selectedItems = [];\r\n this.toggleDropdown = false;\r\n }\r\n\r\n this.availableItems.forEach((element: any, i: number) => {\r\n /* istanbul ignore else */\r\n if (item === element) {\r\n this.selectedItems.push(item);\r\n this.availableItems.splice(i, 1);\r\n }\r\n });\r\n\r\n /* istanbul ignore else */\r\n if (this.config.clearOnSelection) {\r\n this.searchText = undefined;\r\n }\r\n\r\n this.selectedItems = [...this.selectedItems];\r\n this.availableItems = [...this.availableItems];\r\n\r\n if (!this.config.isNotSort) {\r\n this.selectedItems.sort(this.config.customComparator);\r\n this.availableItems.sort(this.config.customComparator);\r\n }\r\n\r\n if (this.config.defaultSort) {\r\n const set1: Set = new Set(this.selectedItems);\r\n this.selectedItems = (this.config.defaultSort as [number, string][]).sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e))\r\n\r\n const set2: Set = new Set(this.availableItems);\r\n this.availableItems = (this.config.defaultSort as [number, string][]).sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e))\r\n }\r\n\r\n // this.searchText = null;\r\n this.valueChanged();\r\n this.resetArrowKeyActiveElement();\r\n }\r\n\r\n /**\r\n * When selected items changes trigger the chaange back to parent\r\n */\r\n public valueChanged() {\r\n this.writeValue(this.selectedItems, true);\r\n // this.valueChange.emit(this.value);\r\n this.change.emit({ value: this.value });\r\n this.setSelectedDisplayText();\r\n }\r\n\r\n /**\r\n * Toggle the dropdownlist on/off\r\n */\r\n public toggleSelectDropdown() {\r\n this.toggleDropdown = !this.toggleDropdown;\r\n if (this.toggleDropdown) {\r\n this.open.emit();\r\n } else {\r\n this.searchText = undefined;\r\n this.close.emit();\r\n }\r\n this.resetArrowKeyActiveElement();\r\n }\r\n\r\n /**\r\n * The change handler for search text\r\n */\r\n public searchTextChanged() {\r\n this.searchChange.emit(this.searchText);\r\n }\r\n\r\n public changeSearchText($event: any) {\r\n $event.stopPropagation();\r\n }\r\n\r\n /**\r\n * initialize the config and other properties\r\n */\r\n private initDropdownValuesAndOptions() {\r\n const config: any = {\r\n displayKey: 'description',\r\n height: 'auto',\r\n search: false,\r\n placeholder: '-',\r\n searchPlaceholder: 'Pesquisar ',\r\n limitTo: 0,\r\n customComparator: undefined,\r\n noResultsFound: 'Nada encontrado!',\r\n moreText: 'Selecionados',\r\n searchOnKey: null,\r\n clearOnSelection: false,\r\n inputDirection: 'ltr',\r\n };\r\n /* istanbul ignore else */\r\n if (this.config === 'undefined' || Object.keys(this.config).length === 0) {\r\n this.config = { ...config };\r\n }\r\n for (const key of Object.keys(config)) {\r\n this.config[key] = this.config[key] ? this.config[key] : config[key];\r\n }\r\n this.config = { ...this.config };\r\n // Adding placeholder in config as default param\r\n this.selectedDisplayText = this.config['placeholder'];\r\n /* istanbul ignore else */\r\n if (this.value !== '' && typeof this.value !== 'undefined') {\r\n if (Array.isArray(this.value)) {\r\n this.selectedItems = this.value;\r\n } else if (this.value !== '' && this.value !== null) {\r\n this.selectedItems[0] = this.value;\r\n } else {\r\n this.selectedItems = [];\r\n this.value = [];\r\n }\r\n\r\n this.selectedItems.forEach((item: any) => {\r\n const ind = this.availableItems.findIndex(\r\n (aItem: any) => JSON.stringify(item) === JSON.stringify(aItem)\r\n );\r\n if (ind !== -1) {\r\n this.availableItems.splice(ind, 1);\r\n }\r\n });\r\n }\r\n this.setSelectedDisplayText();\r\n }\r\n\r\n /**\r\n * set the text to be displayed\r\n */\r\n private setSelectedDisplayText() {\r\n let text: string = this.selectedItems[0];\r\n /* istanbul ignore else */\r\n if (typeof this.selectedItems[0] === 'object') {\r\n text = this.config.displayFn\r\n ? this.config.displayFn(this.selectedItems[0])\r\n : this.selectedItems[0][this.config.displayKey];\r\n }\r\n if (this.multiple && this.selectedItems.length > 0) {\r\n this.selectedDisplayText =\r\n this.selectedItems.length === 1\r\n ? text\r\n : text +\r\n ` + ${this.selectedItems.length - 1} ${this.config.moreText}`;\r\n } else {\r\n this.selectedDisplayText =\r\n this.selectedItems.length === 0 ? this.config.placeholder : text;\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for arrow key up event thats focuses on a item\r\n */\r\n private onArrowKeyUp() {\r\n /* istanbul ignore else */\r\n if (this.focusedItemIndex === 0) {\r\n this.focusedItemIndex = this.availableItems.length - 1;\r\n return;\r\n }\r\n /* istanbul ignore else */\r\n if (this.onArrowKey()) {\r\n this.focusedItemIndex!;\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for arrow key down event thats focuses on a item\r\n */\r\n private onArrowKeyDown() {\r\n /* istanbul ignore else */\r\n if (this.focusedItemIndex === this.availableItems.length - 1) {\r\n this.focusedItemIndex = 0;\r\n return;\r\n }\r\n /* istanbul ignore else */\r\n if (this.onArrowKey()) {\r\n this.focusedItemIndex!++;\r\n }\r\n }\r\n\r\n private onArrowKey() {\r\n /* istanbul ignore else */\r\n if (this.focusedItemIndex === null) {\r\n this.focusedItemIndex = 0;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * will reset the element that is marked active using arrow keys\r\n */\r\n private resetArrowKeyActiveElement() {\r\n this.focusedItemIndex = null;\r\n }\r\n}\r\n","
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
      \r\n
    • \r\n \r\n
      {{\r\n config.displayFn\r\n ? config.displayFn(selected)\r\n : selected[config.displayKey] || selected\r\n }}
      \r\n
    • \r\n
    \r\n
    0 && availableItems.length > 0\" />\r\n
      \r\n
    • \r\n \r\n
      \r\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\r\n
      \r\n
    • \r\n
    • {{ config.noResultsFound }}
    • \r\n
    \r\n
    \r\n
    \r\n","import { Component, Input, OnInit, ElementRef, Renderer2 } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-field-control-error',\r\n templateUrl: './field-control-error.component.html',\r\n styleUrls: ['./field-control-error.component.css']\r\n})\r\nexport class FieldControlErrorComponent implements OnInit {\r\n @Input() showError: boolean;\r\n @Input() errorMessage: string;\r\n\r\n constructor(private renderer: Renderer2, private elementRef: ElementRef) { }\r\n\r\n ngOnInit(): void {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', '100%');\r\n }\r\n\r\n}\r\n","
    \r\n {{ errorMessage }}\r\n
    ","import { AbstractControl, NgControl, UntypedFormGroup, UntypedFormArray, FormGroup } from '@angular/forms';\r\n\r\n\r\n/**\r\n * @summary Contém diversos métodos de utilidade para formulários\r\n */\r\nexport class FormUtils {\r\n\r\n /** Verifica se um campo é inválido (Template Driven) */\r\n static isInvalidFieldTemplate(control: NgControl): boolean {\r\n const ret: any = !control.valid && (control.dirty || control.touched);\r\n \r\n return (ret ? ret : false)\r\n }\r\n \r\n /** Verifica se um campo é inválido (Data Driven) */\r\n static isInvalidField(control: AbstractControl | null): boolean {\r\n return (control ? !control.valid && (control.dirty || control.touched) : false);\r\n }\r\n\r\n /** Verifica se um campo é inválido ou se possui algum erro customizado (Data Driven) */\r\n static isInvalidFieldError(control: AbstractControl | null): boolean {\r\n if (control) {\r\n if (!control.valid && (control.dirty || control.touched)) { return true }\r\n else { return false }\r\n }\r\n else { return false }\r\n }\r\n\r\n /** Valida todos os campos do formulário */\r\n static validateFields(formGroup: UntypedFormGroup | UntypedFormArray): void {\r\n Object.keys(formGroup.controls).forEach(field => {\r\n const control = formGroup.get(field);\r\n \r\n let currentValue = control?.value;\r\n\r\n control?.reset();\r\n\r\n control?.markAsDirty();\r\n control?.markAsTouched();\r\n\r\n control?.setValue(currentValue);\r\n \r\n if (control instanceof UntypedFormGroup || control instanceof UntypedFormArray) {\r\n this.validateFields(control);\r\n }\r\n \r\n });\r\n \r\n } \r\n \r\n /** Obtém a mensagem de erro conforme o validador utilizado */\r\n static getErrorMessage(fieldName: string, validatorName: string, validatorValue?: any, customErrorMessage?: string): string {\r\n const config : any = {\r\n 'required': `Este campo é obrigatório.`,\r\n 'minlength': `Este campo deve possuir no mínimo ${validatorValue.requiredLength} caracteres.`,\r\n 'maxlength': `Este campo deve possuir no máximo ${validatorValue.requiredLength} caracteres.`,\r\n 'min': `Este campo deve ser no mínimo ${validatorValue.min}.`,\r\n 'max': `Este campo deve ser no máximo ${validatorValue.max}.`,\r\n 'cpcnpjInvalid': `Este ${fieldName} está inválido.`,\r\n 'cpcnpjInvalidDigit': `Este ${fieldName} tem um dígito inválido.`,\r\n 'incorrect': `Este campo está inválido.`,\r\n 'email': `Este e-mail está inválido.`\r\n };\r\n\r\n return (customErrorMessage\r\n ? customErrorMessage\r\n : config[validatorName]\r\n ? config[validatorName]\r\n : `Este validador - ${validatorName} - não foi implementado`);\r\n }\r\n\r\n\r\n\r\n /**\r\n * @summary Mapeia os valores de um formulário reativo para um objeto de modelo.\r\n *\r\n * @description\r\n * O método `mapFormToModel` recebe um objeto de modelo e um `FormGroup` do Angular, \r\n * e retorna um novo objeto que combina as propriedades do modelo original com os valores \r\n * atuais do formulário. Este método é útil para atualizar dinamicamente as propriedades \r\n * de um modelo com base nos valores inseridos pelo usuário em um formulário.\r\n * \r\n * Se o objeto `record` ou o `formGroup` forem nulos ou indefinidos, o método retornará `null`.\r\n * Caso contrário, o método retorna um novo objeto que inclui todas as propriedades \r\n * do objeto original, sobrescrevendo-as com os valores atuais do formulário, se disponíveis.\r\n *\r\n * @param {object} record - O objeto de modelo original que será atualizado com os valores do formulário.\r\n * @param {FormGroup} formGroup - O `FormGroup` contendo os valores inseridos pelo usuário.\r\n * @returns {object | null} - Um novo objeto combinando o modelo original e os valores do formulário, ou `null` se `record` ou `formGroup` forem nulos ou indefinidos.\r\n *\r\n * @example\r\n * // Suponha que você tenha um objeto de modelo `person` e um `FormGroup` chamado `personForm`.\r\n * const person = {\r\n * name: 'John Doe',\r\n * age: 30,\r\n * email: 'john.doe@example.com'\r\n * };\r\n * \r\n * const personForm: FormGroup = this.formBuilder.group({\r\n * name: ['Jane Doe'],\r\n * age: [25],\r\n * email: ['jane.doe@example.com']\r\n * });\r\n * \r\n * const updatedPerson = this.mapFormToModel(person, personForm);\r\n * // `updatedPerson` agora contém:\r\n * // {\r\n * // name: 'Jane Doe',\r\n * // age: 25,\r\n * // email: 'jane.doe@example.com'\r\n * // }\r\n */\r\n static mapFormToModel(record: object, formGroup: FormGroup): object | null {\r\n if ((record === null || record === undefined) || (formGroup === null || formGroup === undefined)) { return null; }\r\n \r\n return {\r\n ...record,\r\n ...formGroup.value\r\n };\r\n }\r\n\r\n}\r\n","import { AbstractControl, FormControl } from '@angular/forms';\r\nimport { Component, Input, OnInit, ElementRef, Renderer2 } from '@angular/core';\r\n\r\nimport { FormUtils } from '../../utils/form-utils';\r\n\r\n@Component({\r\n selector: 'app-field-error-message',\r\n templateUrl: './field-error-message.component.html',\r\n styleUrls: ['./field-error-message.component.css']\r\n})\r\nexport class FieldErrorMessageComponent implements OnInit {\r\n @Input('customMessage') public customErrorMessage: string;\r\n @Input() control: AbstractControl | null;\r\n @Input() label: string;\r\n\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) { }\r\n\r\n\r\n public get errorMessage() {\r\n for (let propertyName in this.control?.errors) {\r\n if (this.control?.errors.hasOwnProperty(propertyName) &&\r\n (this.control?.dirty || this.control?.touched)) {\r\n return FormUtils.getErrorMessage(this.label, propertyName, this.control?.errors[propertyName], this.customErrorMessage);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n \r\n\r\n ngOnInit(): void {\r\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', '100%');\r\n }\r\n\r\n}\r\n","@if (customErrorMessage && customErrorMessage != \"\") {\r\n
    {{ customErrorMessage }}
    \r\n} @else {\r\n
    {{ errorMessage }}
    \r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loading-button',\r\n templateUrl: './loading-button.component.html',\r\n styleUrls: ['./loading-button.component.css']\r\n})\r\nexport class LoadingButtonComponent {\r\n @Input() isLoading: boolean;\r\n\r\n constructor() { }\r\n\r\n}\r\n","","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loading',\r\n templateUrl: './loading.component.html',\r\n styleUrls: ['./loading.component.css']\r\n})\r\nexport class LoadingComponent {\r\n\r\n constructor() { }\r\n\r\n}\r\n","\r\n
    \r\n \"Carregando\"\r\n
    \r\n","import { TreeItem } from '../models/tree-item';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'TreeFilter',\r\n pure: true,\r\n})\r\n\r\nexport class SearchTreePipe implements PipeTransform {\r\n\r\n public transform(items: TreeItem[], search: string): TreeItem[] {\r\n return items.filter(node => node.label.toLocaleLowerCase().includes(search.toLocaleLowerCase()));\r\n }\r\n\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { TreeItem } from \"./models/tree-item\";\r\n\r\n@Component({\r\n selector: \"app-tree\",\r\n templateUrl: \"./tree.component.html\",\r\n styleUrls: [\"./tree.component.scss\"]\r\n})\r\nexport class TreeComponent implements OnInit {\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PUBLIC\r\n @Input() public items: TreeItem[] | any = [];\r\n @Input() public checkbox: boolean = false;\r\n @Input() public filter: boolean = false;\r\n\r\n @Output() public onSelect: EventEmitter = new EventEmitter();\r\n @Output() public onEvent: EventEmitter = new EventEmitter();\r\n\r\n public checked = (item: TreeItem) => item.is_selected == true;\r\n\r\n public search: string = \"\";\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n // #region ==========> PUBLIC METHODS <==========\r\n public onExpand(item: TreeItem): void {\r\n if (item.expanded) {\r\n item.expanded = !item.expanded;\r\n return;\r\n } else {\r\n if (item.children) {\r\n if (item.children.length > 0) {\r\n item.expanded = true;\r\n } else {\r\n item.expanded = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public onCheck(items: TreeItem[], item: TreeItem): void {\r\n if (item.has_children) {\r\n item.children.forEach((firstNode) => {\r\n if (firstNode.is_selected != item.is_selected) {\r\n firstNode.is_selected = !firstNode.is_selected;\r\n }\r\n if (firstNode.has_children) {\r\n firstNode.children.forEach((secondNode) => {\r\n if (secondNode.is_selected != firstNode.is_selected) {\r\n secondNode.is_selected = !secondNode.is_selected;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (this.indeterminateCheck(items)) {\r\n this.onSelect.emit(true);\r\n } else if (!this.indeterminateCheck(items)) {\r\n this.onSelect.emit(false);\r\n }\r\n }\r\n\r\n public onCheckEvent(items: TreeItem[]) {\r\n if (this.indeterminateCheck(items)) {\r\n this.onEvent.emit(true);\r\n } else {\r\n this.onEvent.emit(false);\r\n }\r\n }\r\n // #endregion ==========> PUBLIC METHODS <==========\r\n\r\n // #region ==========> PRIVATE METHODS <==========\r\n\r\n private indeterminateCheck(list: TreeItem[]): boolean {\r\n return list.some(this.checked);\r\n }\r\n\r\n // private allCheck(list: TreeItem[]): boolean {\r\n // return list.every(this.checked);\r\n // }\r\n // #endregion ==========> PRIVATE METHODS <==========\r\n}\r\n","\r\n\r\n \r\n\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n
      \r\n \r\n
      \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n \r\n
        \r\n \r\n
      \r\n
      \r\n
    ","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * @description\r\n * Transforma um Blob ou MediaSource em uma URL para ser utilizada em imagens.\r\n * \r\n * Ela aceita valors não definidos em casos onde o valor vai ser trazido em outro momento.\r\n */\r\n@Pipe(\r\n { name: 'toUrl' }\r\n)\r\nexport class ToUrlPipe implements PipeTransform {\r\n\r\n constructor(\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n transform(value: Blob | MediaSource | undefined, ...args: unknown[]): SafeUrl {\r\n\r\n if (value) {\r\n let url: string = URL.createObjectURL(value);\r\n // Devemos dizer que a URL passada é segura e pode ser usada.\r\n // Se não limpada a url vai estar da seguinte forma: [unsafe][blob] ao invés de [blob]\r\n let safeUrl: SafeUrl = this.sanitizer.bypassSecurityTrustUrl(url);\r\n return safeUrl;\r\n }\r\n\r\n // Se não estiver definida, retorna nada.\r\n return \"\";\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'cpfCnpj'\r\n})\r\nexport class CpfCnpjPipe implements PipeTransform {\r\n\r\n public transform(value: string): string {\r\n\r\n switch (value.length) {\r\n case 11: return `${value.substring(0, 3)}.${value.substring(3, 6)}.${value.substring(6, 9)}-${value.substring(9)}`;\r\n\r\n case 14: return `${value.substring(0, 2)}.${value.substring(2, 5)}.${value.substring(5, 8)}/${value.substring(8, 12)}-${value.substring(12)}`;\r\n\r\n default: return value;\r\n }\r\n }\r\n}\r\n","import {\r\n\tDirective,\r\n\tElementRef,\r\n\tEventEmitter,\r\n\tInject,\r\n\tInput,\r\n\tNgZone,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n\tSimpleChanges,\r\n } from '@angular/core';\r\n import {DOCUMENT} from '@angular/common';\r\n \r\n @Directive({selector: '[clickOutside]'})\r\n export class ClickOutsideDirective implements OnInit, OnChanges, OnDestroy {\r\n \r\n\t@Input() clickOutsideEnabled = true;\r\n \r\n\t@Input() attachOutsideOnClick = false;\r\n\t@Input() delayClickOutsideInit = false;\r\n\t@Input() emitOnBlur = false;\r\n \r\n\t@Input() exclude = '';\r\n\t@Input() excludeBeforeClick = false;\r\n \r\n\t@Input() clickOutsideEvents = '';\r\n \r\n\t@Output() clickOutside: EventEmitter = new EventEmitter();\r\n \r\n\tprivate _nodesExcluded: Array = [];\r\n\tprivate _events: Array = ['click'];\r\n \r\n\tconstructor(\r\n\t private _el: ElementRef,\r\n\t private _ngZone: NgZone,\r\n\t @Inject(DOCUMENT) private document: Document) {\r\n\t this._initOnClickBody = this._initOnClickBody.bind(this);\r\n\t this._onClickBody = this._onClickBody.bind(this);\r\n\t this._onWindowBlur = this._onWindowBlur.bind(this);\r\n\t}\r\n \r\n\tngOnInit() {\r\n\t this._init();\r\n\t}\r\n \r\n\tngOnDestroy() {\r\n\t this._removeClickOutsideListener();\r\n\t this._removeAttachOutsideOnClickListener();\r\n\t this._removeWindowBlurListener();\r\n\t}\r\n \r\n\tngOnChanges(changes: SimpleChanges) {\r\n\t if (changes['attachOutsideOnClick'] || changes['exclude'] || changes['emitOnBlur']) {\r\n\t this._init();\r\n\t }\r\n\t}\r\n \r\n\tprivate _init() {\r\n\t if (this.clickOutsideEvents !== '') {\r\n\t this._events = this.clickOutsideEvents.split(',').map(e => e.trim());\r\n\t }\r\n \r\n\t this._excludeCheck();\r\n \r\n\t if (this.attachOutsideOnClick) {\r\n\t this._initAttachOutsideOnClickListener();\r\n\t } else {\r\n\t this._initOnClickBody();\r\n\t }\r\n \r\n\t if (this.emitOnBlur) {\r\n\t this._initWindowBlurListener();\r\n\t }\r\n\t}\r\n \r\n\tprivate _initOnClickBody() {\r\n\t if (this.delayClickOutsideInit) {\r\n\t setTimeout(this._initClickOutsideListener.bind(this));\r\n\t } else {\r\n\t this._initClickOutsideListener();\r\n\t }\r\n\t}\r\n \r\n\tprivate _excludeCheck() {\r\n\t if (this.exclude) {\r\n\t try {\r\n\t\tconst nodes = Array.from(this.document.querySelectorAll(this.exclude)) as Array;\r\n\t\tif (nodes) {\r\n\t\t this._nodesExcluded = nodes;\r\n\t\t}\r\n\t } catch (err) {\r\n\t\tconsole.error('[ng-click-outside] Check your exclude selector syntax.', err);\r\n\t }\r\n\t }\r\n\t}\r\n \r\n\tprivate _onClickBody(ev: Event) {\r\n\t if (!this.clickOutsideEnabled) {\r\n\t return;\r\n\t }\r\n \r\n\t if (this.excludeBeforeClick) {\r\n\t this._excludeCheck();\r\n\t }\r\n \r\n\t if (!this._el.nativeElement.contains(ev.target) && !this._shouldExclude(ev.target)) {\r\n\t this._emit(ev);\r\n \r\n\t if (this.attachOutsideOnClick) {\r\n\t\tthis._removeClickOutsideListener();\r\n\t }\r\n\t }\r\n\t}\r\n \r\n\t/**\r\n\t * Resolves problem with outside click on iframe\r\n\t * @see https://github.com/arkon/ng-click-outside/issues/32\r\n\t */\r\n\tprivate _onWindowBlur(ev: Event) {\r\n\t setTimeout(() => {\r\n\t if (!this.document.hidden) {\r\n\t\tthis._emit(ev);\r\n\t }\r\n\t });\r\n\t}\r\n \r\n\tprivate _emit(ev: Event) {\r\n\t if (!this.clickOutsideEnabled) {\r\n\t return;\r\n\t }\r\n \r\n\t this._ngZone.run(() => this.clickOutside.emit(ev));\r\n\t}\r\n \r\n\tprivate _shouldExclude(target: any): boolean {\r\n\t for (let excludedNode of this._nodesExcluded) {\r\n\t if (excludedNode.contains(target)) {\r\n\t\treturn true;\r\n\t }\r\n\t }\r\n \r\n\t return false;\r\n\t}\r\n \r\n\tprivate _initClickOutsideListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t this._events.forEach(e => this.document.addEventListener(e, this._onClickBody));\r\n\t });\r\n\t}\r\n \r\n\tprivate _removeClickOutsideListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t this._events.forEach(e => this.document.removeEventListener(e, this._onClickBody));\r\n\t });\r\n\t}\r\n \r\n\tprivate _initAttachOutsideOnClickListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t this._events.forEach(e => this._el.nativeElement.addEventListener(e, this._initOnClickBody));\r\n\t });\r\n\t}\r\n \r\n\tprivate _removeAttachOutsideOnClickListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t this._events.forEach(e => this._el.nativeElement.removeEventListener(e, this._initOnClickBody));\r\n\t });\r\n\t}\r\n \r\n\tprivate _initWindowBlurListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t window.addEventListener('blur', this._onWindowBlur);\r\n\t });\r\n\t}\r\n \r\n\tprivate _removeWindowBlurListener() {\r\n\t this._ngZone.runOutsideAngular(() => {\r\n\t window.removeEventListener('blur', this._onWindowBlur);\r\n\t });\r\n\t}\r\n \r\n }","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-ordering',\r\n templateUrl: './ordering.component.html',\r\n styleUrls: ['./ordering.component.scss']\r\n})\r\nexport class OrderingComponent implements OnInit {\r\n\r\n @Input() isColumnClicked: boolean = false;\r\n // Direção atual da ordenação ('asc', 'desc' ou vazio)\r\n @Input() sortDirection: string = '';\r\n\r\n // Atributos de ordenação\r\n @Input() sortAttributes: string | string[] = [];\r\n\r\n // Evento emitido quando a direção de ordenação é alterada\r\n @Output() sortDirectionChange = new EventEmitter();\r\n\r\n // Evento emitido quando ocorre uma mudança na ordenação\r\n @Output() sortChange = new EventEmitter<{ direction: string, column: string | string[] }>();\r\n\r\n // Função chamada quando o botão de ordenação é clicado\r\n sort() {\r\n // Inverte a direção de ordenação atual\r\n if (this.sortDirection === 'asc') {\r\n this.sortDirection = 'desc';\r\n } else {\r\n this.sortDirection = 'asc';\r\n }\r\n\r\n // Emite o evento com a nova direção de ordenação\r\n this.sortDirectionChange.emit(this.sortDirection);\r\n\r\n // Emite o evento de mudança na ordenação com a direção e os atributos de ordenação\r\n this.sortChange.emit({ direction: this.sortDirection, column: this.sortAttributes });\r\n }\r\n\r\n // Obtém a cor do ícone com base na direção de ordenação atual\r\n getSvgColor(): string {\r\n return this.sortDirection === 'asc' ? 'blue' : 'lightgray';\r\n }\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n // Define a direção de ordenação inicial como vazio\r\n this.sortDirection = '';\r\n }\r\n}\r\n","\r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n\r\n","import { Directive, ElementRef, Input, OnChanges, OnInit, Renderer2, SimpleChanges } from \"@angular/core\";\r\n\r\n/**\r\n * Diretiva que adiciona um asterisco vermelho (*) ao lado de um elemento