ngx-sp-infra 2.1.11 → 2.1.12

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.
@@ -39,7 +39,6 @@ export class TableComponent {
39
39
  get lastItemOfPage() {
40
40
  return Math.min(this.page * this.itemsPerPage, this.recordsList?.length ?? 0);
41
41
  }
42
- // Exemplo de string com a contagem:
43
42
  get itemsDisplayText() {
44
43
  if (this.recordsList && this.recordsList.length === 0) {
45
44
  return `Exibindo ${this.recordsList?.length ?? 0} registros`;
@@ -55,6 +54,9 @@ export class TableComponent {
55
54
  this._currentItemsPerPage = 0;
56
55
  // #endregion PRIVATE
57
56
  // #region PUBLIC
57
+ this.selection = false;
58
+ /** Determina se haverá uma coluna inicial para seleção de registros na tabela. */
59
+ this.useSelection = false;
58
60
  /** Determina se a tabela deve usar paginação.
59
61
  * @default true */
60
62
  this.usePagination = true;
@@ -62,13 +64,14 @@ export class TableComponent {
62
64
  * @default 'end' */
63
65
  this.paginationPlacement = 'end';
64
66
  /** Informa se o counter de registros deve aparecer ou não.
65
- * @default true
66
- */
67
+ * @default true */
67
68
  this.showCounter = true;
68
69
  /** Evento emitido quando o número de itens por página é alterado. */
69
70
  this.itemsPerPageChange = new EventEmitter();
70
71
  /** Evento emitido quando a página é alterada. */
71
72
  this.pageChange = new EventEmitter();
73
+ /** Evento emitido quando o checkbox de seleção se alterar. */
74
+ this.selectionChange = new EventEmitter();
72
75
  //#region Ordering, Sorting ou apenas Ordenação
73
76
  /** Método que faz a ordenação dos contratos na tela de listagem, em cada uma das células do cabeçalho da tabela, onde cada um
74
77
  * dos elementos <th> representa uma coluna, de acordo com a lista de contratos que retorna do backend. */
@@ -88,7 +91,7 @@ export class TableComponent {
88
91
  /** Monitora as mudanças nas entradas do componente e realiza ajustes, como resetar a paginação ou validar o layout das colunas.
89
92
  * @param changes Objeto que contém as mudanças nas entradas do componente. */
90
93
  ngOnChanges(changes) {
91
- if (changes['recordsList'].currentValue) {
94
+ if (changes['recordsList'] && changes['recordsList'].currentValue) {
92
95
  this.resetPagination(this.recordsList ?? []);
93
96
  this.updateCounterInfo();
94
97
  }
@@ -179,12 +182,16 @@ export class TableComponent {
179
182
  return path.reduce((value, property) => value ? value[property] : '', obj);
180
183
  }
181
184
  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 }); }
182
- 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) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\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"] }, { kind: "component", type: i4.OrderingComponent, selector: "app-ordering", inputs: ["isColumnClicked", "sortDirection", "sortAttributes"], outputs: ["sortDirectionChange", "sortChange"] }] }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { selection: "selection", useSelection: "useSelection", 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", selectionChange: "selectionChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngIf=\"useSelection\" >\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"tableCheckAll\" [(ngModel)]=\"selection\" (ngModelChange)=\"selectionChange.emit($event)\">\r\n </div>\r\n </th>\r\n\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\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: "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.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i4.OrderingComponent, selector: "app-ordering", inputs: ["isColumnClicked", "sortDirection", "sortAttributes"], outputs: ["sortDirectionChange", "sortChange"] }] }); }
183
186
  }
184
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
185
188
  type: Component,
186
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\n"] }]
187
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
189
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngIf=\"useSelection\" >\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"tableCheckAll\" [(ngModel)]=\"selection\" (ngModelChange)=\"selectionChange.emit($event)\">\r\n </div>\r\n </th>\r\n\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\n"] }]
190
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { selection: [{
191
+ type: Input
192
+ }], useSelection: [{
193
+ type: Input
194
+ }], usePagination: [{
188
195
  type: Input
189
196
  }], recordsList: [{
190
197
  type: Input,
@@ -210,5 +217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
210
217
  type: Output
211
218
  }], pageChange: [{
212
219
  type: Output
220
+ }], selectionChange: [{
221
+ type: Output
213
222
  }] } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUzSTs7Ozs7Ozs7Ozs7O0VBWUU7QUFNRixNQUFNLE9BQU8sY0FBYztJQW1CekI7bUJBQ2U7SUFDZixJQUNXLFdBQVcsS0FBd0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFXLFdBQVcsQ0FBQyxLQUF3QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQWtDL0UsMEhBQTBIO0lBQzFILElBQ1csWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztJQUNyRCxDQUFDO0lBU0QsOEJBQThCO0lBQy9CLElBQVcsSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBVyxJQUFJLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RCxtREFBbUQ7SUFDbkQsSUFBVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQVcsWUFB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QTJEO0lBQ25ELFdBQVcsQ0FBQyxHQUFRLEVBQUUsSUFBdUI7UUFDcEQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDOytHQXRPVyxjQUFjO21HQUFkLGNBQWMsdWRDcEIzQixnd0hBMEVBOzs0RkR0RGEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXO3NGQW9CTCxhQUFhO3NCQUE1QixLQUFLO2dCQU1LLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2hCLFlBQVk7c0JBQW5DLEtBQUs7dUJBQUMsUUFBUTtnQkFLWSxtQkFBbUI7c0JBQTdDLEtBQUs7dUJBQUMsV0FBVztnQkFLa0MsV0FBVztzQkFBOUQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFVVCxnQkFBZ0I7c0JBQWpELEtBQUs7dUJBQUMsa0JBQWtCO2dCQU1JLFdBQVc7c0JBQXZDLEtBQUs7dUJBQUMsYUFBYTtnQkFLVCxZQUFZO3NCQUR0QixLQUFLO2dCQVFXLGtCQUFrQjtzQkFBbEMsTUFBTTtnQkFHVSxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcclxuICpcclxuICogTyBgVGFibGVDb21wb25lbnRgIMOpIHVtIGNvbXBvbmVudGUgQW5ndWxhciBwcm9qZXRhZG8gcGFyYSBleGliaXIgdW1hIHRhYmVsYSBjdXN0b21pesOhdmVsXHJcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cclxuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxyXG4gKiBwYXJhIGFqdXN0YXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMgZSBlbWl0aW5kbyBldmVudG9zIHBhcmEgcXVlIG8gY29tcG9uZW50ZSBwYWkgcG9zc2EgcmVhZ2lyIGFcclxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cclxuICpcclxuICogQHNlbGVjdG9yIGxpYi10YWJsZVxyXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxyXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xyXG4qL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQUklWQVRFXHJcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIF9jdXJyZW50SXRlbXNQZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxyXG5cclxuICAvLyAjcmVnaW9uIFBVQkxJQ1xyXG5cclxuICAvKiogRGV0ZXJtaW5hIHNlIGEgdGFiZWxhIGRldmUgdXNhciBwYWdpbmHDp8Ojby5cclxuICAgKiBAZGVmYXVsdCB0cnVlICovXHJcbiAgQElucHV0KCkgcHVibGljIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBcclxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnbGlzdCcsIHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIGdldCByZWNvcmRzTGlzdCgpOiBhbnlbXSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yZWNvcmRzTGlzdDsgfVxyXG4gIHB1YmxpYyBzZXQgcmVjb3Jkc0xpc3QodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7IHRoaXMuX3JlY29yZHNMaXN0ID0gdmFsdWU7IH1cclxuXHJcblxyXG4gIC8qKiBPcMOnw7VlcyBkZSBjb250YWdlbSBkZSBpdGVucyBwb3IgcMOhZ2luYSBkaXNwb27DrXZlaXMgcGFyYSBvIHVzdcOhcmlvLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XHJcblxyXG5cclxuICAvKiogUG9zaWNpb25hbWVudG8gZG9zIGNvbnRyb2xlcyBkZSBwYWdpbmHDp8Ojby5cclxuICAgKiBAZGVmYXVsdCAnZW5kJyAqL1xyXG4gIEBJbnB1dCgncGxhY2VtZW50JykgcHVibGljIHBhZ2luYXRpb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2JldHdlZW4nID0gJ2VuZCc7XHJcblxyXG5cclxuICAvKiogTGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYSwgaW5jbHVpbmRvIG8gbm9tZSwgYSBsYXJndXJhIGRhIGNvbHVuYSBlIGNsYXNzZXMgY3VzdG9taXphZGFzLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnaGVhZGVycycsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWFkZXJzTGlzdDoge1xyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgY29sPzogbnVtYmVyLFxyXG4gICAgd2lkdGhDbGFzcz86IHN0cmluZyxcclxuICAgIGN1c3RvbUNsYXNzZXM/OiBzdHJpbmcsXHJcbiAgICBvcmRlckNvbHVtbj86IHN0cmluZ1xyXG4gIH1bXTtcclxuXHJcblxyXG4gIC8qKiBNZW5zYWdlbSBjdXN0b21pemFkYSBwYXJhIGxpc3RhIHZhemlhICovXHJcbiAgQElucHV0KCdlbXB0eUxpc3RNZXNzYWdlJykgcHVibGljIGVtcHR5TGlzdE1lc3NhZ2U/OiBzdHJpbmc7XHJcblxyXG5cclxuICAvKiogSW5mb3JtYSBzZSBvIGNvdW50ZXIgZGUgcmVnaXN0cm9zIGRldmUgYXBhcmVjZXIgb3UgbsOjby5cclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKi9cclxuICBASW5wdXQoJ3Nob3dDb3VudGVyJykgcHVibGljIHNob3dDb3VudGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gIC8qKiBJbmZvcm1hIHVtIElEIHBhcmEgYSBwYWdpbmHDp8OjbyBkYSB0YWJlbGEgZXNwZWPDrWZpY2EuIERldmUgc2VyIHV0aWxpemFkYSBlbSBjYXNvIGRlIG3Dumx0aXBsYXMgdGFiZWxhcyBuYSBtZXNtYSB0ZWxhLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwYWdpbmF0aW9uSUQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25JRDsgfVxyXG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbklEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BhZ2luYXRpb25JRCA9IHZhbHVlIHx8ICdsaWJUYWJsZVBhZ2luYXRpb24nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gbyBuw7ptZXJvIGRlIGl0ZW5zIHBvciBww6FnaW5hIMOpIGFsdGVyYWRvLiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIGEgcMOhZ2luYSDDqSBhbHRlcmFkYS4gKi9cclxuICBAT3V0cHV0KCkgcHVibGljIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBQw6FnaW5hIGF0dWFsIGRhIHRhYmVsYS4gKi9cclxuXHRwdWJsaWMgZ2V0IHBhZ2UoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlOyB9XHJcblx0cHVibGljIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHsgdGhpcy5fY3VycmVudFBhZ2UgPSB2YWx1ZTsgfVxyXG5cclxuICAvKiogTsO6bWVybyBkZSBpdGVucyBhIHNlcmVtIGV4aWJpZG9zIHBvciBww6FnaW5hLiAqL1xyXG4gIHB1YmxpYyBnZXQgaXRlbXNQZXJQYWdlKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9jdXJyZW50SXRlbXNQZXJQYWdlOyB9XHJcblx0cHVibGljIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikgeyB0aGlzLl9jdXJyZW50SXRlbXNQZXJQYWdlID0gdmFsdWU7IH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXQgZmlyc3RJdGVtT2ZQYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMucGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2UgKyAxO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxhc3RJdGVtT2ZQYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy5wYWdlICogdGhpcy5pdGVtc1BlclBhZ2UsIHRoaXMucmVjb3Jkc0xpc3Q/Lmxlbmd0aCA/PyAwKTtcclxuICB9XHJcblxyXG4gIC8vIEV4ZW1wbG8gZGUgc3RyaW5nIGNvbSBhIGNvbnRhZ2VtOlxyXG4gIHB1YmxpYyBnZXQgaXRlbXNEaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMucmVjb3Jkc0xpc3QgJiYgdGhpcy5yZWNvcmRzTGlzdC5sZW5ndGggPT09IDApIHsgcmV0dXJuIGBFeGliaW5kbyAke3RoaXMucmVjb3Jkc0xpc3Q/Lmxlbmd0aCA/PyAwfSByZWdpc3Ryb3NgOyB9XHJcbiAgICByZXR1cm4gYEV4aWJpbmRvICR7IHRoaXMuY291bnRPcHRpb25zID8gdGhpcy5maXJzdEl0ZW1PZlBhZ2UrXCItXCIrdGhpcy5sYXN0SXRlbU9mUGFnZSArIFwiIGRlXCIgOiBcIlwiIH0gJHt0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMH0gcmVnaXN0cm9zYDtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaGVhZGVyc1VzZU9sZFdpZHRoPzogYm9vbGVhbjtcclxuICAvLyAjZW5kcmVnaW9uIFBVQkxJQ1xyXG5cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BSSUVEQURFUyA8PT09PT09PT09PVxyXG5cclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXJJbmZvKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlSGVhZGVycygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cclxuICB9XHJcblxyXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgT2JqZXRvIHF1ZSBjb250w6ltIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZS4gKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24odGhpcy5yZWNvcmRzTGlzdCA/PyBbXSk7XHJcbiAgICAgIHRoaXMudXBkYXRlQ291bnRlckluZm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snaGVhZGVyc0xpc3QnXSkgeyB0aGlzLnZhbGlkYXRlSGVhZGVycygpOyB9XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxyXG4gIHByaXZhdGUgdmFsaWRhdGVIZWFkZXJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGhlYWRlcnNVc2VPbGRXaWR0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyc0xpc3QuZXZlcnkoaGVhZGVyID0+IGhlYWRlci5jb2wgJiYgaGVhZGVyLmNvbCAhPSB1bmRlZmluZWQpO1xyXG4gICAgXHJcbiAgICBsZXQgaGVhZGVyc1VzZUNvbDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyc0xpc3QuZXZlcnkoaGVhZGVyID0+IGhlYWRlci53aWR0aENsYXNzICYmIGhlYWRlci53aWR0aENsYXNzLmluY2x1ZGVzKCdjb2wtJykpO1xyXG4gICAgbGV0IGhlYWRlcnNVc2VQZXJjZW50OiBib29sZWFuID0gdGhpcy5oZWFkZXJzTGlzdC5ldmVyeShoZWFkZXIgPT4gaGVhZGVyLndpZHRoQ2xhc3MgJiYgaGVhZGVyLndpZHRoQ2xhc3MuaW5jbHVkZXMoJ3ctJykpO1xyXG5cclxuICAgIGlmIChoZWFkZXJzVXNlT2xkV2lkdGgpIHsgdGhpcy5oZWFkZXJzVXNlT2xkV2lkdGggPSB0cnVlOyB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJzVXNlT2xkV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghaGVhZGVyc1VzZUNvbCAmJiAhaGVhZGVyc1VzZVBlcmNlbnQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBsYXJndXJhIGRhcyBjb2x1bmFzIGVzdMOhIGVtIHVtIGZvcm1hdG8gaW52w6FsaWRvLiBDZXJ0aWZpcXVlLXNlIHF1ZSB0b2RhcyBlbGFzIHV0aWxpemFtIGFwZW5hcyAnY29sLScgb3UgJ3ctJ1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ291bnRlckluZm8oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRzTGlzdCAmJiB0aGlzLnNob3dDb3VudGVyICYmIHRoaXMudXNlUGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHRoaXMuY291bnRPcHRpb25zID8gdGhpcy5jb3VudE9wdGlvbnNbMF0gOiB0aGlzLnJlY29yZHNMaXN0Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCF0aGlzLnJlY29yZHNMaXN0ICYmIHRoaXMuc2hvd0NvdW50ZXIgJiYgdGhpcy51c2VQYWdpbmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogTW9kaWZpY2EgYSBxdWFudGlkYWRlIGRlIGl0ZW5zIGEgc2VyIG1vc3RyYWRhIG5hIGxpc3RhLlxyXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xyXG4gIHB1YmxpYyBvblNlbGVjdENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSwgMTApO1xyXG4gICAgdGhpcy5wYWdlID0gMTtcclxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMucGFnZSk7XHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXNldGEgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSBjb20gYmFzZSBubyBuw7ptZXJvIGF0dWFsIGRlIHJlZ2lzdHJvcy5cclxuICAgKiBAcGFyYW0gbGlzdCBMaXN0YSBkZSByZWdpc3Ryb3MgcGFyYSByZXNldGFyIGEgcGFnaW5hw6fDo28uICovXHJcbiAgcHVibGljIHJlc2V0UGFnaW5hdGlvbihsaXN0OiBhbnlbXSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xyXG4gICAgaWYgKGxpc3QubGVuZ3RoIDw9IHN0YXJ0SW5kZXgpIHRoaXMucGFnZSA9IDE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cdC8vI3JlZ2lvbiBPcmRlcmluZywgU29ydGluZyBvdSBhcGVuYXMgT3JkZW5hw6fDo29cclxuXHJcblx0LyoqIE3DqXRvZG8gcXVlIGZheiBhIG9yZGVuYcOnw6NvIGRvcyBjb250cmF0b3MgbmEgdGVsYSBkZSBsaXN0YWdlbSwgZW0gY2FkYSB1bWEgZGFzIGPDqWx1bGFzIGRvIGNhYmXDp2FsaG8gZGEgdGFiZWxhLCBvbmRlIGNhZGEgdW0gIFxyXG5cdCAqICBkb3MgZWxlbWVudG9zIDx0aD4gcmVwcmVzZW50YSB1bWEgY29sdW5hLCBkZSBhY29yZG8gY29tIGEgbGlzdGEgZGUgY29udHJhdG9zIHF1ZSByZXRvcm5hIGRvIGJhY2tlbmQuICovXHJcblx0Ly8gT2JqZXRvIHBhcmEgYXJtYXplbmFyIGEgZGlyZcOnw6NvIGRlIG9yZGVuYcOnw6NvIGRlIGNhZGEgY29sdW5hXHJcblx0cHVibGljIHNvcnREaXJlY3Rpb246IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcblx0Ly8gQ29sdW5hIGF0dWFsbWVudGUgc2VsZWNpb25hZGEgcGFyYSBvcmRlbmHDp8Ojb1xyXG5cdHB1YmxpYyBjdXJyZW50U29ydENvbHVtbjogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8vIEZ1bsOnw6NvIGNoYW1hZGEgcXVhbmRvIG9jb3JyZSB1bWEgbXVkYW7Dp2EgbmEgb3JkZW5hw6fDo29cclxuXHRvblNvcnRDaGFuZ2UoZXZlbnQ6IHsgZGlyZWN0aW9uOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nIH0pIHtcclxuXHRcdGNvbnN0IHsgZGlyZWN0aW9uLCBjb2x1bW4gfSA9IGV2ZW50O1xyXG5cclxuXHRcdC8vIFZlcmlmaWNhIHNlIGEgY29sdW5hIGF0dWFsbWVudGUgc2VsZWNpb25hZGEgw6kgYSBtZXNtYSBkYSBub3ZhIHNlbGXDp8Ojb1xyXG5cdFx0aWYgKHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xyXG5cdFx0XHQvLyBBbHRlcm5hIGVudHJlICdhc2MnIGUgJ2Rlc2MnIHBhcmEgYSBkaXJlw6fDo28gZGUgb3JkZW5hw6fDo28gZGEgY29sdW5hXHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbltjb2x1bW5dID0gdGhpcy5zb3J0RGlyZWN0aW9uW2NvbHVtbl0gPT09ICdhc2MnID8gJ2FzYycgOiAnZGVzYyc7XHJcblx0XHR9XHJcbiAgICBlbHNlIHtcclxuXHRcdFx0Ly8gRGVmaW5lIGEgbm92YSBjb2x1bmEgZSBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBjb21vICdhc2MnXHJcblx0XHRcdHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHsgW2NvbHVtbl06ICdhc2MnIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVhbGl6YSBhIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRcdHRoaXMuc29ydERhdGEoKTtcclxuXHR9XHJcblxyXG5cdC8vIEZ1bsOnw6NvIGRlIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRwcml2YXRlIHNvcnREYXRhKCkge1xyXG5cdFx0aWYgKHRoaXMucmVjb3Jkc0xpc3QpIHtcclxuXHRcdFx0Y29uc3QgZ3J1cG9zTGlzdCA9IHRoaXMucmVjb3Jkc0xpc3Q7XHJcblxyXG5cdFx0XHRncnVwb3NMaXN0LnNvcnQoKGEsIGIpID0+IHtcclxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uO1xyXG5cdFx0XHRcdGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvblthdHRyaWJ1dGVdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlUHJvcGVydGllcyhhLCBiLCBhdHRyaWJ1dGUsIGRpcmVjdGlvbik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ29tcGFyYSBvcyB2YWxvcmVzIGRhcyBwcm9wcmllZGFkZXMgZW50cmUgZG9pcyBvYmpldG9zXHJcblx0cHJpdmF0ZSBjb21wYXJlUHJvcGVydGllcyhhOiBhbnksIGI6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHByb3BlcnR5QSA9IHRoaXMuZ2V0UHJvcGVydHkoYSwgYXR0cmlidXRlKS50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0Y29uc3QgcHJvcGVydHlCID0gdGhpcy5nZXRQcm9wZXJ0eShiLCBhdHRyaWJ1dGUpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0aWYgKHByb3BlcnR5QSA8IHByb3BlcnR5QikgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XHJcblx0XHRpZiAocHJvcGVydHlBID4gcHJvcGVydHlCKSByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcclxuXHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdC8vIE9idMOpbSBvIHZhbG9yIGRlIHVtYSBwcm9wcmllZGFkZSBlc3BlY8OtZmljYSBkZSB1bSBvYmpldG9cclxuXHRwcml2YXRlIGdldFByb3BlcnR5KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XHJcblx0XHRpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5zcGxpdCgnLicpO1xyXG5cdFx0cmV0dXJuIHBhdGgucmVkdWNlKCh2YWx1ZSwgcHJvcGVydHkpID0+IHZhbHVlID8gdmFsdWVbcHJvcGVydHldIDogJycsIG9iaik7XHJcblx0fVxyXG5cdC8vI2VuZHJlZ2lvbiBPcmRlcmluZywgU29ydGluZyBvdSBhcGVuYXMgT3JkZW5hw6fDo29cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBVVElMSVTDgVJJT1MgPD09PT09PT09PT1cclxuXHJcbn1cclxuIiwiQGlmIChyZWNvcmRzTGlzdCkge1xyXG4gICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCB3LTEwMCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICA8IS0tIEV4aWJlIG8gbsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZSBvIHRvdGFsIGRlIHJlZ2lzdHJvcyAtLT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzaG93Q291bnRlclwiIGNsYXNzPVwibXMtMVwiPiB7eyBpdGVtc0Rpc3BsYXlUZXh0IH19IDwvc3Bhbj5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gQ29udGFpbmVyIGRhIHRhYmVsYSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1ib3R0b20tMCByb3VuZGVkLWJvdHRvbSByb3VuZGVkXCI+XHJcbiAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIGJvcmRlciBtYi0wXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEl0ZXJhIHNvYnJlIGEgbGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBjcmlhciBhcyBjb2x1bmFzIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiBoZWFkZXJzTGlzdFwiIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1kYXJrLWdyZXkge3sgaGVhZGVyLmN1c3RvbUNsYXNzZXMgfX1cclxuICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyc1VzZU9sZFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbCAmJiBoZWFkZXIuY29sID4gMCA/ICdjb2wtJytoZWFkZXIuY29sIDogJ2NvbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXIud2lkdGhDbGFzcyB9fVwiID5cclxuICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLm5hbWUgfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIDxhcHAtb3JkZXJpbmcgKm5nSWY9XCJoZWFkZXIub3JkZXJDb2x1bW5cIiBbKHNvcnREaXJlY3Rpb24pXT1cInNvcnREaXJlY3Rpb25baGVhZGVyLm9yZGVyQ29sdW1uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSh7IGRpcmVjdGlvbjogJGV2ZW50LmRpcmVjdGlvbiwgY29sdW1uOiBoZWFkZXIub3JkZXJDb2x1bW4gfSlcIj48L2FwcC1vcmRlcmluZz5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLWxpZ2h0IGZhZGUtaW4tcm93XCI+XHJcbiAgICAgICAgICAgICAgIEBpZiAocmVjb3Jkc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICA8IS0tIENvbnRlw7pkbyBkYXMgbGluaGFzIGRhIHRhYmVsYSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lubmVyUm93c11cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8IS0tIE1lbnNhZ2VtIGRlIGF1c8OqbmNpYSBkZSByZWdpc3Ryb3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMlwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRleHQtY2VudGVyIHAtNCB0ZXh0LWRhcmstZ3JleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgZW1wdHlMaXN0TWVzc2FnZSA/IGVtcHR5TGlzdE1lc3NhZ2UgOiBcIk7Do28gaMOhIGRhZG9zIHBhcmEgc2VyZW0gbGlzdGFkb3MuXCIgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICA8IS0tICNyZWdpb24gUEFHSU5Bw4fDg08gLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VQYWdpbmF0aW9uICYmIHJlY29yZHNMaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImQtZmxleCBtdC0yXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LXN0YXJ0JzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LWNlbnRlcic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnZW5kJyxcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnYmV0d2VlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiBJdGVucyBwb3IgcMOhZ2luYSA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3Qgc2VsZWN0LXNlYXJjaFwiIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudCBvZiBjb3VudE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY291bnRPcHRpb25zLmxlbmd0aCA+IDAgJiYgaSA9PSAwXCI+e3sgY291bnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDb250cm9sZSBkZSBwYWdpbmHDp8OjbyAtLT5cclxuICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgW2lkXT1cInBhZ2luYXRpb25JRFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwic3AtcGFnaW5hdGlvbiBtdC0zXCJcclxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICBwcmV2aW91c0xhYmVsPVwiwqsmbmJzcDsmbmJzcDsmbmJzcDtcIiBuZXh0TGFiZWw9XCImbmJzcDsmbmJzcDsmbmJzcDvCu1wiXHJcbiAgICAgICAgICAgICAgIFttYXhTaXplXT1cIjVcIj5cclxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxyXG4gICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPiA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkNhcnJlZ2FuZG8gaW5mb3JtYcOnw7Vlcy4uLjwvc3Bhbj4gPC9kaXY+XHJcbiAgIDwvZGl2PlxyXG59XHJcbiJdfQ==
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUzSTs7Ozs7Ozs7Ozs7O0VBWUU7QUFNRixNQUFNLE9BQU8sY0FBYztJQXVCekI7bUJBQ2U7SUFDZixJQUNXLFdBQVcsS0FBd0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFXLFdBQVcsQ0FBQyxLQUF3QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQTJCL0UsMEhBQTBIO0lBQzFILElBQ1csWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztJQUNyRCxDQUFDO0lBYUQsOEJBQThCO0lBQy9CLElBQVcsSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBVyxJQUFJLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RCxtREFBbUQ7SUFDbkQsSUFBVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQVcsWUFB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QkFBMUIsTUFBTTtnQkFHVSxlQUFlO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcclxuICpcclxuICogTyBgVGFibGVDb21wb25lbnRgIMOpIHVtIGNvbXBvbmVudGUgQW5ndWxhciBwcm9qZXRhZG8gcGFyYSBleGliaXIgdW1hIHRhYmVsYSBjdXN0b21pesOhdmVsXHJcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cclxuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxyXG4gKiBwYXJhIGFqdXN0YXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMgZSBlbWl0aW5kbyBldmVudG9zIHBhcmEgcXVlIG8gY29tcG9uZW50ZSBwYWkgcG9zc2EgcmVhZ2lyIGFcclxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cclxuICpcclxuICogQHNlbGVjdG9yIGxpYi10YWJsZVxyXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxyXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xyXG4qL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQUklWQVRFXHJcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIF9jdXJyZW50SXRlbXNQZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxyXG5cclxuICAvLyAjcmVnaW9uIFBVQkxJQ1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcblxyXG4gIC8qKiBEZXRlcm1pbmEgc2UgaGF2ZXLDoSB1bWEgY29sdW5hIGluaWNpYWwgcGFyYSBzZWxlw6fDo28gZGUgcmVnaXN0cm9zIG5hIHRhYmVsYS4gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdXNlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBEZXRlcm1pbmEgc2UgYSB0YWJlbGEgZGV2ZSB1c2FyIHBhZ2luYcOnw6NvLlxyXG4gICAqIEBkZWZhdWx0IHRydWUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdXNlUGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqIExpc3RhIGRlIHJlZ2lzdHJvcyBhIHNlcmVtIGV4aWJpZG9zIG5hIHRhYmVsYS5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2xpc3QnLCByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBnZXQgcmVjb3Jkc0xpc3QoKTogYW55W10gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcmVjb3Jkc0xpc3Q7IH1cclxuICBwdWJsaWMgc2V0IHJlY29yZHNMaXN0KHZhbHVlOiBhbnlbXSB8IHVuZGVmaW5lZCkgeyB0aGlzLl9yZWNvcmRzTGlzdCA9IHZhbHVlOyB9XHJcblxyXG4gIC8qKiBPcMOnw7VlcyBkZSBjb250YWdlbSBkZSBpdGVucyBwb3IgcMOhZ2luYSBkaXNwb27DrXZlaXMgcGFyYSBvIHVzdcOhcmlvLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XHJcblxyXG4gIC8qKiBQb3NpY2lvbmFtZW50byBkb3MgY29udHJvbGVzIGRlIHBhZ2luYcOnw6NvLlxyXG4gICAqIEBkZWZhdWx0ICdlbmQnICovXHJcbiAgQElucHV0KCdwbGFjZW1lbnQnKSBwdWJsaWMgcGFnaW5hdGlvblBsYWNlbWVudDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnYmV0d2VlbicgPSAnZW5kJztcclxuXHJcbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2hlYWRlcnMnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgaGVhZGVyc0xpc3Q6IHtcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGNvbD86IG51bWJlcixcclxuICAgIHdpZHRoQ2xhc3M/OiBzdHJpbmcsXHJcbiAgICBjdXN0b21DbGFzc2VzPzogc3RyaW5nLFxyXG4gICAgb3JkZXJDb2x1bW4/OiBzdHJpbmdcclxuICB9W107XHJcblxyXG4gIC8qKiBNZW5zYWdlbSBjdXN0b21pemFkYSBwYXJhIGxpc3RhIHZhemlhICovXHJcbiAgQElucHV0KCdlbXB0eUxpc3RNZXNzYWdlJykgcHVibGljIGVtcHR5TGlzdE1lc3NhZ2U/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBJbmZvcm1hIHNlIG8gY291bnRlciBkZSByZWdpc3Ryb3MgZGV2ZSBhcGFyZWNlciBvdSBuw6NvLlxyXG4gICAqIEBkZWZhdWx0IHRydWUgKi9cclxuICBASW5wdXQoJ3Nob3dDb3VudGVyJykgcHVibGljIHNob3dDb3VudGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIEluZm9ybWEgdW0gSUQgcGFyYSBhIHBhZ2luYcOnw6NvIGRhIHRhYmVsYSBlc3BlY8OtZmljYS4gRGV2ZSBzZXIgdXRpbGl6YWRhIGVtIGNhc28gZGUgbcO6bHRpcGxhcyB0YWJlbGFzIG5hIG1lc21hIHRlbGEuICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XHJcbiAgcHVibGljIHNldCBwYWdpbmF0aW9uSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGFnaW5hdGlvbklEID0gdmFsdWUgfHwgJ2xpYlRhYmxlUGFnaW5hdGlvbic7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIG7Dum1lcm8gZGUgaXRlbnMgcG9yIHDDoWdpbmEgw6kgYWx0ZXJhZG8uICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBww6FnaW5hIMOpIGFsdGVyYWRhLiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIGNoZWNrYm94IGRlIHNlbGXDp8OjbyBzZSBhbHRlcmFyLiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG5cclxuICAvKiogUMOhZ2luYSBhdHVhbCBkYSB0YWJlbGEuICovXHJcblx0cHVibGljIGdldCBwYWdlKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9jdXJyZW50UGFnZTsgfVxyXG5cdHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsdWU7IH1cclxuXHJcbiAgLyoqIE7Dum1lcm8gZGUgaXRlbnMgYSBzZXJlbSBleGliaWRvcyBwb3IgcMOhZ2luYS4gKi9cclxuICBwdWJsaWMgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fY3VycmVudEl0ZW1zUGVyUGFnZTsgfVxyXG5cdHB1YmxpYyBzZXQgaXRlbXNQZXJQYWdlKHZhbHVlOiBudW1iZXIpIHsgdGhpcy5fY3VycmVudEl0ZW1zUGVyUGFnZSA9IHZhbHVlOyB9XHJcblxyXG5cclxuICBwdWJsaWMgZ2V0IGZpcnN0SXRlbU9mUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlICsgMTtcclxuICB9XHJcbiAgcHVibGljIGdldCBsYXN0SXRlbU9mUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMucGFnZSAqIHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGl0ZW1zRGlzcGxheVRleHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0ICYmIHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoID09PSAwKSB7IHJldHVybiBgRXhpYmluZG8gJHt0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMH0gcmVnaXN0cm9zYDsgfVxyXG4gICAgcmV0dXJuIGBFeGliaW5kbyAkeyB0aGlzLmNvdW50T3B0aW9ucyA/IHRoaXMuZmlyc3RJdGVtT2ZQYWdlK1wiLVwiK3RoaXMubGFzdEl0ZW1PZlBhZ2UgKyBcIiBkZVwiIDogXCJcIiB9ICR7dGhpcy5yZWNvcmRzTGlzdD8ubGVuZ3RoID8/IDB9IHJlZ2lzdHJvc2A7XHJcbiAgfVxyXG5cclxuICBcclxuICBwdWJsaWMgaGVhZGVyc1VzZU9sZFdpZHRoPzogYm9vbGVhbjtcclxuICAvLyAjZW5kcmVnaW9uIFBVQkxJQ1xyXG5cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BSSUVEQURFUyA8PT09PT09PT09PVxyXG5cclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXJJbmZvKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlSGVhZGVycygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cclxuICB9XHJcblxyXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgT2JqZXRvIHF1ZSBjb250w6ltIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZS4gKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXSAmJiBjaGFuZ2VzWydyZWNvcmRzTGlzdCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbih0aGlzLnJlY29yZHNMaXN0ID8/IFtdKTtcclxuICAgICAgdGhpcy51cGRhdGVDb3VudGVySW5mbygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydoZWFkZXJzTGlzdCddKSB7IHRoaXMudmFsaWRhdGVIZWFkZXJzKCk7IH1cclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cclxuXHJcblxyXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUhlYWRlcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgaGVhZGVyc1VzZU9sZFdpZHRoOiBib29sZWFuID0gdGhpcy5oZWFkZXJzTGlzdC5ldmVyeShoZWFkZXIgPT4gaGVhZGVyLmNvbCAmJiBoZWFkZXIuY29sICE9IHVuZGVmaW5lZCk7XHJcbiAgICBcclxuICAgIGxldCBoZWFkZXJzVXNlQ29sOiBib29sZWFuID0gdGhpcy5oZWFkZXJzTGlzdC5ldmVyeShoZWFkZXIgPT4gaGVhZGVyLndpZHRoQ2xhc3MgJiYgaGVhZGVyLndpZHRoQ2xhc3MuaW5jbHVkZXMoJ2NvbC0nKSk7XHJcbiAgICBsZXQgaGVhZGVyc1VzZVBlcmNlbnQ6IGJvb2xlYW4gPSB0aGlzLmhlYWRlcnNMaXN0LmV2ZXJ5KGhlYWRlciA9PiBoZWFkZXIud2lkdGhDbGFzcyAmJiBoZWFkZXIud2lkdGhDbGFzcy5pbmNsdWRlcygndy0nKSk7XHJcblxyXG4gICAgaWYgKGhlYWRlcnNVc2VPbGRXaWR0aCkgeyB0aGlzLmhlYWRlcnNVc2VPbGRXaWR0aCA9IHRydWU7IH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmhlYWRlcnNVc2VPbGRXaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCFoZWFkZXJzVXNlQ29sICYmICFoZWFkZXJzVXNlUGVyY2VudCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIGxhcmd1cmEgZGFzIGNvbHVuYXMgZXN0w6EgZW0gdW0gZm9ybWF0byBpbnbDoWxpZG8uIENlcnRpZmlxdWUtc2UgcXVlIHRvZGFzIGVsYXMgdXRpbGl6YW0gYXBlbmFzICdjb2wtJyBvdSAndy0nXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZXJJbmZvKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3Jkc0xpc3QgJiYgdGhpcy5zaG93Q291bnRlciAmJiB0aGlzLnVzZVBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9ucyA/IHRoaXMuY291bnRPcHRpb25zWzBdIDogdGhpcy5yZWNvcmRzTGlzdC5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5yZWNvcmRzTGlzdCAmJiB0aGlzLnNob3dDb3VudGVyICYmIHRoaXMudXNlUGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIE1vZGlmaWNhIGEgcXVhbnRpZGFkZSBkZSBpdGVucyBhIHNlciBtb3N0cmFkYSBuYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gZXZlbnQgcGFyw6JtZXRybyBkZSBldmVudG8gcXVlIGlyw6Egc2VsZWNpb25hciBhIG5vdmEgcXVhbnRpZGFkZS4gKi9cclxuICBwdWJsaWMgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUsIDEwKTtcclxuICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UpO1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zUGVyUGFnZSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVzZXRhIGEgcGFnaW5hw6fDo28gZGEgbGlzdGFnZW0gY29tIGJhc2Ugbm8gbsO6bWVybyBhdHVhbCBkZSByZWdpc3Ryb3MuXHJcbiAgICogQHBhcmFtIGxpc3QgTGlzdGEgZGUgcmVnaXN0cm9zIHBhcmEgcmVzZXRhciBhIHBhZ2luYcOnw6NvLiAqL1xyXG4gIHB1YmxpYyByZXNldFBhZ2luYXRpb24obGlzdDogYW55W10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLml0ZW1zUGVyUGFnZTtcclxuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSBzdGFydEluZGV4KSB0aGlzLnBhZ2UgPSAxO1xyXG4gIH1cclxuXHJcblx0Ly8jcmVnaW9uIE9yZGVyaW5nLCBTb3J0aW5nIG91IGFwZW5hcyBPcmRlbmHDp8Ojb1xyXG5cclxuXHQvKiogTcOpdG9kbyBxdWUgZmF6IGEgb3JkZW5hw6fDo28gZG9zIGNvbnRyYXRvcyBuYSB0ZWxhIGRlIGxpc3RhZ2VtLCBlbSBjYWRhIHVtYSBkYXMgY8OpbHVsYXMgZG8gY2FiZcOnYWxobyBkYSB0YWJlbGEsIG9uZGUgY2FkYSB1bSAgXHJcblx0ICogIGRvcyBlbGVtZW50b3MgPHRoPiByZXByZXNlbnRhIHVtYSBjb2x1bmEsIGRlIGFjb3JkbyBjb20gYSBsaXN0YSBkZSBjb250cmF0b3MgcXVlIHJldG9ybmEgZG8gYmFja2VuZC4gKi9cclxuXHQvLyBPYmpldG8gcGFyYSBhcm1hemVuYXIgYSBkaXJlw6fDo28gZGUgb3JkZW5hw6fDo28gZGUgY2FkYSBjb2x1bmFcclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuXHQvLyBDb2x1bmEgYXR1YWxtZW50ZSBzZWxlY2lvbmFkYSBwYXJhIG9yZGVuYcOnw6NvXHJcblx0cHVibGljIGN1cnJlbnRTb3J0Q29sdW1uOiBzdHJpbmcgPSAnJztcclxuXHJcblx0Ly8gRnVuw6fDo28gY2hhbWFkYSBxdWFuZG8gb2NvcnJlIHVtYSBtdWRhbsOnYSBuYSBvcmRlbmHDp8Ojb1xyXG5cdG9uU29ydENoYW5nZShldmVudDogeyBkaXJlY3Rpb246IHN0cmluZywgY29sdW1uOiBzdHJpbmcgfSkge1xyXG5cdFx0Y29uc3QgeyBkaXJlY3Rpb24sIGNvbHVtbiB9ID0gZXZlbnQ7XHJcblxyXG5cdFx0Ly8gVmVyaWZpY2Egc2UgYSBjb2x1bmEgYXR1YWxtZW50ZSBzZWxlY2lvbmFkYSDDqSBhIG1lc21hIGRhIG5vdmEgc2VsZcOnw6NvXHJcblx0XHRpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XHJcblx0XHRcdC8vIEFsdGVybmEgZW50cmUgJ2FzYycgZSAnZGVzYycgcGFyYSBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBkYSBjb2x1bmFcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uW2NvbHVtbl0gPSB0aGlzLnNvcnREaXJlY3Rpb25bY29sdW1uXSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcclxuXHRcdH1cclxuICAgIGVsc2Uge1xyXG5cdFx0XHQvLyBEZWZpbmUgYSBub3ZhIGNvbHVuYSBlIGEgZGlyZcOnw6NvIGRlIG9yZGVuYcOnw6NvIGNvbW8gJ2FzYydcclxuXHRcdFx0dGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uID0geyBbY29sdW1uXTogJ2FzYycgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZWFsaXphIGEgb3JkZW5hw6fDo28gZG9zIGRhZG9zIGRhIHRhYmVsYVxyXG5cdFx0dGhpcy5zb3J0RGF0YSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gRnVuw6fDo28gZGUgb3JkZW5hw6fDo28gZG9zIGRhZG9zIGRhIHRhYmVsYVxyXG5cdHByaXZhdGUgc29ydERhdGEoKSB7XHJcblx0XHRpZiAodGhpcy5yZWNvcmRzTGlzdCkge1xyXG5cdFx0XHRjb25zdCBncnVwb3NMaXN0ID0gdGhpcy5yZWNvcmRzTGlzdDtcclxuXHJcblx0XHRcdGdydXBvc0xpc3Quc29ydCgoYSwgYikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuY3VycmVudFNvcnRDb2x1bW47XHJcblx0XHRcdFx0Y29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uW2F0dHJpYnV0ZV07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVQcm9wZXJ0aWVzKGEsIGIsIGF0dHJpYnV0ZSwgZGlyZWN0aW9uKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDb21wYXJhIG9zIHZhbG9yZXMgZGFzIHByb3ByaWVkYWRlcyBlbnRyZSBkb2lzIG9iamV0b3NcclxuXHRwcml2YXRlIGNvbXBhcmVQcm9wZXJ0aWVzKGE6IGFueSwgYjogYW55LCBhdHRyaWJ1dGU6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgcHJvcGVydHlBID0gdGhpcy5nZXRQcm9wZXJ0eShhLCBhdHRyaWJ1dGUpLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRjb25zdCBwcm9wZXJ0eUIgPSB0aGlzLmdldFByb3BlcnR5KGIsIGF0dHJpYnV0ZSkudG9VcHBlckNhc2UoKTtcclxuXHJcblx0XHRpZiAocHJvcGVydHlBIDwgcHJvcGVydHlCKSByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuXHRcdGlmIChwcm9wZXJ0eUEgPiBwcm9wZXJ0eUIpIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblx0Ly8gT2J0w6ltIG8gdmFsb3IgZGUgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhIGRlIHVtIG9iamV0b1xyXG5cdHByaXZhdGUgZ2V0UHJvcGVydHkob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHBhdGggPSBwYXRoLnNwbGl0KCcuJyk7XHJcblx0XHRyZXR1cm4gcGF0aC5yZWR1Y2UoKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWUgPyB2YWx1ZVtwcm9wZXJ0eV0gOiAnJywgb2JqKTtcclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uIE9yZGVyaW5nLCBTb3J0aW5nIG91IGFwZW5hcyBPcmRlbmHDp8Ojb1xyXG5cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxyXG5cclxufVxyXG4iLCJAaWYgKHJlY29yZHNMaXN0KSB7XHJcbiAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDwhLS0gRXhpYmUgbyBuw7ptZXJvIGRlIGl0ZW5zIG1vc3RyYWRvcyBlIG8gdG90YWwgZGUgcmVnaXN0cm9zIC0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInNob3dDb3VudGVyXCIgY2xhc3M9XCJtcy0xXCI+IHt7IGl0ZW1zRGlzcGxheVRleHQgfX0gPC9zcGFuPlxyXG4gICAgICBcclxuICAgICAgPCEtLSBDb250YWluZXIgZGEgdGFiZWxhIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWJvdHRvbS0wIHJvdW5kZWQtYm90dG9tIHJvdW5kZWRcIj5cclxuICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgYm9yZGVyIG1iLTBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSXRlcmEgc29icmUgYSBsaXN0YSBkZSBjYWJlw6dhbGhvcyBwYXJhIGNyaWFyIGFzIGNvbHVuYXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInVzZVNlbGVjdGlvblwiID5cclxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwidGFibGVDaGVja0FsbFwiIFsobmdNb2RlbCldPVwic2VsZWN0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYWRlcnNMaXN0XCIgc2NvcGU9XCJjb2xcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFsaWduLW1pZGRsZSB0ZXh0LWRhcmstZ3JleSB7eyBoZWFkZXIuY3VzdG9tQ2xhc3NlcyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXJzVXNlT2xkV2lkdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXIuY29sICYmIGhlYWRlci5jb2wgPiAwID8gJ2NvbC0nK2hlYWRlci5jb2wgOiAnY29sJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlci53aWR0aENsYXNzIH19XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXIubmFtZSB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgPGFwcC1vcmRlcmluZyAqbmdJZj1cImhlYWRlci5vcmRlckNvbHVtblwiIFsoc29ydERpcmVjdGlvbildPVwic29ydERpcmVjdGlvbltoZWFkZXIub3JkZXJDb2x1bW5dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKHsgZGlyZWN0aW9uOiAkZXZlbnQuZGlyZWN0aW9uLCBjb2x1bW46IGhlYWRlci5vcmRlckNvbHVtbiB9KVwiPjwvYXBwLW9yZGVyaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiYmctbGlnaHQgZmFkZS1pbi1yb3dcIj5cclxuICAgICAgICAgICAgICAgQGlmIChyZWNvcmRzTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGXDumRvIGRhcyBsaW5oYXMgZGEgdGFiZWxhIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaW5uZXJSb3dzXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gTWVuc2FnZW0gZGUgYXVzw6puY2lhIGRlIHJlZ2lzdHJvcyAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEyXCIgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1jZW50ZXIgcC00IHRleHQtZGFyay1ncmV5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBlbXB0eUxpc3RNZXNzYWdlID8gZW1wdHlMaXN0TWVzc2FnZSA6IFwiTsOjbyBow6EgZGFkb3MgcGFyYSBzZXJlbSBsaXN0YWRvcy5cIiB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgIDwhLS0gI3JlZ2lvbiBQQUdJTkHDh8ODTyAtLT5cclxuICAgICAgICAgPGRpdiAqbmdJZj1cInVzZVBhZ2luYXRpb24gJiYgcmVjb3Jkc0xpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZC1mbGV4IG10LTJcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtc3RhcnQnOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1lbmQnOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdiZXR3ZWVuJ1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1lLTJcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+IEl0ZW5zIHBvciBww6FnaW5hIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBzZWxlY3Qtc2VhcmNoXCIgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvdW50IG9mIGNvdW50T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJjb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb3VudE9wdGlvbnMubGVuZ3RoID4gMCAmJiBpID09IDBcIj57eyBjb3VudCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENvbnRyb2xlIGRlIHBhZ2luYcOnw6NvIC0tPlxyXG4gICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9sc1xyXG4gICAgICAgICAgICAgICBbaWRdPVwicGFnaW5hdGlvbklEXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJzcC1wYWdpbmF0aW9uIG10LTNcIlxyXG4gICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlID0gJGV2ZW50OyBwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgIHByZXZpb3VzTGFiZWw9XCLCqyZuYnNwOyZuYnNwOyZuYnNwO1wiIG5leHRMYWJlbD1cIiZuYnNwOyZuYnNwOyZuYnNwO8K7XCJcclxuICAgICAgICAgICAgICAgW21heFNpemVdPVwiNVwiPlxyXG4gICAgICAgICAgICA8L3BhZ2luYXRpb24tY29udHJvbHM+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8IS0tICNlbmRyZWdpb24gUEFHSU5Bw4fDg08gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgIDwhLS0gTG9hZGVyIGVucXVhbnRvIG9zIHJlZ2lzdHJvcyBzw6NvIGNhcnJlZ2Fkb3MgLS0+XHJcbiAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+IDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2FycmVnYW5kbyBpbmZvcm1hw6fDtWVzLi4uPC9zcGFuPiA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbn1cclxuIl19
@@ -3114,7 +3114,6 @@ class TableComponent {
3114
3114
  get lastItemOfPage() {
3115
3115
  return Math.min(this.page * this.itemsPerPage, this.recordsList?.length ?? 0);
3116
3116
  }
3117
- // Exemplo de string com a contagem:
3118
3117
  get itemsDisplayText() {
3119
3118
  if (this.recordsList && this.recordsList.length === 0) {
3120
3119
  return `Exibindo ${this.recordsList?.length ?? 0} registros`;
@@ -3130,6 +3129,9 @@ class TableComponent {
3130
3129
  this._currentItemsPerPage = 0;
3131
3130
  // #endregion PRIVATE
3132
3131
  // #region PUBLIC
3132
+ this.selection = false;
3133
+ /** Determina se haverá uma coluna inicial para seleção de registros na tabela. */
3134
+ this.useSelection = false;
3133
3135
  /** Determina se a tabela deve usar paginação.
3134
3136
  * @default true */
3135
3137
  this.usePagination = true;
@@ -3137,13 +3139,14 @@ class TableComponent {
3137
3139
  * @default 'end' */
3138
3140
  this.paginationPlacement = 'end';
3139
3141
  /** Informa se o counter de registros deve aparecer ou não.
3140
- * @default true
3141
- */
3142
+ * @default true */
3142
3143
  this.showCounter = true;
3143
3144
  /** Evento emitido quando o número de itens por página é alterado. */
3144
3145
  this.itemsPerPageChange = new EventEmitter();
3145
3146
  /** Evento emitido quando a página é alterada. */
3146
3147
  this.pageChange = new EventEmitter();
3148
+ /** Evento emitido quando o checkbox de seleção se alterar. */
3149
+ this.selectionChange = new EventEmitter();
3147
3150
  //#region Ordering, Sorting ou apenas Ordenação
3148
3151
  /** Método que faz a ordenação dos contratos na tela de listagem, em cada uma das células do cabeçalho da tabela, onde cada um
3149
3152
  * dos elementos <th> representa uma coluna, de acordo com a lista de contratos que retorna do backend. */
@@ -3163,7 +3166,7 @@ class TableComponent {
3163
3166
  /** Monitora as mudanças nas entradas do componente e realiza ajustes, como resetar a paginação ou validar o layout das colunas.
3164
3167
  * @param changes Objeto que contém as mudanças nas entradas do componente. */
3165
3168
  ngOnChanges(changes) {
3166
- if (changes['recordsList'].currentValue) {
3169
+ if (changes['recordsList'] && changes['recordsList'].currentValue) {
3167
3170
  this.resetPagination(this.recordsList ?? []);
3168
3171
  this.updateCounterInfo();
3169
3172
  }
@@ -3254,12 +3257,16 @@ class TableComponent {
3254
3257
  return path.reduce((value, property) => value ? value[property] : '', obj);
3255
3258
  }
3256
3259
  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 }); }
3257
- 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) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\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"] }, { kind: "component", type: OrderingComponent, selector: "app-ordering", inputs: ["isColumnClicked", "sortDirection", "sortAttributes"], outputs: ["sortDirectionChange", "sortChange"] }] }); }
3260
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { selection: "selection", useSelection: "useSelection", 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", selectionChange: "selectionChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngIf=\"useSelection\" >\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"tableCheckAll\" [(ngModel)]=\"selection\" (ngModelChange)=\"selectionChange.emit($event)\">\r\n </div>\r\n </th>\r\n\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\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: "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.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: OrderingComponent, selector: "app-ordering", inputs: ["isColumnClicked", "sortDirection", "sortAttributes"], outputs: ["sortDirectionChange", "sortChange"] }] }); }
3258
3261
  }
3259
3262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
3260
3263
  type: Component,
3261
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\n"] }]
3262
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
3264
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\r\n <div class=\"table-list w-100 position-relative\">\r\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\r\n <span *ngIf=\"showCounter\" class=\"ms-1\"> {{ itemsDisplayText }} </span>\r\n \r\n <!-- Container da tabela -->\r\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\r\n <table class=\"table table-hover border mb-0\">\r\n <thead>\r\n <tr>\r\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\r\n <th *ngIf=\"useSelection\" >\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"tableCheckAll\" [(ngModel)]=\"selection\" (ngModelChange)=\"selectionChange.emit($event)\">\r\n </div>\r\n </th>\r\n\r\n <th *ngFor=\"let header of headersList\" scope=\"col\"\r\n class=\"align-middle text-dark-grey {{ header.customClasses }}\r\n {{ headersUseOldWidth\r\n ? header.col && header.col > 0 ? 'col-'+header.col : 'col'\r\n : header.widthClass }}\" >\r\n {{ header.name }}\r\n\r\n <app-ordering *ngIf=\"header.orderColumn\" [(sortDirection)]=\"sortDirection[header.orderColumn]\"\r\n (sortChange)=\"onSortChange({ direction: $event.direction, column: header.orderColumn })\"></app-ordering>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"bg-light fade-in-row\">\r\n @if (recordsList.length > 0) {\r\n <!-- Conte\u00FAdo das linhas da tabela -->\r\n <ng-content select=\"[innerRows]\"></ng-content>\r\n }\r\n @else {\r\n <!-- Mensagem de aus\u00EAncia de registros -->\r\n <tr>\r\n <td colspan=\"12\" class=\"align-middle text-center p-4 text-dark-grey\">\r\n <span> {{ emptyListMessage ? emptyListMessage : \"N\u00E3o h\u00E1 dados para serem listados.\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\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}.w-1{width:1%!important}.w-2{width:2%!important}.w-3{width:3%!important}.w-4{width:4%!important}.w-5{width:5%!important}.w-6{width:6%!important}.w-7{width:7%!important}.w-8{width:8%!important}.w-9{width:9%!important}.w-10{width:10%!important}.w-11{width:11%!important}.w-12{width:12%!important}.w-13{width:13%!important}.w-14{width:14%!important}.w-15{width:15%!important}.w-16{width:16%!important}.w-17{width:17%!important}.w-18{width:18%!important}.w-19{width:19%!important}.w-20{width:20%!important}.w-21{width:21%!important}.w-22{width:22%!important}.w-23{width:23%!important}.w-24{width:24%!important}.w-25{width:25%!important}.w-26{width:26%!important}.w-27{width:27%!important}.w-28{width:28%!important}.w-29{width:29%!important}.w-30{width:30%!important}.w-31{width:31%!important}.w-32{width:32%!important}.w-33{width:33%!important}.w-34{width:34%!important}.w-35{width:35%!important}.w-36{width:36%!important}.w-37{width:37%!important}.w-38{width:38%!important}.w-39{width:39%!important}.w-40{width:40%!important}.w-41{width:41%!important}.w-42{width:42%!important}.w-43{width:43%!important}.w-44{width:44%!important}.w-45{width:45%!important}.w-46{width:46%!important}.w-47{width:47%!important}.w-48{width:48%!important}.w-49{width:49%!important}.w-50{width:50%!important}.w-51{width:51%!important}.w-52{width:52%!important}.w-53{width:53%!important}.w-54{width:54%!important}.w-55{width:55%!important}.w-56{width:56%!important}.w-57{width:57%!important}.w-58{width:58%!important}.w-59{width:59%!important}.w-60{width:60%!important}.w-61{width:61%!important}.w-62{width:62%!important}.w-63{width:63%!important}.w-64{width:64%!important}.w-65{width:65%!important}.w-66{width:66%!important}.w-67{width:67%!important}.w-68{width:68%!important}.w-69{width:69%!important}.w-70{width:70%!important}.w-71{width:71%!important}.w-72{width:72%!important}.w-73{width:73%!important}.w-74{width:74%!important}.w-75{width:75%!important}.w-76{width:76%!important}.w-77{width:77%!important}.w-78{width:78%!important}.w-79{width:79%!important}.w-80{width:80%!important}.w-81{width:81%!important}.w-82{width:82%!important}.w-83{width:83%!important}.w-84{width:84%!important}.w-85{width:85%!important}.w-86{width:86%!important}.w-87{width:87%!important}.w-88{width:88%!important}.w-89{width:89%!important}.w-90{width:90%!important}.w-91{width:91%!important}.w-92{width:92%!important}.w-93{width:93%!important}.w-94{width:94%!important}.w-95{width:95%!important}.w-96{width:96%!important}.w-97{width:97%!important}.w-98{width:98%!important}.w-99{width:99%!important}.w-100{width:100%!important}\n"] }]
3265
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { selection: [{
3266
+ type: Input
3267
+ }], useSelection: [{
3268
+ type: Input
3269
+ }], usePagination: [{
3263
3270
  type: Input
3264
3271
  }], recordsList: [{
3265
3272
  type: Input,
@@ -3285,6 +3292,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3285
3292
  type: Output
3286
3293
  }], pageChange: [{
3287
3294
  type: Output
3295
+ }], selectionChange: [{
3296
+ type: Output
3288
3297
  }] } });
3289
3298
 
3290
3299
  /**