sf-crud 12.0.5 → 12.1.1

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.
Files changed (47) hide show
  1. package/bundles/sf-crud.umd.js +2566 -1306
  2. package/bundles/sf-crud.umd.js.map +1 -1
  3. package/esm2015/lib/components/control/control.component.js +285 -73
  4. package/esm2015/lib/components/file-upload/file-upload.component.js +143 -0
  5. package/esm2015/lib/components/form/form.component.js +267 -0
  6. package/esm2015/lib/components/registro/registro.component.js +507 -407
  7. package/esm2015/lib/components/step/step.component.js +79 -0
  8. package/esm2015/lib/components/tablero/tablero.component.js +91 -28
  9. package/esm2015/lib/sf-crud.module.js +27 -15
  10. package/esm2015/lib/sf-crud.routing.module.js +23 -0
  11. package/esm2015/lib/sf-crud.service.js +486 -12
  12. package/esm2015/lib/shared/models/Conditions.model.js +81 -0
  13. package/esm2015/lib/shared/models/Empresa.model.js +2 -0
  14. package/esm2015/lib/shared/models/Reason.model.js +7 -0
  15. package/esm2015/lib/shared/models/crud-config.model.js +36 -13
  16. package/esm2015/lib/shared/models/shema.model.js +5 -1
  17. package/esm2015/lib/shared/services/general.service.js +41 -17
  18. package/esm2015/lib/shared/services/notification.service.js +83 -0
  19. package/esm2015/lib/shared/services/step.service.js +65 -0
  20. package/esm2015/public-api.js +7 -1
  21. package/fesm2015/sf-crud.js +2197 -1151
  22. package/fesm2015/sf-crud.js.map +1 -1
  23. package/lib/components/control/control.component.d.ts +39 -10
  24. package/lib/components/file-upload/file-upload.component.d.ts +34 -0
  25. package/lib/components/form/form.component.d.ts +58 -0
  26. package/lib/components/registro/registro.component.d.ts +81 -54
  27. package/lib/components/step/step.component.d.ts +27 -0
  28. package/lib/components/tablero/tablero.component.d.ts +15 -5
  29. package/lib/sf-crud.module.d.ts +80 -76
  30. package/lib/sf-crud.routing.module.d.ts +7 -0
  31. package/lib/sf-crud.service.d.ts +115 -5
  32. package/lib/shared/models/Conditions.model.d.ts +32 -0
  33. package/lib/shared/models/Empresa.model.d.ts +11 -0
  34. package/lib/shared/models/Reason.model.d.ts +5 -0
  35. package/lib/shared/models/crud-config.model.d.ts +76 -24
  36. package/lib/shared/models/shema.model.d.ts +27 -0
  37. package/lib/shared/services/general.service.d.ts +8 -1
  38. package/lib/shared/services/notification.service.d.ts +27 -0
  39. package/lib/shared/services/step.service.d.ts +27 -0
  40. package/package.json +9 -2
  41. package/public-api.d.ts +6 -0
  42. package/esm2015/lib/components/registro-child/registro-child.component.js +0 -348
  43. package/esm2015/lib/components/registro-detalle/registro-detalle.component.js +0 -232
  44. package/esm2015/lib/shared/models/data-temp-crud.model.js +0 -6
  45. package/lib/components/registro-child/registro-child.component.d.ts +0 -48
  46. package/lib/components/registro-detalle/registro-detalle.component.d.ts +0 -36
  47. package/lib/shared/models/data-temp-crud.model.d.ts +0 -4
@@ -0,0 +1,79 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ import * as i2 from "../../shared/services/step.service";
5
+ import * as i3 from "primeng/steps";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "primeng/button";
8
+ export class StepComponent {
9
+ constructor(router, stepService, activatedRoute) {
10
+ this.router = router;
11
+ this.stepService = stepService;
12
+ this.activatedRoute = activatedRoute;
13
+ this.activeIndex = 0;
14
+ this.loading = false;
15
+ this.nextMovement = 0;
16
+ }
17
+ ngOnInit() {
18
+ this.stepService.currentIndex$.subscribe((result) => {
19
+ this.nextMovement = result;
20
+ this.router.navigate([this.items[result].routerLink], { relativeTo: this.activatedRoute, queryParamsHandling: "preserve" });
21
+ this.moveScroll(this.nextMovement);
22
+ this.activeIndex = result;
23
+ });
24
+ }
25
+ ngAfterViewInit() {
26
+ this.stepService.requestApproved$.subscribe((result) => {
27
+ if (result) {
28
+ this.navigate();
29
+ }
30
+ this.loading = false;
31
+ });
32
+ this.moveScroll(this.nextMovement);
33
+ }
34
+ onactiveIndexChange($event) {
35
+ this.requestNaviagtion($event - this.activeIndex);
36
+ }
37
+ /**
38
+ * Button solicitates permissions to change tab.
39
+ * @param add steps to advance. If negative will go back
40
+ */
41
+ requestNaviagtion(add) {
42
+ this.loading = true;
43
+ this.nextMovement = this.activeIndex + add;
44
+ this.stepService.requestApproval = this.nextMovement;
45
+ }
46
+ navigate() {
47
+ if (this.nextMovement < this.items.length) {
48
+ this.activeIndex = this.nextMovement;
49
+ this.router.navigate([this.items[this.nextMovement].routerLink], { relativeTo: this.activatedRoute, queryParamsHandling: "preserve" });
50
+ }
51
+ }
52
+ moveScroll(nextIndex) {
53
+ let miDiv = document.getElementById("step-container");
54
+ const steps = document.querySelector(".p-steps ul[role='tablist']");
55
+ if (steps !== null) {
56
+ let i = 0;
57
+ let value = 0;
58
+ while (i < nextIndex) {
59
+ const child = steps.children[i];
60
+ value += child.clientWidth;
61
+ i++;
62
+ }
63
+ miDiv.scrollLeft = value;
64
+ }
65
+ }
66
+ }
67
+ StepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StepComponent, deps: [{ token: i1.Router }, { token: i2.StepService }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
68
+ StepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: StepComponent, selector: "app-step", inputs: { items: "items" }, ngImport: i0, template: "<div>\r\n <div id=\"step-container\">\r\n <p-steps #stepsComponent [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"activeIndex\" (activeIndexChange)=\"onactiveIndexChange($event)\"></p-steps>\r\n </div>\r\n\r\n <div class=\"content\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"buttons-step\">\r\n <div >\r\n <button pButton *ngIf=\"activeIndex != 0\" icon=\"pi pi-arrow-left\" [disabled]=\"loading\"\r\n (click)=\"requestNaviagtion(-1)\"></button>\r\n </div>\r\n <span >\r\n <button pButton *ngIf=\"!(activeIndex + 1 >= items.length)\" icon=\"pi pi-arrow-right\" [disabled]=\"loading\"\r\n (click)=\"requestNaviagtion(1)\"></button>\r\n </span>\r\n <button pButton *ngIf=\"activeIndex >= items.length - 1\" label=\"Finalizar\" [disabled]=\"loading\" (click)=\"requestNaviagtion(0)\"\r\n [style]=\"{'margin-left': '10px'}\"></button>\r\n </div>\r\n</div>\r\n", styles: ["::ng-deep .p-steps-number{background-color:var(--secondary-color)!important}::ng-deep .p-button{border-radius:6px}::ng-deep .p-steps-item .p-menuitem-link{margin-inline:15vw}::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{color:#fff;font-family:sans-serif}::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-title{color:#4b5563;font-family:inherit}::ng-deep{& ul[role=tablist]{padding-bottom:10px}& .p-steps-number{color:#fff!important}}.buttons-step{margin-bottom:1.5rem}.buttons-step button{height:3.5rem}.buttons-step ::ng-deep .p-button{background-color:var(--button-color);border-color:var(--button-color)}.buttons-step .p-button-icon-only{width:3.5rem}#step-container{overflow-x:scroll;scrollbar-width:20px;padding-bottom:5px}.buttons-step{display:flex;justify-content:space-evenly}.content{margin-block:30px}@media screen and (max-width: 765px){::ng-deep{& .p-steps-title{font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;width:inherit;text-align:center}}::ng-deep .p-steps-item a.p-menuitem-link{margin-inline:0!important;width:90vw}}\n"], components: [{ type: i3.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass"], outputs: ["activeIndexChange"] }], directives: [{ type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StepComponent, decorators: [{
70
+ type: Component,
71
+ args: [{
72
+ selector: 'app-step',
73
+ templateUrl: './step.component.html',
74
+ styleUrls: ['./step.component.css']
75
+ }]
76
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.StepService }, { type: i1.ActivatedRoute }]; }, propDecorators: { items: [{
77
+ type: Input
78
+ }] } });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9zdGVwL3N0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvc3RlcC9zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVV4RSxNQUFNLE9BQU8sYUFBYTtJQVF4QixZQUNVLE1BQWMsRUFDZCxXQUF3QixFQUN4QixjQUE4QjtRQUY5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBUHhDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFNZCxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFBO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDNUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckQsSUFBSSxNQUFNLEVBQUM7Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2FBQ2hCO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDdkQsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ3hJO0lBQ0gsQ0FBQztJQUdELFVBQVUsQ0FBQyxTQUFpQjtRQUMxQixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFFLENBQUE7UUFDdEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRXBFLElBQUksS0FBSyxLQUFLLElBQUksRUFBQztZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDVCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDYixPQUFPLENBQUMsR0FBRyxTQUFTLEVBQUU7Z0JBQ3BCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQy9CLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFBO2dCQUMxQixDQUFDLEVBQUUsQ0FBQTthQUNKO1lBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7U0FDekI7SUFDSCxDQUFDOzsyR0FyRVUsYUFBYTsrRkFBYixhQUFhLDRFQ1YxQiwyL0JBcUJBOzRGRFhhLGFBQWE7a0JBTHpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFdBQVcsRUFBRSx1QkFBdUI7b0JBQ3BDLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQztvSkFJVSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBTdGVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGVwLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3RlcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N0ZXAuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcblxyXG4gIEBJbnB1dCgpIGl0ZW1zITogTWVudUl0ZW1bXTtcclxuICBhY3RpdmVJbmRleCA9IDA7XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIG5leHRNb3ZlbWVudCA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgc3RlcFNlcnZpY2U6IFN0ZXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuY3VycmVudEluZGV4JC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm5leHRNb3ZlbWVudCA9IHJlc3VsdFxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5pdGVtc1tyZXN1bHRdLnJvdXRlckxpbmtdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwicHJlc2VydmVcIiB9KTtcclxuICAgICAgdGhpcy5tb3ZlU2Nyb2xsKHRoaXMubmV4dE1vdmVtZW50KVxyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gcmVzdWx0XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGVwU2VydmljZS5yZXF1ZXN0QXBwcm92ZWQkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpe1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGUoKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSlcclxuICAgIHRoaXMubW92ZVNjcm9sbCh0aGlzLm5leHRNb3ZlbWVudClcclxuICB9XHJcblxyXG4gIG9uYWN0aXZlSW5kZXhDaGFuZ2UoJGV2ZW50OiBudW1iZXIpe1xyXG4gICAgdGhpcy5yZXF1ZXN0TmF2aWFndGlvbigkZXZlbnQtdGhpcy5hY3RpdmVJbmRleCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdXR0b24gc29saWNpdGF0ZXMgcGVybWlzc2lvbnMgdG8gY2hhbmdlIHRhYi5cclxuICAgKiBAcGFyYW0gYWRkIHN0ZXBzIHRvIGFkdmFuY2UuIElmIG5lZ2F0aXZlIHdpbGwgZ28gYmFja1xyXG4gICAqL1xyXG4gIHJlcXVlc3ROYXZpYWd0aW9uKGFkZDogbnVtYmVyKXtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5leHRNb3ZlbWVudCA9IHRoaXMuYWN0aXZlSW5kZXggKyBhZGQ7XHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLnJlcXVlc3RBcHByb3ZhbCA9IHRoaXMubmV4dE1vdmVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZSgpe1xyXG4gICAgaWYgKHRoaXMubmV4dE1vdmVtZW50IDwgdGhpcy5pdGVtcy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5uZXh0TW92ZW1lbnQ7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLml0ZW1zW3RoaXMubmV4dE1vdmVtZW50XS5yb3V0ZXJMaW5rXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcInByZXNlcnZlXCIgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbW92ZVNjcm9sbChuZXh0SW5kZXg6IG51bWJlcil7XHJcbiAgICBsZXQgbWlEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0ZXAtY29udGFpbmVyXCIpIVxyXG4gICAgY29uc3Qgc3RlcHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnAtc3RlcHMgdWxbcm9sZT0ndGFibGlzdCddXCIpO1xyXG5cclxuICAgIGlmIChzdGVwcyAhPT0gbnVsbCl7XHJcbiAgICAgIGxldCBpID0gMFxyXG4gICAgICBsZXQgdmFsdWUgPSAwXHJcbiAgICAgIHdoaWxlIChpIDwgbmV4dEluZGV4KSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBzdGVwcy5jaGlsZHJlbltpXVxyXG4gICAgICAgIHZhbHVlICs9IGNoaWxkLmNsaWVudFdpZHRoXHJcbiAgICAgICAgaSsrXHJcbiAgICAgIH1cclxuICAgICAgbWlEaXYuc2Nyb2xsTGVmdCA9IHZhbHVlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgICA8ZGl2IGlkPVwic3RlcC1jb250YWluZXJcIj5cclxuICAgICAgICA8cC1zdGVwcyAjc3RlcHNDb21wb25lbnQgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZUluZGV4XCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cIm9uYWN0aXZlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiPjwvcC1zdGVwcz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1zdGVwXCI+XHJcbiAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImFjdGl2ZUluZGV4ICE9IDBcIiBpY29uPVwicGkgcGktYXJyb3ctbGVmdFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXF1ZXN0TmF2aWFndGlvbigtMSlcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiA+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cIiEoYWN0aXZlSW5kZXggKyAxID49IGl0ZW1zLmxlbmd0aClcIiAgaWNvbj1cInBpIHBpLWFycm93LXJpZ2h0XCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcXVlc3ROYXZpYWd0aW9uKDEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImFjdGl2ZUluZGV4ID49IGl0ZW1zLmxlbmd0aCAtIDFcIiBsYWJlbD1cIkZpbmFsaXphclwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKGNsaWNrKT1cInJlcXVlc3ROYXZpYWd0aW9uKDApXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiAnMTBweCd9XCI+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,63 +1,109 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
2
  import { CrudConfig } from '../../shared/models/crud-config.model';
3
3
  import * as _ from "lodash";
4
4
  import * as jsonpath from 'jsonpath';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../shared/services/general.service";
7
7
  import * as i2 from "@angular/router";
8
- import * as i3 from "primeng/blockui";
9
- import * as i4 from "primeng/toolbar";
10
- import * as i5 from "primeng/table";
11
- import * as i6 from "primeng/splitbutton";
12
- import * as i7 from "@angular/common";
13
- import * as i8 from "primeng/api";
14
- import * as i9 from "primeng/button";
15
- import * as i10 from "primeng/ripple";
16
- import * as i11 from "primeng/inputtext";
8
+ import * as i3 from "../../sf-crud.service";
9
+ import * as i4 from "../../shared/services/step.service";
10
+ import * as i5 from "primeng/toolbar";
11
+ import * as i6 from "primeng/table";
12
+ import * as i7 from "primeng/splitbutton";
13
+ import * as i8 from "@angular/common";
14
+ import * as i9 from "primeng/api";
15
+ import * as i10 from "primeng/button";
16
+ import * as i11 from "primeng/ripple";
17
+ import * as i12 from "primeng/inputtext";
17
18
  export class TableroComponent {
18
- constructor(generalService, router) {
19
+ constructor(generalService, router, sfCrudService, stepService) {
19
20
  this.generalService = generalService;
20
21
  this.router = router;
22
+ this.sfCrudService = sfCrudService;
23
+ this.stepService = stepService;
21
24
  this.opciones = [];
22
25
  this.idEntidad = '';
23
26
  this.idKatios = '';
24
27
  this.onSelectAction = new EventEmitter();
25
28
  this.items = [];
26
29
  this.crudConfig = new CrudConfig();
27
- this.enProceso = false;
28
30
  this.data = [];
31
+ this.initialData = [];
29
32
  this.btn = { create: undefined, read: undefined, update: undefined, delete: undefined };
33
+ this.loading = { inProgress: false, target: undefined };
30
34
  }
31
35
  ngOnInit() {
36
+ this.generalService.environment = this.environment;
32
37
  this.loadConfigCrud();
33
38
  }
34
39
  loadConfigCrud() {
35
- this.enProceso = true;
40
+ this.loading.inProgress = true;
41
+ this.sfCrudService.formLoading = this.loading;
36
42
  this.generalService.getCrudByEntidad(this.idKatios, this.idEntidad)
37
- .then(res => {
43
+ .then((res) => {
38
44
  this.crudConfig = res;
39
- this.getInfoTablero(this.crudConfig.tablero);
45
+ this.getInfoTablero();
40
46
  })
41
47
  .catch(err => {
42
48
  console.log(err);
43
- this.enProceso = false;
49
+ this.loading.inProgress = false;
50
+ this.sfCrudService.formLoading = this.loading;
44
51
  });
45
52
  }
46
- getInfoTablero(configTablero) {
47
- this.generalService.genericRequest(configTablero.method, configTablero.server, this.aplyKeys(configTablero.keys, configTablero.endpoint, this.dataExt))
53
+ customizeCompany(uiEsquemas) {
54
+ var _a, _b, _c;
55
+ this.sfCrudService.configEmpresa = (_a = uiEsquemas.find(ui => ui.general)) === null || _a === void 0 ? void 0 : _a.general;
56
+ if (this.sfCrudService.configEmpresa) {
57
+ if ((_b = this.sfCrudService.configEmpresa.colors) === null || _b === void 0 ? void 0 : _b.secondary)
58
+ this.color2 = this.sfCrudService.configEmpresa.colors.secondary;
59
+ if ((_c = this.sfCrudService.configEmpresa.colors) === null || _c === void 0 ? void 0 : _c.button)
60
+ this.colorButtons = this.sfCrudService.configEmpresa.colors.secondary;
61
+ }
62
+ if (!this.color2)
63
+ this.color2 = this.colorButtons = "blue";
64
+ }
65
+ // submit(index: number) {
66
+ // let registro = this.sfCrudService.getRegistro(index)
67
+ // let operation = registro.operations.find(op => op.type.startsWith(this.sfCrudService.getTrx(0)))!
68
+ // console.log(operation)
69
+ // let url = this.sfCrudService.getURL(operation, index)
70
+ // return this.generalService.genericRequest(operation.method, url, this.sfCrudService.getData(index))
71
+ // .then((res) => {
72
+ // if (res === null) res = {}
73
+ // res = this.sfCrudService.applyObjectKeys(res, operation.keysEsquema || [], registro)
74
+ // console.log(res)
75
+ // this.sfCrudService.setAnswers(res, 0)
76
+ // if (operation.changeTrx) operation.changeTrx.forEach(x => this.sfCrudService.setTrx(x.trx, x.index))
77
+ // // this.notificationService.generateMessage(this.notificationService.genDefaultMessage("success", undefined, "Información subida correctamente", operation.answerChecking), res, operation.answerChecking)
78
+ // // return res;
79
+ // })
80
+ // .catch(err => {
81
+ // // const operation = this.sfCrudService.getRegistro(this.indexCrud).operations.find(op => op.type.startsWith(this.sfCrudService.getTrx(index)))!
82
+ // // this.notificationService.generateMessage(this.notificationService.genDefaultMessage("error", "Error no controlado", "Por favor comunicarse con el admin",operation.errorChecking), err.error, operation.errorChecking)
83
+ // // throw new Error(err)
84
+ // })
85
+ // }
86
+ getInfoTablero() {
87
+ //this.submit(0)
88
+ this.data = [];
89
+ this.initialData = [];
90
+ this.loading.inProgress = true;
91
+ this.sfCrudService.formLoading = this.loading;
92
+ let url = this.aplyKeys(this.crudConfig.tablero.keys, `${this.generalService.jsonConfig[this.crudConfig.tablero.server]}${this.crudConfig.tablero.endpoint}`, this.dataExt);
93
+ this.generalService.genericRequest(this.crudConfig.tablero.method, url, this.dataExt)
48
94
  .then((res) => {
49
95
  let aux;
50
96
  if (!Array.isArray(res))
51
97
  aux = res.data;
52
98
  else
53
99
  aux = res;
100
+ this.initialData = _.cloneDeep(aux);
54
101
  this.generateData(aux);
55
102
  this.loadOptions();
56
- this.enProceso = false;
57
103
  })
58
- .catch(err => {
59
- console.log(err);
60
- this.enProceso = false;
104
+ .finally(() => {
105
+ this.loading.inProgress = false;
106
+ this.sfCrudService.formLoading = this.loading;
61
107
  });
62
108
  }
63
109
  generateData(data) {
@@ -75,6 +121,9 @@ export class TableroComponent {
75
121
  return jsonpath.query(item, path)[0];
76
122
  return item[path];
77
123
  }
124
+ externalLinkAction() {
125
+ this.opciones.filter((opc) => opc.valor.action).forEach(opc => this.execAction(opc.valor));
126
+ }
78
127
  loadOptions() {
79
128
  this.items = [];
80
129
  this.btn.create = this.opciones.find(x => x.label == 'Crear');
@@ -84,6 +133,8 @@ export class TableroComponent {
84
133
  }
85
134
  redirect(accion, data) {
86
135
  var _a, _b;
136
+ this.stepService.reset();
137
+ this.sfCrudService.reset();
87
138
  switch (accion) {
88
139
  case 'create':
89
140
  this.router.navigateByUrl(((_b = (_a = this.btn.create) === null || _a === void 0 ? void 0 : _a.valor) === null || _b === void 0 ? void 0 : _b.redirect) || '');
@@ -125,7 +176,10 @@ export class TableroComponent {
125
176
  execAction(params) {
126
177
  switch (params.action) {
127
178
  case 'redirect':
128
- this.router.navigateByUrl(this.aplyKeys(this.crudConfig.tablero.keys, params.link, this.itemSelected));
179
+ this.router.navigateByUrl(this.aplyKeys(this.crudConfig.tablero.keys, params.link, this.itemSelected)).then(() => {
180
+ if (params.reload)
181
+ window.location.reload();
182
+ });
129
183
  break;
130
184
  default:
131
185
  this.onSelectAction.emit({ data: _.cloneDeep(this.itemSelected), params });
@@ -133,25 +187,34 @@ export class TableroComponent {
133
187
  }
134
188
  }
135
189
  }
136
- TableroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TableroComponent, deps: [{ token: i1.GeneralService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
137
- TableroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TableroComponent, selector: "sf-crudtablero", inputs: { opciones: "opciones", idEntidad: "idEntidad", idKatios: "idKatios", user: "user", dataExt: "dataExt" }, outputs: { onSelectAction: "onSelectAction" }, ngImport: i0, template: "<p-blockUI [blocked]=\"enProceso\">\r\n <i class=\"pi pi-cog pi-spin\" style=\"font-size: 50px\"></i>\r\n</p-blockUI>\r\n\r\n<div class=\"card\" *ngIf=\"!enProceso\">\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <button *ngIf=\"btn.create\" pButton pRipple [label]=\"btn.create.label\" [icon]=\"btn.create.icon\"\r\n class=\"p-button-success mr-2\" (click)=\"redirect('create')\"></button>\r\n </ng-template>\r\n </p-toolbar>\r\n <p-table #dt [columns]=\"crudConfig.tablero.columns\" [value]=\"data\" [rowHover]=\"true\" [rows]=\"10\" [paginator]=\"true\"\r\n [globalFilterFields]=\"crudConfig.tablero?.filters || []\" [tableStyle]=\"{'min-width': '75rem'}\"\r\n currentPageReportTemplate=\"Registro {first} al {last} de {totalRecords}\" [showCurrentPageReport]=\"true\">\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <h5 class=\"m-0\">{{crudConfig.tablero?.label || idEntidad}}</h5>\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\r\n placeholder=\"Buscar...\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{col.label}}\r\n </th>\r\n <th>Acci\u00F3n</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of columns\" [ngSwitch]=\"col.type\">\r\n <td *ngSwitchCase=\"'text'\">{{rowData[col.col]}}</td>\r\n <td *ngSwitchCase=\"'date:yyyy-mm-dd'\">{{rowData[col.col] | date: 'yyyy-MM-dd'}}</td>\r\n <td *ngSwitchCase=\"'currency:USD'\">{{rowData[col.col] | currency: 'USD'}}</td>\r\n </ng-container>\r\n <td>\r\n <p-splitButton icon=\"pi pi-align-justify\" [model]=\"items\" appendTo=\"body\"\r\n (onDropdownClick)=\"itemSelected = rowData\"></p-splitButton>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>", components: [{ type: i3.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { type: i4.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i6.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i10.Ripple, selector: "[pRipple]" }, { type: i11.InputText, selector: "[pInputText]" }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "date": i7.DatePipe, "currency": i7.CurrencyPipe } });
190
+ TableroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TableroComponent, deps: [{ token: i1.GeneralService }, { token: i2.Router }, { token: i3.SfCrudService }, { token: i4.StepService }], target: i0.ɵɵFactoryTarget.Component });
191
+ TableroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TableroComponent, selector: "sf-crudtablero", inputs: { opciones: "opciones", idEntidad: "idEntidad", idKatios: "idKatios", environment: "environment", user: "user", dataExt: "dataExt" }, outputs: { onSelectAction: "onSelectAction" }, host: { properties: { "style.--secondary-color": "this.color2", "style.--button-color": "this.colorButtons" } }, ngImport: i0, template: "<div class=\"card\">\r\n <p-toolbar styleClass=\"mb-4 gap-2\" *ngIf=\"btn.create\">\r\n <ng-template pTemplate=\"left\">\r\n <button pButton pRipple [label]=\"btn.create.label\" [icon]=\"btn.create.icon\"\r\n class=\"p-button-success mr-2\" (click)=\"redirect('create')\"></button>\r\n </ng-template>\r\n </p-toolbar>\r\n <p-table *ngIf=\"crudConfig?.tablero?.columns\" #dt [columns]=\"crudConfig.tablero.columns\" [value]=\"data\" [rowHover]=\"true\" [rows]=\"10\" [paginator]=\"true\"\r\n [totalRecords]=\"data.length\" [globalFilterFields]=\"crudConfig.tablero?.filters || []\" [tableStyle]=\"{'min-width': '75rem'}\"\r\n currentPageReportTemplate=\"Registro {first} al {last} de {totalRecords}\" [showCurrentPageReport]=\"true\">\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <h5 class=\"m-0\">{{crudConfig.tablero?.label || idEntidad}}</h5>\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\r\n placeholder=\"Buscar...\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{col.label}}\r\n </th>\r\n <th>Acci\u00F3n</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of columns\" [ngSwitch]=\"col.type\">\r\n <td *ngSwitchCase=\"'text'\">{{rowData[col.col]}}</td>\r\n <td *ngSwitchCase=\"'date:yyyy-mm-dd'\">{{rowData[col.col] | date: 'yyyy-MM-dd'}}</td>\r\n <td *ngSwitchCase=\"'currency:USD'\">{{rowData[col.col] | currency: 'USD'}}</td>\r\n </ng-container>\r\n <td>\r\n <p-splitButton *ngIf=\"items.length > 1\" icon=\"pi pi-align-justify\" [model]=\"items\" appendTo=\"body\"\r\n (onDropdownClick)=\"itemSelected = rowData\"></p-splitButton>\r\n <div *ngIf=\"items.length <= 1\">\r\n <button *ngFor=\"let item of items\" pButton pRipple [icon]=\"item.icon\" class=\"mr-2\"\r\n (click)=\"itemSelected = initialData[index]; item.command()\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["::ng-deep .p-datatable table{min-width:100%}button:not(.p-button-success){background:var(--secondary-color)!important;border:var(--secondary-color)!important;color:#fff}\n"], components: [{ type: i5.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { type: i6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i7.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i10.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i11.Ripple, selector: "[pRipple]" }, { type: i12.InputText, selector: "[pInputText]" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "date": i8.DatePipe, "currency": i8.CurrencyPipe } });
138
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TableroComponent, decorators: [{
139
193
  type: Component,
140
194
  args: [{
141
195
  selector: 'sf-crudtablero',
142
- templateUrl: './tablero.component.html'
196
+ templateUrl: './tablero.component.html',
197
+ styleUrls: ['./tablero.component.css']
143
198
  }]
144
- }], ctorParameters: function () { return [{ type: i1.GeneralService }, { type: i2.Router }]; }, propDecorators: { opciones: [{
199
+ }], ctorParameters: function () { return [{ type: i1.GeneralService }, { type: i2.Router }, { type: i3.SfCrudService }, { type: i4.StepService }]; }, propDecorators: { opciones: [{
145
200
  type: Input
146
201
  }], idEntidad: [{
147
202
  type: Input
148
203
  }], idKatios: [{
149
204
  type: Input
205
+ }], environment: [{
206
+ type: Input
150
207
  }], user: [{
151
208
  type: Input
152
209
  }], dataExt: [{
153
210
  type: Input
154
211
  }], onSelectAction: [{
155
212
  type: Output
213
+ }], color2: [{
214
+ type: HostBinding,
215
+ args: ["style.--secondary-color"]
216
+ }], colorButtons: [{
217
+ type: HostBinding,
218
+ args: ["style.--button-color"]
156
219
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVyby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXJvL3RhYmxlcm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVyby90YWJsZXJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFpQixVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUlsRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU1yQyxNQUFNLE9BQU8sZ0JBQWdCO0lBZ0IzQixZQUNVLGNBQThCLEVBQzlCLE1BQWM7UUFEZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWhCZixhQUFRLEdBQVUsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUdyQixtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRS9ELFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLFFBQUcsR0FBeUQsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFF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cG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWdUYWJsZXJvLCBDcnVkQ29uZmlnIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9jcnVkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0ICogYXMganNvbnBhdGggZnJvbSAnanNvbnBhdGgnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZi1jcnVkdGFibGVybycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlcm8uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZXJvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgb3BjaW9uZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgaWRFbnRpZGFkOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBpZEthdGlvczogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdXNlcjogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFFeHQ6IGFueTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3RBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIHB1YmxpYyBjcnVkQ29uZmlnOiBDcnVkQ29uZmlnID0gbmV3IENydWRDb25maWcoKTtcclxuICBwdWJsaWMgZW5Qcm9jZXNvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRhdGE6IGFueVtdID0gW107XHJcbiAgcHVibGljIGJ0bjogeyBjcmVhdGU6IGFueSwgcmVhZDogYW55LCB1cGRhdGU6IGFueSwgZGVsZXRlOiBhbnkgfSA9IHsgY3JlYXRlOiB1bmRlZmluZWQsIHJlYWQ6IHVuZGVmaW5lZCwgdXBkYXRlOiB1bmRlZmluZWQsIGRlbGV0ZTogdW5kZWZpbmVkIH1cclxuICBwdWJsaWMgaXRlbVNlbGVjdGVkOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZENvbmZpZ0NydWQoKVxyXG4gIH1cclxuXHJcbiAgbG9hZENvbmZpZ0NydWQoKSB7XHJcbiAgICB0aGlzLmVuUHJvY2VzbyA9IHRydWU7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdldENydWRCeUVudGlkYWQodGhpcy5pZEthdGlvcywgdGhpcy5pZEVudGlkYWQpXHJcbiAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5jcnVkQ29uZmlnID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZ2V0SW5mb1RhYmxlcm8odGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8pO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRJbmZvVGFibGVybyhjb25maWdUYWJsZXJvOiBDb25maWdUYWJsZXJvKSB7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KGNvbmZpZ1RhYmxlcm8ubWV0aG9kLCBjb25maWdUYWJsZXJvLnNlcnZlciwgdGhpcy5hcGx5S2V5cyhjb25maWdUYWJsZXJvLmtleXMsIGNvbmZpZ1RhYmxlcm8uZW5kcG9pbnQsIHRoaXMuZGF0YUV4dCkpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBhdXg7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcykpIGF1eCA9IHJlcy5kYXRhOyBlbHNlIGF1eCA9IHJlcztcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShhdXgpO1xyXG4gICAgICAgIHRoaXMubG9hZE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZURhdGEoZGF0YTogYW55W10pIHtcclxuICAgIGRhdGEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBuZXdJdGVtOiBhbnkgPSB7fTtcclxuICAgICAgdGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8uY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgbmV3SXRlbVtjb2wuY29sXSA9IHRoaXMuZ2V0VmFsdWUoY29sLmNvbCwgaXRlbSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5kYXRhLnB1c2gobmV3SXRlbSlcclxuICAgIH0pXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXHJcbiAgfVxyXG4gIGdldFZhbHVlKHBhdGg6IHN0cmluZywgaXRlbTogYW55KTogYW55IHtcclxuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiLlwiKSkgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KGl0ZW0sIHBhdGgpWzBdXHJcbiAgICByZXR1cm4gaXRlbVtwYXRoXVxyXG4gIH1cclxuXHJcbiAgbG9hZE9wdGlvbnMoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLmJ0bi5jcmVhdGUgPSB0aGlzLm9wY2lvbmVzLmZpbmQoeCA9PiB4LmxhYmVsID09ICdDcmVhcicpO1xyXG4gICAgdGhpcy5vcGNpb25lcy5maWx0ZXIoKG9wYzogYW55KSA9PiBvcGMudmFsb3IuYWN0aW9uKS5mb3JFYWNoKG9wYyA9PiB7XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaCh7IGxhYmVsOiBvcGMubGFiZWwsIGljb246IG9wYy5pY29uLCBjb21tYW5kOiAoKSA9PiB0aGlzLmV4ZWNBY3Rpb24ob3BjLnZhbG9yKSB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0KGFjY2lvbjogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGFjY2lvbikge1xyXG4gICAgICBjYXNlICdjcmVhdGUnOlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5idG4uY3JlYXRlPy52YWxvcj8ucmVkaXJlY3QgfHwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZWFkJzpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYXBseUtleXModGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8ua2V5cywgdGhpcy5idG4ucmVhZC52YWxvci5yZWRpcmVjdCwgZGF0YSkpO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmFwbHlLZXlzKHRoaXMuY3J1ZENvbmZpZy50YWJsZXJvLmtleXMsIHRoaXMuYnRuLnVwZGF0ZS52YWxvci5yZWRpcmVjdCwgZGF0YSkpO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmFwbHlLZXlzKHRoaXMuY3J1ZENvbmZpZy50YWJsZXJvLmtleXMsIHRoaXMuYnRuLmRlbGV0ZS52YWxvci5yZWRpcmVjdCwgZGF0YSkpO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwbHlLZXlzKGtleXM6IHsga2V5OiBzdHJpbmcsIHNjb3BlPzogc3RyaW5nIH1bXSwgZW5kcG9pbnQ6IHN0cmluZywgZGF0YT86IGFueSkge1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoa2V5LmtleSkge1xyXG4gICAgICAgIGNhc2UgJ0BuZG9jJzpcclxuICAgICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZShrZXkua2V5LCB0aGlzLnVzZXI/LlVzdWFyaW9TaXN0ZW1hPy5ORE9DIHx8ICcnKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQHRkb2MnOlxyXG4gICAgICAgICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKGtleS5rZXksIHRoaXMudXNlcj8uVXN1YXJpb1Npc3RlbWE/LlRET0MgfHwgJycpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdAaWRLYXRpb3MnOlxyXG4gICAgICAgICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKGtleS5rZXksIHRoaXMuaWRLYXRpb3MpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKGVuZHBvaW50LmluY2x1ZGVzKGtleS5rZXkpICYmIGRhdGEpIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZShrZXkua2V5LCBqc29ucGF0aC5xdWVyeShkYXRhLCBrZXk/LnNjb3BlIHx8ICcnKVswXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBleGVjQWN0aW9uKHBhcmFtczogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHBhcmFtcy5hY3Rpb24pIHtcclxuICAgICAgY2FzZSAncmVkaXJlY3QnOlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5hcGx5S2V5cyh0aGlzLmNydWRDb25maWcudGFibGVyby5rZXlzLCBwYXJhbXMubGluaywgdGhpcy5pdGVtU2VsZWN0ZWQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLm9uU2VsZWN0QWN0aW9uLmVtaXQoeyBkYXRhOiBfLmNsb25lRGVlcCh0aGlzLml0ZW1TZWxlY3RlZCksIHBhcmFtcyB9KVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8cC1ibG9ja1VJIFtibG9ja2VkXT1cImVuUHJvY2Vzb1wiPlxyXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1jb2cgcGktc3BpblwiIHN0eWxlPVwiZm9udC1zaXplOiA1MHB4XCI+PC9pPlxyXG48L3AtYmxvY2tVST5cclxuXHJcbjxkaXYgY2xhc3M9XCJjYXJkXCIgKm5nSWY9XCIhZW5Qcm9jZXNvXCI+XHJcbiAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtYi00IGdhcC0yXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi5jcmVhdGVcIiBwQnV0dG9uIHBSaXBwbGUgW2xhYmVsXT1cImJ0bi5jcmVhdGUubGFiZWxcIiBbaWNvbl09XCJidG4uY3JlYXRlLmljb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIiAoY2xpY2spPVwicmVkaXJlY3QoJ2NyZWF0ZScpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10b29sYmFyPlxyXG4gICAgPHAtdGFibGUgI2R0IFtjb2x1bW5zXT1cImNydWRDb25maWcudGFibGVyby5jb2x1bW5zXCIgW3ZhbHVlXT1cImRhdGFcIiBbcm93SG92ZXJdPVwidHJ1ZVwiIFtyb3dzXT1cIjEwXCIgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImNydWRDb25maWcudGFibGVybz8uZmlsdGVycyB8fCBbXVwiIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzc1cmVtJ31cIlxyXG4gICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJSZWdpc3RybyB7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfVwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibS0wXCI+e3tjcnVkQ29uZmlnLnRhYmxlcm8/LmxhYmVsIHx8IGlkRW50aWRhZH19PC9oNT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJ1c2Nhci4uLlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5BY2Npw7NuPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW25nU3dpdGNoXT1cImNvbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj57e3Jvd0RhdGFbY29sLmNvbF19fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ1N3aXRjaENhc2U9XCInZGF0ZTp5eXl5LW1tLWRkJ1wiPnt7cm93RGF0YVtjb2wuY29sXSB8IGRhdGU6ICd5eXl5LU1NLWRkJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeTpVU0QnXCI+e3tyb3dEYXRhW2NvbC5jb2xdIHwgY3VycmVuY3k6ICdVU0QnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gaWNvbj1cInBpIHBpLWFsaWduLWp1c3RpZnlcIiBbbW9kZWxdPVwiaXRlbXNcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob25Ecm9wZG93bkNsaWNrKT1cIml0ZW1TZWxlY3RlZCA9IHJvd0RhdGFcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFibGU+XHJcbjwvZGl2PiJdfQ==
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVyby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXJvL3RhYmxlcm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVyby90YWJsZXJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFJbEYsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBVXJDLE1BQU0sT0FBTyxnQkFBZ0I7SUFvQjNCLFlBQ1UsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFdBQXdCO1FBSHhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF0QnpCLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBSXJCLG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFJL0QsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQyxTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLFFBQUcs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aUJBQ3ZDO2dMQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNpQyxNQUFNO3NCQUE3QyxXQUFXO3VCQUFDLHlCQUF5QjtnQkFDRCxZQUFZO3NCQUFoRCxXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpZ1RhYmxlcm8sIENydWRDb25maWcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2NydWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcbmltcG9ydCB7IExvYWRpbmcsIFNmQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZi1jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGVwLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2YtY3J1ZHRhYmxlcm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZXJvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZXJvLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVyb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIG9wY2lvbmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGlkRW50aWRhZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWRLYXRpb3M6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGVudmlyb25tZW50OiBhbnk7XHJcbiAgQElucHV0KCkgdXNlcjogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFFeHQ6IGFueTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3RBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQEhvc3RCaW5kaW5nKFwic3R5bGUuLS1zZWNvbmRhcnktY29sb3JcIikgY29sb3IyITogc3RyaW5nO1xyXG4gIEBIb3N0QmluZGluZyhcInN0eWxlLi0tYnV0dG9uLWNvbG9yXCIpIGNvbG9yQnV0dG9ucyE6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcbiAgcHVibGljIGNydWRDb25maWc6IENydWRDb25maWcgPSBuZXcgQ3J1ZENvbmZpZygpO1xyXG4gIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBpbml0aWFsRGF0YTogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYnRuOiB7IGNyZWF0ZTogYW55LCByZWFkOiBhbnksIHVwZGF0ZTogYW55LCBkZWxldGU6IGFueSB9ID0geyBjcmVhdGU6IHVuZGVmaW5lZCwgcmVhZDogdW5kZWZpbmVkLCB1cGRhdGU6IHVuZGVmaW5lZCwgZGVsZXRlOiB1bmRlZmluZWQgfVxyXG4gIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IGFueTtcclxuICBwcml2YXRlIGxvYWRpbmchOkxvYWRpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBzZkNydWRTZXJ2aWNlOiBTZkNydWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGVwU2VydmljZTogU3RlcFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHtpblByb2dyZXNzOiBmYWxzZSwgdGFyZ2V0OiB1bmRlZmluZWR9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudFxyXG4gICAgdGhpcy5sb2FkQ29uZmlnQ3J1ZCgpXHJcbiAgfVxyXG5cclxuICBsb2FkQ29uZmlnQ3J1ZCgpIHtcclxuICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZztcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2V0Q3J1ZEJ5RW50aWRhZCh0aGlzLmlkS2F0aW9zLCB0aGlzLmlkRW50aWRhZClcclxuICAgICAgLnRoZW4oKHJlczogQ3J1ZENvbmZpZyk9PiB7XHJcbiAgICAgICAgdGhpcy5jcnVkQ29uZmlnID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZ2V0SW5mb1RhYmxlcm8oKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2ZDcnVkU2VydmljZS5mb3JtTG9hZGluZyA9IHRoaXMubG9hZGluZztcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gICAgY3VzdG9taXplQ29tcGFueSh1aUVzcXVlbWFzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZkNydWRTZXJ2aWNlLmNvbmZpZ0VtcHJlc2EgPSB1aUVzcXVlbWFzLmZpbmQodWkgPT4gdWkuZ2VuZXJhbCk/LmdlbmVyYWxcclxuICAgIGlmKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhKXtcclxuICAgICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycz8uc2Vjb25kYXJ5KSB0aGlzLmNvbG9yMiA9IHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycy5zZWNvbmRhcnlcclxuICAgICAgaWYgKHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycz8uYnV0dG9uKSB0aGlzLmNvbG9yQnV0dG9ucyA9IHRoaXMuc2ZDcnVkU2VydmljZS5jb25maWdFbXByZXNhLmNvbG9ycy5zZWNvbmRhcnlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29sb3IyKSB0aGlzLmNvbG9yMiA9IHRoaXMuY29sb3JCdXR0b25zID0gXCJibHVlXCI7XHJcbiAgfVxyXG4vLyAgIHN1Ym1pdChpbmRleDogbnVtYmVyKSB7XHJcbi8vICAgICBsZXQgcmVnaXN0cm8gPSB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8oaW5kZXgpXHJcbi8vICAgICBsZXQgb3BlcmF0aW9uID0gcmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLnR5cGUuc3RhcnRzV2l0aCh0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0VHJ4KDApKSkhXHJcbi8vICAgICBjb25zb2xlLmxvZyhvcGVyYXRpb24pXHJcbi8vICAgICBsZXQgdXJsID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFVSTChvcGVyYXRpb24sIGluZGV4KVxyXG4vLyAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3Qob3BlcmF0aW9uLm1ldGhvZCwgdXJsLCB0aGlzLnNmQ3J1ZFNlcnZpY2UuZ2V0RGF0YShpbmRleCkpXHJcbi8vICAgICAgIC50aGVuKChyZXMpID0+IHtcclxuLy8gICAgICAgICBpZiAocmVzID09PSBudWxsKSByZXMgPSB7fVxyXG4vLyAgICAgICAgIHJlcyA9IHRoaXMuc2ZDcnVkU2VydmljZS5hcHBseU9iamVjdEtleXMocmVzLCBvcGVyYXRpb24ua2V5c0VzcXVlbWEgfHwgW10sIHJlZ2lzdHJvKVxyXG4vLyAgICAgICAgIGNvbnNvbGUubG9nKHJlcylcclxuLy8gICAgICAgICB0aGlzLnNmQ3J1ZFNlcnZpY2Uuc2V0QW5zd2VycyhyZXMsIDApXHJcblxyXG4vLyAgICAgICAgIGlmIChvcGVyYXRpb24uY2hhbmdlVHJ4KSBvcGVyYXRpb24uY2hhbmdlVHJ4LmZvckVhY2goeCA9PiAgdGhpcy5zZkNydWRTZXJ2aWNlLnNldFRyeCh4LnRyeCwgeC5pbmRleCkpXHJcbi8vICAgICAgICAgLy8gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdlbmVyYXRlTWVzc2FnZSh0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJzdWNjZXNzXCIsIHVuZGVmaW5lZCwgXCJJbmZvcm1hY2nDs24gc3ViaWRhIGNvcnJlY3RhbWVudGVcIiwgb3BlcmF0aW9uLmFuc3dlckNoZWNraW5nKSwgcmVzLCBvcGVyYXRpb24uYW5zd2VyQ2hlY2tpbmcpXHJcbi8vICAgICAgICAgLy8gcmV0dXJuIHJlcztcclxuLy8gICAgICAgfSlcclxuLy8gICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbi8vICAgICAgICAgLy8gY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldFJlZ2lzdHJvKHRoaXMuaW5kZXhDcnVkKS5vcGVyYXRpb25zLmZpbmQob3AgPT4gb3AudHlwZS5zdGFydHNXaXRoKHRoaXMuc2ZDcnVkU2VydmljZS5nZXRUcngoaW5kZXgpKSkhXHJcbi8vICAgICAgICAgLy8gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdlbmVyYXRlTWVzc2FnZSh0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2VuRGVmYXVsdE1lc3NhZ2UoXCJlcnJvclwiLCBcIkVycm9yIG5vIGNvbnRyb2xhZG9cIiwgXCJQb3IgZmF2b3IgY29tdW5pY2Fyc2UgY29uIGVsIGFkbWluXCIsb3BlcmF0aW9uLmVycm9yQ2hlY2tpbmcpLCBlcnIuZXJyb3IsIG9wZXJhdGlvbi5lcnJvckNoZWNraW5nKVxyXG4vLyAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbi8vICAgICAgIH0pXHJcbi8vIH1cclxuXHJcbiAgZ2V0SW5mb1RhYmxlcm8oKSB7XHJcbiAgICAvL3RoaXMuc3VibWl0KDApXHJcbiAgICB0aGlzLmRhdGEgPSBbXVxyXG4gICAgdGhpcy5pbml0aWFsRGF0YSA9IFtdXHJcbiAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLnNmQ3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmc7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5hcGx5S2V5cyh0aGlzLmNydWRDb25maWcudGFibGVybyEua2V5cywgYCR7dGhpcy5nZW5lcmFsU2VydmljZS5qc29uQ29uZmlnW3RoaXMuY3J1ZENvbmZpZy50YWJsZXJvIS5zZXJ2ZXJdfSR7dGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8hLmVuZHBvaW50fWAsIHRoaXMuZGF0YUV4dClcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3QodGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8hLm1ldGhvZCwgdXJsLCB0aGlzLmRhdGFFeHQpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBhdXg7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcykpIGF1eCA9IHJlcy5kYXRhOyBlbHNlIGF1eCA9IHJlcztcclxuICAgICAgICB0aGlzLmluaXRpYWxEYXRhID0gXy5jbG9uZURlZXAoYXV4KTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShhdXgpO1xyXG4gICAgICAgIHRoaXMubG9hZE9wdGlvbnMoKTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZkNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBkYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgbmV3SXRlbTogYW55ID0ge307XHJcbiAgICAgIHRoaXMuY3J1ZENvbmZpZy50YWJsZXJvIS5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICBuZXdJdGVtW2NvbC5jb2xdID0gdGhpcy5nZXRWYWx1ZShjb2wuY29sLCBpdGVtKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmRhdGEucHVzaChuZXdJdGVtKVxyXG4gICAgfSlcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSlcclxuICB9XHJcbiAgZ2V0VmFsdWUocGF0aDogc3RyaW5nLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoXCIuXCIpKSByZXR1cm4ganNvbnBhdGgucXVlcnkoaXRlbSwgcGF0aClbMF1cclxuICAgIHJldHVybiBpdGVtW3BhdGhdXHJcbiAgfVxyXG5cclxuICBleHRlcm5hbExpbmtBY3Rpb24oKXtcclxuICAgIHRoaXMub3BjaW9uZXMuZmlsdGVyKChvcGM6IGFueSkgPT4gb3BjLnZhbG9yLmFjdGlvbikuZm9yRWFjaChvcGMgPT4gdGhpcy5leGVjQWN0aW9uKG9wYy52YWxvcikpXHJcbiAgfVxyXG5cclxuICBsb2FkT3B0aW9ucygpIHtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuYnRuLmNyZWF0ZSA9IHRoaXMub3BjaW9uZXMuZmluZCh4ID0+IHgubGFiZWwgPT0gJ0NyZWFyJyk7XHJcbiAgICB0aGlzLm9wY2lvbmVzLmZpbHRlcigob3BjOiBhbnkpID0+IG9wYy52YWxvci5hY3Rpb24pLmZvckVhY2gob3BjID0+IHtcclxuICAgICAgdGhpcy5pdGVtcy5wdXNoKHsgbGFiZWw6IG9wYy5sYWJlbCwgaWNvbjogb3BjLmljb24sIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhlY0FjdGlvbihvcGMudmFsb3IpIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVkaXJlY3QoYWNjaW9uOiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UucmVzZXQoKTtcclxuICAgIHRoaXMuc2ZDcnVkU2VydmljZS5yZXNldCgpO1xyXG4gICAgc3dpdGNoIChhY2Npb24pIHtcclxuICAgICAgY2FzZSAnY3JlYXRlJzpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYnRuLmNyZWF0ZT8udmFsb3I/LnJlZGlyZWN0IHx8ICcnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVhZCc6XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmFwbHlLZXlzKHRoaXMuY3J1ZENvbmZpZy50YWJsZXJvIS5rZXlzLCB0aGlzLmJ0bi5yZWFkLnZhbG9yLnJlZGlyZWN0LCBkYXRhKSk7XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAndXBkYXRlJzpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYXBseUtleXModGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8hLmtleXMsIHRoaXMuYnRuLnVwZGF0ZS52YWxvci5yZWRpcmVjdCwgZGF0YSkpO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmFwbHlLZXlzKHRoaXMuY3J1ZENvbmZpZy50YWJsZXJvIS5rZXlzLCB0aGlzLmJ0bi5kZWxldGUudmFsb3IucmVkaXJlY3QsIGRhdGEpKTtcclxuICAgICAgICBicmVha1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcGx5S2V5cyhrZXlzOiB7IGtleTogc3RyaW5nLCBzY29wZT86IHN0cmluZyB9W10sIGVuZHBvaW50OiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcclxuICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGtleS5rZXkpIHtcclxuICAgICAgICBjYXNlICdAbmRvYyc6XHJcbiAgICAgICAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2Uoa2V5LmtleSwgdGhpcy51c2VyPy5Vc3VhcmlvU2lzdGVtYT8uTkRPQyB8fCAnJylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0B0ZG9jJzpcclxuICAgICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZShrZXkua2V5LCB0aGlzLnVzZXI/LlVzdWFyaW9TaXN0ZW1hPy5URE9DIHx8ICcnKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQGlkS2F0aW9zJzpcclxuICAgICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZShrZXkua2V5LCB0aGlzLmlkS2F0aW9zKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChlbmRwb2ludC5pbmNsdWRlcyhrZXkua2V5KSAmJiBkYXRhKSBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2Uoa2V5LmtleSwganNvbnBhdGgucXVlcnkoZGF0YSwga2V5Py5zY29wZSB8fCAnJylbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgZXhlY0FjdGlvbihwYXJhbXM6IGFueSkge1xyXG4gICAgc3dpdGNoIChwYXJhbXMuYWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3JlZGlyZWN0JzpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYXBseUtleXModGhpcy5jcnVkQ29uZmlnLnRhYmxlcm8hLmtleXMsIHBhcmFtcy5saW5rLCB0aGlzLml0ZW1TZWxlY3RlZCkpLnRoZW4oKCk9PntcclxuICAgICAgICAgIGlmIChwYXJhbXMucmVsb2FkKVxyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfVxyXG4gICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdEFjdGlvbi5lbWl0KHsgZGF0YTogXy5jbG9uZURlZXAodGhpcy5pdGVtU2VsZWN0ZWQpLCBwYXJhbXMgfSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1iLTQgZ2FwLTJcIiAqbmdJZj1cImJ0bi5jcmVhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBbbGFiZWxdPVwiYnRuLmNyZWF0ZS5sYWJlbFwiIFtpY29uXT1cImJ0bi5jcmVhdGUuaWNvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgbXItMlwiIChjbGljayk9XCJyZWRpcmVjdCgnY3JlYXRlJylcIj48L2J1dHRvbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRvb2xiYXI+XHJcbiAgICA8cC10YWJsZSAqbmdJZj1cImNydWRDb25maWc/LnRhYmxlcm8/LmNvbHVtbnNcIiAjZHQgW2NvbHVtbnNdPVwiY3J1ZENvbmZpZy50YWJsZXJvLmNvbHVtbnNcIiBbdmFsdWVdPVwiZGF0YVwiIFtyb3dIb3Zlcl09XCJ0cnVlXCIgW3Jvd3NdPVwiMTBcIiBbcGFnaW5hdG9yXT1cInRydWVcIlxyXG4gICAgICAgIFt0b3RhbFJlY29yZHNdPVwiZGF0YS5sZW5ndGhcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImNydWRDb25maWcudGFibGVybz8uZmlsdGVycyB8fCBbXVwiIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzc1cmVtJ31cIlxyXG4gICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJSZWdpc3RybyB7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfVwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibS0wXCI+e3tjcnVkQ29uZmlnLnRhYmxlcm8/LmxhYmVsIHx8IGlkRW50aWRhZH19PC9oNT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJ1c2Nhci4uLlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5BY2Npw7NuPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LWluZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPnt7cm93RGF0YVtjb2wuY29sXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nU3dpdGNoQ2FzZT1cIidkYXRlOnl5eXktbW0tZGQnXCI+e3tyb3dEYXRhW2NvbC5jb2xdIHwgZGF0ZTogJ3l5eXktTU0tZGQnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5OlVTRCdcIj57e3Jvd0RhdGFbY29sLmNvbF0gfCBjdXJyZW5jeTogJ1VTRCd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8cC1zcGxpdEJ1dHRvbiAqbmdJZj1cIml0ZW1zLmxlbmd0aCA+IDFcIiBpY29uPVwicGkgcGktYWxpZ24tanVzdGlmeVwiIFttb2RlbF09XCJpdGVtc1wiIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uRHJvcGRvd25DbGljayk9XCJpdGVtU2VsZWN0ZWQgPSByb3dEYXRhXCI+PC9wLXNwbGl0QnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtcy5sZW5ndGggPD0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiICBwQnV0dG9uIHBSaXBwbGUgW2ljb25dPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbVNlbGVjdGVkID0gaW5pdGlhbERhdGFbaW5kZXhdOyBpdGVtLmNvbW1hbmQoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG48L2Rpdj5cclxuIl19