ngx-sp-infra 2.0.18-test → 2.0.20-test

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -89,11 +89,11 @@ export class TableComponent {
89
89
  }
90
90
  }
91
91
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", showCounter: "showCounter", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
92
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", showCounter: "showCounter", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span *ngIf=\"showCounter\" class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
93
93
  }
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
95
95
  type: Component,
96
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
96
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span *ngIf=\"showCounter\" class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
97
97
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
98
98
  type: Input
99
99
  }], recordsList: [{
@@ -121,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
121
121
  }], pageChange: [{
122
122
  type: Output
123
123
  }] } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRTNJOzs7Ozs7Ozs7Ozs7RUFZRTtBQU1GLE1BQU0sT0FBTyxjQUFjO0lBMEN6QiwwSEFBMEg7SUFDMUgsSUFDVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFXLFlBQVksQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLG9CQUFvQixDQUFDO0lBQ3JELENBQUM7SUFrQkQsb0JBQW9CO0lBRXBCLGtEQUFrRDtJQUdsRCxnREFBZ0Q7SUFDaEQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqRTFDLHFCQUFxQjtRQUVyQixpQkFBaUI7UUFFakI7MkJBQ21CO1FBQ0gsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFVOUM7NEJBQ29CO1FBQ08sd0JBQW1CLEdBQTJDLEtBQUssQ0FBQztRQWEvRjs7VUFFRTtRQUMyQixnQkFBVyxHQUFZLElBQUksQ0FBQztRQVV6RCxxRUFBcUU7UUFDcEQsdUJBQWtCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFdkYsaURBQWlEO1FBQ2hDLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcvRSw0RkFBNEY7UUFDckYsWUFBTyxHQUFXLENBQUMs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Y3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBUYWJlbGEgQ3VzdG9taXrDoXZlbFxuICpcbiAqIE8gYFRhYmxlQ29tcG9uZW50YCDDqSB1bSBjb21wb25lbnRlIEFuZ3VsYXIgcHJvamV0YWRvIHBhcmEgZXhpYmlyIHVtYSB0YWJlbGEgY3VzdG9taXrDoXZlbFxuICogY29tIHN1cG9ydGUgYSBwYWdpbmHDp8Ojby4gRWxlIHBlcm1pdGUgYSBjb25maWd1cmHDp8OjbyBkZSBjYWJlw6dhbGhvcyBkZSBjb2x1bmFzLCBwb3NpY2lvbmFtZW50b1xuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxuICogcGFyYSBhanVzdGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzIGUgZW1pdGluZG8gZXZlbnRvcyBwYXJhIHF1ZSBvIGNvbXBvbmVudGUgcGFpIHBvc3NhIHJlYWdpciBhXG4gKiBtdWRhbsOnYXMgbmEgcMOhZ2luYSBvdSBubyBuw7ptZXJvIGRlIGl0ZW5zIGV4aWJpZG9zLlxuICpcbiAqIEBzZWxlY3RvciBsaWItdGFibGVcbiAqIEB0ZW1wbGF0ZVVybCAuL3RhYmxlLmNvbXBvbmVudC5odG1sXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uIFBSSVZBVEVcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxuXG4gIC8vICNyZWdpb24gUFVCTElDXG5cbiAgLyoqIERldGVybWluYSBzZSBhIHRhYmVsYSBkZXZlIHVzYXIgcGFnaW5hw6fDo28uXG4gICAqIEBkZWZhdWx0IHRydWUgKi9cbiAgQElucHV0KCkgcHVibGljIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBMaXN0YSBkZSByZWdpc3Ryb3MgYSBzZXJlbSBleGliaWRvcyBuYSB0YWJlbGEuXG4gICAqIEByZXF1aXJlZCAqL1xuICBASW5wdXQoeyBhbGlhczogJ2xpc3QnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBPcMOnw7VlcyBkZSBjb250YWdlbSBkZSBpdGVucyBwb3IgcMOhZ2luYSBkaXNwb27DrXZlaXMgcGFyYSBvIHVzdcOhcmlvLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KCdjb3VudHMnKSBwdWJsaWMgY291bnRPcHRpb25zOiBudW1iZXJbXTtcblxuICAvKiogUG9zaWNpb25hbWVudG8gZG9zIGNvbnRyb2xlcyBkZSBwYWdpbmHDp8Ojby5cbiAgICogQGRlZmF1bHQgJ2VuZCcgKi9cbiAgQElucHV0KCdwbGFjZW1lbnQnKSBwdWJsaWMgcGFnaW5hdGlvblBsYWNlbWVudDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnYmV0d2VlbicgPSAnZW5kJztcblxuICAvKiogTGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYSwgaW5jbHVpbmRvIG8gbm9tZSwgYSBsYXJndXJhIGRhIGNvbHVuYSBlIGNsYXNzZXMgY3VzdG9taXphZGFzLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdoZWFkZXJzJywgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGhlYWRlcnNMaXN0OiB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbDogbnVtYmVyLFxuICAgIGN1c3RvbUNsYXNzZXM/OiBzdHJpbmdcbiAgfVtdO1xuXG4gIC8qKiBNZW5zYWdlbSBjdXN0b21pemFkYSBwYXJhIGxpc3RhIHZhemlhICovXG4gIEBJbnB1dCgnZW1wdHlMaXN0TWVzc2FnZScpIHB1YmxpYyBlbXB0eUxpc3RNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKiBJbmZvcm1hIHNlIG8gY291bnRlciBkZSByZWdpc3Ryb3MgZGV2ZSBhcGFyZWNlciBvdSBuw6NvLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIEBJbnB1dCgnc2hvd0NvdW50ZXInKSBwdWJsaWMgc2hvd0NvdW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBJbmZvcm1hIHVtIElEIHBhcmEgYSBwYWdpbmHDp8OjbyBkYSB0YWJlbGEgZXNwZWPDrWZpY2EuIERldmUgc2VyIHV0aWxpemFkYSBlbSBjYXNvIGRlIG3Dumx0aXBsYXMgdGFiZWxhcyBuYSBtZXNtYSB0ZWxhLiAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbklEKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uSUQgPSB2YWx1ZSB8fCAnbGliVGFibGVQYWdpbmF0aW9uJztcbiAgfVxuXG5cbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIG7Dum1lcm8gZGUgaXRlbnMgcG9yIHDDoWdpbmEgw6kgYWx0ZXJhZG8uICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBww6FnaW5hIMOpIGFsdGVyYWRhLiAqL1xuICBAT3V0cHV0KCkgcHVibGljIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cblxuICAvKiogQ29udGFkb3IgZGUgcmVnaXN0cm9zIChwb2RlIHNlciB1c2FkbyBwYXJhIGZ1dHVyYXMgaW1wbGVtZW50YcOnw7VlcyBkZSBsw7NnaWNhIGludGVybmEpLiAqL1xuICBwdWJsaWMgY291bnRlcjogbnVtYmVyID0gMDtcblxuICAvKiogUMOhZ2luYSBhdHVhbCBkYSB0YWJlbGEuICovXG5cdHB1YmxpYyBwYWdlOiBudW1iZXIgPSAxO1xuXG4gIC8qKiBOw7ptZXJvIGRlIGl0ZW5zIGEgc2VyZW0gZXhpYmlkb3MgcG9yIHDDoWdpbmEuICovXG5cdHB1YmxpYyBpdGVtc1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BSSUVEQURFUyA8PT09PT09PT09PVxuXG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0KSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnMgPyB0aGlzLmNvdW50T3B0aW9uc1swXSA6IHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoIH1cbiAgICBlbHNlIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9uc1swXSA/PyAxMCB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cbiAgfVxuXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXG4gICAqIEBwYXJhbSBjaGFuZ2VzIE9iamV0byBxdWUgY29udMOpbSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUuICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uKHRoaXMucmVjb3Jkc0xpc3QgPz8gW10pO1xuXG4gICAgICBsZXQgbWF4Q29sdW1ucyA9IHRoaXMuaGVhZGVyc0xpc3QucmVkdWNlKChuLCB7Y29sfSkgPT4gbiArIGNvbCwgMCk7XG4gICAgICBpZiAobWF4Q29sdW1ucyA+PSAxMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHNvbWEgZGUgbGFyZ3VyYSAoY2xhc3NlIGNvbSBwcmVmaXhvICdjb2wtJykgZGUgdG9kYXMgYXMgY29sdW5hcyBuw6NvIHBvZGUgc2VyIG1haW9yIHF1ZSAxMi5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XG5cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxuXG4gIC8qKiBNb2RpZmljYSBhIHF1YW50aWRhZGUgZGUgaXRlbnMgYSBzZXIgbW9zdHJhZGEgbmEgbGlzdGEuXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xuICBwdWJsaWMgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuaXRlbXNQZXJQYWdlKTtcbiAgfVxuXG4gIC8qKiBSZXNldGEgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSBjb20gYmFzZSBubyBuw7ptZXJvIGF0dWFsIGRlIHJlZ2lzdHJvcy5cbiAgICogQHBhcmFtIGxpc3QgTGlzdGEgZGUgcmVnaXN0cm9zIHBhcmEgcmVzZXRhciBhIHBhZ2luYcOnw6NvLiAqL1xuICBwdWJsaWMgcmVzZXRQYWdpbmF0aW9uKGxpc3Q6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSBzdGFydEluZGV4KSB7XG4gICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XG5cbn1cbiIsIkBpZiAocmVjb3Jkc0xpc3QpIHtcbiAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICA8IS0tIEV4aWJlIG8gbsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZSBvIHRvdGFsIGRlIHJlZ2lzdHJvcyAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPiBFeGliaW5kbyB7eyBpdGVtc1BlclBhZ2UgPD0gcmVjb3Jkc0xpc3QubGVuZ3RoID8gaXRlbXNQZXJQYWdlIDogcmVjb3Jkc0xpc3QubGVuZ3RoIH19IGRlIHt7IHJlY29yZHNMaXN0Lmxlbmd0aCB9fSByZWdpc3Ryb3MgPC9zcGFuPlxuICAgICAgXG4gICAgICA8IS0tIENvbnRhaW5lciBkYSB0YWJlbGEgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWJvdHRvbS0wIHJvdW5kZWQtYm90dG9tIHJvdW5kZWRcIj5cbiAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIGJvcmRlciBtYi0wXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8IS0tIEl0ZXJhIHNvYnJlIGEgbGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBjcmlhciBhcyBjb2x1bmFzIC0tPlxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgaGVhZGVyc0xpc3RcIiBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsaWduLW1pZGRsZSB0ZXh0LWRhcmstZ3JleSB7eyBoZWFkZXIuY29sID4gMCA/ICdjb2wtJytoZWFkZXIuY29sIDogJ2NvbCcgfX0ge3sgaGVhZGVyLmN1c3RvbUNsYXNzZXMgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLWxpZ2h0IGZhZGUtaW4tcm93XCI+XG4gICAgICAgICAgICAgICBAaWYgKHJlY29yZHNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGXDumRvIGRhcyBsaW5oYXMgZGEgdGFiZWxhIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lubmVyUm93c11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIE1lbnNhZ2VtIGRlIGF1c8OqbmNpYSBkZSByZWdpc3Ryb3MgLS0+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEyXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbGlnaHQgZnN0LWl0YWxpYyB0ZXh0LWNlbnRlclwiPiB7eyBlbXB0eUxpc3RNZXNzYWdlID8gZW1wdHlMaXN0TWVzc2FnZSA6IFwiQ29uc3VsdGEgbsOjbyByZXRvcm5vdSByZWdpc3Ryb3MuLi5cIiB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICA8IS0tICNyZWdpb24gUEFHSU5Bw4fDg08gLS0+XG4gICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlUGFnaW5hdGlvbiAmJiByZWNvcmRzTGlzdC5sZW5ndGggPiAwXCIgY2xhc3M9XCJkLWZsZXggbXQtMlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LXN0YXJ0JzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnc3RhcnQnLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1jZW50ZXInOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1lbmQnOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdlbmQnLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnYmV0d2VlbidcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiBJdGVucyBwb3IgcMOhZ2luYSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHNlbGVjdC1zZWFyY2hcIiAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvdW50IG9mIGNvdW50T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY291bnRPcHRpb25zLmxlbmd0aCA+IDAgJiYgaSA9PSAwXCI+e3sgY291bnQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ29udHJvbGUgZGUgcGFnaW5hw6fDo28gLS0+XG4gICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9sc1xuICAgICAgICAgICAgICAgW2lkXT1cInBhZ2luYXRpb25JRFwiXG4gICAgICAgICAgICAgICBjbGFzcz1cInNwLXBhZ2luYXRpb24gbXQtM1wiXG4gICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlID0gJGV2ZW50OyBwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICBwcmV2aW91c0xhYmVsPVwiwqsmbmJzcDsmbmJzcDsmbmJzcDtcIiBuZXh0TGFiZWw9XCImbmJzcDsmbmJzcDsmbmJzcDvCu1wiXG4gICAgICAgICAgICAgICBbbWF4U2l6ZV09XCI1XCI+XG4gICAgICAgICAgICA8L3BhZ2luYXRpb24tY29udHJvbHM+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiBQQUdJTkHDh8ODTyAtLT5cbiAgICAgIDwvZGl2PlxuICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgIDwhLS0gTG9hZGVyIGVucXVhbnRvIG9zIHJlZ2lzdHJvcyBzw6NvIGNhcnJlZ2Fkb3MgLS0+XG4gICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj4gPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5DYXJyZWdhbmRvIGluZm9ybWHDp8O1ZXMuLi48L3NwYW4+IDwvZGl2PlxuICAgPC9kaXY+XG59XG4iXX0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRTNJOzs7Ozs7Ozs7Ozs7RUFZRTtBQU1GLE1BQU0sT0FBTyxjQUFjO0lBMEN6QiwwSEFBMEg7SUFDMUgsSUFDVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFXLFlBQVksQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLG9CQUFvQixDQUFDO0lBQ3JELENBQUM7SUFrQkQsb0JBQW9CO0lBRXBCLGtEQUFrRDtJQUdsRCxnREFBZ0Q7SUFDaEQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqRTFDLHFCQUFxQjtRQUVyQixpQkFBaUI7UUFFakI7MkJBQ21CO1FBQ0gsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFVOUM7NEJBQ29CO1FBQ08sd0JBQW1CLEdBQTJDLEtBQUssQ0FBQztRQWEvRjs7VUFFRTtRQUMyQixnQkFBVyxHQUFZLElBQUksQ0FBQztRQVV6RCxxRUFBcUU7UUFDcEQsdUJBQWtCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFdkYsaURBQWlEO1FBQ2hDLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcvRSw0RkFBNEY7UUFDckYsWUFBTyxHQUFXLENBQUMs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Y3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBUYWJlbGEgQ3VzdG9taXrDoXZlbFxuICpcbiAqIE8gYFRhYmxlQ29tcG9uZW50YCDDqSB1bSBjb21wb25lbnRlIEFuZ3VsYXIgcHJvamV0YWRvIHBhcmEgZXhpYmlyIHVtYSB0YWJlbGEgY3VzdG9taXrDoXZlbFxuICogY29tIHN1cG9ydGUgYSBwYWdpbmHDp8Ojby4gRWxlIHBlcm1pdGUgYSBjb25maWd1cmHDp8OjbyBkZSBjYWJlw6dhbGhvcyBkZSBjb2x1bmFzLCBwb3NpY2lvbmFtZW50b1xuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxuICogcGFyYSBhanVzdGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzIGUgZW1pdGluZG8gZXZlbnRvcyBwYXJhIHF1ZSBvIGNvbXBvbmVudGUgcGFpIHBvc3NhIHJlYWdpciBhXG4gKiBtdWRhbsOnYXMgbmEgcMOhZ2luYSBvdSBubyBuw7ptZXJvIGRlIGl0ZW5zIGV4aWJpZG9zLlxuICpcbiAqIEBzZWxlY3RvciBsaWItdGFibGVcbiAqIEB0ZW1wbGF0ZVVybCAuL3RhYmxlLmNvbXBvbmVudC5odG1sXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uIFBSSVZBVEVcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxuXG4gIC8vICNyZWdpb24gUFVCTElDXG5cbiAgLyoqIERldGVybWluYSBzZSBhIHRhYmVsYSBkZXZlIHVzYXIgcGFnaW5hw6fDo28uXG4gICAqIEBkZWZhdWx0IHRydWUgKi9cbiAgQElucHV0KCkgcHVibGljIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBMaXN0YSBkZSByZWdpc3Ryb3MgYSBzZXJlbSBleGliaWRvcyBuYSB0YWJlbGEuXG4gICAqIEByZXF1aXJlZCAqL1xuICBASW5wdXQoeyBhbGlhczogJ2xpc3QnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBPcMOnw7VlcyBkZSBjb250YWdlbSBkZSBpdGVucyBwb3IgcMOhZ2luYSBkaXNwb27DrXZlaXMgcGFyYSBvIHVzdcOhcmlvLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KCdjb3VudHMnKSBwdWJsaWMgY291bnRPcHRpb25zOiBudW1iZXJbXTtcblxuICAvKiogUG9zaWNpb25hbWVudG8gZG9zIGNvbnRyb2xlcyBkZSBwYWdpbmHDp8Ojby5cbiAgICogQGRlZmF1bHQgJ2VuZCcgKi9cbiAgQElucHV0KCdwbGFjZW1lbnQnKSBwdWJsaWMgcGFnaW5hdGlvblBsYWNlbWVudDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnYmV0d2VlbicgPSAnZW5kJztcblxuICAvKiogTGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYSwgaW5jbHVpbmRvIG8gbm9tZSwgYSBsYXJndXJhIGRhIGNvbHVuYSBlIGNsYXNzZXMgY3VzdG9taXphZGFzLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdoZWFkZXJzJywgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGhlYWRlcnNMaXN0OiB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbDogbnVtYmVyLFxuICAgIGN1c3RvbUNsYXNzZXM/OiBzdHJpbmdcbiAgfVtdO1xuXG4gIC8qKiBNZW5zYWdlbSBjdXN0b21pemFkYSBwYXJhIGxpc3RhIHZhemlhICovXG4gIEBJbnB1dCgnZW1wdHlMaXN0TWVzc2FnZScpIHB1YmxpYyBlbXB0eUxpc3RNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKiBJbmZvcm1hIHNlIG8gY291bnRlciBkZSByZWdpc3Ryb3MgZGV2ZSBhcGFyZWNlciBvdSBuw6NvLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIEBJbnB1dCgnc2hvd0NvdW50ZXInKSBwdWJsaWMgc2hvd0NvdW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBJbmZvcm1hIHVtIElEIHBhcmEgYSBwYWdpbmHDp8OjbyBkYSB0YWJlbGEgZXNwZWPDrWZpY2EuIERldmUgc2VyIHV0aWxpemFkYSBlbSBjYXNvIGRlIG3Dumx0aXBsYXMgdGFiZWxhcyBuYSBtZXNtYSB0ZWxhLiAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbklEKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uSUQgPSB2YWx1ZSB8fCAnbGliVGFibGVQYWdpbmF0aW9uJztcbiAgfVxuXG5cbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIG7Dum1lcm8gZGUgaXRlbnMgcG9yIHDDoWdpbmEgw6kgYWx0ZXJhZG8uICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBww6FnaW5hIMOpIGFsdGVyYWRhLiAqL1xuICBAT3V0cHV0KCkgcHVibGljIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cblxuICAvKiogQ29udGFkb3IgZGUgcmVnaXN0cm9zIChwb2RlIHNlciB1c2FkbyBwYXJhIGZ1dHVyYXMgaW1wbGVtZW50YcOnw7VlcyBkZSBsw7NnaWNhIGludGVybmEpLiAqL1xuICBwdWJsaWMgY291bnRlcjogbnVtYmVyID0gMDtcblxuICAvKiogUMOhZ2luYSBhdHVhbCBkYSB0YWJlbGEuICovXG5cdHB1YmxpYyBwYWdlOiBudW1iZXIgPSAxO1xuXG4gIC8qKiBOw7ptZXJvIGRlIGl0ZW5zIGEgc2VyZW0gZXhpYmlkb3MgcG9yIHDDoWdpbmEuICovXG5cdHB1YmxpYyBpdGVtc1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BSSUVEQURFUyA8PT09PT09PT09PVxuXG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0KSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnMgPyB0aGlzLmNvdW50T3B0aW9uc1swXSA6IHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoIH1cbiAgICBlbHNlIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9uc1swXSA/PyAxMCB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cbiAgfVxuXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXG4gICAqIEBwYXJhbSBjaGFuZ2VzIE9iamV0byBxdWUgY29udMOpbSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUuICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uKHRoaXMucmVjb3Jkc0xpc3QgPz8gW10pO1xuXG4gICAgICBsZXQgbWF4Q29sdW1ucyA9IHRoaXMuaGVhZGVyc0xpc3QucmVkdWNlKChuLCB7Y29sfSkgPT4gbiArIGNvbCwgMCk7XG4gICAgICBpZiAobWF4Q29sdW1ucyA+PSAxMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHNvbWEgZGUgbGFyZ3VyYSAoY2xhc3NlIGNvbSBwcmVmaXhvICdjb2wtJykgZGUgdG9kYXMgYXMgY29sdW5hcyBuw6NvIHBvZGUgc2VyIG1haW9yIHF1ZSAxMi5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XG5cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxuXG4gIC8qKiBNb2RpZmljYSBhIHF1YW50aWRhZGUgZGUgaXRlbnMgYSBzZXIgbW9zdHJhZGEgbmEgbGlzdGEuXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xuICBwdWJsaWMgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuaXRlbXNQZXJQYWdlKTtcbiAgfVxuXG4gIC8qKiBSZXNldGEgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSBjb20gYmFzZSBubyBuw7ptZXJvIGF0dWFsIGRlIHJlZ2lzdHJvcy5cbiAgICogQHBhcmFtIGxpc3QgTGlzdGEgZGUgcmVnaXN0cm9zIHBhcmEgcmVzZXRhciBhIHBhZ2luYcOnw6NvLiAqL1xuICBwdWJsaWMgcmVzZXRQYWdpbmF0aW9uKGxpc3Q6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSBzdGFydEluZGV4KSB7XG4gICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XG5cbn1cbiIsIkBpZiAocmVjb3Jkc0xpc3QpIHtcbiAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICA8IS0tIEV4aWJlIG8gbsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZSBvIHRvdGFsIGRlIHJlZ2lzdHJvcyAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0NvdW50ZXJcIiBjbGFzcz1cIm1zLTFcIj4gRXhpYmluZG8ge3sgaXRlbXNQZXJQYWdlIDw9IHJlY29yZHNMaXN0Lmxlbmd0aCA/IGl0ZW1zUGVyUGFnZSA6IHJlY29yZHNMaXN0Lmxlbmd0aCB9fSBkZSB7eyByZWNvcmRzTGlzdC5sZW5ndGggfX0gcmVnaXN0cm9zIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBDb250YWluZXIgZGEgdGFiZWxhIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1ib3R0b20tMCByb3VuZGVkLWJvdHRvbSByb3VuZGVkXCI+XG4gICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciBib3JkZXIgbWItMFwiPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPCEtLSBJdGVyYSBzb2JyZSBhIGxpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgY3JpYXIgYXMgY29sdW5hcyAtLT5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYWRlcnNMaXN0XCIgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1kYXJrLWdyZXkge3sgaGVhZGVyLmNvbCA+IDAgPyAnY29sLScraGVhZGVyLmNvbCA6ICdjb2wnIH19IHt7IGhlYWRlci5jdXN0b21DbGFzc2VzIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJiZy1saWdodCBmYWRlLWluLXJvd1wiPlxuICAgICAgICAgICAgICAgQGlmIChyZWNvcmRzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIENvbnRlw7pkbyBkYXMgbGluaGFzIGRhIHRhYmVsYSAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpbm5lclJvd3NdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPCEtLSBNZW5zYWdlbSBkZSBhdXPDqm5jaWEgZGUgcmVnaXN0cm9zIC0tPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMlwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWxpZ2h0IGZzdC1pdGFsaWMgdGV4dC1jZW50ZXJcIj4ge3sgZW1wdHlMaXN0TWVzc2FnZSA/IGVtcHR5TGlzdE1lc3NhZ2UgOiBcIkNvbnN1bHRhIG7Do28gcmV0b3Jub3UgcmVnaXN0cm9zLi4uXCIgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgPCEtLSAjcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxuICAgICAgICAgPGRpdiAqbmdJZj1cInVzZVBhZ2luYXRpb24gJiYgcmVjb3Jkc0xpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZC1mbGV4IG10LTJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1zdGFydCc6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnZW5kJyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2JldHdlZW4nXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWUtMlwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj4gSXRlbnMgcG9yIHDDoWdpbmEgPC9sYWJlbD5cbiAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBzZWxlY3Qtc2VhcmNoXCIgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudCBvZiBjb3VudE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImNvdW50T3B0aW9ucy5sZW5ndGggPiAwICYmIGkgPT0gMFwiPnt7IGNvdW50IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbnRyb2xlIGRlIHBhZ2luYcOnw6NvIC0tPlxuICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHNcbiAgICAgICAgICAgICAgIFtpZF09XCJwYWdpbmF0aW9uSURcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJzcC1wYWdpbmF0aW9uIG10LTNcIlxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgcHJldmlvdXNMYWJlbD1cIsKrJm5ic3A7Jm5ic3A7Jm5ic3A7XCIgbmV4dExhYmVsPVwiJm5ic3A7Jm5ic3A7Jm5ic3A7wrtcIlxuICAgICAgICAgICAgICAgW21heFNpemVdPVwiNVwiPlxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8IS0tICNlbmRyZWdpb24gUEFHSU5Bw4fDg08gLS0+XG4gICAgICA8L2Rpdj5cbiAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxuICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+IDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2FycmVnYW5kbyBpbmZvcm1hw6fDtWVzLi4uPC9zcGFuPiA8L2Rpdj5cbiAgIDwvZGl2PlxufVxuIl19
@@ -9,9 +9,7 @@ export class TreeComponent {
9
9
  // #region ==========> PROPERTIES <==========
10
10
  // #region PRIVATE
11
11
  this._openAll = false;
12
- // #endregino PRIVATE
13
- // #region PUBLIC
14
- this.items = [];
12
+ this._items = [];
15
13
  this.checkbox = false;
16
14
  this.filter = false;
17
15
  this.onSelect = new EventEmitter();
@@ -20,6 +18,10 @@ export class TreeComponent {
20
18
  this.search = "";
21
19
  }
22
20
  ngOnInit() { }
21
+ // #endregino PRIVATE
22
+ // #region PUBLIC
23
+ get items() { return this._items; }
24
+ set items(value) { this._items = value; }
23
25
  /** Responsável por abrir ou fechar todas as opções sendo exibidas na lista
24
26
  * @default false */
25
27
  get openAll() { return this._openAll; }
@@ -27,6 +29,7 @@ export class TreeComponent {
27
29
  this._openAll = value;
28
30
  this.items.forEach(elem => {
29
31
  elem.expanded = value;
32
+ elem.aplicClass = value;
30
33
  });
31
34
  }
32
35
  // #endregion PUBLIC
@@ -84,22 +87,22 @@ export class TreeComponent {
84
87
  return list.some(this.checked);
85
88
  }
86
89
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
87
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TreeComponent, selector: "app-tree", inputs: { items: "items", checkbox: "checkbox", filter: "filter", openAll: "openAll" }, outputs: { onSelect: "onSelect", onEvent: "onEvent" }, ngImport: i0, template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgStorageComponent, selector: "app-svg-storage", inputs: ["svgName", "svgColor", "svgFill", "svgSize", "svgStrokeWidth"] }, { kind: "component", type: TreeComponent, selector: "app-tree", inputs: ["items", "checkbox", "filter", "openAll"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: i4.SearchTreePipe, name: "TreeFilter" }] }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TreeComponent, selector: "app-tree", inputs: { items: "items", openAll: "openAll", checkbox: "checkbox", filter: "filter" }, outputs: { onSelect: "onSelect", onEvent: "onEvent" }, ngImport: i0, template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgStorageComponent, selector: "app-svg-storage", inputs: ["svgName", "svgColor", "svgFill", "svgSize", "svgStrokeWidth"] }, { kind: "component", type: TreeComponent, selector: "app-tree", inputs: ["items", "openAll", "checkbox", "filter"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: i4.SearchTreePipe, name: "TreeFilter" }] }); }
88
91
  }
89
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, decorators: [{
90
93
  type: Component,
91
94
  args: [{ selector: "app-tree", template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"] }]
92
95
  }], ctorParameters: () => [], propDecorators: { items: [{
93
96
  type: Input
97
+ }], openAll: [{
98
+ type: Input
94
99
  }], checkbox: [{
95
100
  type: Input
96
101
  }], filter: [{
97
102
  type: Input
98
- }], openAll: [{
99
- type: Input
100
103
  }], onSelect: [{
101
104
  type: Output
102
105
  }], onEvent: [{
103
106
  type: Output
104
107
  }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRL0UsTUFBTSxPQUFPLGFBQWE7SUFDeEI7UUFJQSw2Q0FBNkM7UUFFN0Msa0JBQWtCO1FBQ1YsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNsQyxxQkFBcUI7UUFFckIsaUJBQWlCO1FBQ0QsVUFBSyxHQUF1QixFQUFFLENBQUM7UUFDL0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBY3ZCLGFBQVEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxZQUFPLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUQsWUFBTyxHQUFHLENBQUMsSUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUV2RCxXQUFNLEdBQVcsRUFBRSxDQUFDO0lBaENaLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7SUFhbkI7d0JBQ29CO0lBQ3BCLElBQ1csT0FBTyxLQUFjLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBVyxPQUFPLENBQUMsS0FBYztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4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Q29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyZWVJdGVtIH0gZnJvbSBcIi4vbW9kZWxzL3RyZWUtaXRlbVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLXRyZWVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90cmVlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90cmVlLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUEVSVElFUyA8PT09PT09PT09PVxuXG4gIC8vICNyZWdpb24gUFJJVkFURVxuICBwcml2YXRlIF9vcGVuQWxsOiBib29sZWFuID0gZmFsc2U7XG4gIC8vICNlbmRyZWdpbm8gUFJJVkFURVxuXG4gIC8vICNyZWdpb24gUFVCTElDXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogVHJlZUl0ZW1bXSB8IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHB1YmxpYyBjaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFJlc3BvbnPDoXZlbCBwb3IgYWJyaXIgb3UgZmVjaGFyIHRvZGFzIGFzIG9ww6fDtWVzIHNlbmRvIGV4aWJpZGFzIG5hIGxpc3RhXG4gICAqIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgb3BlbkFsbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29wZW5BbGw7IH1cbiAgcHVibGljIHNldCBvcGVuQWxsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbkFsbCA9IHZhbHVlO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgZWxlbS5leHBhbmRlZCA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgY2hlY2tlZCA9IChpdGVtOiBUcmVlSXRlbSkgPT4gaXRlbS5pc19zZWxlY3RlZCA9PSB0cnVlO1xuXG4gIHB1YmxpYyBzZWFyY2g6IHN0cmluZyA9IFwiXCI7XG4gIC8vICNlbmRyZWdpb24gUFVCTElDXG5cbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QRVJUSUVTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQVUJMSUMgTUVUSE9EUyA8PT09PT09PT09PVxuICBwdWJsaWMgb25FeHBhbmQoaXRlbTogVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5leHBhbmRlZCkge1xuICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2hlY2soaXRlbXM6IFRyZWVJdGVtW10sIGl0ZW06IFRyZWVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaGFzX2NoaWxkcmVuKSB7XG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGZpcnN0Tm9kZSkgPT4ge1xuICAgICAgICBpZiAoZmlyc3ROb2RlLmlzX3NlbGVjdGVkICE9IGl0ZW0uaXNfc2VsZWN0ZWQpIHtcbiAgICAgICAgICBmaXJzdE5vZGUuaXNfc2VsZWN0ZWQgPSAhZmlyc3ROb2RlLmlzX3NlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdE5vZGUuaGFzX2NoaWxkcmVuKSB7XG4gICAgICAgICAgZmlyc3ROb2RlLmNoaWxkcmVuLmZvckVhY2goKHNlY29uZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWNvbmROb2RlLmlzX3NlbGVjdGVkICE9IGZpcnN0Tm9kZS5pc19zZWxlY3RlZCkge1xuICAgICAgICAgICAgICBzZWNvbmROb2RlLmlzX3NlbGVjdGVkID0gIXNlY29uZE5vZGUuaXNfc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0LmVtaXQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoZWNrRXZlbnQoaXRlbXM6IFRyZWVJdGVtW10pIHtcbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uRXZlbnQuZW1pdCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBVQkxJQyBNRVRIT0RTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUklWQVRFIE1FVEhPRFMgPD09PT09PT09PT1cblxuICBwcml2YXRlIGluZGV0ZXJtaW5hdGVDaGVjayhsaXN0OiBUcmVlSXRlbVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxpc3Quc29tZSh0aGlzLmNoZWNrZWQpO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBhbGxDaGVjayhsaXN0OiBUcmVlSXRlbVtdKTogYm9vbGVhbiB7XG4gIC8vICAgcmV0dXJuIGxpc3QuZXZlcnkodGhpcy5jaGVja2VkKTtcbiAgLy8gfVxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBSSVZBVEUgTUVUSE9EUyA8PT09PT09PT09PVxufVxuIiwiPCEtLSBGSUxURVIgLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiZmlsdGVyXCI+XG4gIDwhLS0gPGFwcC1zZWFyY2gtZmlsdGVycz48L2FwcC1zZWFyY2gtZmlsdGVycz4gLS0+XG5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGdsYi1zZWFyY2gtaW5wdXQgbXktM1wiPlxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBzZWFyY2ggcHgtMiBnbGItYmctY29sb3Itd2hpdGVcIj5cbiAgICAgIDxhcHAtc3ZnLXN0b3JhZ2Ugc3ZnTmFtZT1cInNlYXJjaFwiIHN2Z0NvbG9yPVwiZ3JheVwiIHN2Z1NpemU9XCJtZWRpdW0tc21hbGxcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48L2FwcC1zdmctc3RvcmFnZT5cbiAgICA8L3NwYW4+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm9yZGVyLWxlZnQtbm9uZSBwcy0wXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIj5cbiAgPC9kaXY+XG4gIFxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gVFJFRSAtLT5cbjx1bCBjbGFzcz1cInRyZWUtdmlld1wiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zIHwgVHJlZUZpbHRlciA6IHNlYXJjaDsgaW5kZXggYXMgaVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHktMVwiIFtjbGFzc109XCIhaXRlbS5oYXNfY2hpbGRyZW4gPyAnY2hpbGRyZW4nIDogbnVsbCBcIj5cbiAgICAgIDxhcHAtc3ZnLXN0b3JhZ2VcbiAgICAgICAgY2xhc3M9XCJjaGV2cm9uXCJcbiAgICAgICAgKm5nSWY9XCJpdGVtLmhhc19jaGlsZHJlblwiXG4gICAgICAgIFtjbGFzc109XCJpdGVtLmFwbGljQ2xhc3MgPyAncm90YXRlJyA6IG51bGxcIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgb25FeHBhbmQoaXRlbSk7XG4gICAgICAgICAgaXRlbS5hcGxpY0NsYXNzID8gKGl0ZW0uYXBsaWNDbGFzcyA9IGZhbHNlKSA6IChpdGVtLmFwbGljQ2xhc3MgPSB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICBzdmdTaXplPVwibWVkaXVtLXNtYWxsXCJcbiAgICAgICAgc3ZnTmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgPjwvYXBwLXN2Zy1zdG9yYWdlPlxuICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjaGVja2JveFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtLTAgcG9zaXRpb24tcmVsYXRpdmVcIlxuICAgICAgICAgIFtjaGVja2VkXT1cIm9uQ2hlY2tFdmVudChpdGVtcylcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVjayhpdGVtcywgaXRlbSlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5pc19zZWxlY3RlZFwiXG4gICAgICAgIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMCBtcy0yXCI+e3sgaXRlbS5sYWJlbCB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBOT0RFUyAtLT5cbiAgICA8dWwgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XG4gICAgICA8YXBwLXRyZWVcbiAgICAgICAgKG9uU2VsZWN0KT1cIml0ZW0uaXNfc2VsZWN0ZWQgPSAkZXZlbnRcIlxuICAgICAgICAob25FdmVudCk9XCJpdGVtLmlzX3NlbGVjdGVkID0gJGV2ZW50XCJcbiAgICAgICAgW2l0ZW1zXT1cIml0ZW0uY2hpbGRyZW5cIlxuICAgICAgICBbY2hlY2tib3hdPVwiY2hlY2tib3hcIlxuICAgICAgPjwvYXBwLXRyZWU+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG48L3VsPiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRL0UsTUFBTSxPQUFPLGFBQWE7SUFDeEI7UUFJQSw2Q0FBNkM7UUFFN0Msa0JBQWtCO1FBQ1YsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQXFCeEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR3ZCLGFBQVEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxZQUFPLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHOUQsWUFBTyxHQUFHLENBQUMsSUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUN2RCxXQUFNLEdBQVcsRUFBRSxDQUFDO0lBdENaLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7SUFPbkIscUJBQXFCO0lBRXJCLGlCQUFpQjtJQUNqQixJQUNXLEtBQUssS0FBeUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFXLEtBQUssQ0FBQyxLQUF5QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVwRTt3QkFDb0I7SUFDcEIsSUFDVyxPQUFPLEtBQWMsT0FBTyxJQUFJLENBQUMsUUFBUSxD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ekIsU0FBUzsrQkFDRSxVQUFVO3dEQWtCVCxLQUFLO3NCQURmLEtBQUs7Z0JBT0ssT0FBTztzQkFEakIsS0FBSztnQkFXVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBR1csUUFBUTtzQkFBeEIsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmVlSXRlbSB9IGZyb20gXCIuL21vZGVscy90cmVlLWl0ZW1cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC10cmVlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHJlZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHJlZS5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFBST1BFUlRJRVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uIFBSSVZBVEVcbiAgcHJpdmF0ZSBfb3BlbkFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pdGVtczogVHJlZUl0ZW1bXSB8IGFueVtdID0gW107XG4gIC8vICNlbmRyZWdpbm8gUFJJVkFURVxuXG4gIC8vICNyZWdpb24gUFVCTElDXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogVHJlZUl0ZW1bXSB8IGFueVtdIHsgcmV0dXJuIHRoaXMuX2l0ZW1zOyB9XG4gIHB1YmxpYyBzZXQgaXRlbXModmFsdWU6IFRyZWVJdGVtW10gfCBhbnlbXSkgeyB0aGlzLl9pdGVtcyA9IHZhbHVlOyB9XG5cbiAgLyoqIFJlc3BvbnPDoXZlbCBwb3IgYWJyaXIgb3UgZmVjaGFyIHRvZGFzIGFzIG9ww6fDtWVzIHNlbmRvIGV4aWJpZGFzIG5hIGxpc3RhXG4gICAqIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgb3BlbkFsbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29wZW5BbGw7IH1cbiAgcHVibGljIHNldCBvcGVuQWxsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbkFsbCA9IHZhbHVlO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgZWxlbS5leHBhbmRlZCA9IHZhbHVlO1xuICAgICAgZWxlbS5hcGxpY0NsYXNzID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgY2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIHB1YmxpYyBjaGVja2VkID0gKGl0ZW06IFRyZWVJdGVtKSA9PiBpdGVtLmlzX3NlbGVjdGVkID09IHRydWU7XG4gIHB1YmxpYyBzZWFyY2g6IHN0cmluZyA9IFwiXCI7XG4gIC8vICNlbmRyZWdpb24gUFVCTElDXG5cbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QRVJUSUVTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQVUJMSUMgTUVUSE9EUyA8PT09PT09PT09PVxuICBwdWJsaWMgb25FeHBhbmQoaXRlbTogVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5leHBhbmRlZCkge1xuICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2hlY2soaXRlbXM6IFRyZWVJdGVtW10sIGl0ZW06IFRyZWVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaGFzX2NoaWxkcmVuKSB7XG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGZpcnN0Tm9kZSkgPT4ge1xuICAgICAgICBpZiAoZmlyc3ROb2RlLmlzX3NlbGVjdGVkICE9IGl0ZW0uaXNfc2VsZWN0ZWQpIHtcbiAgICAgICAgICBmaXJzdE5vZGUuaXNfc2VsZWN0ZWQgPSAhZmlyc3ROb2RlLmlzX3NlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdE5vZGUuaGFzX2NoaWxkcmVuKSB7XG4gICAgICAgICAgZmlyc3ROb2RlLmNoaWxkcmVuLmZvckVhY2goKHNlY29uZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWNvbmROb2RlLmlzX3NlbGVjdGVkICE9IGZpcnN0Tm9kZS5pc19zZWxlY3RlZCkge1xuICAgICAgICAgICAgICBzZWNvbmROb2RlLmlzX3NlbGVjdGVkID0gIXNlY29uZE5vZGUuaXNfc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0LmVtaXQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoZWNrRXZlbnQoaXRlbXM6IFRyZWVJdGVtW10pIHtcbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2soaXRlbXMpKSB7XG4gICAgICB0aGlzLm9uRXZlbnQuZW1pdCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBVQkxJQyBNRVRIT0RTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUklWQVRFIE1FVEhPRFMgPD09PT09PT09PT1cblxuICBwcml2YXRlIGluZGV0ZXJtaW5hdGVDaGVjayhsaXN0OiBUcmVlSXRlbVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxpc3Quc29tZSh0aGlzLmNoZWNrZWQpO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBhbGxDaGVjayhsaXN0OiBUcmVlSXRlbVtdKTogYm9vbGVhbiB7XG4gIC8vICAgcmV0dXJuIGxpc3QuZXZlcnkodGhpcy5jaGVja2VkKTtcbiAgLy8gfVxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBSSVZBVEUgTUVUSE9EUyA8PT09PT09PT09PVxufVxuIiwiPCEtLSBGSUxURVIgLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiZmlsdGVyXCI+XG4gIDwhLS0gPGFwcC1zZWFyY2gtZmlsdGVycz48L2FwcC1zZWFyY2gtZmlsdGVycz4gLS0+XG5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGdsYi1zZWFyY2gtaW5wdXQgbXktM1wiPlxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBzZWFyY2ggcHgtMiBnbGItYmctY29sb3Itd2hpdGVcIj5cbiAgICAgIDxhcHAtc3ZnLXN0b3JhZ2Ugc3ZnTmFtZT1cInNlYXJjaFwiIHN2Z0NvbG9yPVwiZ3JheVwiIHN2Z1NpemU9XCJtZWRpdW0tc21hbGxcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48L2FwcC1zdmctc3RvcmFnZT5cbiAgICA8L3NwYW4+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm9yZGVyLWxlZnQtbm9uZSBwcy0wXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIj5cbiAgPC9kaXY+XG4gIFxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gVFJFRSAtLT5cbjx1bCBjbGFzcz1cInRyZWUtdmlld1wiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zIHwgVHJlZUZpbHRlciA6IHNlYXJjaDsgaW5kZXggYXMgaVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHktMVwiIFtjbGFzc109XCIhaXRlbS5oYXNfY2hpbGRyZW4gPyAnY2hpbGRyZW4nIDogbnVsbCBcIj5cbiAgICAgIDxhcHAtc3ZnLXN0b3JhZ2VcbiAgICAgICAgY2xhc3M9XCJjaGV2cm9uXCJcbiAgICAgICAgKm5nSWY9XCJpdGVtLmhhc19jaGlsZHJlblwiXG4gICAgICAgIFtjbGFzc109XCJpdGVtLmFwbGljQ2xhc3MgPyAncm90YXRlJyA6IG51bGxcIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgb25FeHBhbmQoaXRlbSk7XG4gICAgICAgICAgaXRlbS5hcGxpY0NsYXNzID8gKGl0ZW0uYXBsaWNDbGFzcyA9IGZhbHNlKSA6IChpdGVtLmFwbGljQ2xhc3MgPSB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICBzdmdTaXplPVwibWVkaXVtLXNtYWxsXCJcbiAgICAgICAgc3ZnTmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgPjwvYXBwLXN2Zy1zdG9yYWdlPlxuICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjaGVja2JveFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtLTAgcG9zaXRpb24tcmVsYXRpdmVcIlxuICAgICAgICAgIFtjaGVja2VkXT1cIm9uQ2hlY2tFdmVudChpdGVtcylcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVjayhpdGVtcywgaXRlbSlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5pc19zZWxlY3RlZFwiXG4gICAgICAgIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMCBtcy0yXCI+e3sgaXRlbS5sYWJlbCB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBOT0RFUyAtLT5cbiAgICA8dWwgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XG4gICAgICA8YXBwLXRyZWVcbiAgICAgICAgKG9uU2VsZWN0KT1cIml0ZW0uaXNfc2VsZWN0ZWQgPSAkZXZlbnRcIlxuICAgICAgICAob25FdmVudCk9XCJpdGVtLmlzX3NlbGVjdGVkID0gJGV2ZW50XCJcbiAgICAgICAgW2l0ZW1zXT1cIml0ZW0uY2hpbGRyZW5cIlxuICAgICAgICBbY2hlY2tib3hdPVwiY2hlY2tib3hcIlxuICAgICAgPjwvYXBwLXRyZWU+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG48L3VsPiJdfQ==
@@ -1202,9 +1202,7 @@ class TreeComponent {
1202
1202
  // #region ==========> PROPERTIES <==========
1203
1203
  // #region PRIVATE
1204
1204
  this._openAll = false;
1205
- // #endregino PRIVATE
1206
- // #region PUBLIC
1207
- this.items = [];
1205
+ this._items = [];
1208
1206
  this.checkbox = false;
1209
1207
  this.filter = false;
1210
1208
  this.onSelect = new EventEmitter();
@@ -1213,6 +1211,10 @@ class TreeComponent {
1213
1211
  this.search = "";
1214
1212
  }
1215
1213
  ngOnInit() { }
1214
+ // #endregino PRIVATE
1215
+ // #region PUBLIC
1216
+ get items() { return this._items; }
1217
+ set items(value) { this._items = value; }
1216
1218
  /** Responsável por abrir ou fechar todas as opções sendo exibidas na lista
1217
1219
  * @default false */
1218
1220
  get openAll() { return this._openAll; }
@@ -1220,6 +1222,7 @@ class TreeComponent {
1220
1222
  this._openAll = value;
1221
1223
  this.items.forEach(elem => {
1222
1224
  elem.expanded = value;
1225
+ elem.aplicClass = value;
1223
1226
  });
1224
1227
  }
1225
1228
  // #endregion PUBLIC
@@ -1277,19 +1280,19 @@ class TreeComponent {
1277
1280
  return list.some(this.checked);
1278
1281
  }
1279
1282
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1280
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TreeComponent, selector: "app-tree", inputs: { items: "items", checkbox: "checkbox", filter: "filter", openAll: "openAll" }, outputs: { onSelect: "onSelect", onEvent: "onEvent" }, ngImport: i0, template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SvgStorageComponent, selector: "app-svg-storage", inputs: ["svgName", "svgColor", "svgFill", "svgSize", "svgStrokeWidth"] }, { kind: "component", type: TreeComponent, selector: "app-tree", inputs: ["items", "checkbox", "filter", "openAll"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: SearchTreePipe, name: "TreeFilter" }] }); }
1283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TreeComponent, selector: "app-tree", inputs: { items: "items", openAll: "openAll", checkbox: "checkbox", filter: "filter" }, outputs: { onSelect: "onSelect", onEvent: "onEvent" }, ngImport: i0, template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SvgStorageComponent, selector: "app-svg-storage", inputs: ["svgName", "svgColor", "svgFill", "svgSize", "svgStrokeWidth"] }, { kind: "component", type: TreeComponent, selector: "app-tree", inputs: ["items", "openAll", "checkbox", "filter"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: SearchTreePipe, name: "TreeFilter" }] }); }
1281
1284
  }
1282
1285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, decorators: [{
1283
1286
  type: Component,
1284
1287
  args: [{ selector: "app-tree", template: "<!-- FILTER -->\n<ng-template [ngIf]=\"filter\">\n <!-- <app-search-filters></app-search-filters> -->\n\n <div class=\"input-group glb-search-input my-3\">\n <span class=\"input-group-text search px-2 glb-bg-color-white\">\n <app-svg-storage svgName=\"search\" svgColor=\"gray\" svgSize=\"medium-small\"\n class=\"d-flex align-items-center\"></app-svg-storage>\n </span>\n <input type=\"text\" class=\"form-control border-left-none ps-0\" [(ngModel)]=\"search\">\n </div>\n \n</ng-template>\n<!-- TREE -->\n<ul class=\"tree-view\">\n <ng-container *ngFor=\"let item of items | TreeFilter : search; index as i\">\n <div class=\"container py-1\" [class]=\"!item.has_children ? 'children' : null \">\n <app-svg-storage\n class=\"chevron\"\n *ngIf=\"item.has_children\"\n [class]=\"item.aplicClass ? 'rotate' : null\"\n (click)=\"\n onExpand(item);\n item.aplicClass ? (item.aplicClass = false) : (item.aplicClass = true)\n \"\n svgSize=\"medium-small\"\n svgName=\"chevron-right\"\n ></app-svg-storage>\n <!-- CHECKBOX -->\n <ng-template [ngIf]=\"checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0 position-relative\"\n [checked]=\"onCheckEvent(items)\"\n (change)=\"onCheck(items, item)\"\n [(ngModel)]=\"item.is_selected\"\n />\n </ng-template>\n <label class=\"label mb-0 ms-2\">{{ item.label }}</label>\n </div>\n <!-- NODES -->\n <ul *ngIf=\"item.expanded\">\n <app-tree\n (onSelect)=\"item.is_selected = $event\"\n (onEvent)=\"item.is_selected = $event\"\n [items]=\"item.children\"\n [checkbox]=\"checkbox\"\n ></app-tree>\n </ul>\n </ng-container>\n</ul>", styles: ["*{font-family:Open Sans,Arial,Helvetica,sans-serif;color:#000;box-sizing:border-box;list-style:none;font-size:1rem}.tree-view{margin:0;padding:0;list-style-type:none;transition:all .3s ease-in-out}.container{margin:0;padding:0;display:flex;align-items:center}.chevron{position:relative;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0);-webkit-transition:.3s ease-in-out;-moz-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;color:#000;cursor:pointer}.chevron:hover{color:#0d6efd;transform:rotate(30deg)}.chevron.rotate{transform:rotate(90deg);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transition:.3s}.form-check-input{cursor:pointer}.children{padding-left:20px}\n"] }]
1285
1288
  }], ctorParameters: () => [], propDecorators: { items: [{
1286
1289
  type: Input
1290
+ }], openAll: [{
1291
+ type: Input
1287
1292
  }], checkbox: [{
1288
1293
  type: Input
1289
1294
  }], filter: [{
1290
1295
  type: Input
1291
- }], openAll: [{
1292
- type: Input
1293
1296
  }], onSelect: [{
1294
1297
  type: Output
1295
1298
  }], onEvent: [{
@@ -3143,11 +3146,11 @@ class TableComponent {
3143
3146
  }
3144
3147
  }
3145
3148
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
3146
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", showCounter: "showCounter", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
3149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", showCounter: "showCounter", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span *ngIf=\"showCounter\" class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
3147
3150
  }
3148
3151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
3149
3152
  type: Component,
3150
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
3153
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span *ngIf=\"showCounter\" class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
3151
3154
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
3152
3155
  type: Input
3153
3156
  }], recordsList: [{