kivio 1.2.8 → 1.3.0

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.
@@ -7,6 +7,7 @@ export class KvAccordionComponent {
7
7
  this.isOpen = false;
8
8
  this.title = '';
9
9
  this.shouldShowImage = true;
10
+ this.imageUrl = 'https://i.imgur.com/InRaVrL.jpg';
10
11
  this.opened = new EventEmitter();
11
12
  }
12
13
  toggle() {
@@ -16,18 +17,20 @@ export class KvAccordionComponent {
16
17
  }
17
18
  }
18
19
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvAccordionComponent, isStandalone: true, selector: "lib-kv-accordion", inputs: { isOpen: "isOpen", title: "title", shouldShowImage: "shouldShowImage" }, outputs: { opened: "opened" }, ngImport: i0, template: "<div class=\"accordion\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"accordion-title\">\r\n <ng-container *ngIf=\"shouldShowImage\">\r\n <img width=\"40px\" [src]=\"'https://i.imgur.com/InRaVrL.jpg'\" alt=\"User Avatar\" class=\"avatar\">\r\n </ng-container>\r\n <span>{{ title }}</span>\r\n </div>\r\n <span class=\"accordion-icon\" [class.open]=\"isOpen\">\u25BC</span>\r\n </div>\r\n <div class=\"accordion-content\" [class.open]=\"isOpen\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: [".accordion{width:100%;margin:10px 0;border:1px solid #ddd;border-radius:4px;overflow:hidden;transition:all .3s ease}.accordion-header{padding:15px;background-color:#f8f9fa;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:background-color .2s ease}.accordion-header .accordion-title{display:flex;gap:10px}.accordion-header .accordion-title img{border-radius:50px}.accordion-header .accordion-title span{align-self:center}.accordion-header:hover{background-color:#e9ecef}.accordion-icon{transition:transform .3s ease}.accordion-icon.open{transform:rotate(180deg)}.accordion-content{max-height:0;overflow:hidden;padding:0 15px;transition:max-height .3s ease-out,padding .3s ease-out}.accordion-content.open{max-height:500px;padding:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvAccordionComponent, isStandalone: true, selector: "lib-kv-accordion", inputs: { isOpen: "isOpen", title: "title", shouldShowImage: "shouldShowImage", imageUrl: "imageUrl" }, outputs: { opened: "opened" }, ngImport: i0, template: "<div class=\"accordion\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"accordion-title\">\r\n <ng-container *ngIf=\"shouldShowImage\">\r\n <img width=\"40px\" [src]=\"imageUrl\" alt=\"User Avatar\" class=\"avatar\">\r\n </ng-container>\r\n <span>{{ title }}</span>\r\n </div>\r\n <span class=\"accordion-icon\" [class.open]=\"isOpen\">\u25BC</span>\r\n </div>\r\n <div class=\"accordion-content\" [class.open]=\"isOpen\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: [".accordion{width:100%;margin:10px 0;border:1px solid #ddd;border-radius:4px;overflow:hidden;transition:all .3s ease}.accordion-header{padding:15px;background-color:#f8f9fa;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:background-color .2s ease}.accordion-header .accordion-title{display:flex;gap:10px}.accordion-header .accordion-title img{border-radius:50px}.accordion-header .accordion-title span{align-self:center}.accordion-header:hover{background-color:#e9ecef}.accordion-icon{transition:transform .3s ease}.accordion-icon.open{transform:rotate(180deg)}.accordion-content{max-height:0;overflow:hidden;padding:0 15px;transition:max-height .3s ease-out,padding .3s ease-out}.accordion-content.open{max-height:500px;padding:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
20
21
  }
21
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvAccordionComponent, decorators: [{
22
23
  type: Component,
23
- args: [{ selector: 'lib-kv-accordion', standalone: true, imports: [CommonModule], template: "<div class=\"accordion\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"accordion-title\">\r\n <ng-container *ngIf=\"shouldShowImage\">\r\n <img width=\"40px\" [src]=\"'https://i.imgur.com/InRaVrL.jpg'\" alt=\"User Avatar\" class=\"avatar\">\r\n </ng-container>\r\n <span>{{ title }}</span>\r\n </div>\r\n <span class=\"accordion-icon\" [class.open]=\"isOpen\">\u25BC</span>\r\n </div>\r\n <div class=\"accordion-content\" [class.open]=\"isOpen\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: [".accordion{width:100%;margin:10px 0;border:1px solid #ddd;border-radius:4px;overflow:hidden;transition:all .3s ease}.accordion-header{padding:15px;background-color:#f8f9fa;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:background-color .2s ease}.accordion-header .accordion-title{display:flex;gap:10px}.accordion-header .accordion-title img{border-radius:50px}.accordion-header .accordion-title span{align-self:center}.accordion-header:hover{background-color:#e9ecef}.accordion-icon{transition:transform .3s ease}.accordion-icon.open{transform:rotate(180deg)}.accordion-content{max-height:0;overflow:hidden;padding:0 15px;transition:max-height .3s ease-out,padding .3s ease-out}.accordion-content.open{max-height:500px;padding:15px}\n"] }]
24
+ args: [{ selector: 'lib-kv-accordion', standalone: true, imports: [CommonModule], template: "<div class=\"accordion\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"accordion-title\">\r\n <ng-container *ngIf=\"shouldShowImage\">\r\n <img width=\"40px\" [src]=\"imageUrl\" alt=\"User Avatar\" class=\"avatar\">\r\n </ng-container>\r\n <span>{{ title }}</span>\r\n </div>\r\n <span class=\"accordion-icon\" [class.open]=\"isOpen\">\u25BC</span>\r\n </div>\r\n <div class=\"accordion-content\" [class.open]=\"isOpen\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: [".accordion{width:100%;margin:10px 0;border:1px solid #ddd;border-radius:4px;overflow:hidden;transition:all .3s ease}.accordion-header{padding:15px;background-color:#f8f9fa;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:background-color .2s ease}.accordion-header .accordion-title{display:flex;gap:10px}.accordion-header .accordion-title img{border-radius:50px}.accordion-header .accordion-title span{align-self:center}.accordion-header:hover{background-color:#e9ecef}.accordion-icon{transition:transform .3s ease}.accordion-icon.open{transform:rotate(180deg)}.accordion-content{max-height:0;overflow:hidden;padding:0 15px;transition:max-height .3s ease-out,padding .3s ease-out}.accordion-content.open{max-height:500px;padding:15px}\n"] }]
24
25
  }], propDecorators: { isOpen: [{
25
26
  type: Input
26
27
  }], title: [{
27
28
  type: Input
28
29
  }], shouldShowImage: [{
29
30
  type: Input
31
+ }], imageUrl: [{
32
+ type: Input
30
33
  }], opened: [{
31
34
  type: Output
32
35
  }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1hY2NvcmRpb24va3YtYWNjb3JkaW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1hY2NvcmRpb24va3YtYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFTdkUsTUFBTSxPQUFPLG9CQUFvQjtJQVBqQztRQVFXLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FRN0M7SUFOQyxNQUFNO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7K0dBWFUsb0JBQW9CO21HQUFwQixvQkFBb0IsNkxDVmpDLHltQkFhTSxnMEJEUE0sWUFBWTs7NEZBSVgsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBS2QsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1rdi1hY2NvcmRpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWFjY29yZGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LWFjY29yZGlvbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2QWNjb3JkaW9uQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIHNob3VsZFNob3dJbWFnZSA9IHRydWU7XHJcbiAgQE91dHB1dCgpIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XHJcbiAgICBpZih0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhY2NvcmRpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi10aXRsZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHdpZHRoPVwiNDBweFwiIFtzcmNdPVwiJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiVXNlciBBdmF0YXJcIiBjbGFzcz1cImF2YXRhclwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgdGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2NvcmRpb24taWNvblwiIFtjbGFzcy5vcGVuXT1cImlzT3BlblwiPuKWvDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1jb250ZW50XCIgW2NsYXNzLm9wZW5dPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1hY2NvcmRpb24va3YtYWNjb3JkaW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1hY2NvcmRpb24va3YtYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFTdkUsTUFBTSxPQUFPLG9CQUFvQjtJQVBqQztRQVFXLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsYUFBUSxHQUFHLGlDQUFpQyxDQUFDO1FBQzVDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBUTdDO0lBTkMsTUFBTTtRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDOytHQVpVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG1OQ1ZqQyxnbEJBYU0sZzBCRFBNLFlBQVk7OzRGQUlYLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQUtkLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1rdi1hY2NvcmRpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWFjY29yZGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LWFjY29yZGlvbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2QWNjb3JkaW9uQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIHNob3VsZFNob3dJbWFnZSA9IHRydWU7XHJcbiAgQElucHV0KCkgaW1hZ2VVcmwgPSAnaHR0cHM6Ly9pLmltZ3VyLmNvbS9JblJhVnJMLmpwZyc7XHJcbiAgQE91dHB1dCgpIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XHJcbiAgICBpZih0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhY2NvcmRpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi10aXRsZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHdpZHRoPVwiNDBweFwiIFtzcmNdPVwiaW1hZ2VVcmxcIiBhbHQ9XCJVc2VyIEF2YXRhclwiIGNsYXNzPVwiYXZhdGFyXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImFjY29yZGlvbi1pY29uXCIgW2NsYXNzLm9wZW5dPVwiaXNPcGVuXCI+4pa8PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIiBbY2xhc3Mub3Blbl09XCJpc09wZW5cIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -2,11 +2,19 @@ import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output, ContentChild, } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { KvLoadingComponent } from '../kv-loading/kv-loading.component';
5
+ import { Subscription } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
7
+ import * as i1 from "../../services/pagination.service";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/forms";
8
10
  export class KvMainTableComponent {
9
- constructor() {
11
+ set totalItems(value) {
12
+ if (value !== undefined) {
13
+ this.paginationService.updatePaginationState({ totalItems: value });
14
+ }
15
+ }
16
+ constructor(paginationService) {
17
+ this.paginationService = paginationService;
10
18
  this.columns = [];
11
19
  this.data = [];
12
20
  this.showPaginator = true;
@@ -14,25 +22,46 @@ export class KvMainTableComponent {
14
22
  this.loading = false;
15
23
  this.totalRecords = 0;
16
24
  this.message = '';
17
- this.hasMoreItems = false;
25
+ this.hasMoreItems = true;
26
+ this.tableId = 'default';
18
27
  this.onNameClicked = new EventEmitter();
19
28
  this.onPageChange = new EventEmitter();
20
29
  this.searchText = '';
21
30
  this.currentPage = 1;
22
31
  this.pageSize = 5;
23
32
  this.filteredItems = [];
33
+ this.subscription = new Subscription();
24
34
  }
25
35
  ngOnInit() {
36
+ this.subscription.add(this.paginationService.paginationState$.subscribe((state) => {
37
+ this.currentPage = state.currentPage;
38
+ this.pageSize = state.pageSize;
39
+ this.searchText = state.searchText;
40
+ this.updateFilteredData();
41
+ }));
42
+ const currentState = this.paginationService.getCurrentState();
43
+ this.currentPage = currentState.currentPage;
44
+ this.pageSize = currentState.pageSize;
45
+ this.searchText = currentState.searchText;
46
+ if (this.totalRecords > 0) {
47
+ this.paginationService.updatePaginationState({ totalItems: this.totalRecords });
48
+ }
26
49
  this.updateFilteredData();
27
50
  if (this.lazyLoading) {
28
51
  this.loadLazyData();
29
52
  }
30
53
  }
31
54
  ngOnChanges(changes) {
32
- if (changes['data'] || changes['searchText']) {
55
+ if (changes['totalRecords']) {
56
+ this.paginationService.updatePaginationState({ totalItems: this.totalRecords });
57
+ }
58
+ if (changes['data'] && !this.lazyLoading) {
33
59
  this.updateFilteredData();
34
60
  }
35
61
  }
62
+ ngOnDestroy() {
63
+ this.subscription.unsubscribe();
64
+ }
36
65
  updateData() {
37
66
  this.data = this.data.map((item) => ({
38
67
  ...item,
@@ -65,32 +94,41 @@ export class KvMainTableComponent {
65
94
  return this.lazyLoading ? this.data : this.getFilteredData();
66
95
  }
67
96
  totalPages() {
68
- if (this.lazyLoading) {
69
- return Math.ceil(this.totalRecords / this.pageSize);
70
- }
71
- return Math.ceil(this.data.filter((item) => this.columns.some((col) => item[col.key]
97
+ return this.paginationService.calculateTotalPages() || Math.ceil(this.data.filter((item) => this.columns.some((col) => item[col.key]
72
98
  ?.toString()
73
99
  .toLowerCase()
74
100
  .includes(this.searchText.toLowerCase()))).length / this.pageSize);
75
101
  }
102
+ onSearch() {
103
+ this.currentPage = 1;
104
+ this.paginationService.updatePaginationState({
105
+ currentPage: 1,
106
+ searchText: this.searchText
107
+ });
108
+ if (this.lazyLoading) {
109
+ this.loadLazyData();
110
+ }
111
+ else {
112
+ this.updateFilteredData();
113
+ }
114
+ }
76
115
  changePage(direction) {
116
+ const totalPages = this.totalPages();
77
117
  if (this.lazyLoading) {
78
118
  const newPage = this.currentPage + direction;
79
- if (newPage >= 1) {
80
- this.currentPage = newPage;
119
+ if (newPage >= 1 && newPage <= totalPages) {
120
+ this.paginationService.updatePaginationState({ currentPage: newPage });
81
121
  this.loadLazyData();
82
122
  }
83
- else {
84
- if (this.currentPage !== 1) {
85
- this.currentPage = 1;
86
- this.loadLazyData();
87
- }
123
+ else if (this.currentPage !== 1 && newPage < 1) {
124
+ this.paginationService.updatePaginationState({ currentPage: 1 });
125
+ this.loadLazyData();
88
126
  }
89
127
  }
90
128
  else {
91
129
  const newPage = this.currentPage + direction;
92
- if (newPage > 0 && newPage <= this.totalPages()) {
93
- this.currentPage = newPage;
130
+ if (newPage > 0 && newPage <= totalPages) {
131
+ this.paginationService.updatePaginationState({ currentPage: newPage });
94
132
  this.updateFilteredData();
95
133
  }
96
134
  if (this.hasMoreItems) {
@@ -102,15 +140,6 @@ export class KvMainTableComponent {
102
140
  }
103
141
  }
104
142
  }
105
- onSearch() {
106
- this.currentPage = 1;
107
- if (this.lazyLoading) {
108
- this.loadLazyData();
109
- }
110
- else {
111
- this.updateFilteredData();
112
- }
113
- }
114
143
  loadLazyData() {
115
144
  this.onPageChange.emit({
116
145
  page: this.currentPage,
@@ -124,13 +153,13 @@ export class KvMainTableComponent {
124
153
  emitData(data) {
125
154
  this.onNameClicked.emit(data);
126
155
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvMainTableComponent, isStandalone: true, selector: "lib-kv-main-table", inputs: { columns: "columns", data: "data", extraData: "extraData", showPaginator: "showPaginator", lazyLoading: "lazyLoading", loading: "loading", totalRecords: "totalRecords", message: "message", hasMoreItems: "hasMoreItems" }, outputs: { onNameClicked: "onNameClicked", onPageChange: "onPageChange" }, queries: [{ propertyName: "cellActionsTemplate", first: true, predicate: ["cellActions"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"searchText\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button *ngIf=\"lazyLoading\" (click)=\"onSearch()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n [disabled]=\"loading\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:10px;align-items:center}.search-section button{padding:6px 12px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button:hover{background-color:#e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: KvLoadingComponent, selector: "lib-kv-loading", inputs: ["message", "isLoading"] }] }); }
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, deps: [{ token: i1.PaginationService }], target: i0.ɵɵFactoryTarget.Component }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvMainTableComponent, isStandalone: true, selector: "lib-kv-main-table", inputs: { columns: "columns", data: "data", extraData: "extraData", showPaginator: "showPaginator", lazyLoading: "lazyLoading", loading: "loading", totalRecords: "totalRecords", message: "message", hasMoreItems: "hasMoreItems", tableId: "tableId", totalItems: "totalItems" }, outputs: { onNameClicked: "onNameClicked", onPageChange: "onPageChange" }, queries: [{ propertyName: "cellActionsTemplate", first: true, predicate: ["cellActions"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"searchText\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button *ngIf=\"lazyLoading\" (click)=\"onSearch()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:10px;align-items:center}.search-section button{padding:6px 12px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button:hover{background-color:#e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: KvLoadingComponent, selector: "lib-kv-loading", inputs: ["message", "isLoading"] }] }); }
129
158
  }
130
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, decorators: [{
131
160
  type: Component,
132
- args: [{ selector: 'lib-kv-main-table', standalone: true, imports: [CommonModule, FormsModule, KvLoadingComponent], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"searchText\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button *ngIf=\"lazyLoading\" (click)=\"onSearch()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n [disabled]=\"loading\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:10px;align-items:center}.search-section button{padding:6px 12px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button:hover{background-color:#e0e0e0}\n"] }]
133
- }], propDecorators: { columns: [{
161
+ args: [{ selector: 'lib-kv-main-table', standalone: true, imports: [CommonModule, FormsModule, KvLoadingComponent], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"searchText\"\r\n (keyup.enter)=\"onSearch()\"\r\n />\r\n <button *ngIf=\"lazyLoading\" (click)=\"onSearch()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:8px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:8px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:10px;align-items:center}.search-section button{padding:6px 12px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button:hover{background-color:#e0e0e0}\n"] }]
162
+ }], ctorParameters: () => [{ type: i1.PaginationService }], propDecorators: { columns: [{
134
163
  type: Input
135
164
  }], data: [{
136
165
  type: Input
@@ -148,6 +177,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
148
177
  type: Input
149
178
  }], hasMoreItems: [{
150
179
  type: Input
180
+ }], tableId: [{
181
+ type: Input
182
+ }], totalItems: [{
183
+ type: Input
151
184
  }], cellActionsTemplate: [{
152
185
  type: ContentChild,
153
186
  args: ['cellActions']
@@ -156,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
156
189
  }], onPageChange: [{
157
190
  type: Output
158
191
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQVN4RSxNQUFNLE9BQU8sb0JBQW9CO0lBUGpDO1FBUVcsWUFBTyxHQUFxQyxFQUFFLENBQUM7UUFDL0MsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUVqQixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHN0Isa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzRCxpQkFBWSxHQUlqQixJQUFJLFlBQVksRUFJakIsQ0FBQztRQUVMLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsYUFBUSxHQUFXLENBQUMsQ0FB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dEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ29udGVudENoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgS3ZMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4va3YtbG9hZGluZy9rdi1sb2FkaW5nLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1rdi1tYWluLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBLdkxvYWRpbmdDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtbWFpbi10YWJsZS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdk1haW5UYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgZXh0cmFEYXRhITogYW55W107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGhhc01vcmVJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdjZWxsQWN0aW9ucycpIGNlbGxBY3Rpb25zVGVtcGxhdGU6IGFueTtcclxuICBAT3V0cHV0KCkgb25OYW1lQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcclxuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwYWdlU2l6ZTogbnVtYmVyID0gNTtcclxuICBmaWx0ZXJlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydzZWFyY2hUZXh0J10pIHtcclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YSgpOnZvaWR7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoe1xyXG4gICAgICAuLi5pdGVtLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5jaGFuZ2VUZXh0KGl0ZW0uZGVzY3JpcHRpb24sIDUwKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VUZXh0KHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhMZW5ndGhcclxuICAgICAgPyB0ZXh0LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpLnRyaW1FbmQoKSArICcuLi4nXHJcbiAgICAgIDogdGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT5cclxuICAgICAgICAgIGl0ZW1bY29sLmtleV1cclxuICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnNsaWNlKFxyXG4gICAgICAgICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF6eUxvYWRpbmcgPyB0aGlzLmRhdGEgOiB0aGlzLmdldEZpbHRlcmVkRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgdG90YWxQYWdlcygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNYXRoLmNlaWwoXHJcbiAgICAgIHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT5cclxuICAgICAgICAgIGl0ZW1bY29sLmtleV1cclxuICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICApXHJcbiAgICAgICkubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgZGlyZWN0aW9uO1xyXG4gICAgICBpZiAobmV3UGFnZSA+PSAxKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG5ld1BhZ2U7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmV3UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgKyBkaXJlY3Rpb247XHJcbiAgICAgIGlmIChuZXdQYWdlID4gMCAmJiBuZXdQYWdlIDw9IHRoaXMudG90YWxQYWdlcygpKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG5ld1BhZ2U7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5oYXNNb3JlSXRlbXMpIHtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZExhenlEYXRhKCkge1xyXG4gICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQb3NOYW1lKHBvc0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5leHRyYURhdGE/LmZpbmQoKHBvcykgPT4gcG9zLnBvaW50X29mX3NhbGVfaWQgPT09IHBvc0lkKT8ubmFtZSB8fCAnJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbWl0RGF0YShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25OYW1lQ2xpY2tlZC5lbWl0KGRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8bGliLWt2LWxvYWRpbmcgW21lc3NhZ2VdPVwibWVzc2FnZVwiIFtpc0xvYWRpbmddPVwibG9hZGluZ1wiID4gPC9saWIta3YtbG9hZGluZz5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtc2VjdGlvblwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJCdXNjYXIuLi5cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXHJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uU2VhcmNoKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwibGF6eUxvYWRpbmdcIiAoY2xpY2spPVwib25TZWFyY2goKVwiPkJ1c2NhcjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDx0YWJsZT5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj57eyBjb2x1bW4ubGFiZWwgfX08L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YVwiPlxyXG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZVwiIFtuZ0NsYXNzXT1cIml0ZW1bY29sdW1uLmtleV1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sYWJlbCA9PT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlLWluZm9cIiAoY2xpY2spPVwiZW1pdERhdGEoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLnVybCB8fCAnaHR0cHM6Ly9pLmltZ3VyLmNvbS9JblJhVnJMLmpwZydcIiBhbHQ9XCJJbWFnZW5cIiBjbGFzcz1cInNlcnZpY2UtaW1hZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIj57eyBpdGVtLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnbmFtZScgJiYgY29sdW1uLmxhYmVsICE9PSAnU2VydmljZXMnXCI+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIiAoY2xpY2spPVwiZW1pdERhdGEoaXRlbSlcIj57e1xyXG4gICAgICAgICAgICAgICAgaXRlbVtjb2x1bW4ua2V5XVxyXG4gICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5rZXkgPT09ICdpbWFnZXMnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2YgaXRlbVtjb2x1bW4ua2V5XT8uc2xpY2UoMCwgMylcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlXCIgYWx0PVwiSW1hZ2VuXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1bY29sdW1uLmtleV0/Lmxlbmd0aCA+IDNcIiBjbGFzcz1cImV4dHJhLWltYWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgaXRlbVtjb2x1bW4ua2V5XS5sZW5ndGggLSAzIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnZXhwaXJlX2F0J1wiPlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnYWN0aW9ucydcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbEFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAnZXhwaXJlX2F0JyAmJlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ3BvaW50X29mX3NhbGVfaWQnICYmXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAnbmFtZScgJiZcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb3NfaWQnICYmXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAnaW1hZ2VzJyAmJlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ2FjdGlvbnMnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5rZXkgPT09ICdwb2ludF9vZl9zYWxlX2lkJyB8fCBjb2x1bW4ua2V5ID09PSAncG9zX2lkJ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBnZXRQb3NOYW1lKGl0ZW1bY29sdW1uLmtleV0pIH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYWdpbmF0b3JcIj5cclxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2luYXRpb25cIj5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVBhZ2UoLTEpXCIgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCI+XHJcbiAgICAgICAgICAgICAgICBQcmV2aW91c1xyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKDEpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlcygpICYmICFoYXNNb3JlSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5QYWdlIHt7IGN1cnJlbnRQYWdlIH19IG9mIHt7IHRvdGFsUGFnZXMoKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVNwQyxNQUFNLE9BQU8sb0JBQW9CO0lBVy9CLElBQWEsVUFBVSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQW9CRCxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxDL0MsWUFBTyxHQUFxQyxFQUFFLENBQUM7UUFDL0MsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUVqQixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixZQUFPLEdBQVksS0FBSyxD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QkFBb0I7bUdBQXBCLG9CQUFvQixpakJDeEJqQyxnMEhBbUdBLHVvSkQvRVksWUFBWSx1akJBQUUsV0FBVywrbUJBQUUsa0JBQWtCOzs0RkFJNUMsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDO3NGQUsvQyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDTyxVQUFVO3NCQUF0QixLQUFLO2dCQU11QixtQkFBbUI7c0JBQS9DLFlBQVk7dUJBQUMsYUFBYTtnQkFDakIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ29udGVudENoaWxkLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBLdkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlLCBQYWdpbmF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1rdi1tYWluLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIEt2TG9hZGluZ0NvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2t2LW1haW4tdGFibGUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBLdk1haW5UYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBleHRyYURhdGEhOiBhbnlbXTtcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGxhenlMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaGFzTW9yZUl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgdGFibGVJZDogc3RyaW5nID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzZXQgdG90YWxJdGVtcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgdG90YWxJdGVtczogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZCgnY2VsbEFjdGlvbnMnKSBjZWxsQWN0aW9uc1RlbXBsYXRlOiBhbnk7XG4gIEBPdXRwdXQoKSBvbk5hbWVDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8e1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIH0+KCk7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gNTtcbiAgZmlsdGVyZWRJdGVtczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uU3RhdGUkLnN1YnNjcmliZSgoc3RhdGU6IFBhZ2luYXRpb25TdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBzdGF0ZS5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1cnJlbnRTdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gY3VycmVudFN0YXRlLnBhZ2VTaXplO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IGN1cnJlbnRTdGF0ZS5zZWFyY2hUZXh0O1xuXG4gICAgaWYgKHRoaXMudG90YWxSZWNvcmRzID4gMCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyB0b3RhbEl0ZW1zOiB0aGlzLnRvdGFsUmVjb3JkcyB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sndG90YWxSZWNvcmRzJ10pIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgdG90YWxJdGVtczogdGhpcy50b3RhbFJlY29yZHMgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgIXRoaXMubGF6eUxvYWRpbmcpIHtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuY2hhbmdlVGV4dChpdGVtLmRlc2NyaXB0aW9uLCA1MClcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVRleHQodGV4dDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICA/IHRleHQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkudHJpbUVuZCgpICsgJy4uLidcbiAgICAgIDogdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyZWREYXRhKCkge1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIGlmICghdGhpcy5sYXp5TG9hZGluZykge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmVkRGF0YSgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICB0aGlzLmNvbHVtbnMuc29tZSgoY29sKSA9PlxuICAgICAgICAgIGl0ZW1bY29sLmtleV1cbiAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnNsaWNlKFxuICAgICAgICAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemVcbiAgICAgICk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmxhenlMb2FkaW5nID8gdGhpcy5kYXRhIDogdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcbiAgfVxuXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVUb3RhbFBhZ2VzKCkgfHwgTWF0aC5jZWlsKFxuICAgICAgdGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT5cbiAgICAgICAgICBpdGVtW2NvbC5rZXldXG4gICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIClcbiAgICAgICkubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZVxuICAgICk7XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7XG4gICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZExhenlEYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGFnZShkaXJlY3Rpb246IG51bWJlcikge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsUGFnZXMoKTtcblxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XG4gICAgICBjb25zdCBuZXdQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIGRpcmVjdGlvbjtcbiAgICAgIGlmIChuZXdQYWdlID49IDEgJiYgbmV3UGFnZSA8PSB0b3RhbFBhZ2VzKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XG4gICAgICAgIHRoaXMubG9hZExhenlEYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEgJiYgbmV3UGFnZSA8IDEpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyBjdXJyZW50UGFnZTogMSB9KTtcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgKyBkaXJlY3Rpb247XG4gICAgICBpZiAobmV3UGFnZSA+IDAgJiYgbmV3UGFnZSA8PSB0b3RhbFBhZ2VzKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNNb3JlSXRlbXMpIHtcbiAgICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRMYXp5RGF0YSgpIHtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQb3NOYW1lKHBvc0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmV4dHJhRGF0YT8uZmluZCgocG9zKSA9PiBwb3MucG9pbnRfb2Zfc2FsZV9pZCA9PT0gcG9zSWQpPy5uYW1lIHx8ICcnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0RGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uTmFtZUNsaWNrZWQuZW1pdChkYXRhKTtcbiAgfVxufVxuIiwiPGxpYi1rdi1sb2FkaW5nIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbaXNMb2FkaW5nXT1cImxvYWRpbmdcIiA+IDwvbGliLWt2LWxvYWRpbmc+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNlY3Rpb25cIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQnVzY2FyLi4uXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxyXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJvblNlYXJjaCgpXCJcclxuICAgICAgLz5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImxhenlMb2FkaW5nXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5CdXNjYXI8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8dGFibGU+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERhdGFcIj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGVcIiBbbmdDbGFzc109XCJpdGVtW2NvbHVtbi5rZXldXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubGFiZWwgPT09ICdTZXJ2aWNlcydcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VydmljZS1pbmZvXCIgKGNsaWNrKT1cImVtaXREYXRhKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS51cmwgfHwgJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiSW1hZ2VuXCIgY2xhc3M9XCJzZXJ2aWNlLWltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYS1saW5rXCI+e3sgaXRlbS5uYW1lIH19PC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ25hbWUnICYmIGNvbHVtbi5sYWJlbCAhPT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiYS1saW5rXCIgKGNsaWNrKT1cImVtaXREYXRhKGl0ZW0pXCI+e3tcclxuICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmtleV1cclxuICAgICAgICAgICAgICB9fTwvYT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnaW1hZ2VzJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGltYWdlIG9mIGl0ZW1bY29sdW1uLmtleV0/LnNsaWNlKDAsIDMpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVwiIGFsdD1cIkltYWdlblwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtW2NvbHVtbi5rZXldPy5sZW5ndGggPiAzXCIgY2xhc3M9XCJleHRyYS1pbWFnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgK3t7IGl0ZW1bY29sdW1uLmtleV0ubGVuZ3RoIC0gMyB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIHwgZGF0ZSA6IFwiZGQvTU0veXl5eVwiIH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2FjdGlvbnMnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxBY3Rpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ2V4cGlyZV9hdCcgJiZcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb2ludF9vZl9zYWxlX2lkJyAmJlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAncG9zX2lkJyAmJlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ2ltYWdlcycgJiZcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAncG9pbnRfb2Zfc2FsZV9pZCcgfHwgY29sdW1uLmtleSA9PT0gJ3Bvc19pZCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgZ2V0UG9zTmFtZShpdGVtW2NvbHVtbi5rZXldKSB9fVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnaW5hdG9yXCI+XHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZS1wYWdpbmF0aW9uXCI+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VQYWdlKC0xKVwiIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgUHJldmlvdXNcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFnZSgxKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXMoKSAmJiAhaGFzTW9yZUl0ZW1zXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBOZXh0XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VycmVudC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+UGFnZSB7eyBjdXJyZW50UGFnZSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -0,0 +1,45 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class PaginationService {
5
+ constructor() {
6
+ this.paginationState = new BehaviorSubject({
7
+ currentPage: 1,
8
+ pageSize: 5,
9
+ searchText: '',
10
+ totalItems: 0
11
+ });
12
+ this.paginationState$ = this.paginationState.asObservable();
13
+ }
14
+ updatePaginationState(state) {
15
+ const currentState = this.paginationState.value;
16
+ this.paginationState.next({
17
+ ...currentState,
18
+ ...state
19
+ });
20
+ }
21
+ getCurrentState() {
22
+ return this.paginationState.value;
23
+ }
24
+ resetState() {
25
+ this.paginationState.next({
26
+ currentPage: 1,
27
+ pageSize: 5,
28
+ searchText: '',
29
+ totalItems: 0
30
+ });
31
+ }
32
+ calculateTotalPages() {
33
+ const state = this.getCurrentState();
34
+ return Math.ceil(state.totalItems / state.pageSize);
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
37
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginationService, providedIn: 'root' }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginationService, decorators: [{
40
+ type: Injectable,
41
+ args: [{
42
+ providedIn: 'root'
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l2aW8vc3JjL2xpYi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVl2QyxNQUFNLE9BQU8saUJBQWlCO0lBSDlCO1FBSVUsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBa0I7WUFDN0QsV0FBVyxFQUFFLENBQUM7WUFDZCxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxFQUFFO1lBQ2QsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDLENBQUM7UUFFSCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBMkJ4RDtJQXpCQyxxQkFBcUIsQ0FBQyxLQUErQjtRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QixHQUFHLFlBQVk7WUFDZixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QixXQUFXLEVBQUUsQ0FBQztZQUNkLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDOytHQWxDVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvblN0YXRlIHtcclxuICBjdXJyZW50UGFnZTogbnVtYmVyO1xyXG4gIHBhZ2VTaXplOiBudW1iZXI7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIHRvdGFsSXRlbXM6IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcGFnaW5hdGlvblN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uU3RhdGU+KHtcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgcGFnZVNpemU6IDUsXHJcbiAgICBzZWFyY2hUZXh0OiAnJyxcclxuICAgIHRvdGFsSXRlbXM6IDBcclxuICB9KTtcclxuXHJcbiAgcGFnaW5hdGlvblN0YXRlJCA9IHRoaXMucGFnaW5hdGlvblN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICB1cGRhdGVQYWdpbmF0aW9uU3RhdGUoc3RhdGU6IFBhcnRpYWw8UGFnaW5hdGlvblN0YXRlPikge1xyXG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUudmFsdWU7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5uZXh0KHtcclxuICAgICAgLi4uY3VycmVudFN0YXRlLFxyXG4gICAgICAuLi5zdGF0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50U3RhdGUoKTogUGFnaW5hdGlvblN0YXRlIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TdGF0ZS52YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5uZXh0KHtcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgIHBhZ2VTaXplOiA1LFxyXG4gICAgICBzZWFyY2hUZXh0OiAnJyxcclxuICAgICAgdG90YWxJdGVtczogMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUb3RhbFBhZ2VzKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHN0YXRlLnRvdGFsSXRlbXMgLyBzdGF0ZS5wYWdlU2l6ZSk7XHJcbiAgfVxyXG59ICJdfQ==
@@ -19,6 +19,7 @@ export * from './lib/services/notification.service';
19
19
  export * from './lib/services/session.service';
20
20
  export * from './lib/services/auth-interceptor.service';
21
21
  export * from './lib/services/auth.service';
22
+ export * from './lib/services/pagination.service';
22
23
  //Configs
23
24
  export * from './lib/interfaces/form-field.config';
24
25
  //Helpers
@@ -29,4 +30,4 @@ export * from './lib/validators/password-missmatch.validator';
29
30
  export * from './lib/enums/action-type.enum';
30
31
  // Injection Tokens
31
32
  export * from './lib/injection-tokens/auth-config';
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsWUFBWTtBQUNaLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHdFQUF3RSxDQUFBO0FBQ3RGLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzREFBc0QsQ0FBQTtBQUNwRSxjQUFjLHdEQUF3RCxDQUFBO0FBQ3RFLGNBQWMsa0RBQWtELENBQUM7QUFFakUsVUFBVTtBQUNWLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLFNBQVM7QUFDVCxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFNBQVM7QUFDVCxjQUFjLDJCQUEyQixDQUFBO0FBRXpDLFlBQVk7QUFDWixjQUFjLCtDQUErQyxDQUFBO0FBRTdELE9BQU87QUFDUCxjQUFjLDhCQUE4QixDQUFBO0FBRTVDLG1CQUFtQjtBQUNuQixjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGtpdmlvXHJcbiAqL1xyXG5cclxuLy9Db21wb25lbnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3YtcG9wdXAva3YtcG9wdXAuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LXJlc291cmNlLW5vdC1mb3VuZC9rdi1yZXNvdXJjZS1ub3QtZm91bmQuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LXN0ZXBwZXIva3Ytc3RlcHBlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LXN0ZXAva3Ytc3RlcC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LWFjY29yZGlvbi9rdi1hY2NvcmRpb24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9rdi1hbGVydC9rdi1hbGVydC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LXNpZGUtbWVudS9rdi1zaWRlLW1lbnUuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LW1haW4tdGFibGUva3YtbWFpbi10YWJsZS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3YtbG9hZGluZy9rdi1sb2FkaW5nLmNvbXBvbmVudCc7XHJcblxyXG4vL1NlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZhY3Rvcmllcy9mb3JtLWZhY3Rvcnkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuXHJcbi8vQ29uZmlnc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2Zvcm0tZmllbGQuY29uZmlnJztcclxuXHJcbi8vSGVscGVyc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXJzL2F1dGguaGVscGVyJ1xyXG5cclxuLy9WYWxpZGF0b3JzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvcGFzc3dvcmQtbWlzc21hdGNoLnZhbGlkYXRvcidcclxuXHJcbi8vRW51bXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZW51bXMvYWN0aW9uLXR5cGUuZW51bSdcclxuXHJcbi8vIEluamVjdGlvbiBUb2tlbnNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5qZWN0aW9uLXRva2Vucy9hdXRoLWNvbmZpZyc7Il19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsWUFBWTtBQUNaLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHdFQUF3RSxDQUFBO0FBQ3RGLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzREFBc0QsQ0FBQTtBQUNwRSxjQUFjLHdEQUF3RCxDQUFBO0FBQ3RFLGNBQWMsa0RBQWtELENBQUM7QUFFakUsVUFBVTtBQUNWLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMsb0NBQW9DLENBQUM7QUFFbkQsU0FBUztBQUNULGNBQWMsMkJBQTJCLENBQUE7QUFFekMsWUFBWTtBQUNaLGNBQWMsK0NBQStDLENBQUE7QUFFN0QsT0FBTztBQUNQLGNBQWMsOEJBQThCLENBQUE7QUFFNUMsbUJBQW1CO0FBQ25CLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Yga2l2aW9cclxuICovXHJcblxyXG4vL0NvbXBvbmVudHNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9rdi1wb3B1cC9rdi1wb3B1cC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3YtcmVzb3VyY2Utbm90LWZvdW5kL2t2LXJlc291cmNlLW5vdC1mb3VuZC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3Ytc3RlcHBlci9rdi1zdGVwcGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3Ytc3RlcC9rdi1zdGVwLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3YtYWNjb3JkaW9uL2t2LWFjY29yZGlvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2t2LWFsZXJ0L2t2LWFsZXJ0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3Ytc2lkZS1tZW51L2t2LXNpZGUtbWVudS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcclxuXHJcbi8vU2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmFjdG9yaWVzL2Zvcm0tZmFjdG9yeS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoLWludGVyY2VwdG9yLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xyXG5cclxuLy9Db25maWdzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvZm9ybS1maWVsZC5jb25maWcnO1xyXG5cclxuLy9IZWxwZXJzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMvYXV0aC5oZWxwZXInXHJcblxyXG4vL1ZhbGlkYXRvcnNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycy9wYXNzd29yZC1taXNzbWF0Y2gudmFsaWRhdG9yJ1xyXG5cclxuLy9FbnVtc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnVtcy9hY3Rpb24tdHlwZS5lbnVtJ1xyXG5cclxuLy8gSW5qZWN0aW9uIFRva2Vuc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbmplY3Rpb24tdG9rZW5zL2F1dGgtY29uZmlnJzsiXX0=