@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.
@@ -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=