ngx-sp-infra 2.0.17 → 2.0.18-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.
@@ -17,6 +17,7 @@ import * as i3 from "ngx-pagination";
17
17
  * @styleUrl ./table.component.scss
18
18
  */
19
19
  export class TableComponent {
20
+ /** Informa um ID para a paginação da tabela específica. Deve ser utilizada em caso de múltiplas tabelas na mesma tela. */
20
21
  get paginationID() { return this._paginationID; }
21
22
  set paginationID(value) {
22
23
  this._paginationID = value || 'libTablePagination';
@@ -34,6 +35,10 @@ export class TableComponent {
34
35
  /** Posicionamento dos controles de paginação.
35
36
  * @default 'end' */
36
37
  this.paginationPlacement = 'end';
38
+ /** Informa se o counter de registros deve aparecer ou não.
39
+ * @default true
40
+ */
41
+ this.showCounter = true;
37
42
  /** Evento emitido quando o número de itens por página é alterado. */
38
43
  this.itemsPerPageChange = new EventEmitter();
39
44
  /** Evento emitido quando a página é alterada. */
@@ -84,7 +89,7 @@ export class TableComponent {
84
89
  }
85
90
  }
86
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 }); }
87
- 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", 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 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"] }] }); }
88
93
  }
89
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
90
95
  type: Component,
@@ -106,11 +111,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
106
111
  }], emptyListMessage: [{
107
112
  type: Input,
108
113
  args: ['emptyListMessage']
114
+ }], showCounter: [{
115
+ type: Input,
116
+ args: ['showCounter']
117
+ }], paginationID: [{
118
+ type: Input
109
119
  }], itemsPerPageChange: [{
110
120
  type: Output
111
121
  }], pageChange: [{
112
122
  type: Output
113
- }], paginationID: [{
114
- type: Input
115
123
  }] } });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRTNJOzs7Ozs7Ozs7Ozs7RUFZRTtBQU1GLE1BQU0sT0FBTyxjQUFjO0lBc0R6QixJQUNXLFlBQVksS0FBYSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQVcsWUFBWSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLElBQUksb0JBQW9CLENBQUM7SUFDckQsQ0FBQztJQUNELG9CQUFvQjtJQUVwQixrREFBa0Q7SUFHbEQsZ0RBQWdEO0lBQ2hELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBM0QxQyxxQkFBcUI7UUFFckIsaUJBQWlCO1FBRWpCOzJCQUNtQjtRQUNILGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBVTlDOzRCQUNvQjtRQUNPLHdCQUFtQixHQUEyQyxLQUFLLENBQUM7UUFhL0YscUVBQXFFO1FBQ3BELHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXZGLGlEQUFpRDtRQUNoQyxlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFHL0UsNEZBQTRGO1FBQ3JGLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFFM0IsOEJBQThCO1FBQ3hCLFNBQUksR0FBVyxDQUFDLENBQUM7SUFpQnVCLENBQUM7SUFFL0MsNkVBQTZFO0lBQzdFLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUE7UUFBQyxDQUFDO2FBQzNHLENBQUM7WUFBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBRSwrQ0FBK0M7SUFDNUUsQ0FBQztJQUVEO2tGQUM4RTtJQUM5RSxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRTdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkUsSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEZBQThGLENBQUMsQ0FBQztZQUNsSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxtREFBbUQ7SUFHbkQsOENBQThDO0lBRTlDO2dGQUM0RTtJQUNyRSxjQUFjLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDtrRUFDOEQ7SUFDdkQsZUFBZSxDQUFDLElBQVc7UUFDaEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDOytHQTdHVSxjQUFjO21HQUFkLGNBQWMsMmJDcEIzQixzMEdBb0VBOzs0RkRoRGEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXO3NGQWdCTCxhQUFhO3NCQUE1QixLQUFLO2dCQUkyQyxXQUFXO3NCQUEzRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUloQixZQUFZO3NCQUFuQyxLQUFLO3VCQUFDLFFBQVE7Z0JBSVksbUJBQW1CO3NCQUE3QyxLQUFLO3VCQUFDLFdBQVc7Z0JBSWtDLFdBQVc7c0JBQTlELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT1QsZ0JBQWdCO3NCQUFqRCxLQUFLO3VCQUFDLGtCQUFrQjtnQkFHUixrQkFBa0I7c0JBQWxDLE1BQU07Z0JBR1UsVUFBVTtzQkFBMUIsTUFBTTtnQkFjSSxZQUFZO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcbiAqXG4gKiBPIGBUYWJsZUNvbXBvbmVudGAgw6kgdW0gY29tcG9uZW50ZSBBbmd1bGFyIHByb2pldGFkbyBwYXJhIGV4aWJpciB1bWEgdGFiZWxhIGN1c3RvbWl6w6F2ZWxcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cbiAqIGRhIHBhZ2luYcOnw6NvIGUgb3DDp8O1ZXMgZGUgaXRlbnMgcG9yIHDDoWdpbmEuIE8gY29tcG9uZW50ZSDDqSBmbGV4w612ZWwsIHV0aWxpemFuZG8gY2xhc3NlcyBCb290c3RyYXBcbiAqIHBhcmEgYWp1c3RhciBvIGxheW91dCBkYXMgY29sdW5hcyBlIGVtaXRpbmRvIGV2ZW50b3MgcGFyYSBxdWUgbyBjb21wb25lbnRlIHBhaSBwb3NzYSByZWFnaXIgYVxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cbiAqXG4gKiBAc2VsZWN0b3IgbGliLXRhYmxlXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxuICogQHN0eWxlVXJsIC4vdGFibGUuY29tcG9uZW50LnNjc3NcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUFJJRURBREVTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiBQUklWQVRFXG4gIHByaXZhdGUgX3BhZ2luYXRpb25JRDogc3RyaW5nO1xuICAvLyAjZW5kcmVnaW9uIFBSSVZBVEVcblxuICAvLyAjcmVnaW9uIFBVQkxJQ1xuXG4gIC8qKiBEZXRlcm1pbmEgc2UgYSB0YWJlbGEgZGV2ZSB1c2FyIHBhZ2luYcOnw6NvLlxuICAgKiBAZGVmYXVsdCB0cnVlICovXG4gIEBJbnB1dCgpIHB1YmxpYyB1c2VQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdsaXN0JywgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIHJlY29yZHNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAvKiogT3DDp8O1ZXMgZGUgY29udGFnZW0gZGUgaXRlbnMgcG9yIHDDoWdpbmEgZGlzcG9uw612ZWlzIHBhcmEgbyB1c3XDoXJpby5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XG5cbiAgLyoqIFBvc2ljaW9uYW1lbnRvIGRvcyBjb250cm9sZXMgZGUgcGFnaW5hw6fDo28uXG4gICAqIEBkZWZhdWx0ICdlbmQnICovXG4gIEBJbnB1dCgncGxhY2VtZW50JykgcHVibGljIHBhZ2luYXRpb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2JldHdlZW4nID0gJ2VuZCc7XG5cbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCh7IGFsaWFzOiAnaGVhZGVycycsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWFkZXJzTGlzdDoge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb2w6IG51bWJlcixcbiAgICBjdXN0b21DbGFzc2VzPzogc3RyaW5nXG4gIH1bXTtcblxuICAvKiogTWVuc2FnZW0gY3VzdG9taXphZGEgcGFyYSBsaXN0YSB2YXppYSAqL1xuICBASW5wdXQoJ2VtcHR5TGlzdE1lc3NhZ2UnKSBwdWJsaWMgZW1wdHlMaXN0TWVzc2FnZT86IHN0cmluZztcblxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSDDqSBhbHRlcmFkby4gKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBhIHDDoWdpbmEgw6kgYWx0ZXJhZGEuICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXG4gIC8qKiBDb250YWRvciBkZSByZWdpc3Ryb3MgKHBvZGUgc2VyIHVzYWRvIHBhcmEgZnV0dXJhcyBpbXBsZW1lbnRhw6fDtWVzIGRlIGzDs2dpY2EgaW50ZXJuYSkuICovXG4gIHB1YmxpYyBjb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIC8qKiBQw6FnaW5hIGF0dWFsIGRhIHRhYmVsYS4gKi9cblx0cHVibGljIHBhZ2U6IG51bWJlciA9IDE7XG5cbiAgLyoqIE7Dum1lcm8gZGUgaXRlbnMgYSBzZXJlbSBleGliaWRvcyBwb3IgcMOhZ2luYS4gKi9cblx0cHVibGljIGl0ZW1zUGVyUGFnZTogbnVtYmVyO1xuXG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwYWdpbmF0aW9uSUQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25JRDsgfVxuICBwdWJsaWMgc2V0IHBhZ2luYXRpb25JRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbklEID0gdmFsdWUgfHwgJ2xpYlRhYmxlUGFnaW5hdGlvbic7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+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+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=
@@ -7,6 +7,9 @@ import * as i4 from "./pipes/search-tree.pipe";
7
7
  export class TreeComponent {
8
8
  constructor() {
9
9
  // #region ==========> PROPERTIES <==========
10
+ // #region PRIVATE
11
+ this._openAll = false;
12
+ // #endregino PRIVATE
10
13
  // #region PUBLIC
11
14
  this.items = [];
12
15
  this.checkbox = false;
@@ -17,6 +20,15 @@ export class TreeComponent {
17
20
  this.search = "";
18
21
  }
19
22
  ngOnInit() { }
23
+ /** Responsável por abrir ou fechar todas as opções sendo exibidas na lista
24
+ * @default false */
25
+ get openAll() { return this._openAll; }
26
+ set openAll(value) {
27
+ this._openAll = value;
28
+ this.items.forEach(elem => {
29
+ elem.expanded = value;
30
+ });
31
+ }
20
32
  // #endregion PUBLIC
21
33
  // #endregion ==========> PROPERTIES <==========
22
34
  // #region ==========> PUBLIC METHODS <==========
@@ -72,7 +84,7 @@ export class TreeComponent {
72
84
  return list.some(this.checked);
73
85
  }
74
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
75
- 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" }, 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"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: i4.SearchTreePipe, name: "TreeFilter" }] }); }
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" }] }); }
76
88
  }
77
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, decorators: [{
78
90
  type: Component,
@@ -83,9 +95,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
83
95
  type: Input
84
96
  }], filter: [{
85
97
  type: Input
98
+ }], openAll: [{
99
+ type: Input
86
100
  }], onSelect: [{
87
101
  type: Output
88
102
  }], onEvent: [{
89
103
  type: Output
90
104
  }] } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RyZWUvdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRL0UsTUFBTSxPQUFPLGFBQWE7SUFDeEI7UUFJQSw2Q0FBNkM7UUFFN0MsaUJBQWlCO1FBQ0QsVUFBSyxHQUFxQixFQUFFLENBQUM7UUFDN0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGFBQVEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxZQUFPLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUQsWUFBTyxHQUFHLENBQUMsSUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUV2RCxXQUFNLEdBQVcsRUFBRSxDQUFDO0lBaEJaLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7SUFlbkIsb0JBQW9CO0lBRXBCLGdEQUFnRDtJQUVoRCxpREFBaUQ7SUFDMUMsUUFBUSxDQUFDLElBQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsS0FBaUIsRUFBRSxJQUFjO1FBQzlDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzlDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUNqRCxDQUFDO2dCQUNELElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUMzQixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO3dCQUN4QyxJQUFJLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwRCxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDbkQsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWlCO1FBQ25DLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUNELG9EQUFvRDtJQUVwRCxrREFBa0Q7SUFFMUMsa0JBQWtCLENBQUMsSUFBZ0I7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOytHQXpFVSxhQUFhO21HQUFiLGFBQWEsMktDUjFCLDB4REFrREssbS9ERDFDUSxhQUFhOzs0RkFBYixhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVU7d0RBWUosS0FBSztzQkFBcEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBRVcsUUFBUTtzQkFBeEIsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmVlSXRlbSB9IGZyb20gXCIuL21vZGVscy90cmVlLWl0ZW1cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC10cmVlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHJlZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHJlZS5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFBST1BFUlRJRVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uIFBVQkxJQ1xuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IFRyZWVJdGVtW10gfCBhbnkgPSBbXTtcbiAgQElucHV0KCkgcHVibGljIGNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHVibGljIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25FdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBjaGVja2VkID0gKGl0ZW06IFRyZWVJdGVtKSA9PiBpdGVtLmlzX3NlbGVjdGVkID09IHRydWU7XG5cbiAgcHVibGljIHNlYXJjaDogc3RyaW5nID0gXCJcIjtcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BFUlRJRVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFBVQkxJQyBNRVRIT0RTIDw9PT09PT09PT09XG4gIHB1YmxpYyBvbkV4cGFuZChpdGVtOiBUcmVlSXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICBpdGVtLmV4cGFuZGVkID0gIWl0ZW0uZXhwYW5kZWQ7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGVjayhpdGVtczogVHJlZUl0ZW1bXSwgaXRlbTogVHJlZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5oYXNfY2hpbGRyZW4pIHtcbiAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoZmlyc3ROb2RlKSA9PiB7XG4gICAgICAgIGlmIChmaXJzdE5vZGUuaXNfc2VsZWN0ZWQgIT0gaXRlbS5pc19zZWxlY3RlZCkge1xuICAgICAgICAgIGZpcnN0Tm9kZS5pc19zZWxlY3RlZCA9ICFmaXJzdE5vZGUuaXNfc2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0Tm9kZS5oYXNfY2hpbGRyZW4pIHtcbiAgICAgICAgICBmaXJzdE5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoc2Vjb25kTm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlY29uZE5vZGUuaXNfc2VsZWN0ZWQgIT0gZmlyc3ROb2RlLmlzX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIHNlY29uZE5vZGUuaXNfc2VsZWN0ZWQgPSAhc2Vjb25kTm9kZS5pc19zZWxlY3RlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVDaGVjayhpdGVtcykpIHtcbiAgICAgIHRoaXMub25TZWxlY3QuZW1pdCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmluZGV0ZXJtaW5hdGVDaGVjayhpdGVtcykpIHtcbiAgICAgIHRoaXMub25TZWxlY3QuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tFdmVudChpdGVtczogVHJlZUl0ZW1bXSkge1xuICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVDaGVjayhpdGVtcykpIHtcbiAgICAgIHRoaXMub25FdmVudC5lbWl0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFVCTElDIE1FVEhPRFMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFBSSVZBVEUgTUVUSE9EUyA8PT09PT09PT09PVxuXG4gIHByaXZhdGUgaW5kZXRlcm1pbmF0ZUNoZWNrKGxpc3Q6IFRyZWVJdGVtW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGlzdC5zb21lKHRoaXMuY2hlY2tlZCk7XG4gIH1cblxuICAvLyBwcml2YXRlIGFsbENoZWNrKGxpc3Q6IFRyZWVJdGVtW10pOiBib29sZWFuIHtcbiAgLy8gICByZXR1cm4gbGlzdC5ldmVyeSh0aGlzLmNoZWNrZWQpO1xuICAvLyB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFJJVkFURSBNRVRIT0RTIDw9PT09PT09PT09XG59XG4iLCI8IS0tIEZJTFRFUiAtLT5cbjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJmaWx0ZXJcIj5cbiAgPCEtLSA8YXBwLXNlYXJjaC1maWx0ZXJzPjwvYXBwLXNlYXJjaC1maWx0ZXJzPiAtLT5cblxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZ2xiLXNlYXJjaC1pbnB1dCBteS0zXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHNlYXJjaCBweC0yIGdsYi1iZy1jb2xvci13aGl0ZVwiPlxuICAgICAgPGFwcC1zdmctc3RvcmFnZSBzdmdOYW1lPVwic2VhcmNoXCIgc3ZnQ29sb3I9XCJncmF5XCIgc3ZnU2l6ZT1cIm1lZGl1bS1zbWFsbFwiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPjwvYXBwLXN2Zy1zdG9yYWdlPlxuICAgIDwvc3Bhbj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBib3JkZXItbGVmdC1ub25lIHBzLTBcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFwiPlxuICA8L2Rpdj5cbiAgXG48L25nLXRlbXBsYXRlPlxuPCEtLSBUUkVFIC0tPlxuPHVsIGNsYXNzPVwidHJlZS12aWV3XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBUcmVlRmlsdGVyIDogc2VhcmNoOyBpbmRleCBhcyBpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBweS0xXCIgW2NsYXNzXT1cIiFpdGVtLmhhc19jaGlsZHJlbiA/ICdjaGlsZHJlbicgOiBudWxsIFwiPlxuICAgICAgPGFwcC1zdmctc3RvcmFnZVxuICAgICAgICBjbGFzcz1cImNoZXZyb25cIlxuICAgICAgICAqbmdJZj1cIml0ZW0uaGFzX2NoaWxkcmVuXCJcbiAgICAgICAgW2NsYXNzXT1cIml0ZW0uYXBsaWNDbGFzcyA/ICdyb3RhdGUnIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICBvbkV4cGFuZChpdGVtKTtcbiAgICAgICAgICBpdGVtLmFwbGljQ2xhc3MgPyAoaXRlbS5hcGxpY0NsYXNzID0gZmFsc2UpIDogKGl0ZW0uYXBsaWNDbGFzcyA9IHRydWUpXG4gICAgICAgIFwiXG4gICAgICAgIHN2Z1NpemU9XCJtZWRpdW0tc21hbGxcIlxuICAgICAgICBzdmdOYW1lPVwiY2hldnJvbi1yaWdodFwiXG4gICAgICA+PC9hcHAtc3ZnLXN0b3JhZ2U+XG4gICAgICA8IS0tIENIRUNLQk9YIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImNoZWNrYm94XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG0tMCBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwib25DaGVja0V2ZW50KGl0ZW1zKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrKGl0ZW1zLCBpdGVtKVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmlzX3NlbGVjdGVkXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBtYi0wIG1zLTJcIj57eyBpdGVtLmxhYmVsIH19PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIE5PREVTIC0tPlxuICAgIDx1bCAqbmdJZj1cIml0ZW0uZXhwYW5kZWRcIj5cbiAgICAgIDxhcHAtdHJlZVxuICAgICAgICAob25TZWxlY3QpPVwiaXRlbS5pc19zZWxlY3RlZCA9ICRldmVudFwiXG4gICAgICAgIChvbkV2ZW50KT1cIml0ZW0uaXNfc2VsZWN0ZWQgPSAkZXZlbnRcIlxuICAgICAgICBbaXRlbXNdPVwiaXRlbS5jaGlsZHJlblwiXG4gICAgICAgIFtjaGVja2JveF09XCJjaGVja2JveFwiXG4gICAgICA+PC9hcHAtdHJlZT5cbiAgICA8L3VsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdWw+Il19
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==
@@ -1200,6 +1200,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1200
1200
  class TreeComponent {
1201
1201
  constructor() {
1202
1202
  // #region ==========> PROPERTIES <==========
1203
+ // #region PRIVATE
1204
+ this._openAll = false;
1205
+ // #endregino PRIVATE
1203
1206
  // #region PUBLIC
1204
1207
  this.items = [];
1205
1208
  this.checkbox = false;
@@ -1210,6 +1213,15 @@ class TreeComponent {
1210
1213
  this.search = "";
1211
1214
  }
1212
1215
  ngOnInit() { }
1216
+ /** Responsável por abrir ou fechar todas as opções sendo exibidas na lista
1217
+ * @default false */
1218
+ get openAll() { return this._openAll; }
1219
+ set openAll(value) {
1220
+ this._openAll = value;
1221
+ this.items.forEach(elem => {
1222
+ elem.expanded = value;
1223
+ });
1224
+ }
1213
1225
  // #endregion PUBLIC
1214
1226
  // #endregion ==========> PROPERTIES <==========
1215
1227
  // #region ==========> PUBLIC METHODS <==========
@@ -1265,7 +1277,7 @@ class TreeComponent {
1265
1277
  return list.some(this.checked);
1266
1278
  }
1267
1279
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1268
- 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" }, 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"], outputs: ["onSelect", "onEvent"] }, { kind: "pipe", type: SearchTreePipe, name: "TreeFilter" }] }); }
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" }] }); }
1269
1281
  }
1270
1282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, decorators: [{
1271
1283
  type: Component,
@@ -1276,6 +1288,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1276
1288
  type: Input
1277
1289
  }], filter: [{
1278
1290
  type: Input
1291
+ }], openAll: [{
1292
+ type: Input
1279
1293
  }], onSelect: [{
1280
1294
  type: Output
1281
1295
  }], onEvent: [{
@@ -3057,6 +3071,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3057
3071
  * @styleUrl ./table.component.scss
3058
3072
  */
3059
3073
  class TableComponent {
3074
+ /** Informa um ID para a paginação da tabela específica. Deve ser utilizada em caso de múltiplas tabelas na mesma tela. */
3060
3075
  get paginationID() { return this._paginationID; }
3061
3076
  set paginationID(value) {
3062
3077
  this._paginationID = value || 'libTablePagination';
@@ -3074,6 +3089,10 @@ class TableComponent {
3074
3089
  /** Posicionamento dos controles de paginação.
3075
3090
  * @default 'end' */
3076
3091
  this.paginationPlacement = 'end';
3092
+ /** Informa se o counter de registros deve aparecer ou não.
3093
+ * @default true
3094
+ */
3095
+ this.showCounter = true;
3077
3096
  /** Evento emitido quando o número de itens por página é alterado. */
3078
3097
  this.itemsPerPageChange = new EventEmitter();
3079
3098
  /** Evento emitido quando a página é alterada. */
@@ -3124,7 +3143,7 @@ class TableComponent {
3124
3143
  }
3125
3144
  }
3126
3145
  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 }); }
3127
- 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", 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"] }] }); }
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"] }] }); }
3128
3147
  }
3129
3148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
3130
3149
  type: Component,
@@ -3146,12 +3165,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3146
3165
  }], emptyListMessage: [{
3147
3166
  type: Input,
3148
3167
  args: ['emptyListMessage']
3168
+ }], showCounter: [{
3169
+ type: Input,
3170
+ args: ['showCounter']
3171
+ }], paginationID: [{
3172
+ type: Input
3149
3173
  }], itemsPerPageChange: [{
3150
3174
  type: Output
3151
3175
  }], pageChange: [{
3152
3176
  type: Output
3153
- }], paginationID: [{
3154
- type: Input
3155
3177
  }] } });
3156
3178
 
3157
3179
  /**