@ogidor/dashboard 1.0.0
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 +103 -0
- package/app/app.module.d.ts +22 -0
- package/app/dashboard-state.service.d.ts +49 -0
- package/app/dashboard.component.d.ts +80 -0
- package/app/models.d.ts +73 -0
- package/app/widget-renderer.component.d.ts +40 -0
- package/esm2020/app/app.module.mjs +64 -0
- package/esm2020/app/dashboard-state.service.mjs +218 -0
- package/esm2020/app/dashboard.component.mjs +703 -0
- package/esm2020/app/models.mjs +2 -0
- package/esm2020/app/widget-renderer.component.mjs +163 -0
- package/esm2020/ogidor-dashboard.mjs +5 -0
- package/esm2020/public-api.mjs +9 -0
- package/fesm2015/ogidor-dashboard.mjs +1153 -0
- package/fesm2015/ogidor-dashboard.mjs.map +1 -0
- package/fesm2020/ogidor-dashboard.mjs +1144 -0
- package/fesm2020/ogidor-dashboard.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +70 -0
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFdpZGdldFR5cGUgPSAnRE9OVVQnIHwgJ0xJTkUnIHwgJ0JBUic7XG5cbi8qKiBBIHNpbmdsZSBuYW1lZCBzZXJpZXMgZm9yIExJTkUgYW5kIEJBUiBjaGFydHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRTZXJpZXMge1xuICAvKiogTGFiZWwgc2hvd24gaW4gdGhlIGxlZ2VuZCAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBudW1lcmljIGRhdGEgcG9pbnRzICovXG4gIGRhdGE6IG51bWJlcltdO1xuICAvKiogT3B0aW9uYWwgcGVyLXNlcmllcyB4LWF4aXMgY2F0ZWdvcnkgbGFiZWxzICovXG4gIGNhdGVnb3JpZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIERhdGEgc2hhcGUgZm9yIExJTkUgYW5kIEJBUiB3aWRnZXRzICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmVCYXJEYXRhIHtcbiAgLyoqIE9uZSBvciBtb3JlIGRhdGEgc2VyaWVzICovXG4gIHNlcmllczogQ2hhcnRTZXJpZXNbXTtcbiAgLyoqIFgtYXhpcyBjYXRlZ29yeSBsYWJlbHMgc2hhcmVkIGFjcm9zcyBhbGwgc2VyaWVzICovXG4gIGNhdGVnb3JpZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIERhdGEgc2hhcGUgZm9yIERPTlVUIHdpZGdldHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9udXREYXRhIHtcbiAgLyoqIE51bWVyaWMgc2xpY2UgdmFsdWVzIOKAlCBtdXN0IG1hdGNoIHRoZSBsZW5ndGggb2YgYGxhYmVsc2AgKi9cbiAgc2VyaWVzOiBudW1iZXJbXTtcbiAgLyoqIExhYmVsIGZvciBlYWNoIHNsaWNlICovXG4gIGxhYmVscz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldCB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IFdpZGdldFR5cGU7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBjb2xzOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqIFR5cGVkIGFzIExpbmVCYXJEYXRhIHwgRG9udXREYXRhIGRlcGVuZGluZyBvbiBgdHlwZWAgKi9cbiAgZGF0YTogTGluZUJhckRhdGEgfCBEb251dERhdGE7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBwZXItd2lkZ2V0IHNlcmllcyBjb2xvcnMuIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIHRoZW1lIGNoYXJ0Q29sb3JzLiAqL1xuICBjb2xvcnM/OiBzdHJpbmdbXTtcbiAgLyoqIE9wdGlvbmFsIHBlci13aWRnZXQgY2FyZCBiYWNrZ3JvdW5kIGNvbG9yLiBPdmVycmlkZXMgdGhlIGdsb2JhbCB0aGVtZSB3aWRnZXRDYXJkQ29sb3IuICovXG4gIGNhcmRDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB3aWRnZXRzOiBXaWRnZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDb25maWcge1xuICBwYWdlczogUGFnZVtdO1xuICBhY3RpdmVQYWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGVtZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGFzaGJvYXJkLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIOKAlCBhbnkgdmFsdWVzIG5vdCBwcm92aWRlZCB3aWxsIGZhbGwgYmFjayB0byBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRUaGVtZSB7XG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBvdmVyYWxsIGRhc2hib2FyZCB3cmFwcGVyLiBEZWZhdWx0OiBgIzAwMDAwMGAgKi9cbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAvKiogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgbWFpbiBjb250ZW50IHBhbmVsLiBEZWZhdWx0OiBgIzFjMWMxZWAgKi9cbiAgcGFuZWxDb2xvcj86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgY29sb3Igb2YgaW5kaXZpZHVhbCB3aWRnZXQgY2FyZHMuIERlZmF1bHQ6IGAjMmMyYzJlYCAqL1xuICB3aWRnZXRDYXJkQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5IHRleHQgLyBmb3JlZ3JvdW5kIGNvbG9yIHVzZWQgaW5zaWRlIGNoYXJ0cy4gRGVmYXVsdDogYCM4ZThlOTNgICovXG4gIGNoYXJ0Rm9yZUNvbG9yPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeSBhY2NlbnQgY29sb3IgKGFjdGl2ZSB0YWJzLCBhZGQtcGFnZSBidXR0b24gaG92ZXIsIGV0Yy4pLiBEZWZhdWx0OiBgIzBhODRmZmAgKi9cbiAgYWNjZW50Q29sb3I/OiBzdHJpbmc7XG4gIC8qKiBEYW5nZXIvY2xvc2UgY29sb3IgdXNlZCBvbiB0aGUgcmVtb3ZlLXdpZGdldCBidXR0b24gaG92ZXIuIERlZmF1bHQ6IGAjZmY0NTNhYCAqL1xuICBkYW5nZXJDb2xvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFycmF5IG9mIGNvbG9ycyBmZWQgdG8gQXBleENoYXJ0cyBzZXJpZXMuXG4gICAqIERlZmF1bHQ6IGBbJyMwYTg0ZmYnLCAnIzMwZDE1OCcsICcjZmY5ZjBhJywgJyNiZjVhZjInLCAnI2ZmNDUzYSddYFxuICAgKi9cbiAgY2hhcnRDb2xvcnM/OiBzdHJpbmdbXTtcbiAgLyoqIEZvbnQgZmFtaWx5IGFwcGxpZWQgdG8gdGhlIHdob2xlIGRhc2hib2FyZC4gRGVmYXVsdDogc3lzdGVtLXVpIHN0YWNrICovXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./dashboard-state.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "ng-apexcharts";
|
|
7
|
+
const DEFAULT_CHART_COLORS = ['#0a84ff', '#30d158', '#ff9f0a', '#bf5af2', '#ff453a'];
|
|
8
|
+
const DEFAULT_FORECOLOR = '#8e8e93';
|
|
9
|
+
const DEFAULT_CARD_BG = '#2c2c2e';
|
|
10
|
+
export class WidgetRendererComponent {
|
|
11
|
+
constructor(stateService) {
|
|
12
|
+
this.stateService = stateService;
|
|
13
|
+
this.editRequested = new EventEmitter();
|
|
14
|
+
this.cardStyles = {};
|
|
15
|
+
this.subs = new Subscription();
|
|
16
|
+
}
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
this.applyStyles();
|
|
19
|
+
this.initChart();
|
|
20
|
+
this.subs.add(this.stateService.widgetData$.subscribe(({ widgetId, data }) => {
|
|
21
|
+
if (widgetId === this.widget.id) {
|
|
22
|
+
this.widget = { ...this.widget, data };
|
|
23
|
+
this.initChart();
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
ngOnChanges(changes) {
|
|
28
|
+
if (changes['theme']) {
|
|
29
|
+
this.applyStyles();
|
|
30
|
+
this.initChart();
|
|
31
|
+
}
|
|
32
|
+
if (changes['widget'] && !changes['widget'].firstChange) {
|
|
33
|
+
this.applyStyles();
|
|
34
|
+
this.initChart();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
ngOnDestroy() { this.subs.unsubscribe(); }
|
|
38
|
+
applyStyles() {
|
|
39
|
+
this.cardStyles = {
|
|
40
|
+
background: this.widget.cardColor ?? 'var(--dash-card-bg)'
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
resolvedColors() {
|
|
44
|
+
return this.widget.colors ?? this.theme?.chartColors ?? DEFAULT_CHART_COLORS;
|
|
45
|
+
}
|
|
46
|
+
initChart() {
|
|
47
|
+
const isDonut = this.widget.type === 'DONUT';
|
|
48
|
+
const colors = this.resolvedColors();
|
|
49
|
+
const foreColor = this.theme?.chartForeColor ?? DEFAULT_FORECOLOR;
|
|
50
|
+
const lineBarData = !isDonut ? this.widget.data : null;
|
|
51
|
+
const donutData = isDonut ? this.widget.data : null;
|
|
52
|
+
const categories = lineBarData?.categories ?? [];
|
|
53
|
+
const donutLabels = donutData?.labels ?? ['A', 'B', 'C', 'D', 'E'];
|
|
54
|
+
this.chartOptions = {
|
|
55
|
+
series: this.widget.data.series,
|
|
56
|
+
chart: {
|
|
57
|
+
width: '100%', height: '100%',
|
|
58
|
+
type: this.widget.type.toLowerCase(),
|
|
59
|
+
toolbar: { show: false },
|
|
60
|
+
animations: { enabled: true, speed: 400 },
|
|
61
|
+
background: 'transparent', foreColor,
|
|
62
|
+
parentHeightOffset: 0, sparkline: { enabled: false },
|
|
63
|
+
},
|
|
64
|
+
theme: { mode: 'dark' },
|
|
65
|
+
colors,
|
|
66
|
+
stroke: { curve: 'smooth', width: isDonut ? 0 : 3 },
|
|
67
|
+
dataLabels: { enabled: false },
|
|
68
|
+
legend: { position: 'bottom', labels: { colors: foreColor } },
|
|
69
|
+
tooltip: { theme: 'dark' },
|
|
70
|
+
plotOptions: {
|
|
71
|
+
pie: { donut: { size: '70%', labels: { show: true, total: { show: true, label: 'Total', color: '#fff' } } } },
|
|
72
|
+
bar: { borderRadius: 8, columnWidth: '50%' }
|
|
73
|
+
},
|
|
74
|
+
xaxis: {
|
|
75
|
+
categories: categories.length ? categories : undefined,
|
|
76
|
+
labels: { style: { colors: foreColor } },
|
|
77
|
+
axisBorder: { show: false }, axisTicks: { show: false }
|
|
78
|
+
},
|
|
79
|
+
yaxis: { labels: { style: { colors: foreColor } } },
|
|
80
|
+
labels: isDonut ? donutLabels : undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
onRemove() { this.onRemoveWidget(this.widget.id); }
|
|
84
|
+
}
|
|
85
|
+
WidgetRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetRendererComponent, deps: [{ token: i1.DashboardStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
WidgetRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetRendererComponent, selector: "app-widget-renderer", inputs: { widget: "widget", onRemoveWidget: "onRemoveWidget", theme: "theme" }, outputs: { editRequested: "editRequested" }, usesOnChanges: true, ngImport: i0, template: `
|
|
87
|
+
<div class="widget-container" [ngStyle]="cardStyles">
|
|
88
|
+
<div class="widget-header">
|
|
89
|
+
<span class="widget-title">{{ widget.title }}</span>
|
|
90
|
+
<div class="header-actions">
|
|
91
|
+
<button class="btn-icon btn-edit" (click)="editRequested.emit(widget)" title="Edit widget">
|
|
92
|
+
<i class="la la-pen"></i>
|
|
93
|
+
</button>
|
|
94
|
+
<button class="btn-icon btn-close-widget" (click)="onRemove()" title="Remove widget">
|
|
95
|
+
<i class="la la-times"></i>
|
|
96
|
+
</button>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="widget-body">
|
|
100
|
+
<apx-chart
|
|
101
|
+
*ngIf="chartOptions.chart"
|
|
102
|
+
style="display:block;width:100%;height:100%;"
|
|
103
|
+
[series]="chartOptions.series!"
|
|
104
|
+
[chart]="chartOptions.chart!"
|
|
105
|
+
[xaxis]="chartOptions.xaxis!"
|
|
106
|
+
[stroke]="chartOptions.stroke!"
|
|
107
|
+
[dataLabels]="chartOptions.dataLabels!"
|
|
108
|
+
[plotOptions]="chartOptions.plotOptions!"
|
|
109
|
+
[yaxis]="chartOptions.yaxis!"
|
|
110
|
+
[labels]="chartOptions.labels!"
|
|
111
|
+
[legend]="chartOptions.legend!"
|
|
112
|
+
[colors]="chartOptions.colors!"
|
|
113
|
+
[theme]="chartOptions.theme!"
|
|
114
|
+
[tooltip]="chartOptions.tooltip!"
|
|
115
|
+
></apx-chart>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
`, isInline: true, styles: [".widget-container{height:100%;width:100%;display:flex;flex-direction:column;border-radius:30px;overflow:hidden;box-shadow:0 8px 24px #00000040;border:1px solid rgba(255,255,255,.08);transition:box-shadow .2s ease;box-sizing:border-box;background:var(--dash-card-bg)}.widget-container:hover{box-shadow:0 12px 32px #00000059}.widget-header{padding:14px 16px 4px;display:flex;justify-content:space-between;align-items:center;cursor:move;flex-shrink:0}.widget-title{color:#fff;font-size:15px;font-weight:600;letter-spacing:.3px}.header-actions{display:flex;gap:6px;align-items:center}.btn-icon{background:rgba(255,255,255,.08);border:none;color:var(--dash-fore-color);cursor:pointer;font-size:12px;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.btn-edit:hover{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.btn-close-widget:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.widget-body{flex:1;min-height:0;padding:4px 12px 12px;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.ChartComponent, selector: "apx-chart", inputs: ["chart", "annotations", "colors", "dataLabels", "series", "stroke", "labels", "legend", "markers", "noData", "fill", "tooltip", "plotOptions", "responsive", "xaxis", "yaxis", "forecastDataPoints", "grid", "states", "title", "subtitle", "theme", "autoUpdateSeries"] }] });
|
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetRendererComponent, decorators: [{
|
|
120
|
+
type: Component,
|
|
121
|
+
args: [{ selector: 'app-widget-renderer', template: `
|
|
122
|
+
<div class="widget-container" [ngStyle]="cardStyles">
|
|
123
|
+
<div class="widget-header">
|
|
124
|
+
<span class="widget-title">{{ widget.title }}</span>
|
|
125
|
+
<div class="header-actions">
|
|
126
|
+
<button class="btn-icon btn-edit" (click)="editRequested.emit(widget)" title="Edit widget">
|
|
127
|
+
<i class="la la-pen"></i>
|
|
128
|
+
</button>
|
|
129
|
+
<button class="btn-icon btn-close-widget" (click)="onRemove()" title="Remove widget">
|
|
130
|
+
<i class="la la-times"></i>
|
|
131
|
+
</button>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="widget-body">
|
|
135
|
+
<apx-chart
|
|
136
|
+
*ngIf="chartOptions.chart"
|
|
137
|
+
style="display:block;width:100%;height:100%;"
|
|
138
|
+
[series]="chartOptions.series!"
|
|
139
|
+
[chart]="chartOptions.chart!"
|
|
140
|
+
[xaxis]="chartOptions.xaxis!"
|
|
141
|
+
[stroke]="chartOptions.stroke!"
|
|
142
|
+
[dataLabels]="chartOptions.dataLabels!"
|
|
143
|
+
[plotOptions]="chartOptions.plotOptions!"
|
|
144
|
+
[yaxis]="chartOptions.yaxis!"
|
|
145
|
+
[labels]="chartOptions.labels!"
|
|
146
|
+
[legend]="chartOptions.legend!"
|
|
147
|
+
[colors]="chartOptions.colors!"
|
|
148
|
+
[theme]="chartOptions.theme!"
|
|
149
|
+
[tooltip]="chartOptions.tooltip!"
|
|
150
|
+
></apx-chart>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
`, styles: [".widget-container{height:100%;width:100%;display:flex;flex-direction:column;border-radius:30px;overflow:hidden;box-shadow:0 8px 24px #00000040;border:1px solid rgba(255,255,255,.08);transition:box-shadow .2s ease;box-sizing:border-box;background:var(--dash-card-bg)}.widget-container:hover{box-shadow:0 12px 32px #00000059}.widget-header{padding:14px 16px 4px;display:flex;justify-content:space-between;align-items:center;cursor:move;flex-shrink:0}.widget-title{color:#fff;font-size:15px;font-weight:600;letter-spacing:.3px}.header-actions{display:flex;gap:6px;align-items:center}.btn-icon{background:rgba(255,255,255,.08);border:none;color:var(--dash-fore-color);cursor:pointer;font-size:12px;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.btn-edit:hover{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.btn-close-widget:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.widget-body{flex:1;min-height:0;padding:4px 12px 12px;display:flex;flex-direction:column}\n"] }]
|
|
154
|
+
}], ctorParameters: function () { return [{ type: i1.DashboardStateService }]; }, propDecorators: { widget: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], onRemoveWidget: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], theme: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], editRequested: [{
|
|
161
|
+
type: Output
|
|
162
|
+
}] } });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvd2lkZ2V0LXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQWlCcEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRixNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBSyxTQUFTLENBQUM7QUFzRXBDLE1BQU0sT0FBTyx1QkFBdUI7SUFXbEMsWUFBb0IsWUFBbUM7UUFBbkMsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBUDdDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUdyRCxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUVoQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV3QixDQUFDO0lBRTNELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDN0QsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFF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UzsrQkFDRSxxQkFBcUIsWUFDckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NUOzRHQW1DUyxNQUFNO3NCQUFmLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFdpZGdldCwgRGFzaGJvYXJkVGhlbWUgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2Rhc2hib2FyZC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFwZXhBeGlzQ2hhcnRTZXJpZXMsIEFwZXhDaGFydCwgQXBleFhBeGlzLCBBcGV4RGF0YUxhYmVscyxcbiAgQXBleFN0cm9rZSwgQXBleFlBeGlzLCBBcGV4VGl0bGVTdWJ0aXRsZSwgQXBleExlZ2VuZCxcbiAgQXBleFBsb3RPcHRpb25zLCBBcGV4VG9vbHRpcCwgQXBleFRoZW1lXG59IGZyb20gJ25nLWFwZXhjaGFydHMnO1xuXG5leHBvcnQgdHlwZSBDaGFydE9wdGlvbnMgPSB7XG4gIHNlcmllczogQXBleEF4aXNDaGFydFNlcmllcyB8IG51bWJlcltdO1xuICBjaGFydDogQXBleENoYXJ0OyB4YXhpczogQXBleFhBeGlzOyBzdHJva2U6IEFwZXhTdHJva2U7XG4gIGRhdGFMYWJlbHM6IEFwZXhEYXRhTGFiZWxzOyB5YXhpczogQXBleFlBeGlzOyB0aXRsZTogQXBleFRpdGxlU3VidGl0bGU7XG4gIGxhYmVsczogc3RyaW5nW107IGxlZ2VuZDogQXBleExlZ2VuZDsgcGxvdE9wdGlvbnM6IEFwZXhQbG90T3B0aW9ucztcbiAgdG9vbHRpcDogQXBleFRvb2x0aXA7IHRoZW1lOiBBcGV4VGhlbWU7IGNvbG9yczogc3RyaW5nW107XG59O1xuXG5jb25zdCBERUZBVUxUX0NIQVJUX0NPTE9SUyA9IFsnIzBhODRmZicsICcjMzBkMTU4JywgJyNmZjlmMGEnLCAnI2JmNWFmMicsICcjZmY0NTNhJ107XG5jb25zdCBERUZBVUxUX0ZPUkVDT0xPUiA9ICcjOGU4ZTkzJztcbmNvbnN0IERFRkFVTFRfQ0FSRF9CRyAgID0gJyMyYzJjMmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd2lkZ2V0LXJlbmRlcmVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cImNhcmRTdHlsZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2lkZ2V0LXRpdGxlXCI+e3sgd2lkZ2V0LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb24gYnRuLWVkaXRcIiAoY2xpY2spPVwiZWRpdFJlcXVlc3RlZC5lbWl0KHdpZGdldClcIiB0aXRsZT1cIkVkaXQgd2lkZ2V0XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXBlblwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb24gYnRuLWNsb3NlLXdpZGdldFwiIChjbGljayk9XCJvblJlbW92ZSgpXCIgdGl0bGU9XCJSZW1vdmUgd2lkZ2V0XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIndpZGdldC1ib2R5XCI+XG4gICAgICAgIDxhcHgtY2hhcnRcbiAgICAgICAgICAqbmdJZj1cImNoYXJ0T3B0aW9ucy5jaGFydFwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7XCJcbiAgICAgICAgICBbc2VyaWVzXT1cImNoYXJ0T3B0aW9ucy5zZXJpZXMhXCJcbiAgICAgICAgICBbY2hhcnRdPVwiY2hhcnRPcHRpb25zLmNoYXJ0IVwiXG4gICAgICAgICAgW3hheGlzXT1cImNoYXJ0T3B0aW9ucy54YXhpcyFcIlxuICAgICAgICAgIFtzdHJva2VdPVwiY2hhcnRPcHRpb25zLnN0cm9rZSFcIlxuICAgICAgICAgIFtkYXRhTGFiZWxzXT1cImNoYXJ0T3B0aW9ucy5kYXRhTGFiZWxzIVwiXG4gICAgICAgICAgW3Bsb3RPcHRpb25zXT1cImNoYXJ0T3B0aW9ucy5wbG90T3B0aW9ucyFcIlxuICAgICAgICAgIFt5YXhpc109XCJjaGFydE9wdGlvbnMueWF4aXMhXCJcbiAgICAgICAgICBbbGFiZWxzXT1cImNoYXJ0T3B0aW9ucy5sYWJlbHMhXCJcbiAgICAgICAgICBbbGVnZW5kXT1cImNoYXJ0T3B0aW9ucy5sZWdlbmQhXCJcbiAgICAgICAgICBbY29sb3JzXT1cImNoYXJ0T3B0aW9ucy5jb2xvcnMhXCJcbiAgICAgICAgICBbdGhlbWVdPVwiY2hhcnRPcHRpb25zLnRoZW1lIVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiY2hhcnRPcHRpb25zLnRvb2x0aXAhXCJcbiAgICAgICAgPjwvYXB4LWNoYXJ0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAud2lkZ2V0LWNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7IG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC4yNSk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpO1xuICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1jYXJkLWJnKTtcbiAgICB9XG4gICAgLndpZGdldC1jb250YWluZXI6aG92ZXIgeyBib3gtc2hhZG93OiAwIDEycHggMzJweCByZ2JhKDAsMCwwLDAuMzUpOyB9XG4gICAgLndpZGdldC1oZWFkZXIge1xuICAgICAgcGFkZGluZzogMTRweCAxNnB4IDRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGN1cnNvcjogbW92ZTsgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC53aWRnZXQtdGl0bGUgeyBjb2xvcjogI2ZmZjsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogNjAwOyBsZXR0ZXItc3BhY2luZzogMC4zcHg7IH1cbiAgICAuaGVhZGVyLWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDZweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIC5idG4taWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDEycHg7IHdpZHRoOiAyNnB4OyBoZWlnaHQ6IDI2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAuYnRuLWVkaXQ6aG92ZXIgICAgICAgIHsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMjUpOyBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyB9XG4gICAgLmJ0bi1jbG9zZS13aWRnZXQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSw2OSw1OCwwLjI1KTsgIGNvbG9yOiB2YXIoLS1kYXNoLWRhbmdlci1jb2xvcik7IH1cbiAgICAud2lkZ2V0LWJvZHkge1xuICAgICAgZmxleDogMTsgbWluLWhlaWdodDogMDsgcGFkZGluZzogNHB4IDEycHggMTJweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSAgd2lkZ2V0ITogV2lkZ2V0O1xuICBASW5wdXQoKSAgb25SZW1vdmVXaWRnZXQhOiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgQElucHV0KCkgIHRoZW1lPzogUmVxdWlyZWQ8RGFzaGJvYXJkVGhlbWU+O1xuICBAT3V0cHV0KCkgZWRpdFJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8V2lkZ2V0PigpO1xuXG4gIGNoYXJ0T3B0aW9ucyE6IFBhcnRpYWw8Q2hhcnRPcHRpb25zPjtcbiAgY2FyZFN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlU2VydmljZTogRGFzaGJvYXJkU3RhdGVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXBwbHlTdHlsZXMoKTtcbiAgICB0aGlzLmluaXRDaGFydCgpO1xuICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICB0aGlzLnN0YXRlU2VydmljZS53aWRnZXREYXRhJC5zdWJzY3JpYmUoKHsgd2lkZ2V0SWQsIGRhdGEgfSkgPT4ge1xuICAgICAgICBpZiAod2lkZ2V0SWQgPT09IHRoaXMud2lkZ2V0LmlkKSB7XG4gICAgICAgICAgdGhpcy53aWRnZXQgPSB7IC4uLnRoaXMud2lkZ2V0LCBkYXRhIH07XG4gICAgICAgICAgdGhpcy5pbml0Q2hhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWyd0aGVtZSddKSAgeyB0aGlzLmFwcGx5U3R5bGVzKCk7IHRoaXMuaW5pdENoYXJ0KCk7IH1cbiAgICBpZiAoY2hhbmdlc1snd2lkZ2V0J10gJiYgIWNoYW5nZXNbJ3dpZGdldCddLmZpcnN0Q2hhbmdlKSB7IHRoaXMuYXBwbHlTdHlsZXMoKTsgdGhpcy5pbml0Q2hhcnQoKTsgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7IHRoaXMuc3Vicy51bnN1YnNjcmliZSgpOyB9XG5cbiAgcHJpdmF0ZSBhcHBseVN0eWxlcygpIHtcbiAgICB0aGlzLmNhcmRTdHlsZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLndpZGdldC5jYXJkQ29sb3IgPz8gJ3ZhcigtLWRhc2gtY2FyZC1iZyknXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZWRDb2xvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLndpZGdldC5jb2xvcnMgPz8gdGhpcy50aGVtZT8uY2hhcnRDb2xvcnMgPz8gREVGQVVMVF9DSEFSVF9DT0xPUlM7XG4gIH1cblxuICBwcml2YXRlIGluaXRDaGFydCgpIHtcbiAgICBjb25zdCBpc0RvbnV0ICAgPSB0aGlzLndpZGdldC50eXBlID09PSAnRE9OVVQnO1xuICAgIGNvbnN0IGNvbG9ycyAgICA9IHRoaXMucmVzb2x2ZWRDb2xvcnMoKTtcbiAgICBjb25zdCBmb3JlQ29sb3IgPSB0aGlzLnRoZW1lPy5jaGFydEZvcmVDb2xvciA/PyBERUZBVUxUX0ZPUkVDT0xPUjtcbiAgICBjb25zdCBsaW5lQmFyRGF0YSA9ICFpc0RvbnV0ID8gKHRoaXMud2lkZ2V0LmRhdGEgYXMgYW55KSA6IG51bGw7XG4gICAgY29uc3QgZG9udXREYXRhICAgPSAgaXNEb251dCA/ICh0aGlzLndpZGdldC5kYXRhIGFzIGFueSkgOiBudWxsO1xuICAgIGNvbnN0IGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gbGluZUJhckRhdGE/LmNhdGVnb3JpZXMgPz8gW107XG4gICAgY29uc3QgZG9udXRMYWJlbHM6IHN0cmluZ1tdID0gZG9udXREYXRhPy5sYWJlbHMgPz8gWydBJywnQicsJ0MnLCdEJywnRSddO1xuXG4gICAgdGhpcy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICBzZXJpZXM6IHRoaXMud2lkZ2V0LmRhdGEuc2VyaWVzIGFzIGFueSxcbiAgICAgIGNoYXJ0OiB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnLFxuICAgICAgICB0eXBlOiB0aGlzLndpZGdldC50eXBlLnRvTG93ZXJDYXNlKCkgYXMgYW55LFxuICAgICAgICB0b29sYmFyOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHsgZW5hYmxlZDogdHJ1ZSwgc3BlZWQ6IDQwMCB9LFxuICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLCBmb3JlQ29sb3IsXG4gICAgICAgIHBhcmVudEhlaWdodE9mZnNldDogMCwgc3BhcmtsaW5lOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICB9LFxuICAgICAgdGhlbWU6IHsgbW9kZTogJ2RhcmsnIH0sXG4gICAgICBjb2xvcnMsXG4gICAgICBzdHJva2U6IHsgY3VydmU6ICdzbW9vdGgnLCB3aWR0aDogaXNEb251dCA/IDAgOiAzIH0sXG4gICAgICBkYXRhTGFiZWxzOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICBsZWdlbmQ6IHsgcG9zaXRpb246ICdib3R0b20nLCBsYWJlbHM6IHsgY29sb3JzOiBmb3JlQ29sb3IgfSB9LFxuICAgICAgdG9vbHRpcDogeyB0aGVtZTogJ2RhcmsnIH0sXG4gICAgICBwbG90T3B0aW9uczoge1xuICAgICAgICBwaWU6IHsgZG9udXQ6IHsgc2l6ZTogJzcwJScsIGxhYmVsczogeyBzaG93OiB0cnVlLCB0b3RhbDogeyBzaG93OiB0cnVlLCBsYWJlbDogJ1RvdGFsJywgY29sb3I6ICcjZmZmJyB9IH0gfSB9LFxuICAgICAgICBiYXI6IHsgYm9yZGVyUmFkaXVzOiA4LCBjb2x1bW5XaWR0aDogJzUwJScgfVxuICAgICAgfSxcbiAgICAgIHhheGlzOiB7XG4gICAgICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMubGVuZ3RoID8gY2F0ZWdvcmllcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFiZWxzOiB7IHN0eWxlOiB7IGNvbG9yczogZm9yZUNvbG9yIH0gfSxcbiAgICAgICAgYXhpc0JvcmRlcjogeyBzaG93OiBmYWxzZSB9LCBheGlzVGlja3M6IHsgc2hvdzogZmFsc2UgfVxuICAgICAgfSxcbiAgICAgIHlheGlzOiB7IGxhYmVsczogeyBzdHlsZTogeyBjb2xvcnM6IGZvcmVDb2xvciB9IH0gfSxcbiAgICAgIGxhYmVsczogaXNEb251dCA/IGRvbnV0TGFiZWxzIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBvblJlbW92ZSgpIHsgdGhpcy5vblJlbW92ZVdpZGdldCh0aGlzLndpZGdldC5pZCk7IH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2dpZG9yLWRhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vZ2lkb3ItZGFzaGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of the dashboard library
|
|
3
|
+
*/
|
|
4
|
+
export * from './app/dashboard.component';
|
|
5
|
+
export * from './app/widget-renderer.component';
|
|
6
|
+
export * from './app/app.module'; // This is the DashboardModule
|
|
7
|
+
export * from './app/models';
|
|
8
|
+
export * from './app/dashboard-state.service';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0JBQWtCLENBQUMsQ0FBQyw4QkFBOEI7QUFDaEUsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdGhlIGRhc2hib2FyZCBsaWJyYXJ5XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hcHAvZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC93aWRnZXQtcmVuZGVyZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL2FwcC5tb2R1bGUnOyAvLyBUaGlzIGlzIHRoZSBEYXNoYm9hcmRNb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vYXBwL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9kYXNoYm9hcmQtc3RhdGUuc2VydmljZSc7XG4iXX0=
|