@ogidor/dashboard 1.0.2 → 1.0.4
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 +283 -48
- package/app/app.module.d.ts +7 -9
- package/app/custom-grid.component.d.ts +93 -0
- package/app/dashboard-state.service.d.ts +54 -33
- package/app/dashboard.component.d.ts +27 -59
- package/app/models.d.ts +18 -38
- package/app/widget-renderer.component.d.ts +5 -32
- package/esm2020/app/app.module.mjs +21 -29
- package/esm2020/app/custom-grid.component.mjs +509 -0
- package/esm2020/app/dashboard-state.service.mjs +228 -158
- package/esm2020/app/dashboard.component.mjs +198 -602
- package/esm2020/app/models.mjs +1 -1
- package/esm2020/app/widget-renderer.component.mjs +41 -121
- package/esm2020/public-api.mjs +5 -4
- package/fesm2015/ogidor-dashboard.mjs +988 -909
- package/fesm2015/ogidor-dashboard.mjs.map +1 -1
- package/fesm2020/ogidor-dashboard.mjs +982 -898
- package/fesm2020/ogidor-dashboard.mjs.map +1 -1
- package/package.json +8 -12
- package/public-api.d.ts +3 -2
|
@@ -1,80 +1,48 @@
|
|
|
1
|
-
import { OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
-
import { GridsterConfig } from 'angular-gridster2';
|
|
1
|
+
import { OnInit, OnDestroy, OnChanges, SimpleChanges, EventEmitter, TemplateRef } from '@angular/core';
|
|
3
2
|
import { DashboardStateService } from './dashboard-state.service';
|
|
4
|
-
import { Page, Widget,
|
|
3
|
+
import { Page, Widget, DashboardTheme } from './models';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
export declare class DashboardComponent implements OnInit, OnDestroy, OnChanges {
|
|
7
|
-
|
|
6
|
+
stateService: DashboardStateService;
|
|
8
7
|
initialLayout?: string;
|
|
9
8
|
theme?: DashboardTheme;
|
|
9
|
+
/**
|
|
10
|
+
* Emits when the user clicks "Add Widget".
|
|
11
|
+
* The consumer should open their own dialog and call `stateService.addWidget(...)`.
|
|
12
|
+
*/
|
|
13
|
+
addWidgetRequested: EventEmitter<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Emits the Widget when the user clicks the edit (pen) icon on a card.
|
|
16
|
+
* The consumer should open their own edit UI and call `stateService.updateWidget(...)`.
|
|
17
|
+
*/
|
|
18
|
+
editWidgetRequested: EventEmitter<Widget>;
|
|
19
|
+
/**
|
|
20
|
+
* Optional: consumer can provide an `<ng-template widgetCell let-widget="widget">` child
|
|
21
|
+
* to render custom content inside every card body.
|
|
22
|
+
*/
|
|
23
|
+
cellTemplate?: TemplateRef<{
|
|
24
|
+
widget: Widget;
|
|
25
|
+
}>;
|
|
10
26
|
resolvedTheme: Required<DashboardTheme>;
|
|
11
27
|
wrapperStyles: Record<string, string>;
|
|
12
|
-
options: GridsterConfig;
|
|
13
28
|
pages: Page[];
|
|
14
29
|
activePageId: string;
|
|
15
30
|
activePage?: Page;
|
|
16
|
-
|
|
17
|
-
dialogType: WidgetType;
|
|
18
|
-
dialogTitle: string;
|
|
19
|
-
dialogCategories: string;
|
|
20
|
-
dialogSeries: {
|
|
21
|
-
name: string;
|
|
22
|
-
dataRaw: string;
|
|
23
|
-
}[];
|
|
24
|
-
dialogSlices: {
|
|
25
|
-
label: string;
|
|
26
|
-
value: number | null;
|
|
27
|
-
}[];
|
|
28
|
-
readonly widgetTypes: {
|
|
29
|
-
value: WidgetType;
|
|
30
|
-
label: string;
|
|
31
|
-
icon: string;
|
|
32
|
-
}[];
|
|
31
|
+
isPoppedOut: boolean;
|
|
33
32
|
private subs;
|
|
34
33
|
constructor(stateService: DashboardStateService);
|
|
35
34
|
ngOnChanges(changes: SimpleChanges): void;
|
|
36
35
|
ngOnInit(): void;
|
|
37
36
|
ngOnDestroy(): void;
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
onItemChanged(widget: Widget): void;
|
|
38
|
+
onRemoveWidget(widgetId: string): void;
|
|
40
39
|
onSelectPage(id: string): void;
|
|
41
40
|
onAddPage(): void;
|
|
42
41
|
onRemovePage(event: Event, id: string): void;
|
|
43
|
-
|
|
44
|
-
closeDialog(): void;
|
|
45
|
-
addSeries(): void;
|
|
46
|
-
removeSeries(i: number): void;
|
|
47
|
-
addSlice(): void;
|
|
48
|
-
removeSlice(i: number): void;
|
|
49
|
-
confirmAddWidget(): void;
|
|
50
|
-
editDialogOpen: boolean;
|
|
51
|
-
editingWidget?: Widget;
|
|
52
|
-
editWidgetType: WidgetType;
|
|
53
|
-
editTitle: string;
|
|
54
|
-
editCardColor: string;
|
|
55
|
-
editColors: string[];
|
|
56
|
-
editSeries: {
|
|
57
|
-
name: string;
|
|
58
|
-
dataRaw: string;
|
|
59
|
-
}[];
|
|
60
|
-
editCategories: string;
|
|
61
|
-
editSlices: {
|
|
62
|
-
label: string;
|
|
63
|
-
value: number | null;
|
|
64
|
-
}[];
|
|
65
|
-
private readonly DEFAULT_COLORS;
|
|
66
|
-
openEditDialog(widget: Widget): void;
|
|
67
|
-
closeEditDialog(): void;
|
|
68
|
-
getEditSeriesLabel(i: number): string;
|
|
69
|
-
addEditSeries(): void;
|
|
70
|
-
removeEditSeries(i: number): void;
|
|
71
|
-
addEditSlice(): void;
|
|
72
|
-
removeEditSlice(i: number): void;
|
|
73
|
-
confirmEditWidget(): void;
|
|
74
|
-
onAddWidget(type: WidgetType): void;
|
|
75
|
-
updateWidgetData(widgetId: string, data: LineBarData | DonutData): void;
|
|
76
|
-
removeWidgetHandler: (id: string) => void;
|
|
42
|
+
onPopOut(event: Event, pageId: string): void;
|
|
77
43
|
serializeLayout(): string;
|
|
44
|
+
private applyTheme;
|
|
45
|
+
private updateActivePage;
|
|
78
46
|
static ɵfac: i0.ɵɵFactoryDeclaration<DashboardComponent, never>;
|
|
79
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DashboardComponent, "app-dashboard", never, { "initialLayout": "initialLayout"; "theme": "theme"; }, {},
|
|
47
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DashboardComponent, "app-dashboard", never, { "initialLayout": "initialLayout"; "theme": "theme"; }, { "addWidgetRequested": "addWidgetRequested"; "editWidgetRequested": "editWidgetRequested"; }, ["cellTemplate"], never, false, never>;
|
|
80
48
|
}
|
package/app/models.d.ts
CHANGED
|
@@ -1,41 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
name: string;
|
|
6
|
-
/** Array of numeric data points */
|
|
7
|
-
data: number[];
|
|
8
|
-
/** Optional per-series x-axis category labels */
|
|
9
|
-
categories?: string[];
|
|
10
|
-
}
|
|
11
|
-
/** Data shape for LINE and BAR widgets */
|
|
12
|
-
export interface LineBarData {
|
|
13
|
-
/** One or more data series */
|
|
14
|
-
series: ChartSeries[];
|
|
15
|
-
/** X-axis category labels shared across all series */
|
|
16
|
-
categories?: string[];
|
|
17
|
-
}
|
|
18
|
-
/** Data shape for DONUT widgets */
|
|
19
|
-
export interface DonutData {
|
|
20
|
-
/** Numeric slice values — must match the length of `labels` */
|
|
21
|
-
series: number[];
|
|
22
|
-
/** Label for each slice */
|
|
23
|
-
labels?: string[];
|
|
24
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* A single widget on the grid.
|
|
3
|
+
* The lib is content-agnostic — `data` can hold anything the consumer needs.
|
|
4
|
+
*/
|
|
25
5
|
export interface Widget {
|
|
26
6
|
id: string;
|
|
27
|
-
|
|
7
|
+
/** Grid column (0-based) */
|
|
28
8
|
x: number;
|
|
9
|
+
/** Grid row (0-based) */
|
|
29
10
|
y: number;
|
|
11
|
+
/** Number of columns this widget spans */
|
|
30
12
|
cols: number;
|
|
13
|
+
/** Number of rows this widget spans */
|
|
31
14
|
rows: number;
|
|
32
|
-
/**
|
|
33
|
-
data: LineBarData | DonutData;
|
|
15
|
+
/** Display title shown in the card header */
|
|
34
16
|
title: string;
|
|
35
|
-
/** Optional per-widget series colors. Overrides the global theme chartColors. */
|
|
36
|
-
colors?: string[];
|
|
37
17
|
/** Optional per-widget card background color. Overrides the global theme widgetCardColor. */
|
|
38
18
|
cardColor?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Arbitrary consumer data.
|
|
21
|
+
* The lib stores and syncs this but never inspects it.
|
|
22
|
+
*/
|
|
23
|
+
data?: any;
|
|
39
24
|
}
|
|
40
25
|
export interface Page {
|
|
41
26
|
id: string;
|
|
@@ -57,17 +42,12 @@ export interface DashboardTheme {
|
|
|
57
42
|
panelColor?: string;
|
|
58
43
|
/** Background color of individual widget cards. Default: `#2c2c2e` */
|
|
59
44
|
widgetCardColor?: string;
|
|
60
|
-
/** Primary text
|
|
61
|
-
|
|
62
|
-
/** Primary accent color (active tabs,
|
|
45
|
+
/** Primary foreground/text color. Default: `#8e8e93` */
|
|
46
|
+
foreColor?: string;
|
|
47
|
+
/** Primary accent color (active tabs, buttons, etc.). Default: `#0a84ff` */
|
|
63
48
|
accentColor?: string;
|
|
64
|
-
/** Danger
|
|
49
|
+
/** Danger color used on remove-widget button hover. Default: `#ff453a` */
|
|
65
50
|
dangerColor?: string;
|
|
66
|
-
/**
|
|
67
|
-
* Array of colors fed to ApexCharts series.
|
|
68
|
-
* Default: `['#0a84ff', '#30d158', '#ff9f0a', '#bf5af2', '#ff453a']`
|
|
69
|
-
*/
|
|
70
|
-
chartColors?: string[];
|
|
71
51
|
/** Font family applied to the whole dashboard. Default: system-ui stack */
|
|
72
52
|
fontFamily?: string;
|
|
73
53
|
}
|
|
@@ -1,40 +1,13 @@
|
|
|
1
|
-
import { EventEmitter,
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { Widget, DashboardTheme } from './models';
|
|
3
|
-
import { DashboardStateService } from './dashboard-state.service';
|
|
4
|
-
import { ApexAxisChartSeries, ApexChart, ApexXAxis, ApexDataLabels, ApexStroke, ApexYAxis, ApexTitleSubtitle, ApexLegend, ApexPlotOptions, ApexTooltip, ApexTheme } from 'ng-apexcharts';
|
|
5
3
|
import * as i0 from "@angular/core";
|
|
6
|
-
export
|
|
7
|
-
series: ApexAxisChartSeries | number[];
|
|
8
|
-
chart: ApexChart;
|
|
9
|
-
xaxis: ApexXAxis;
|
|
10
|
-
stroke: ApexStroke;
|
|
11
|
-
dataLabels: ApexDataLabels;
|
|
12
|
-
yaxis: ApexYAxis;
|
|
13
|
-
title: ApexTitleSubtitle;
|
|
14
|
-
labels: string[];
|
|
15
|
-
legend: ApexLegend;
|
|
16
|
-
plotOptions: ApexPlotOptions;
|
|
17
|
-
tooltip: ApexTooltip;
|
|
18
|
-
theme: ApexTheme;
|
|
19
|
-
colors: string[];
|
|
20
|
-
};
|
|
21
|
-
export declare class WidgetRendererComponent implements OnInit, OnChanges, OnDestroy {
|
|
22
|
-
private stateService;
|
|
4
|
+
export declare class WidgetRendererComponent implements OnChanges {
|
|
23
5
|
widget: Widget;
|
|
24
|
-
onRemoveWidget: (id: string) => void;
|
|
25
6
|
theme?: Required<DashboardTheme>;
|
|
26
7
|
editRequested: EventEmitter<Widget>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
private subs;
|
|
30
|
-
constructor(stateService: DashboardStateService);
|
|
31
|
-
ngOnInit(): void;
|
|
8
|
+
removeRequested: EventEmitter<string>;
|
|
9
|
+
cardBg: string;
|
|
32
10
|
ngOnChanges(changes: SimpleChanges): void;
|
|
33
|
-
ngOnDestroy(): void;
|
|
34
|
-
private applyStyles;
|
|
35
|
-
private resolvedColors;
|
|
36
|
-
private initChart;
|
|
37
|
-
onRemove(): void;
|
|
38
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<WidgetRendererComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<WidgetRendererComponent, "app-widget-renderer", never, { "widget": "widget"; "
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WidgetRendererComponent, "app-widget-renderer", never, { "widget": "widget"; "theme": "theme"; }, { "editRequested": "editRequested"; "removeRequested": "removeRequested"; }, never, ["*"], false, never>;
|
|
40
13
|
}
|
|
@@ -1,65 +1,57 @@
|
|
|
1
|
-
import { NgModule
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
2
|
import { BrowserModule } from '@angular/platform-browser';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { FormsModule } from '@angular/forms';
|
|
5
|
-
import { GridsterModule } from 'angular-gridster2';
|
|
6
|
-
import { NgApexchartsModule } from 'ng-apexcharts';
|
|
7
4
|
import { DashboardComponent } from './dashboard.component';
|
|
8
5
|
import { WidgetRendererComponent } from './widget-renderer.component';
|
|
6
|
+
import { CustomGridComponent, GridCellDirective } from './custom-grid.component';
|
|
9
7
|
import { DashboardStateService } from './dashboard-state.service';
|
|
10
8
|
import * as i0 from "@angular/core";
|
|
11
9
|
export class DashboardModule {
|
|
12
10
|
}
|
|
13
11
|
DashboardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
12
|
DashboardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: DashboardModule, declarations: [DashboardComponent,
|
|
15
|
-
WidgetRendererComponent
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
GridsterModule,
|
|
23
|
-
NgApexchartsModule] });
|
|
13
|
+
WidgetRendererComponent,
|
|
14
|
+
CustomGridComponent,
|
|
15
|
+
GridCellDirective], imports: [CommonModule], exports: [DashboardComponent,
|
|
16
|
+
WidgetRendererComponent,
|
|
17
|
+
CustomGridComponent,
|
|
18
|
+
GridCellDirective] });
|
|
19
|
+
DashboardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardModule, providers: [DashboardStateService], imports: [CommonModule] });
|
|
24
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardModule, decorators: [{
|
|
25
21
|
type: NgModule,
|
|
26
22
|
args: [{
|
|
27
23
|
declarations: [
|
|
28
24
|
DashboardComponent,
|
|
29
|
-
WidgetRendererComponent
|
|
25
|
+
WidgetRendererComponent,
|
|
26
|
+
CustomGridComponent,
|
|
27
|
+
GridCellDirective,
|
|
30
28
|
],
|
|
31
29
|
imports: [
|
|
32
30
|
CommonModule,
|
|
33
|
-
FormsModule,
|
|
34
|
-
GridsterModule,
|
|
35
|
-
NgApexchartsModule
|
|
36
31
|
],
|
|
37
32
|
providers: [DashboardStateService],
|
|
38
33
|
exports: [
|
|
39
34
|
DashboardComponent,
|
|
40
|
-
WidgetRendererComponent
|
|
35
|
+
WidgetRendererComponent,
|
|
36
|
+
CustomGridComponent,
|
|
37
|
+
GridCellDirective,
|
|
41
38
|
],
|
|
42
|
-
schemas: [NO_ERRORS_SCHEMA]
|
|
43
39
|
}]
|
|
44
40
|
}] });
|
|
45
41
|
/**
|
|
46
|
-
* Root module for local demo / testing purposes.
|
|
47
|
-
*
|
|
42
|
+
* Root module for local demo / testing purposes only.
|
|
43
|
+
* Library consumers import DashboardModule, not AppModule.
|
|
48
44
|
*/
|
|
49
45
|
export class AppModule {
|
|
50
46
|
}
|
|
51
47
|
AppModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
52
48
|
AppModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: AppModule, bootstrap: [DashboardComponent], imports: [BrowserModule, DashboardModule] });
|
|
53
|
-
AppModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppModule, imports: [BrowserModule,
|
|
54
|
-
DashboardModule] });
|
|
49
|
+
AppModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppModule, imports: [BrowserModule, DashboardModule] });
|
|
55
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppModule, decorators: [{
|
|
56
51
|
type: NgModule,
|
|
57
52
|
args: [{
|
|
58
|
-
imports: [
|
|
59
|
-
|
|
60
|
-
DashboardModule
|
|
61
|
-
],
|
|
62
|
-
bootstrap: [DashboardComponent]
|
|
53
|
+
imports: [BrowserModule, DashboardModule],
|
|
54
|
+
bootstrap: [DashboardComponent],
|
|
63
55
|
}]
|
|
64
56
|
}] });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYXBwLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBb0JsRSxNQUFNLE9BQU8sZUFBZTs7NkdBQWYsZUFBZTs4R0FBZixlQUFlLGlCQWhCeEIsa0JBQWtCO1FBQ2xCLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsaUJBQWlCLGFBR2pCLFlBQVksYUFJWixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixpQkFBaUI7OEdBR1IsZUFBZSxhQVJmLENBQUMscUJBQXFCLENBQUMsWUFGaEMsWUFBWTs0RkFVSCxlQUFlO2tCQWxCM0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDbEMsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLGlCQUFpQjtxQkFDbEI7aUJBQ0Y7O0FBR0Q7OztHQUdHO0FBS0gsTUFBTSxPQUFPLFNBQVM7O3VHQUFULFNBQVM7d0dBQVQsU0FBUyxjQUZSLGtCQUFrQixhQURwQixhQUFhLEVBUFosZUFBZTt3R0FVZixTQUFTLFlBSFYsYUFBYSxFQUFFLGVBQWU7NEZBRzdCLFNBQVM7a0JBSnJCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQztvQkFDekMsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21HcmlkQ29tcG9uZW50LCBHcmlkQ2VsbERpcmVjdGl2ZSB9IGZyb20gJy4vY3VzdG9tLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IERhc2hib2FyZFN0YXRlU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLXN0YXRlLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQsXG4gICAgV2lkZ2V0UmVuZGVyZXJDb21wb25lbnQsXG4gICAgQ3VzdG9tR3JpZENvbXBvbmVudCxcbiAgICBHcmlkQ2VsbERpcmVjdGl2ZSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGFzaGJvYXJkU3RhdGVTZXJ2aWNlXSxcbiAgZXhwb3J0czogW1xuICAgIERhc2hib2FyZENvbXBvbmVudCxcbiAgICBXaWRnZXRSZW5kZXJlckNvbXBvbmVudCxcbiAgICBDdXN0b21HcmlkQ29tcG9uZW50LFxuICAgIEdyaWRDZWxsRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRNb2R1bGUge31cblxuLyoqXG4gKiBSb290IG1vZHVsZSBmb3IgbG9jYWwgZGVtbyAvIHRlc3RpbmcgcHVycG9zZXMgb25seS5cbiAqIExpYnJhcnkgY29uc3VtZXJzIGltcG9ydCBEYXNoYm9hcmRNb2R1bGUsIG5vdCBBcHBNb2R1bGUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtCcm93c2VyTW9kdWxlLCBEYXNoYm9hcmRNb2R1bGVdLFxuICBib290c3RyYXA6IFtEYXNoYm9hcmRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiJdfQ==
|