@rafaelaalmeidaa/primordash 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/components/card/card.component.mjs +69 -0
- package/esm2020/lib/components/charts/bar-line/bar-line.component.mjs +245 -0
- package/esm2020/lib/components/charts/bubble/bubble.component.mjs +147 -0
- package/esm2020/lib/components/charts/pie/pie.component.mjs +161 -0
- package/esm2020/lib/components/charts/simple-card/simple-card.component.mjs +31 -0
- package/esm2020/lib/components/charts/table/table.component.mjs +26 -0
- package/esm2020/lib/components/dashboard/dashboard.component.mjs +251 -0
- package/esm2020/lib/components/modal-edit/modal-edit.component.mjs +133 -0
- package/esm2020/lib/components/modal-edit-chart/modal-edit-chart.component.mjs +56 -0
- package/esm2020/lib/models/dashboard.model.mjs +46 -0
- package/esm2020/lib/primordash.component.mjs +75 -0
- package/esm2020/lib/primordash.module.mjs +92 -0
- package/esm2020/lib/primordash.service.mjs +14 -0
- package/esm2020/lib/services/generic.mjs +50 -0
- package/esm2020/public-api.mjs +8 -0
- package/esm2020/rafaAlmeida-primordash.mjs +5 -0
- package/esm2020/rafaelaalmeidaa-primordash.mjs +5 -0
- package/fesm2015/rafaAlmeida-primordash.mjs +1374 -0
- package/fesm2015/rafaAlmeida-primordash.mjs.map +1 -0
- package/fesm2015/rafaelaalmeidaa-primordash.mjs +1374 -0
- package/fesm2015/rafaelaalmeidaa-primordash.mjs.map +1 -0
- package/fesm2020/rafaAlmeida-primordash.mjs +1349 -0
- package/fesm2020/rafaAlmeida-primordash.mjs.map +1 -0
- package/fesm2020/rafaelaalmeidaa-primordash.mjs +1349 -0
- package/fesm2020/rafaelaalmeidaa-primordash.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/card/card.component.d.ts +21 -0
- package/lib/components/charts/bar-line/bar-line.component.d.ts +32 -0
- package/lib/components/charts/bubble/bubble.component.d.ts +27 -0
- package/lib/components/charts/pie/pie.component.d.ts +28 -0
- package/lib/components/charts/simple-card/simple-card.component.d.ts +15 -0
- package/lib/components/charts/table/table.component.d.ts +13 -0
- package/lib/components/dashboard/dashboard.component.d.ts +58 -0
- package/lib/components/modal-edit/modal-edit.component.d.ts +32 -0
- package/lib/components/modal-edit-chart/modal-edit-chart.component.d.ts +16 -0
- package/lib/models/dashboard.model.d.ts +118 -0
- package/lib/primordash.component.d.ts +16 -0
- package/lib/primordash.module.d.ts +26 -0
- package/lib/primordash.service.d.ts +6 -0
- package/lib/services/generic.d.ts +3 -0
- package/package.json +40 -0
- package/public-api.d.ts +4 -0
- package/src/lib/assets/fonts/google_icons_outlined.ttf +0 -0
- package/src/lib/assets/fonts/google_icons_rounded.ttf +0 -0
- package/src/lib/assets/fonts/google_icons_sharp.ttf +0 -0
- package/src/lib/assets/images/bar.png +0 -0
- package/src/lib/assets/images/doughnut.png +0 -0
- package/src/lib/assets/images/halfDoughnut.png +0 -0
- package/src/lib/assets/images/lineBar.png +0 -0
- package/src/lib/assets/images/multiPie.png +0 -0
- package/src/lib/assets/images/pie.png +0 -0
- package/src/lib/assets/images/polarArea.png +0 -0
- package/src/lib/assets/images/verticalBar.png +0 -0
- package/src/lib/assets/images/verticalStackedBar.png +0 -0
- package/src/lib/assets/style.scss +5 -0
- package/src/lib/assets/styles/_colors.scss +11 -0
- package/src/lib/assets/styles/_fonts.scss +30 -0
- package/src/lib/assets/styles/_modal.scss +36 -0
- package/src/lib/assets/styles/_ng-select.scss +128 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Primordash
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project primordash` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project primordash`.
|
|
8
|
+
> Note: Don't forget to add `--project primordash` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build primordash` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build primordash`, go to the dist folder `cd dist/primordash` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test primordash` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { DASHBOARD_BAR_LINE_TYPES, } from '../../models/dashboard.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/platform-browser";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "../charts/bar-line/bar-line.component";
|
|
7
|
+
import * as i4 from "../charts/bubble/bubble.component";
|
|
8
|
+
import * as i5 from "../charts/pie/pie.component";
|
|
9
|
+
import * as i6 from "../charts/simple-card/simple-card.component";
|
|
10
|
+
import * as i7 from "../charts/table/table.component";
|
|
11
|
+
export class CardComponent {
|
|
12
|
+
constructor(sanitizer) {
|
|
13
|
+
this.sanitizer = sanitizer;
|
|
14
|
+
this.barItems = DASHBOARD_BAR_LINE_TYPES;
|
|
15
|
+
this.data = {};
|
|
16
|
+
this.isDark = false;
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
if (this.data.innerHtml) {
|
|
20
|
+
this.safeHtml = this.sanitizer.bypassSecurityTrustHtml(this.data.innerHtml);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
includeBarType(data) {
|
|
24
|
+
return data.type ? this.barItems.includes(data.type) : false;
|
|
25
|
+
}
|
|
26
|
+
get barLineType() {
|
|
27
|
+
if (this.includeBarType(this.data)) {
|
|
28
|
+
return this.data.type ?? 'bar';
|
|
29
|
+
}
|
|
30
|
+
return 'bar';
|
|
31
|
+
}
|
|
32
|
+
get pieType() {
|
|
33
|
+
if (this.data?.type === 'pie' || this.data?.type === 'doughnut' ||
|
|
34
|
+
this.data?.type === 'polarArea' || this.data?.type === 'halfDoughnut' ||
|
|
35
|
+
this.data?.type === 'multiPie') {
|
|
36
|
+
return this.data.type;
|
|
37
|
+
}
|
|
38
|
+
return 'pie';
|
|
39
|
+
}
|
|
40
|
+
get bubbleType() {
|
|
41
|
+
if (this.data?.type === 'bubble') {
|
|
42
|
+
return this.data.type;
|
|
43
|
+
}
|
|
44
|
+
return 'bubble';
|
|
45
|
+
}
|
|
46
|
+
get cardType() {
|
|
47
|
+
if (this.data?.type === 'simpleCard') {
|
|
48
|
+
return this.data.type;
|
|
49
|
+
}
|
|
50
|
+
return 'simpleCard';
|
|
51
|
+
}
|
|
52
|
+
get tableType() {
|
|
53
|
+
if (this.data?.type === 'table') {
|
|
54
|
+
return this.data.type;
|
|
55
|
+
}
|
|
56
|
+
return 'table';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
CardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
+
CardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardComponent, selector: "lib-card", inputs: { data: "data", isDark: "isDark" }, ngImport: i0, template: "<section class=\"card-section\">\r\n {{data.title}}\r\n <div class=\"card-chart\">\r\n <lib-bar-line *ngIf=\"this.includeBarType(this.data)\" \r\n [card]=\"data\" [type]=\"barLineType\" [isDark]=\"isDark\"></lib-bar-line>\r\n\r\n <lib-pie *ngIf=\"['pie', 'doughnut', 'polarArea', 'halfDoughnut', 'multiPie'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"pieType\" [isDark]=\"isDark\"></lib-pie>\r\n\r\n <lib-bubble *ngIf=\"['bubble'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"bubbleType\" [isDark]=\"isDark\"></lib-bubble>\r\n\r\n <lib-simple-card *ngIf=\"['simpleCard'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"cardType\" [isDark]=\"isDark\"></lib-simple-card>\r\n\r\n <lib-table *ngIf=\"['table'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"tableType\" [isDark]=\"isDark\"></lib-table>\r\n\r\n <div class=\"card-html\" *ngIf=\"data.type == 'html'\" [innerHtml]=\"safeHtml\">\r\n </div>\r\n </div>\r\n</section>", styles: [".card-section{display:flex;flex-direction:column;height:100%}.card-section .card-chart{flex-grow:1;min-height:0}.card-section .card-chart .card-html{height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.BarLineComponent, selector: "lib-bar-line", inputs: ["type", "isDark", "card"] }, { kind: "component", type: i4.BubbleComponent, selector: "lib-bubble", inputs: ["type", "isDark", "card"] }, { kind: "component", type: i5.PieComponent, selector: "lib-pie", inputs: ["type", "isDark", "card"] }, { kind: "component", type: i6.SimpleCardComponent, selector: "lib-simple-card", inputs: ["type", "isDark", "card"] }, { kind: "component", type: i7.TableComponent, selector: "lib-table", inputs: ["type", "isDark", "card"] }] });
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, decorators: [{
|
|
62
|
+
type: Component,
|
|
63
|
+
args: [{ selector: 'lib-card', template: "<section class=\"card-section\">\r\n {{data.title}}\r\n <div class=\"card-chart\">\r\n <lib-bar-line *ngIf=\"this.includeBarType(this.data)\" \r\n [card]=\"data\" [type]=\"barLineType\" [isDark]=\"isDark\"></lib-bar-line>\r\n\r\n <lib-pie *ngIf=\"['pie', 'doughnut', 'polarArea', 'halfDoughnut', 'multiPie'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"pieType\" [isDark]=\"isDark\"></lib-pie>\r\n\r\n <lib-bubble *ngIf=\"['bubble'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"bubbleType\" [isDark]=\"isDark\"></lib-bubble>\r\n\r\n <lib-simple-card *ngIf=\"['simpleCard'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"cardType\" [isDark]=\"isDark\"></lib-simple-card>\r\n\r\n <lib-table *ngIf=\"['table'].includes(data.type ?? '')\" \r\n [card]=\"data\" [type]=\"tableType\" [isDark]=\"isDark\"></lib-table>\r\n\r\n <div class=\"card-html\" *ngIf=\"data.type == 'html'\" [innerHtml]=\"safeHtml\">\r\n </div>\r\n </div>\r\n</section>", styles: [".card-section{display:flex;flex-direction:column;height:100%}.card-section .card-chart{flex-grow:1;min-height:0}.card-section .card-chart .card-html{height:100%}\n"] }]
|
|
64
|
+
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { data: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}], isDark: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}] } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmltb3JkYXNoL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbW9yZGFzaC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBUSx3QkFBd0IsR0FBMEIsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBUXRHLE1BQU0sT0FBTyxhQUFhO0lBT3hCLFlBQ1UsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQU5qQyxhQUFRLEdBQTJCLHdCQUF3QixDQUFDO1FBQ25ELFNBQUksR0FBUSxFQUFVLENBQUM7UUFDdkIsV0FBTSxHQUFXLEtBQUssQ0FBQztJQUs1QixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTztRQUNULElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLFVBQVU7WUFDM0QsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWM7WUFDckUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdkI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdkI7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN2QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OzJHQXhEVSxhQUFhOytGQUFiLGFBQWEsNEZDVDFCLDgvQkFxQlU7NEZEWkcsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVO21HQU9YLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FyZCwgREFTSEJPQVJEX0JBUl9MSU5FX1RZUEVTLCBEYXNoYm9hcmRCYXJMaW5lVHlwZSwgIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Rhc2hib2FyZC5tb2RlbCc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYXJkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBiYXJJdGVtczogRGFzaGJvYXJkQmFyTGluZVR5cGVbXSA9IERBU0hCT0FSRF9CQVJfTElORV9UWVBFUztcclxuICBASW5wdXQoKSBkYXRhOkNhcmQgPSB7fSBhcyBDYXJkO1xyXG4gIEBJbnB1dCgpIGlzRGFyazpib29sZWFuID0gZmFsc2U7XHJcbiAgc2FmZUh0bWwhOlNhZmVIdG1sO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmKHRoaXMuZGF0YS5pbm5lckh0bWwpe1xyXG4gICAgICB0aGlzLnNhZmVIdG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5kYXRhLmlubmVySHRtbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmNsdWRlQmFyVHlwZShkYXRhOkNhcmQpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gZGF0YS50eXBlPyB0aGlzLmJhckl0ZW1zLmluY2x1ZGVzKGRhdGEudHlwZSk6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGJhckxpbmVUeXBlKCk6IERhc2hib2FyZEJhckxpbmVUeXBlIHtcclxuICAgIGlmICh0aGlzLmluY2x1ZGVCYXJUeXBlKHRoaXMuZGF0YSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlID8/ICdiYXInO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdiYXInO1xyXG4gIH1cclxuICBcclxuICBnZXQgcGllVHlwZSgpOiAncGllJyB8ICdkb3VnaG51dCcgfCAncG9sYXJBcmVhJyB8ICdoYWxmRG91Z2hudXQnIHwgJ211bHRpUGllJyB7XHJcbiAgICBpZiAodGhpcy5kYXRhPy50eXBlID09PSAncGllJyB8fCB0aGlzLmRhdGE/LnR5cGUgPT09ICdkb3VnaG51dCcgfHwgXHJcbiAgICAgICAgdGhpcy5kYXRhPy50eXBlID09PSAncG9sYXJBcmVhJyB8fCB0aGlzLmRhdGE/LnR5cGUgPT09ICdoYWxmRG91Z2hudXQnIHx8IFxyXG4gICAgICAgIHRoaXMuZGF0YT8udHlwZSA9PT0gJ211bHRpUGllJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLnR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3BpZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgYnViYmxlVHlwZSgpOiAnYnViYmxlJ3tcclxuICAgIGlmICh0aGlzLmRhdGE/LnR5cGUgPT09ICdidWJibGUnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGEudHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiAnYnViYmxlJztcclxuICB9XHJcblxyXG4gIGdldCBjYXJkVHlwZSgpOiAnc2ltcGxlQ2FyZCd7XHJcbiAgICBpZiAodGhpcy5kYXRhPy50eXBlID09PSAnc2ltcGxlQ2FyZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdzaW1wbGVDYXJkJztcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZVR5cGUoKTogJ3RhYmxlJ3tcclxuICAgIGlmICh0aGlzLmRhdGE/LnR5cGUgPT09ICd0YWJsZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd0YWJsZSc7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiY2FyZC1zZWN0aW9uXCI+XHJcbiAge3tkYXRhLnRpdGxlfX1cclxuICA8ZGl2IGNsYXNzPVwiY2FyZC1jaGFydFwiPlxyXG4gICAgPGxpYi1iYXItbGluZSAqbmdJZj1cInRoaXMuaW5jbHVkZUJhclR5cGUodGhpcy5kYXRhKVwiIFxyXG4gICAgICBbY2FyZF09XCJkYXRhXCIgW3R5cGVdPVwiYmFyTGluZVR5cGVcIiBbaXNEYXJrXT1cImlzRGFya1wiPjwvbGliLWJhci1saW5lPlxyXG5cclxuICAgIDxsaWItcGllICpuZ0lmPVwiWydwaWUnLCAnZG91Z2hudXQnLCAncG9sYXJBcmVhJywgJ2hhbGZEb3VnaG51dCcsICdtdWx0aVBpZSddLmluY2x1ZGVzKGRhdGEudHlwZSA/PyAnJylcIiBcclxuICAgICAgW2NhcmRdPVwiZGF0YVwiIFt0eXBlXT1cInBpZVR5cGVcIiBbaXNEYXJrXT1cImlzRGFya1wiPjwvbGliLXBpZT5cclxuXHJcbiAgICA8bGliLWJ1YmJsZSAqbmdJZj1cIlsnYnViYmxlJ10uaW5jbHVkZXMoZGF0YS50eXBlID8/ICcnKVwiIFxyXG4gICAgICBbY2FyZF09XCJkYXRhXCIgW3R5cGVdPVwiYnViYmxlVHlwZVwiIFtpc0RhcmtdPVwiaXNEYXJrXCI+PC9saWItYnViYmxlPlxyXG5cclxuICAgIDxsaWItc2ltcGxlLWNhcmQgKm5nSWY9XCJbJ3NpbXBsZUNhcmQnXS5pbmNsdWRlcyhkYXRhLnR5cGUgPz8gJycpXCIgXHJcbiAgICAgIFtjYXJkXT1cImRhdGFcIiBbdHlwZV09XCJjYXJkVHlwZVwiIFtpc0RhcmtdPVwiaXNEYXJrXCI+PC9saWItc2ltcGxlLWNhcmQ+XHJcblxyXG4gICAgPGxpYi10YWJsZSAqbmdJZj1cIlsndGFibGUnXS5pbmNsdWRlcyhkYXRhLnR5cGUgPz8gJycpXCIgXHJcbiAgICAgIFtjYXJkXT1cImRhdGFcIiBbdHlwZV09XCJ0YWJsZVR5cGVcIiBbaXNEYXJrXT1cImlzRGFya1wiPjwvbGliLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWh0bWxcIiAqbmdJZj1cImRhdGEudHlwZSA9PSAnaHRtbCdcIiBbaW5uZXJIdG1sXT1cInNhZmVIdG1sXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPiJdfQ==
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { BaseChartDirective } from 'ng2-charts';
|
|
3
|
+
import { getContrastColor, randomColor } from '../../../services/generic';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ng2-charts";
|
|
6
|
+
export class BarLineComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.type = 'bar';
|
|
9
|
+
this.isDark = false;
|
|
10
|
+
this.card = {};
|
|
11
|
+
this.description = '';
|
|
12
|
+
this.loading = true;
|
|
13
|
+
this.canvasHeight = 0;
|
|
14
|
+
this.canvasWidth = 0;
|
|
15
|
+
this.config = {
|
|
16
|
+
type: 'bar',
|
|
17
|
+
data: {
|
|
18
|
+
labels: [],
|
|
19
|
+
datasets: []
|
|
20
|
+
},
|
|
21
|
+
options: {}
|
|
22
|
+
};
|
|
23
|
+
this.options = {
|
|
24
|
+
responsive: true,
|
|
25
|
+
maintainAspectRatio: false,
|
|
26
|
+
plugins: {
|
|
27
|
+
legend: {
|
|
28
|
+
position: 'top',
|
|
29
|
+
color: this.isDark ? '#FFF' : '#333'
|
|
30
|
+
},
|
|
31
|
+
datalabels: {
|
|
32
|
+
display: false
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
if (['stackedBar', 'verticalBar', 'verticalStackedBar', 'progressBar', 'verticalProgressBar'].includes(this.type)) {
|
|
39
|
+
this.config.type = 'bar';
|
|
40
|
+
}
|
|
41
|
+
else if (['line', 'curveLine', 'lineBar', 'lineBarStacked'].includes(this.type)) {
|
|
42
|
+
this.config.type = 'line';
|
|
43
|
+
}
|
|
44
|
+
else if (['radar'].includes(this.type)) {
|
|
45
|
+
this.config.type = 'radar';
|
|
46
|
+
}
|
|
47
|
+
this.options.indexAxis = ['verticalBar', 'verticalStackedBar', 'verticalProgressBar'].includes(this.type) ? 'y' : 'x';
|
|
48
|
+
if (['stackedBar', 'verticalStackedBar', 'lineBarStacked', 'progressBar', 'verticalProgressBar'].includes(this.type)) {
|
|
49
|
+
this.options.scales = { x: { stacked: true }, y: { stacked: true } };
|
|
50
|
+
}
|
|
51
|
+
if (['progressBar', 'verticalProgressBar'].includes(this.type) || this.card.showPorcent) {
|
|
52
|
+
this.options.plugins.tooltip = {
|
|
53
|
+
callbacks: {
|
|
54
|
+
label: function (context) {
|
|
55
|
+
return context.raw + '%';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (this.card.showLabel) {
|
|
61
|
+
this.options.plugins.datalabels = {
|
|
62
|
+
anchor: 'center',
|
|
63
|
+
align: 'center',
|
|
64
|
+
formatter: (value) => this.card.showPorcent ? value + '%' : value,
|
|
65
|
+
color: (context) => {
|
|
66
|
+
if (this.card.fontColor)
|
|
67
|
+
return this.card.fontColor;
|
|
68
|
+
const bg = context.dataset.backgroundColor;
|
|
69
|
+
return getContrastColor(bg);
|
|
70
|
+
},
|
|
71
|
+
font: {
|
|
72
|
+
weight: 'bold'
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
this.config.options = this.options;
|
|
77
|
+
this.config.data.datasets = this.formatDataset();
|
|
78
|
+
this.description = this.describeBar(this.config);
|
|
79
|
+
}
|
|
80
|
+
ngAfterViewInit() {
|
|
81
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
82
|
+
if (this.chart) {
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
this.triggerResize();
|
|
85
|
+
}, 0);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
this.resizeObserver.observe(this.container.nativeElement);
|
|
89
|
+
setTimeout(() => {
|
|
90
|
+
this.chart?.chart?.resize();
|
|
91
|
+
}, 50);
|
|
92
|
+
this.loading = false;
|
|
93
|
+
}
|
|
94
|
+
ngOnDestroy() {
|
|
95
|
+
if (this.resizeObserver) {
|
|
96
|
+
this.resizeObserver.disconnect();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
ngOnChanges(changes) {
|
|
100
|
+
if (changes['isDark']) {
|
|
101
|
+
this.applyTheme();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
applyTheme() {
|
|
105
|
+
if (this.chart) {
|
|
106
|
+
this.chart.update();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
triggerResize() {
|
|
110
|
+
if (this.chart?.chart) {
|
|
111
|
+
this.chart.chart.resize();
|
|
112
|
+
this.chart.update();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
formatDataset() {
|
|
116
|
+
if (!this.card?.data?.length)
|
|
117
|
+
return [];
|
|
118
|
+
if (!this.card.axisX?.key)
|
|
119
|
+
return [];
|
|
120
|
+
const labels = this.card.data.map(row => row[this.card.axisX?.key ?? '']);
|
|
121
|
+
this.config.data.labels = labels;
|
|
122
|
+
var sumData = [];
|
|
123
|
+
const datasets = this.card.keys?.map(item => {
|
|
124
|
+
const data = this.card.data?.map(row => {
|
|
125
|
+
const value = row[item.key];
|
|
126
|
+
return typeof value === 'string'
|
|
127
|
+
? Number(value)
|
|
128
|
+
: value ?? 0;
|
|
129
|
+
}) ?? [];
|
|
130
|
+
if (['progressBar', 'verticalProgressBar'].includes(this.type)) {
|
|
131
|
+
sumData.push(...data);
|
|
132
|
+
}
|
|
133
|
+
if (!item.color) {
|
|
134
|
+
item.color = randomColor();
|
|
135
|
+
}
|
|
136
|
+
var result = {
|
|
137
|
+
label: item.label,
|
|
138
|
+
data,
|
|
139
|
+
backgroundColor: item.color,
|
|
140
|
+
borderColor: item.color,
|
|
141
|
+
fill: item.fill ?? false,
|
|
142
|
+
};
|
|
143
|
+
if (this.card.stacked && item.stackKey) {
|
|
144
|
+
result['stack'] = item.stackKey;
|
|
145
|
+
}
|
|
146
|
+
if (item.type) {
|
|
147
|
+
result['type'] = item.type;
|
|
148
|
+
}
|
|
149
|
+
if (this.type == 'curveLine') {
|
|
150
|
+
result = {
|
|
151
|
+
...result,
|
|
152
|
+
tension: 0.4
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}) ?? [];
|
|
157
|
+
if (['progressBar', 'verticalProgressBar'].includes(this.type)) {
|
|
158
|
+
const remaining = sumData.map(s => 100 - s);
|
|
159
|
+
datasets.push({
|
|
160
|
+
label: '',
|
|
161
|
+
data: remaining,
|
|
162
|
+
backgroundColor: '#e0e0e05e',
|
|
163
|
+
borderWidth: 0
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return datasets;
|
|
167
|
+
}
|
|
168
|
+
describeBar(config) {
|
|
169
|
+
const { data } = config;
|
|
170
|
+
const labels = data?.labels || [];
|
|
171
|
+
const datasets = data?.datasets || [];
|
|
172
|
+
const axisLabel = this.card?.axisX?.label || 'categoria';
|
|
173
|
+
const barDatasets = datasets.filter((ds) => !ds.type || ds.type === 'bar');
|
|
174
|
+
const lineDatasets = datasets.filter((ds) => ds.type === 'line');
|
|
175
|
+
const seriesNames = barDatasets.map((ds) => ds.label || 'Série');
|
|
176
|
+
const lineNames = lineDatasets.map((ds) => ds.label || 'Linha');
|
|
177
|
+
let type = 'barras';
|
|
178
|
+
if (['curveLine', 'lineBar', 'lineBarStacked'].includes(this.type)) {
|
|
179
|
+
type = 'linhas';
|
|
180
|
+
}
|
|
181
|
+
let orientation = '';
|
|
182
|
+
if (['verticalBar', 'verticalStackedBar', 'verticalProgressBar'].includes(this.type)) {
|
|
183
|
+
orientation = 'vertical ';
|
|
184
|
+
}
|
|
185
|
+
let format = 'agrupadas';
|
|
186
|
+
if (['stackedBar', 'verticalStackedBar', 'lineBarStacked'].includes(this.type)) {
|
|
187
|
+
format = 'empilhadas';
|
|
188
|
+
}
|
|
189
|
+
let extra = '';
|
|
190
|
+
if (['progressBar', 'verticalProgressBar'].includes(this.type)) {
|
|
191
|
+
extra = ' demonstrando as porcentagens';
|
|
192
|
+
}
|
|
193
|
+
let description = this.card.title +
|
|
194
|
+
` - Gráfico de ${type} ${orientation}${format} por ${axisLabel}${extra}, comparando ${seriesNames.join(' e ')}`;
|
|
195
|
+
if (lineDatasets.length) {
|
|
196
|
+
description += `, com linha representando ${lineNames.join(' e ')}`;
|
|
197
|
+
}
|
|
198
|
+
description += '. ';
|
|
199
|
+
labels.forEach((label, index) => {
|
|
200
|
+
const barValues = barDatasets.map((ds) => {
|
|
201
|
+
const value = ds.data?.[index] ?? 'sem valor';
|
|
202
|
+
return `${ds.label}: ${value}`;
|
|
203
|
+
});
|
|
204
|
+
let lineValueText = '';
|
|
205
|
+
if (lineDatasets.length) {
|
|
206
|
+
const lineValues = lineDatasets.map((ds) => {
|
|
207
|
+
const value = ds.data?.[index] ?? 'sem valor';
|
|
208
|
+
return `${ds.label}: ${value}`;
|
|
209
|
+
});
|
|
210
|
+
lineValueText = `. Linha: ${lineValues.join(', ')}`;
|
|
211
|
+
}
|
|
212
|
+
description += `\nEm ${label}: ${barValues.join(', ')}${lineValueText}.`;
|
|
213
|
+
});
|
|
214
|
+
return description.trim();
|
|
215
|
+
}
|
|
216
|
+
describeStackedBar(labels, datasets) {
|
|
217
|
+
return this.card.title + ` - Gráfico de barras empilhadas com ${datasets.length} séries: ` +
|
|
218
|
+
datasets.map(ds => ds.label).join(', ');
|
|
219
|
+
}
|
|
220
|
+
onresize() {
|
|
221
|
+
this.triggerResize();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
BarLineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BarLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
+
BarLineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BarLineComponent, selector: "lib-bar-line", inputs: { type: "type", isDark: "isDark", card: "card" }, host: { listeners: { "window:resize": "onresize()" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"chart-div\" #container>\r\n <canvas\r\n #chart\r\n baseChart\r\n class=\"chart chart-bar chart-item\"\r\n [data]=\"config.data\"\r\n [options]=\"config.options\"\r\n [type]=\"config.type\"\r\n [title]=\"description\"\r\n >\r\n </canvas>\r\n</div>", styles: [".chart-div{width:100%;height:100%}.chart-bar{max-height:100%}.chart{width:100%!important;height:100%!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }] });
|
|
226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BarLineComponent, decorators: [{
|
|
227
|
+
type: Component,
|
|
228
|
+
args: [{ selector: 'lib-bar-line', template: "\r\n<div class=\"chart-div\" #container>\r\n <canvas\r\n #chart\r\n baseChart\r\n class=\"chart chart-bar chart-item\"\r\n [data]=\"config.data\"\r\n [options]=\"config.options\"\r\n [type]=\"config.type\"\r\n [title]=\"description\"\r\n >\r\n </canvas>\r\n</div>", styles: [".chart-div{width:100%;height:100%}.chart-bar{max-height:100%}.chart{width:100%!important;height:100%!important;position:relative}\n"] }]
|
|
229
|
+
}], ctorParameters: function () { return []; }, propDecorators: { type: [{
|
|
230
|
+
type: Input
|
|
231
|
+
}], isDark: [{
|
|
232
|
+
type: Input
|
|
233
|
+
}], card: [{
|
|
234
|
+
type: Input
|
|
235
|
+
}], container: [{
|
|
236
|
+
type: ViewChild,
|
|
237
|
+
args: ['container']
|
|
238
|
+
}], chart: [{
|
|
239
|
+
type: ViewChild,
|
|
240
|
+
args: [BaseChartDirective]
|
|
241
|
+
}], onresize: [{
|
|
242
|
+
type: HostListener,
|
|
243
|
+
args: ['window:resize']
|
|
244
|
+
}] } });
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbW9yZGFzaC9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnRzL2Jhci1saW5lL2Jhci1saW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9iYXItbGluZS9iYXItbGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXlCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUc1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFPMUUsTUFBTSxPQUFPLGdCQUFnQjtJQXVDM0I7UUFyQ1MsU0FBSSxHQUF3QixLQUFLLENBQUM7UUFDbEMsV0FBTSxHQUFXLEtBQUssQ0FBQztRQUN2QixTQUFJLEdBQVEsRUFBVSxDQUFDO1FBRWhDLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsaUJBQVksR0FBVSxDQUFDLENBQUM7UUFDeEIsZ0JBQVcsR0FBVSxDQUFDLENBQUM7UUFPdkIsV0FBTSxHQUFpRDtZQUNyRCxJQUFJLEVBQUUsS0FBSztZQUNYLElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsRUFBRTtnQkFDVixRQUFRLEVBQUUsRUFBRTthQUNiO1lBQ0QsT0FBTyxFQUFDLEVBQTRDO1NBQ3JELENBQUM7UUFFRixZQUFPLEdBQTBDO1lBQy9DLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsT0FBTyxFQUFFO2dCQUNQLE1B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LENBQUM7SUFHRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OzhHQS9QVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQixzU0FZaEIsa0JBQWtCLHFFQ3ZCL0IsbVNBWU07NEZERE8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7MEVBTWYsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBT2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUyxLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFpUDdCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYXJ0LCBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YSwgQ2hhcnREYXRhc2V0LCBDaGFydE9wdGlvbnMsIENoYXJ0VHlwZSB9IGZyb20gJ2NoYXJ0LmpzJztcclxuaW1wb3J0IHsgQ2FyZCwgQ2hhdENvbmZpZywgRGFzaGJvYXJkQmFyTGluZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGFzaGJvYXJkLm1vZGVsJztcclxuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XHJcbmltcG9ydCB7IGdldENvbnRyYXN0Q29sb3IsIHJhbmRvbUNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2VuZXJpYyc7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICdjaGFydGpzLXBsdWdpbi1kYXRhbGFiZWxzJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYmFyLWxpbmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXItbGluZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmFyLWxpbmUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFyTGluZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6RGFzaGJvYXJkQmFyTGluZVR5cGUgPSAnYmFyJztcclxuICBASW5wdXQoKSBpc0Rhcms6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhcmQ6Q2FyZCA9IHt9IGFzIENhcmQ7XHJcblxyXG4gIGRlc2NyaXB0aW9uOnN0cmluZyA9ICcnO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNhbnZhc0hlaWdodDpudW1iZXIgPSAwO1xyXG4gIGNhbnZhc1dpZHRoOm51bWJlciA9IDA7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoQmFzZUNoYXJ0RGlyZWN0aXZlKSBjaGFydD86IEJhc2VDaGFydERpcmVjdGl2ZTtcclxuICBcclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIGNvbmZpZzogQ2hhcnRDb25maWd1cmF0aW9uPCdiYXInIHwgJ2xpbmUnIHwgJ3JhZGFyJz4gPSB7XHJcbiAgICB0eXBlOiAnYmFyJyxcclxuICAgIGRhdGE6IHtcclxuICAgICAgbGFiZWxzOiBbXSxcclxuICAgICAgZGF0YXNldHM6IFtdXHJcbiAgICB9LFxyXG4gICAgb3B0aW9uczp7fSBhcyBDaGFydE9wdGlvbnM8J2JhcicgfCAnbGluZScgfCAncmFkYXInPlxyXG4gIH07XHJcblxyXG4gIG9wdGlvbnM6Q2hhcnRPcHRpb25zPCdiYXInIHwgJ2xpbmUnIHwgJ3JhZGFyJz4gPSB7XHJcbiAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXHJcbiAgICBwbHVnaW5zOiB7XHJcbiAgICAgIGxlZ2VuZDoge1xyXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgICBjb2xvcjogdGhpcy5pc0RhcmsgPyAnI0ZGRicgOiAnIzMzMydcclxuICAgICAgfSxcclxuICAgICAgZGF0YWxhYmVsczoge1xyXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGFzIENoYXJ0T3B0aW9uczwnYmFyJyB8ICdsaW5lJyB8ICdyYWRhcic+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmKFsnc3RhY2tlZEJhcicsJ3ZlcnRpY2FsQmFyJywndmVydGljYWxTdGFja2VkQmFyJywncHJvZ3Jlc3NCYXInLCd2ZXJ0aWNhbFByb2dyZXNzQmFyJ10uaW5jbHVkZXModGhpcy50eXBlKSApe1xyXG4gICAgICB0aGlzLmNvbmZpZy50eXBlID0gJ2Jhcic7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKFsnbGluZScsICdjdXJ2ZUxpbmUnLCdsaW5lQmFyJywnbGluZUJhclN0YWNrZWQnXS5pbmNsdWRlcyh0aGlzLnR5cGUpKXtcclxuICAgICAgdGhpcy5jb25maWcudHlwZSA9ICdsaW5lJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYoWydyYWRhciddLmluY2x1ZGVzKHRoaXMudHlwZSkpe1xyXG4gICAgICB0aGlzLmNvbmZpZy50eXBlID0gJ3JhZGFyJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvbnMhLmluZGV4QXhpcyA9IFsndmVydGljYWxCYXInLCd2ZXJ0aWNhbFN0YWNrZWRCYXInLCd2ZXJ0aWNhbFByb2dyZXNzQmFyJ10uaW5jbHVkZXModGhpcy50eXBlKT8gJ3knOid4JztcclxuICAgIFxyXG4gICAgaWYoWydzdGFja2VkQmFyJywndmVydGljYWxTdGFja2VkQmFyJywnbGluZUJhclN0YWNrZWQnLCAncHJvZ3Jlc3NCYXInLCd2ZXJ0aWNhbFByb2dyZXNzQmFyJ10uaW5jbHVkZXModGhpcy50eXBlKSApe1xyXG4gICAgICB0aGlzLm9wdGlvbnMuc2NhbGVzID0gIHsgeDogeyBzdGFja2VkOiB0cnVlIH0sIHk6IHsgc3RhY2tlZDogdHJ1ZSB9IH07XHJcbiAgICB9XHJcbiAgICBpZihbJ3Byb2dyZXNzQmFyJywndmVydGljYWxQcm9ncmVzc0JhciddLmluY2x1ZGVzKHRoaXMudHlwZSkgfHwgdGhpcy5jYXJkLnNob3dQb3JjZW50KXtcclxuICAgICAgdGhpcy5vcHRpb25zIS5wbHVnaW5zIS50b29sdGlwID0ge1xyXG4gICAgICAgIGNhbGxiYWNrczoge1xyXG4gICAgICAgICAgbGFiZWw6IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmF3ICsgJyUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jYXJkLnNob3dMYWJlbCl7XHJcbiAgICAgIHRoaXMub3B0aW9ucyEucGx1Z2lucyEuZGF0YWxhYmVscyA9IHtcclxuICAgICAgICBhbmNob3I6ICdjZW50ZXInLFxyXG4gICAgICAgIGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiB0aGlzLmNhcmQuc2hvd1BvcmNlbnQ/IHZhbHVlICsgJyUnOiB2YWx1ZSxcclxuICAgICAgICBjb2xvcjogKGNvbnRleHQ6IENvbnRleHQpID0+IHtcclxuICAgICAgICAgIGlmKHRoaXMuY2FyZC5mb250Q29sb3IpIHJldHVybiB0aGlzLmNhcmQuZm9udENvbG9yXHJcbiAgICAgICAgICBjb25zdCBiZyA9IGNvbnRleHQuZGF0YXNldC5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRyYXN0Q29sb3IoYmcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZm9udDoge1xyXG4gICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlnLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gdGhpcy5mb3JtYXREYXRhc2V0KCk7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gIHRoaXMuZGVzY3JpYmVCYXIodGhpcy5jb25maWcpXHJcbiAgICBcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmlnZ2VyUmVzaXplKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jaGFydD8uY2hhcnQ/LnJlc2l6ZSgpO1xyXG4gICAgfSwgNTApO1xyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydpc0RhcmsnXSkge1xyXG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyaWdnZXJSZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydD8uY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5jaGFydC5yZXNpemUoKTtcclxuICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGFzZXQoKTogQ2hhcnREYXRhc2V0PCdiYXInIHwgJ2xpbmUnIHwgJ3JhZGFyJz5bXSB7XHJcbiAgICBpZiAoIXRoaXMuY2FyZD8uZGF0YT8ubGVuZ3RoICkgcmV0dXJuIFtdO1xyXG4gICAgaWYgKCF0aGlzLmNhcmQuYXhpc1g/LmtleSkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5jYXJkLmRhdGEubWFwKHJvdyA9PiByb3dbdGhpcy5jYXJkLmF4aXNYPy5rZXkgPz8gJyddKTtcclxuICAgIHRoaXMuY29uZmlnLmRhdGEubGFiZWxzID0gbGFiZWxzO1xyXG4gICAgdmFyIHN1bURhdGE6IG51bWJlcltdID0gW11cclxuICAgIGNvbnN0IGRhdGFzZXRzOiBDaGFydERhdGFzZXQ8J2JhcicgfCAnbGluZScgfCAncmFkYXInPltdID0gdGhpcy5jYXJkLmtleXM/Lm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2FyZC5kYXRhPy5tYXAocm93ID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1tpdGVtLmtleV07XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgOiB2YWx1ZSA/PyAwO1xyXG4gICAgICB9KSA/PyBbXTtcclxuICAgICAgaWYoWydwcm9ncmVzc0JhcicsJ3ZlcnRpY2FsUHJvZ3Jlc3NCYXInXS5pbmNsdWRlcyh0aGlzLnR5cGUpKXtcclxuICAgICAgICBzdW1EYXRhLnB1c2goLi4uZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYoIWl0ZW0uY29sb3Ipe1xyXG4gICAgICAgIGl0ZW0uY29sb3IgPSByYW5kb21Db2xvcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uY29sb3IsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXHJcbiAgICAgICAgZmlsbDogaXRlbS5maWxsID8/IGZhbHNlLFxyXG4gICAgICB9IGFzIENoYXJ0RGF0YXNldDwnYmFyJyB8ICdsaW5lJyB8ICdyYWRhcic+O1xyXG4gICAgICBpZiggdGhpcy5jYXJkLnN0YWNrZWQgJiYgaXRlbS5zdGFja0tleSl7XHJcbiAgICAgICAgcmVzdWx0WydzdGFjayddID0gaXRlbS5zdGFja0tleTtcclxuICAgICAgfVxyXG4gICAgICBpZihpdGVtLnR5cGUpe1xyXG4gICAgICAgIHJlc3VsdFsndHlwZSddID0gaXRlbS50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMudHlwZSA9PSAnY3VydmVMaW5lJyl7XHJcbiAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgdGVuc2lvbjogMC40XHJcbiAgICAgICAgfSBhcyBDaGFydERhdGFzZXQ8J2xpbmUnPlxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KSA/PyBbXTtcclxuICAgIGlmIChbJ3Byb2dyZXNzQmFyJywndmVydGljYWxQcm9ncmVzc0JhciddLmluY2x1ZGVzKHRoaXMudHlwZSkpIHtcclxuICAgICAgY29uc3QgcmVtYWluaW5nID0gc3VtRGF0YS5tYXAocyA9PiAxMDAgLSBzKTtcclxuICAgICAgZGF0YXNldHMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgIGRhdGE6IHJlbWFpbmluZyxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTBlMGUwNWUnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAwXHJcbiAgICAgIH0gYXMgQ2hhcnREYXRhc2V0PCdiYXInPik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YXNldHM7XHJcbiAgfVxyXG4gIFxyXG4gIGRlc2NyaWJlQmFyKGNvbmZpZzogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHsgZGF0YSB9ID0gY29uZmlnO1xyXG5cclxuICAgIGNvbnN0IGxhYmVscyA9IGRhdGE/LmxhYmVscyB8fCBbXTtcclxuICAgIGNvbnN0IGRhdGFzZXRzID0gZGF0YT8uZGF0YXNldHMgfHwgW107XHJcblxyXG4gICAgY29uc3QgYXhpc0xhYmVsID0gdGhpcy5jYXJkPy5heGlzWD8ubGFiZWwgfHwgJ2NhdGVnb3JpYSc7XHJcblxyXG4gICAgY29uc3QgYmFyRGF0YXNldHMgPSBkYXRhc2V0cy5maWx0ZXIoKGRzOiBhbnkpID0+ICFkcy50eXBlIHx8IGRzLnR5cGUgPT09ICdiYXInKTtcclxuICAgIGNvbnN0IGxpbmVEYXRhc2V0cyA9IGRhdGFzZXRzLmZpbHRlcigoZHM6IGFueSkgPT4gZHMudHlwZSA9PT0gJ2xpbmUnKTtcclxuXHJcbiAgICBjb25zdCBzZXJpZXNOYW1lcyA9IGJhckRhdGFzZXRzLm1hcCgoZHM6IGFueSkgPT4gZHMubGFiZWwgfHwgJ1PDqXJpZScpO1xyXG4gICAgY29uc3QgbGluZU5hbWVzID0gbGluZURhdGFzZXRzLm1hcCgoZHM6IGFueSkgPT4gZHMubGFiZWwgfHwgJ0xpbmhhJyk7XHJcbiAgICBsZXQgdHlwZSA9ICdiYXJyYXMnO1xyXG4gICAgaWYgKFsnY3VydmVMaW5lJywnbGluZUJhcicsJ2xpbmVCYXJTdGFja2VkJ10uaW5jbHVkZXModGhpcy50eXBlKSkge1xyXG4gICAgICB0eXBlID0gJ2xpbmhhcyc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9yaWVudGF0aW9uID0gJyc7XHJcbiAgICBpZiAoWyd2ZXJ0aWNhbEJhcicsICd2ZXJ0aWNhbFN0YWNrZWRCYXInLCAndmVydGljYWxQcm9ncmVzc0JhciddLmluY2x1ZGVzKHRoaXMudHlwZSkpIHtcclxuICAgICAgb3JpZW50YXRpb24gPSAndmVydGljYWwgJztcclxuICAgIH1cclxuICAgIGxldCBmb3JtYXQgPSAnYWdydXBhZGFzJztcclxuICAgIGlmIChbJ3N0YWNrZWRCYXInLCAndmVydGljYWxTdGFja2VkQmFyJywgJ2xpbmVCYXJTdGFja2VkJ10uaW5jbHVkZXModGhpcy50eXBlKSkge1xyXG4gICAgICBmb3JtYXQgPSAnZW1waWxoYWRhcyc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4dHJhID0gJyc7XHJcbiAgICBpZiAoWydwcm9ncmVzc0JhcicsICd2ZXJ0aWNhbFByb2dyZXNzQmFyJ10uaW5jbHVkZXModGhpcy50eXBlKSkge1xyXG4gICAgICBleHRyYSA9ICcgZGVtb25zdHJhbmRvIGFzIHBvcmNlbnRhZ2Vucyc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRlc2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5jYXJkLnRpdGxlICtcclxuICAgICAgYCAtIEdyw6FmaWNvIGRlICR7dHlwZX0gJHtvcmllbnRhdGlvbn0ke2Zvcm1hdH0gcG9yICR7YXhpc0xhYmVsfSR7ZXh0cmF9LCBjb21wYXJhbmRvICR7c2VyaWVzTmFtZXMuam9pbignIGUgJyl9YDtcclxuXHJcbiAgICBpZiAobGluZURhdGFzZXRzLmxlbmd0aCkge1xyXG4gICAgICBkZXNjcmlwdGlvbiArPSBgLCBjb20gbGluaGEgcmVwcmVzZW50YW5kbyAke2xpbmVOYW1lcy5qb2luKCcgZSAnKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc2NyaXB0aW9uICs9ICcuICc7XHJcblxyXG4gICAgbGFiZWxzLmZvckVhY2goKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgYmFyVmFsdWVzID0gYmFyRGF0YXNldHMubWFwKChkczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkcy5kYXRhPy5baW5kZXhdID8/ICdzZW0gdmFsb3InO1xyXG4gICAgICAgIHJldHVybiBgJHtkcy5sYWJlbH06ICR7dmFsdWV9YDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgbGluZVZhbHVlVGV4dCA9ICcnO1xyXG5cclxuICAgICAgaWYgKGxpbmVEYXRhc2V0cy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBsaW5lVmFsdWVzID0gbGluZURhdGFzZXRzLm1hcCgoZHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBkcy5kYXRhPy5baW5kZXhdID8/ICdzZW0gdmFsb3InO1xyXG4gICAgICAgICAgcmV0dXJuIGAke2RzLmxhYmVsfTogJHt2YWx1ZX1gO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsaW5lVmFsdWVUZXh0ID0gYC4gTGluaGE6ICR7bGluZVZhbHVlcy5qb2luKCcsICcpfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlc2NyaXB0aW9uICs9IGBcXG5FbSAke2xhYmVsfTogJHtiYXJWYWx1ZXMuam9pbignLCAnKX0ke2xpbmVWYWx1ZVRleHR9LmA7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb24udHJpbSgpO1xyXG4gIH1cclxuXHJcbiAgZGVzY3JpYmVTdGFja2VkQmFyKGxhYmVsczogYW55W10sIGRhdGFzZXRzOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXJkLnRpdGxlICsgYCAtIEdyw6FmaWNvIGRlIGJhcnJhcyBlbXBpbGhhZGFzIGNvbSAke2RhdGFzZXRzLmxlbmd0aH0gc8OpcmllczogYCArXHJcbiAgICAgIGRhdGFzZXRzLm1hcChkcyA9PiBkcy5sYWJlbCkuam9pbignLCAnKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9ucmVzaXplKCkge1xyXG4gICAgdGhpcy50cmlnZ2VyUmVzaXplKCk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCJcclxuPGRpdiBjbGFzcz1cImNoYXJ0LWRpdlwiICNjb250YWluZXI+XHJcbiAgPGNhbnZhc1xyXG4gICAgI2NoYXJ0XHJcbiAgICBiYXNlQ2hhcnRcclxuICAgIGNsYXNzPVwiY2hhcnQgY2hhcnQtYmFyIGNoYXJ0LWl0ZW1cIlxyXG4gICAgW2RhdGFdPVwiY29uZmlnLmRhdGFcIlxyXG4gICAgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNcIlxyXG4gICAgW3R5cGVdPVwiY29uZmlnLnR5cGVcIlxyXG4gICAgW3RpdGxlXT1cImRlc2NyaXB0aW9uXCJcclxuICAgID5cclxuICA8L2NhbnZhcz5cclxuPC9kaXY+Il19
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { BaseChartDirective } from 'ng2-charts';
|
|
3
|
+
import { randomColor } from '../../../services/generic';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ng2-charts";
|
|
6
|
+
export class BubbleComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.type = 'bubble';
|
|
9
|
+
this.isDark = false;
|
|
10
|
+
this.card = {};
|
|
11
|
+
this.loading = true;
|
|
12
|
+
this.canvasHeight = 0;
|
|
13
|
+
this.canvasWidth = 0;
|
|
14
|
+
this.config = {
|
|
15
|
+
type: this.type,
|
|
16
|
+
data: {
|
|
17
|
+
labels: [],
|
|
18
|
+
datasets: []
|
|
19
|
+
},
|
|
20
|
+
options: {}
|
|
21
|
+
};
|
|
22
|
+
this.options = {
|
|
23
|
+
responsive: true,
|
|
24
|
+
maintainAspectRatio: false,
|
|
25
|
+
plugins: {
|
|
26
|
+
legend: {
|
|
27
|
+
position: 'top',
|
|
28
|
+
color: this.isDark ? '#FFF' : '#333',
|
|
29
|
+
},
|
|
30
|
+
datalabels: {
|
|
31
|
+
display: false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.options.indexAxis = this.card.axisOrientation ?? 'x';
|
|
38
|
+
if (this.card.stacked) {
|
|
39
|
+
this.options.scales = { x: { stacked: true }, y: { stacked: true } };
|
|
40
|
+
}
|
|
41
|
+
if (this.card.showPorcent) {
|
|
42
|
+
this.options.plugins.tooltip = {
|
|
43
|
+
callbacks: {
|
|
44
|
+
label: function (context) {
|
|
45
|
+
return context.raw + '%';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (this.card.showLabel) {
|
|
51
|
+
this.options.plugins.datalabels = {
|
|
52
|
+
anchor: 'center',
|
|
53
|
+
align: 'center',
|
|
54
|
+
formatter: (value) => this.card.showPorcent ? value + '%' : value,
|
|
55
|
+
color: '#fff',
|
|
56
|
+
font: {
|
|
57
|
+
weight: 'bold'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
this.config.type = this.type;
|
|
62
|
+
this.config.options = this.options;
|
|
63
|
+
this.config.data.datasets = this.formatDataset();
|
|
64
|
+
}
|
|
65
|
+
ngAfterViewInit() {
|
|
66
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
67
|
+
if (this.chart) {
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
this.triggerResize();
|
|
70
|
+
}, 0);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.resizeObserver.observe(this.container.nativeElement);
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
this.chart?.chart?.resize();
|
|
76
|
+
}, 50);
|
|
77
|
+
this.loading = false;
|
|
78
|
+
}
|
|
79
|
+
ngOnDestroy() {
|
|
80
|
+
if (this.resizeObserver) {
|
|
81
|
+
this.resizeObserver.disconnect();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
triggerResize() {
|
|
85
|
+
if (this.chart?.chart) {
|
|
86
|
+
this.chart.chart.resize();
|
|
87
|
+
this.chart.update();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
formatDataset() {
|
|
91
|
+
if (!this.card?.data?.length)
|
|
92
|
+
return [];
|
|
93
|
+
if (!this.card.axisX?.key)
|
|
94
|
+
return [];
|
|
95
|
+
const labels = this.card.data.map(row => row[this.card.axisX?.key ?? '']);
|
|
96
|
+
this.config.data.labels = labels;
|
|
97
|
+
const datasets = this.card.keys?.map(item => {
|
|
98
|
+
const data = this.card.data?.map(row => {
|
|
99
|
+
const value = {
|
|
100
|
+
x: row[item.keyX ?? ''],
|
|
101
|
+
y: row[item.keyY ?? ''],
|
|
102
|
+
r: row[item.keyR ?? '']
|
|
103
|
+
};
|
|
104
|
+
return value;
|
|
105
|
+
}) ?? [];
|
|
106
|
+
if (!item.color) {
|
|
107
|
+
item.color = randomColor();
|
|
108
|
+
}
|
|
109
|
+
var result = {
|
|
110
|
+
label: item.label,
|
|
111
|
+
data,
|
|
112
|
+
backgroundColor: item.color,
|
|
113
|
+
fill: item.fill ?? false,
|
|
114
|
+
};
|
|
115
|
+
if (this.card.stacked && item.stackKey) {
|
|
116
|
+
result['stack'] = item.stackKey;
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}) ?? [];
|
|
120
|
+
return datasets;
|
|
121
|
+
}
|
|
122
|
+
onresize() {
|
|
123
|
+
this.triggerResize();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
BubbleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BubbleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
127
|
+
BubbleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BubbleComponent, selector: "lib-bubble", inputs: { type: "type", isDark: "isDark", card: "card" }, host: { listeners: { "window:resize": "onresize()" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], ngImport: i0, template: "<div class=\"chart-div\" #container>\r\n <canvas\r\n #chart\r\n baseChart\r\n class=\"chart chart-bar chart-item\"\r\n [data]=\"config.data\"\r\n [options]=\"config.options\"\r\n [type]=\"config.type\"\r\n >\r\n </canvas>\r\n</div>", styles: [".chart-div{width:100%;height:100%}.chart-bar{max-height:100%}.chart{width:100%!important;height:100%!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }] });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BubbleComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'lib-bubble', template: "<div class=\"chart-div\" #container>\r\n <canvas\r\n #chart\r\n baseChart\r\n class=\"chart chart-bar chart-item\"\r\n [data]=\"config.data\"\r\n [options]=\"config.options\"\r\n [type]=\"config.type\"\r\n >\r\n </canvas>\r\n</div>", styles: [".chart-div{width:100%;height:100%}.chart-bar{max-height:100%}.chart{width:100%!important;height:100%!important;position:relative}\n"] }]
|
|
131
|
+
}], ctorParameters: function () { return []; }, propDecorators: { type: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], isDark: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], card: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], container: [{
|
|
138
|
+
type: ViewChild,
|
|
139
|
+
args: ['container']
|
|
140
|
+
}], chart: [{
|
|
141
|
+
type: ViewChild,
|
|
142
|
+
args: [BaseChartDirective]
|
|
143
|
+
}], onresize: [{
|
|
144
|
+
type: HostListener,
|
|
145
|
+
args: ['window:resize']
|
|
146
|
+
}] } });
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9idWJibGUvYnViYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9idWJibGUvYnViYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBTXhELE1BQU0sT0FBTyxlQUFlO0lBc0MxQjtRQXBDUyxTQUFJLEdBQVksUUFBUSxDQUFDO1FBQ3pCLFdBQU0sR0FBVyxLQUFLLENBQUM7UUFDdkIsU0FBSSxHQUFRLEVBQVUsQ0FBQztRQUVoQyxZQUFPLEdBQVksSUFBSSxDQUFDO1FBQ3hCLGlCQUFZLEdBQVUsQ0FBQyxDQUFDO1FBQ3hCLGdCQUFXLEdBQVUsQ0FBQyxDQUFDO1FBT3ZCLFdBQU0sR0FBaUM7WUFDckMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxFQUFFO2FBQ2I7WUFDRCxPQUFPLEVBQUMsRUFBNEI7U0FDckMsQ0FBQztRQUVGLFlBQU8sR0FBMEI7WUFDL0IsVUFBVSxFQUFFLElBQUk7WUFDaEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxLQUFLO29CQUNmLEtBQUssRUFB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QUNqQixJQUFJO2dCQUNKLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSzthQUNDLENBQUM7WUFFNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFDO2dCQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNqQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFHRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OzZHQWhKVSxlQUFlO2lHQUFmLGVBQWUsb1NBV2Ysa0JBQWtCLGdEQ3JCL0IsZ1FBVU07NEZEQU8sZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZOzBFQU1iLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQU1rQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsS0FBSztzQkFBbkMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBbUk3QixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFydCwgQ2hhcnRDb25maWd1cmF0aW9uLCBDaGFydERhdGEsIENoYXJ0RGF0YXNldCwgQ2hhcnRPcHRpb25zLCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XHJcbmltcG9ydCB7IENhcmQsIENoYXRDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGFzaGJvYXJkLm1vZGVsJztcclxuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XHJcbmltcG9ydCB7IHJhbmRvbUNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2VuZXJpYyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWJ1YmJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2J1YmJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnViYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1YmJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6J2J1YmJsZScgPSAnYnViYmxlJztcclxuICBASW5wdXQoKSBpc0Rhcms6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhcmQ6Q2FyZCA9IHt9IGFzIENhcmQ7XHJcblxyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNhbnZhc0hlaWdodDpudW1iZXIgPSAwO1xyXG4gIGNhbnZhc1dpZHRoOm51bWJlciA9IDA7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoQmFzZUNoYXJ0RGlyZWN0aXZlKSBjaGFydD86IEJhc2VDaGFydERpcmVjdGl2ZTtcclxuXHJcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xyXG5cclxuICBjb25maWc6IENoYXJ0Q29uZmlndXJhdGlvbjwnYnViYmxlJz4gPSB7XHJcbiAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgIGxhYmVsczogW10sXHJcbiAgICAgIGRhdGFzZXRzOiBbXVxyXG4gICAgfSxcclxuICAgIG9wdGlvbnM6e30gYXMgQ2hhcnRPcHRpb25zPCdidWJibGUnPlxyXG4gIH07XHJcblxyXG4gIG9wdGlvbnM6Q2hhcnRPcHRpb25zPCdidWJibGUnPiA9IHtcclxuICAgIHJlc3BvbnNpdmU6IHRydWUsXHJcbiAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcclxuICAgIHBsdWdpbnM6IHtcclxuICAgICAgbGVnZW5kOiB7XHJcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLmlzRGFyayA/ICcjRkZGJyA6ICcjMzMzJyxcclxuICAgICAgfSxcclxuICAgICAgZGF0YWxhYmVsczoge1xyXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGFzIENoYXJ0T3B0aW9uczwnYnViYmxlJz47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vcHRpb25zIS5pbmRleEF4aXMgPSB0aGlzLmNhcmQuYXhpc09yaWVudGF0aW9uID8/ICd4JztcclxuXHJcbiAgICBpZih0aGlzLmNhcmQuc3RhY2tlZCl7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY2FsZXMgPSAgeyB4OiB7IHN0YWNrZWQ6IHRydWUgfSwgeTogeyBzdGFja2VkOiB0cnVlIH0gfTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmNhcmQuc2hvd1BvcmNlbnQpe1xyXG4gICAgICB0aGlzLm9wdGlvbnMhLnBsdWdpbnMhLnRvb2x0aXAgPSB7XHJcbiAgICAgICAgY2FsbGJhY2tzOiB7XHJcbiAgICAgICAgICBsYWJlbDogZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5yYXcgKyAnJSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jYXJkLnNob3dMYWJlbCl7XHJcbiAgICAgIHRoaXMub3B0aW9ucyEucGx1Z2lucyEuZGF0YWxhYmVscyA9IHtcclxuICAgICAgICBhbmNob3I6ICdjZW50ZXInLFxyXG4gICAgICAgIGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiB0aGlzLmNhcmQuc2hvd1BvcmNlbnQ/IHZhbHVlICsgJyUnOiB2YWx1ZSxcclxuICAgICAgICBjb2xvcjogJyNmZmYnLFxyXG4gICAgICAgIGZvbnQ6IHtcclxuICAgICAgICAgIHdlaWdodDogJ2JvbGQnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWcudHlwZSA9IHRoaXMudHlwZTtcclxuICAgIHRoaXMuY29uZmlnLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gdGhpcy5mb3JtYXREYXRhc2V0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlclJlc2l6ZSgpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhcnQ/LmNoYXJ0Py5yZXNpemUoKTtcclxuICAgIH0sIDUwKTtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgdHJpZ2dlclJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Py5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LmNoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0YXNldCgpOiBDaGFydERhdGFzZXQ8J2J1YmJsZSc+W10ge1xyXG4gICAgaWYgKCF0aGlzLmNhcmQ/LmRhdGE/Lmxlbmd0aCApIHJldHVybiBbXTtcclxuICAgIGlmICghdGhpcy5jYXJkLmF4aXNYPy5rZXkpIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNhcmQuZGF0YS5tYXAocm93ID0+IHJvd1t0aGlzLmNhcmQuYXhpc1g/LmtleSA/PyAnJ10pO1xyXG4gICAgdGhpcy5jb25maWcuZGF0YS5sYWJlbHMgPSBsYWJlbHM7XHJcblxyXG4gICAgY29uc3QgZGF0YXNldHM6IENoYXJ0RGF0YXNldDwnYnViYmxlJz5bXSA9IHRoaXMuY2FyZC5rZXlzPy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhcmQuZGF0YT8ubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB7XHJcbiAgICAgICAgICB4OiByb3dbaXRlbS5rZXlYID8/ICcnXSxcclxuICAgICAgICAgIHk6IHJvd1tpdGVtLmtleVkgPz8gJyddLFxyXG4gICAgICAgICAgcjogcm93W2l0ZW0ua2V5UiA/PyAnJ11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICBpZighaXRlbS5jb2xvcil7XHJcbiAgICAgICAgaXRlbS5jb2xvciA9IHJhbmRvbUNvbG9yKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uY29sb3IsXHJcbiAgICAgICAgZmlsbDogaXRlbS5maWxsID8/IGZhbHNlLFxyXG4gICAgICB9IGFzIENoYXJ0RGF0YXNldDwnYnViYmxlJz47XHJcbiAgICAgIFxyXG4gICAgICBpZiggdGhpcy5jYXJkLnN0YWNrZWQgJiYgaXRlbS5zdGFja0tleSl7XHJcbiAgICAgICAgcmVzdWx0WydzdGFjayddID0gaXRlbS5zdGFja0tleTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSkgPz8gW107XHJcbiAgICByZXR1cm4gZGF0YXNldHM7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvbnJlc2l6ZSgpIHtcclxuICAgIHRoaXMudHJpZ2dlclJlc2l6ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImNoYXJ0LWRpdlwiICNjb250YWluZXI+XHJcbiAgPGNhbnZhc1xyXG4gICAgI2NoYXJ0XHJcbiAgICBiYXNlQ2hhcnRcclxuICAgIGNsYXNzPVwiY2hhcnQgY2hhcnQtYmFyIGNoYXJ0LWl0ZW1cIlxyXG4gICAgW2RhdGFdPVwiY29uZmlnLmRhdGFcIlxyXG4gICAgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNcIlxyXG4gICAgW3R5cGVdPVwiY29uZmlnLnR5cGVcIlxyXG4gICAgPlxyXG4gIDwvY2FudmFzPlxyXG48L2Rpdj4iXX0=
|