@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
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { BaseChartDirective } from 'ng2-charts';
|
|
3
|
+
import { getOpacityColors, randomColor } from '../../../services/generic';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ng2-charts";
|
|
6
|
+
export class PieComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.type = 'pie';
|
|
9
|
+
this.isDark = false;
|
|
10
|
+
this.card = {};
|
|
11
|
+
this.loading = true;
|
|
12
|
+
this.canvasHeight = 0;
|
|
13
|
+
this.canvasWidth = 0;
|
|
14
|
+
this.config = {
|
|
15
|
+
type: 'pie',
|
|
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.config.type = this.type == 'halfDoughnut' ? 'doughnut' : (this.type == 'multiPie' ? 'pie' : this.type);
|
|
38
|
+
this.formatOption();
|
|
39
|
+
this.config.options = this.options;
|
|
40
|
+
this.config.data.datasets = this.formatDataset();
|
|
41
|
+
}
|
|
42
|
+
ngAfterViewInit() {
|
|
43
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
44
|
+
if (this.chart) {
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
this.triggerResize();
|
|
47
|
+
}, 0);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
this.resizeObserver.observe(this.container.nativeElement);
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
this.chart?.chart?.resize();
|
|
53
|
+
}, 50);
|
|
54
|
+
this.loading = false;
|
|
55
|
+
}
|
|
56
|
+
ngOnDestroy() {
|
|
57
|
+
if (this.resizeObserver) {
|
|
58
|
+
this.resizeObserver.disconnect();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
triggerResize() {
|
|
62
|
+
if (this.chart?.chart) {
|
|
63
|
+
this.chart.chart.resize();
|
|
64
|
+
this.chart.update();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
formatOption() {
|
|
68
|
+
if (this.type == 'halfDoughnut') {
|
|
69
|
+
this.options = {
|
|
70
|
+
...this.options,
|
|
71
|
+
rotation: -90,
|
|
72
|
+
circumference: 180
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (this.card.showPorcent) {
|
|
76
|
+
this.options.plugins.tooltip = {
|
|
77
|
+
callbacks: {
|
|
78
|
+
label: function (context) {
|
|
79
|
+
return context.raw + '%';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (this.card.showLabel) {
|
|
85
|
+
this.options.plugins.datalabels = {
|
|
86
|
+
anchor: 'center',
|
|
87
|
+
align: 'center',
|
|
88
|
+
formatter: (value) => this.card.showPorcent ? value + '%' : value,
|
|
89
|
+
color: '#fff',
|
|
90
|
+
font: {
|
|
91
|
+
weight: 'bold'
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (this.type == 'multiPie') {
|
|
96
|
+
this.options.plugins.tooltip = {
|
|
97
|
+
callbacks: {
|
|
98
|
+
title: (context) => {
|
|
99
|
+
const datasetLabel = context[0].dataset.label;
|
|
100
|
+
const sliceLabel = context[0].label;
|
|
101
|
+
return `${datasetLabel} - ${sliceLabel}`;
|
|
102
|
+
},
|
|
103
|
+
label: (context) => {
|
|
104
|
+
return context.raw + '%';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
formatDataset() {
|
|
111
|
+
if (!this.card?.data?.length)
|
|
112
|
+
return [];
|
|
113
|
+
if (!this.card.axisX?.key)
|
|
114
|
+
return [];
|
|
115
|
+
const labels = this.card.data.map(row => row[this.card.axisX?.key ?? '']);
|
|
116
|
+
const colors = this.card.data.map(row => row[this.card.axisX?.keyColor ?? ''] ?? randomColor());
|
|
117
|
+
this.config.data.labels = labels;
|
|
118
|
+
const datasets = this.card.keys?.map((item, index) => {
|
|
119
|
+
const data = this.card.data?.map(row => {
|
|
120
|
+
const value = row[item.key];
|
|
121
|
+
return typeof value === 'string'
|
|
122
|
+
? Number(value)
|
|
123
|
+
: value ?? 0;
|
|
124
|
+
}) ?? [];
|
|
125
|
+
var result = {
|
|
126
|
+
label: item.label,
|
|
127
|
+
data,
|
|
128
|
+
backgroundColor: getOpacityColors(colors, index),
|
|
129
|
+
borderColor: 'white',
|
|
130
|
+
fill: item.fill ?? false,
|
|
131
|
+
};
|
|
132
|
+
return result;
|
|
133
|
+
}) ?? [];
|
|
134
|
+
return datasets;
|
|
135
|
+
}
|
|
136
|
+
onresize() {
|
|
137
|
+
this.triggerResize();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
PieComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PieComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
+
PieComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PieComponent, selector: "lib-pie", 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"] }] });
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PieComponent, decorators: [{
|
|
143
|
+
type: Component,
|
|
144
|
+
args: [{ selector: 'lib-pie', 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"] }]
|
|
145
|
+
}], ctorParameters: function () { return []; }, propDecorators: { type: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}], isDark: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}], card: [{
|
|
150
|
+
type: Input
|
|
151
|
+
}], container: [{
|
|
152
|
+
type: ViewChild,
|
|
153
|
+
args: ['container']
|
|
154
|
+
}], chart: [{
|
|
155
|
+
type: ViewChild,
|
|
156
|
+
args: [BaseChartDirective]
|
|
157
|
+
}], onresize: [{
|
|
158
|
+
type: HostListener,
|
|
159
|
+
args: ['window:resize']
|
|
160
|
+
}] } });
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9waWUvcGllLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9waWUvcGllLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBTTFFLE1BQU0sT0FBTyxZQUFZO0lBc0N2QjtRQXBDUyxTQUFJLEdBQWtFLEtBQUssQ0FBQztRQUM1RSxXQUFNLEdBQVcsS0FBSyxDQUFDO1FBQ3ZCLFNBQUksR0FBUSxFQUFVLENBQUM7UUFFaEMsWUFBTyxHQUFZLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFVLENBQUMsQ0FBQztRQUN4QixnQkFBVyxHQUFVLENBQUMsQ0FBQztRQU92QixXQUFNLEdBQXlEO1lBQzdELElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxFQUFFO2FBQ2I7WUFDRCxPQUFPLEVBQUMsRUFBb0Q7U0FDN0QsQ0FBQztRQUVGLFlBQU8sR0FBa0Q7WUFDdkQsVUFBVSxFQUFFLElBQUk7WUFDaEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxLQUFLO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMs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SUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTWtCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUyxLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFpSjdCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYXJ0LCBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YSwgQ2hhcnREYXRhc2V0LCBDaGFydE9wdGlvbnMsIENoYXJ0VHlwZSB9IGZyb20gJ2NoYXJ0LmpzJztcclxuaW1wb3J0IHsgQ2FyZCwgQ2hhdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXNoYm9hcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBCYXNlQ2hhcnREaXJlY3RpdmUgfSBmcm9tICduZzItY2hhcnRzJztcclxuaW1wb3J0IHsgZ2V0T3BhY2l0eUNvbG9ycywgcmFuZG9tQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nZW5lcmljJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcGllJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGllLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9waWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGllQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgdHlwZToncGllJyB8ICdkb3VnaG51dCcgfCAncG9sYXJBcmVhJyB8ICdoYWxmRG91Z2hudXQnIHwgJ211bHRpUGllJyA9ICdwaWUnO1xyXG4gIEBJbnB1dCgpIGlzRGFyazpib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FyZDpDYXJkID0ge30gYXMgQ2FyZDtcclxuXHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgY2FudmFzSGVpZ2h0Om51bWJlciA9IDA7XHJcbiAgY2FudmFzV2lkdGg6bnVtYmVyID0gMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChCYXNlQ2hhcnREaXJlY3RpdmUpIGNoYXJ0PzogQmFzZUNoYXJ0RGlyZWN0aXZlO1xyXG5cclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIGNvbmZpZzogQ2hhcnRDb25maWd1cmF0aW9uPCdwaWUnIHwgJ2RvdWdobnV0JyB8ICdwb2xhckFyZWEnPiA9IHtcclxuICAgIHR5cGU6ICdwaWUnLFxyXG4gICAgZGF0YToge1xyXG4gICAgICBsYWJlbHM6IFtdLFxyXG4gICAgICBkYXRhc2V0czogW11cclxuICAgIH0sXHJcbiAgICBvcHRpb25zOnt9IGFzIENoYXJ0T3B0aW9uczwncGllJyB8ICdkb3VnaG51dCcgfCAncG9sYXJBcmVhJz5cclxuICB9O1xyXG5cclxuICBvcHRpb25zOkNoYXJ0T3B0aW9uczwncGllJyB8ICdkb3VnaG51dCcgfCAncG9sYXJBcmVhJz4gPSB7XHJcbiAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXHJcbiAgICBwbHVnaW5zOiB7XHJcbiAgICAgIGxlZ2VuZDoge1xyXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgICBjb2xvcjogdGhpcy5pc0RhcmsgPyAnI0ZGRicgOiAnIzMzMycsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGFsYWJlbHM6IHtcclxuICAgICAgICBkaXNwbGF5OiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBhcyBDaGFydE9wdGlvbnM8J3BpZScgfCAnZG91Z2hudXQnIHwgJ3BvbGFyQXJlYSc+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY29uZmlnLnR5cGUgPSB0aGlzLnR5cGUgPT0gJ2hhbGZEb3VnaG51dCc/ICdkb3VnaG51dCc6ICh0aGlzLnR5cGUgPT0gJ211bHRpUGllJz8gJ3BpZScgOiB0aGlzLnR5cGUpO1xyXG4gICAgdGhpcy5mb3JtYXRPcHRpb24oKTtcclxuICAgIHRoaXMuY29uZmlnLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gdGhpcy5mb3JtYXREYXRhc2V0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlclJlc2l6ZSgpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhcnQ/LmNoYXJ0Py5yZXNpemUoKTtcclxuICAgIH0sIDUwKTtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgdHJpZ2dlclJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Py5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LmNoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0T3B0aW9uKCl7XHJcbiAgICBpZih0aGlzLnR5cGUgPT0gJ2hhbGZEb3VnaG51dCcpe1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4udGhpcy5vcHRpb25zLFxyXG4gICAgICAgIHJvdGF0aW9uOiAtOTAsXHJcbiAgICAgICAgY2lyY3VtZmVyZW5jZTogMTgwXHJcbiAgICAgIH0gYXMgQ2hhcnRPcHRpb25zPCdkb3VnaG51dCc+XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jYXJkLnNob3dQb3JjZW50KXtcclxuICAgICAgdGhpcy5vcHRpb25zIS5wbHVnaW5zIS50b29sdGlwID0ge1xyXG4gICAgICAgIGNhbGxiYWNrczoge1xyXG4gICAgICAgICAgbGFiZWw6IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmF3ICsgJyUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuY2FyZC5zaG93TGFiZWwpe1xyXG4gICAgICB0aGlzLm9wdGlvbnMhLnBsdWdpbnMhLmRhdGFsYWJlbHMgPSB7XHJcbiAgICAgICAgYW5jaG9yOiAnY2VudGVyJyxcclxuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IG51bWJlcikgPT4gdGhpcy5jYXJkLnNob3dQb3JjZW50PyB2YWx1ZSArICclJzogdmFsdWUsXHJcbiAgICAgICAgY29sb3I6ICcjZmZmJyxcclxuICAgICAgICBmb250OiB7XHJcbiAgICAgICAgICB3ZWlnaHQ6ICdib2xkJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZih0aGlzLnR5cGUgPT0gJ211bHRpUGllJyl7XHJcbiAgICAgIHRoaXMub3B0aW9ucyEucGx1Z2lucyEudG9vbHRpcCA9IHtcclxuICAgICAgICBjYWxsYmFja3M6IHtcclxuICAgICAgICAgIHRpdGxlOiAoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0TGFiZWwgPSBjb250ZXh0WzBdLmRhdGFzZXQubGFiZWw7XHJcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlTGFiZWwgPSBjb250ZXh0WzBdLmxhYmVsO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7ZGF0YXNldExhYmVsfSAtICR7c2xpY2VMYWJlbH1gO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxhYmVsOiAoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5yYXcgKyAnJSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0YXNldCgpOiBDaGFydERhdGFzZXQ8J3BpZScgfCAnZG91Z2hudXQnIHwgJ3BvbGFyQXJlYSc+W10ge1xyXG4gICAgaWYgKCF0aGlzLmNhcmQ/LmRhdGE/Lmxlbmd0aCApIHJldHVybiBbXTtcclxuICAgIGlmICghdGhpcy5jYXJkLmF4aXNYPy5rZXkpIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNhcmQuZGF0YS5tYXAocm93ID0+IHJvd1t0aGlzLmNhcmQuYXhpc1g/LmtleSA/PyAnJ10pO1xyXG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5jYXJkLmRhdGEubWFwKHJvdyA9PiByb3dbdGhpcy5jYXJkLmF4aXNYPy5rZXlDb2xvciA/PyAnJ10gPz8gcmFuZG9tQ29sb3IoKSk7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmxhYmVscyA9IGxhYmVscztcclxuICAgIFxyXG4gICAgY29uc3QgZGF0YXNldHM6IENoYXJ0RGF0YXNldDwncGllJyB8ICdkb3VnaG51dCcgfCAncG9sYXJBcmVhJz5bXSA9IHRoaXMuY2FyZC5rZXlzPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhcmQuZGF0YT8ubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbaXRlbS5rZXldO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgIDogdmFsdWUgPz8gMDtcclxuICAgICAgfSkgPz8gW107XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBnZXRPcGFjaXR5Q29sb3JzKGNvbG9ycywgaW5kZXgpLFxyXG4gICAgICAgIGJvcmRlckNvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgIGZpbGw6IGl0ZW0uZmlsbCA/PyBmYWxzZSxcclxuICAgICAgfSBhcyBDaGFydERhdGFzZXQ8J3BpZScgfCAnZG91Z2hudXQnIHwgJ3BvbGFyQXJlYSc+O1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pID8/IFtdO1xyXG5cclxuICAgIHJldHVybiBkYXRhc2V0cztcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9ucmVzaXplKCkge1xyXG4gICAgdGhpcy50cmlnZ2VyUmVzaXplKCk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hhcnQtZGl2XCIgI2NvbnRhaW5lcj5cclxuICA8Y2FudmFzXHJcbiAgICAjY2hhcnRcclxuICAgIGJhc2VDaGFydFxyXG4gICAgY2xhc3M9XCJjaGFydCBjaGFydC1iYXIgY2hhcnQtaXRlbVwiXHJcbiAgICBbZGF0YV09XCJjb25maWcuZGF0YVwiXHJcbiAgICBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiXHJcbiAgICBbdHlwZV09XCJjb25maWcudHlwZVwiXHJcbiAgICA+XHJcbiAgPC9jYW52YXM+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { randomColor } from '../../../services/generic';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class SimpleCardComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.type = 'simpleCard';
|
|
7
|
+
this.isDark = false;
|
|
8
|
+
this.card = {};
|
|
9
|
+
this.loading = true;
|
|
10
|
+
this.currentData = {};
|
|
11
|
+
this.currentKey = {};
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this.currentData = this.card.data?.[0] ?? {};
|
|
15
|
+
this.currentKey = this.card.keys?.[0] ?? {};
|
|
16
|
+
this.currentKey.color = this.currentKey.color ?? randomColor();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
SimpleCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SimpleCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
+
SimpleCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SimpleCardComponent, selector: "lib-simple-card", inputs: { type: "type", isDark: "isDark", card: "card" }, ngImport: i0, template: "<div class=\"chart-div\" #container>\r\n <b class=\"chart-number\">{{currentData[currentKey.key]}}</b>\r\n <b class=\"chart-label\">{{currentKey.label}}</b>\r\n</div>", styles: [".chart-div{width:100%;height:100%;display:flex;flex-direction:column}.chart-number{font-size:90pt;line-height:normal;width:100%;display:flex;flex-direction:column;justify-content:center;flex-grow:1}@media (max-width: 768px){::ng-deep .dashboard:not(.responsive) .chart-number{font-size:45pt}}\n"] });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SimpleCardComponent, decorators: [{
|
|
22
|
+
type: Component,
|
|
23
|
+
args: [{ selector: 'lib-simple-card', template: "<div class=\"chart-div\" #container>\r\n <b class=\"chart-number\">{{currentData[currentKey.key]}}</b>\r\n <b class=\"chart-label\">{{currentKey.label}}</b>\r\n</div>", styles: [".chart-div{width:100%;height:100%;display:flex;flex-direction:column}.chart-number{font-size:90pt;line-height:normal;width:100%;display:flex;flex-direction:column;justify-content:center;flex-grow:1}@media (max-width: 768px){::ng-deep .dashboard:not(.responsive) .chart-number{font-size:45pt}}\n"] }]
|
|
24
|
+
}], ctorParameters: function () { return []; }, propDecorators: { type: [{
|
|
25
|
+
type: Input
|
|
26
|
+
}], isDark: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], card: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}] } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbW9yZGFzaC9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnRzL3NpbXBsZS1jYXJkL3NpbXBsZS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy9zaW1wbGUtY2FyZC9zaW1wbGUtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBT3hELE1BQU0sT0FBTyxtQkFBbUI7SUFTOUI7UUFQUyxTQUFJLEdBQWdCLFlBQVksQ0FBQztRQUNqQyxXQUFNLEdBQVcsS0FBSyxDQUFDO1FBQ3ZCLFNBQUksR0FBUSxFQUFVLENBQUM7UUFDaEMsWUFBTyxHQUFZLElBQUksQ0FBQztRQUN4QixnQkFBVyxHQUF1QixFQUFFLENBQUM7UUFDckMsZUFBVSxHQUFRLEVBQVUsQ0FBQztJQUViLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQVUsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUNoRSxDQUFDOztpSEFmVSxtQkFBbUI7cUdBQW5CLG1CQUFtQixpSENUaEMsMEtBR007NEZETU8sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjswRUFNbEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FyZCwgSXRlbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXNoYm9hcmQubW9kZWwnO1xyXG5pbXBvcnQgeyByYW5kb21Db2xvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc2ltcGxlLWNhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2ltcGxlLWNhcmQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2ltcGxlQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6J3NpbXBsZUNhcmQnID0gJ3NpbXBsZUNhcmQnO1xyXG4gIEBJbnB1dCgpIGlzRGFyazpib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FyZDpDYXJkID0ge30gYXMgQ2FyZDtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBjdXJyZW50RGF0YTpSZWNvcmQ8c3RyaW5nLG51bGw+ID0ge307XHJcbiAgY3VycmVudEtleTpJdGVtID0ge30gYXMgSXRlbTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkLmRhdGE/LlswXSA/PyB7fTtcclxuICAgIHRoaXMuY3VycmVudEtleSA9IHRoaXMuY2FyZC5rZXlzPy5bMF0gPz8ge30gYXMgSXRlbTtcclxuICAgIHRoaXMuY3VycmVudEtleS5jb2xvciA9IHRoaXMuY3VycmVudEtleS5jb2xvciA/PyByYW5kb21Db2xvcigpXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hhcnQtZGl2XCIgI2NvbnRhaW5lcj5cclxuICA8YiBjbGFzcz1cImNoYXJ0LW51bWJlclwiPnt7Y3VycmVudERhdGFbY3VycmVudEtleS5rZXldfX08L2I+XHJcbiAgPGIgY2xhc3M9XCJjaGFydC1sYWJlbFwiPnt7Y3VycmVudEtleS5sYWJlbH19PC9iPlxyXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class TableComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.type = 'table';
|
|
7
|
+
this.isDark = false;
|
|
8
|
+
this.card = {};
|
|
9
|
+
this.loading = true;
|
|
10
|
+
}
|
|
11
|
+
ngOnInit() {
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15
|
+
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableComponent, selector: "lib-table", inputs: { type: "type", isDark: "isDark", card: "card" }, ngImport: i0, template: "<div class=\"chart-div pt-2\" #container>\r\n <table class=\"table table-striped\" [class.table-dark]=\"isDark\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let key of card.keys\">{{key.label}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-group-divider\">\r\n <tr *ngFor=\"let data of card.data\">\r\n <td *ngFor=\"let key of card.keys\">{{data[key.key]}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableComponent, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{ selector: 'lib-table', template: "<div class=\"chart-div pt-2\" #container>\r\n <table class=\"table table-striped\" [class.table-dark]=\"isDark\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let key of card.keys\">{{key.label}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-group-divider\">\r\n <tr *ngFor=\"let data of card.data\">\r\n <td *ngFor=\"let key of card.keys\">{{data[key.key]}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>" }]
|
|
19
|
+
}], ctorParameters: function () { return []; }, propDecorators: { type: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}], isDark: [{
|
|
22
|
+
type: Input
|
|
23
|
+
}], card: [{
|
|
24
|
+
type: Input
|
|
25
|
+
}] } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbW9yZGFzaC9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBUXpELE1BQU0sT0FBTyxjQUFjO0lBT3pCO1FBTFMsU0FBSSxHQUFXLE9BQU8sQ0FBQztRQUN2QixXQUFNLEdBQVcsS0FBSyxDQUFDO1FBQ3ZCLFNBQUksR0FBUSxFQUFVLENBQUM7UUFDaEMsWUFBTyxHQUFZLElBQUksQ0FBQztJQUVSLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7OzRHQVZVLGNBQWM7Z0dBQWQsY0FBYywyR0NSM0IsMmNBYU07NEZETE8sY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBFQU1aLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhcmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGFzaGJvYXJkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgdHlwZTondGFibGUnID0gJ3RhYmxlJztcclxuICBASW5wdXQoKSBpc0Rhcms6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhcmQ6Q2FyZCA9IHt9IGFzIENhcmQ7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNoYXJ0LWRpdiBwdC0yXCIgI2NvbnRhaW5lcj5cclxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCIgW2NsYXNzLnRhYmxlLWRhcmtdPVwiaXNEYXJrXCI+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGtleSBvZiBjYXJkLmtleXNcIj57e2tleS5sYWJlbH19PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHkgY2xhc3M9XCJ0YWJsZS1ncm91cC1kaXZpZGVyXCI+XHJcbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjYXJkLmRhdGFcIj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBjYXJkLmtleXNcIj57e2RhdGFba2V5LmtleV19fTwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { Component, HostListener, Input, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "ngx-bootstrap/modal";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/cdk/drag-drop";
|
|
7
|
+
import * as i4 from "@angular/material/grid-list";
|
|
8
|
+
import * as i5 from "@angular/material/menu";
|
|
9
|
+
import * as i6 from "../card/card.component";
|
|
10
|
+
import * as i7 from "../modal-edit/modal-edit.component";
|
|
11
|
+
import * as i8 from "../modal-edit-chart/modal-edit-chart.component";
|
|
12
|
+
export class DashboardComponent {
|
|
13
|
+
constructor(modalService, cd) {
|
|
14
|
+
this.modalService = modalService;
|
|
15
|
+
this.cd = cd;
|
|
16
|
+
this.emptyCard = {
|
|
17
|
+
type: 'html',
|
|
18
|
+
innerHtml: '<button class="btn empty-card font-icon" >dashboard_customize</button>'
|
|
19
|
+
};
|
|
20
|
+
this.copyComplete = false;
|
|
21
|
+
this.isDark = false;
|
|
22
|
+
this.isResponsive = true;
|
|
23
|
+
this.canEdit = false;
|
|
24
|
+
this.cols = 4;
|
|
25
|
+
this.options = [
|
|
26
|
+
{ title: '1x1', cols: 1, rows: 1 },
|
|
27
|
+
{ title: '2x1', cols: 2, rows: 1 },
|
|
28
|
+
{ title: '3x1', cols: 3, rows: 1 },
|
|
29
|
+
{ title: '1x2', cols: 1, rows: 2 },
|
|
30
|
+
{ title: '2x2', cols: 2, rows: 2 },
|
|
31
|
+
];
|
|
32
|
+
this.cards = [];
|
|
33
|
+
this.groupType = [];
|
|
34
|
+
this.modalData = [];
|
|
35
|
+
this.debug = false;
|
|
36
|
+
this.drops = [];
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.cards = [...this.cards].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
40
|
+
if (this.isResponsive) {
|
|
41
|
+
this.recalcCols();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
ngAfterViewInit() {
|
|
45
|
+
this.dropsQuery.changes.subscribe(() => {
|
|
46
|
+
this.drops = this.dropsQuery.toArray();
|
|
47
|
+
});
|
|
48
|
+
Promise.resolve().then(() => {
|
|
49
|
+
this.drops = this.dropsQuery.toArray();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
entered($event) {
|
|
53
|
+
moveItemInArray(this.cards, $event.item.data, $event.container.data);
|
|
54
|
+
}
|
|
55
|
+
get orderOptions() {
|
|
56
|
+
return [...this.options].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
57
|
+
}
|
|
58
|
+
recalcCols() {
|
|
59
|
+
this.cols = Math.max(1, Math.floor(window.innerWidth / 300));
|
|
60
|
+
}
|
|
61
|
+
openModalChart(card) {
|
|
62
|
+
this.currentCard = card;
|
|
63
|
+
this.modalChartRef = this.modalService.show(this.modalChart, {
|
|
64
|
+
class: 'modal-xl modal-top',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
closeModalChart() {
|
|
68
|
+
this.modalChartRef?.hide();
|
|
69
|
+
}
|
|
70
|
+
openModalData(card) {
|
|
71
|
+
this.currentCard = card;
|
|
72
|
+
this.currentOption = card.type ?? null;
|
|
73
|
+
this.modalRef = this.modalService.show(this.modal, {
|
|
74
|
+
class: 'modal-xl modal-top',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
closeModalData() {
|
|
78
|
+
this.modalRef?.hide();
|
|
79
|
+
}
|
|
80
|
+
get jsonData() {
|
|
81
|
+
return JSON.stringify(this.currentCard);
|
|
82
|
+
}
|
|
83
|
+
openModalCode(card) {
|
|
84
|
+
this.currentCard = card;
|
|
85
|
+
this.currentOption = card.type ?? null;
|
|
86
|
+
this.modalCodeRef = this.modalService.show(this.modalCode, {
|
|
87
|
+
class: 'modal-xl modal-top',
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
closeModalCode() {
|
|
91
|
+
this.modalCodeRef?.hide();
|
|
92
|
+
}
|
|
93
|
+
copyCode() {
|
|
94
|
+
const texto = JSON.stringify(this.currentCard, null, 2);
|
|
95
|
+
navigator.clipboard.writeText(texto)
|
|
96
|
+
.then(() => {
|
|
97
|
+
this.copyComplete = true;
|
|
98
|
+
setTimeout(() => this.copyComplete = false, 1500);
|
|
99
|
+
})
|
|
100
|
+
.catch(err => {
|
|
101
|
+
console.error('Erro ao copiar:', err);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
saveData(payload) {
|
|
105
|
+
const rows = payload.rows;
|
|
106
|
+
const rowsType = payload.rowsType;
|
|
107
|
+
const currentType = rowsType == 'simple' ? rowsType : 'group';
|
|
108
|
+
if (!rows?.length)
|
|
109
|
+
return;
|
|
110
|
+
this.cards = this.cards.map(card => {
|
|
111
|
+
if (card.id !== this.currentCard.id)
|
|
112
|
+
return card;
|
|
113
|
+
const baseData = this.data[currentType];
|
|
114
|
+
if (!baseData)
|
|
115
|
+
return card;
|
|
116
|
+
const keys = rows.map((row, index) => {
|
|
117
|
+
const id = row.finalValue[row.finalValue.length - 1];
|
|
118
|
+
const last = row.selectedPath.find(r => r.id == id);
|
|
119
|
+
return {
|
|
120
|
+
key: last?.id || `key_${index}`,
|
|
121
|
+
label: last?.label || `Item ${index + 1}`,
|
|
122
|
+
fill: true,
|
|
123
|
+
color: row.finalBackgroudColor,
|
|
124
|
+
fontColor: row.finalFontColor
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
const typeLabel = this.groupType.find(t => t.id == rowsType)?.label ?? '';
|
|
128
|
+
var data = this.formatData(rowsType, rows[0]?.selectedPath, rows[0]?.finalValue);
|
|
129
|
+
return {
|
|
130
|
+
...card,
|
|
131
|
+
axisX: { key: rowsType, label: typeLabel },
|
|
132
|
+
keys: [...keys],
|
|
133
|
+
data: data
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
this.modalRef?.hide();
|
|
137
|
+
}
|
|
138
|
+
formatData(type, selectedPath, finalValue) {
|
|
139
|
+
const currentType = type == 'simple' ? type : 'group';
|
|
140
|
+
const baseData = this.data[currentType];
|
|
141
|
+
let data = [];
|
|
142
|
+
if (currentType === 'simple') {
|
|
143
|
+
var finalData = baseData;
|
|
144
|
+
finalValue?.slice(0, -1)?.forEach(r => {
|
|
145
|
+
finalData = finalData[r];
|
|
146
|
+
});
|
|
147
|
+
data = finalData;
|
|
148
|
+
}
|
|
149
|
+
else if (currentType === 'group') {
|
|
150
|
+
var finalData = baseData;
|
|
151
|
+
finalValue?.slice(0, -1)?.forEach(r => {
|
|
152
|
+
finalData = finalData[r];
|
|
153
|
+
});
|
|
154
|
+
data = finalData[type];
|
|
155
|
+
}
|
|
156
|
+
return data;
|
|
157
|
+
}
|
|
158
|
+
randomValueFromPath(row) {
|
|
159
|
+
const base = row.selectedPath.length * 10;
|
|
160
|
+
return Math.floor(Math.random() * 20) + base;
|
|
161
|
+
}
|
|
162
|
+
saveChartData(data) {
|
|
163
|
+
alert('TODO'); //proxima versao
|
|
164
|
+
this.modalRef?.hide();
|
|
165
|
+
}
|
|
166
|
+
addNewCard() {
|
|
167
|
+
const newItem = { title: 'Novo', order: 99, cols: 1, rows: 1 };
|
|
168
|
+
this.cards.push(newItem);
|
|
169
|
+
this.cd.detectChanges();
|
|
170
|
+
}
|
|
171
|
+
downloadImage(id) {
|
|
172
|
+
const canvases = document.querySelectorAll(`#card_${id} canvas`);
|
|
173
|
+
canvases.forEach((canvas, index) => {
|
|
174
|
+
const scale = 3;
|
|
175
|
+
const tempCanvas = document.createElement('canvas');
|
|
176
|
+
tempCanvas.width = canvas.width * scale;
|
|
177
|
+
tempCanvas.height = canvas.height * scale;
|
|
178
|
+
const ctx = tempCanvas.getContext('2d');
|
|
179
|
+
if (ctx) {
|
|
180
|
+
ctx.fillStyle = '#ffffff';
|
|
181
|
+
ctx.fillRect(0, 0, tempCanvas.width, tempCanvas.height);
|
|
182
|
+
ctx.scale(scale, scale);
|
|
183
|
+
ctx.drawImage(canvas, 0, 0);
|
|
184
|
+
}
|
|
185
|
+
const link = document.createElement('a');
|
|
186
|
+
link.download = `canvas_${index + 1}.png`;
|
|
187
|
+
link.href = tempCanvas.toDataURL('image/png', 1.0);
|
|
188
|
+
link.click();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
openChart(card, id) {
|
|
192
|
+
this.currentCard = card;
|
|
193
|
+
this.currentOption = card.type ?? null;
|
|
194
|
+
this.modalViewRef = this.modalService.show(this.modalView, {
|
|
195
|
+
class: 'modal-xl modal-top',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
closeModalView() {
|
|
199
|
+
this.modalViewRef?.hide();
|
|
200
|
+
}
|
|
201
|
+
onresize() {
|
|
202
|
+
if (this.isResponsive) {
|
|
203
|
+
this.recalcCols();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.BsModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
208
|
+
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardComponent, selector: "lib-dashboard", inputs: { isDark: "isDark", isResponsive: "isResponsive", canEdit: "canEdit", cols: "cols", options: "options", cards: "cards", groupType: "groupType", modalData: "modalData", data: "data", debug: "debug" }, host: { listeners: { "window:resize": "onresize()" } }, viewQueries: [{ propertyName: "modalChart", first: true, predicate: ["modalChart"], descendants: true }, { propertyName: "modal", first: true, predicate: ["modal"], descendants: true }, { propertyName: "modalView", first: true, predicate: ["modalView"], descendants: true }, { propertyName: "modalCode", first: true, predicate: ["modalCode"], descendants: true }, { propertyName: "dropsQuery", predicate: CdkDropList, descendants: true }], ngImport: i0, template: "<main class=\"dashboard\" [class.responsive]=\"isResponsive\" [class.dark-class]=\"isDark\">\r\n <mat-grid-list [cols]=\"cols\" rowHeight=\"300px\" gutterSize=\"10px\">\r\n <mat-grid-tile\r\n *ngFor=\"let card of cards; let i = index\"\r\n [colspan]=\"card.cols > cols? cols : card.cols\"\r\n [rowspan]=\"card.rows\"\r\n [class.dark-class]=\"isDark\"\r\n class=\"card\"\r\n >\r\n <div cdkDropList [cdkDropListConnectedTo]=\"drops\" [cdkDropListData]=\"i\">\r\n <div\r\n [id]=\"'card_' + i\"\r\n cdkDrag\r\n (cdkDragEntered)=\"entered($event)\"\r\n [cdkDragData]=\"i\"\r\n class=\"card-body\"\r\n [cdkDragDisabled]=\"!canEdit\"\r\n [class.dark-class]=\"isDark\"\r\n [class.has-color]=\"card.backgroundColor\"\r\n [style.background-color]=\"card.backgroundColor\"\r\n [style.color]=\"card.fontColor\"\r\n >\r\n <nav class=\"nav-hover\">\r\n <button *ngIf=\"!canEdit\" class=\"btn font-icon\" title=\"Ampliar gr\u00E1fico\" (click)=\"openChart(card, i)\">search</button>\r\n <button *ngIf=\"!canEdit\" class=\"btn font-icon\" title=\"Baixar imagem\" (click)=\"downloadImage(i)\">download</button>\r\n </nav>\r\n <nav class=\"card-nav\" *ngIf=\"canEdit\">\r\n <div class=\"card-handle font-icon\" title=\"Mover\" cdkDragHandle>\r\n drag_pan\r\n </div>\r\n <button class=\"btn card-options font-icon\" title=\"Modificar tamanho\" mat-button [matMenuTriggerFor]=\"menu\">\r\n resize\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let opt of orderOptions\">\r\n <button mat-menu-item (click)=\"card.cols = opt.cols; card.rows = opt.rows\" >{{opt.title}}</button>\r\n </ng-container>\r\n </mat-menu>\r\n <button class=\"btn font-icon\" title=\"Editar Tipo do Gr\u00E1fico\" (click)=\"openModalChart(card)\">{{'landscape_2_edit'}}</button>\r\n <button class=\"btn font-icon\" title=\"Editar fonte de dados\" (click)=\"openModalData(card)\">edit_note</button>\r\n <button class=\"btn font-icon\" *ngIf=\"debug\" title=\"Exibir c\u00F3digo de configura\u00E7\u00E3o\" (click)=\"openModalCode(card)\">code_blocks</button>\r\n </nav>\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <lib-card [data]=\"card\" [ngClass]=\"{'canEdit': canEdit}\" [isDark]=\"isDark\"></lib-card>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile class=\"card\" [colspan]=\"1\" [rowspan]=\"1\" [class.dark-class]=\"isDark\" *ngIf=\"canEdit\">\r\n <lib-card [data]=\"emptyCard\" [ngClass]=\"{'canEdit': canEdit, cardEmpty:true}\" [isDark]=\"isDark\"\r\n (click)=\"addNewCard()\"\r\n ></lib-card>\r\n </mat-grid-tile>\r\n </mat-grid-list>\r\n</main>\r\n<ng-template #modal>\r\n <lib-modal-edit (closeModal)=\"closeModalData()\" (saveData)=\"saveData($event)\" [data]=\"modalData\" [groupType]=\"groupType\"></lib-modal-edit>\r\n</ng-template>\r\n<ng-template #modalView>\r\n <header class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left mb-0\">{{currentCard.title}}</h4>\r\n <button type=\"button\" class=\"btn-close close pull-right\" aria-label=\"Close\" (click)=\"closeModalView()\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">×</span>\r\n </button>\r\n </header>\r\n <body id=\"modalViewBody\" class=\"modal-body py-2 overflow-auto\">\r\n <lib-card [data]=\"currentCard\" [ngClass]=\"{'canEdit': canEdit}\" [isDark]=\"isDark\"></lib-card>\r\n </body>\r\n</ng-template>\r\n<ng-template #modalCode>\r\n <header class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left mb-0\">{{currentCard.title}}</h4>\r\n <button type=\"button\" class=\"btn-close close pull-right\" aria-label=\"Close\" (click)=\"closeModalCode()\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">×</span>\r\n </button>\r\n </header>\r\n <body id=\"modalCodeBody\" class=\"modal-body py-2 overflow-auto\">\r\n <pre class=\"code-area\">{{ currentCard | json }}</pre>\r\n <button class=\"font-icon code-copy\" title=\"Copiar json\" (click)=\"copyCode()\">content_copy</button>\r\n <span *ngIf=\"copyComplete\" class=\"copy-message\">Copiado!</span>\r\n </body>\r\n</ng-template>\r\n<ng-template #modalChart>\r\n <lib-modal-edit-chart (closeModal)=\"closeModalChart()\" [currentOption]=\"currentOption\" (saveData)=\"saveChartData($event)\"></lib-modal-edit-chart>\r\n</ng-template>", styles: [".dashboard{padding:5px;background-color:#e4e4e4}.copy-message{position:absolute;bottom:10px;left:45%;right:auto;color:#fff;padding:5px 25px;border-radius:20px;background:#1b1b1b}.code-area{background:black;color:#fff;padding:10px;line-height:1;border-radius:10px}.code-copy{top:15px;position:absolute;color:#fff;background:#3f3f3f;right:25px;display:hidden;display:none;border-radius:25px;padding:8px;border:none}.modal-body:hover .code-copy{display:inline}.card{box-sizing:border-box;color:#000000de;background:#fff;border-radius:4px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(0,0,.2,1)}.card-body{border:solid 1px #ccc;height:100%}.card-body:active{border:solid 1px #ccc;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.card-body .card-nav{width:100%;height:30px;display:flex;border-bottom:1px solid gray}.card-body .card-nav .card-handle{cursor:move;width:24px;height:24px}.card-body .card-nav .card-options{border:none;display:flex;padding:0}.card-body .card-nav button,.card-body .card-nav .card-handle{font-size:18pt;display:flex;color:#898989;padding:0;margin-left:5px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.more-button{float:right;font-size:2em}.cdk-drop-list{height:100%;width:100%}.cdk-drag-animating{transition:unset}.cdk-drag-placeholder{display:none}.mat-grid-tile{overflow:visible!important}.mat-grid-tile-content{height:100%!important;display:flex!important}.nav-hover{display:flex;right:10px;position:absolute;top:10px;display:none}::ng-deep .mat-grid-tile:hover .nav-hover{display:inherit}::ng-deep .dark-class:not(.has-color){background-color:#000!important;color:#fff!important}::ng-deep .dark-class.card-body:not(.has-color){background-color:#1a1a1a!important;color:#fff!important}::ng-deep .mat-grid-tile-content:has(lib-card.cardEmpty .empty-card:active){background-color:#c6c6c6}::ng-deep lib-card.cardEmpty{width:100%}::ng-deep lib-card.cardEmpty .empty-card{width:100%;height:100%;text-align:center;padding:auto;font-size:28pt}::ng-deep lib-card.cardEmpty .empty-card:active{border:none}::ng-deep lib-card.canEdit{display:block;height:calc(100% - 30px)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i3.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i4.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i4.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.CardComponent, selector: "lib-card", inputs: ["data", "isDark"] }, { kind: "component", type: i7.ModalEditComponent, selector: "lib-modal-edit", inputs: ["data", "groupType"], outputs: ["closeModal", "saveData"] }, { kind: "component", type: i8.ModalEditChartComponent, selector: "lib-modal-edit-chart", inputs: ["currentOption"], outputs: ["closeModal", "saveData"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }] });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{ selector: 'lib-dashboard', template: "<main class=\"dashboard\" [class.responsive]=\"isResponsive\" [class.dark-class]=\"isDark\">\r\n <mat-grid-list [cols]=\"cols\" rowHeight=\"300px\" gutterSize=\"10px\">\r\n <mat-grid-tile\r\n *ngFor=\"let card of cards; let i = index\"\r\n [colspan]=\"card.cols > cols? cols : card.cols\"\r\n [rowspan]=\"card.rows\"\r\n [class.dark-class]=\"isDark\"\r\n class=\"card\"\r\n >\r\n <div cdkDropList [cdkDropListConnectedTo]=\"drops\" [cdkDropListData]=\"i\">\r\n <div\r\n [id]=\"'card_' + i\"\r\n cdkDrag\r\n (cdkDragEntered)=\"entered($event)\"\r\n [cdkDragData]=\"i\"\r\n class=\"card-body\"\r\n [cdkDragDisabled]=\"!canEdit\"\r\n [class.dark-class]=\"isDark\"\r\n [class.has-color]=\"card.backgroundColor\"\r\n [style.background-color]=\"card.backgroundColor\"\r\n [style.color]=\"card.fontColor\"\r\n >\r\n <nav class=\"nav-hover\">\r\n <button *ngIf=\"!canEdit\" class=\"btn font-icon\" title=\"Ampliar gr\u00E1fico\" (click)=\"openChart(card, i)\">search</button>\r\n <button *ngIf=\"!canEdit\" class=\"btn font-icon\" title=\"Baixar imagem\" (click)=\"downloadImage(i)\">download</button>\r\n </nav>\r\n <nav class=\"card-nav\" *ngIf=\"canEdit\">\r\n <div class=\"card-handle font-icon\" title=\"Mover\" cdkDragHandle>\r\n drag_pan\r\n </div>\r\n <button class=\"btn card-options font-icon\" title=\"Modificar tamanho\" mat-button [matMenuTriggerFor]=\"menu\">\r\n resize\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let opt of orderOptions\">\r\n <button mat-menu-item (click)=\"card.cols = opt.cols; card.rows = opt.rows\" >{{opt.title}}</button>\r\n </ng-container>\r\n </mat-menu>\r\n <button class=\"btn font-icon\" title=\"Editar Tipo do Gr\u00E1fico\" (click)=\"openModalChart(card)\">{{'landscape_2_edit'}}</button>\r\n <button class=\"btn font-icon\" title=\"Editar fonte de dados\" (click)=\"openModalData(card)\">edit_note</button>\r\n <button class=\"btn font-icon\" *ngIf=\"debug\" title=\"Exibir c\u00F3digo de configura\u00E7\u00E3o\" (click)=\"openModalCode(card)\">code_blocks</button>\r\n </nav>\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <lib-card [data]=\"card\" [ngClass]=\"{'canEdit': canEdit}\" [isDark]=\"isDark\"></lib-card>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile class=\"card\" [colspan]=\"1\" [rowspan]=\"1\" [class.dark-class]=\"isDark\" *ngIf=\"canEdit\">\r\n <lib-card [data]=\"emptyCard\" [ngClass]=\"{'canEdit': canEdit, cardEmpty:true}\" [isDark]=\"isDark\"\r\n (click)=\"addNewCard()\"\r\n ></lib-card>\r\n </mat-grid-tile>\r\n </mat-grid-list>\r\n</main>\r\n<ng-template #modal>\r\n <lib-modal-edit (closeModal)=\"closeModalData()\" (saveData)=\"saveData($event)\" [data]=\"modalData\" [groupType]=\"groupType\"></lib-modal-edit>\r\n</ng-template>\r\n<ng-template #modalView>\r\n <header class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left mb-0\">{{currentCard.title}}</h4>\r\n <button type=\"button\" class=\"btn-close close pull-right\" aria-label=\"Close\" (click)=\"closeModalView()\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">×</span>\r\n </button>\r\n </header>\r\n <body id=\"modalViewBody\" class=\"modal-body py-2 overflow-auto\">\r\n <lib-card [data]=\"currentCard\" [ngClass]=\"{'canEdit': canEdit}\" [isDark]=\"isDark\"></lib-card>\r\n </body>\r\n</ng-template>\r\n<ng-template #modalCode>\r\n <header class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left mb-0\">{{currentCard.title}}</h4>\r\n <button type=\"button\" class=\"btn-close close pull-right\" aria-label=\"Close\" (click)=\"closeModalCode()\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">×</span>\r\n </button>\r\n </header>\r\n <body id=\"modalCodeBody\" class=\"modal-body py-2 overflow-auto\">\r\n <pre class=\"code-area\">{{ currentCard | json }}</pre>\r\n <button class=\"font-icon code-copy\" title=\"Copiar json\" (click)=\"copyCode()\">content_copy</button>\r\n <span *ngIf=\"copyComplete\" class=\"copy-message\">Copiado!</span>\r\n </body>\r\n</ng-template>\r\n<ng-template #modalChart>\r\n <lib-modal-edit-chart (closeModal)=\"closeModalChart()\" [currentOption]=\"currentOption\" (saveData)=\"saveChartData($event)\"></lib-modal-edit-chart>\r\n</ng-template>", styles: [".dashboard{padding:5px;background-color:#e4e4e4}.copy-message{position:absolute;bottom:10px;left:45%;right:auto;color:#fff;padding:5px 25px;border-radius:20px;background:#1b1b1b}.code-area{background:black;color:#fff;padding:10px;line-height:1;border-radius:10px}.code-copy{top:15px;position:absolute;color:#fff;background:#3f3f3f;right:25px;display:hidden;display:none;border-radius:25px;padding:8px;border:none}.modal-body:hover .code-copy{display:inline}.card{box-sizing:border-box;color:#000000de;background:#fff;border-radius:4px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(0,0,.2,1)}.card-body{border:solid 1px #ccc;height:100%}.card-body:active{border:solid 1px #ccc;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.card-body .card-nav{width:100%;height:30px;display:flex;border-bottom:1px solid gray}.card-body .card-nav .card-handle{cursor:move;width:24px;height:24px}.card-body .card-nav .card-options{border:none;display:flex;padding:0}.card-body .card-nav button,.card-body .card-nav .card-handle{font-size:18pt;display:flex;color:#898989;padding:0;margin-left:5px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.more-button{float:right;font-size:2em}.cdk-drop-list{height:100%;width:100%}.cdk-drag-animating{transition:unset}.cdk-drag-placeholder{display:none}.mat-grid-tile{overflow:visible!important}.mat-grid-tile-content{height:100%!important;display:flex!important}.nav-hover{display:flex;right:10px;position:absolute;top:10px;display:none}::ng-deep .mat-grid-tile:hover .nav-hover{display:inherit}::ng-deep .dark-class:not(.has-color){background-color:#000!important;color:#fff!important}::ng-deep .dark-class.card-body:not(.has-color){background-color:#1a1a1a!important;color:#fff!important}::ng-deep .mat-grid-tile-content:has(lib-card.cardEmpty .empty-card:active){background-color:#c6c6c6}::ng-deep lib-card.cardEmpty{width:100%}::ng-deep lib-card.cardEmpty .empty-card{width:100%;height:100%;text-align:center;padding:auto;font-size:28pt}::ng-deep lib-card.cardEmpty .empty-card:active{border:none}::ng-deep lib-card.canEdit{display:block;height:calc(100% - 30px)}\n"] }]
|
|
212
|
+
}], ctorParameters: function () { return [{ type: i1.BsModalService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { isDark: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], isResponsive: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], canEdit: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], cols: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], options: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], cards: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], groupType: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], modalData: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], data: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], debug: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], dropsQuery: [{
|
|
233
|
+
type: ViewChildren,
|
|
234
|
+
args: [CdkDropList]
|
|
235
|
+
}], modalChart: [{
|
|
236
|
+
type: ViewChild,
|
|
237
|
+
args: ['modalChart']
|
|
238
|
+
}], modal: [{
|
|
239
|
+
type: ViewChild,
|
|
240
|
+
args: ['modal']
|
|
241
|
+
}], modalView: [{
|
|
242
|
+
type: ViewChild,
|
|
243
|
+
args: ['modalView']
|
|
244
|
+
}], modalCode: [{
|
|
245
|
+
type: ViewChild,
|
|
246
|
+
args: ['modalCode']
|
|
247
|
+
}], onresize: [{
|
|
248
|
+
type: HostListener,
|
|
249
|
+
args: ['window:resize']
|
|
250
|
+
}] } });
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1vcmRhc2gvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbW9yZGFzaC9zcmMvbGliL2NvbXBvbmVudHMvZGFzaGJvYXJkL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFrQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFXckUsTUFBTSxPQUFPLGtCQUFrQjtJQXdDN0IsWUFDVSxZQUE0QixFQUM1QixFQUFxQjtRQURyQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF4Qy9CLGNBQVMsR0FBUTtZQUNmLElBQUksRUFBQyxNQUFNO1lBQ1gsU0FBUyxFQUFFLHdFQUF3RTtTQUM1RSxDQUFDO1FBR1YsaUJBQVksR0FBUyxLQUFLLENBQUM7UUFFbEIsV0FBTSxHQUFXLEtBQUssQ0FBQztRQUN2QixpQkFBWSxHQUFXLElBQUksQ0FBQztRQUM1QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsWUFBTyxHQUFZO1lBQzFCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDbEMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtZQUNsQyxF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U0FBUzt1QkFBQyxXQUFXO2dCQXlNdEIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBDYXJkLCBEYXNoYm9hcmRDaGFydFR5cGUsIE1vZGFsSXRlbSwgT3B0aW9uLCBTZWxlY3QsIFNlbGVjdFJvdyB9IGZyb20gJy4uLy4uL21vZGVscy9kYXNoYm9hcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJ2NoYXJ0LmpzJztcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiwgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXNoYm9hcmQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZGFzaGJvYXJkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXNoYm9hcmQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgZW1wdHlDYXJkOkNhcmQgPSB7XHJcbiAgICB0eXBlOidodG1sJyxcclxuICAgIGlubmVySHRtbDogJzxidXR0b24gY2xhc3M9XCJidG4gZW1wdHktY2FyZCBmb250LWljb25cIiA+ZGFzaGJvYXJkX2N1c3RvbWl6ZTwvYnV0dG9uPidcclxuICB9IGFzIENhcmQ7XHJcbiAgY3VycmVudE9wdGlvbiE6RGFzaGJvYXJkQ2hhcnRUeXBlfG51bGw7XHJcbiAgY3VycmVudENhcmQhOiBDYXJkO1xyXG4gIGNvcHlDb21wbGV0ZTpib29sZWFuPWZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBpc0Rhcms6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzUmVzcG9uc2l2ZTpib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5FZGl0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29sczogbnVtYmVyID0gNDtcclxuICBASW5wdXQoKSBvcHRpb25zOk9wdGlvbltdID0gW1xyXG4gICAgeyB0aXRsZTogJzF4MScsIGNvbHM6IDEsIHJvd3M6IDEgfSxcclxuICAgIHsgdGl0bGU6ICcyeDEnLCBjb2xzOiAyLCByb3dzOiAxIH0sXHJcbiAgICB7IHRpdGxlOiAnM3gxJywgY29sczogMywgcm93czogMSB9LFxyXG4gICAgeyB0aXRsZTogJzF4MicsIGNvbHM6IDEsIHJvd3M6IDIgfSxcclxuICAgIHsgdGl0bGU6ICcyeDInLCBjb2xzOiAyLCByb3dzOiAyIH0sXHJcbiAgXVxyXG4gIEBJbnB1dCgpIGNhcmRzOiBDYXJkW10gPSBbXTtcclxuICBASW5wdXQoKSBncm91cFR5cGU6U2VsZWN0W10gPSBbXTtcclxuICBASW5wdXQoKSBtb2RhbERhdGE6TW9kYWxJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSBkYXRhITphbnk7XHJcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZHJvcHM6IENka0Ryb3BMaXN0W10gPSBbXTtcclxuXHJcbiAgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xyXG4gIG1vZGFsQ2hhcnRSZWY/OiBCc01vZGFsUmVmO1xyXG4gIG1vZGFsVmlld1JlZj86IEJzTW9kYWxSZWY7XHJcbiAgbW9kYWxDb2RlUmVmPzogQnNNb2RhbFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihDZGtEcm9wTGlzdCkgZHJvcHNRdWVyeSE6IFF1ZXJ5TGlzdDxDZGtEcm9wTGlzdD47XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxDaGFydCcpIG1vZGFsQ2hhcnQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsVmlldycpIG1vZGFsVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxDb2RlJykgbW9kYWxDb2RlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jYXJkcyA9IFsuLi50aGlzLmNhcmRzXS5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApKTtcclxuICAgIGlmKHRoaXMuaXNSZXNwb25zaXZlKXtcclxuICAgICAgdGhpcy5yZWNhbGNDb2xzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmRyb3BzUXVlcnkuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyb3BzID0gdGhpcy5kcm9wc1F1ZXJ5LnRvQXJyYXkoKTtcclxuICAgIH0pO1xyXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZHJvcHMgPSB0aGlzLmRyb3BzUXVlcnkudG9BcnJheSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbnRlcmVkKCRldmVudDogYW55KTp2b2lkIHtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNhcmRzLCAkZXZlbnQuaXRlbS5kYXRhLCAkZXZlbnQuY29udGFpbmVyLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9yZGVyT3B0aW9ucygpOiBPcHRpb25bXXtcclxuICAgIHJldHVybiBbLi4udGhpcy5vcHRpb25zXS5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY0NvbHMoKTp2b2lke1xyXG4gICAgdGhpcy5jb2xzID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aCAvIDMwMCkpO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsQ2hhcnQoY2FyZDpDYXJkKTp2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudENhcmQgPSBjYXJkO1xyXG4gICAgdGhpcy5tb2RhbENoYXJ0UmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0aGlzLm1vZGFsQ2hhcnQsIHtcclxuICAgICAgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC10b3AnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1vZGFsQ2hhcnQoKTp2b2lkIHtcclxuICAgIHRoaXMubW9kYWxDaGFydFJlZj8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsRGF0YShjYXJkOkNhcmQpOnZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50Q2FyZCA9IGNhcmQ7XHJcbiAgICB0aGlzLmN1cnJlbnRPcHRpb24gPSBjYXJkLnR5cGUgPz8gbnVsbDtcclxuICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRoaXMubW9kYWwsIHtcclxuICAgICAgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC10b3AnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1vZGFsRGF0YSgpOnZvaWQge1xyXG4gICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGpzb25EYXRhKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudENhcmQpO1xyXG4gIH1cclxuICBvcGVuTW9kYWxDb2RlKGNhcmQ6Q2FyZCk6dm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRDYXJkID0gY2FyZDtcclxuICAgIHRoaXMuY3VycmVudE9wdGlvbiA9IGNhcmQudHlwZSA/PyBudWxsO1xyXG4gICAgdGhpcy5tb2RhbENvZGVSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRoaXMubW9kYWxDb2RlLCB7XHJcbiAgICAgIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtdG9wJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNb2RhbENvZGUoKTp2b2lkIHtcclxuICAgIHRoaXMubW9kYWxDb2RlUmVmPy5oaWRlKCk7XHJcbiAgfVxyXG4gIGNvcHlDb2RlKCkge1xyXG4gICAgY29uc3QgdGV4dG8gPSBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRDYXJkLCBudWxsLCAyKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0bylcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weUNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weUNvbXBsZXRlID0gZmFsc2UsIDE1MDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGNvcGlhcjonLCBlcnIpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVEYXRhKHBheWxvYWQ6IGFueSk6dm9pZCB7XHJcbiAgICBjb25zdCByb3dzOiBTZWxlY3RSb3dbXSA9IHBheWxvYWQucm93cztcclxuICAgIGNvbnN0IHJvd3NUeXBlOiBzdHJpbmcgPSBwYXlsb2FkLnJvd3NUeXBlO1xyXG4gICAgY29uc3QgY3VycmVudFR5cGU6IHN0cmluZyA9IHJvd3NUeXBlID09ICdzaW1wbGUnPyByb3dzVHlwZSA6J2dyb3VwJztcclxuXHJcbiAgICBpZiAoIXJvd3M/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuY2FyZHMgPSB0aGlzLmNhcmRzLm1hcChjYXJkID0+IHtcclxuICAgICAgaWYgKGNhcmQuaWQgIT09IHRoaXMuY3VycmVudENhcmQuaWQpIHJldHVybiBjYXJkO1xyXG5cclxuICAgICAgY29uc3QgYmFzZURhdGEgPSB0aGlzLmRhdGFbY3VycmVudFR5cGVdO1xyXG4gICAgICBpZiAoIWJhc2VEYXRhKSByZXR1cm4gY2FyZDtcclxuXHJcbiAgICAgIGNvbnN0IGtleXM6IEl0ZW1bXSA9IHJvd3MubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSByb3cuZmluYWxWYWx1ZVtyb3cuZmluYWxWYWx1ZS5sZW5ndGggLSAxXTtcclxuICAgICAgICBjb25zdCBsYXN0ID0gcm93LnNlbGVjdGVkUGF0aC5maW5kKHIgPT4gci5pZCA9PSBpZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBrZXk6IGxhc3Q/LmlkIHx8IGBrZXlfJHtpbmRleH1gLFxyXG4gICAgICAgICAgbGFiZWw6IGxhc3Q/LmxhYmVsIHx8IGBJdGVtICR7aW5kZXggKyAxfWAsXHJcbiAgICAgICAgICBmaWxsOiB0cnVlLFxyXG4gICAgICAgICAgY29sb3I6IHJvdy5maW5hbEJhY2tncm91ZENvbG9yLFxyXG4gICAgICAgICAgZm9udENvbG9yOiByb3cuZmluYWxGb250Q29sb3JcclxuICAgICAgICB9O1xyXG4gICAgICB9KSBhcyBJdGVtW107XHJcblxyXG4gICAgICBjb25zdCB0eXBlTGFiZWwgPSB0aGlzLmdyb3VwVHlwZS5maW5kKHQgPT4gdC5pZCA9PSByb3dzVHlwZSk/LmxhYmVsID8/ICcnOyBcclxuICAgICAgdmFyIGRhdGEgPSB0aGlzLmZvcm1hdERhdGEocm93c1R5cGUsIHJvd3NbMF0/LnNlbGVjdGVkUGF0aCwgcm93c1swXT8uZmluYWxWYWx1ZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uY2FyZCxcclxuICAgICAgICBheGlzWDogeyBrZXk6IHJvd3NUeXBlLCBsYWJlbDogdHlwZUxhYmVsIH0sXHJcbiAgICAgICAga2V5czogWy4uLmtleXNdLFxyXG4gICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tb2RhbFJlZj8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0YSh0eXBlOnN0cmluZywgc2VsZWN0ZWRQYXRoOiBhbnksIGZpbmFsVmFsdWU6IHN0cmluZ1tdKTphbnlbXXtcclxuICAgIGNvbnN0IGN1cnJlbnRUeXBlOiBzdHJpbmcgPSB0eXBlID09ICdzaW1wbGUnPyB0eXBlIDonZ3JvdXAnO1xyXG4gICAgY29uc3QgYmFzZURhdGEgPSB0aGlzLmRhdGFbY3VycmVudFR5cGVdO1xyXG5cclxuICAgIGxldCBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGlmIChjdXJyZW50VHlwZSA9PT0gJ3NpbXBsZScpIHtcclxuICAgICAgdmFyIGZpbmFsRGF0YSA9IGJhc2VEYXRhO1xyXG4gICAgICBmaW5hbFZhbHVlPy5zbGljZSgwLCAtMSk/LmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgZmluYWxEYXRhID0gZmluYWxEYXRhW3JdO1xyXG4gICAgICB9KTtcclxuICAgICAgZGF0YSA9IGZpbmFsRGF0YTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRUeXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAgIHZhciBmaW5hbERhdGEgPSBiYXNlRGF0YTtcclxuICAgICAgZmluYWxWYWx1ZT8uc2xpY2UoMCwgLTEpPy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIGZpbmFsRGF0YSA9IGZpbmFsRGF0YVtyXTtcclxuICAgICAgfSk7XHJcbiAgICAgIGRhdGEgPSBmaW5hbERhdGFbdHlwZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHJhbmRvbVZhbHVlRnJvbVBhdGgocm93OiBTZWxlY3RSb3cpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYmFzZSA9IHJvdy5zZWxlY3RlZFBhdGgubGVuZ3RoICogMTA7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjApICsgYmFzZTtcclxuICB9XHJcblxyXG4gIHNhdmVDaGFydERhdGEoZGF0YTphbnkpOnZvaWQge1xyXG4gICAgYWxlcnQoJ1RPRE8nKSAvL3Byb3hpbWEgdmVyc2FvXHJcbiAgICB0aGlzLm1vZGFsUmVmPy5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdDYXJkKCk6dm9pZHtcclxuICAgIGNvbnN0IG5ld0l0ZW06Q2FyZCA9IHsgdGl0bGU6ICdOb3ZvJywgb3JkZXI6OTksIGNvbHM6IDEsIHJvd3M6IDEgfSBhcyBDYXJkO1xyXG4gICAgdGhpcy5jYXJkcy5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEltYWdlKGlkOiBudW1iZXIpOnZvaWQge1xyXG4gICAgY29uc3QgY2FudmFzZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjY2FyZF8ke2lkfSBjYW52YXNgKTtcclxuXHJcbiAgICBjYW52YXNlcy5mb3JFYWNoKChjYW52YXM6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG5cclxuICAgICAgY29uc3Qgc2NhbGUgPSAzO1xyXG4gICAgICBjb25zdCB0ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIHRlbXBDYW52YXMud2lkdGggPSBjYW52YXMud2lkdGggKiBzY2FsZTtcclxuICAgICAgdGVtcENhbnZhcy5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0ICogc2NhbGU7XHJcblxyXG4gICAgICBjb25zdCBjdHggPSB0ZW1wQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGVtcENhbnZhcy53aWR0aCwgdGVtcENhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgbGluay5kb3dubG9hZCA9IGBjYW52YXNfJHtpbmRleCArIDF9LnBuZ2A7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHRlbXBDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApO1xyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5DaGFydChjYXJkOiBDYXJkLCBpZDpudW1iZXIpOnZvaWR7XHJcbiAgICB0aGlzLmN1cnJlbnRDYXJkID0gY2FyZDtcclxuICAgIHRoaXMuY3VycmVudE9wdGlvbiA9IGNhcmQudHlwZSA/PyBudWxsO1xyXG4gICAgdGhpcy5tb2RhbFZpZXdSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRoaXMubW9kYWxWaWV3LCB7XHJcbiAgICAgIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtdG9wJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNb2RhbFZpZXcoKTp2b2lke1xyXG4gICAgdGhpcy5tb2RhbFZpZXdSZWY/LmhpZGUoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9ucmVzaXplKCkge1xyXG4gICAgaWYodGhpcy5pc1Jlc3BvbnNpdmUpe1xyXG4gICAgICB0aGlzLnJlY2FsY0NvbHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxtYWluIGNsYXNzPVwiZGFzaGJvYXJkXCIgW2NsYXNzLnJlc3BvbnNpdmVdPVwiaXNSZXNwb25zaXZlXCIgW2NsYXNzLmRhcmstY2xhc3NdPVwiaXNEYXJrXCI+XHJcbiAgPG1hdC1ncmlkLWxpc3QgW2NvbHNdPVwiY29sc1wiIHJvd0hlaWdodD1cIjMwMHB4XCIgZ3V0dGVyU2l6ZT1cIjEwcHhcIj5cclxuICAgIDxtYXQtZ3JpZC10aWxlXHJcbiAgICAgICpuZ0Zvcj1cImxldCBjYXJkIG9mIGNhcmRzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgW2NvbHNwYW5dPVwiY2FyZC5jb2xzID4gY29scz8gY29scyA6IGNhcmQuY29sc1wiXHJcbiAgICAgIFtyb3dzcGFuXT1cImNhcmQucm93c1wiXHJcbiAgICAgIFtjbGFzcy5kYXJrLWNsYXNzXT1cImlzRGFya1wiXHJcbiAgICAgIGNsYXNzPVwiY2FyZFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZHJvcHNcIiBbY2RrRHJvcExpc3REYXRhXT1cImlcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbaWRdPVwiJ2NhcmRfJyArIGlcIlxyXG4gICAgICAgICAgY2RrRHJhZ1xyXG4gICAgICAgICAgKGNka0RyYWdFbnRlcmVkKT1cImVudGVyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaVwiXHJcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keVwiXHJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjYW5FZGl0XCJcclxuICAgICAgICAgIFtjbGFzcy5kYXJrLWNsYXNzXT1cImlzRGFya1wiXHJcbiAgICAgICAgICBbY2xhc3MuaGFzLWNvbG9yXT1cImNhcmQuYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNhcmQuYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjYXJkLmZvbnRDb2xvclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5hdiBjbGFzcz1cIm5hdi1ob3ZlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWNhbkVkaXRcIiBjbGFzcz1cImJ0biBmb250LWljb25cIiB0aXRsZT1cIkFtcGxpYXIgZ3LDoWZpY29cIiAoY2xpY2spPVwib3BlbkNoYXJ0KGNhcmQsIGkpXCI+c2VhcmNoPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhY2FuRWRpdFwiIGNsYXNzPVwiYnRuIGZvbnQtaWNvblwiIHRpdGxlPVwiQmFpeGFyIGltYWdlbVwiIChjbGljayk9XCJkb3dubG9hZEltYWdlKGkpXCI+ZG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgPG5hdiBjbGFzcz1cImNhcmQtbmF2XCIgKm5nSWY9XCJjYW5FZGl0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhhbmRsZSBmb250LWljb25cIiB0aXRsZT1cIk1vdmVyXCIgY2RrRHJhZ0hhbmRsZT5cclxuICAgICAgICAgICAgICBkcmFnX3BhblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBjYXJkLW9wdGlvbnMgZm9udC1pY29uXCIgdGl0bGU9XCJNb2RpZmljYXIgdGFtYW5ob1wiIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICByZXNpemVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3JkZXJPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNhcmQuY29scyA9IG9wdC5jb2xzOyBjYXJkLnJvd3MgPSBvcHQucm93c1wiID57e29wdC50aXRsZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZm9udC1pY29uXCIgdGl0bGU9XCJFZGl0YXIgVGlwbyBkbyBHcsOhZmljb1wiIChjbGljayk9XCJvcGVuTW9kYWxDaGFydChjYXJkKVwiPnt7J2xhbmRzY2FwZV8yX2VkaXQnfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBmb250LWljb25cIiB0aXRsZT1cIkVkaXRhciBmb250ZSBkZSBkYWRvc1wiIChjbGljayk9XCJvcGVuTW9kYWxEYXRhKGNhcmQpXCI+ZWRpdF9ub3RlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZm9udC1pY29uXCIgKm5nSWY9XCJkZWJ1Z1wiIHRpdGxlPVwiRXhpYmlyIGPDs2RpZ28gZGUgY29uZmlndXJhw6fDo29cIiAoY2xpY2spPVwib3Blbk1vZGFsQ29kZShjYXJkKVwiPmNvZGVfYmxvY2tzPC9idXR0b24+XHJcbiAgICAgICAgICA8L25hdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxyXG4gICAgICAgICAgPGxpYi1jYXJkIFtkYXRhXT1cImNhcmRcIiBbbmdDbGFzc109XCJ7J2NhbkVkaXQnOiBjYW5FZGl0fVwiIFtpc0RhcmtdPVwiaXNEYXJrXCI+PC9saWItY2FyZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1ncmlkLXRpbGU+XHJcbiAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImNhcmRcIiBbY29sc3Bhbl09XCIxXCIgW3Jvd3NwYW5dPVwiMVwiIFtjbGFzcy5kYXJrLWNsYXNzXT1cImlzRGFya1wiICpuZ0lmPVwiY2FuRWRpdFwiPlxyXG4gICAgICA8bGliLWNhcmQgW2RhdGFdPVwiZW1wdHlDYXJkXCIgW25nQ2xhc3NdPVwieydjYW5FZGl0JzogY2FuRWRpdCwgY2FyZEVtcHR5OnRydWV9XCIgW2lzRGFya109XCJpc0RhcmtcIlxyXG4gICAgICAgIChjbGljayk9XCJhZGROZXdDYXJkKClcIlxyXG4gICAgICA+PC9saWItY2FyZD5cclxuICAgIDwvbWF0LWdyaWQtdGlsZT5cclxuICA8L21hdC1ncmlkLWxpc3Q+XHJcbjwvbWFpbj5cclxuPG5nLXRlbXBsYXRlICNtb2RhbD5cclxuICA8bGliLW1vZGFsLWVkaXQgKGNsb3NlTW9kYWwpPVwiY2xvc2VNb2RhbERhdGEoKVwiICAoc2F2ZURhdGEpPVwic2F2ZURhdGEoJGV2ZW50KVwiIFtkYXRhXT1cIm1vZGFsRGF0YVwiIFtncm91cFR5cGVdPVwiZ3JvdXBUeXBlXCI+PC9saWItbW9kYWwtZWRpdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNtb2RhbFZpZXc+XHJcbiAgPGhlYWRlciBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0IG1iLTBcIj57e2N1cnJlbnRDYXJkLnRpdGxlfX08L2g0PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgY2xvc2UgcHVsbC1yaWdodFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJjbG9zZU1vZGFsVmlldygpXCI+XHJcbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxib2R5IGlkPVwibW9kYWxWaWV3Qm9keVwiIGNsYXNzPVwibW9kYWwtYm9keSBweS0yIG92ZXJmbG93LWF1dG9cIj5cclxuICAgIDxsaWItY2FyZCBbZGF0YV09XCJjdXJyZW50Q2FyZFwiIFtuZ0NsYXNzXT1cInsnY2FuRWRpdCc6IGNhbkVkaXR9XCIgW2lzRGFya109XCJpc0RhcmtcIj48L2xpYi1jYXJkPlxyXG4gIDwvYm9keT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNtb2RhbENvZGU+XHJcbiAgPGhlYWRlciBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0IG1iLTBcIj57e2N1cnJlbnRDYXJkLnRpdGxlfX08L2g0PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgY2xvc2UgcHVsbC1yaWdodFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJjbG9zZU1vZGFsQ29kZSgpXCI+XHJcbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxib2R5IGlkPVwibW9kYWxDb2RlQm9keVwiIGNsYXNzPVwibW9kYWwtYm9keSBweS0yIG92ZXJmbG93LWF1dG9cIj5cclxuICAgIDxwcmUgY2xhc3M9XCJjb2RlLWFyZWFcIj57eyBjdXJyZW50Q2FyZCB8IGpzb24gfX08L3ByZT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJmb250LWljb24gY29kZS1jb3B5XCIgdGl0bGU9XCJDb3BpYXIganNvblwiIChjbGljayk9XCJjb3B5Q29kZSgpXCI+Y29udGVudF9jb3B5PC9idXR0b24+XHJcbiAgICA8c3BhbiAqbmdJZj1cImNvcHlDb21wbGV0ZVwiIGNsYXNzPVwiY29weS1tZXNzYWdlXCI+Q29waWFkbyE8L3NwYW4+XHJcbiAgPC9ib2R5PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI21vZGFsQ2hhcnQ+XHJcbiAgPGxpYi1tb2RhbC1lZGl0LWNoYXJ0IChjbG9zZU1vZGFsKT1cImNsb3NlTW9kYWxDaGFydCgpXCIgW2N1cnJlbnRPcHRpb25dPVwiY3VycmVudE9wdGlvblwiIChzYXZlRGF0YSk9XCJzYXZlQ2hhcnREYXRhKCRldmVudClcIj48L2xpYi1tb2RhbC1lZGl0LWNoYXJ0PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|