ngx-sp-infra 2.0.11 → 2.0.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.
@@ -19,16 +19,12 @@ import * as i3 from "ngx-pagination";
19
19
  export class TableComponent {
20
20
  get paginationID() { return this._paginationID; }
21
21
  set paginationID(value) {
22
- this._paginationID = value;
23
- this.paginationIDChange.emit(value);
22
+ this._paginationID = value || 'libTablePagination';
24
23
  }
25
24
  // #endregion PUBLIC
26
25
  // #endregion ==========> PROPRIEDADES <==========
27
26
  // #region ==========> INICIALIZAÇÃO <==========
28
27
  constructor() {
29
- // #region ==========> PROPRIEDADES <==========
30
- // #region PRIVATE
31
- this._paginationID = "libTablePagination";
32
28
  // #endregion PRIVATE
33
29
  // #region PUBLIC
34
30
  /** Determina se a tabela deve usar paginação.
@@ -41,13 +37,10 @@ export class TableComponent {
41
37
  this.itemsPerPageChange = new EventEmitter();
42
38
  /** Evento emitido quando a página é alterada. */
43
39
  this.pageChange = new EventEmitter();
44
- /** Evento emitido quando o ID da paginação é criado no início. */
45
- this.paginationIDChange = new EventEmitter();
46
40
  /** Contador de registros (pode ser usado para futuras implementações de lógica interna). */
47
41
  this.counter = 0;
48
42
  /** Página atual da tabela. */
49
43
  this.page = 1;
50
- this.paginationID = (Math.random() * 10000).toString();
51
44
  }
52
45
  /** Inicializa o componente e define o número inicial de itens por página. */
53
46
  ngOnInit() {
@@ -57,6 +50,8 @@ export class TableComponent {
57
50
  else {
58
51
  this.itemsPerPage = this.countOptions[0] ?? 10;
59
52
  }
53
+ console.log("paginationID: ", this.paginationID);
54
+ console.log("this.paginationID ? this.paginationID : null: ", this.paginationID ? this.paginationID : null);
60
55
  }
61
56
  /** Monitora as mudanças nas entradas do componente e realiza ajustes, como resetar a paginação ou validar o layout das colunas.
62
57
  * @param changes Objeto que contém as mudanças nas entradas do componente. */
@@ -68,6 +63,9 @@ export class TableComponent {
68
63
  throw new Error("A soma de largura (classe com prefixo 'col-') de todas as colunas não pode ser maior que 12.");
69
64
  }
70
65
  }
66
+ if (changes["paginationID"]) {
67
+ console.log('Pagination ID changed:', this.paginationID);
68
+ }
71
69
  }
72
70
  // #endregion ==========> INICIALIZAÇÃO <==========
73
71
  // #region ==========> UTILITÁRIOS <==========
@@ -87,11 +85,11 @@ export class TableComponent {
87
85
  }
88
86
  }
89
87
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
90
- 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" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", paginationIDChange: "paginationIDChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
91
89
  }
92
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
93
91
  type: Component,
94
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
92
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
95
93
  }], ctorParameters: () => [], propDecorators: { usePagination: [{
96
94
  type: Input
97
95
  }], recordsList: [{
@@ -113,7 +111,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
113
111
  type: Output
114
112
  }], pageChange: [{
115
113
  type: Output
116
- }], paginationIDChange: [{
117
- type: Output
114
+ }], paginationID: [{
115
+ type: Input
118
116
  }] } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFekc7Ozs7Ozs7Ozs7OztFQVlFO0FBTUYsTUFBTSxPQUFPLGNBQWM7SUF5RHpCLElBQVcsWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxvQkFBb0I7SUFFcEIsa0RBQWtEO0lBR2xELGdEQUFnRDtJQUNoRDtRQWxFQSwrQ0FBK0M7UUFFL0Msa0JBQWtCO1FBQ1Ysa0JBQWEsR0FBVyxvQkFBb0IsQ0FBQztRQUNyRCxxQkFBcUI7UUFFckIsaUJBQWlCO1FBRWpCOzJCQUNtQjtRQUNILGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBVTlDOzRCQUNvQjtRQUNPLHdCQUFtQixHQUEyQyxLQUFLLENBQUM7UUFhL0YscUVBQXFFO1FBQ3BELHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXZGLGlEQUFpRDtRQUNoQyxlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFL0Usa0VBQWtFO1FBQ2pELHVCQUFrQixHQUF5QixJ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aW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBUYWJlbGEgQ3VzdG9taXrDoXZlbFxuICpcbiAqIE8gYFRhYmxlQ29tcG9uZW50YCDDqSB1bSBjb21wb25lbnRlIEFuZ3VsYXIgcHJvamV0YWRvIHBhcmEgZXhpYmlyIHVtYSB0YWJlbGEgY3VzdG9taXrDoXZlbFxuICogY29tIHN1cG9ydGUgYSBwYWdpbmHDp8Ojby4gRWxlIHBlcm1pdGUgYSBjb25maWd1cmHDp8OjbyBkZSBjYWJlw6dhbGhvcyBkZSBjb2x1bmFzLCBwb3NpY2lvbmFtZW50b1xuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxuICogcGFyYSBhanVzdGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzIGUgZW1pdGluZG8gZXZlbnRvcyBwYXJhIHF1ZSBvIGNvbXBvbmVudGUgcGFpIHBvc3NhIHJlYWdpciBhXG4gKiBtdWRhbsOnYXMgbmEgcMOhZ2luYSBvdSBubyBuw7ptZXJvIGRlIGl0ZW5zIGV4aWJpZG9zLlxuICpcbiAqIEBzZWxlY3RvciBsaWItdGFibGVcbiAqIEB0ZW1wbGF0ZVVybCAuL3RhYmxlLmNvbXBvbmVudC5odG1sXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cblxuICAvLyAjcmVnaW9uIFBSSVZBVEVcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmcgPSBcImxpYlRhYmxlUGFnaW5hdGlvblwiO1xuICAvLyAjZW5kcmVnaW9uIFBSSVZBVEVcblxuICAvLyAjcmVnaW9uIFBVQkxJQ1xuXG4gIC8qKiBEZXRlcm1pbmEgc2UgYSB0YWJlbGEgZGV2ZSB1c2FyIHBhZ2luYcOnw6NvLlxuICAgKiBAZGVmYXVsdCB0cnVlICovXG4gIEBJbnB1dCgpIHB1YmxpYyB1c2VQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdsaXN0JywgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIHJlY29yZHNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAvKiogT3DDp8O1ZXMgZGUgY29udGFnZW0gZGUgaXRlbnMgcG9yIHDDoWdpbmEgZGlzcG9uw612ZWlzIHBhcmEgbyB1c3XDoXJpby5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XG5cbiAgLyoqIFBvc2ljaW9uYW1lbnRvIGRvcyBjb250cm9sZXMgZGUgcGFnaW5hw6fDo28uXG4gICAqIEBkZWZhdWx0ICdlbmQnICovXG4gIEBJbnB1dCgncGxhY2VtZW50JykgcHVibGljIHBhZ2luYXRpb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2JldHdlZW4nID0gJ2VuZCc7XG5cbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCh7IGFsaWFzOiAnaGVhZGVycycsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWFkZXJzTGlzdDoge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb2w6IG51bWJlcixcbiAgICBjdXN0b21DbGFzc2VzPzogc3RyaW5nXG4gIH1bXTtcblxuICAvKiogTWVuc2FnZW0gY3VzdG9taXphZGEgcGFyYSBsaXN0YSB2YXppYSAqL1xuICBASW5wdXQoJ2VtcHR5TGlzdE1lc3NhZ2UnKSBwdWJsaWMgZW1wdHlMaXN0TWVzc2FnZT86IHN0cmluZztcblxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSDDqSBhbHRlcmFkby4gKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBhIHDDoWdpbmEgw6kgYWx0ZXJhZGEuICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gSUQgZGEgcGFnaW5hw6fDo28gw6kgY3JpYWRvIG5vIGluw61jaW8uICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnaW5hdGlvbklEQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG5cbiAgLyoqIENvbnRhZG9yIGRlIHJlZ2lzdHJvcyAocG9kZSBzZXIgdXNhZG8gcGFyYSBmdXR1cmFzIGltcGxlbWVudGHDp8O1ZXMgZGUgbMOzZ2ljYSBpbnRlcm5hKS4gKi9cbiAgcHVibGljIGNvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgLyoqIFDDoWdpbmEgYXR1YWwgZGEgdGFiZWxhLiAqL1xuXHRwdWJsaWMgcGFnZTogbnVtYmVyID0gMTtcblxuICAvKiogTsO6bWVybyBkZSBpdGVucyBhIHNlcmVtIGV4aWJpZG9zIHBvciBww6FnaW5hLiAqL1xuXHRwdWJsaWMgaXRlbXNQZXJQYWdlOiBudW1iZXI7XG5cblxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XG4gIHB1YmxpYyBzZXQgcGFnaW5hdGlvbklEKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uSUQgPSB2YWx1ZTtcbiAgICB0aGlzLnBhZ2luYXRpb25JRENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uIFBVQkxJQ1xuXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFJPUFJJRURBREVTIDw9PT09PT09PT09XG5cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IElOSUNJQUxJWkHDh8ODTyA8PT09PT09PT09PVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25JRCA9IChNYXRoLnJhbmRvbSgpICogMTAwMDApLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0KSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnMgPyB0aGlzLmNvdW50T3B0aW9uc1swXSA6IHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoIH1cbiAgICBlbHNlIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9uc1swXSA/PyAxMCB9XG4gIH1cblxuICAvKiogTW9uaXRvcmEgYXMgbXVkYW7Dp2FzIG5hcyBlbnRyYWRhcyBkbyBjb21wb25lbnRlIGUgcmVhbGl6YSBhanVzdGVzLCBjb21vIHJlc2V0YXIgYSBwYWdpbmHDp8OjbyBvdSB2YWxpZGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzLlxuICAgKiBAcGFyYW0gY2hhbmdlcyBPYmpldG8gcXVlIGNvbnTDqW0gYXMgbXVkYW7Dp2FzIG5hcyBlbnRyYWRhcyBkbyBjb21wb25lbnRlLiAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZHNMaXN0J10uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbih0aGlzLnJlY29yZHNMaXN0ID8/IFtdKTtcblxuICAgICAgbGV0IG1heENvbHVtbnMgPSB0aGlzLmhlYWRlcnNMaXN0LnJlZHVjZSgobiwge2NvbH0pID0+IG4gKyBjb2wsIDApO1xuICAgICAgaWYgKG1heENvbHVtbnMgPj0gMTMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzb21hIGRlIGxhcmd1cmEgKGNsYXNzZSBjb20gcHJlZml4byAnY29sLScpIGRlIHRvZGFzIGFzIGNvbHVuYXMgbsOjbyBwb2RlIHNlciBtYWlvciBxdWUgMTIuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IElOSUNJQUxJWkHDh8ODTyA8PT09PT09PT09PVxuXG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBVVElMSVTDgVJJT1MgPD09PT09PT09PT1cblxuICAvKiogTW9kaWZpY2EgYSBxdWFudGlkYWRlIGRlIGl0ZW5zIGEgc2VyIG1vc3RyYWRhIG5hIGxpc3RhLlxuICAgKiBAcGFyYW0gZXZlbnQgcGFyw6JtZXRybyBkZSBldmVudG8gcXVlIGlyw6Egc2VsZWNpb25hciBhIG5vdmEgcXVhbnRpZGFkZS4gKi9cbiAgcHVibGljIG9uU2VsZWN0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSwgMTApO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zUGVyUGFnZSk7XG4gIH1cblxuICAvKiogUmVzZXRhIGEgcGFnaW5hw6fDo28gZGEgbGlzdGFnZW0gY29tIGJhc2Ugbm8gbsO6bWVybyBhdHVhbCBkZSByZWdpc3Ryb3MuXG4gICAqIEBwYXJhbSBsaXN0IExpc3RhIGRlIHJlZ2lzdHJvcyBwYXJhIHJlc2V0YXIgYSBwYWdpbmHDp8Ojby4gKi9cbiAgcHVibGljIHJlc2V0UGFnaW5hdGlvbihsaXN0OiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLml0ZW1zUGVyUGFnZTtcbiAgICBpZiAobGlzdC5sZW5ndGggPD0gc3RhcnRJbmRleCkge1xuICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICB9XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxuXG59XG4iLCJAaWYgKHJlY29yZHNMaXN0KSB7XG4gICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCB3LTEwMCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgPCEtLSBFeGliZSBvIG7Dum1lcm8gZGUgaXRlbnMgbW9zdHJhZG9zIGUgbyB0b3RhbCBkZSByZWdpc3Ryb3MgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIj4gRXhpYmluZG8ge3sgaXRlbXNQZXJQYWdlIDw9IHJlY29yZHNMaXN0Lmxlbmd0aCA/IGl0ZW1zUGVyUGFnZSA6IHJlY29yZHNMaXN0Lmxlbmd0aCB9fSBkZSB7eyByZWNvcmRzTGlzdC5sZW5ndGggfX0gcmVnaXN0cm9zIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBDb250YWluZXIgZGEgdGFiZWxhIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1ib3R0b20tMCByb3VuZGVkLWJvdHRvbSByb3VuZGVkXCI+XG4gICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciBib3JkZXIgbWItMFwiPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPCEtLSBJdGVyYSBzb2JyZSBhIGxpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgY3JpYXIgYXMgY29sdW5hcyAtLT5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYWRlcnNMaXN0XCIgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1kYXJrLWdyZXkge3sgaGVhZGVyLmNvbCA+IDAgPyAnY29sLScraGVhZGVyLmNvbCA6ICdjb2wnIH19IHt7IGhlYWRlci5jdXN0b21DbGFzc2VzIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJiZy1saWdodCBmYWRlLWluLXJvd1wiPlxuICAgICAgICAgICAgICAgQGlmIChyZWNvcmRzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIENvbnRlw7pkbyBkYXMgbGluaGFzIGRhIHRhYmVsYSAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpbm5lclJvd3NdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPCEtLSBNZW5zYWdlbSBkZSBhdXPDqm5jaWEgZGUgcmVnaXN0cm9zIC0tPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMlwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWxpZ2h0IGZzdC1pdGFsaWMgdGV4dC1jZW50ZXJcIj4ge3sgZW1wdHlMaXN0TWVzc2FnZSA/IGVtcHR5TGlzdE1lc3NhZ2UgOiBcIkNvbnN1bHRhIG7Do28gcmV0b3Jub3UgcmVnaXN0cm9zLi4uXCIgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgPCEtLSAjcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxuICAgICAgICAgPGRpdiAqbmdJZj1cInVzZVBhZ2luYXRpb24gJiYgcmVjb3Jkc0xpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZC1mbGV4IG10LTJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1zdGFydCc6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnZW5kJyxcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2JldHdlZW4nXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWUtMlwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj4gSXRlbnMgcG9yIHDDoWdpbmEgPC9sYWJlbD5cbiAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBzZWxlY3Qtc2VhcmNoXCIgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudCBvZiBjb3VudE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImNvdW50T3B0aW9ucy5sZW5ndGggPiAwICYmIGkgPT0gMFwiPnt7IGNvdW50IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbnRyb2xlIGRlIHBhZ2luYcOnw6NvIC0tPlxuICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHNcbiAgICAgICAgICAgICAgIFtpZF09XCJwYWdpbmF0aW9uSURcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJzcC1wYWdpbmF0aW9uIG10LTNcIlxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgcHJldmlvdXNMYWJlbD1cIsKrJm5ic3A7Jm5ic3A7Jm5ic3A7XCIgbmV4dExhYmVsPVwiJm5ic3A7Jm5ic3A7Jm5ic3A7wrtcIlxuICAgICAgICAgICAgICAgW21heFNpemVdPVwiNVwiPlxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8IS0tICNlbmRyZWdpb24gUEFHSU5Bw4fDg08gLS0+XG4gICAgICA8L2Rpdj5cbiAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxuICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+IDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2FycmVnYW5kbyBpbmZvcm1hw6fDtWVzLi4uPC9zcGFuPiA8L2Rpdj5cbiAgIDwvZGl2PlxufVxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFekc7Ozs7Ozs7Ozs7OztFQVlFO0FBTUYsTUFBTSxPQUFPLGNBQWM7SUFzRHpCLElBQ1csWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztJQUNyRCxDQUFDO0lBQ0Qsb0JBQW9CO0lBRXBCLGtEQUFrRDtJQUdsRCxnREFBZ0Q7SUFDaEQ7UUEzREEscUJBQXFCO1FBRXJCLGlCQUFpQjtRQUVqQjsyQkFDbUI7UUFDSCxrQkFBYSxHQUFZLElBQUksQ0FBQztRQVU5Qzs0QkFDb0I7UUFDTyx3QkFBbUIsR0FBMkMsS0FBSyxDQUFDO1FBYS9GLHFFQUFxRTtRQUNwRCx1QkFBa0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV2RixpREFBaUQ7UUFDaEMsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRy9FLDRGQUE0RjtRQUNyRixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRTNCLDhCQUE4QjtRQUN4QixTQUFJLEdBQVcsQ0FBQyxDQUFDO0lBaUJQLENBQUM7SUFFakIsNkVBQTZFO0lBQzdFLFFBQVE7UUFDTixJQUFJLElBQUks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c0JBQTFCLE1BQU07Z0JBY0ksWUFBWTtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcbiAqXG4gKiBPIGBUYWJsZUNvbXBvbmVudGAgw6kgdW0gY29tcG9uZW50ZSBBbmd1bGFyIHByb2pldGFkbyBwYXJhIGV4aWJpciB1bWEgdGFiZWxhIGN1c3RvbWl6w6F2ZWxcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cbiAqIGRhIHBhZ2luYcOnw6NvIGUgb3DDp8O1ZXMgZGUgaXRlbnMgcG9yIHDDoWdpbmEuIE8gY29tcG9uZW50ZSDDqSBmbGV4w612ZWwsIHV0aWxpemFuZG8gY2xhc3NlcyBCb290c3RyYXBcbiAqIHBhcmEgYWp1c3RhciBvIGxheW91dCBkYXMgY29sdW5hcyBlIGVtaXRpbmRvIGV2ZW50b3MgcGFyYSBxdWUgbyBjb21wb25lbnRlIHBhaSBwb3NzYSByZWFnaXIgYVxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cbiAqXG4gKiBAc2VsZWN0b3IgbGliLXRhYmxlXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxuICogQHN0eWxlVXJsIC4vdGFibGUuY29tcG9uZW50LnNjc3NcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUFJJRURBREVTIDw9PT09PT09PT09XG5cbiAgLy8gI3JlZ2lvbiBQUklWQVRFXG4gIHByaXZhdGUgX3BhZ2luYXRpb25JRDogc3RyaW5nO1xuICAvLyAjZW5kcmVnaW9uIFBSSVZBVEVcblxuICAvLyAjcmVnaW9uIFBVQkxJQ1xuXG4gIC8qKiBEZXRlcm1pbmEgc2UgYSB0YWJlbGEgZGV2ZSB1c2FyIHBhZ2luYcOnw6NvLlxuICAgKiBAZGVmYXVsdCB0cnVlICovXG4gIEBJbnB1dCgpIHB1YmxpYyB1c2VQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxuICAgKiBAcmVxdWlyZWQgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdsaXN0JywgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIHJlY29yZHNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAvKiogT3DDp8O1ZXMgZGUgY29udGFnZW0gZGUgaXRlbnMgcG9yIHDDoWdpbmEgZGlzcG9uw612ZWlzIHBhcmEgbyB1c3XDoXJpby5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XG5cbiAgLyoqIFBvc2ljaW9uYW1lbnRvIGRvcyBjb250cm9sZXMgZGUgcGFnaW5hw6fDo28uXG4gICAqIEBkZWZhdWx0ICdlbmQnICovXG4gIEBJbnB1dCgncGxhY2VtZW50JykgcHVibGljIHBhZ2luYXRpb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2JldHdlZW4nID0gJ2VuZCc7XG5cbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cbiAgICogQHJlcXVpcmVkICovXG4gIEBJbnB1dCh7IGFsaWFzOiAnaGVhZGVycycsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWFkZXJzTGlzdDoge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb2w6IG51bWJlcixcbiAgICBjdXN0b21DbGFzc2VzPzogc3RyaW5nXG4gIH1bXTtcblxuICAvKiogTWVuc2FnZW0gY3VzdG9taXphZGEgcGFyYSBsaXN0YSB2YXppYSAqL1xuICBASW5wdXQoJ2VtcHR5TGlzdE1lc3NhZ2UnKSBwdWJsaWMgZW1wdHlMaXN0TWVzc2FnZT86IHN0cmluZztcblxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSDDqSBhbHRlcmFkby4gKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBhIHDDoWdpbmEgw6kgYWx0ZXJhZGEuICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXG4gIC8qKiBDb250YWRvciBkZSByZWdpc3Ryb3MgKHBvZGUgc2VyIHVzYWRvIHBhcmEgZnV0dXJhcyBpbXBsZW1lbnRhw6fDtWVzIGRlIGzDs2dpY2EgaW50ZXJuYSkuICovXG4gIHB1YmxpYyBjb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIC8qKiBQw6FnaW5hIGF0dWFsIGRhIHRhYmVsYS4gKi9cblx0cHVibGljIHBhZ2U6IG51bWJlciA9IDE7XG5cbiAgLyoqIE7Dum1lcm8gZGUgaXRlbnMgYSBzZXJlbSBleGliaWRvcyBwb3IgcMOhZ2luYS4gKi9cblx0cHVibGljIGl0ZW1zUGVyUGFnZTogbnVtYmVyO1xuXG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwYWdpbmF0aW9uSUQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25JRDsgfVxuICBwdWJsaWMgc2V0IHBhZ2luYXRpb25JRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbklEID0gdmFsdWUgfHwgJ2xpYlRhYmxlUGFnaW5hdGlvbic7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcblxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFBST1BSSUVEQURFUyA8PT09PT09PT09PVxuXG5cbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBJTklDSUFMSVpBw4fDg08gPD09PT09PT09PT1cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvKiogSW5pY2lhbGl6YSBvIGNvbXBvbmVudGUgZSBkZWZpbmUgbyBuw7ptZXJvIGluaWNpYWwgZGUgaXRlbnMgcG9yIHDDoWdpbmEuICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0KSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnMgPyB0aGlzLmNvdW50T3B0aW9uc1swXSA6IHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoIH1cbiAgICBlbHNlIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9uc1swXSA/PyAxMCB9XG5cbiAgICBjb25zb2xlLmxvZyhcInBhZ2luYXRpb25JRDogXCIsIHRoaXMucGFnaW5hdGlvbklEKTtcbiAgICBjb25zb2xlLmxvZyhcInRoaXMucGFnaW5hdGlvbklEID8gdGhpcy5wYWdpbmF0aW9uSUQgOiBudWxsOiBcIiwgdGhpcy5wYWdpbmF0aW9uSUQgPyB0aGlzLnBhZ2luYXRpb25JRCA6IG51bGwpO1xuICB9XG5cbiAgLyoqIE1vbml0b3JhIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZSBlIHJlYWxpemEgYWp1c3RlcywgY29tbyByZXNldGFyIGEgcGFnaW5hw6fDo28gb3UgdmFsaWRhciBvIGxheW91dCBkYXMgY29sdW5hcy5cbiAgICogQHBhcmFtIGNoYW5nZXMgT2JqZXRvIHF1ZSBjb250w6ltIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZS4gKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydyZWNvcmRzTGlzdCddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24odGhpcy5yZWNvcmRzTGlzdCA/PyBbXSk7XG5cbiAgICAgIGxldCBtYXhDb2x1bW5zID0gdGhpcy5oZWFkZXJzTGlzdC5yZWR1Y2UoKG4sIHtjb2x9KSA9PiBuICsgY29sLCAwKTtcbiAgICAgIGlmIChtYXhDb2x1bW5zID49IDEzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgc29tYSBkZSBsYXJndXJhIChjbGFzc2UgY29tIHByZWZpeG8gJ2NvbC0nKSBkZSB0b2RhcyBhcyBjb2x1bmFzIG7Do28gcG9kZSBzZXIgbWFpb3IgcXVlIDEyLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1tcInBhZ2luYXRpb25JRFwiXSkge1xuICAgICAgY29uc29sZS5sb2coJ1BhZ2luYXRpb24gSUQgY2hhbmdlZDonLCB0aGlzLnBhZ2luYXRpb25JRCk7XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XG5cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxuXG4gIC8qKiBNb2RpZmljYSBhIHF1YW50aWRhZGUgZGUgaXRlbnMgYSBzZXIgbW9zdHJhZGEgbmEgbGlzdGEuXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xuICBwdWJsaWMgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuaXRlbXNQZXJQYWdlKTtcbiAgfVxuXG4gIC8qKiBSZXNldGEgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSBjb20gYmFzZSBubyBuw7ptZXJvIGF0dWFsIGRlIHJlZ2lzdHJvcy5cbiAgICogQHBhcmFtIGxpc3QgTGlzdGEgZGUgcmVnaXN0cm9zIHBhcmEgcmVzZXRhciBhIHBhZ2luYcOnw6NvLiAqL1xuICBwdWJsaWMgcmVzZXRQYWdpbmF0aW9uKGxpc3Q6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSBzdGFydEluZGV4KSB7XG4gICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XG5cbn1cbiIsIkBpZiAocmVjb3Jkc0xpc3QpIHtcbiAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICA8IS0tIEV4aWJlIG8gbsO6bWVybyBkZSBpdGVucyBtb3N0cmFkb3MgZSBvIHRvdGFsIGRlIHJlZ2lzdHJvcyAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPiBFeGliaW5kbyB7eyBpdGVtc1BlclBhZ2UgPD0gcmVjb3Jkc0xpc3QubGVuZ3RoID8gaXRlbXNQZXJQYWdlIDogcmVjb3Jkc0xpc3QubGVuZ3RoIH19IGRlIHt7IHJlY29yZHNMaXN0Lmxlbmd0aCB9fSByZWdpc3Ryb3MgPC9zcGFuPlxuICAgICAgXG4gICAgICA8IS0tIENvbnRhaW5lciBkYSB0YWJlbGEgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWJvdHRvbS0wIHJvdW5kZWQtYm90dG9tIHJvdW5kZWRcIj5cbiAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIGJvcmRlciBtYi0wXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8IS0tIEl0ZXJhIHNvYnJlIGEgbGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBjcmlhciBhcyBjb2x1bmFzIC0tPlxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgaGVhZGVyc0xpc3RcIiBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsaWduLW1pZGRsZSB0ZXh0LWRhcmstZ3JleSB7eyBoZWFkZXIuY29sID4gMCA/ICdjb2wtJytoZWFkZXIuY29sIDogJ2NvbCcgfX0ge3sgaGVhZGVyLmN1c3RvbUNsYXNzZXMgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLWxpZ2h0IGZhZGUtaW4tcm93XCI+XG4gICAgICAgICAgICAgICBAaWYgKHJlY29yZHNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGXDumRvIGRhcyBsaW5oYXMgZGEgdGFiZWxhIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lubmVyUm93c11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIE1lbnNhZ2VtIGRlIGF1c8OqbmNpYSBkZSByZWdpc3Ryb3MgLS0+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEyXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbGlnaHQgZnN0LWl0YWxpYyB0ZXh0LWNlbnRlclwiPiB7eyBlbXB0eUxpc3RNZXNzYWdlID8gZW1wdHlMaXN0TWVzc2FnZSA6IFwiQ29uc3VsdGEgbsOjbyByZXRvcm5vdSByZWdpc3Ryb3MuLi5cIiB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICA8IS0tICNyZWdpb24gUEFHSU5Bw4fDg08gLS0+XG4gICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlUGFnaW5hdGlvbiAmJiByZWNvcmRzTGlzdC5sZW5ndGggPiAwXCIgY2xhc3M9XCJkLWZsZXggbXQtMlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LXN0YXJ0JzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnc3RhcnQnLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1jZW50ZXInOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1lbmQnOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdlbmQnLFxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnYmV0d2VlbidcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiBJdGVucyBwb3IgcMOhZ2luYSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHNlbGVjdC1zZWFyY2hcIiAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNvdW50IG9mIGNvdW50T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY291bnRPcHRpb25zLmxlbmd0aCA+IDAgJiYgaSA9PSAwXCI+e3sgY291bnQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ29udHJvbGUgZGUgcGFnaW5hw6fDo28gLS0+XG4gICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9sc1xuICAgICAgICAgICAgICAgY2xhc3M9XCJzcC1wYWdpbmF0aW9uIG10LTNcIlxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgcHJldmlvdXNMYWJlbD1cIsKrJm5ic3A7Jm5ic3A7Jm5ic3A7XCIgbmV4dExhYmVsPVwiJm5ic3A7Jm5ic3A7Jm5ic3A7wrtcIlxuICAgICAgICAgICAgICAgW21heFNpemVdPVwiNVwiPlxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8IS0tICNlbmRyZWdpb24gUEFHSU5Bw4fDg08gLS0+XG4gICAgICA8L2Rpdj5cbiAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxuICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+IDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2FycmVnYW5kbyBpbmZvcm1hw6fDtWVzLi4uPC9zcGFuPiA8L2Rpdj5cbiAgIDwvZGl2PlxufVxuIl19
@@ -3052,16 +3052,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3052
3052
  class TableComponent {
3053
3053
  get paginationID() { return this._paginationID; }
3054
3054
  set paginationID(value) {
3055
- this._paginationID = value;
3056
- this.paginationIDChange.emit(value);
3055
+ this._paginationID = value || 'libTablePagination';
3057
3056
  }
3058
3057
  // #endregion PUBLIC
3059
3058
  // #endregion ==========> PROPRIEDADES <==========
3060
3059
  // #region ==========> INICIALIZAÇÃO <==========
3061
3060
  constructor() {
3062
- // #region ==========> PROPRIEDADES <==========
3063
- // #region PRIVATE
3064
- this._paginationID = "libTablePagination";
3065
3061
  // #endregion PRIVATE
3066
3062
  // #region PUBLIC
3067
3063
  /** Determina se a tabela deve usar paginação.
@@ -3074,13 +3070,10 @@ class TableComponent {
3074
3070
  this.itemsPerPageChange = new EventEmitter();
3075
3071
  /** Evento emitido quando a página é alterada. */
3076
3072
  this.pageChange = new EventEmitter();
3077
- /** Evento emitido quando o ID da paginação é criado no início. */
3078
- this.paginationIDChange = new EventEmitter();
3079
3073
  /** Contador de registros (pode ser usado para futuras implementações de lógica interna). */
3080
3074
  this.counter = 0;
3081
3075
  /** Página atual da tabela. */
3082
3076
  this.page = 1;
3083
- this.paginationID = (Math.random() * 10000).toString();
3084
3077
  }
3085
3078
  /** Inicializa o componente e define o número inicial de itens por página. */
3086
3079
  ngOnInit() {
@@ -3090,6 +3083,8 @@ class TableComponent {
3090
3083
  else {
3091
3084
  this.itemsPerPage = this.countOptions[0] ?? 10;
3092
3085
  }
3086
+ console.log("paginationID: ", this.paginationID);
3087
+ console.log("this.paginationID ? this.paginationID : null: ", this.paginationID ? this.paginationID : null);
3093
3088
  }
3094
3089
  /** Monitora as mudanças nas entradas do componente e realiza ajustes, como resetar a paginação ou validar o layout das colunas.
3095
3090
  * @param changes Objeto que contém as mudanças nas entradas do componente. */
@@ -3101,6 +3096,9 @@ class TableComponent {
3101
3096
  throw new Error("A soma de largura (classe com prefixo 'col-') de todas as colunas não pode ser maior que 12.");
3102
3097
  }
3103
3098
  }
3099
+ if (changes["paginationID"]) {
3100
+ console.log('Pagination ID changed:', this.paginationID);
3101
+ }
3104
3102
  }
3105
3103
  // #endregion ==========> INICIALIZAÇÃO <==========
3106
3104
  // #region ==========> UTILITÁRIOS <==========
@@ -3120,11 +3118,11 @@ class TableComponent {
3120
3118
  }
3121
3119
  }
3122
3120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3123
- 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" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", paginationIDChange: "paginationIDChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
3121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "lib-table", inputs: { usePagination: "usePagination", recordsList: ["list", "recordsList"], countOptions: ["counts", "countOptions"], paginationPlacement: ["placement", "paginationPlacement"], headersList: ["headers", "headersList"], emptyListMessage: "emptyListMessage", paginationID: "paginationID" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }] }); }
3124
3122
  }
3125
3123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
3126
3124
  type: Component,
3127
- args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n [id]=\"paginationID\"\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
3125
+ args: [{ selector: 'lib-table', template: "@if (recordsList) {\n <div class=\"table-list w-100 position-relative\">\n <!-- Exibe o n\u00FAmero de itens mostrados e o total de registros -->\n <span class=\"ms-1\"> Exibindo {{ itemsPerPage <= recordsList.length ? itemsPerPage : recordsList.length }} de {{ recordsList.length }} registros </span>\n \n <!-- Container da tabela -->\n <div class=\"table-list overflow-hidden border-bottom-0 rounded-bottom rounded\">\n <table class=\"table table-hover border mb-0\">\n <thead>\n <tr>\n <!-- Itera sobre a lista de cabe\u00E7alhos para criar as colunas -->\n <th *ngFor=\"let header of headersList\" scope=\"col\"\n class=\"align-middle text-dark-grey {{ header.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\n {{ header.name }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"bg-light fade-in-row\">\n @if (recordsList.length > 0) {\n <!-- Conte\u00FAdo das linhas da tabela -->\n <ng-content select=\"[innerRows]\"></ng-content>\n }\n @else {\n <!-- Mensagem de aus\u00EAncia de registros -->\n <tr>\n <td colspan=\"12\" class=\"align-middle\">\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- #region PAGINA\u00C7\u00C3O -->\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\n [ngClass]=\"{\n 'justify-content-start': paginationPlacement == 'start',\n 'justify-content-center': paginationPlacement == 'center',\n 'justify-content-end': paginationPlacement == 'end',\n 'justify-content-between': paginationPlacement == 'between'\n }\">\n <div class=\"d-flex align-items-center\">\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\n </select>\n </div>\n\n <!-- Controle de pagina\u00E7\u00E3o -->\n <pagination-controls\n class=\"sp-pagination mt-3\"\n (pageChange)=\"page = $event; pageChange.emit($event)\"\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\n [maxSize]=\"5\">\n </pagination-controls>\n </div>\n <!-- #endregion PAGINA\u00C7\u00C3O -->\n </div>\n </div>\n} @else {\n <!-- Loader enquanto os registros s\u00E3o carregados -->\n <div class=\"w-100 text-center\">\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\n </div>\n}\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
3128
3126
  }], ctorParameters: () => [], propDecorators: { usePagination: [{
3129
3127
  type: Input
3130
3128
  }], recordsList: [{
@@ -3146,8 +3144,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3146
3144
  type: Output
3147
3145
  }], pageChange: [{
3148
3146
  type: Output
3149
- }], paginationIDChange: [{
3150
- type: Output
3147
+ }], paginationID: [{
3148
+ type: Input
3151
3149
  }] } });
3152
3150
 
3153
3151
  /**