ngx-sp-infra 2.1.0 → 2.1.2
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.
- package/esm2022/lib/service/modal-utils.service.mjs +11 -6
- package/esm2022/lib/widgets/table/table.component.mjs +25 -11
- package/fesm2022/ngx-sp-infra.mjs +34 -15
- package/fesm2022/ngx-sp-infra.mjs.map +1 -1
- package/lib/service/modal-utils.service.d.ts +1 -1
- package/lib/widgets/table/table.component.d.ts +9 -4
- package/package.json +1 -1
|
@@ -29,11 +29,16 @@ export class ModalUtilsService {
|
|
|
29
29
|
openModalCustom(template, modalID, options = { id: modalID, class: "modal-dialog-centered", ignoreBackdropClick: false, keyboard: false }) {
|
|
30
30
|
this._bsModalService.show(template, options);
|
|
31
31
|
}
|
|
32
|
-
openInitialStateModal(component, initialState, classes = "modal-dialog-centered") {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
openInitialStateModal(component, id, initialState, classes = "modal-dialog-centered") {
|
|
33
|
+
if (component) {
|
|
34
|
+
this._bsModalref = this._bsModalService.show(component, {
|
|
35
|
+
id: id,
|
|
36
|
+
initialState: initialState,
|
|
37
|
+
class: classes
|
|
38
|
+
});
|
|
39
|
+
return this._bsModalref;
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
37
42
|
}
|
|
38
43
|
/**
|
|
39
44
|
* Método para fechar um modal que estiver aberto na tela
|
|
@@ -51,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
51
56
|
providedIn: 'any'
|
|
52
57
|
}]
|
|
53
58
|
}], ctorParameters: () => [{ type: i1.BsModalService }, { type: i1.BsModalRef }] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3NlcnZpY2UvbW9kYWwtdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7QUFNbkUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFxQixlQUErQixFQUFVLFdBQXVCO1FBQWhFLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUssQ0FBQztJQUUzRjs7Ozs7TUFLRTtJQUNJLFNBQVMsQ0FBQyxRQUEwQixFQUFFLE9BQWUsRUFBRSxjQUFzQix1QkFBdUI7UUFDekcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLEVBQUUsRUFBRSxPQUFPO1lBQ1gsS0FBSyxFQUFFLFdBQVc7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUE7Ozs7O01BS0U7SUFDSSxlQUFlLENBQUMsUUFBMEIsRUFBRSxPQUFlLEVBQUUsVUFBd0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtRQUN0TCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUdNLHFCQUFxQixDQUFDLFNBQWlDLEVBQUUsRUFBUSxFQUFFLFlBQWtCLEVBQUUsVUFBa0IsdUJBQXVCO1FBQ3RJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEQsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLEtBQUssRUFBRSxPQUFPO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPO0lBQ1IsQ0FBQztJQUdBOzs7TUFHRTtJQUNLLFVBQVUsQ0FBQyxPQUFlO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBakRVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLEtBQUs7OzRGQUVOLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsS0FBSztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdGFibGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSwgTW9kYWxPcHRpb25zIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ2FueSdcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxVdGlsc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBfYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLCBwcml2YXRlIF9ic01vZGFscmVmOiBCc01vZGFsUmVmICkgeyB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gc2ltcGxlcyBjb20gbyBvYmpldGl2byBkZSBhYnJpciBvcyBtb2RhaXMgbm8gY2VudHJvIGRhIHRlbGEuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSBIVE1MIGRvIG1vZGFsIHF1ZSBzZXLDoSBhYmVydG8uXG4gICAqIEBwYXJhbSBtb2RhbElEIElEIGRvIG1vZGFsIHF1ZSBzZXLDoSBhYmVydG8sIHBhcmEgcXVlIHBvc3NhIHNlciByZWZlcmVuY2lhZG8gZGVwb2lzLlxuICAgKiBAcGFyYW0gY3VzdG9tQ2xhc3MgQ2xhc3NlcyBjdXN0b21pemFkYXMgcGFyYSBvIG1vZGFsLCB2YWxvciBkZWZhdWx0IMOpIFwibW9kYWwtZGlhbG9nLWNlbnRlcmVkXCJcbiAgKi9cbiBwdWJsaWMgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LCBtb2RhbElEOiBudW1iZXIsIGN1c3RvbUNsYXNzOiBzdHJpbmcgPSBcIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiKTogdm9pZCB7XG4gICB0aGlzLl9ic01vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7XG4gICAgIGlkOiBtb2RhbElELFxuICAgICBjbGFzczogY3VzdG9tQ2xhc3MsXG4gICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlLFxuICAgICBrZXlib2FyZDogZmFsc2VcbiAgIH0pO1xuIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBzaW1wbGVzIGNvbSBvIG9iamV0aXZvIGRlIGFicmlyIG9zIG1vZGFpcyBubyBjZW50cm8gZGEgdGVsYS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIFRlbXBsYXRlIEhUTUwgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0by5cbiAgICogQHBhcmFtIG1vZGFsSUQgSUQgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0bywgcGFyYSBxdWUgcG9zc2Egc2VyIHJlZmVyZW5jaWFkbyBkZXBvaXMuXG4gICAqIEBwYXJhbSB7TW9kYWxPcHRpb25zfSBvcHRpb25zIC0gRXN0cnV0dXJhIGRlIG9ww6fDtWVzIGluZm9ybWFkYXMgcGFyYSBjb25maWd1cmFyIG8gbW9kYWwgbWFpcyBhcHJvZnVuZGFkYW1lbnRlXG4gICovXG4gcHVibGljIG9wZW5Nb2RhbEN1c3RvbSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiwgbW9kYWxJRDogbnVtYmVyLCBvcHRpb25zOiBNb2RhbE9wdGlvbnMgPSB7IGlkOiBtb2RhbElELCBjbGFzczogXCJtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiwgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UsIGtleWJvYXJkOiBmYWxzZSB9KTogdm9pZCB7XG4gICB0aGlzLl9ic01vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBvcHRpb25zKTtcbiB9XG5cblxuIHB1YmxpYyBvcGVuSW5pdGlhbFN0YXRlTW9kYWwoY29tcG9uZW50OiBhbnkgfCBUZW1wbGF0ZVJlZjxhbnk+LCBpZD86IGFueSwgaW5pdGlhbFN0YXRlPzogYW55LCBjbGFzc2VzOiBzdHJpbmcgPSBcIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiKTogdm9pZCB8IEJzTW9kYWxSZWYge1xuICBpZiAoY29tcG9uZW50KSB7XG4gICAgdGhpcy5fYnNNb2RhbHJlZiA9IHRoaXMuX2JzTW9kYWxTZXJ2aWNlLnNob3coY29tcG9uZW50LCB7XG4gICAgICBpZDogaWQsXG4gICAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZSxcbiAgICAgIGNsYXNzOiBjbGFzc2VzXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2JzTW9kYWxyZWY7XG4gIH1cblxuICByZXR1cm47XG4gfVxuXG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcGFyYSBmZWNoYXIgdW0gbW9kYWwgcXVlIGVzdGl2ZXIgYWJlcnRvIG5hIHRlbGFcbiAgICogQHBhcmFtIG1vZGFsSUQgSUQgZG8gbW9kYWwgcXVlIHNlcsOhIGZlY2hhZG8sIMOpIG5lY2Vzc8OhcmlvIHVtIElEIHBhcmEgZmVjaGFyIG8gbW9kYWwgY29ycmV0by5cbiAgKi9cbiAgcHVibGljIGNsb3NlTW9kYWwobW9kYWxJRDogbnVtYmVyKTogdm9pZCB7XG4gICAgIHRoaXMuX2JzTW9kYWxTZXJ2aWNlLmhpZGUobW9kYWxJRCk7XG4gIH1cblxufVxuIl19
|
|
@@ -21,20 +21,38 @@ export class TableComponent {
|
|
|
21
21
|
/** Lista de registros a serem exibidos na tabela.
|
|
22
22
|
* @required */
|
|
23
23
|
get recordsList() { return this._recordsList; }
|
|
24
|
-
set recordsList(value) {
|
|
25
|
-
this._recordsList = value;
|
|
26
|
-
console.log("Lista: ", this._recordsList);
|
|
27
|
-
}
|
|
24
|
+
set recordsList(value) { this._recordsList = value; }
|
|
28
25
|
/** Informa um ID para a paginação da tabela específica. Deve ser utilizada em caso de múltiplas tabelas na mesma tela. */
|
|
29
26
|
get paginationID() { return this._paginationID; }
|
|
30
27
|
set paginationID(value) {
|
|
31
28
|
this._paginationID = value || 'libTablePagination';
|
|
32
29
|
}
|
|
30
|
+
/** Página atual da tabela. */
|
|
31
|
+
get page() { return this._currentPage; }
|
|
32
|
+
set page(value) { this._currentPage = value; }
|
|
33
|
+
/** Número de itens a serem exibidos por página. */
|
|
34
|
+
get itemsPerPage() { return this._currentItemsPerPage; }
|
|
35
|
+
set itemsPerPage(value) { this._currentItemsPerPage = value; }
|
|
36
|
+
get firstItemOfPage() {
|
|
37
|
+
return (this.page - 1) * this.itemsPerPage + 1;
|
|
38
|
+
}
|
|
39
|
+
get lastItemOfPage() {
|
|
40
|
+
return Math.min(this.page * this.itemsPerPage, this.recordsList?.length ?? 0);
|
|
41
|
+
}
|
|
42
|
+
// Exemplo de string com a contagem:
|
|
43
|
+
get itemsDisplayText() {
|
|
44
|
+
if (this.recordsList && this.recordsList.length === 0) {
|
|
45
|
+
return `Exibindo ${this.recordsList?.length ?? 0} registros`;
|
|
46
|
+
}
|
|
47
|
+
return `Exibindo ${this.countOptions ? this.firstItemOfPage + "-" + this.lastItemOfPage + " de" : ""} ${this.recordsList?.length ?? 0} registros`;
|
|
48
|
+
}
|
|
33
49
|
// #endregion PUBLIC
|
|
34
50
|
// #endregion ==========> PROPRIEDADES <==========
|
|
35
51
|
// #region ==========> INICIALIZAÇÃO <==========
|
|
36
52
|
constructor(cdr) {
|
|
37
53
|
this.cdr = cdr;
|
|
54
|
+
this._currentPage = 1;
|
|
55
|
+
this._currentItemsPerPage = 0;
|
|
38
56
|
// #endregion PRIVATE
|
|
39
57
|
// #region PUBLIC
|
|
40
58
|
/** Determina se a tabela deve usar paginação.
|
|
@@ -51,10 +69,6 @@ export class TableComponent {
|
|
|
51
69
|
this.itemsPerPageChange = new EventEmitter();
|
|
52
70
|
/** Evento emitido quando a página é alterada. */
|
|
53
71
|
this.pageChange = new EventEmitter();
|
|
54
|
-
/** Contador de registros (pode ser usado para futuras implementações de lógica interna). */
|
|
55
|
-
this.counter = 0;
|
|
56
|
-
/** Página atual da tabela. */
|
|
57
|
-
this.page = 1;
|
|
58
72
|
//#region Ordering, Sorting ou apenas Ordenação
|
|
59
73
|
/** 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
|
|
60
74
|
* dos elementos <th> representa uma coluna, de acordo com a lista de contratos que retorna do backend. */
|
|
@@ -150,11 +164,11 @@ export class TableComponent {
|
|
|
150
164
|
return path.reduce((value, property) => value ? value[property] : '', obj);
|
|
151
165
|
}
|
|
152
166
|
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 }); }
|
|
153
|
-
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\">
|
|
167
|
+
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.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\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 \" nextLabel=\" \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}\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"] }] }); }
|
|
154
168
|
}
|
|
155
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
156
170
|
type: Component,
|
|
157
|
-
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\">
|
|
171
|
+
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.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\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 \" nextLabel=\" \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}\n"] }]
|
|
158
172
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
|
|
159
173
|
type: Input
|
|
160
174
|
}], recordsList: [{
|
|
@@ -182,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
182
196
|
}], pageChange: [{
|
|
183
197
|
type: Output
|
|
184
198
|
}] } });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUzSTs7Ozs7Ozs7Ozs7O0VBWUU7QUFNRixNQUFNLE9BQU8sY0FBYztJQWdCekI7bUJBQ2U7SUFDZixJQUNXLFdBQVcsS0FBd0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFXLFdBQVcsQ0FBQyxLQUF3QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQWlDRCwwSEFBMEg7SUFDMUgsSUFDVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFXLFlBQVksQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLG9CQUFvQixDQUFDO0lBQ3JELENBQUM7SUFrQkQsb0JBQW9CO0lBRXBCLGtEQUFrRDtJQUdsRCxnREFBZ0Q7SUFDaEQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5RTFDLHFCQUFxQjtRQUVyQixpQkFBaUI7UUFFakI7MkJBQ21CO1FBQ0gsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFrQjlDOzRCQUNv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c0JBQWpELEtBQUs7dUJBQUMsa0JBQWtCO2dCQU1JLFdBQVc7c0JBQXZDLEtBQUs7dUJBQUMsYUFBYTtnQkFLVCxZQUFZO3NCQUR0QixLQUFLO2dCQVFXLGtCQUFrQjtzQkFBbEMsTUFBTTtnQkFHVSxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcclxuICpcclxuICogTyBgVGFibGVDb21wb25lbnRgIMOpIHVtIGNvbXBvbmVudGUgQW5ndWxhciBwcm9qZXRhZG8gcGFyYSBleGliaXIgdW1hIHRhYmVsYSBjdXN0b21pesOhdmVsXHJcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cclxuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxyXG4gKiBwYXJhIGFqdXN0YXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMgZSBlbWl0aW5kbyBldmVudG9zIHBhcmEgcXVlIG8gY29tcG9uZW50ZSBwYWkgcG9zc2EgcmVhZ2lyIGFcclxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cclxuICpcclxuICogQHNlbGVjdG9yIGxpYi10YWJsZVxyXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxyXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xyXG4qL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQUklWQVRFXHJcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxyXG5cclxuICAvLyAjcmVnaW9uIFBVQkxJQ1xyXG5cclxuICAvKiogRGV0ZXJtaW5hIHNlIGEgdGFiZWxhIGRldmUgdXNhciBwYWdpbmHDp8Ojby5cclxuICAgKiBAZGVmYXVsdCB0cnVlICovXHJcbiAgQElucHV0KCkgcHVibGljIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBcclxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnbGlzdCcsIHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIGdldCByZWNvcmRzTGlzdCgpOiBhbnlbXSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yZWNvcmRzTGlzdDsgfVxyXG4gIHB1YmxpYyBzZXQgcmVjb3Jkc0xpc3QodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZWNvcmRzTGlzdCA9IHZhbHVlO1xyXG4gICAgY29uc29sZS5sb2coXCJMaXN0YTogXCIsIHRoaXMuX3JlY29yZHNMaXN0KTtcclxuICB9XHJcblxyXG5cclxuICAvKiogT3DDp8O1ZXMgZGUgY29udGFnZW0gZGUgaXRlbnMgcG9yIHDDoWdpbmEgZGlzcG9uw612ZWlzIHBhcmEgbyB1c3XDoXJpby5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoJ2NvdW50cycpIHB1YmxpYyBjb3VudE9wdGlvbnM6IG51bWJlcltdO1xyXG5cclxuXHJcbiAgLyoqIFBvc2ljaW9uYW1lbnRvIGRvcyBjb250cm9sZXMgZGUgcGFnaW5hw6fDo28uXHJcbiAgICogQGRlZmF1bHQgJ2VuZCcgKi9cclxuICBASW5wdXQoJ3BsYWNlbWVudCcpIHB1YmxpYyBwYWdpbmF0aW9uUGxhY2VtZW50OiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyB8ICdiZXR3ZWVuJyA9ICdlbmQnO1xyXG5cclxuXHJcbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2hlYWRlcnMnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgaGVhZGVyc0xpc3Q6IHtcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGNvbDogbnVtYmVyLFxyXG4gICAgY3VzdG9tQ2xhc3Nlcz86IHN0cmluZyxcclxuICAgIG9yZGVyQ29sdW1uPzogc3RyaW5nXHJcbiAgfVtdO1xyXG5cclxuXHJcbiAgLyoqIE1lbnNhZ2VtIGN1c3RvbWl6YWRhIHBhcmEgbGlzdGEgdmF6aWEgKi9cclxuICBASW5wdXQoJ2VtcHR5TGlzdE1lc3NhZ2UnKSBwdWJsaWMgZW1wdHlMaXN0TWVzc2FnZT86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBJbmZvcm1hIHNlIG8gY291bnRlciBkZSByZWdpc3Ryb3MgZGV2ZSBhcGFyZWNlciBvdSBuw6NvLlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIEBJbnB1dCgnc2hvd0NvdW50ZXInKSBwdWJsaWMgc2hvd0NvdW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgLyoqIEluZm9ybWEgdW0gSUQgcGFyYSBhIHBhZ2luYcOnw6NvIGRhIHRhYmVsYSBlc3BlY8OtZmljYS4gRGV2ZSBzZXIgdXRpbGl6YWRhIGVtIGNhc28gZGUgbcO6bHRpcGxhcyB0YWJlbGFzIG5hIG1lc21hIHRlbGEuICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XHJcbiAgcHVibGljIHNldCBwYWdpbmF0aW9uSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGFnaW5hdGlvbklEID0gdmFsdWUgfHwgJ2xpYlRhYmxlUGFnaW5hdGlvbic7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIG7Dum1lcm8gZGUgaXRlbnMgcG9yIHDDoWdpbmEgw6kgYWx0ZXJhZG8uICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBww6FnaW5hIMOpIGFsdGVyYWRhLiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcblxyXG4gIC8qKiBDb250YWRvciBkZSByZWdpc3Ryb3MgKHBvZGUgc2VyIHVzYWRvIHBhcmEgZnV0dXJhcyBpbXBsZW1lbnRhw6fDtWVzIGRlIGzDs2dpY2EgaW50ZXJuYSkuICovXHJcbiAgcHVibGljIGNvdW50ZXI6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBQw6FnaW5hIGF0dWFsIGRhIHRhYmVsYS4gKi9cclxuXHRwdWJsaWMgcGFnZTogbnVtYmVyID0gMTtcclxuXHJcbiAgLyoqIE7Dum1lcm8gZGUgaXRlbnMgYSBzZXJlbSBleGliaWRvcyBwb3IgcMOhZ2luYS4gKi9cclxuXHRwdWJsaWMgaXRlbXNQZXJQYWdlOiBudW1iZXI7XHJcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcblxyXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuXHJcbiAgLyoqIEluaWNpYWxpemEgbyBjb21wb25lbnRlIGUgZGVmaW5lIG8gbsO6bWVybyBpbmljaWFsIGRlIGl0ZW5zIHBvciBww6FnaW5hLiAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3Jkc0xpc3QpIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9ucyA/IHRoaXMuY291bnRPcHRpb25zWzBdIDogdGhpcy5yZWNvcmRzTGlzdC5sZW5ndGggfVxyXG4gICAgZWxzZSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnNbMF0gPz8gMTAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cclxuICB9XHJcblxyXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgT2JqZXRvIHF1ZSBjb250w6ltIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZS4gKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24odGhpcy5yZWNvcmRzTGlzdCA/PyBbXSk7XHJcblxyXG4gICAgICBsZXQgbWF4Q29sdW1ucyA9IHRoaXMuaGVhZGVyc0xpc3QucmVkdWNlKChuLCB7Y29sfSkgPT4gbiArIGNvbCwgMCk7XHJcbiAgICAgIGlmIChtYXhDb2x1bW5zID49IDEzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzb21hIGRlIGxhcmd1cmEgKGNsYXNzZSBjb20gcHJlZml4byAnY29sLScpIGRlIHRvZGFzIGFzIGNvbHVuYXMgbsOjbyBwb2RlIHNlciBtYWlvciBxdWUgMTIuXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxyXG5cclxuICAvKiogTW9kaWZpY2EgYSBxdWFudGlkYWRlIGRlIGl0ZW5zIGEgc2VyIG1vc3RyYWRhIG5hIGxpc3RhLlxyXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xyXG4gIHB1YmxpYyBvblNlbGVjdENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSwgMTApO1xyXG4gICAgdGhpcy5wYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodGhpcy5pdGVtc1BlclBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc2V0YSBhIHBhZ2luYcOnw6NvIGRhIGxpc3RhZ2VtIGNvbSBiYXNlIG5vIG7Dum1lcm8gYXR1YWwgZGUgcmVnaXN0cm9zLlxyXG4gICAqIEBwYXJhbSBsaXN0IExpc3RhIGRlIHJlZ2lzdHJvcyBwYXJhIHJlc2V0YXIgYSBwYWdpbmHDp8Ojby4gKi9cclxuICBwdWJsaWMgcmVzZXRQYWdpbmF0aW9uKGxpc3Q6IGFueVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2U7XHJcbiAgICBpZiAobGlzdC5sZW5ndGggPD0gc3RhcnRJbmRleCkge1xyXG4gICAgICB0aGlzLnBhZ2UgPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHQvLyNyZWdpb24gT3JkZXJpbmcsIFNvcnRpbmcgb3UgYXBlbmFzIE9yZGVuYcOnw6NvXHJcblxyXG5cdC8qKiBNw6l0b2RvIHF1ZSBmYXogYSBvcmRlbmHDp8OjbyBkb3MgY29udHJhdG9zIG5hIHRlbGEgZGUgbGlzdGFnZW0sIGVtIGNhZGEgdW1hIGRhcyBjw6lsdWxhcyBkbyBjYWJlw6dhbGhvIGRhIHRhYmVsYSwgb25kZSBjYWRhIHVtICBcclxuXHQgKiAgZG9zIGVsZW1lbnRvcyA8dGg+IHJlcHJlc2VudGEgdW1hIGNvbHVuYSwgZGUgYWNvcmRvIGNvbSBhIGxpc3RhIGRlIGNvbnRyYXRvcyBxdWUgcmV0b3JuYSBkbyBiYWNrZW5kLiAqL1xyXG5cdC8vIE9iamV0byBwYXJhIGFybWF6ZW5hciBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBkZSBjYWRhIGNvbHVuYVxyXG5cdHB1YmxpYyBzb3J0RGlyZWN0aW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG5cdC8vIENvbHVuYSBhdHVhbG1lbnRlIHNlbGVjaW9uYWRhIHBhcmEgb3JkZW5hw6fDo29cclxuXHRwdWJsaWMgY3VycmVudFNvcnRDb2x1bW46IHN0cmluZyA9ICcnO1xyXG5cclxuXHQvLyBGdW7Dp8OjbyBjaGFtYWRhIHF1YW5kbyBvY29ycmUgdW1hIG11ZGFuw6dhIG5hIG9yZGVuYcOnw6NvXHJcblx0b25Tb3J0Q2hhbmdlKGV2ZW50OiB7IGRpcmVjdGlvbjogc3RyaW5nLCBjb2x1bW46IHN0cmluZyB9KSB7XHJcblx0XHRjb25zdCB7IGRpcmVjdGlvbiwgY29sdW1uIH0gPSBldmVudDtcclxuXHJcblx0XHQvLyBWZXJpZmljYSBzZSBhIGNvbHVuYSBhdHVhbG1lbnRlIHNlbGVjaW9uYWRhIMOpIGEgbWVzbWEgZGEgbm92YSBzZWxlw6fDo29cclxuXHRcdGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuXHRcdFx0Ly8gQWx0ZXJuYSBlbnRyZSAnYXNjJyBlICdkZXNjJyBwYXJhIGEgZGlyZcOnw6NvIGRlIG9yZGVuYcOnw6NvIGRhIGNvbHVuYVxyXG5cdFx0XHR0aGlzLnNvcnREaXJlY3Rpb25bY29sdW1uXSA9IHRoaXMuc29ydERpcmVjdGlvbltjb2x1bW5dID09PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gRGVmaW5lIGEgbm92YSBjb2x1bmEgZSBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBjb21vICdhc2MnXHJcblx0XHRcdHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHsgW2NvbHVtbl06ICdhc2MnIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVhbGl6YSBhIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRcdHRoaXMuc29ydERhdGEoKTtcclxuXHR9XHJcblxyXG5cdC8vIEZ1bsOnw6NvIGRlIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRwcml2YXRlIHNvcnREYXRhKCkge1xyXG5cclxuXHRcdGlmICh0aGlzLnJlY29yZHNMaXN0KSB7XHJcblx0XHRcdGNvbnN0IGdydXBvc0xpc3QgPSB0aGlzLnJlY29yZHNMaXN0O1xyXG5cclxuXHRcdFx0Z3J1cG9zTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gdGhpcy5jdXJyZW50U29ydENvbHVtbjtcclxuXHRcdFx0XHRjb25zdCBkaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb25bYXR0cmlidXRlXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVByb3BlcnRpZXMoYSwgYiwgYXR0cmlidXRlLCBkaXJlY3Rpb24pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gQ29tcGFyYSBvcyB2YWxvcmVzIGRhcyBwcm9wcmllZGFkZXMgZW50cmUgZG9pcyBvYmpldG9zXHJcblx0cHJpdmF0ZSBjb21wYXJlUHJvcGVydGllcyhhOiBhbnksIGI6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHByb3BlcnR5QSA9IHRoaXMuZ2V0UHJvcGVydHkoYSwgYXR0cmlidXRlKS50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0Y29uc3QgcHJvcGVydHlCID0gdGhpcy5nZXRQcm9wZXJ0eShiLCBhdHRyaWJ1dGUpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0aWYgKHByb3BlcnR5QSA8IHByb3BlcnR5Qikge1xyXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocHJvcGVydHlBID4gcHJvcGVydHlCKSB7XHJcblx0XHRcdHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblx0Ly8gT2J0w6ltIG8gdmFsb3IgZGUgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhIGRlIHVtIG9iamV0b1xyXG5cdHByaXZhdGUgZ2V0UHJvcGVydHkob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuXHRcdFxyXG5cdFx0aWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRwYXRoID0gcGF0aC5zcGxpdCgnLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwYXRoLnJlZHVjZSgodmFsdWUsIHByb3BlcnR5KSA9PiB2YWx1ZSA/IHZhbHVlW3Byb3BlcnR5XSA6ICcnLCBvYmopO1xyXG5cdH1cclxuXHQvLyNlbmRyZWdpb24gT3JkZXJpbmcsIFNvcnRpbmcgb3UgYXBlbmFzIE9yZGVuYcOnw6NvXHJcblxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XHJcblxyXG59XHJcbiIsIkBpZiAocmVjb3Jkc0xpc3QpIHtcclxuICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgdy0xMDAgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgPCEtLSBFeGliZSBvIG7Dum1lcm8gZGUgaXRlbnMgbW9zdHJhZG9zIGUgbyB0b3RhbCBkZSByZWdpc3Ryb3MgLS0+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0NvdW50ZXJcIiBjbGFzcz1cIm1zLTFcIj4gRXhpYmluZG8ge3sgaXRlbXNQZXJQYWdlIDw9IHJlY29yZHNMaXN0Lmxlbmd0aCA/IGl0ZW1zUGVyUGFnZSA6IHJlY29yZHNMaXN0Lmxlbmd0aCB9fSBkZSB7eyByZWNvcmRzTGlzdC5sZW5ndGggfX0gcmVnaXN0cm9zIDwvc3Bhbj5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gQ29udGFpbmVyIGRhIHRhYmVsYSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1ib3R0b20tMCByb3VuZGVkLWJvdHRvbSByb3VuZGVkXCI+XHJcbiAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIGJvcmRlciBtYi0wXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEl0ZXJhIHNvYnJlIGEgbGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBjcmlhciBhcyBjb2x1bmFzIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiBoZWFkZXJzTGlzdFwiIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1kYXJrLWdyZXkge3sgaGVhZGVyLmNvbCA+IDAgPyAnY29sLScraGVhZGVyLmNvbCA6ICdjb2wnIH19IHt7IGhlYWRlci5jdXN0b21DbGFzc2VzIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICA8YXBwLW9yZGVyaW5nICpuZ0lmPVwiaGVhZGVyLm9yZGVyQ29sdW1uXCIgWyhzb3J0RGlyZWN0aW9uKV09XCJzb3J0RGlyZWN0aW9uW2hlYWRlci5vcmRlckNvbHVtbl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoeyBkaXJlY3Rpb246ICRldmVudC5kaXJlY3Rpb24sIGNvbHVtbjogaGVhZGVyLm9yZGVyQ29sdW1uIH0pXCI+PC9hcHAtb3JkZXJpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJiZy1saWdodCBmYWRlLWluLXJvd1wiPlxyXG4gICAgICAgICAgICAgICBAaWYgKHJlY29yZHNMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgPCEtLSBDb250ZcO6ZG8gZGFzIGxpbmhhcyBkYSB0YWJlbGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpbm5lclJvd3NdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPCEtLSBNZW5zYWdlbSBkZSBhdXPDqm5jaWEgZGUgcmVnaXN0cm9zIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTJcIiBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWxpZ2h0IGZzdC1pdGFsaWMgdGV4dC1jZW50ZXJcIj4ge3sgZW1wdHlMaXN0TWVzc2FnZSA/IGVtcHR5TGlzdE1lc3NhZ2UgOiBcIkNvbnN1bHRhIG7Do28gcmV0b3Jub3UgcmVnaXN0cm9zLi4uXCIgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICA8IS0tICNyZWdpb24gUEFHSU5Bw4fDg08gLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VQYWdpbmF0aW9uICYmIHJlY29yZHNMaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImQtZmxleCBtdC0yXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LXN0YXJ0JzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LWNlbnRlcic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnZW5kJyxcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnYmV0d2VlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiBJdGVucyBwb3IgcMOhZ2luYSA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3Qgc2VsZWN0LXNlYXJjaFwiIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudCBvZiBjb3VudE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY291bnRPcHRpb25zLmxlbmd0aCA+IDAgJiYgaSA9PSAwXCI+e3sgY291bnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDb250cm9sZSBkZSBwYWdpbmHDp8OjbyAtLT5cclxuICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgW2lkXT1cInBhZ2luYXRpb25JRFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwic3AtcGFnaW5hdGlvbiBtdC0zXCJcclxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICBwcmV2aW91c0xhYmVsPVwiwqsmbmJzcDsmbmJzcDsmbmJzcDtcIiBuZXh0TGFiZWw9XCImbmJzcDsmbmJzcDsmbmJzcDvCu1wiXHJcbiAgICAgICAgICAgICAgIFttYXhTaXplXT1cIjVcIj5cclxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxyXG4gICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPiA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkNhcnJlZ2FuZG8gaW5mb3JtYcOnw7Vlcy4uLjwvc3Bhbj4gPC9kaXY+XHJcbiAgIDwvZGl2PlxyXG59XHJcbiJdfQ==
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUzSTs7Ozs7Ozs7Ozs7O0VBWUU7QUFNRixNQUFNLE9BQU8sY0FBYztJQW1CekI7bUJBQ2U7SUFDZixJQUNXLFdBQVcsS0FBd0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFXLFdBQVcsQ0FBQyxLQUF3QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQWlDL0UsMEhBQTBIO0lBQzFILElBQ1csWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztJQUNyRCxDQUFDO0lBU0QsOEJBQThCO0lBQy9CLElBQVcsSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBVyxJQUFJLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RCxtREFBbUQ7SUFDbkQsSUFBVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQVcsWUFB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QkFBbEMsTUFBTTtnQkFHVSxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgZGUgVGFiZWxhIEN1c3RvbWl6w6F2ZWxcclxuICpcclxuICogTyBgVGFibGVDb21wb25lbnRgIMOpIHVtIGNvbXBvbmVudGUgQW5ndWxhciBwcm9qZXRhZG8gcGFyYSBleGliaXIgdW1hIHRhYmVsYSBjdXN0b21pesOhdmVsXHJcbiAqIGNvbSBzdXBvcnRlIGEgcGFnaW5hw6fDo28uIEVsZSBwZXJtaXRlIGEgY29uZmlndXJhw6fDo28gZGUgY2FiZcOnYWxob3MgZGUgY29sdW5hcywgcG9zaWNpb25hbWVudG9cclxuICogZGEgcGFnaW5hw6fDo28gZSBvcMOnw7VlcyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gTyBjb21wb25lbnRlIMOpIGZsZXjDrXZlbCwgdXRpbGl6YW5kbyBjbGFzc2VzIEJvb3RzdHJhcFxyXG4gKiBwYXJhIGFqdXN0YXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMgZSBlbWl0aW5kbyBldmVudG9zIHBhcmEgcXVlIG8gY29tcG9uZW50ZSBwYWkgcG9zc2EgcmVhZ2lyIGFcclxuICogbXVkYW7Dp2FzIG5hIHDDoWdpbmEgb3Ugbm8gbsO6bWVybyBkZSBpdGVucyBleGliaWRvcy5cclxuICpcclxuICogQHNlbGVjdG9yIGxpYi10YWJsZVxyXG4gKiBAdGVtcGxhdGVVcmwgLi90YWJsZS5jb21wb25lbnQuaHRtbFxyXG4gKiBAc3R5bGVVcmwgLi90YWJsZS5jb21wb25lbnQuc2Nzc1xyXG4qL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQUklWQVRFXHJcbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbklEOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVjb3Jkc0xpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIF9jdXJyZW50SXRlbXNQZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxyXG5cclxuICAvLyAjcmVnaW9uIFBVQkxJQ1xyXG5cclxuICAvKiogRGV0ZXJtaW5hIHNlIGEgdGFiZWxhIGRldmUgdXNhciBwYWdpbmHDp8Ojby5cclxuICAgKiBAZGVmYXVsdCB0cnVlICovXHJcbiAgQElucHV0KCkgcHVibGljIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBcclxuICAvKiogTGlzdGEgZGUgcmVnaXN0cm9zIGEgc2VyZW0gZXhpYmlkb3MgbmEgdGFiZWxhLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnbGlzdCcsIHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHVibGljIGdldCByZWNvcmRzTGlzdCgpOiBhbnlbXSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yZWNvcmRzTGlzdDsgfVxyXG4gIHB1YmxpYyBzZXQgcmVjb3Jkc0xpc3QodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7IHRoaXMuX3JlY29yZHNMaXN0ID0gdmFsdWU7IH1cclxuXHJcblxyXG4gIC8qKiBPcMOnw7VlcyBkZSBjb250YWdlbSBkZSBpdGVucyBwb3IgcMOhZ2luYSBkaXNwb27DrXZlaXMgcGFyYSBvIHVzdcOhcmlvLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCgnY291bnRzJykgcHVibGljIGNvdW50T3B0aW9uczogbnVtYmVyW107XHJcblxyXG5cclxuICAvKiogUG9zaWNpb25hbWVudG8gZG9zIGNvbnRyb2xlcyBkZSBwYWdpbmHDp8Ojby5cclxuICAgKiBAZGVmYXVsdCAnZW5kJyAqL1xyXG4gIEBJbnB1dCgncGxhY2VtZW50JykgcHVibGljIHBhZ2luYXRpb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2JldHdlZW4nID0gJ2VuZCc7XHJcblxyXG5cclxuICAvKiogTGlzdGEgZGUgY2FiZcOnYWxob3MgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYSwgaW5jbHVpbmRvIG8gbm9tZSwgYSBsYXJndXJhIGRhIGNvbHVuYSBlIGNsYXNzZXMgY3VzdG9taXphZGFzLlxyXG4gICAqIEByZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAnaGVhZGVycycsIHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWFkZXJzTGlzdDoge1xyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgY29sOiBudW1iZXIsXHJcbiAgICBjdXN0b21DbGFzc2VzPzogc3RyaW5nLFxyXG4gICAgb3JkZXJDb2x1bW4/OiBzdHJpbmdcclxuICB9W107XHJcblxyXG5cclxuICAvKiogTWVuc2FnZW0gY3VzdG9taXphZGEgcGFyYSBsaXN0YSB2YXppYSAqL1xyXG4gIEBJbnB1dCgnZW1wdHlMaXN0TWVzc2FnZScpIHB1YmxpYyBlbXB0eUxpc3RNZXNzYWdlPzogc3RyaW5nO1xyXG5cclxuXHJcbiAgLyoqIEluZm9ybWEgc2UgbyBjb3VudGVyIGRlIHJlZ2lzdHJvcyBkZXZlIGFwYXJlY2VyIG91IG7Do28uXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICovXHJcbiAgQElucHV0KCdzaG93Q291bnRlcicpIHB1YmxpYyBzaG93Q291bnRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICAvKiogSW5mb3JtYSB1bSBJRCBwYXJhIGEgcGFnaW5hw6fDo28gZGEgdGFiZWxhIGVzcGVjw61maWNhLiBEZXZlIHNlciB1dGlsaXphZGEgZW0gY2FzbyBkZSBtw7psdGlwbGFzIHRhYmVsYXMgbmEgbWVzbWEgdGVsYS4gKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcGFnaW5hdGlvbklEKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9wYWdpbmF0aW9uSUQ7IH1cclxuICBwdWJsaWMgc2V0IHBhZ2luYXRpb25JRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0aW9uSUQgPSB2YWx1ZSB8fCAnbGliVGFibGVQYWdpbmF0aW9uJztcclxuICB9XHJcblxyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSDDqSBhbHRlcmFkby4gKi9cclxuICBAT3V0cHV0KCkgcHVibGljIGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBhIHDDoWdpbmEgw6kgYWx0ZXJhZGEuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICAvKiogUMOhZ2luYSBhdHVhbCBkYSB0YWJlbGEuICovXHJcblx0cHVibGljIGdldCBwYWdlKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9jdXJyZW50UGFnZTsgfVxyXG5cdHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsdWU7IH1cclxuXHJcbiAgLyoqIE7Dum1lcm8gZGUgaXRlbnMgYSBzZXJlbSBleGliaWRvcyBwb3IgcMOhZ2luYS4gKi9cclxuICBwdWJsaWMgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fY3VycmVudEl0ZW1zUGVyUGFnZTsgfVxyXG5cdHB1YmxpYyBzZXQgaXRlbXNQZXJQYWdlKHZhbHVlOiBudW1iZXIpIHsgdGhpcy5fY3VycmVudEl0ZW1zUGVyUGFnZSA9IHZhbHVlOyB9XHJcblxyXG5cclxuICBwdWJsaWMgZ2V0IGZpcnN0SXRlbU9mUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlICsgMTtcclxuICB9XHJcbiAgcHVibGljIGdldCBsYXN0SXRlbU9mUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMucGFnZSAqIHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMCk7XHJcbiAgfVxyXG5cclxuICAvLyBFeGVtcGxvIGRlIHN0cmluZyBjb20gYSBjb250YWdlbTpcclxuICBwdWJsaWMgZ2V0IGl0ZW1zRGlzcGxheVRleHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0ICYmIHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoID09PSAwKSB7IHJldHVybiBgRXhpYmluZG8gJHt0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMH0gcmVnaXN0cm9zYDsgfVxyXG4gICAgcmV0dXJuIGBFeGliaW5kbyAkeyB0aGlzLmNvdW50T3B0aW9ucyA/IHRoaXMuZmlyc3RJdGVtT2ZQYWdlK1wiLVwiK3RoaXMubGFzdEl0ZW1PZlBhZ2UgKyBcIiBkZVwiIDogXCJcIiB9ICR7dGhpcy5yZWNvcmRzTGlzdD8ubGVuZ3RoID8/IDB9IHJlZ2lzdHJvc2A7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gUFVCTElDXHJcblxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFJPUFJJRURBREVTIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IElOSUNJQUxJWkHDh8ODTyA8PT09PT09PT09PVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIC8qKiBJbmljaWFsaXphIG8gY29tcG9uZW50ZSBlIGRlZmluZSBvIG7Dum1lcm8gaW5pY2lhbCBkZSBpdGVucyBwb3IgcMOhZ2luYS4gKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlY29yZHNMaXN0KSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnMgPyB0aGlzLmNvdW50T3B0aW9uc1swXSA6IHRoaXMucmVjb3Jkc0xpc3QubGVuZ3RoIH1cclxuICAgIGVsc2UgeyB0aGlzLml0ZW1zUGVyUGFnZSA9IHRoaXMuY291bnRPcHRpb25zWzBdID8/IDEwIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgIC8vIEZvcsOnYXIgdW1hIG5vdmEgZGV0ZWPDp8OjbyBhcMOzcyBhIHJlbmRlcml6YcOnw6NvXHJcbiAgfVxyXG5cclxuICAvKiogTW9uaXRvcmEgYXMgbXVkYW7Dp2FzIG5hcyBlbnRyYWRhcyBkbyBjb21wb25lbnRlIGUgcmVhbGl6YSBhanVzdGVzLCBjb21vIHJlc2V0YXIgYSBwYWdpbmHDp8OjbyBvdSB2YWxpZGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzLlxyXG4gICAqIEBwYXJhbSBjaGFuZ2VzIE9iamV0byBxdWUgY29udMOpbSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUuICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZHNMaXN0J10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uKHRoaXMucmVjb3Jkc0xpc3QgPz8gW10pO1xyXG5cclxuICAgICAgbGV0IG1heENvbHVtbnMgPSB0aGlzLmhlYWRlcnNMaXN0LnJlZHVjZSgobiwge2NvbH0pID0+IG4gKyBjb2wsIDApO1xyXG4gICAgICBpZiAobWF4Q29sdW1ucyA+PSAxMykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgc29tYSBkZSBsYXJndXJhIChjbGFzc2UgY29tIHByZWZpeG8gJ2NvbC0nKSBkZSB0b2RhcyBhcyBjb2x1bmFzIG7Do28gcG9kZSBzZXIgbWFpb3IgcXVlIDEyLlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IElOSUNJQUxJWkHDh8ODTyA8PT09PT09PT09PVxyXG5cclxuXHJcbiAgLy8gI3JlZ2lvbiA9PT09PT09PT09PiBVVElMSVTDgVJJT1MgPD09PT09PT09PT1cclxuXHJcbiAgLyoqIE1vZGlmaWNhIGEgcXVhbnRpZGFkZSBkZSBpdGVucyBhIHNlciBtb3N0cmFkYSBuYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gZXZlbnQgcGFyw6JtZXRybyBkZSBldmVudG8gcXVlIGlyw6Egc2VsZWNpb25hciBhIG5vdmEgcXVhbnRpZGFkZS4gKi9cclxuICBwdWJsaWMgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUsIDEwKTtcclxuICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXNldGEgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSBjb20gYmFzZSBubyBuw7ptZXJvIGF0dWFsIGRlIHJlZ2lzdHJvcy5cclxuICAgKiBAcGFyYW0gbGlzdCBMaXN0YSBkZSByZWdpc3Ryb3MgcGFyYSByZXNldGFyIGEgcGFnaW5hw6fDo28uICovXHJcbiAgcHVibGljIHJlc2V0UGFnaW5hdGlvbihsaXN0OiBhbnlbXSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xyXG4gICAgaWYgKGxpc3QubGVuZ3RoIDw9IHN0YXJ0SW5kZXgpIHtcclxuICAgICAgdGhpcy5wYWdlID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcblx0Ly8jcmVnaW9uIE9yZGVyaW5nLCBTb3J0aW5nIG91IGFwZW5hcyBPcmRlbmHDp8Ojb1xyXG5cclxuXHQvKiogTcOpdG9kbyBxdWUgZmF6IGEgb3JkZW5hw6fDo28gZG9zIGNvbnRyYXRvcyBuYSB0ZWxhIGRlIGxpc3RhZ2VtLCBlbSBjYWRhIHVtYSBkYXMgY8OpbHVsYXMgZG8gY2FiZcOnYWxobyBkYSB0YWJlbGEsIG9uZGUgY2FkYSB1bSAgXHJcblx0ICogIGRvcyBlbGVtZW50b3MgPHRoPiByZXByZXNlbnRhIHVtYSBjb2x1bmEsIGRlIGFjb3JkbyBjb20gYSBsaXN0YSBkZSBjb250cmF0b3MgcXVlIHJldG9ybmEgZG8gYmFja2VuZC4gKi9cclxuXHQvLyBPYmpldG8gcGFyYSBhcm1hemVuYXIgYSBkaXJlw6fDo28gZGUgb3JkZW5hw6fDo28gZGUgY2FkYSBjb2x1bmFcclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuXHQvLyBDb2x1bmEgYXR1YWxtZW50ZSBzZWxlY2lvbmFkYSBwYXJhIG9yZGVuYcOnw6NvXHJcblx0cHVibGljIGN1cnJlbnRTb3J0Q29sdW1uOiBzdHJpbmcgPSAnJztcclxuXHJcblx0Ly8gRnVuw6fDo28gY2hhbWFkYSBxdWFuZG8gb2NvcnJlIHVtYSBtdWRhbsOnYSBuYSBvcmRlbmHDp8Ojb1xyXG5cdG9uU29ydENoYW5nZShldmVudDogeyBkaXJlY3Rpb246IHN0cmluZywgY29sdW1uOiBzdHJpbmcgfSkge1xyXG5cdFx0Y29uc3QgeyBkaXJlY3Rpb24sIGNvbHVtbiB9ID0gZXZlbnQ7XHJcblxyXG5cdFx0Ly8gVmVyaWZpY2Egc2UgYSBjb2x1bmEgYXR1YWxtZW50ZSBzZWxlY2lvbmFkYSDDqSBhIG1lc21hIGRhIG5vdmEgc2VsZcOnw6NvXHJcblx0XHRpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XHJcblx0XHRcdC8vIEFsdGVybmEgZW50cmUgJ2FzYycgZSAnZGVzYycgcGFyYSBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBkYSBjb2x1bmFcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uW2NvbHVtbl0gPSB0aGlzLnNvcnREaXJlY3Rpb25bY29sdW1uXSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIERlZmluZSBhIG5vdmEgY29sdW5hIGUgYSBkaXJlw6fDo28gZGUgb3JkZW5hw6fDo28gY29tbyAnYXNjJ1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xyXG5cdFx0XHR0aGlzLnNvcnREaXJlY3Rpb24gPSB7IFtjb2x1bW5dOiAnYXNjJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlYWxpemEgYSBvcmRlbmHDp8OjbyBkb3MgZGFkb3MgZGEgdGFiZWxhXHJcblx0XHR0aGlzLnNvcnREYXRhKCk7XHJcblx0fVxyXG5cclxuXHQvLyBGdW7Dp8OjbyBkZSBvcmRlbmHDp8OjbyBkb3MgZGFkb3MgZGEgdGFiZWxhXHJcblx0cHJpdmF0ZSBzb3J0RGF0YSgpIHtcclxuXHJcblx0XHRpZiAodGhpcy5yZWNvcmRzTGlzdCkge1xyXG5cdFx0XHRjb25zdCBncnVwb3NMaXN0ID0gdGhpcy5yZWNvcmRzTGlzdDtcclxuXHJcblx0XHRcdGdydXBvc0xpc3Quc29ydCgoYSwgYikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuY3VycmVudFNvcnRDb2x1bW47XHJcblx0XHRcdFx0Y29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uW2F0dHJpYnV0ZV07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVQcm9wZXJ0aWVzKGEsIGIsIGF0dHJpYnV0ZSwgZGlyZWN0aW9uKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIENvbXBhcmEgb3MgdmFsb3JlcyBkYXMgcHJvcHJpZWRhZGVzIGVudHJlIGRvaXMgb2JqZXRvc1xyXG5cdHByaXZhdGUgY29tcGFyZVByb3BlcnRpZXMoYTogYW55LCBiOiBhbnksIGF0dHJpYnV0ZTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZyk6IG51bWJlciB7XHJcblx0XHRjb25zdCBwcm9wZXJ0eUEgPSB0aGlzLmdldFByb3BlcnR5KGEsIGF0dHJpYnV0ZSkudG9VcHBlckNhc2UoKTtcclxuXHRcdGNvbnN0IHByb3BlcnR5QiA9IHRoaXMuZ2V0UHJvcGVydHkoYiwgYXR0cmlidXRlKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdGlmIChwcm9wZXJ0eUEgPCBwcm9wZXJ0eUIpIHtcclxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHByb3BlcnR5QSA+IHByb3BlcnR5Qikge1xyXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdC8vIE9idMOpbSBvIHZhbG9yIGRlIHVtYSBwcm9wcmllZGFkZSBlc3BlY8OtZmljYSBkZSB1bSBvYmpldG9cclxuXHRwcml2YXRlIGdldFByb3BlcnR5KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XHJcblx0XHRcclxuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0cGF0aCA9IHBhdGguc3BsaXQoJy4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcGF0aC5yZWR1Y2UoKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWUgPyB2YWx1ZVtwcm9wZXJ0eV0gOiAnJywgb2JqKTtcclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uIE9yZGVyaW5nLCBTb3J0aW5nIG91IGFwZW5hcyBPcmRlbmHDp8Ojb1xyXG5cclxuICAvLyAjZW5kcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxyXG5cclxufVxyXG4iLCJAaWYgKHJlY29yZHNMaXN0KSB7XHJcbiAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDwhLS0gRXhpYmUgbyBuw7ptZXJvIGRlIGl0ZW5zIG1vc3RyYWRvcyBlIG8gdG90YWwgZGUgcmVnaXN0cm9zIC0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInNob3dDb3VudGVyXCIgY2xhc3M9XCJtcy0xXCI+IHt7IGl0ZW1zRGlzcGxheVRleHQgfX0gPC9zcGFuPlxyXG4gICAgICBcclxuICAgICAgPCEtLSBDb250YWluZXIgZGEgdGFiZWxhIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbGlzdCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWJvdHRvbS0wIHJvdW5kZWQtYm90dG9tIHJvdW5kZWRcIj5cclxuICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgYm9yZGVyIG1iLTBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSXRlcmEgc29icmUgYSBsaXN0YSBkZSBjYWJlw6dhbGhvcyBwYXJhIGNyaWFyIGFzIGNvbHVuYXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYWRlcnNMaXN0XCIgc2NvcGU9XCJjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsaWduLW1pZGRsZSB0ZXh0LWRhcmstZ3JleSB7eyBoZWFkZXIuY29sID4gMCA/ICdjb2wtJytoZWFkZXIuY29sIDogJ2NvbCcgfX0ge3sgaGVhZGVyLmN1c3RvbUNsYXNzZXMgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLm5hbWUgfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIDxhcHAtb3JkZXJpbmcgKm5nSWY9XCJoZWFkZXIub3JkZXJDb2x1bW5cIiBbKHNvcnREaXJlY3Rpb24pXT1cInNvcnREaXJlY3Rpb25baGVhZGVyLm9yZGVyQ29sdW1uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSh7IGRpcmVjdGlvbjogJGV2ZW50LmRpcmVjdGlvbiwgY29sdW1uOiBoZWFkZXIub3JkZXJDb2x1bW4gfSlcIj48L2FwcC1vcmRlcmluZz5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLWxpZ2h0IGZhZGUtaW4tcm93XCI+XHJcbiAgICAgICAgICAgICAgIEBpZiAocmVjb3Jkc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICA8IS0tIENvbnRlw7pkbyBkYXMgbGluaGFzIGRhIHRhYmVsYSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lubmVyUm93c11cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8IS0tIE1lbnNhZ2VtIGRlIGF1c8OqbmNpYSBkZSByZWdpc3Ryb3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMlwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRleHQtY2VudGVyIHAtNCB0ZXh0LWRhcmstZ3JleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgZW1wdHlMaXN0TWVzc2FnZSA/IGVtcHR5TGlzdE1lc3NhZ2UgOiBcIk7Do28gaMOhIGRhZG9zIHBhcmEgc2VyZW0gbGlzdGFkb3MuXCIgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICA8IS0tICNyZWdpb24gUEFHSU5Bw4fDg08gLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VQYWdpbmF0aW9uICYmIHJlY29yZHNMaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImQtZmxleCBtdC0yXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LXN0YXJ0JzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LWNlbnRlcic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnZW5kJyxcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzogcGFnaW5hdGlvblBsYWNlbWVudCA9PSAnYmV0d2VlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiBJdGVucyBwb3IgcMOhZ2luYSA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3Qgc2VsZWN0LXNlYXJjaFwiIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudCBvZiBjb3VudE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY291bnRPcHRpb25zLmxlbmd0aCA+IDAgJiYgaSA9PSAwXCI+e3sgY291bnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDb250cm9sZSBkZSBwYWdpbmHDp8OjbyAtLT5cclxuICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgW2lkXT1cInBhZ2luYXRpb25JRFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwic3AtcGFnaW5hdGlvbiBtdC0zXCJcclxuICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZSA9ICRldmVudDsgcGFnZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICBwcmV2aW91c0xhYmVsPVwiwqsmbmJzcDsmbmJzcDsmbmJzcDtcIiBuZXh0TGFiZWw9XCImbmJzcDsmbmJzcDsmbmJzcDvCu1wiXHJcbiAgICAgICAgICAgICAgIFttYXhTaXplXT1cIjVcIj5cclxuICAgICAgICAgICAgPC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gICA8IS0tIExvYWRlciBlbnF1YW50byBvcyByZWdpc3Ryb3Mgc8OjbyBjYXJyZWdhZG9zIC0tPlxyXG4gICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPiA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkNhcnJlZ2FuZG8gaW5mb3JtYcOnw7Vlcy4uLjwvc3Bhbj4gPC9kaXY+XHJcbiAgIDwvZGl2PlxyXG59XHJcbiJdfQ==
|
|
@@ -3086,20 +3086,38 @@ class TableComponent {
|
|
|
3086
3086
|
/** Lista de registros a serem exibidos na tabela.
|
|
3087
3087
|
* @required */
|
|
3088
3088
|
get recordsList() { return this._recordsList; }
|
|
3089
|
-
set recordsList(value) {
|
|
3090
|
-
this._recordsList = value;
|
|
3091
|
-
console.log("Lista: ", this._recordsList);
|
|
3092
|
-
}
|
|
3089
|
+
set recordsList(value) { this._recordsList = value; }
|
|
3093
3090
|
/** Informa um ID para a paginação da tabela específica. Deve ser utilizada em caso de múltiplas tabelas na mesma tela. */
|
|
3094
3091
|
get paginationID() { return this._paginationID; }
|
|
3095
3092
|
set paginationID(value) {
|
|
3096
3093
|
this._paginationID = value || 'libTablePagination';
|
|
3097
3094
|
}
|
|
3095
|
+
/** Página atual da tabela. */
|
|
3096
|
+
get page() { return this._currentPage; }
|
|
3097
|
+
set page(value) { this._currentPage = value; }
|
|
3098
|
+
/** Número de itens a serem exibidos por página. */
|
|
3099
|
+
get itemsPerPage() { return this._currentItemsPerPage; }
|
|
3100
|
+
set itemsPerPage(value) { this._currentItemsPerPage = value; }
|
|
3101
|
+
get firstItemOfPage() {
|
|
3102
|
+
return (this.page - 1) * this.itemsPerPage + 1;
|
|
3103
|
+
}
|
|
3104
|
+
get lastItemOfPage() {
|
|
3105
|
+
return Math.min(this.page * this.itemsPerPage, this.recordsList?.length ?? 0);
|
|
3106
|
+
}
|
|
3107
|
+
// Exemplo de string com a contagem:
|
|
3108
|
+
get itemsDisplayText() {
|
|
3109
|
+
if (this.recordsList && this.recordsList.length === 0) {
|
|
3110
|
+
return `Exibindo ${this.recordsList?.length ?? 0} registros`;
|
|
3111
|
+
}
|
|
3112
|
+
return `Exibindo ${this.countOptions ? this.firstItemOfPage + "-" + this.lastItemOfPage + " de" : ""} ${this.recordsList?.length ?? 0} registros`;
|
|
3113
|
+
}
|
|
3098
3114
|
// #endregion PUBLIC
|
|
3099
3115
|
// #endregion ==========> PROPRIEDADES <==========
|
|
3100
3116
|
// #region ==========> INICIALIZAÇÃO <==========
|
|
3101
3117
|
constructor(cdr) {
|
|
3102
3118
|
this.cdr = cdr;
|
|
3119
|
+
this._currentPage = 1;
|
|
3120
|
+
this._currentItemsPerPage = 0;
|
|
3103
3121
|
// #endregion PRIVATE
|
|
3104
3122
|
// #region PUBLIC
|
|
3105
3123
|
/** Determina se a tabela deve usar paginação.
|
|
@@ -3116,10 +3134,6 @@ class TableComponent {
|
|
|
3116
3134
|
this.itemsPerPageChange = new EventEmitter();
|
|
3117
3135
|
/** Evento emitido quando a página é alterada. */
|
|
3118
3136
|
this.pageChange = new EventEmitter();
|
|
3119
|
-
/** Contador de registros (pode ser usado para futuras implementações de lógica interna). */
|
|
3120
|
-
this.counter = 0;
|
|
3121
|
-
/** Página atual da tabela. */
|
|
3122
|
-
this.page = 1;
|
|
3123
3137
|
//#region Ordering, Sorting ou apenas Ordenação
|
|
3124
3138
|
/** 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
|
|
3125
3139
|
* dos elementos <th> representa uma coluna, de acordo com a lista de contratos que retorna do backend. */
|
|
@@ -3215,11 +3229,11 @@ class TableComponent {
|
|
|
3215
3229
|
return path.reduce((value, property) => value ? value[property] : '', obj);
|
|
3216
3230
|
}
|
|
3217
3231
|
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 }); }
|
|
3218
|
-
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\">
|
|
3232
|
+
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.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\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 \" nextLabel=\" \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}\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"] }] }); }
|
|
3219
3233
|
}
|
|
3220
3234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
3221
3235
|
type: Component,
|
|
3222
|
-
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\">
|
|
3236
|
+
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.col > 0 ? 'col-'+header.col : 'col' }} {{ header.customClasses }}\">\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 \" nextLabel=\" \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}\n"] }]
|
|
3223
3237
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
|
|
3224
3238
|
type: Input
|
|
3225
3239
|
}], recordsList: [{
|
|
@@ -4642,11 +4656,16 @@ class ModalUtilsService {
|
|
|
4642
4656
|
openModalCustom(template, modalID, options = { id: modalID, class: "modal-dialog-centered", ignoreBackdropClick: false, keyboard: false }) {
|
|
4643
4657
|
this._bsModalService.show(template, options);
|
|
4644
4658
|
}
|
|
4645
|
-
openInitialStateModal(component, initialState, classes = "modal-dialog-centered") {
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4659
|
+
openInitialStateModal(component, id, initialState, classes = "modal-dialog-centered") {
|
|
4660
|
+
if (component) {
|
|
4661
|
+
this._bsModalref = this._bsModalService.show(component, {
|
|
4662
|
+
id: id,
|
|
4663
|
+
initialState: initialState,
|
|
4664
|
+
class: classes
|
|
4665
|
+
});
|
|
4666
|
+
return this._bsModalref;
|
|
4667
|
+
}
|
|
4668
|
+
return;
|
|
4650
4669
|
}
|
|
4651
4670
|
/**
|
|
4652
4671
|
* Método para fechar um modal que estiver aberto na tela
|