ngx-sp-infra 2.1.1 → 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.
@@ -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
- this._bsModalref = this._bsModalService.show(component, {
34
- initialState: initialState,
35
- class: classes
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3NlcnZpY2UvbW9kYWwtdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7QUFNbkUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFxQixlQUErQixFQUFVLFdBQXVCO1FBQWhFLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUssQ0FBQztJQUUzRjs7Ozs7TUFLRTtJQUNJLFNBQVMsQ0FBQyxRQUEwQixFQUFFLE9BQWUsRUFBRSxjQUFzQix1QkFBdUI7UUFDekcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLEVBQUUsRUFBRSxPQUFPO1lBQ1gsS0FBSyxFQUFFLFdBQVc7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUE7Ozs7O01BS0U7SUFDSSxlQUFlLENBQUMsUUFBMEIsRUFBRSxPQUFlLEVBQUUsVUFBd0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtRQUN0TCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUdNLHFCQUFxQixDQUFDLFNBQW9DLEVBQUUsWUFBa0IsRUFBRSxVQUFrQix1QkFBdUI7UUFDL0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEQsWUFBWSxFQUFFLFlBQVk7WUFDMUIsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDLENBQUM7SUFDSixDQUFDO0lBR0E7OztNQUdFO0lBQ0ssVUFBVSxDQUFDLE9BQWU7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0EzQ1UsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsS0FBSzs7NEZBRU4saUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYsIEJzTW9kYWxTZXJ2aWNlLCBNb2RhbE9wdGlvbnMgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55J1xufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFV0aWxzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIF9ic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsIHByaXZhdGUgX2JzTW9kYWxyZWY6IEJzTW9kYWxSZWYgKSB7IH1cblxuICAvKipcbiAgICogTcOpdG9kbyBzaW1wbGVzIGNvbSBvIG9iamV0aXZvIGRlIGFicmlyIG9zIG1vZGFpcyBubyBjZW50cm8gZGEgdGVsYS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIFRlbXBsYXRlIEhUTUwgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0by5cbiAgICogQHBhcmFtIG1vZGFsSUQgSUQgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0bywgcGFyYSBxdWUgcG9zc2Egc2VyIHJlZmVyZW5jaWFkbyBkZXBvaXMuXG4gICAqIEBwYXJhbSBjdXN0b21DbGFzcyBDbGFzc2VzIGN1c3RvbWl6YWRhcyBwYXJhIG8gbW9kYWwsIHZhbG9yIGRlZmF1bHQgw6kgXCJtb2RhbC1kaWFsb2ctY2VudGVyZWRcIlxuICAqL1xuIHB1YmxpYyBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sIG1vZGFsSUQ6IG51bWJlciwgY3VzdG9tQ2xhc3M6IHN0cmluZyA9IFwibW9kYWwtZGlhbG9nLWNlbnRlcmVkXCIpOiB2b2lkIHtcbiAgIHRoaXMuX2JzTW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHtcbiAgICAgaWQ6IG1vZGFsSUQsXG4gICAgIGNsYXNzOiBjdXN0b21DbGFzcyxcbiAgICAgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UsXG4gICAgIGtleWJvYXJkOiBmYWxzZVxuICAgfSk7XG4gfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHNpbXBsZXMgY29tIG8gb2JqZXRpdm8gZGUgYWJyaXIgb3MgbW9kYWlzIG5vIGNlbnRybyBkYSB0ZWxhLlxuICAgKiBAcGFyYW0gdGVtcGxhdGUgVGVtcGxhdGUgSFRNTCBkbyBtb2RhbCBxdWUgc2Vyw6EgYWJlcnRvLlxuICAgKiBAcGFyYW0gbW9kYWxJRCBJRCBkbyBtb2RhbCBxdWUgc2Vyw6EgYWJlcnRvLCBwYXJhIHF1ZSBwb3NzYSBzZXIgcmVmZXJlbmNpYWRvIGRlcG9pcy5cbiAgICogQHBhcmFtIHtNb2RhbE9wdGlvbnN9IG9wdGlvbnMgLSBFc3RydXR1cmEgZGUgb3DDp8O1ZXMgaW5mb3JtYWRhcyBwYXJhIGNvbmZpZ3VyYXIgbyBtb2RhbCBtYWlzIGFwcm9mdW5kYWRhbWVudGVcbiAgKi9cbiBwdWJsaWMgb3Blbk1vZGFsQ3VzdG9tKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LCBtb2RhbElEOiBudW1iZXIsIG9wdGlvbnM6IE1vZGFsT3B0aW9ucyA9IHsgaWQ6IG1vZGFsSUQsIGNsYXNzOiBcIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSwga2V5Ym9hcmQ6IGZhbHNlIH0pOiB2b2lkIHtcbiAgIHRoaXMuX2JzTW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIG9wdGlvbnMpO1xuIH1cblxuXG4gcHVibGljIG9wZW5Jbml0aWFsU3RhdGVNb2RhbChjb21wb25lbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGluaXRpYWxTdGF0ZT86IGFueSwgY2xhc3Nlczogc3RyaW5nID0gXCJtb2RhbC1kaWFsb2ctY2VudGVyZWRcIik6IHZvaWQge1xuICB0aGlzLl9ic01vZGFscmVmID0gdGhpcy5fYnNNb2RhbFNlcnZpY2Uuc2hvdyhjb21wb25lbnQsIHtcbiAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZSxcbiAgICBjbGFzczogY2xhc3Nlc1xuICB9KTtcbiB9XG5cblxuICAvKipcbiAgICogTcOpdG9kbyBwYXJhIGZlY2hhciB1bSBtb2RhbCBxdWUgZXN0aXZlciBhYmVydG8gbmEgdGVsYVxuICAgKiBAcGFyYW0gbW9kYWxJRCBJRCBkbyBtb2RhbCBxdWUgc2Vyw6EgZmVjaGFkbywgw6kgbmVjZXNzw6FyaW8gdW0gSUQgcGFyYSBmZWNoYXIgbyBtb2RhbCBjb3JyZXRvLlxuICAqL1xuICBwdWJsaWMgY2xvc2VNb2RhbChtb2RhbElEOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgdGhpcy5fYnNNb2RhbFNlcnZpY2UuaGlkZShtb2RhbElEKTtcbiAgfVxuXG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3NlcnZpY2UvbW9kYWwtdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7QUFNbkUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFxQixlQUErQixFQUFVLFdBQXVCO1FBQWhFLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUssQ0FBQztJQUUzRjs7Ozs7TUFLRTtJQUNJLFNBQVMsQ0FBQyxRQUEwQixFQUFFLE9BQWUsRUFBRSxjQUFzQix1QkFBdUI7UUFDekcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLEVBQUUsRUFBRSxPQUFPO1lBQ1gsS0FBSyxFQUFFLFdBQVc7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUE7Ozs7O01BS0U7SUFDSSxlQUFlLENBQUMsUUFBMEIsRUFBRSxPQUFlLEVBQUUsVUFBd0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtRQUN0TCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUdNLHFCQUFxQixDQUFDLFNBQWlDLEVBQUUsRUFBUSxFQUFFLFlBQWtCLEVBQUUsVUFBa0IsdUJBQXVCO1FBQ3RJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEQsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLEtBQUssRUFBRSxPQUFPO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPO0lBQ1IsQ0FBQztJQUdBOzs7TUFHRTtJQUNLLFVBQVUsQ0FBQyxPQUFlO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBakRVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLEtBQUs7OzRGQUVOLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsS0FBSztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdGFibGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSwgTW9kYWxPcHRpb25zIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ2FueSdcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxVdGlsc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBfYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLCBwcml2YXRlIF9ic01vZGFscmVmOiBCc01vZGFsUmVmICkgeyB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gc2ltcGxlcyBjb20gbyBvYmpldGl2byBkZSBhYnJpciBvcyBtb2RhaXMgbm8gY2VudHJvIGRhIHRlbGEuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSBIVE1MIGRvIG1vZGFsIHF1ZSBzZXLDoSBhYmVydG8uXG4gICAqIEBwYXJhbSBtb2RhbElEIElEIGRvIG1vZGFsIHF1ZSBzZXLDoSBhYmVydG8sIHBhcmEgcXVlIHBvc3NhIHNlciByZWZlcmVuY2lhZG8gZGVwb2lzLlxuICAgKiBAcGFyYW0gY3VzdG9tQ2xhc3MgQ2xhc3NlcyBjdXN0b21pemFkYXMgcGFyYSBvIG1vZGFsLCB2YWxvciBkZWZhdWx0IMOpIFwibW9kYWwtZGlhbG9nLWNlbnRlcmVkXCJcbiAgKi9cbiBwdWJsaWMgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LCBtb2RhbElEOiBudW1iZXIsIGN1c3RvbUNsYXNzOiBzdHJpbmcgPSBcIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiKTogdm9pZCB7XG4gICB0aGlzLl9ic01vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7XG4gICAgIGlkOiBtb2RhbElELFxuICAgICBjbGFzczogY3VzdG9tQ2xhc3MsXG4gICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlLFxuICAgICBrZXlib2FyZDogZmFsc2VcbiAgIH0pO1xuIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBzaW1wbGVzIGNvbSBvIG9iamV0aXZvIGRlIGFicmlyIG9zIG1vZGFpcyBubyBjZW50cm8gZGEgdGVsYS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIFRlbXBsYXRlIEhUTUwgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0by5cbiAgICogQHBhcmFtIG1vZGFsSUQgSUQgZG8gbW9kYWwgcXVlIHNlcsOhIGFiZXJ0bywgcGFyYSBxdWUgcG9zc2Egc2VyIHJlZmVyZW5jaWFkbyBkZXBvaXMuXG4gICAqIEBwYXJhbSB7TW9kYWxPcHRpb25zfSBvcHRpb25zIC0gRXN0cnV0dXJhIGRlIG9ww6fDtWVzIGluZm9ybWFkYXMgcGFyYSBjb25maWd1cmFyIG8gbW9kYWwgbWFpcyBhcHJvZnVuZGFkYW1lbnRlXG4gICovXG4gcHVibGljIG9wZW5Nb2RhbEN1c3RvbSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiwgbW9kYWxJRDogbnVtYmVyLCBvcHRpb25zOiBNb2RhbE9wdGlvbnMgPSB7IGlkOiBtb2RhbElELCBjbGFzczogXCJtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiwgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UsIGtleWJvYXJkOiBmYWxzZSB9KTogdm9pZCB7XG4gICB0aGlzLl9ic01vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBvcHRpb25zKTtcbiB9XG5cblxuIHB1YmxpYyBvcGVuSW5pdGlhbFN0YXRlTW9kYWwoY29tcG9uZW50OiBhbnkgfCBUZW1wbGF0ZVJlZjxhbnk+LCBpZD86IGFueSwgaW5pdGlhbFN0YXRlPzogYW55LCBjbGFzc2VzOiBzdHJpbmcgPSBcIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiKTogdm9pZCB8IEJzTW9kYWxSZWYge1xuICBpZiAoY29tcG9uZW50KSB7XG4gICAgdGhpcy5fYnNNb2RhbHJlZiA9IHRoaXMuX2JzTW9kYWxTZXJ2aWNlLnNob3coY29tcG9uZW50LCB7XG4gICAgICBpZDogaWQsXG4gICAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZSxcbiAgICAgIGNsYXNzOiBjbGFzc2VzXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2JzTW9kYWxyZWY7XG4gIH1cblxuICByZXR1cm47XG4gfVxuXG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcGFyYSBmZWNoYXIgdW0gbW9kYWwgcXVlIGVzdGl2ZXIgYWJlcnRvIG5hIHRlbGFcbiAgICogQHBhcmFtIG1vZGFsSUQgSUQgZG8gbW9kYWwgcXVlIHNlcsOhIGZlY2hhZG8sIMOpIG5lY2Vzc8OhcmlvIHVtIElEIHBhcmEgZmVjaGFyIG8gbW9kYWwgY29ycmV0by5cbiAgKi9cbiAgcHVibGljIGNsb3NlTW9kYWwobW9kYWxJRDogbnVtYmVyKTogdm9pZCB7XG4gICAgIHRoaXMuX2JzTW9kYWxTZXJ2aWNlLmhpZGUobW9kYWxJRCk7XG4gIH1cblxufVxuIl19
@@ -41,6 +41,9 @@ export class TableComponent {
41
41
  }
42
42
  // Exemplo de string com a contagem:
43
43
  get itemsDisplayText() {
44
+ if (this.recordsList && this.recordsList.length === 0) {
45
+ return `Exibindo ${this.recordsList?.length ?? 0} registros`;
46
+ }
44
47
  return `Exibindo ${this.countOptions ? this.firstItemOfPage + "-" + this.lastItemOfPage + " de" : ""} ${this.recordsList?.length ?? 0} registros`;
45
48
  }
46
49
  // #endregion PUBLIC
@@ -161,11 +164,11 @@ export class TableComponent {
161
164
  return path.reduce((value, property) => value ? value[property] : '', obj);
162
165
  }
163
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 }); }
164
- 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\">\r\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\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"] }] }); }
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&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\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"] }] }); }
165
168
  }
166
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
167
170
  type: Component,
168
- 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\">\r\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
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&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
169
172
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
170
173
  type: Input
171
174
  }], recordsList: [{
@@ -193,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
193
196
  }], pageChange: [{
194
197
  type: Output
195
198
  }] } });
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUUzSTs7Ozs7Ozs7Ozs7O0VBWUU7QUFNRixNQUFNLE9BQU8sY0FBYztJQW1CekI7bUJBQ2U7SUFDZixJQUNXLFdBQVcsS0FBd0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFXLFdBQVcsQ0FBQyxLQUF3QixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQWlDL0UsMEhBQTBIO0lBQzFILElBQ1csWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztJQUNyRCxDQUFDO0lBU0QsOEJBQThCO0lBQy9CLElBQVcsSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBVyxJQUFJLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RCxtREFBbUQ7SUFDbkQsSUFBVyxZQUFZLEtBQWEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQVcsWUFB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QU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxXQUFXLENBQUMsR0FBUSxFQUFFLElBQXVCO1FBRXBELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUUsQ0FBQzsrR0FyTlcsY0FBYzttR0FBZCxjQUFjLHVkQ3BCM0Isb29IQXVFQTs7NEZEbkRhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVztzRkFvQkwsYUFBYTtzQkFBNUIsS0FBSztnQkFNSyxXQUFXO3NCQURyQixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9oQixZQUFZO3NCQUFuQyxLQUFLO3VCQUFDLFFBQVE7Z0JBS1ksbUJBQW1CO3NCQUE3QyxLQUFLO3VCQUFDLFdBQVc7Z0JBS2tDLFdBQVc7c0JBQTlELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBU1QsZ0JBQWdCO3NCQUFqRCxLQUFLO3VCQUFDLGtCQUFrQjtnQkFNSSxXQUFXO3NCQUF2QyxLQUFLO3VCQUFDLGFBQWE7Z0JBS1QsWUFBWTtzQkFEdEIsS0FBSztnQkFRVyxrQkFBa0I7c0JBQWxDLE1BQU07Z0JBR1UsVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGRlIFRhYmVsYSBDdXN0b21pesOhdmVsXHJcbiAqXHJcbiAqIE8gYFRhYmxlQ29tcG9uZW50YCDDqSB1bSBjb21wb25lbnRlIEFuZ3VsYXIgcHJvamV0YWRvIHBhcmEgZXhpYmlyIHVtYSB0YWJlbGEgY3VzdG9taXrDoXZlbFxyXG4gKiBjb20gc3Vwb3J0ZSBhIHBhZ2luYcOnw6NvLiBFbGUgcGVybWl0ZSBhIGNvbmZpZ3VyYcOnw6NvIGRlIGNhYmXDp2FsaG9zIGRlIGNvbHVuYXMsIHBvc2ljaW9uYW1lbnRvXHJcbiAqIGRhIHBhZ2luYcOnw6NvIGUgb3DDp8O1ZXMgZGUgaXRlbnMgcG9yIHDDoWdpbmEuIE8gY29tcG9uZW50ZSDDqSBmbGV4w612ZWwsIHV0aWxpemFuZG8gY2xhc3NlcyBCb290c3RyYXBcclxuICogcGFyYSBhanVzdGFyIG8gbGF5b3V0IGRhcyBjb2x1bmFzIGUgZW1pdGluZG8gZXZlbnRvcyBwYXJhIHF1ZSBvIGNvbXBvbmVudGUgcGFpIHBvc3NhIHJlYWdpciBhXHJcbiAqIG11ZGFuw6dhcyBuYSBww6FnaW5hIG91IG5vIG7Dum1lcm8gZGUgaXRlbnMgZXhpYmlkb3MuXHJcbiAqXHJcbiAqIEBzZWxlY3RvciBsaWItdGFibGVcclxuICogQHRlbXBsYXRlVXJsIC4vdGFibGUuY29tcG9uZW50Lmh0bWxcclxuICogQHN0eWxlVXJsIC4vdGFibGUuY29tcG9uZW50LnNjc3NcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUFJJRURBREVTIDw9PT09PT09PT09XHJcblxyXG4gIC8vICNyZWdpb24gUFJJVkFURVxyXG4gIHByaXZhdGUgX3BhZ2luYXRpb25JRDogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3JlY29yZHNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHJpdmF0ZSBfY3VycmVudEl0ZW1zUGVyUGFnZTogbnVtYmVyID0gMDtcclxuICAvLyAjZW5kcmVnaW9uIFBSSVZBVEVcclxuXHJcbiAgLy8gI3JlZ2lvbiBQVUJMSUNcclxuXHJcbiAgLyoqIERldGVybWluYSBzZSBhIHRhYmVsYSBkZXZlIHVzYXIgcGFnaW5hw6fDo28uXHJcbiAgICogQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB1c2VQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgXHJcbiAgLyoqIExpc3RhIGRlIHJlZ2lzdHJvcyBhIHNlcmVtIGV4aWJpZG9zIG5hIHRhYmVsYS5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2xpc3QnLCByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBnZXQgcmVjb3Jkc0xpc3QoKTogYW55W10gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcmVjb3Jkc0xpc3Q7IH1cclxuICBwdWJsaWMgc2V0IHJlY29yZHNMaXN0KHZhbHVlOiBhbnlbXSB8IHVuZGVmaW5lZCkgeyB0aGlzLl9yZWNvcmRzTGlzdCA9IHZhbHVlOyB9XHJcblxyXG5cclxuICAvKiogT3DDp8O1ZXMgZGUgY29udGFnZW0gZGUgaXRlbnMgcG9yIHDDoWdpbmEgZGlzcG9uw612ZWlzIHBhcmEgbyB1c3XDoXJpby5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoJ2NvdW50cycpIHB1YmxpYyBjb3VudE9wdGlvbnM6IG51bWJlcltdO1xyXG5cclxuXHJcbiAgLyoqIFBvc2ljaW9uYW1lbnRvIGRvcyBjb250cm9sZXMgZGUgcGFnaW5hw6fDo28uXHJcbiAgICogQGRlZmF1bHQgJ2VuZCcgKi9cclxuICBASW5wdXQoJ3BsYWNlbWVudCcpIHB1YmxpYyBwYWdpbmF0aW9uUGxhY2VtZW50OiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyB8ICdiZXR3ZWVuJyA9ICdlbmQnO1xyXG5cclxuXHJcbiAgLyoqIExpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEsIGluY2x1aW5kbyBvIG5vbWUsIGEgbGFyZ3VyYSBkYSBjb2x1bmEgZSBjbGFzc2VzIGN1c3RvbWl6YWRhcy5cclxuICAgKiBAcmVxdWlyZWQgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ2hlYWRlcnMnLCByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgaGVhZGVyc0xpc3Q6IHtcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGNvbDogbnVtYmVyLFxyXG4gICAgY3VzdG9tQ2xhc3Nlcz86IHN0cmluZyxcclxuICAgIG9yZGVyQ29sdW1uPzogc3RyaW5nXHJcbiAgfVtdO1xyXG5cclxuXHJcbiAgLyoqIE1lbnNhZ2VtIGN1c3RvbWl6YWRhIHBhcmEgbGlzdGEgdmF6aWEgKi9cclxuICBASW5wdXQoJ2VtcHR5TGlzdE1lc3NhZ2UnKSBwdWJsaWMgZW1wdHlMaXN0TWVzc2FnZT86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBJbmZvcm1hIHNlIG8gY291bnRlciBkZSByZWdpc3Ryb3MgZGV2ZSBhcGFyZWNlciBvdSBuw6NvLlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIEBJbnB1dCgnc2hvd0NvdW50ZXInKSBwdWJsaWMgc2hvd0NvdW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgLyoqIEluZm9ybWEgdW0gSUQgcGFyYSBhIHBhZ2luYcOnw6NvIGRhIHRhYmVsYSBlc3BlY8OtZmljYS4gRGV2ZSBzZXIgdXRpbGl6YWRhIGVtIGNhc28gZGUgbcO6bHRpcGxhcyB0YWJlbGFzIG5hIG1lc21hIHRlbGEuICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25JRCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbklEOyB9XHJcbiAgcHVibGljIHNldCBwYWdpbmF0aW9uSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGFnaW5hdGlvbklEID0gdmFsdWUgfHwgJ2xpYlRhYmxlUGFnaW5hdGlvbic7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIEV2ZW50byBlbWl0aWRvIHF1YW5kbyBvIG7Dum1lcm8gZGUgaXRlbnMgcG9yIHDDoWdpbmEgw6kgYWx0ZXJhZG8uICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtc1BlclBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gYSBww6FnaW5hIMOpIGFsdGVyYWRhLiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIFDDoWdpbmEgYXR1YWwgZGEgdGFiZWxhLiAqL1xyXG5cdHB1YmxpYyBnZXQgcGFnZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7IH1cclxuXHRwdWJsaWMgc2V0IHBhZ2UodmFsdWU6IG51bWJlcikgeyB0aGlzLl9jdXJyZW50UGFnZSA9IHZhbHVlOyB9XHJcblxyXG4gIC8qKiBOw7ptZXJvIGRlIGl0ZW5zIGEgc2VyZW0gZXhpYmlkb3MgcG9yIHDDoWdpbmEuICovXHJcbiAgcHVibGljIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRJdGVtc1BlclBhZ2U7IH1cclxuXHRwdWJsaWMgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX2N1cnJlbnRJdGVtc1BlclBhZ2UgPSB2YWx1ZTsgfVxyXG5cclxuXHJcbiAgcHVibGljIGdldCBmaXJzdEl0ZW1PZlBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLml0ZW1zUGVyUGFnZSArIDE7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbGFzdEl0ZW1PZlBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnBhZ2UgKiB0aGlzLml0ZW1zUGVyUGFnZSwgdGhpcy5yZWNvcmRzTGlzdD8ubGVuZ3RoID8/IDApO1xyXG4gIH1cclxuXHJcbiAgLy8gRXhlbXBsbyBkZSBzdHJpbmcgY29tIGEgY29udGFnZW06XHJcbiAgcHVibGljIGdldCBpdGVtc0Rpc3BsYXlUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYEV4aWJpbmRvICR7IHRoaXMuY291bnRPcHRpb25zID8gdGhpcy5maXJzdEl0ZW1PZlBhZ2UrXCItXCIrdGhpcy5sYXN0SXRlbU9mUGFnZSArIFwiIGRlXCIgOiBcIlwiIH0gJHt0aGlzLnJlY29yZHNMaXN0Py5sZW5ndGggPz8gMH0gcmVnaXN0cm9zYDtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiBQVUJMSUNcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QUklFREFERVMgPD09PT09PT09PT1cclxuXHJcblxyXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuXHJcbiAgLyoqIEluaWNpYWxpemEgbyBjb21wb25lbnRlIGUgZGVmaW5lIG8gbsO6bWVybyBpbmljaWFsIGRlIGl0ZW5zIHBvciBww6FnaW5hLiAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3Jkc0xpc3QpIHsgdGhpcy5pdGVtc1BlclBhZ2UgPSB0aGlzLmNvdW50T3B0aW9ucyA/IHRoaXMuY291bnRPcHRpb25zWzBdIDogdGhpcy5yZWNvcmRzTGlzdC5sZW5ndGggfVxyXG4gICAgZWxzZSB7IHRoaXMuaXRlbXNQZXJQYWdlID0gdGhpcy5jb3VudE9wdGlvbnNbMF0gPz8gMTAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgLy8gRm9yw6dhciB1bWEgbm92YSBkZXRlY8Onw6NvIGFww7NzIGEgcmVuZGVyaXphw6fDo29cclxuICB9XHJcblxyXG4gIC8qKiBNb25pdG9yYSBhcyBtdWRhbsOnYXMgbmFzIGVudHJhZGFzIGRvIGNvbXBvbmVudGUgZSByZWFsaXphIGFqdXN0ZXMsIGNvbW8gcmVzZXRhciBhIHBhZ2luYcOnw6NvIG91IHZhbGlkYXIgbyBsYXlvdXQgZGFzIGNvbHVuYXMuXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgT2JqZXRvIHF1ZSBjb250w6ltIGFzIG11ZGFuw6dhcyBuYXMgZW50cmFkYXMgZG8gY29tcG9uZW50ZS4gKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3Jkc0xpc3QnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24odGhpcy5yZWNvcmRzTGlzdCA/PyBbXSk7XHJcblxyXG4gICAgICBsZXQgbWF4Q29sdW1ucyA9IHRoaXMuaGVhZGVyc0xpc3QucmVkdWNlKChuLCB7Y29sfSkgPT4gbiArIGNvbCwgMCk7XHJcbiAgICAgIGlmIChtYXhDb2x1bW5zID49IDEzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzb21hIGRlIGxhcmd1cmEgKGNsYXNzZSBjb20gcHJlZml4byAnY29sLScpIGRlIHRvZGFzIGFzIGNvbHVuYXMgbsOjbyBwb2RlIHNlciBtYWlvciBxdWUgMTIuXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JQ0lBTElaQcOHw4NPIDw9PT09PT09PT09XHJcblxyXG5cclxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IFVUSUxJVMOBUklPUyA8PT09PT09PT09PVxyXG5cclxuICAvKiogTW9kaWZpY2EgYSBxdWFudGlkYWRlIGRlIGl0ZW5zIGEgc2VyIG1vc3RyYWRhIG5hIGxpc3RhLlxyXG4gICAqIEBwYXJhbSBldmVudCBwYXLDom1ldHJvIGRlIGV2ZW50byBxdWUgaXLDoSBzZWxlY2lvbmFyIGEgbm92YSBxdWFudGlkYWRlLiAqL1xyXG4gIHB1YmxpYyBvblNlbGVjdENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSwgMTApO1xyXG4gICAgdGhpcy5wYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodGhpcy5pdGVtc1BlclBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc2V0YSBhIHBhZ2luYcOnw6NvIGRhIGxpc3RhZ2VtIGNvbSBiYXNlIG5vIG7Dum1lcm8gYXR1YWwgZGUgcmVnaXN0cm9zLlxyXG4gICAqIEBwYXJhbSBsaXN0IExpc3RhIGRlIHJlZ2lzdHJvcyBwYXJhIHJlc2V0YXIgYSBwYWdpbmHDp8Ojby4gKi9cclxuICBwdWJsaWMgcmVzZXRQYWdpbmF0aW9uKGxpc3Q6IGFueVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2U7XHJcbiAgICBpZiAobGlzdC5sZW5ndGggPD0gc3RhcnRJbmRleCkge1xyXG4gICAgICB0aGlzLnBhZ2UgPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHQvLyNyZWdpb24gT3JkZXJpbmcsIFNvcnRpbmcgb3UgYXBlbmFzIE9yZGVuYcOnw6NvXHJcblxyXG5cdC8qKiBNw6l0b2RvIHF1ZSBmYXogYSBvcmRlbmHDp8OjbyBkb3MgY29udHJhdG9zIG5hIHRlbGEgZGUgbGlzdGFnZW0sIGVtIGNhZGEgdW1hIGRhcyBjw6lsdWxhcyBkbyBjYWJlw6dhbGhvIGRhIHRhYmVsYSwgb25kZSBjYWRhIHVtICBcclxuXHQgKiAgZG9zIGVsZW1lbnRvcyA8dGg+IHJlcHJlc2VudGEgdW1hIGNvbHVuYSwgZGUgYWNvcmRvIGNvbSBhIGxpc3RhIGRlIGNvbnRyYXRvcyBxdWUgcmV0b3JuYSBkbyBiYWNrZW5kLiAqL1xyXG5cdC8vIE9iamV0byBwYXJhIGFybWF6ZW5hciBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBkZSBjYWRhIGNvbHVuYVxyXG5cdHB1YmxpYyBzb3J0RGlyZWN0aW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG5cdC8vIENvbHVuYSBhdHVhbG1lbnRlIHNlbGVjaW9uYWRhIHBhcmEgb3JkZW5hw6fDo29cclxuXHRwdWJsaWMgY3VycmVudFNvcnRDb2x1bW46IHN0cmluZyA9ICcnO1xyXG5cclxuXHQvLyBGdW7Dp8OjbyBjaGFtYWRhIHF1YW5kbyBvY29ycmUgdW1hIG11ZGFuw6dhIG5hIG9yZGVuYcOnw6NvXHJcblx0b25Tb3J0Q2hhbmdlKGV2ZW50OiB7IGRpcmVjdGlvbjogc3RyaW5nLCBjb2x1bW46IHN0cmluZyB9KSB7XHJcblx0XHRjb25zdCB7IGRpcmVjdGlvbiwgY29sdW1uIH0gPSBldmVudDtcclxuXHJcblx0XHQvLyBWZXJpZmljYSBzZSBhIGNvbHVuYSBhdHVhbG1lbnRlIHNlbGVjaW9uYWRhIMOpIGEgbWVzbWEgZGEgbm92YSBzZWxlw6fDo29cclxuXHRcdGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuXHRcdFx0Ly8gQWx0ZXJuYSBlbnRyZSAnYXNjJyBlICdkZXNjJyBwYXJhIGEgZGlyZcOnw6NvIGRlIG9yZGVuYcOnw6NvIGRhIGNvbHVuYVxyXG5cdFx0XHR0aGlzLnNvcnREaXJlY3Rpb25bY29sdW1uXSA9IHRoaXMuc29ydERpcmVjdGlvbltjb2x1bW5dID09PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gRGVmaW5lIGEgbm92YSBjb2x1bmEgZSBhIGRpcmXDp8OjbyBkZSBvcmRlbmHDp8OjbyBjb21vICdhc2MnXHJcblx0XHRcdHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHsgW2NvbHVtbl06ICdhc2MnIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVhbGl6YSBhIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRcdHRoaXMuc29ydERhdGEoKTtcclxuXHR9XHJcblxyXG5cdC8vIEZ1bsOnw6NvIGRlIG9yZGVuYcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGFcclxuXHRwcml2YXRlIHNvcnREYXRhKCkge1xyXG5cclxuXHRcdGlmICh0aGlzLnJlY29yZHNMaXN0KSB7XHJcblx0XHRcdGNvbnN0IGdydXBvc0xpc3QgPSB0aGlzLnJlY29yZHNMaXN0O1xyXG5cclxuXHRcdFx0Z3J1cG9zTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlID0gdGhpcy5jdXJyZW50U29ydENvbHVtbjtcclxuXHRcdFx0XHRjb25zdCBkaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb25bYXR0cmlidXRlXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVByb3BlcnRpZXMoYSwgYiwgYXR0cmlidXRlLCBkaXJlY3Rpb24pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHR9XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gQ29tcGFyYSBvcyB2YWxvcmVzIGRhcyBwcm9wcmllZGFkZXMgZW50cmUgZG9pcyBvYmpldG9zXHJcblx0cHJpdmF0ZSBjb21wYXJlUHJvcGVydGllcyhhOiBhbnksIGI6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHByb3BlcnR5QSA9IHRoaXMuZ2V0UHJvcGVydHkoYSwgYXR0cmlidXRlKS50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0Y29uc3QgcHJvcGVydHlCID0gdGhpcy5nZXRQcm9wZXJ0eShiLCBhdHRyaWJ1dGUpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0aWYgKHByb3BlcnR5QSA8IHByb3BlcnR5Qikge1xyXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocHJvcGVydHlBID4gcHJvcGVydHlCKSB7XHJcblx0XHRcdHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblx0Ly8gT2J0w6ltIG8gdmFsb3IgZGUgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhIGRlIHVtIG9iamV0b1xyXG5cdHByaXZhdGUgZ2V0UHJvcGVydHkob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuXHRcdFxyXG5cdFx0aWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRwYXRoID0gcGF0aC5zcGxpdCgnLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwYXRoLnJlZHVjZSgodmFsdWUsIHByb3BlcnR5KSA9PiB2YWx1ZSA/IHZhbHVlW3Byb3BlcnR5XSA6ICcnLCBvYmopO1xyXG5cdH1cclxuXHQvLyNlbmRyZWdpb24gT3JkZXJpbmcsIFNvcnRpbmcgb3UgYXBlbmFzIE9yZGVuYcOnw6NvXHJcblxyXG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gVVRJTElUw4FSSU9TIDw9PT09PT09PT09XHJcblxyXG59XHJcbiIsIkBpZiAocmVjb3Jkc0xpc3QpIHtcclxuICAgPGRpdiBjbGFzcz1cInRhYmxlLWxpc3Qgdy0xMDAgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgPCEtLSBFeGliZSBvIG7Dum1lcm8gZGUgaXRlbnMgbW9zdHJhZG9zIGUgbyB0b3RhbCBkZSByZWdpc3Ryb3MgLS0+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0NvdW50ZXJcIiBjbGFzcz1cIm1zLTFcIj4ge3sgaXRlbXNEaXNwbGF5VGV4dCB9fSA8L3NwYW4+XHJcbiAgICAgIFxyXG4gICAgICA8IS0tIENvbnRhaW5lciBkYSB0YWJlbGEgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1saXN0IG92ZXJmbG93LWhpZGRlbiBib3JkZXItYm90dG9tLTAgcm91bmRlZC1ib3R0b20gcm91bmRlZFwiPlxyXG4gICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciBib3JkZXIgbWItMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBJdGVyYSBzb2JyZSBhIGxpc3RhIGRlIGNhYmXDp2FsaG9zIHBhcmEgY3JpYXIgYXMgY29sdW5hcyAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgaGVhZGVyc0xpc3RcIiBzY29wZT1cImNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRleHQtZGFyay1ncmV5IHt7IGhlYWRlci5jb2wgPiAwID8gJ2NvbC0nK2hlYWRlci5jb2wgOiAnY29sJyB9fSB7eyBoZWFkZXIuY3VzdG9tQ2xhc3NlcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXIubmFtZSB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgPGFwcC1vcmRlcmluZyAqbmdJZj1cImhlYWRlci5vcmRlckNvbHVtblwiIFsoc29ydERpcmVjdGlvbildPVwic29ydERpcmVjdGlvbltoZWFkZXIub3JkZXJDb2x1bW5dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKHsgZGlyZWN0aW9uOiAkZXZlbnQuZGlyZWN0aW9uLCBjb2x1bW46IGhlYWRlci5vcmRlckNvbHVtbiB9KVwiPjwvYXBwLW9yZGVyaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiYmctbGlnaHQgZmFkZS1pbi1yb3dcIj5cclxuICAgICAgICAgICAgICAgQGlmIChyZWNvcmRzTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGXDumRvIGRhcyBsaW5oYXMgZGEgdGFiZWxhIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaW5uZXJSb3dzXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gTWVuc2FnZW0gZGUgYXVzw6puY2lhIGRlIHJlZ2lzdHJvcyAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEyXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1saWdodCBmc3QtaXRhbGljIHRleHQtY2VudGVyXCI+IHt7IGVtcHR5TGlzdE1lc3NhZ2UgPyBlbXB0eUxpc3RNZXNzYWdlIDogXCJDb25zdWx0YSBuw6NvIHJldG9ybm91IHJlZ2lzdHJvcy4uLlwiIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgPCEtLSAjcmVnaW9uIFBBR0lOQcOHw4NPIC0tPlxyXG4gICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlUGFnaW5hdGlvbiAmJiByZWNvcmRzTGlzdC5sZW5ndGggPiAwXCIgY2xhc3M9XCJkLWZsZXggbXQtMlwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1zdGFydCc6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudC1jZW50ZXInOiBwYWdpbmF0aW9uUGxhY2VtZW50ID09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50LWVuZCc6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2VuZCcsXHJcbiAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic6IHBhZ2luYXRpb25QbGFjZW1lbnQgPT0gJ2JldHdlZW4nXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWUtMlwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj4gSXRlbnMgcG9yIHDDoWdpbmEgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHNlbGVjdC1zZWFyY2hcIiAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY291bnQgb2YgY291bnRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImNvdW50T3B0aW9ucy5sZW5ndGggPiAwICYmIGkgPT0gMFwiPnt7IGNvdW50IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ29udHJvbGUgZGUgcGFnaW5hw6fDo28gLS0+XHJcbiAgICAgICAgICAgIDxwYWdpbmF0aW9uLWNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgIFtpZF09XCJwYWdpbmF0aW9uSURcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cInNwLXBhZ2luYXRpb24gbXQtM1wiXHJcbiAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2UgPSAkZXZlbnQ7IHBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgcHJldmlvdXNMYWJlbD1cIsKrJm5ic3A7Jm5ic3A7Jm5ic3A7XCIgbmV4dExhYmVsPVwiJm5ic3A7Jm5ic3A7Jm5ic3A7wrtcIlxyXG4gICAgICAgICAgICAgICBbbWF4U2l6ZV09XCI1XCI+XHJcbiAgICAgICAgICAgIDwvcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiBQQUdJTkHDh8ODTyAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICAgPCEtLSBMb2FkZXIgZW5xdWFudG8gb3MgcmVnaXN0cm9zIHPDo28gY2FycmVnYWRvcyAtLT5cclxuICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj4gPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5DYXJyZWdhbmRvIGluZm9ybWHDp8O1ZXMuLi48L3NwYW4+IDwvZGl2PlxyXG4gICA8L2Rpdj5cclxufVxyXG4iXX0=
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==
@@ -3106,6 +3106,9 @@ class TableComponent {
3106
3106
  }
3107
3107
  // Exemplo de string com a contagem:
3108
3108
  get itemsDisplayText() {
3109
+ if (this.recordsList && this.recordsList.length === 0) {
3110
+ return `Exibindo ${this.recordsList?.length ?? 0} registros`;
3111
+ }
3109
3112
  return `Exibindo ${this.countOptions ? this.firstItemOfPage + "-" + this.lastItemOfPage + " de" : ""} ${this.recordsList?.length ?? 0} registros`;
3110
3113
  }
3111
3114
  // #endregion PUBLIC
@@ -3226,11 +3229,11 @@ class TableComponent {
3226
3229
  return path.reduce((value, property) => value ? value[property] : '', obj);
3227
3230
  }
3228
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 }); }
3229
- 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\">\r\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\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"] }] }); }
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&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\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"] }] }); }
3230
3233
  }
3231
3234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
3232
3235
  type: Component,
3233
- 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\">\r\n <span class=\"fw-light fst-italic text-center\"> {{ emptyListMessage ? emptyListMessage : \"Consulta n\u00E3o retornou registros...\" }} </span>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- #region PAGINA\u00C7\u00C3O -->\r\n <div *ngIf=\"usePagination && recordsList.length > 0\" class=\"d-flex mt-2\"\r\n [ngClass]=\"{\r\n 'justify-content-start': paginationPlacement == 'start',\r\n 'justify-content-center': paginationPlacement == 'center',\r\n 'justify-content-end': paginationPlacement == 'end',\r\n 'justify-content-between': paginationPlacement == 'between'\r\n }\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\"> Itens por p\u00E1gina </label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option *ngFor=\"let count of countOptions; let i = index\" [value]=\"count\"\r\n [selected]=\"countOptions.length > 0 && i == 0\">{{ count }}</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Controle de pagina\u00E7\u00E3o -->\r\n <pagination-controls\r\n [id]=\"paginationID\"\r\n class=\"sp-pagination mt-3\"\r\n (pageChange)=\"page = $event; pageChange.emit($event)\"\r\n previousLabel=\"\u00AB&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
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&nbsp;&nbsp;&nbsp;\" nextLabel=\"&nbsp;&nbsp;&nbsp;\u00BB\"\r\n [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINA\u00C7\u00C3O -->\r\n </div>\r\n </div>\r\n} @else {\r\n <!-- Loader enquanto os registros s\u00E3o carregados -->\r\n <div class=\"w-100 text-center\">\r\n <div class=\"spinner-border\" role=\"status\"> <span class=\"visually-hidden\">Carregando informa\u00E7\u00F5es...</span> </div>\r\n </div>\r\n}\r\n", styles: [".sp-pagination ::ng-deep .ngx-pagination .current{background:#3767b2;border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination a:hover,.sp-pagination ::ng-deep .ngx-pagination button:hover{border-radius:.375rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-previous a:before,.sp-pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"\";display:inline-block;margin-right:.5rem}.sp-pagination ::ng-deep .ngx-pagination .pagination-next a:after,.sp-pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"\";display:inline-block;margin-left:.5rem}.text-dark-grey{color:#63676b!important}table{border-color:#c4c4c4}table thead{height:50px;font-size:1rem;background-color:#f9fafb!important}table thead>tr{background-color:#f9fafb!important}table thead>tr>th{background-color:#f9fafb!important}table tbody{font-size:.875rem}table tbody>tr{height:50px}table tbody>tr:hover{background-color:#cce5ff}table.table>tbody{border-top:none}\n"] }]
3234
3237
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { usePagination: [{
3235
3238
  type: Input
3236
3239
  }], recordsList: [{
@@ -4653,11 +4656,16 @@ class ModalUtilsService {
4653
4656
  openModalCustom(template, modalID, options = { id: modalID, class: "modal-dialog-centered", ignoreBackdropClick: false, keyboard: false }) {
4654
4657
  this._bsModalService.show(template, options);
4655
4658
  }
4656
- openInitialStateModal(component, initialState, classes = "modal-dialog-centered") {
4657
- this._bsModalref = this._bsModalService.show(component, {
4658
- initialState: initialState,
4659
- class: classes
4660
- });
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;
4661
4669
  }
4662
4670
  /**
4663
4671
  * Método para fechar um modal que estiver aberto na tela