@tetacom/svg-charts 1.4.21 → 1.4.22
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/chart/base/series-base.component.d.ts +1 -1
- package/chart/chart/chart.component.d.ts +1 -1
- package/chart/chart-container/annotation/annotation.component.d.ts +1 -1
- package/chart/chart-container/chart-container.component.d.ts +1 -1
- package/chart/chart-container/crosshair/crosshair.component.d.ts +1 -1
- package/chart/chart-container/gridlines/gridlines.component.d.ts +1 -1
- package/chart/chart-container/plotband/plot-band.component.d.ts +1 -1
- package/chart/chart-container/plotline/plotline.component.d.ts +1 -1
- package/chart/chart-container/series/area-series/area-series.component.d.ts +1 -1
- package/chart/chart-container/series/bar/bar-series.component.d.ts +1 -1
- package/chart/chart-container/series/block-area-series/block-area-series.component.d.ts +1 -1
- package/chart/chart-container/series/block-series/block-series.component.d.ts +1 -1
- package/chart/chart-container/series/line/line-series.component.d.ts +1 -1
- package/chart/chart-container/series/linear-series-base.d.ts +1 -1
- package/chart/chart-container/series/scatter-series/scatter-series.component.d.ts +1 -1
- package/chart/chart-container/series-host/series-host.component.d.ts +1 -1
- package/chart/chart-container/tooltip/tooltip.component.d.ts +1 -1
- package/chart/chart-container/x-axis/x-axis.component.d.ts +1 -1
- package/chart/chart-container/y-axis/y-axis.component.d.ts +1 -1
- package/chart/directives/brushable.directive.d.ts +1 -1
- package/chart/directives/draggable-point.directive.d.ts +1 -1
- package/chart/directives/zoomable.directive.d.ts +1 -1
- package/chart/legend/legend.component.d.ts +1 -1
- package/chart/model/i-broadcast-message.d.ts +2 -2
- package/chart/stories/bandseries/bandseries.component.d.ts +1 -1
- package/esm2022/chart/base/series-base.component.mjs +50 -0
- package/esm2022/chart/chart/chart.component.mjs +175 -0
- package/esm2022/chart/chart-container/annotation/annotation.component.mjs +108 -0
- package/esm2022/chart/chart-container/chart-container.component.mjs +194 -0
- package/esm2022/chart/chart-container/crosshair/crosshair.component.mjs +39 -0
- package/esm2022/chart/chart-container/gridlines/gridlines.component.mjs +45 -0
- package/esm2022/chart/chart-container/plotband/plot-band.component.mjs +174 -0
- package/esm2022/chart/chart-container/plotline/plotline.component.mjs +98 -0
- package/esm2022/chart/chart-container/series/area-series/area-series.component.mjs +74 -0
- package/esm2022/chart/chart-container/series/bar/bar-series.component.mjs +68 -0
- package/esm2022/chart/chart-container/series/block-area-series/block-area-series.component.mjs +69 -0
- package/esm2022/chart/chart-container/series/block-series/block-series.component.mjs +69 -0
- package/{esm2020 → esm2022}/chart/chart-container/series/line/line-series.component.mjs +37 -30
- package/esm2022/chart/chart-container/series/linear-series-base.mjs +210 -0
- package/esm2022/chart/chart-container/series/scatter-series/scatter-series.component.mjs +53 -0
- package/esm2022/chart/chart-container/series-host/series-host.component.mjs +50 -0
- package/{esm2020 → esm2022}/chart/chart-container/tooltip/tooltip.component.mjs +18 -5
- package/esm2022/chart/chart-container/x-axis/x-axis.component.mjs +54 -0
- package/esm2022/chart/chart-container/y-axis/y-axis.component.mjs +40 -0
- package/{esm2020 → esm2022}/chart/chart.module.mjs +36 -36
- package/esm2022/chart/core/axis/axis.mjs +135 -0
- package/esm2022/chart/core/axis/builders/axis-size-builder.mjs +31 -0
- package/esm2022/chart/core/axis/builders/extremes-builder.mjs +33 -0
- package/esm2022/chart/directives/brushable.directive.mjs +162 -0
- package/esm2022/chart/directives/draggable-point.directive.mjs +147 -0
- package/esm2022/chart/directives/zoomable.directive.mjs +263 -0
- package/esm2022/chart/legend/legend.component.mjs +38 -0
- package/{esm2020 → esm2022}/chart/model/chart-bounds.mjs +5 -5
- package/esm2022/chart/model/i-broadcast-message.mjs +27 -0
- package/esm2022/chart/model/plot-band.mjs +28 -0
- package/esm2022/chart/model/plot-line.mjs +21 -0
- package/esm2022/chart/service/broadcast.service.mjs +24 -0
- package/esm2022/chart/service/brush.service.mjs +22 -0
- package/esm2022/chart/service/chart.service.mjs +244 -0
- package/esm2022/chart/service/scale.service.mjs +206 -0
- package/esm2022/chart/service/zoom.service.mjs +85 -0
- package/esm2022/chart/stories/bandseries/bandseries.component.mjs +36 -0
- package/{fesm2020 → fesm2022}/tetacom-svg-charts.mjs +583 -337
- package/{fesm2020 → fesm2022}/tetacom-svg-charts.mjs.map +1 -1
- package/package.json +8 -14
- package/esm2020/chart/base/series-base.component.mjs +0 -42
- package/esm2020/chart/chart/chart.component.mjs +0 -172
- package/esm2020/chart/chart-container/annotation/annotation.component.mjs +0 -99
- package/esm2020/chart/chart-container/chart-container.component.mjs +0 -182
- package/esm2020/chart/chart-container/crosshair/crosshair.component.mjs +0 -34
- package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +0 -37
- package/esm2020/chart/chart-container/plotband/plot-band.component.mjs +0 -163
- package/esm2020/chart/chart-container/plotline/plotline.component.mjs +0 -87
- package/esm2020/chart/chart-container/series/area-series/area-series.component.mjs +0 -67
- package/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +0 -59
- package/esm2020/chart/chart-container/series/block-area-series/block-area-series.component.mjs +0 -60
- package/esm2020/chart/chart-container/series/block-series/block-series.component.mjs +0 -60
- package/esm2020/chart/chart-container/series/linear-series-base.mjs +0 -198
- package/esm2020/chart/chart-container/series/scatter-series/scatter-series.component.mjs +0 -43
- package/esm2020/chart/chart-container/series-host/series-host.component.mjs +0 -46
- package/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +0 -48
- package/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +0 -36
- package/esm2020/chart/core/axis/axis.mjs +0 -128
- package/esm2020/chart/core/axis/builders/axis-size-builder.mjs +0 -33
- package/esm2020/chart/core/axis/builders/extremes-builder.mjs +0 -35
- package/esm2020/chart/directives/brushable.directive.mjs +0 -153
- package/esm2020/chart/directives/draggable-point.directive.mjs +0 -141
- package/esm2020/chart/directives/zoomable.directive.mjs +0 -254
- package/esm2020/chart/legend/legend.component.mjs +0 -36
- package/esm2020/chart/model/i-broadcast-message.mjs +0 -18
- package/esm2020/chart/model/plot-band.mjs +0 -17
- package/esm2020/chart/model/plot-line.mjs +0 -13
- package/esm2020/chart/service/broadcast.service.mjs +0 -23
- package/esm2020/chart/service/brush.service.mjs +0 -21
- package/esm2020/chart/service/chart.service.mjs +0 -229
- package/esm2020/chart/service/scale.service.mjs +0 -203
- package/esm2020/chart/service/zoom.service.mjs +0 -80
- package/esm2020/chart/stories/bandseries/bandseries.component.mjs +0 -29
- package/fesm2015/tetacom-svg-charts.mjs +0 -3095
- package/fesm2015/tetacom-svg-charts.mjs.map +0 -1
- /package/{esm2020 → esm2022}/chart/chart-container/series/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/core/axis/builders/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/core/utils/generate-ticks.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/core/utils/get-text-width.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/core/utils/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/default/default-axis-config.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/default/default-chart-config.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/default/default-series-config.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/default/defaultSeriesTypeMapping.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/annotation.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/axis-options.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/base-point.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/axis-orientation.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/brush-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/clip-points-direction.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/drag-point-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/fill-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/scale-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/series-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/tooltip-tracking.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/zoom-behavior-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/enum/zoom-type.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-builder.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-chart-config.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-chart-event.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-display-tooltip.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-point-move.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/i-scales-map.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/marker-options.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/series.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/svg-attributes.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/model/tooltip-options.mjs +0 -0
- /package/{esm2020 → esm2022}/chart/service/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tetacom-svg-charts.mjs +0 -0
|
@@ -22,5 +22,5 @@ export declare class SeriesBaseComponent<T extends BasePoint> implements OnInit
|
|
|
22
22
|
constructor(svc: ChartService, cdr: ChangeDetectorRef, scaleService: ScaleService, zoomService: ZoomService, element: ElementRef, zone?: NgZone);
|
|
23
23
|
ngOnInit(): void;
|
|
24
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<SeriesBaseComponent<any>, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SeriesBaseComponent<any>, "ng-component", never, { "config": "config"; "series": "series"; }, {}, never, never, false>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SeriesBaseComponent<any>, "ng-component", never, { "config": { "alias": "config"; "required": false; }; "series": { "alias": "series"; "required": false; }; }, {}, never, never, false, never>;
|
|
26
26
|
}
|
|
@@ -41,5 +41,5 @@ export declare class ChartComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
41
41
|
ngAfterViewInit(): void;
|
|
42
42
|
ngOnDestroy(): void;
|
|
43
43
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChartComponent, never>;
|
|
44
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-svg-chart", never, { "config": "config"; }, { "pointerMove": "pointerMove"; "plotBandsMove": "plotBandsMove"; "plotBandClick": "plotBandClick"; "plotBandContextMenu": "plotBandContextMenu"; "plotLinesMove": "plotLinesMove"; "pointMove": "pointMove"; "chartClick": "chartClick"; "chartContextMenu": "chartContextMenu"; "annotationContextMenu": "annotationContextMenu"; "annotationClick": "annotationClick"; "annotationMove": "annotationMove"; "zoomServiceInstance": "zoomServiceInstance"; "brushServiceInstance": "brushServiceInstance"; }, never, ["*"], false>;
|
|
44
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-svg-chart", never, { "config": { "alias": "config"; "required": false; }; }, { "pointerMove": "pointerMove"; "plotBandsMove": "plotBandsMove"; "plotBandClick": "plotBandClick"; "plotBandContextMenu": "plotBandContextMenu"; "plotLinesMove": "plotLinesMove"; "pointMove": "pointMove"; "chartClick": "chartClick"; "chartContextMenu": "chartContextMenu"; "annotationContextMenu": "annotationContextMenu"; "annotationClick": "annotationClick"; "annotationMove": "annotationMove"; "zoomServiceInstance": "zoomServiceInstance"; "brushServiceInstance": "brushServiceInstance"; }, never, ["*"], false, never>;
|
|
45
45
|
}
|
|
@@ -24,5 +24,5 @@ export declare class AnnotationComponent implements OnDestroy {
|
|
|
24
24
|
ngOnDestroy(): void;
|
|
25
25
|
private init;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnnotationComponent, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnnotationComponent, "[teta-annotation]", never, { "visibleRect": "visibleRect"; "annotation": "annotation"; }, {}, never, never, false>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnnotationComponent, "[teta-annotation]", never, { "visibleRect": { "alias": "visibleRect"; "required": false; }; "annotation": { "alias": "annotation"; "required": false; }; }, {}, never, never, false, never>;
|
|
28
28
|
}
|
|
@@ -38,5 +38,5 @@ export declare class ChartContainerComponent implements OnInit, OnDestroy {
|
|
|
38
38
|
mouseLeave(event: any): void;
|
|
39
39
|
trackSerie(index: any, item: Series<BasePoint>): any;
|
|
40
40
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChartContainerComponent, never>;
|
|
41
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChartContainerComponent, "teta-chart-container", never, {}, {}, never, never, false>;
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChartContainerComponent, "teta-chart-container", never, {}, {}, never, never, false, never>;
|
|
42
42
|
}
|
|
@@ -12,5 +12,5 @@ export declare class CrosshairComponent implements OnInit {
|
|
|
12
12
|
constructor(scaleService: ScaleService, chartService: ChartService, cdr: ChangeDetectorRef);
|
|
13
13
|
ngOnInit(): void;
|
|
14
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<CrosshairComponent, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CrosshairComponent, "[teta-crosshair]", never, { "size": "size"; }, {}, never, never, false>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CrosshairComponent, "[teta-crosshair]", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
16
16
|
}
|
|
@@ -16,5 +16,5 @@ export declare class GridlinesComponent implements AfterViewInit {
|
|
|
16
16
|
constructor(svc: ScaleService, chartService: ChartService);
|
|
17
17
|
ngAfterViewInit(): void;
|
|
18
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<GridlinesComponent, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GridlinesComponent, "[teta-gridlines]", never, { "size": "size"; }, {}, never, never, false>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GridlinesComponent, "[teta-gridlines]", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
20
20
|
}
|
|
@@ -34,5 +34,5 @@ export declare class PlotBandComponent implements AfterViewInit, OnDestroy {
|
|
|
34
34
|
getTextPosition: () => any;
|
|
35
35
|
getFill(d: PlotBand): string;
|
|
36
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlotBandComponent, never>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlotBandComponent, "[teta-plot-band]", never, { "plotBand": "plotBand"; "axis": "axis"; "scale": "scale"; "size": "size"; }, {}, never, never, false>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlotBandComponent, "[teta-plot-band]", never, { "plotBand": { "alias": "plotBand"; "required": false; }; "axis": { "alias": "axis"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
38
38
|
}
|
|
@@ -28,5 +28,5 @@ export declare class PlotlineComponent implements OnInit, OnDestroy {
|
|
|
28
28
|
get height(): number;
|
|
29
29
|
get width(): number;
|
|
30
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlotlineComponent, never>;
|
|
31
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlotlineComponent, "[teta-plot-line]", never, { "plotLine": "plotLine"; "size": "size"; "axis": "axis"; "scale": "scale"; }, {}, never, never, false>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlotlineComponent, "[teta-plot-line]", never, { "plotLine": { "alias": "plotLine"; "required": false; }; "size": { "alias": "size"; "required": false; }; "axis": { "alias": "axis"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; }, {}, never, never, false, never>;
|
|
32
32
|
}
|
|
@@ -20,5 +20,5 @@ export declare class AreaSeriesComponent<T extends BasePoint> extends LinearSeri
|
|
|
20
20
|
constructor(svc: ChartService, cdr: ChangeDetectorRef, scaleService: ScaleService, zoomService: ZoomService, element: ElementRef);
|
|
21
21
|
ngOnInit(): void;
|
|
22
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<AreaSeriesComponent<any>, never>;
|
|
23
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AreaSeriesComponent<any>, "svg:svg[teta-area-series]", never, {}, {}, never, never, false>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AreaSeriesComponent<any>, "svg:svg[teta-area-series]", never, {}, {}, never, never, false, never>;
|
|
24
24
|
}
|
|
@@ -23,5 +23,5 @@ export declare class BarSeriesComponent<T extends BasePoint> extends SeriesBaseC
|
|
|
23
23
|
mouseleave(point: BasePoint): void;
|
|
24
24
|
ngOnChanges(changes: SimpleChanges): void;
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<BarSeriesComponent<any>, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BarSeriesComponent<any>, "svg:svg[teta-bar-series]", never, {}, {}, never, never, false>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BarSeriesComponent<any>, "svg:svg[teta-bar-series]", never, {}, {}, never, never, false, never>;
|
|
27
27
|
}
|
|
@@ -25,5 +25,5 @@ export declare class BlockAreaSeriesComponent<T extends BasePoint> extends Serie
|
|
|
25
25
|
mouseenter(point: BasePoint): void;
|
|
26
26
|
mouseleave(point: BasePoint): void;
|
|
27
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<BlockAreaSeriesComponent<any>, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BlockAreaSeriesComponent<any>, "svg:svg[teta-block-area-series]", never, {}, {}, never, never, false>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BlockAreaSeriesComponent<any>, "svg:svg[teta-block-area-series]", never, {}, {}, never, never, false, never>;
|
|
29
29
|
}
|
|
@@ -25,5 +25,5 @@ export declare class BlockSeriesComponent<T extends BasePoint> extends SeriesBas
|
|
|
25
25
|
mouseleave(point: BasePoint): void;
|
|
26
26
|
ngAfterViewInit(): void;
|
|
27
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<BlockSeriesComponent<any>, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BlockSeriesComponent<any>, "svg:svg[teta-block-series]", never, {}, {}, never, never, false>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BlockSeriesComponent<any>, "svg:svg[teta-block-series]", never, {}, {}, never, never, false, never>;
|
|
29
29
|
}
|
|
@@ -21,5 +21,5 @@ export declare class LineSeriesComponent<T extends BasePoint> extends LinearSeri
|
|
|
21
21
|
moveLabel(event: any, label: any): void;
|
|
22
22
|
allowDrag: (point: BasePoint) => (newPoint: any) => boolean;
|
|
23
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<LineSeriesComponent<any>, never>;
|
|
24
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LineSeriesComponent<any>, "svg:svg[teta-line-series]", never, {}, {}, never, never, false>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LineSeriesComponent<any>, "svg:svg[teta-line-series]", never, {}, {}, never, never, false, never>;
|
|
25
25
|
}
|
|
@@ -31,5 +31,5 @@ export declare class LinearSeriesBase<T extends BasePoint> extends SeriesBaseCom
|
|
|
31
31
|
ngAfterViewInit(): void;
|
|
32
32
|
getTransform(event: any, scaleX: any, scaleY: any): Pick<BasePoint, 'x' | 'y'>;
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<LinearSeriesBase<any>, never>;
|
|
34
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LinearSeriesBase<any>, "ng-component", never, { "series": "series"; }, {}, never, never, false>;
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LinearSeriesBase<any>, "ng-component", never, { "series": { "alias": "series"; "required": false; }; }, {}, never, never, false, never>;
|
|
35
35
|
}
|
|
@@ -23,5 +23,5 @@ export declare class ScatterSeriesComponent<T extends BasePoint> extends SeriesB
|
|
|
23
23
|
mouseenter(point: BasePoint): void;
|
|
24
24
|
mouseleave(point: BasePoint): void;
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScatterSeriesComponent<any>, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScatterSeriesComponent<any>, "svg:svg[teta-scatter-series]", never, {}, {}, never, never, false>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScatterSeriesComponent<any>, "svg:svg[teta-scatter-series]", never, {}, {}, never, never, false, never>;
|
|
27
27
|
}
|
|
@@ -14,5 +14,5 @@ export declare class SeriesHostComponent<T extends BasePoint> implements OnInit,
|
|
|
14
14
|
ngOnDestroy(): void;
|
|
15
15
|
ngOnChanges(changes: SimpleChanges): void;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<SeriesHostComponent<any>, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SeriesHostComponent<any>, "[teta-series-host]", never, { "config": "config"; "series": "series"; }, {}, never, never, false>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SeriesHostComponent<any>, "[teta-series-host]", never, { "config": { "alias": "config"; "required": false; }; "series": { "alias": "series"; "required": false; }; }, {}, never, never, false, never>;
|
|
18
18
|
}
|
|
@@ -30,5 +30,5 @@ export declare class TooltipComponent implements OnInit {
|
|
|
30
30
|
private getPosition;
|
|
31
31
|
format(input: number | Date): string;
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<TooltipComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TooltipComponent, "teta-tooltip", never, { "size": "size"; "config": "config"; }, {}, never, never, false>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TooltipComponent, "teta-tooltip", never, { "size": { "alias": "size"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
|
|
34
34
|
}
|
|
@@ -19,5 +19,5 @@ export declare class XAxisComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
19
19
|
ngOnDestroy(): void;
|
|
20
20
|
ngOnChanges(changes: SimpleChanges): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<XAxisComponent, never>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<XAxisComponent, "[teta-x-axis]", never, { "axis": "axis"; "size": "size"; }, {}, never, never, false>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<XAxisComponent, "[teta-x-axis]", never, { "axis": { "alias": "axis"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
23
23
|
}
|
|
@@ -15,5 +15,5 @@ export declare class YAxisComponent implements OnInit, AfterViewInit {
|
|
|
15
15
|
ngAfterViewInit(): void;
|
|
16
16
|
getLabelTransform(): string;
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<YAxisComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<YAxisComponent, "[teta-y-axis]", never, { "axis": "axis"; "size": "size"; }, {}, never, never, false>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<YAxisComponent, "[teta-y-axis]", never, { "axis": { "alias": "axis"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
19
19
|
}
|
|
@@ -24,5 +24,5 @@ export declare class BrushableDirective implements OnDestroy, OnInit, AfterViewI
|
|
|
24
24
|
applyBrush(config: IChartConfig, brushScale: any): void;
|
|
25
25
|
clearPreviousSelection(): void;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<BrushableDirective, never>;
|
|
27
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BrushableDirective, "[tetaBrushable]", never, { "config": "config"; "axis": "axis"; }, {}, never, never, false>;
|
|
27
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrushableDirective, "[tetaBrushable]", never, { "config": { "alias": "config"; "required": false; }; "axis": { "alias": "axis"; "required": false; }; }, {}, never, never, false, never>;
|
|
28
28
|
}
|
|
@@ -36,5 +36,5 @@ export declare class DraggablePointDirective {
|
|
|
36
36
|
setTransform(x: number, y: number): void;
|
|
37
37
|
resetTransform(): void;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<DraggablePointDirective, never>;
|
|
39
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DraggablePointDirective, "[tetaDraggablePoint]", ["tetaDraggablePoint"], { "tetaDraggablePoint": "tetaDraggablePoint"; "dragDirection": "dragDirection"; "allowDrag": "allowDrag"; }, { "moveStart": "moveStart"; "moveProcess": "moveProcess"; "moveEnd": "moveEnd"; }, never, never, false>;
|
|
39
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DraggablePointDirective, "[tetaDraggablePoint]", ["tetaDraggablePoint"], { "tetaDraggablePoint": { "alias": "tetaDraggablePoint"; "required": false; }; "dragDirection": { "alias": "dragDirection"; "required": false; }; "allowDrag": { "alias": "allowDrag"; "required": false; }; }, { "moveStart": "moveStart"; "moveProcess": "moveProcess"; "moveEnd": "moveEnd"; }, never, never, false, never>;
|
|
40
40
|
}
|
|
@@ -30,5 +30,5 @@ export declare class ZoomableDirective implements OnDestroy, AfterViewInit {
|
|
|
30
30
|
zoomed: (event: D3ZoomEvent<any, any>) => void;
|
|
31
31
|
private runWheelTranslate;
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<ZoomableDirective, never>;
|
|
33
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ZoomableDirective, "[tetaZoomable]", never, { "config": "config"; "axis": "axis"; "size": "size"; }, {}, never, never, false>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ZoomableDirective, "[tetaZoomable]", never, { "config": { "alias": "config"; "required": false; }; "axis": { "alias": "axis"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, false, never>;
|
|
34
34
|
}
|
|
@@ -11,5 +11,5 @@ export declare class LegendComponent {
|
|
|
11
11
|
getHeight(serie: Series<BasePoint>): number;
|
|
12
12
|
click(serie: Series<BasePoint>): void;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<LegendComponent, never>;
|
|
14
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LegendComponent, "teta-legend", never, { "series": "series"; }, {}, never, never, false>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LegendComponent, "teta-legend", never, { "series": { "alias": "series"; "required": false; }; }, {}, never, never, false, never>;
|
|
15
15
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AxisOrientation } from './enum/axis-orientation';
|
|
2
2
|
import { ElementRef } from '@angular/core';
|
|
3
|
-
export
|
|
3
|
+
export type TransformStyle = {
|
|
4
4
|
transition?: boolean;
|
|
5
5
|
};
|
|
6
|
-
export
|
|
6
|
+
export type TargetAxis = {
|
|
7
7
|
index: number;
|
|
8
8
|
orientation: AxisOrientation;
|
|
9
9
|
};
|
|
@@ -17,5 +17,5 @@ export declare class BandseriesComponent extends SeriesBaseComponent<BasePoint>
|
|
|
17
17
|
constructor(svc: ChartService, cdr: ChangeDetectorRef, scaleService: ScaleService, zoomService: ZoomService, element: ElementRef);
|
|
18
18
|
ngOnInit(): void;
|
|
19
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<BandseriesComponent, never>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BandseriesComponent, "svg:svg[teta-bandseries]", never, {}, {}, never, never, false>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BandseriesComponent, "svg:svg[teta-bandseries]", never, {}, {}, never, never, false, never>;
|
|
21
21
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Component, Input, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../service/chart.service";
|
|
4
|
+
import * as i2 from "../service/scale.service";
|
|
5
|
+
import * as i3 from "../service/zoom.service";
|
|
6
|
+
export class SeriesBaseComponent {
|
|
7
|
+
svc;
|
|
8
|
+
cdr;
|
|
9
|
+
scaleService;
|
|
10
|
+
zoomService;
|
|
11
|
+
element;
|
|
12
|
+
zone;
|
|
13
|
+
set config(config) {
|
|
14
|
+
this._config = config;
|
|
15
|
+
}
|
|
16
|
+
get config() {
|
|
17
|
+
return this._config;
|
|
18
|
+
}
|
|
19
|
+
set series(series) {
|
|
20
|
+
this._series = series;
|
|
21
|
+
}
|
|
22
|
+
get series() {
|
|
23
|
+
return this._series;
|
|
24
|
+
}
|
|
25
|
+
_series;
|
|
26
|
+
_config;
|
|
27
|
+
constructor(svc, cdr, scaleService, zoomService, element, zone) {
|
|
28
|
+
this.svc = svc;
|
|
29
|
+
this.cdr = cdr;
|
|
30
|
+
this.scaleService = scaleService;
|
|
31
|
+
this.zoomService = zoomService;
|
|
32
|
+
this.element = element;
|
|
33
|
+
this.zone = zone;
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
}
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SeriesBaseComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SeriesBaseComponent, selector: "ng-component", inputs: { config: "config", series: "series" }, ngImport: i0, template: '', isInline: true });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SeriesBaseComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{
|
|
43
|
+
template: '',
|
|
44
|
+
}]
|
|
45
|
+
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { config: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], series: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}] } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWVzLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDOzs7OztBQVd2QixNQUFNLE9BQU8sbUJBQW1CO0lBdUJsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUEzQlosSUFDSSxNQUFNLENBQUMsTUFBb0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFDSSxNQUFNLENBQUMsTUFBaUI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRVMsT0FBTyxDQUFZO0lBQ25CLE9BQU8sQ0FBZTtJQUVoQyxZQUNZLEdBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE9BQW1CLEVBQ25CLElBQWE7UUFMYixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUztJQUV6QixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7dUdBakNVLG1CQUFtQjsyRkFBbkIsbUJBQW1CLG9HQUZwQixFQUFFOzsyRkFFRCxtQkFBbUI7a0JBSC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7c09BR0ssTUFBTTtzQkFEVCxLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LCBOZ1pvbmUsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7U2VyaWVzfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0IHtCYXNlUG9pbnR9IGZyb20gJy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHtTY2FsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3pvb20uc2VydmljZSc7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBTZXJpZXNCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlUG9pbnQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyhjb25maWc6IElDaGFydENvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZXJpZXMoc2VyaWVzOiBTZXJpZXM8VD4pIHtcbiAgICB0aGlzLl9zZXJpZXMgPSBzZXJpZXM7XG4gIH1cblxuICBnZXQgc2VyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXJpZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcmllczogU2VyaWVzPFQ+O1xuICBwcm90ZWN0ZWQgX2NvbmZpZzogSUNoYXJ0Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgem9uZT86IE5nWm9uZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { ChartService } from '../service/chart.service';
|
|
3
|
+
import { ZoomService } from '../service/zoom.service';
|
|
4
|
+
import { ScaleService } from '../service/scale.service';
|
|
5
|
+
import { BrushService } from '../service/brush.service';
|
|
6
|
+
import { map, takeWhile, withLatestFrom } from 'rxjs';
|
|
7
|
+
import { TooltipTracking } from '../model/enum/tooltip-tracking';
|
|
8
|
+
import { ScaleType } from "../model/enum/scale-type";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../service/chart.service";
|
|
11
|
+
import * as i2 from "../service/zoom.service";
|
|
12
|
+
import * as i3 from "../service/brush.service";
|
|
13
|
+
import * as i4 from "../service/scale.service";
|
|
14
|
+
import * as i5 from "@angular/common";
|
|
15
|
+
import * as i6 from "../chart-container/chart-container.component";
|
|
16
|
+
import * as i7 from "../legend/legend.component";
|
|
17
|
+
export class ChartComponent {
|
|
18
|
+
chartService;
|
|
19
|
+
zoomService;
|
|
20
|
+
brushService;
|
|
21
|
+
scaleService;
|
|
22
|
+
hasSeriesData;
|
|
23
|
+
svcConfig;
|
|
24
|
+
pointerMove = new EventEmitter();
|
|
25
|
+
plotBandsMove = new EventEmitter();
|
|
26
|
+
plotBandClick = new EventEmitter();
|
|
27
|
+
plotBandContextMenu = new EventEmitter();
|
|
28
|
+
plotLinesMove = new EventEmitter();
|
|
29
|
+
pointMove = new EventEmitter();
|
|
30
|
+
chartClick = new EventEmitter();
|
|
31
|
+
chartContextMenu = new EventEmitter();
|
|
32
|
+
annotationContextMenu = new EventEmitter();
|
|
33
|
+
annotationClick = new EventEmitter();
|
|
34
|
+
annotationMove = new EventEmitter();
|
|
35
|
+
zoomServiceInstance = new EventEmitter();
|
|
36
|
+
brushServiceInstance = new EventEmitter();
|
|
37
|
+
set config(config) {
|
|
38
|
+
this.chartService.setConfig(config);
|
|
39
|
+
this.zoomService.setBroadcastChannel(config?.zoom?.syncChannel);
|
|
40
|
+
}
|
|
41
|
+
_alive = true;
|
|
42
|
+
constructor(chartService, zoomService, brushService, scaleService) {
|
|
43
|
+
this.chartService = chartService;
|
|
44
|
+
this.zoomService = zoomService;
|
|
45
|
+
this.brushService = brushService;
|
|
46
|
+
this.scaleService = scaleService;
|
|
47
|
+
this.svcConfig = this.chartService.config;
|
|
48
|
+
this.hasSeriesData = this.svcConfig.pipe(map((_) => _.series?.length > 0 && _.series?.some((_) => _.data?.length > 0)));
|
|
49
|
+
}
|
|
50
|
+
resetZoom() {
|
|
51
|
+
this.scaleService.resetZoom();
|
|
52
|
+
}
|
|
53
|
+
ngOnChanges(changes) {
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() {
|
|
56
|
+
this.zoomServiceInstance.emit(this.zoomService);
|
|
57
|
+
this.brushServiceInstance.emit(this.brushService);
|
|
58
|
+
this.chartService.pointerMove
|
|
59
|
+
.pipe(takeWhile(() => this._alive), withLatestFrom(this.scaleService.scales, this.chartService.config))
|
|
60
|
+
.subscribe((data) => {
|
|
61
|
+
const [event, { x, y }, config] = data;
|
|
62
|
+
const tooltipTracking = config?.tooltip?.tracking;
|
|
63
|
+
if (tooltipTracking === TooltipTracking.y) {
|
|
64
|
+
const result = new Map();
|
|
65
|
+
y.forEach((value, key) => {
|
|
66
|
+
if (value.options.scaleType.type === ScaleType.band) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
result.set(key, value.scale.invert(event.offsetY));
|
|
70
|
+
});
|
|
71
|
+
this.pointerMove.emit({
|
|
72
|
+
event: event,
|
|
73
|
+
target: result
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const result = new Map();
|
|
78
|
+
x.forEach((value, key) => {
|
|
79
|
+
if (value.options.scaleType.type === ScaleType.band) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
result.set(key, value.scale.invert(event.offsetX));
|
|
83
|
+
});
|
|
84
|
+
this.pointerMove.emit({
|
|
85
|
+
event: event,
|
|
86
|
+
target: result
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.chartService.plotBandEvent
|
|
91
|
+
.pipe(takeWhile(() => this._alive))
|
|
92
|
+
.subscribe((_) => {
|
|
93
|
+
this.plotBandsMove.emit(_);
|
|
94
|
+
});
|
|
95
|
+
this.chartService.plotLineMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {
|
|
96
|
+
this.plotLinesMove.emit(_);
|
|
97
|
+
});
|
|
98
|
+
this.chartService.pointMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {
|
|
99
|
+
this.pointMove.emit(_);
|
|
100
|
+
});
|
|
101
|
+
this.chartService.chartClick
|
|
102
|
+
.pipe(takeWhile(() => this._alive)).subscribe((_) => {
|
|
103
|
+
this.chartClick.emit(_);
|
|
104
|
+
});
|
|
105
|
+
this.chartService.chartContextMenu
|
|
106
|
+
.pipe(takeWhile(() => this._alive)).subscribe((_) => {
|
|
107
|
+
this.chartContextMenu.emit(_);
|
|
108
|
+
});
|
|
109
|
+
this.chartService.plotBandClick
|
|
110
|
+
.pipe(takeWhile(() => this._alive))
|
|
111
|
+
.subscribe((_) => {
|
|
112
|
+
this.plotBandClick.emit(_);
|
|
113
|
+
});
|
|
114
|
+
this.chartService.plotBandContextMenu
|
|
115
|
+
.pipe(takeWhile(() => this._alive))
|
|
116
|
+
.subscribe((_) => {
|
|
117
|
+
this.plotBandContextMenu.emit(_);
|
|
118
|
+
});
|
|
119
|
+
this.chartService.annotationContextMenu
|
|
120
|
+
.pipe(takeWhile(() => this._alive))
|
|
121
|
+
.subscribe((_) => {
|
|
122
|
+
this.annotationContextMenu.emit(_);
|
|
123
|
+
});
|
|
124
|
+
this.chartService.annotationClick
|
|
125
|
+
.pipe(takeWhile(() => this._alive))
|
|
126
|
+
.subscribe((_) => {
|
|
127
|
+
this.annotationClick.emit(_);
|
|
128
|
+
});
|
|
129
|
+
this.chartService.annotationMove
|
|
130
|
+
.pipe(takeWhile(() => this._alive))
|
|
131
|
+
.subscribe((_) => {
|
|
132
|
+
this.annotationMove.emit(_);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
ngAfterViewInit() {
|
|
136
|
+
}
|
|
137
|
+
ngOnDestroy() {
|
|
138
|
+
this._alive = false;
|
|
139
|
+
}
|
|
140
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ChartComponent, deps: [{ token: i1.ChartService }, { token: i2.ZoomService }, { token: i3.BrushService }, { token: i4.ScaleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ChartComponent, selector: "teta-svg-chart", inputs: { config: "config" }, outputs: { pointerMove: "pointerMove", plotBandsMove: "plotBandsMove", plotBandClick: "plotBandClick", plotBandContextMenu: "plotBandContextMenu", plotLinesMove: "plotLinesMove", pointMove: "pointMove", chartClick: "chartClick", chartContextMenu: "chartContextMenu", annotationContextMenu: "annotationContextMenu", annotationClick: "annotationClick", annotationMove: "annotationMove", zoomServiceInstance: "zoomServiceInstance", brushServiceInstance: "brushServiceInstance" }, providers: [ChartService, ZoomService, ScaleService, BrushService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto justify-content-center\">\n <span class=\"font-body-3 color-text-40 overflow-hidden text-overflow-ellipsis nowrap text-align-center\">\n <div #ref><ng-content></ng-content></div>\n <span *ngIf=\"!ref.hasChildNodes()\">\n No data\n </span>\n </span>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.ChartContainerComponent, selector: "teta-chart-container" }, { kind: "component", type: i7.LegendComponent, selector: "teta-legend", inputs: ["series"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
142
|
+
}
|
|
143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ChartComponent, decorators: [{
|
|
144
|
+
type: Component,
|
|
145
|
+
args: [{ selector: 'teta-svg-chart', providers: [ChartService, ZoomService, ScaleService, BrushService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto justify-content-center\">\n <span class=\"font-body-3 color-text-40 overflow-hidden text-overflow-ellipsis nowrap text-align-center\">\n <div #ref><ng-content></ng-content></div>\n <span *ngIf=\"!ref.hasChildNodes()\">\n No data\n </span>\n </span>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column;height:100%;width:100%}\n"] }]
|
|
146
|
+
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i2.ZoomService }, { type: i3.BrushService }, { type: i4.ScaleService }]; }, propDecorators: { pointerMove: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], plotBandsMove: [{
|
|
149
|
+
type: Output
|
|
150
|
+
}], plotBandClick: [{
|
|
151
|
+
type: Output
|
|
152
|
+
}], plotBandContextMenu: [{
|
|
153
|
+
type: Output
|
|
154
|
+
}], plotLinesMove: [{
|
|
155
|
+
type: Output
|
|
156
|
+
}], pointMove: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], chartClick: [{
|
|
159
|
+
type: Output
|
|
160
|
+
}], chartContextMenu: [{
|
|
161
|
+
type: Output
|
|
162
|
+
}], annotationContextMenu: [{
|
|
163
|
+
type: Output
|
|
164
|
+
}], annotationClick: [{
|
|
165
|
+
type: Output
|
|
166
|
+
}], annotationMove: [{
|
|
167
|
+
type: Output
|
|
168
|
+
}], zoomServiceInstance: [{
|
|
169
|
+
type: Output
|
|
170
|
+
}], brushServiceInstance: [{
|
|
171
|
+
type: Output
|
|
172
|
+
}], config: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}] } });
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFLdEQsT0FBTyxFQUFDLEdBQUcsRUFBYyxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8sY0FBYztJQWlETjtJQUNBO0lBQ0E7SUFDQTtJQW5EbkIsYUFBYSxDQUFzQjtJQUNuQyxTQUFTLENBQTJCO0lBRXBDLFdBQVcsR0FBbUQsSUFBSSxZQUFZLEVBQW9DLENBQUM7SUFHbkgsYUFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUcvRixhQUFhLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRy9GLG1CQUFtQixHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUdyRyxhQUFhLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRy9GLFNBQVMsR0FBMEMsSUFBSSxZQUFZLEVB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QUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7dUdBdExVLGNBQWM7MkZBQWQsY0FBYyxvaUJBSGQsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsK0NDL0JwRSw2MEJBcUJBOzsyRkRhYSxjQUFjO2tCQVAxQixTQUFTOytCQUNFLGdCQUFnQixhQUdmLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLG1CQUNqRCx1QkFBdUIsQ0FBQyxNQUFNO21MQU0vQyxXQUFXO3NCQURWLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsZ0JBQWdCO3NCQURmLE1BQU07Z0JBSVAscUJBQXFCO3NCQURwQixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsbUJBQW1CO3NCQURsQixNQUFNO2dCQUlQLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFHTSxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7U2NhbGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtCcnVzaFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvYnJ1c2guc2VydmljZSc7XG5pbXBvcnQge0lDaGFydEV2ZW50fSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWV2ZW50JztcbmltcG9ydCB7UGxvdExpbmV9IGZyb20gJy4uL21vZGVsL3Bsb3QtbGluZSc7XG5pbXBvcnQge1Bsb3RCYW5kfSBmcm9tICcuLi9tb2RlbC9wbG90LWJhbmQnO1xuaW1wb3J0IHtJUG9pbnRNb3ZlfSBmcm9tICcuLi9tb2RlbC9pLXBvaW50LW1vdmUnO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGUsIHRha2VXaGlsZSwgd2l0aExhdGVzdEZyb219IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBbm5vdGF0aW9ufSBmcm9tICcuLi9tb2RlbC9hbm5vdGF0aW9uJztcbmltcG9ydCB7VG9vbHRpcFRyYWNraW5nfSBmcm9tICcuLi9tb2RlbC9lbnVtL3Rvb2x0aXAtdHJhY2tpbmcnO1xuaW1wb3J0IHtJU2NhbGVzTWFwfSBmcm9tICcuLi9tb2RlbC9pLXNjYWxlcy1tYXAnO1xuaW1wb3J0IHtTY2FsZVR5cGV9IGZyb20gXCIuLi9tb2RlbC9lbnVtL3NjYWxlLXR5cGVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1zdmctY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtDaGFydFNlcnZpY2UsIFpvb21TZXJ2aWNlLCBTY2FsZVNlcnZpY2UsIEJydXNoU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBoYXNTZXJpZXNEYXRhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzdmNDb25maWc6IE9ic2VydmFibGU8SUNoYXJ0Q29uZmlnPjtcbiAgQE91dHB1dCgpXG4gIHBvaW50ZXJNb3ZlOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8TWFwPG51bWJlciwgbnVtYmVyPj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxNYXA8bnVtYmVyLCBudW1iZXI+Pj4oKTtcblxuICBAT3V0cHV0KClcbiAgcGxvdEJhbmRzTW92ZTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4oKTtcblxuICBAT3V0cHV0KClcbiAgcGxvdEJhbmRDbGljazogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4oKTtcblxuICBAT3V0cHV0KClcbiAgcGxvdEJhbmRDb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RCYW5kPj4oKTtcblxuICBAT3V0cHV0KClcbiAgcGxvdExpbmVzTW92ZTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RMaW5lPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PFBsb3RMaW5lPj4oKTtcblxuICBAT3V0cHV0KClcbiAgcG9pbnRNb3ZlOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8SVBvaW50TW92ZT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxJUG9pbnRNb3ZlPj4oKTtcblxuICBAT3V0cHV0KClcbiAgY2hhcnRDbGljazogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEJhc2VQb2ludD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjaGFydENvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEJhc2VQb2ludD4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGFubm90YXRpb25Db250ZXh0TWVudTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGFubm90YXRpb25DbGljazogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGFubm90YXRpb25Nb3ZlOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4oKTtcblxuICBAT3V0cHV0KClcbiAgem9vbVNlcnZpY2VJbnN0YW5jZTogRXZlbnRFbWl0dGVyPFpvb21TZXJ2aWNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8Wm9vbVNlcnZpY2U+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGJydXNoU2VydmljZUluc3RhbmNlOiBFdmVudEVtaXR0ZXI8QnJ1c2hTZXJ2aWNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8QnJ1c2hTZXJ2aWNlPigpO1xuXG4gIEBJbnB1dCgpIHNldCBjb25maWcoY29uZmlnOiBJQ2hhcnRDb25maWcpIHtcbiAgICB0aGlzLmNoYXJ0U2VydmljZS5zZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLnpvb21TZXJ2aWNlLnNldEJyb2FkY2FzdENoYW5uZWwoY29uZmlnPy56b29tPy5zeW5jQ2hhbm5lbCk7XG4gIH1cblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgYnJ1c2hTZXJ2aWNlOiBCcnVzaFNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSkge1xuICAgIHRoaXMuc3ZjQ29uZmlnID0gdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnO1xuICAgIHRoaXMuaGFzU2VyaWVzRGF0YSA9IHRoaXMuc3ZjQ29uZmlnLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChfKSA9PiBfLnNlcmllcz8ubGVuZ3RoID4gMCAmJiBfLnNlcmllcz8uc29tZSgoXykgPT4gXy5kYXRhPy5sZW5ndGggPiAwKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXNldFpvb20oKSB7XG4gICAgdGhpcy5zY2FsZVNlcnZpY2UucmVzZXRab29tKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnpvb21TZXJ2aWNlSW5zdGFuY2UuZW1pdCh0aGlzLnpvb21TZXJ2aWNlKTtcbiAgICB0aGlzLmJydXNoU2VydmljZUluc3RhbmNlLmVtaXQodGhpcy5icnVzaFNlcnZpY2UpO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucG9pbnRlck1vdmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnNjYWxlU2VydmljZS5zY2FsZXMsIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFtQb2ludGVyRXZlbnQsIElTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW2V2ZW50LCB7eCwgeX0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB0b29sdGlwVHJhY2tpbmcgPSBjb25maWc/LnRvb2x0aXA/LnRyYWNraW5nO1xuICAgICAgICBpZiAodG9vbHRpcFRyYWNraW5nID09PSBUb29sdGlwVHJhY2tpbmcueSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gICAgICAgICAgeS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUub3B0aW9ucy5zY2FsZVR5cGUudHlwZSA9PT0gU2NhbGVUeXBlLmJhbmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlLnNjYWxlLmludmVydChldmVudC5vZmZzZXRZKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wb2ludGVyTW92ZS5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHRhcmdldDogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgICB4LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgdmFsdWUuc2NhbGUuaW52ZXJ0KGV2ZW50Lm9mZnNldFgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBvaW50ZXJNb3ZlLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgdGFyZ2V0OiByZXN1bHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5wbG90QmFuZEV2ZW50XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLnBsb3RCYW5kc01vdmUuZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucGxvdExpbmVNb3ZlLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpXG4gICAgKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMucGxvdExpbmVzTW92ZS5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucG9pbnRNb3ZlLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpXG4gICAgKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMucG9pbnRNb3ZlLmVtaXQoXyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5jaGFydENsaWNrXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKVxuICAgICAgKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuY2hhcnRDbGljay5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuY2hhcnRDb250ZXh0TWVudVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICAgICkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmNoYXJ0Q29udGV4dE1lbnUuZW1pdChfKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBsb3RCYW5kQ2xpY2tcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLnBsb3RCYW5kQ2xpY2suZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucGxvdEJhbmRDb250ZXh0TWVudVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMucGxvdEJhbmRDb250ZXh0TWVudS5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5hbm5vdGF0aW9uQ29udGV4dE1lbnVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLmFubm90YXRpb25Db250ZXh0TWVudS5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5hbm5vdGF0aW9uQ2xpY2tcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLmFubm90YXRpb25DbGljay5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5hbm5vdGF0aW9uTW92ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbk1vdmUuZW1pdChfKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIntcbiAgaGFzU2VyaWVzRGF0YTogaGFzU2VyaWVzRGF0YSB8IGFzeW5jLFxuICBzdmNDb25maWc6IHN2Y0NvbmZpZyB8IGFzeW5jXG59IGFzIGRhdGFcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEuaGFzU2VyaWVzRGF0YSA9PT0gdHJ1ZSBlbHNlIG5vRGF0YVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIj5cbiAgICAgIDx0ZXRhLWNoYXJ0LWNvbnRhaW5lciBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lciBwb3NpdGlvbi1yZWxhdGl2ZVwiPjwvdGV0YS1jaGFydC1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHRldGEtbGVnZW5kICpuZ0lmPVwiZGF0YS5zdmNDb25maWcubGVnZW5kPy5lbmFibGUgPT09IHRydWVcIiBbc2VyaWVzXT1cImRhdGEuc3ZjQ29uZmlnLnNlcmllc1wiPjwvdGV0YS1sZWdlbmQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0byBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmb250LWJvZHktMyBjb2xvci10ZXh0LTQwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzIG5vd3JhcCB0ZXh0LWFsaWduLWNlbnRlclwiPlxuICAgICAgPGRpdiAjcmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIXJlZi5oYXNDaGlsZE5vZGVzKClcIj5cbiAgICAgICAgTm8gZGF0YVxuICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|