ngx-sumax-erp-components 1.5.0 → 1.6.0-beta.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.mjs +20 -0
- package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-config.mjs +14 -14
- package/esm2022/lib/sc-ag-grid/sc-ag-grid-paginable/models-ag-grid-paginable.mjs +15 -0
- package/esm2022/lib/sc-ag-grid/sc-ag-grid-paginable/sc-ag-grid-paginable.component.mjs +336 -0
- package/esm2022/lib/sc-ag-grid/sc-ag-grid.module.mjs +35 -32
- package/esm2022/lib/sumax-dashboard/cards/smx-dash-card-metric-list/smx-dash-card-metric-list.component.mjs +7 -3
- package/esm2022/lib/sumax-dashboard/smx-dash-grid/smx-dash-grid.component.mjs +2 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-sumax-erp-components.mjs +376 -15
- package/fesm2022/ngx-sumax-erp-components.mjs.map +1 -1
- package/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.d.ts +10 -0
- package/lib/sc-ag-grid/cell-render/sc-cell-render-config.d.ts +6 -6
- package/lib/sc-ag-grid/sc-ag-grid-paginable/models-ag-grid-paginable.d.ts +27 -0
- package/lib/sc-ag-grid/sc-ag-grid-paginable/sc-ag-grid-paginable.component.d.ts +151 -0
- package/lib/sc-ag-grid/sc-ag-grid.module.d.ts +23 -23
- package/lib/sumax-dashboard/cards/smx-dash-card-metric-list/smx-dash-card-metric-list.component.d.ts +3 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { NgModule } from "@angular/core";
|
|
3
|
+
import { MatMenuModule } from "@angular/material/menu";
|
|
4
|
+
import { MatTooltipModule } from "@angular/material/tooltip";
|
|
5
|
+
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from "./sc-cell-render-button.component";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ScCellRendererButtonModule {
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, declarations: [ScCellRendererButtonComponent, ScMenuPanelComponent], imports: [CommonModule, MatMenuModule, MatTooltipModule], exports: [ScCellRendererButtonComponent, ScMenuPanelComponent] }); }
|
|
10
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, imports: [CommonModule, MatMenuModule, MatTooltipModule] }); }
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
declarations: [ScCellRendererButtonComponent, ScMenuPanelComponent],
|
|
16
|
+
imports: [CommonModule, MatMenuModule, MatTooltipModule],
|
|
17
|
+
exports: [ScCellRendererButtonComponent, ScMenuPanelComponent],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2VsbC1yZW5kZXItYnV0dG9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBT3hHLE1BQU0sT0FBTywwQkFBMEI7K0dBQTFCLDBCQUEwQjtnSEFBMUIsMEJBQTBCLGlCQUp0Qiw2QkFBNkIsRUFBRSxvQkFBb0IsYUFDeEQsWUFBWSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsYUFDN0MsNkJBQTZCLEVBQUUsb0JBQW9CO2dIQUVsRCwwQkFBMEIsWUFIM0IsWUFBWSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0I7OzRGQUc1QywwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsb0JBQW9CLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3hELE9BQU8sRUFBRSxDQUFDLDZCQUE2QixFQUFFLG9CQUFvQixDQUFDO2lCQUMvRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudCwgU2NNZW51UGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9zYy1jZWxsLXJlbmRlci1idXR0b24uY29tcG9uZW50XCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1NjQ2VsbFJlbmRlcmVyQnV0dG9uQ29tcG9uZW50LCBTY01lbnVQYW5lbENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdLFxuICBleHBvcnRzOiBbU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsIFNjTWVudVBhbmVsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2NDZWxsUmVuZGVyZXJCdXR0b25Nb2R1bGUge31cbiJdfQ==
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { NoRowsOverlayDefaultComponent } from
|
|
2
|
-
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from
|
|
3
|
-
import { ScCellRenderCheckboxListComponent } from
|
|
4
|
-
import { ScCellRenderSelectComponent } from
|
|
5
|
-
import { ScCellRenderToggleComponent } from
|
|
1
|
+
import { NoRowsOverlayDefaultComponent } from "./no-rows-overlay/noRowsOverlayDefault.component";
|
|
2
|
+
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from "./sc-cell-render-button/sc-cell-render-button.component";
|
|
3
|
+
import { ScCellRenderCheckboxListComponent } from "./sc-cell-render-checkbox-list/sc-cell-render-checkbox-list.component";
|
|
4
|
+
import { ScCellRenderSelectComponent } from "./sc-cell-render-select/sc-cell-render-select.component";
|
|
5
|
+
import { ScCellRenderToggleComponent } from "./sc-cell-render-toggle/sc-cell-render-toggle.component";
|
|
6
6
|
export const scCellRendererFramework = {
|
|
7
7
|
scCellRendererButtonComponent: ScCellRendererButtonComponent,
|
|
8
8
|
scCellRenderCheckboxListComponent: ScCellRenderCheckboxListComponent,
|
|
9
9
|
scCellRenderSelectComponent: ScCellRenderSelectComponent,
|
|
10
10
|
scCellRenderToggleComponent: ScCellRenderToggleComponent,
|
|
11
|
-
noRowsOverlayDefault: NoRowsOverlayDefaultComponent
|
|
11
|
+
noRowsOverlayDefault: NoRowsOverlayDefaultComponent,
|
|
12
12
|
};
|
|
13
13
|
export const scCellRendererComponents = [
|
|
14
|
-
ScCellRendererButtonComponent,
|
|
14
|
+
// ScCellRendererButtonComponent,
|
|
15
15
|
ScCellRenderCheckboxListComponent,
|
|
16
16
|
ScCellRenderSelectComponent,
|
|
17
17
|
ScCellRenderToggleComponent,
|
|
18
|
-
ScMenuPanelComponent
|
|
18
|
+
// ScMenuPanelComponent,
|
|
19
19
|
];
|
|
20
20
|
export const scComponents = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
scCellRendererButtonComponent: ScCellRendererButtonComponent,
|
|
22
|
+
scCellRenderCheckboxListComponent: ScCellRenderCheckboxListComponent,
|
|
23
|
+
scCellRenderSelectComponent: ScCellRenderSelectComponent,
|
|
24
|
+
scCellRenderToggleComponent: ScCellRenderToggleComponent,
|
|
25
|
+
noRowsOverlayDefault: ScMenuPanelComponent,
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2VsbC1yZW5kZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL2NlbGwtcmVuZGVyL3NjLWNlbGwtcmVuZGVyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUM5SCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUV0RyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyw2QkFBNkIsRUFBRSw2QkFBNkI7SUFDNUQsaUNBQWlDLEVBQUUsaUNBQWlDO0lBQ3BFLDJCQUEyQixFQUFFLDJCQUEyQjtJQUN4RCwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsb0JBQW9CLEVBQUUsNkJBQTZCO0NBQ3BELENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLDJCQUEyQjtJQUMzQiwyQkFBMkI7SUFDM0IsMEJBQTBCO0NBQzNCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsNkJBQTZCLEVBQUUsNkJBQTZCO0lBQzVELGlDQUFpQyxFQUFFLGlDQUFpQztJQUNwRSwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsMkJBQTJCLEVBQUUsMkJBQTJCO0lBQ3hELG9CQUFvQixFQUFFLG9CQUFvQjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9Sb3dzT3ZlcmxheURlZmF1bHRDb21wb25lbnQgfSBmcm9tIFwiLi9uby1yb3dzLW92ZXJsYXkvbm9Sb3dzT3ZlcmxheURlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudCwgU2NNZW51UGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyQ2hlY2tib3hMaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2MtY2VsbC1yZW5kZXItY2hlY2tib3gtbGlzdC9zYy1jZWxsLXJlbmRlci1jaGVja2JveC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2MtY2VsbC1yZW5kZXItc2VsZWN0L3NjLWNlbGwtcmVuZGVyLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNjQ2VsbFJlbmRlclRvZ2dsZUNvbXBvbmVudCB9IGZyb20gXCIuL3NjLWNlbGwtcmVuZGVyLXRvZ2dsZS9zYy1jZWxsLXJlbmRlci10b2dnbGUuY29tcG9uZW50XCI7XG5cbmV4cG9ydCBjb25zdCBzY0NlbGxSZW5kZXJlckZyYW1ld29yayA9IHtcbiAgc2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQ6IFNjQ2VsbFJlbmRlcmVyQnV0dG9uQ29tcG9uZW50LFxuICBzY0NlbGxSZW5kZXJDaGVja2JveExpc3RDb21wb25lbnQ6IFNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudCxcbiAgc2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50OiBTY0NlbGxSZW5kZXJTZWxlY3RDb21wb25lbnQsXG4gIHNjQ2VsbFJlbmRlclRvZ2dsZUNvbXBvbmVudDogU2NDZWxsUmVuZGVyVG9nZ2xlQ29tcG9uZW50LFxuICBub1Jvd3NPdmVybGF5RGVmYXVsdDogTm9Sb3dzT3ZlcmxheURlZmF1bHRDb21wb25lbnQsXG59O1xuZXhwb3J0IGNvbnN0IHNjQ2VsbFJlbmRlcmVyQ29tcG9uZW50cyA9IFtcbiAgLy8gU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsXG4gIFNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudCxcbiAgU2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50LFxuICBTY0NlbGxSZW5kZXJUb2dnbGVDb21wb25lbnQsXG4gIC8vICAgU2NNZW51UGFuZWxDb21wb25lbnQsXG5dO1xuXG5leHBvcnQgY29uc3Qgc2NDb21wb25lbnRzID0ge1xuICBzY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudDogU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsXG4gIHNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudDogU2NDZWxsUmVuZGVyQ2hlY2tib3hMaXN0Q29tcG9uZW50LFxuICBzY0NlbGxSZW5kZXJTZWxlY3RDb21wb25lbnQ6IFNjQ2VsbFJlbmRlclNlbGVjdENvbXBvbmVudCxcbiAgc2NDZWxsUmVuZGVyVG9nZ2xlQ29tcG9uZW50OiBTY0NlbGxSZW5kZXJUb2dnbGVDb21wb25lbnQsXG4gIG5vUm93c092ZXJsYXlEZWZhdWx0OiBTY01lbnVQYW5lbENvbXBvbmVudCxcbn07XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class FilterPaginable {
|
|
2
|
+
constructor(page, pageSize) {
|
|
3
|
+
this.page = page;
|
|
4
|
+
this.pageSize = pageSize;
|
|
5
|
+
this.sortBy = "";
|
|
6
|
+
this.sortDirection = "";
|
|
7
|
+
}
|
|
8
|
+
getPathFilter() {
|
|
9
|
+
if (this.sortBy === "") {
|
|
10
|
+
return `?page=${this.page}&size=${this.pageSize}`;
|
|
11
|
+
}
|
|
12
|
+
return `?page=${this.page}&size=${this.pageSize}&sortBy=${this.sortBy}&sortDirection=${this.sortDirection}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLWFnLWdyaWQtcGFnaW5hYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtcGFnaW5hYmxlL21vZGVscy1hZy1ncmlkLXBhZ2luYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsTUFBTSxPQUFPLGVBQWU7SUFNMUIsWUFBWSxJQUFZLEVBQUUsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsUUFBUSxXQUFXLElBQUksQ0FBQyxNQUFNLGtCQUFrQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQYWdpbmFibGU8VD4ge1xuICBkYXRhPzogVFtdO1xuICAvKipcbiAgICogVG90YWwgZGUgcmVnaXN0cm9zXG4gICAqL1xuICB0b3RhbEl0ZW1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTsO6bWVybyBkZSBww6FnaW5hIGxhIGFjdHVhbFxuICAgKi9cbiAgcGFnZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRhbWHDsW8gZGUgbGEgcMOhZ2luYVxuICAgKi9cbiAgc2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRvdGFsIGRlIHDDoWdpbmFzXG4gICAqL1xuICB0b3RhbFBhZ2U/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYWdpbmFibGUge1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHRoaXMuc29ydEJ5ID0gXCJcIjtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBcIlwiO1xuICB9XG5cbiAgZ2V0UGF0aEZpbHRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNvcnRCeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGA/cGFnZT0ke3RoaXMucGFnZX0mc2l6ZT0ke3RoaXMucGFnZVNpemV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGA/cGFnZT0ke3RoaXMucGFnZX0mc2l6ZT0ke3RoaXMucGFnZVNpemV9JnNvcnRCeT0ke3RoaXMuc29ydEJ5fSZzb3J0RGlyZWN0aW9uPSR7dGhpcy5zb3J0RGlyZWN0aW9ufWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { Component, EventEmitter, inject, Input, Output, ViewChild } from "@angular/core";
|
|
3
|
+
import { AgGridModule } from "ag-grid-angular";
|
|
4
|
+
import { EMPTY, Subscription, tap } from "rxjs";
|
|
5
|
+
import { EnumButtonType } from "../../utils/IScAgGrid";
|
|
6
|
+
import { ScCellRenderButtonService } from "../cell-render/sc-cell-render-button/sc-cell-render-button.component";
|
|
7
|
+
import { ScCellRendererButtonModule } from "../cell-render/sc-cell-render-button/sc-cell-render-button.module";
|
|
8
|
+
import { scComponents } from "../cell-render/sc-cell-render-config";
|
|
9
|
+
import { FilterPaginable } from "./models-ag-grid-paginable";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/common";
|
|
12
|
+
import * as i2 from "ag-grid-angular";
|
|
13
|
+
export class ScAgGridPaginableComponent {
|
|
14
|
+
/**
|
|
15
|
+
* @description Componentes de la `grilla`
|
|
16
|
+
* @default undefined
|
|
17
|
+
*/
|
|
18
|
+
set frameworkComponents(value) {
|
|
19
|
+
this._frameworkComponents = { ...this._frameworkComponents, ...value };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @description Para poder agregar más objetos al contexto
|
|
23
|
+
*/
|
|
24
|
+
set context(value) {
|
|
25
|
+
this._context = { ...this._context, ...value };
|
|
26
|
+
}
|
|
27
|
+
// GETTERS
|
|
28
|
+
getTotalPageList(currentPage) {
|
|
29
|
+
let start = currentPage - this.maxVisiblePages;
|
|
30
|
+
let end = currentPage + this.maxVisiblePages;
|
|
31
|
+
// Ajuste cuando está al inicio
|
|
32
|
+
if (start < 1) {
|
|
33
|
+
start = 1;
|
|
34
|
+
end = this.maxVisiblePages * 2 + 1;
|
|
35
|
+
}
|
|
36
|
+
// Ajuste cuando está al final
|
|
37
|
+
if (end > this.totalPage) {
|
|
38
|
+
end = this.totalPage;
|
|
39
|
+
start = Math.max(1, end - this.maxVisiblePages * 2);
|
|
40
|
+
}
|
|
41
|
+
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
42
|
+
}
|
|
43
|
+
get suppressRowClickSelection() {
|
|
44
|
+
return this.rowSelection === "single" ? false : true;
|
|
45
|
+
}
|
|
46
|
+
constructor() {
|
|
47
|
+
// INPUTS
|
|
48
|
+
/**
|
|
49
|
+
* @description Opciones de tamaño de página
|
|
50
|
+
* @default '[5, 10, 15, 20, 25]'
|
|
51
|
+
*/
|
|
52
|
+
this.pageSizeOptions = [5, 10, 15, 20, 25, 50];
|
|
53
|
+
/**
|
|
54
|
+
* @description Array de columnas que se mostrara en la `grilla`
|
|
55
|
+
* @default undefined
|
|
56
|
+
*/
|
|
57
|
+
this.columnDefs = [];
|
|
58
|
+
/**
|
|
59
|
+
* @description Función que determina si una fila es seleccionable
|
|
60
|
+
* @default () => true
|
|
61
|
+
*/
|
|
62
|
+
this.isRowSelectable = () => true;
|
|
63
|
+
/**
|
|
64
|
+
* @description Configuración de selección de filas
|
|
65
|
+
* @default 'single'
|
|
66
|
+
* @enum {'single' | 'multiple'}
|
|
67
|
+
*/
|
|
68
|
+
this.rowSelection = "single";
|
|
69
|
+
/**
|
|
70
|
+
* @description Configuración de layout de la `grilla`
|
|
71
|
+
* @default 'normal'
|
|
72
|
+
* @enum {'normal' | 'autoHeight'}
|
|
73
|
+
*/
|
|
74
|
+
/**
|
|
75
|
+
* @description Tamaño de la `grilla`
|
|
76
|
+
* @default '20em'
|
|
77
|
+
*/
|
|
78
|
+
this.height = "20em";
|
|
79
|
+
this.domLayout = "normal";
|
|
80
|
+
/**
|
|
81
|
+
* @description Función que determina el estilo de una fila
|
|
82
|
+
* @default () => undefined
|
|
83
|
+
*/
|
|
84
|
+
this.getRowStyle = () => undefined;
|
|
85
|
+
/**
|
|
86
|
+
* @description Datos de la `grilla`
|
|
87
|
+
* @default undefined
|
|
88
|
+
*/
|
|
89
|
+
this.serviceSearch = () => EMPTY;
|
|
90
|
+
/**
|
|
91
|
+
* @description Datos de la búsqueda
|
|
92
|
+
* @default undefined
|
|
93
|
+
*/
|
|
94
|
+
this.requestBody = {};
|
|
95
|
+
// OUTPUTS
|
|
96
|
+
/**
|
|
97
|
+
* @description Evento que se dispara cuando se hace clic en una fila
|
|
98
|
+
* @default undefined
|
|
99
|
+
*/
|
|
100
|
+
this.rowClicked = new EventEmitter();
|
|
101
|
+
/**
|
|
102
|
+
* @description Evento que se dispara cuando se hace clic doble en una fila
|
|
103
|
+
* @default undefined
|
|
104
|
+
*/
|
|
105
|
+
this.rowDoubleClicked = new EventEmitter();
|
|
106
|
+
/**
|
|
107
|
+
* @description Evento que se dispara cuando se selecciona una fila
|
|
108
|
+
* @default undefined
|
|
109
|
+
*/
|
|
110
|
+
this.rowSelected = new EventEmitter();
|
|
111
|
+
/**
|
|
112
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
113
|
+
* @default undefined
|
|
114
|
+
*/
|
|
115
|
+
this.buttonActionAgGrid = new EventEmitter();
|
|
116
|
+
/**
|
|
117
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `cabecera`
|
|
118
|
+
* @default undefined
|
|
119
|
+
*/
|
|
120
|
+
this.buttonActionHeader = new EventEmitter();
|
|
121
|
+
/**
|
|
122
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
123
|
+
* @default undefined
|
|
124
|
+
*/
|
|
125
|
+
this.editRow = new EventEmitter();
|
|
126
|
+
/**
|
|
127
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
128
|
+
* @default undefined
|
|
129
|
+
*/
|
|
130
|
+
this.deleteRow = new EventEmitter();
|
|
131
|
+
// VARIABLES
|
|
132
|
+
this.totalItems = 0;
|
|
133
|
+
this.currentPage = 0;
|
|
134
|
+
this.pageSize = 5;
|
|
135
|
+
this.totalPage = 0;
|
|
136
|
+
this.filter = new FilterPaginable(this.currentPage, this.pageSize);
|
|
137
|
+
this._subscription$ = new Subscription();
|
|
138
|
+
this._frameworkComponents = { ...scComponents };
|
|
139
|
+
this._context = { componentParent: this };
|
|
140
|
+
this._configButtonsDefaultAgGrid = [];
|
|
141
|
+
this.columnDefsAndAddCellActions = [];
|
|
142
|
+
this._scCellRenderButtonService = inject(ScCellRenderButtonService);
|
|
143
|
+
this.maxVisiblePages = 2;
|
|
144
|
+
this.overlayNoRowsTemplate = `<span class="ag-overlay-loading-center border-0 bg-transparent shadow-none">
|
|
145
|
+
No se encontraron registros...
|
|
146
|
+
</span>`;
|
|
147
|
+
this.overlayLoadingTemplate = `<span class="ag-overlay-loading-top d-flex align-items-center border-0 bg-white shadow p-4 text-info" style="height: 20px;">
|
|
148
|
+
<img src="assets/media-demo/loading.gif" height="20" width="25" class="mr-2">
|
|
149
|
+
<strong>Cargando registros</strong>
|
|
150
|
+
</span>
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
ngOnInit() {
|
|
154
|
+
this._subscription$.add(this._scCellRenderButtonService.handlerButtonAction$.subscribe(({ index, action, isRightClick }) => {
|
|
155
|
+
if (action == null)
|
|
156
|
+
return;
|
|
157
|
+
if (action.trim() === "")
|
|
158
|
+
return;
|
|
159
|
+
if (index !== -1) {
|
|
160
|
+
this.onButtonActionAgGridEmit(index, action, isRightClick);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.onButtonActionHeaderEmit(action);
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
ngOnChanges(changes) {
|
|
167
|
+
if (changes["configButtonsAction"]) {
|
|
168
|
+
this._initActionButton();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
ngOnDestroy() {
|
|
172
|
+
this._subscriptionRowData$?.unsubscribe();
|
|
173
|
+
this._subscription$.unsubscribe();
|
|
174
|
+
}
|
|
175
|
+
onButtonActionHeaderEmit(typeButton) {
|
|
176
|
+
const rowsSelected = this.agGrid?.api?.getSelectedRows();
|
|
177
|
+
this.buttonActionHeader.emit([typeButton, rowsSelected]);
|
|
178
|
+
}
|
|
179
|
+
onGridReady() {
|
|
180
|
+
this._fillAgGrid();
|
|
181
|
+
}
|
|
182
|
+
_fillAgGrid() {
|
|
183
|
+
this._initActionButton();
|
|
184
|
+
if (this._subscriptionRowData$) {
|
|
185
|
+
this._subscriptionRowData$.unsubscribe();
|
|
186
|
+
this.agGrid?.api.setGridOption("rowData", []);
|
|
187
|
+
this.agGrid?.api?.showLoadingOverlay();
|
|
188
|
+
}
|
|
189
|
+
this._subscriptionRowData$ = this.serviceSearch(this.filter, this.requestBody)
|
|
190
|
+
.pipe(tap((data) => {
|
|
191
|
+
this.totalItems = data.totalItems ?? 0;
|
|
192
|
+
this.currentPage = Number(data.page ?? 0);
|
|
193
|
+
this.pageSize = data.size ?? 0;
|
|
194
|
+
this.totalPage = data.totalPage ?? 0;
|
|
195
|
+
this.agGrid?.api.setGridOption("rowData", data.data ?? []);
|
|
196
|
+
}))
|
|
197
|
+
.subscribe();
|
|
198
|
+
}
|
|
199
|
+
_initActionButton() {
|
|
200
|
+
this._configButtonsDefaultAgGrid = [...(this.configButtonsAction?.agGrid?.actions || [])];
|
|
201
|
+
if (!this.configButtonsAction?.agGrid?.actions?.length) {
|
|
202
|
+
this.columnDefsAndAddCellActions = [...this.columnDefs];
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const length = this._configButtonsDefaultAgGrid.filter(({ hide }) => {
|
|
206
|
+
return !this._hideFunc(hide);
|
|
207
|
+
}).length;
|
|
208
|
+
const width = length == 2 ? 90 : 80;
|
|
209
|
+
const minWidth = length > 2 ? length * 33 + 10 : width;
|
|
210
|
+
const newColumns = {
|
|
211
|
+
headerName: "Acciones",
|
|
212
|
+
headerClass: "ag-header__center",
|
|
213
|
+
field: "",
|
|
214
|
+
width: minWidth,
|
|
215
|
+
minWidth,
|
|
216
|
+
maxWidth: minWidth,
|
|
217
|
+
cellClass: ["d-flex", "justify-content-center", "align-items-center"],
|
|
218
|
+
cellStyle: { overflow: "visible" },
|
|
219
|
+
resizable: false,
|
|
220
|
+
sortable: false,
|
|
221
|
+
cellRenderer: "scCellRendererButtonComponent",
|
|
222
|
+
pinned: "right",
|
|
223
|
+
suppressMenu: true,
|
|
224
|
+
lockPosition: true,
|
|
225
|
+
};
|
|
226
|
+
this.columnDefsAndAddCellActions = this._hideAgGridMenuAction() ? [...this.columnDefs] : [...this.columnDefs, newColumns];
|
|
227
|
+
}
|
|
228
|
+
onButtonActionAgGridEmit(rowIndex, typeButton, isRightClick) {
|
|
229
|
+
const IRowNode = this.agGrid?.api?.getDisplayedRowAtIndex(rowIndex);
|
|
230
|
+
if (IRowNode) {
|
|
231
|
+
if (typeButton === EnumButtonType.TYPE_EDIT) {
|
|
232
|
+
this.editRow.emit(IRowNode);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (typeButton === EnumButtonType.TYPE_DELETE) {
|
|
236
|
+
this.deleteRow.emit([this.agGrid?.api, [IRowNode.data]]);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.buttonActionAgGrid.emit([typeButton, IRowNode, isRightClick]);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
_hideFunc(hide) {
|
|
243
|
+
if (hide == null)
|
|
244
|
+
return false;
|
|
245
|
+
if (typeof hide == "function")
|
|
246
|
+
return hide();
|
|
247
|
+
return hide;
|
|
248
|
+
}
|
|
249
|
+
_hideAgGridMenuAction() {
|
|
250
|
+
if (this.configButtonsAction == null)
|
|
251
|
+
return true;
|
|
252
|
+
return (this.configButtonsAction?.agGrid?.actions.every(({ hide }) => {
|
|
253
|
+
return this._hideFunc(hide);
|
|
254
|
+
}) ?? true);
|
|
255
|
+
}
|
|
256
|
+
onSortChanged() {
|
|
257
|
+
const sortModel = this.agGrid.api
|
|
258
|
+
.getColumnState()
|
|
259
|
+
.filter((col) => col.sort != null)
|
|
260
|
+
.map((col) => ({
|
|
261
|
+
field: col.colId,
|
|
262
|
+
sort: col.sort,
|
|
263
|
+
}));
|
|
264
|
+
if (sortModel.length === 0) {
|
|
265
|
+
this.filter.sortBy = "";
|
|
266
|
+
this.filter.sortDirection = "";
|
|
267
|
+
}
|
|
268
|
+
else if (sortModel.length === 1 && sortModel[0].field !== "1") {
|
|
269
|
+
const sortBy = sortModel[0].field;
|
|
270
|
+
const sortDirection = sortModel[0].sort;
|
|
271
|
+
this.filter.sortBy = sortBy;
|
|
272
|
+
this.filter.sortDirection = sortDirection;
|
|
273
|
+
}
|
|
274
|
+
this._fillAgGrid();
|
|
275
|
+
}
|
|
276
|
+
// PAGINATION
|
|
277
|
+
goToPage(page) {
|
|
278
|
+
if (page - 1 === this.currentPage)
|
|
279
|
+
return;
|
|
280
|
+
this.filter.page = page - 1;
|
|
281
|
+
this.currentPage = page - 1;
|
|
282
|
+
this._fillAgGrid();
|
|
283
|
+
}
|
|
284
|
+
changePageSize(event) {
|
|
285
|
+
this.filter.pageSize = Number(event.target.value);
|
|
286
|
+
this._fillAgGrid();
|
|
287
|
+
}
|
|
288
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridPaginableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
289
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ScAgGridPaginableComponent, isStandalone: true, selector: "sc-ag-grid-paginable", inputs: { pageSizeOptions: "pageSizeOptions", configButtonsAction: "configButtonsAction", columnDefs: "columnDefs", isRowSelectable: "isRowSelectable", rowSelection: "rowSelection", height: "height", domLayout: "domLayout", getRowStyle: "getRowStyle", serviceSearch: "serviceSearch", requestBody: "requestBody", frameworkComponents: "frameworkComponents", context: "context" }, outputs: { rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", buttonActionAgGrid: "buttonActionAgGrid", buttonActionHeader: "buttonActionHeader", editRow: "editRow", deleteRow: "deleteRow" }, viewQueries: [{ propertyName: "agGrid", first: true, predicate: ["agGridPaginable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12\" [ngStyle]=\"{ width: '100%', height: this.height }\">\n <ag-grid-angular\n #agGridPaginable\n style=\"width: 100%; height: 100%\"\n class=\"ag-theme-balham\"\n [columnDefs]=\"columnDefsAndAddCellActions\"\n [components]=\"_frameworkComponents\"\n [context]=\"_context\"\n [rowSelection]=\"rowSelection\"\n [isRowSelectable]=\"isRowSelectable\"\n [domLayout]=\"domLayout\"\n [animateRows]=\"true\"\n [suppressMoveWhenRowDragging]=\"false\"\n [getRowStyle]=\"getRowStyle\"\n [enableRangeSelection]=\"false\"\n [suppressRowTransform]=\"false\"\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\n [suppressPropertyNamesCheck]=\"true\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [paginationPageSize]=\"pageSize\"\n [pagination]=\"true\"\n [suppressPaginationPanel]=\"true\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (rowSelected)=\"rowSelected.emit($event)\"\n (gridReady)=\"onGridReady()\"\n (sortChanged)=\"onSortChanged()\"\n oncontextmenu=\"return false;\">\n </ag-grid-angular>\n </div>\n</div>\n\n<div class=\"d-flex mt-2 justify-content-center justify-content-sm-between sc-ag-grid__pagination\">\n <nav class=\"d-flex flex-wrap\" aria-label=\"AgGrid pagination\">\n <ul class=\"pagination p-0 m-0\">\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(1)\"><em class=\"fa fa-angle-double-left\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage)\"><em class=\"fa fa-angle-left\"></em></button>\n </li>\n <li *ngIf=\"currentPage > maxVisiblePages\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" *ngFor=\"let n of getTotalPageList(currentPage + 1)\" [ngClass]=\"currentPage === n - 1 ? 'active' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(n)\">{{ n }}</button>\n </li>\n <li *ngIf=\"currentPage < totalPage - maxVisiblePages - 1\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage + 2)\"><em class=\"fa fa-angle-right\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(totalPage)\"><em class=\"fa fa-angle-double-right\"></em></button>\n </li>\n </ul>\n <div class=\"d-flex mx-2 align-items-center input-group-sm\">\n Mostrar\n <select class=\"custom-select mx-2\" (change)=\"changePageSize($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n registros\n </div>\n </nav>\n\n <div class=\"d-flex justify-content-end mt-2 mt-sm-0\">\n <div class=\"sc-ag-grid__pagination--total d-flex align-items-center flex-nowrap\">\n <span class=\"value\">{{ totalItems }} {{ totalItems > 1 ? \"Registros.\" : \"Registro.\" }}</span>\n <span class=\"label\"> Página </span>\n <span class=\"value\">\n {{ currentPage + 1 }}\n </span>\n <span class=\"label\"> de </span>\n <span class=\"value\">\n {{ totalPage }}\n </span>\n </div>\n </div>\n</div>\n", styles: [""], 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AgGridModule }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "ngmodule", type: ScCellRendererButtonModule }] }); }
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridPaginableComponent, decorators: [{
|
|
292
|
+
type: Component,
|
|
293
|
+
args: [{ selector: "sc-ag-grid-paginable", standalone: true, imports: [CommonModule, AgGridModule, ScCellRendererButtonModule], template: "<div class=\"row\">\n <div class=\"col-12\" [ngStyle]=\"{ width: '100%', height: this.height }\">\n <ag-grid-angular\n #agGridPaginable\n style=\"width: 100%; height: 100%\"\n class=\"ag-theme-balham\"\n [columnDefs]=\"columnDefsAndAddCellActions\"\n [components]=\"_frameworkComponents\"\n [context]=\"_context\"\n [rowSelection]=\"rowSelection\"\n [isRowSelectable]=\"isRowSelectable\"\n [domLayout]=\"domLayout\"\n [animateRows]=\"true\"\n [suppressMoveWhenRowDragging]=\"false\"\n [getRowStyle]=\"getRowStyle\"\n [enableRangeSelection]=\"false\"\n [suppressRowTransform]=\"false\"\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\n [suppressPropertyNamesCheck]=\"true\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [paginationPageSize]=\"pageSize\"\n [pagination]=\"true\"\n [suppressPaginationPanel]=\"true\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (rowSelected)=\"rowSelected.emit($event)\"\n (gridReady)=\"onGridReady()\"\n (sortChanged)=\"onSortChanged()\"\n oncontextmenu=\"return false;\">\n </ag-grid-angular>\n </div>\n</div>\n\n<div class=\"d-flex mt-2 justify-content-center justify-content-sm-between sc-ag-grid__pagination\">\n <nav class=\"d-flex flex-wrap\" aria-label=\"AgGrid pagination\">\n <ul class=\"pagination p-0 m-0\">\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(1)\"><em class=\"fa fa-angle-double-left\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage)\"><em class=\"fa fa-angle-left\"></em></button>\n </li>\n <li *ngIf=\"currentPage > maxVisiblePages\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" *ngFor=\"let n of getTotalPageList(currentPage + 1)\" [ngClass]=\"currentPage === n - 1 ? 'active' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(n)\">{{ n }}</button>\n </li>\n <li *ngIf=\"currentPage < totalPage - maxVisiblePages - 1\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage + 2)\"><em class=\"fa fa-angle-right\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(totalPage)\"><em class=\"fa fa-angle-double-right\"></em></button>\n </li>\n </ul>\n <div class=\"d-flex mx-2 align-items-center input-group-sm\">\n Mostrar\n <select class=\"custom-select mx-2\" (change)=\"changePageSize($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n registros\n </div>\n </nav>\n\n <div class=\"d-flex justify-content-end mt-2 mt-sm-0\">\n <div class=\"sc-ag-grid__pagination--total d-flex align-items-center flex-nowrap\">\n <span class=\"value\">{{ totalItems }} {{ totalItems > 1 ? \"Registros.\" : \"Registro.\" }}</span>\n <span class=\"label\"> Página </span>\n <span class=\"value\">\n {{ currentPage + 1 }}\n </span>\n <span class=\"label\"> de </span>\n <span class=\"value\">\n {{ totalPage }}\n </span>\n </div>\n </div>\n</div>\n" }]
|
|
294
|
+
}], ctorParameters: () => [], propDecorators: { pageSizeOptions: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], configButtonsAction: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], columnDefs: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], isRowSelectable: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], rowSelection: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], height: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], domLayout: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], getRowStyle: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], serviceSearch: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], requestBody: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], frameworkComponents: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], context: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], rowClicked: [{
|
|
319
|
+
type: Output
|
|
320
|
+
}], rowDoubleClicked: [{
|
|
321
|
+
type: Output
|
|
322
|
+
}], rowSelected: [{
|
|
323
|
+
type: Output
|
|
324
|
+
}], buttonActionAgGrid: [{
|
|
325
|
+
type: Output
|
|
326
|
+
}], buttonActionHeader: [{
|
|
327
|
+
type: Output
|
|
328
|
+
}], editRow: [{
|
|
329
|
+
type: Output
|
|
330
|
+
}], deleteRow: [{
|
|
331
|
+
type: Output
|
|
332
|
+
}], agGrid: [{
|
|
333
|
+
type: ViewChild,
|
|
334
|
+
args: ["agGridPaginable"]
|
|
335
|
+
}] } });
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWctZ3JpZC1wYWdpbmFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtcGFnaW5hYmxlL3NjLWFnLWdyaWQtcGFnaW5hYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9zYy1hZy1ncmlkLXBhZ2luYWJsZS9zYy1hZy1ncmlkLXBhZ2luYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsS0FBSyxFQUFjLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUEwQyxjQUFjLEVBQXNDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkksT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDakgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQWEsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVV4RSxNQUFNLE9BQU8sMEJBQTBCO0lBc0RyQzs7O09BR0c7SUFDSCxJQUNJLG1CQUFtQixDQUFDLEtBQVU7UUFDaEMsSUFB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R0EvVFUsMEJBQTBCO21HQUExQiwwQkFBMEIsbXpCQ25CdkMsNnRIQW9GQSx5RERyRVksWUFBWSxrYkFBRSxZQUFZLGduU0FBRSwwQkFBMEI7OzRGQUlyRCwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBRUUsc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsMEJBQTBCLENBQUM7d0RBVXhELGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQVVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1GLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFRRixPQUFPO3NCQURWLEtBQUs7Z0JBVUksVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBS0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUtHLE9BQU87c0JBQWhCLE1BQU07Z0JBS0csU0FBUztzQkFBbEIsTUFBTTtnQkFJUCxNQUFNO3NCQURMLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIsIEFnR3JpZE1vZHVsZSB9IGZyb20gXCJhZy1ncmlkLWFuZ3VsYXJcIjtcbmltcG9ydCB7IENvbERlZiwgR3JpZEFwaSwgSVJvd05vZGUsIElzUm93U2VsZWN0YWJsZSwgUm93Q2xpY2tlZEV2ZW50LCBSb3dEb3VibGVDbGlja2VkRXZlbnQsIFJvd1NlbGVjdGVkRXZlbnQgfSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb25maWdCdXR0b25BY3Rpb24sIENvbmZpZ0J1dHRvbkFnR3JpZCwgRW51bUJ1dHRvblR5cGUsIEdldFJvd1N0eWxlLCBIaWRlRnVjLCBSb3dTZWxlY3Rpb24gfSBmcm9tIFwiLi4vLi4vdXRpbHMvSVNjQWdHcmlkXCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlIH0gZnJvbSBcIi4uL2NlbGwtcmVuZGVyL3NjLWNlbGwtcmVuZGVyLWJ1dHRvbi9zYy1jZWxsLXJlbmRlci1idXR0b24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJlckJ1dHRvbk1vZHVsZSB9IGZyb20gXCIuLi9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLm1vZHVsZVwiO1xuaW1wb3J0IHsgc2NDb21wb25lbnRzIH0gZnJvbSBcIi4uL2NlbGwtcmVuZGVyL3NjLWNlbGwtcmVuZGVyLWNvbmZpZ1wiO1xuaW1wb3J0IHsgRmlsdGVyUGFnaW5hYmxlLCBQYWdpbmFibGUgfSBmcm9tIFwiLi9tb2RlbHMtYWctZ3JpZC1wYWdpbmFibGVcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiBcInNjLWFnLWdyaWQtcGFnaW5hYmxlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFnR3JpZE1vZHVsZSwgU2NDZWxsUmVuZGVyZXJCdXR0b25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogXCIuL3NjLWFnLWdyaWQtcGFnaW5hYmxlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vc2MtYWctZ3JpZC1wYWdpbmFibGUuY29tcG9uZW50LnNjc3NcIixcbn0pXG5leHBvcnQgY2xhc3MgU2NBZ0dyaWRQYWdpbmFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLy8gSU5QVVRTXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gIE9wY2lvbmVzIGRlIHRhbWHDsW8gZGUgcMOhZ2luYVxuICAgKiBAZGVmYXVsdCAnWzUsIDEwLCAxNSwgMjAsIDI1XSdcbiAgICovXG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9ucyA9IFs1LCAxMCwgMTUsIDIwLCAyNSwgNTBdO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYWNpw7NuIGRlIGFjY2lvbmVzIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnQnV0dG9uc0FjdGlvbiE6IENvbmZpZ0J1dHRvbkFjdGlvbjtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBcnJheSBkZSBjb2x1bW5hcyBxdWUgc2UgbW9zdHJhcmEgZW4gbGEgYGdyaWxsYWBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtdO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZ1bmNpw7NuIHF1ZSBkZXRlcm1pbmEgc2kgdW5hIGZpbGEgZXMgc2VsZWNjaW9uYWJsZVxuICAgKiBAZGVmYXVsdCAoKSA9PiB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBpc1Jvd1NlbGVjdGFibGU6IElzUm93U2VsZWN0YWJsZSA9ICgpID0+IHRydWU7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhY2nDs24gZGUgc2VsZWNjacOzbiBkZSBmaWxhc1xuICAgKiBAZGVmYXVsdCAnc2luZ2xlJ1xuICAgKiBAZW51bSB7J3NpbmdsZScgfCAnbXVsdGlwbGUnfVxuICAgKi9cbiAgQElucHV0KCkgcm93U2VsZWN0aW9uOiBSb3dTZWxlY3Rpb24gPSBcInNpbmdsZVwiO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYWNpw7NuIGRlIGxheW91dCBkZSBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCAnbm9ybWFsJ1xuICAgKiBAZW51bSB7J25vcm1hbCcgfCAnYXV0b0hlaWdodCd9XG4gICAqL1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRhbWHDsW8gZGUgbGEgYGdyaWxsYWBcbiAgICogQGRlZmF1bHQgJzIwZW0nXG4gICAqL1xuICBASW5wdXQoKSBoZWlnaHQgPSBcIjIwZW1cIjtcbiAgQElucHV0KCkgZG9tTGF5b3V0OiBcIm5vcm1hbFwiIHwgXCJhdXRvSGVpZ2h0XCIgPSBcIm5vcm1hbFwiO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZ1bmNpw7NuIHF1ZSBkZXRlcm1pbmEgZWwgZXN0aWxvIGRlIHVuYSBmaWxhXG4gICAqIEBkZWZhdWx0ICgpID0+IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgZ2V0Um93U3R5bGU6IEdldFJvd1N0eWxlID0gKCkgPT4gdW5kZWZpbmVkO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERhdG9zIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgc2VydmljZVNlYXJjaDogKGZpbHRlcjogRmlsdGVyUGFnaW5hYmxlLCBzZWFyY2hCb2R5OiB1bmtub3duKSA9PiBPYnNlcnZhYmxlPFBhZ2luYWJsZTx1bmtub3duPj4gPSAoKSA9PiBFTVBUWTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEYXRvcyBkZSBsYSBiw7pzcXVlZGFcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSByZXF1ZXN0Qm9keTogdW5rbm93biA9IHt9O1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGVzIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGZyYW1ld29ya0NvbXBvbmVudHModmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudHMgPSB7IC4uLnRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudHMsIC4uLnZhbHVlIH07XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJhIHBvZGVyIGFncmVnYXIgbcOhcyBvYmpldG9zIGFsIGNvbnRleHRvXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgY29udGV4dCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgLi4udmFsdWUgfTtcbiAgfVxuXG4gIC8vIE9VVFBVVFNcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGhhY2UgY2xpYyBlbiB1bmEgZmlsYVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dDbGlja2VkRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBoYWNlIGNsaWMgZG9ibGUgZW4gdW5hIGZpbGFcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBAT3V0cHV0KCkgcm93RG91YmxlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93RG91YmxlQ2xpY2tlZEV2ZW50PigpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2Ugc2VsZWNjaW9uYSB1bmEgZmlsYVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93U2VsZWN0ZWRFdmVudD4oKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGhhY2UgY2xpYyBlbiB1bmEgYWNjacOzbiBkZSBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSBidXR0b25BY3Rpb25BZ0dyaWQgPSBuZXcgRXZlbnRFbWl0dGVyPFtFbnVtQnV0dG9uVHlwZSB8IHN0cmluZywgSVJvd05vZGUsIGJvb2xlYW5dPigpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaGFjZSBjbGljIGVuIHVuYSBhY2Npw7NuIGRlIGxhIGBjYWJlY2VyYWBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBAT3V0cHV0KCkgYnV0dG9uQWN0aW9uSGVhZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxbRW51bUJ1dHRvblR5cGUgfCBzdHJpbmcsIGFueVtdXT4oKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGhhY2UgY2xpYyBlbiB1bmEgYWNjacOzbiBkZSBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSBlZGl0Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93Tm9kZT4oKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGhhY2UgY2xpYyBlbiB1bmEgYWNjacOzbiBkZSBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSBkZWxldGVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFtHcmlkQXBpLCBhbnlbXV0+KCk7XG5cbiAgLy8gVklFVyBDSElMRFJFTlxuICBAVmlld0NoaWxkKFwiYWdHcmlkUGFnaW5hYmxlXCIpXG4gIGFnR3JpZCE6IEFnR3JpZEFuZ3VsYXI7XG5cbiAgLy8gVkFSSUFCTEVTXG4gIHRvdGFsSXRlbXM6IG51bWJlciA9IDA7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gNTtcbiAgdG90YWxQYWdlOiBudW1iZXIgPSAwO1xuICBmaWx0ZXI6IEZpbHRlclBhZ2luYWJsZSA9IG5ldyBGaWx0ZXJQYWdpbmFibGUodGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSk7XG5cbiAgX3N1YnNjcmlwdGlvbiQgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIF9zdWJzY3JpcHRpb25Sb3dEYXRhJD86IFN1YnNjcmlwdGlvbjtcbiAgX2ZyYW1ld29ya0NvbXBvbmVudHMgPSB7IC4uLnNjQ29tcG9uZW50cyB9O1xuICBfY29udGV4dCA9IHsgY29tcG9uZW50UGFyZW50OiB0aGlzIGFzIGFueSB9O1xuICBfY29uZmlnQnV0dG9uc0RlZmF1bHRBZ0dyaWQ6IENvbmZpZ0J1dHRvbkFnR3JpZFtdID0gW107XG4gIGNvbHVtbkRlZnNBbmRBZGRDZWxsQWN0aW9uczogQ29sRGVmW10gPSBbXTtcblxuICBwcml2YXRlIF9zY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlID0gaW5qZWN0KFNjQ2VsbFJlbmRlckJ1dHRvblNlcnZpY2UpO1xuICByZWFkb25seSBtYXhWaXNpYmxlUGFnZXMgPSAyO1xuXG4gIHJlYWRvbmx5IG92ZXJsYXlOb1Jvd3NUZW1wbGF0ZTogc3RyaW5nID0gYDxzcGFuIGNsYXNzPVwiYWctb3ZlcmxheS1sb2FkaW5nLWNlbnRlciBib3JkZXItMCBiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZVwiPlxuXHRcdFx0Tm8gc2UgZW5jb250cmFyb24gcmVnaXN0cm9zLi4uXG5cdFx0PC9zcGFuPmA7XG4gIHJlYWRvbmx5IG92ZXJsYXlMb2FkaW5nVGVtcGxhdGU6IHN0cmluZyA9IGA8c3BhbiBjbGFzcz1cImFnLW92ZXJsYXktbG9hZGluZy10b3AgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItMCBiZy13aGl0ZSBzaGFkb3cgcC00IHRleHQtaW5mb1wiIHN0eWxlPVwiaGVpZ2h0OiAyMHB4O1wiPlxuXHRcdFx0PGltZyBzcmM9XCJhc3NldHMvbWVkaWEtZGVtby9sb2FkaW5nLmdpZlwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyNVwiIGNsYXNzPVwibXItMlwiPlxuXHRcdFx0PHN0cm9uZz5DYXJnYW5kbyByZWdpc3Ryb3M8L3N0cm9uZz5cblx0XHQ8L3NwYW4+XG5cdFx0YDtcblxuICAvLyBHRVRURVJTXG4gIGdldFRvdGFsUGFnZUxpc3QoY3VycmVudFBhZ2U6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBsZXQgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHRoaXMubWF4VmlzaWJsZVBhZ2VzO1xuICAgIGxldCBlbmQgPSBjdXJyZW50UGFnZSArIHRoaXMubWF4VmlzaWJsZVBhZ2VzO1xuXG4gICAgLy8gQWp1c3RlIGN1YW5kbyBlc3TDoSBhbCBpbmljaW9cbiAgICBpZiAoc3RhcnQgPCAxKSB7XG4gICAgICBzdGFydCA9IDE7XG4gICAgICBlbmQgPSB0aGlzLm1heFZpc2libGVQYWdlcyAqIDIgKyAxO1xuICAgIH1cblxuICAgIC8vIEFqdXN0ZSBjdWFuZG8gZXN0w6EgYWwgZmluYWxcbiAgICBpZiAoZW5kID4gdGhpcy50b3RhbFBhZ2UpIHtcbiAgICAgIGVuZCA9IHRoaXMudG90YWxQYWdlO1xuICAgICAgc3RhcnQgPSBNYXRoLm1heCgxLCBlbmQgLSB0aGlzLm1heFZpc2libGVQYWdlcyAqIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgLSBzdGFydCArIDEgfSwgKF8sIGkpID0+IHN0YXJ0ICsgaSk7XG4gIH1cblxuICBnZXQgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24gPT09IFwic2luZ2xlXCIgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uJC5hZGQoXG4gICAgICB0aGlzLl9zY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlLmhhbmRsZXJCdXR0b25BY3Rpb24kLnN1YnNjcmliZSgoeyBpbmRleCwgYWN0aW9uLCBpc1JpZ2h0Q2xpY2sgfSkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uID09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKGFjdGlvbi50cmltKCkgPT09IFwiXCIpIHJldHVybjtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMub25CdXR0b25BY3Rpb25BZ0dyaWRFbWl0KGluZGV4LCBhY3Rpb24sIGlzUmlnaHRDbGljayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkJ1dHRvbkFjdGlvbkhlYWRlckVtaXQoYWN0aW9uKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcImNvbmZpZ0J1dHRvbnNBY3Rpb25cIl0pIHtcbiAgICAgIHRoaXMuX2luaXRBY3Rpb25CdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25Sb3dEYXRhJD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbkJ1dHRvbkFjdGlvbkhlYWRlckVtaXQodHlwZUJ1dHRvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgcm93c1NlbGVjdGVkID0gdGhpcy5hZ0dyaWQ/LmFwaT8uZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgdGhpcy5idXR0b25BY3Rpb25IZWFkZXIuZW1pdChbdHlwZUJ1dHRvbiwgcm93c1NlbGVjdGVkXSk7XG4gIH1cblxuICBvbkdyaWRSZWFkeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxsQWdHcmlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9maWxsQWdHcmlkKCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRBY3Rpb25CdXR0b24oKTtcblxuICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25Sb3dEYXRhJCkge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuYWdHcmlkPy5hcGkuc2V0R3JpZE9wdGlvbihcInJvd0RhdGFcIiwgW10pO1xuICAgICAgdGhpcy5hZ0dyaWQ/LmFwaT8uc2hvd0xvYWRpbmdPdmVybGF5KCk7XG4gICAgfVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkID0gdGhpcy5zZXJ2aWNlU2VhcmNoKHRoaXMuZmlsdGVyLCB0aGlzLnJlcXVlc3RCb2R5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGRhdGEudG90YWxJdGVtcyA/PyAwO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBOdW1iZXIoZGF0YS5wYWdlID8/IDApO1xuICAgICAgICAgIHRoaXMucGFnZVNpemUgPSBkYXRhLnNpemUgPz8gMDtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZSA9IGRhdGEudG90YWxQYWdlID8/IDA7XG4gICAgICAgICAgdGhpcy5hZ0dyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKFwicm93RGF0YVwiLCBkYXRhLmRhdGEgPz8gW10pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEFjdGlvbkJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9jb25maWdCdXR0b25zRGVmYXVsdEFnR3JpZCA9IFsuLi4odGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5hZ0dyaWQ/LmFjdGlvbnMgfHwgW10pXTtcbiAgICBpZiAoIXRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbj8uYWdHcmlkPy5hY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1uRGVmc0FuZEFkZENlbGxBY3Rpb25zID0gWy4uLnRoaXMuY29sdW1uRGVmc107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5fY29uZmlnQnV0dG9uc0RlZmF1bHRBZ0dyaWQuZmlsdGVyKCh7IGhpZGUgfSkgPT4ge1xuICAgICAgcmV0dXJuICF0aGlzLl9oaWRlRnVuYyhoaWRlKTtcbiAgICB9KS5sZW5ndGg7XG5cbiAgICBjb25zdCB3aWR0aCA9IGxlbmd0aCA9PSAyID8gOTAgOiA4MDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IGxlbmd0aCA+IDIgPyBsZW5ndGggKiAzMyArIDEwIDogd2lkdGg7XG5cbiAgICBjb25zdCBuZXdDb2x1bW5zOiBDb2xEZWYgPSB7XG4gICAgICBoZWFkZXJOYW1lOiBcIkFjY2lvbmVzXCIsXG4gICAgICBoZWFkZXJDbGFzczogXCJhZy1oZWFkZXJfX2NlbnRlclwiLFxuICAgICAgZmllbGQ6IFwiXCIsXG4gICAgICB3aWR0aDogbWluV2lkdGgsXG4gICAgICBtaW5XaWR0aCxcbiAgICAgIG1heFdpZHRoOiBtaW5XaWR0aCxcbiAgICAgIGNlbGxDbGFzczogW1wiZC1mbGV4XCIsIFwianVzdGlmeS1jb250ZW50LWNlbnRlclwiLCBcImFsaWduLWl0ZW1zLWNlbnRlclwiXSxcbiAgICAgIGNlbGxTdHlsZTogeyBvdmVyZmxvdzogXCJ2aXNpYmxlXCIgfSxcbiAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXI6IFwic2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnRcIixcbiAgICAgIHBpbm5lZDogXCJyaWdodFwiLFxuICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxuICAgICAgbG9ja1Bvc2l0aW9uOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5jb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnMgPSB0aGlzLl9oaWRlQWdHcmlkTWVudUFjdGlvbigpID8gWy4uLnRoaXMuY29sdW1uRGVmc10gOiBbLi4udGhpcy5jb2x1bW5EZWZzLCBuZXdDb2x1bW5zXTtcbiAgfVxuXG4gIG9uQnV0dG9uQWN0aW9uQWdHcmlkRW1pdChyb3dJbmRleDogbnVtYmVyLCB0eXBlQnV0dG9uOiBzdHJpbmcsIGlzUmlnaHRDbGljazogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IElSb3dOb2RlID0gdGhpcy5hZ0dyaWQ/LmFwaT8uZ2V0RGlzcGxheWVkUm93QXRJbmRleChyb3dJbmRleCk7XG5cbiAgICBpZiAoSVJvd05vZGUpIHtcbiAgICAgIGlmICh0eXBlQnV0dG9uID09PSBFbnVtQnV0dG9uVHlwZS5UWVBFX0VESVQpIHtcbiAgICAgICAgdGhpcy5lZGl0Um93LmVtaXQoSVJvd05vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZUJ1dHRvbiA9PT0gRW51bUJ1dHRvblR5cGUuVFlQRV9ERUxFVEUpIHtcbiAgICAgICAgdGhpcy5kZWxldGVSb3cuZW1pdChbdGhpcy5hZ0dyaWQ/LmFwaSwgW0lSb3dOb2RlLmRhdGFdXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idXR0b25BY3Rpb25BZ0dyaWQuZW1pdChbdHlwZUJ1dHRvbiwgSVJvd05vZGUsIGlzUmlnaHRDbGlja10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hpZGVGdW5jKGhpZGU6IEhpZGVGdWMgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKGhpZGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgaGlkZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBoaWRlKCk7XG5cbiAgICByZXR1cm4gaGlkZTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZGVBZ0dyaWRNZW51QWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24gPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbj8uYWdHcmlkPy5hY3Rpb25zLmV2ZXJ5KCh7IGhpZGUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUZ1bmMoaGlkZSk7XG4gICAgICB9KSA/PyB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydE1vZGVsID0gdGhpcy5hZ0dyaWQuYXBpXG4gICAgICAuZ2V0Q29sdW1uU3RhdGUoKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuc29ydCAhPSBudWxsKVxuICAgICAgLm1hcCgoY29sKSA9PiAoe1xuICAgICAgICBmaWVsZDogY29sLmNvbElkLFxuICAgICAgICBzb3J0OiBjb2wuc29ydCxcbiAgICAgIH0pKTtcblxuICAgIGlmIChzb3J0TW9kZWwubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlci5zb3J0QnkgPSBcIlwiO1xuICAgICAgdGhpcy5maWx0ZXIuc29ydERpcmVjdGlvbiA9IFwiXCI7XG4gICAgfSBlbHNlIGlmIChzb3J0TW9kZWwubGVuZ3RoID09PSAxICYmIHNvcnRNb2RlbFswXS5maWVsZCAhPT0gXCIxXCIpIHtcbiAgICAgIGNvbnN0IHNvcnRCeSA9IHNvcnRNb2RlbFswXS5maWVsZDtcbiAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSBzb3J0TW9kZWxbMF0uc29ydCBhcyBzdHJpbmc7XG4gICAgICB0aGlzLmZpbHRlci5zb3J0QnkgPSBzb3J0Qnk7XG4gICAgICB0aGlzLmZpbHRlci5zb3J0RGlyZWN0aW9uID0gc29ydERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICB0aGlzLl9maWxsQWdHcmlkKCk7XG4gIH1cblxuICAvLyBQQUdJTkFUSU9OXG5cbiAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHBhZ2UgLSAxID09PSB0aGlzLmN1cnJlbnRQYWdlKSByZXR1cm47XG4gICAgdGhpcy5maWx0ZXIucGFnZSA9IHBhZ2UgLSAxO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlIC0gMTtcbiAgICB0aGlzLl9maWxsQWdHcmlkKCk7XG4gIH1cblxuICBjaGFuZ2VQYWdlU2l6ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlci5wYWdlU2l6ZSA9IE51bWJlcigoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZSk7XG4gICAgdGhpcy5fZmlsbEFnR3JpZCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogdGhpcy5oZWlnaHQgfVwiPlxuICAgIDxhZy1ncmlkLWFuZ3VsYXJcbiAgICAgICNhZ0dyaWRQYWdpbmFibGVcbiAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJVwiXG4gICAgICBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbVwiXG4gICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnNcIlxuICAgICAgW2NvbXBvbmVudHNdPVwiX2ZyYW1ld29ya0NvbXBvbmVudHNcIlxuICAgICAgW2NvbnRleHRdPVwiX2NvbnRleHRcIlxuICAgICAgW3Jvd1NlbGVjdGlvbl09XCJyb3dTZWxlY3Rpb25cIlxuICAgICAgW2lzUm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxuICAgICAgW2RvbUxheW91dF09XCJkb21MYXlvdXRcIlxuICAgICAgW2FuaW1hdGVSb3dzXT1cInRydWVcIlxuICAgICAgW3N1cHByZXNzTW92ZVdoZW5Sb3dEcmFnZ2luZ109XCJmYWxzZVwiXG4gICAgICBbZ2V0Um93U3R5bGVdPVwiZ2V0Um93U3R5bGVcIlxuICAgICAgW2VuYWJsZVJhbmdlU2VsZWN0aW9uXT1cImZhbHNlXCJcbiAgICAgIFtzdXBwcmVzc1Jvd1RyYW5zZm9ybV09XCJmYWxzZVwiXG4gICAgICBbb3ZlcmxheU5vUm93c1RlbXBsYXRlXT1cIm92ZXJsYXlOb1Jvd3NUZW1wbGF0ZVwiXG4gICAgICBbb3ZlcmxheUxvYWRpbmdUZW1wbGF0ZV09XCJvdmVybGF5TG9hZGluZ1RlbXBsYXRlXCJcbiAgICAgIFtzdXBwcmVzc1Byb3BlcnR5TmFtZXNDaGVja109XCJ0cnVlXCJcbiAgICAgIFtzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXT1cInN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25cIlxuICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICBbcGFnaW5hdGlvbl09XCJ0cnVlXCJcbiAgICAgIFtzdXBwcmVzc1BhZ2luYXRpb25QYW5lbF09XCJ0cnVlXCJcbiAgICAgIChyb3dDbGlja2VkKT1cInJvd0NsaWNrZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChyb3dEb3VibGVDbGlja2VkKT1cInJvd0RvdWJsZUNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChyb3dTZWxlY3RlZCk9XCJyb3dTZWxlY3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgpXCJcbiAgICAgIChzb3J0Q2hhbmdlZCk9XCJvblNvcnRDaGFuZ2VkKClcIlxuICAgICAgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIj5cbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImQtZmxleCBtdC0yIGp1c3RpZnktY29udGVudC1jZW50ZXIganVzdGlmeS1jb250ZW50LXNtLWJldHdlZW4gc2MtYWctZ3JpZF9fcGFnaW5hdGlvblwiPlxuICA8bmF2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiIGFyaWEtbGFiZWw9XCJBZ0dyaWQgcGFnaW5hdGlvblwiPlxuICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb24gcC0wIG0tMFwiPlxuICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgW25nQ2xhc3NdPVwiY3VycmVudFBhZ2UgPT09IDAgPyAnZGlzYWJsZWQnIDogJydcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJnb1RvUGFnZSgxKVwiPjxlbSBjbGFzcz1cImZhIGZhLWFuZ2xlLWRvdWJsZS1sZWZ0XCI+PC9lbT48L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbbmdDbGFzc109XCJjdXJyZW50UGFnZSA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlKVwiPjxlbSBjbGFzcz1cImZhIGZhLWFuZ2xlLWxlZnRcIj48L2VtPjwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSAqbmdJZj1cImN1cnJlbnRQYWdlID4gbWF4VmlzaWJsZVBhZ2VzXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWRcIj4uLi48L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiAqbmdGb3I9XCJsZXQgbiBvZiBnZXRUb3RhbFBhZ2VMaXN0KGN1cnJlbnRQYWdlICsgMSlcIiBbbmdDbGFzc109XCJjdXJyZW50UGFnZSA9PT0gbiAtIDEgPyAnYWN0aXZlJyA6ICcnXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwiZ29Ub1BhZ2UobilcIj57eyBuIH19PC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwiY3VycmVudFBhZ2UgPCB0b3RhbFBhZ2UgLSBtYXhWaXNpYmxlUGFnZXMgLSAxXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWRcIj4uLi48L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbbmdDbGFzc109XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlIC0gMSA/ICdkaXNhYmxlZCcgOiAnJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMilcIj48ZW0gY2xhc3M9XCJmYSBmYS1hbmdsZS1yaWdodFwiPjwvZW0+PC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgW25nQ2xhc3NdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZSAtIDEgPyAnZGlzYWJsZWQnIDogJydcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJnb1RvUGFnZSh0b3RhbFBhZ2UpXCI+PGVtIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG91YmxlLXJpZ2h0XCI+PC9lbT48L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG14LTIgYWxpZ24taXRlbXMtY2VudGVyIGlucHV0LWdyb3VwLXNtXCI+XG4gICAgICBNb3N0cmFyXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBteC0yXCIgKGNoYW5nZSk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAge3sgb3B0aW9uIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICByZWdpc3Ryb3NcbiAgICA8L2Rpdj5cbiAgPC9uYXY+XG5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbXQtc20tMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYy1hZy1ncmlkX19wYWdpbmF0aW9uLS10b3RhbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtbm93cmFwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgdG90YWxJdGVtcyB9fSZuYnNwO3t7IHRvdGFsSXRlbXMgPiAxID8gXCJSZWdpc3Ryb3MuXCIgOiBcIlJlZ2lzdHJvLlwiIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPiZuYnNwO1AmYWFjdXRlO2dpbmEmbmJzcDs8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgIHt7IGN1cnJlbnRQYWdlICsgMSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPiZuYnNwO2RlJm5ic3A7PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICB7eyB0b3RhbFBhZ2UgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|