chrv-components 1.3.2 → 1.3.3

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.
@@ -1,35 +1,53 @@
1
1
  import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { NgIf, NgClass } from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
3
  import { ChrFormComponent } from '../chr-form/chr-form.component';
4
+ import { MatIconModule } from '@angular/material/icon';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "ngx-pagination";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/material/icon";
6
9
  export class ChrPaginatorComponent {
7
- constructor(service) {
10
+ get page() {
11
+ return this._page;
12
+ }
13
+ set page(value) {
14
+ this._page = value;
15
+ this.pageChange.emit(value);
16
+ this.changeDetector.markForCheck();
17
+ this.changeDetector.detectChanges();
18
+ }
19
+ constructor(service, changeDetector) {
8
20
  this.service = service;
9
- this.currentPage = 1;
10
- this.page = 1;
21
+ this.changeDetector = changeDetector;
22
+ this._page = -5;
11
23
  this.pageChange = new EventEmitter();
12
24
  this.pageSize = 50;
13
25
  this.pageSizeChange = new EventEmitter();
14
26
  this.previous = () => {
15
- this.currentPage--;
16
- this.emit();
27
+ if (this.isFirstPage())
28
+ return;
29
+ this.page--;
30
+ this.pageChange.emit(this.page);
31
+ //this.emit();
17
32
  };
18
33
  this.next = () => {
19
- this.currentPage++;
20
- this.emit();
34
+ if (this.isLastPage())
35
+ return;
36
+ this.page += 1;
37
+ this.pageChange.emit(this.page);
38
+ //this.emit();
21
39
  };
22
40
  this.setPage = (page) => {
23
41
  if (page < 1 || page > this.lastPage())
24
42
  return;
25
- this.currentPage = page;
43
+ this.page = page;
26
44
  this.emit();
27
45
  };
28
46
  this.setPageEventHandler = (event) => {
29
47
  return this.setPage(event.target.value);
30
48
  };
31
49
  this.isFirstPage = () => {
32
- return this.currentPage == 1;
50
+ return this.page == 1;
33
51
  };
34
52
  this.setPageSize = (pageSize) => {
35
53
  this.setPage(1);
@@ -43,7 +61,7 @@ export class ChrPaginatorComponent {
43
61
  this.isLastPage = () => {
44
62
  if (!this.instance?.totalItems)
45
63
  return false;
46
- return (this.currentPage ==
64
+ return (this.page >=
47
65
  Math.ceil(this.instance.totalItems / this.instance.itemsPerPage));
48
66
  };
49
67
  // public pageSize = () => this.instance.itemsPerPage;
@@ -52,7 +70,7 @@ export class ChrPaginatorComponent {
52
70
  : 1;
53
71
  this.emit = (page = undefined) => {
54
72
  if (!page)
55
- this.pageChange.emit(this.currentPage);
73
+ this.pageChange.emit(this.page);
56
74
  else
57
75
  this.pageChange.emit(page);
58
76
  };
@@ -62,13 +80,13 @@ export class ChrPaginatorComponent {
62
80
  this.instance = this.service.getInstance('chr_data-table');
63
81
  }
64
82
  ngOnInit() { }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ChrPaginatorComponent, deps: [{ token: i1.PaginationService }], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: ChrPaginatorComponent, isStandalone: true, selector: "app-chr-paginator", inputs: { page: "page", pageSize: "pageSize" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9l\u00E9ments par page:\n <div class=\"w-20 ml-1\">\n <app-chr-form (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n }]\n }]\">\n </app-chr-form>\n </div>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center\">\n <button type=\"button\" *ngIf=\"!isFirstPage()\" (click)=\"previous()\"\n class=\"w-fit cursor-pointer\">Pr\u00E9c\u00E9dent</button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n <div class=\"w-20 mr-1\">\n <app-chr-form (keyup.enter)=\"setPageEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'currentPage',\n value: currentPage,\n width: 'row',\n icon: 'check',\n iconCallback: setPage,\n }]\n }]\">\n </app-chr-form>\n </div> / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : '' \" (click)=\"!isLastPage() && next()\"\n class=\"w-fit\">Suivant</button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "component", type: ChrFormComponent, selector: "app-chr-form", inputs: ["sections", "valid", "model", "disabled"], outputs: ["validChange", "modelChange", "valuesChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
83
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ChrPaginatorComponent, deps: [{ token: i1.PaginationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: ChrPaginatorComponent, isStandalone: true, selector: "app-chr-paginator", inputs: { page: "page", pageSize: "pageSize" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9l\u00E9ments par page:\n <div class=\"w-20 ml-1\">\n <app-chr-form (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n }]\n }]\">\n </app-chr-form>\n </div>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>keyboard_double_arrow_left</mat-icon></button>\n\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>keyboard_double_arrow_right</mat-icon></button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "component", type: ChrFormComponent, selector: "app-chr-form", inputs: ["sections", "valid", "model", "disabled"], outputs: ["validChange", "modelChange", "valuesChange", "formChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
67
85
  }
68
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: ChrPaginatorComponent, decorators: [{
69
87
  type: Component,
70
- args: [{ selector: 'app-chr-paginator', standalone: true, imports: [ChrFormComponent, NgIf, NgClass], template: "<div class=\"flex flex-row justify-between\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9l\u00E9ments par page:\n <div class=\"w-20 ml-1\">\n <app-chr-form (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n }]\n }]\">\n </app-chr-form>\n </div>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center\">\n <button type=\"button\" *ngIf=\"!isFirstPage()\" (click)=\"previous()\"\n class=\"w-fit cursor-pointer\">Pr\u00E9c\u00E9dent</button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n <div class=\"w-20 mr-1\">\n <app-chr-form (keyup.enter)=\"setPageEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'currentPage',\n value: currentPage,\n width: 'row',\n icon: 'check',\n iconCallback: setPage,\n }]\n }]\">\n </app-chr-form>\n </div> / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : '' \" (click)=\"!isLastPage() && next()\"\n class=\"w-fit\">Suivant</button>\n </div>\n</div>" }]
71
- }], ctorParameters: () => [{ type: i1.PaginationService }], propDecorators: { page: [{
88
+ args: [{ selector: 'app-chr-paginator', standalone: true, imports: [ChrFormComponent, CommonModule, MatIconModule], template: "<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n \u00C9l\u00E9ments par page:\n <div class=\"w-20 ml-1\">\n <app-chr-form (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n }]\n }]\">\n </app-chr-form>\n </div>\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>keyboard_double_arrow_left</mat-icon></button>\n\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>keyboard_double_arrow_right</mat-icon></button>\n </div>\n</div>" }]
89
+ }], ctorParameters: () => [{ type: i1.PaginationService }, { type: i0.ChangeDetectorRef }], propDecorators: { page: [{
72
90
  type: Input
73
91
  }], pageChange: [{
74
92
  type: Output
@@ -77,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
77
95
  }], pageSizeChange: [{
78
96
  type: Output
79
97
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLXBhZ2luYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItcGFnaW5hdG9yL2Noci1wYWdpbmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLXBhZ2luYXRvci9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBU2xFLE1BQU0sT0FBTyxxQkFBcUI7SUFVaEMsWUFBbUIsT0FBMEI7UUFBMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFUdEMsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFFdEIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNoQixlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkQsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUNyQixtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBYzdELGFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVLLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVLLFlBQU8sR0FBRyxDQUFD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RXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkluc3RhbmNlLCBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJ25neC1wYWdpbmF0aW9uJztcbmltcG9ydCB7IE5nSWYsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hyRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Noci1mb3JtL2Noci1mb3JtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaHItcGFnaW5hdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Noci1wYWdpbmF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDaHJGb3JtQ29tcG9uZW50LCBOZ0lmLCBOZ0NsYXNzXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyUGFnaW5hdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgpIHBhZ2U6IG51bWJlciA9IDE7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gNTA7XG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGluc3RhbmNlPzogUGFnaW5hdGlvbkluc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSkge31cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlcnZpY2UsIHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZSgnY2hyX2RhdGEtdGFibGUnKSk7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZShcbiAgICAgICdjaHJfZGF0YS10YWJsZSdcbiAgICApIGFzIFBhZ2luYXRpb25JbnN0YW5jZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwdWJsaWMgcHJldmlvdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50UGFnZS0tO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9O1xuXG4gIHB1YmxpYyBuZXh0ID0gKCkgPT4ge1xuICAgIHRoaXMuY3VycmVudFBhZ2UrKztcbiAgICB0aGlzLmVtaXQoKTtcbiAgfTtcblxuICBwdWJsaWMgc2V0UGFnZSA9IChwYWdlOiBudW1iZXIpID0+IHtcbiAgICBpZiAocGFnZSA8IDEgfHwgcGFnZSA+IHRoaXMubGFzdFBhZ2UoKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9O1xuXG4gIHB1YmxpYyBzZXRQYWdlRXZlbnRIYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRQYWdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIGlzRmlyc3RQYWdlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09IDE7XG4gIH07XG5cbiAgcHVibGljIHNldFBhZ2VTaXplID0gKHBhZ2VTaXplOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnNldFBhZ2UoMSk7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHRoaXMuaW5zdGFuY2UuaXRlbXNQZXJQYWdlID0gcGFnZVNpemU7XG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KHBhZ2VTaXplKTtcbiAgfTtcblxuICBwdWJsaWMgc2V0UGFnZVNpemVFdmVudEhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFBhZ2VTaXplKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIGlzTGFzdFBhZ2UgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmluc3RhbmNlPy50b3RhbEl0ZW1zKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPT1cbiAgICAgIE1hdGguY2VpbCh0aGlzLmluc3RhbmNlLnRvdGFsSXRlbXMgLyB0aGlzLmluc3RhbmNlLml0ZW1zUGVyUGFnZSlcbiAgICApO1xuICB9O1xuXG4gIC8vIHB1YmxpYyBwYWdlU2l6ZSA9ICgpID0+IHRoaXMuaW5zdGFuY2UuaXRlbXNQZXJQYWdlO1xuXG4gIHB1YmxpYyBsYXN0UGFnZSA9ICgpID0+XG4gICAgdGhpcy5pbnN0YW5jZT8udG90YWxJdGVtc1xuICAgICAgPyBNYXRoLmNlaWwodGhpcy5pbnN0YW5jZS50b3RhbEl0ZW1zIC8gdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UpXG4gICAgICA6IDE7XG5cbiAgcHJpdmF0ZSBlbWl0ID0gKHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghcGFnZSkgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgZWxzZSB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChwYWdlKTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktc3RhcnQgcHktMiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgw4lsw6ltZW50cyBwYXIgcGFnZTpcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjAgbWwtMVwiPlxuICAgICAgICAgICAgPGFwcC1jaHItZm9ybSAoa2V5dXAuZW50ZXIpPVwic2V0UGFnZVNpemVFdmVudEhhbmRsZXIoJGV2ZW50KVwiIFtzZWN0aW9uc109XCJbXG4gICAgICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGFnZVNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhZ2VTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICdyb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2NoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25DYWxsYmFjazogc2V0UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgfV1cIj5cbiAgICAgICAgICAgIDwvYXBwLWNoci1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBweS0yIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFpc0ZpcnN0UGFnZSgpXCIgKGNsaWNrKT1cInByZXZpb3VzKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZpdCBjdXJzb3ItcG9pbnRlclwiPlByw6ljw6lkZW50PC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBteC0yIHctZml0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yMCBtci0xXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jaHItZm9ybSAoa2V5dXAuZW50ZXIpPVwic2V0UGFnZUV2ZW50SGFuZGxlcigkZXZlbnQpXCIgW3NlY3Rpb25zXT1cIltcbiAgICAgICAgICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2N1cnJlbnRQYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3VycmVudFBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICdyb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNhbGxiYWNrOiBzZXRQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfV1cIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jaHItZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PiAvIHt7bGFzdFBhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCIhaXNMYXN0UGFnZSgpID8gJ2N1cnNvci1wb2ludGVyJyA6ICcnIFwiIChjbGljayk9XCIhaXNMYXN0UGFnZSgpICYmIG5leHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctZml0XCI+U3VpdmFudDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLXBhZ2luYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItcGFnaW5hdG9yL2Noci1wYWdpbmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLXBhZ2luYXRvci9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFTdkQsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFRRCxZQUNTLE9BQTBCLEVBQ3pCLGNBQWlDO1FBRGxDLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQXBCbkMsVUFBSyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBWWpCLGVBQVUs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QyxDQUFDO0lBbkVDLENBQUM7SUFFSixxQkFBcUI7UUFDbkIsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQ3RDLGdCQUFnQixDQUNLLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVEsS0FBVSxDQUFDOzhHQS9CUixxQkFBcUI7a0dBQXJCLHFCQUFxQixzTUN2QmxDLHUvQ0E4Qk0sMEREVE0sZ0JBQWdCLG1MQUFFLFlBQVksNEhBQUUsYUFBYTs7MkZBRTVDLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztzSEFLcEQsSUFBSTtzQkFEUCxLQUFLO2dCQVdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uSW5zdGFuY2UsIFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnbmd4LXBhZ2luYXRpb24nO1xuaW1wb3J0IHsgTmdDbGFzcywgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENockZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jaHItZm9ybS9jaHItZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hyLXBhZ2luYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaHItcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hyLXBhZ2luYXRvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ2hyRm9ybUNvbXBvbmVudCwgQ29tbW9uTW9kdWxlLCBNYXRJY29uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyUGFnaW5hdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyID0gLTU7XG4gIEBJbnB1dCgpXG4gIGdldCBwYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICB9XG4gIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gNTA7XG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgaW5zdGFuY2U/OiBQYWdpbmF0aW9uSW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlcnZpY2UsIHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZSgnY2hyX2RhdGEtdGFibGUnKSk7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuc2VydmljZS5nZXRJbnN0YW5jZShcbiAgICAgICdjaHJfZGF0YS10YWJsZSdcbiAgICApIGFzIFBhZ2luYXRpb25JbnN0YW5jZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwdWJsaWMgcHJldmlvdXMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UoKSkgcmV0dXJuO1xuICAgIHRoaXMucGFnZS0tO1xuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMucGFnZSk7XG4gICAgLy90aGlzLmVtaXQoKTtcbiAgfTtcblxuICBwdWJsaWMgbmV4dCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0xhc3RQYWdlKCkpIHJldHVybjtcbiAgICB0aGlzLnBhZ2UgKz0gMTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UpO1xuICAgIC8vdGhpcy5lbWl0KCk7XG4gIH07XG5cbiAgcHVibGljIHNldFBhZ2UgPSAocGFnZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLmxhc3RQYWdlKCkpIHJldHVybjtcbiAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9O1xuXG4gIHB1YmxpYyBzZXRQYWdlRXZlbnRIYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRQYWdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIGlzRmlyc3RQYWdlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2UgPT0gMTtcbiAgfTtcblxuICBwdWJsaWMgc2V0UGFnZVNpemUgPSAocGFnZVNpemU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuc2V0UGFnZSgxKTtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkgdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLmVtaXQocGFnZVNpemUpO1xuICB9O1xuXG4gIHB1YmxpYyBzZXRQYWdlU2l6ZUV2ZW50SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0UGFnZVNpemUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfTtcblxuICBwdWJsaWMgaXNMYXN0UGFnZSA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuaW5zdGFuY2U/LnRvdGFsSXRlbXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wYWdlID49XG4gICAgICBNYXRoLmNlaWwodGhpcy5pbnN0YW5jZS50b3RhbEl0ZW1zIC8gdGhpcy5pbnN0YW5jZS5pdGVtc1BlclBhZ2UpXG4gICAgKTtcbiAgfTtcblxuICAvLyBwdWJsaWMgcGFnZVNpemUgPSAoKSA9PiB0aGlzLmluc3RhbmNlLml0ZW1zUGVyUGFnZTtcblxuICBwdWJsaWMgbGFzdFBhZ2UgPSAoKSA9PlxuICAgIHRoaXMuaW5zdGFuY2U/LnRvdGFsSXRlbXNcbiAgICAgID8gTWF0aC5jZWlsKHRoaXMuaW5zdGFuY2UudG90YWxJdGVtcyAvIHRoaXMuaW5zdGFuY2UuaXRlbXNQZXJQYWdlKVxuICAgICAgOiAxO1xuXG4gIHByaXZhdGUgZW1pdCA9IChwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIXBhZ2UpIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMucGFnZSk7XG4gICAgZWxzZSB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChwYWdlKTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBkYXJrOnRleHQtZ3JheS00MDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LXN0YXJ0IHB5LTIgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIMOJbMOpbWVudHMgcGFyIHBhZ2U6XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIwIG1sLTFcIj5cbiAgICAgICAgICAgIDxhcHAtY2hyLWZvcm0gKGtleXVwLmVudGVyKT1cInNldFBhZ2VTaXplRXZlbnRIYW5kbGVyKCRldmVudClcIiBbc2VjdGlvbnNdPVwiW1xuICAgICAgICAgICAgICAgIHsgXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BhZ2VTaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAncm93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2FsbGJhY2s6IHNldFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgIH1dXCI+XG4gICAgICAgICAgICA8L2FwcC1jaHItZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgcHktMiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIgXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJwcmV2aW91cygpXCIgW25nQ2xhc3NdPVwiaXNGaXJzdFBhZ2UoKSA/ICdjdXJzb3Itbm90LWFsbG93ZWQnOidjdXJzb3ItcG9pbnRlcidcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZpdCBmbGV4IGp1c3RpZnktY2VudGVyIGFsaWduLW1pZGRsZSBpdGVtcy1jZW50ZXJcIj48bWF0LWljb24+a2V5Ym9hcmRfZG91YmxlX2Fycm93X2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBteC0yIHctZml0XCI+XG4gICAgICAgICAgICB7e3BhZ2V9fSAvIHt7bGFzdFBhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCIhaXNMYXN0UGFnZSgpID8gJ2N1cnNvci1wb2ludGVyJyA6ICdjdXJzb3Itbm90LWFsbG93ZWQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCIhaXNMYXN0UGFnZSgpICYmIG5leHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctZml0IGZsZXgganVzdGlmeS1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW1zLWNlbnRlclwiPjxtYXQtaWNvbj5rZXlib2FyZF9kb3VibGVfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19