@tetacom/svg-charts 1.4.21 → 1.4.23
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 +584 -338
- package/fesm2022/tetacom-svg-charts.mjs.map +1 -0
- 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/fesm2020/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
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, filter, lastValueFrom, map, of, shareReplay, Subject, take, withLatestFrom, } from 'rxjs';
|
|
3
|
-
import { defaultChartConfig } from '../default/default-chart-config';
|
|
4
|
-
import { defaultAxisConfig } from '../default/default-axis-config';
|
|
5
|
-
import { defaultSeriesConfig } from '../default/default-series-config';
|
|
6
|
-
import { ClipPointsDirection } from "../model/enum/clip-points-direction";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class ChartService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.config$ = new BehaviorSubject(defaultChartConfig());
|
|
11
|
-
this.size$ = new BehaviorSubject(null);
|
|
12
|
-
this.pointerMove$ = new Subject();
|
|
13
|
-
this.tooltips$ = new BehaviorSubject(new Map());
|
|
14
|
-
this.plotBandEvent$ = new Subject();
|
|
15
|
-
this.plotLineMove$ = new Subject();
|
|
16
|
-
this.pointMove$ = new Subject();
|
|
17
|
-
this.chartClick$ = new Subject();
|
|
18
|
-
this.chartContextMenu$ = new Subject();
|
|
19
|
-
this.annotationEvent$ = new Subject();
|
|
20
|
-
this.annotationMove$ = new Subject();
|
|
21
|
-
this.id = of((Date.now() + Math.random()).toString(36));
|
|
22
|
-
this.config = this.config$.asObservable().pipe(withLatestFrom(this.id), map(this.setDefaults), map(this.setPreparationData), map(this.restoreLocalStorage), shareReplay({
|
|
23
|
-
bufferSize: 1,
|
|
24
|
-
refCount: true,
|
|
25
|
-
}));
|
|
26
|
-
this.size = this.size$.asObservable().pipe(filter((size) => size != null));
|
|
27
|
-
this.pointerMove = this.pointerMove$.asObservable();
|
|
28
|
-
this.tooltips = this.tooltips$.asObservable();
|
|
29
|
-
this.plotBandEvent = this.plotBandEvent$.asObservable();
|
|
30
|
-
this.plotLineMove = this.plotLineMove$.asObservable();
|
|
31
|
-
this.pointMove = this.pointMove$.asObservable();
|
|
32
|
-
this.chartClick = this.chartClick$.asObservable();
|
|
33
|
-
this.chartContextMenu = this.chartContextMenu$.asObservable();
|
|
34
|
-
this.annotationClick = this.annotationEvent$
|
|
35
|
-
.asObservable()
|
|
36
|
-
.pipe(filter((_) => _?.event?.type === 'click'));
|
|
37
|
-
this.annotationContextMenu = this.annotationEvent$
|
|
38
|
-
.asObservable()
|
|
39
|
-
.pipe(filter((_) => _?.event?.type === 'contextmenu'));
|
|
40
|
-
this.annotationMove = this.annotationMove$.asObservable();
|
|
41
|
-
this.plotBandClick = this.plotBandEvent$
|
|
42
|
-
.asObservable()
|
|
43
|
-
.pipe(filter((_) => _?.event?.type === 'click'));
|
|
44
|
-
this.plotBandContextMenu = this.plotBandEvent$
|
|
45
|
-
.asObservable()
|
|
46
|
-
.pipe(filter((_) => _?.event?.type === 'contextmenu'));
|
|
47
|
-
// this.zoomInstance = this.zoomInstance$.asObservable();
|
|
48
|
-
// this.brushInstance = this.brushInstance$.asObservable();
|
|
49
|
-
}
|
|
50
|
-
setConfig(config) {
|
|
51
|
-
this.clearTooltips();
|
|
52
|
-
this.config$.next(config);
|
|
53
|
-
}
|
|
54
|
-
setSize(size) {
|
|
55
|
-
this.size$.next(size);
|
|
56
|
-
}
|
|
57
|
-
setPointerMove(event) {
|
|
58
|
-
this.pointerMove$.next(event);
|
|
59
|
-
}
|
|
60
|
-
setTooltip(tooltip) {
|
|
61
|
-
const currentTooltips = this.tooltips$.value;
|
|
62
|
-
if (!tooltip.point) {
|
|
63
|
-
currentTooltips.delete(tooltip.series);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
currentTooltips.set(tooltip.series, tooltip);
|
|
67
|
-
}
|
|
68
|
-
this.tooltips$.next(new Map(currentTooltips));
|
|
69
|
-
}
|
|
70
|
-
clearTooltips() {
|
|
71
|
-
this.tooltips$.next(new Map());
|
|
72
|
-
}
|
|
73
|
-
async toggleVisibilitySeries(seriesIndex, visible) {
|
|
74
|
-
if (seriesIndex?.length === 0) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const currentConfig = await lastValueFrom(this.config.pipe(take(1)));
|
|
78
|
-
seriesIndex.forEach((serieIndex) => {
|
|
79
|
-
const currentSerieIndex = currentConfig.series.findIndex((_) => _.id === serieIndex);
|
|
80
|
-
if (currentSerieIndex === -1) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
currentConfig.series[currentSerieIndex].visible = visible !== undefined ? visible : !currentConfig.series[currentSerieIndex].visible;
|
|
84
|
-
const seriesLinkCount = currentConfig.series.filter((_) => _.yAxisIndex === currentConfig.series[currentSerieIndex].yAxisIndex && _.visible === true).length;
|
|
85
|
-
currentConfig.yAxis[currentConfig.series[currentSerieIndex].yAxisIndex].visible = seriesLinkCount !== 0;
|
|
86
|
-
});
|
|
87
|
-
try {
|
|
88
|
-
this.saveCookie(currentConfig);
|
|
89
|
-
}
|
|
90
|
-
finally {
|
|
91
|
-
this.config$.next(currentConfig);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
emitMoveAnnotation(event) {
|
|
95
|
-
this.annotationMove$.next(event);
|
|
96
|
-
}
|
|
97
|
-
emitAnnotation(event) {
|
|
98
|
-
this.annotationEvent$.next(event);
|
|
99
|
-
}
|
|
100
|
-
emitPlotband(event) {
|
|
101
|
-
this.plotBandEvent$.next(event);
|
|
102
|
-
}
|
|
103
|
-
emitPlotline(event) {
|
|
104
|
-
this.plotLineMove$.next(event);
|
|
105
|
-
}
|
|
106
|
-
emitPoint(event) {
|
|
107
|
-
this.pointMove$.next(event);
|
|
108
|
-
}
|
|
109
|
-
emitChartClick(event) {
|
|
110
|
-
this.chartClick$.next(event);
|
|
111
|
-
}
|
|
112
|
-
emitChartContextMenu(event) {
|
|
113
|
-
this.chartContextMenu$.next(event);
|
|
114
|
-
}
|
|
115
|
-
// public emitZoomInstance(event: ZoomService) {
|
|
116
|
-
// this.zoomInstance$.next(event);
|
|
117
|
-
// }
|
|
118
|
-
//
|
|
119
|
-
// public emitZoomInstance(event: ZoomService) {
|
|
120
|
-
// this.zoomInstance$.next(event);
|
|
121
|
-
// }
|
|
122
|
-
saveCookie(config) {
|
|
123
|
-
if (!config.name)
|
|
124
|
-
return;
|
|
125
|
-
const hiddenSeries = config.series?.filter((_) => !_.visible).map((_) => _.id);
|
|
126
|
-
localStorage.setItem(`${config.name}_${ChartService._hiddenSeriesPostfix}`, JSON.stringify(hiddenSeries));
|
|
127
|
-
}
|
|
128
|
-
restoreLocalStorage(config) {
|
|
129
|
-
if (!config.name)
|
|
130
|
-
return config;
|
|
131
|
-
const hiddenSeries = localStorage.getItem(`${config.name}_${ChartService._hiddenSeriesPostfix}`);
|
|
132
|
-
if (hiddenSeries) {
|
|
133
|
-
const json = JSON.parse(hiddenSeries);
|
|
134
|
-
config.series = config.series.map((serie, index) => {
|
|
135
|
-
serie.visible = !json.includes(serie.id);
|
|
136
|
-
const currentSerieIndex = config.series.findIndex((_) => _.id === serie.id);
|
|
137
|
-
if (currentSerieIndex !== -1) {
|
|
138
|
-
const seriesLinkCount = config.series.filter((_) => _.yAxisIndex === config.series[currentSerieIndex].yAxisIndex && _.visible === true).length;
|
|
139
|
-
config.yAxis[config.series[currentSerieIndex].yAxisIndex].visible = seriesLinkCount !== 0;
|
|
140
|
-
}
|
|
141
|
-
return serie;
|
|
142
|
-
});
|
|
143
|
-
return config;
|
|
144
|
-
}
|
|
145
|
-
return config;
|
|
146
|
-
}
|
|
147
|
-
setDefaults(data) {
|
|
148
|
-
let [config, id] = data;
|
|
149
|
-
const defaultConfig = (defaultConfig) => {
|
|
150
|
-
return (source) => {
|
|
151
|
-
return Object.assign({}, defaultConfig, source);
|
|
152
|
-
};
|
|
153
|
-
};
|
|
154
|
-
config = Object.assign({}, defaultChartConfig(), config);
|
|
155
|
-
config.id = config.id ?? id;
|
|
156
|
-
config.xAxis = config.xAxis.map(defaultConfig(defaultAxisConfig));
|
|
157
|
-
config.yAxis = config.yAxis.map(defaultConfig(defaultAxisConfig));
|
|
158
|
-
config.series = config.series.map(defaultConfig(defaultSeriesConfig()));
|
|
159
|
-
config.series = config.series.map((_, index) => {
|
|
160
|
-
return {
|
|
161
|
-
..._,
|
|
162
|
-
data: _.data ?? [],
|
|
163
|
-
id: _.id ?? index,
|
|
164
|
-
};
|
|
165
|
-
});
|
|
166
|
-
const oppositeYCount = config.yAxis?.filter((_) => _.opposite);
|
|
167
|
-
const oppositeXCount = config.xAxis?.filter((_) => _.opposite);
|
|
168
|
-
const nonOppositeYCount = config.yAxis?.filter((_) => !_.opposite);
|
|
169
|
-
const nonOppositeXCount = config.xAxis?.filter((_) => !_.opposite);
|
|
170
|
-
if (nonOppositeXCount?.length > 1) {
|
|
171
|
-
config.bounds.bottom = 0;
|
|
172
|
-
}
|
|
173
|
-
if (oppositeXCount?.length > 1) {
|
|
174
|
-
config.bounds.top = 0;
|
|
175
|
-
}
|
|
176
|
-
if (nonOppositeYCount?.length > 1) {
|
|
177
|
-
config.bounds.left = 0;
|
|
178
|
-
}
|
|
179
|
-
if (oppositeYCount?.length > 1) {
|
|
180
|
-
config.bounds.right = 0;
|
|
181
|
-
}
|
|
182
|
-
config.tooltip = Object.assign({}, defaultChartConfig().tooltip, config.tooltip);
|
|
183
|
-
config.zoom = Object.assign({}, defaultChartConfig().zoom, config.zoom);
|
|
184
|
-
config.zoom.syncChannel = config.zoom?.syncChannel ?? id;
|
|
185
|
-
return config;
|
|
186
|
-
}
|
|
187
|
-
setPreparationData(config) {
|
|
188
|
-
if (config.inverted) {
|
|
189
|
-
const xAxes = [...config.xAxis];
|
|
190
|
-
const yAxes = [...config.yAxis];
|
|
191
|
-
config.xAxis = yAxes;
|
|
192
|
-
config.yAxis = xAxes;
|
|
193
|
-
config.series = config.series?.map((serie) => {
|
|
194
|
-
const x = serie.xAxisIndex;
|
|
195
|
-
const y = serie.yAxisIndex;
|
|
196
|
-
serie.xAxisIndex = y;
|
|
197
|
-
serie.yAxisIndex = x;
|
|
198
|
-
return {
|
|
199
|
-
...serie,
|
|
200
|
-
clipPointsDirection: ClipPointsDirection.y,
|
|
201
|
-
data: serie?.data?.map((point) => {
|
|
202
|
-
return {
|
|
203
|
-
...point,
|
|
204
|
-
x: point?.y,
|
|
205
|
-
y: point?.x,
|
|
206
|
-
x1: point?.y1,
|
|
207
|
-
y1: point?.x1,
|
|
208
|
-
};
|
|
209
|
-
}),
|
|
210
|
-
};
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
if (config?.brush?.enable) {
|
|
214
|
-
config.yAxis = config.yAxis.map((_) => ({ ..._, zoom: false }));
|
|
215
|
-
config.xAxis = config.xAxis.map((_) => ({ ..._, zoom: false }));
|
|
216
|
-
}
|
|
217
|
-
return config;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
ChartService._hiddenSeriesPostfix = 'hidden_series';
|
|
221
|
-
ChartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
222
|
-
ChartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartService, providedIn: 'root' });
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartService, decorators: [{
|
|
224
|
-
type: Injectable,
|
|
225
|
-
args: [{
|
|
226
|
-
providedIn: 'root',
|
|
227
|
-
}]
|
|
228
|
-
}], ctorParameters: function () { return []; } });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixhQUFhLEVBQ2IsR0FBRyxFQUVILEVBQUUsRUFDRixXQUFXLEVBQ1gsT0FBTyxFQUNQLElBQUksRUFDSixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFNZCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUlyRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFLeEUsTUFBTSxPQUFPLFlBQVk7SUFnQ3ZCO1FBZlEsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFlLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUNsRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDM0MsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztRQUMzQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQTBDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ3RELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFDckQsZUFBVSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQ3BELGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDMUQscUJB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QkFDUixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ1gsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDOzRCQUNYLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDYixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7eUJBQ2QsQ0FBQztvQkFDSixDQUFDLENBQUM7aUJBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUE3UWMsaUNBQW9CLEdBQUcsZUFBZ0IsQ0FBQTt5R0E5QjNDLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlsdGVyLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgdGFrZSxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJQ2hhcnRFdmVudH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1ldmVudCc7XG5pbXBvcnQge0lEaXNwbGF5VG9vbHRpcH0gZnJvbSAnLi4vbW9kZWwvaS1kaXNwbGF5LXRvb2x0aXAnO1xuaW1wb3J0IHtQbG90QmFuZH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1iYW5kJztcbmltcG9ydCB7UGxvdExpbmV9IGZyb20gJy4uL21vZGVsL3Bsb3QtbGluZSc7XG5pbXBvcnQge0lQb2ludE1vdmV9IGZyb20gJy4uL21vZGVsL2ktcG9pbnQtbW92ZSc7XG5pbXBvcnQge2RlZmF1bHRDaGFydENvbmZpZ30gZnJvbSAnLi4vZGVmYXVsdC9kZWZhdWx0LWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge2RlZmF1bHRBeGlzQ29uZmlnfSBmcm9tICcuLi9kZWZhdWx0L2RlZmF1bHQtYXhpcy1jb25maWcnO1xuaW1wb3J0IHtkZWZhdWx0U2VyaWVzQ29uZmlnfSBmcm9tICcuLi9kZWZhdWx0L2RlZmF1bHQtc2VyaWVzLWNvbmZpZyc7XG5pbXBvcnQge0Jhc2VQb2ludH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQge1Nlcmllc30gZnJvbSAnLi4vbW9kZWwvc2VyaWVzJztcbmltcG9ydCB7QW5ub3RhdGlvbn0gZnJvbSAnLi4vbW9kZWwvYW5ub3RhdGlvbic7XG5pbXBvcnQge0NsaXBQb2ludHNEaXJlY3Rpb259IGZyb20gXCIuLi9tb2RlbC9lbnVtL2NsaXAtcG9pbnRzLWRpcmVjdGlvblwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRTZXJ2aWNlIHtcbiAgcHVibGljIGlkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBjb25maWc6IE9ic2VydmFibGU8SUNoYXJ0Q29uZmlnPjtcbiAgcHVibGljIHNpemU6IE9ic2VydmFibGU8RE9NUmVjdD47XG4gIHB1YmxpYyBwb2ludGVyTW92ZTogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnQ+O1xuICBwdWJsaWMgdG9vbHRpcHM6IE9ic2VydmFibGU8TWFwPFNlcmllczxCYXNlUG9pbnQ+LCBJRGlzcGxheVRvb2x0aXA+PjtcbiAgcHVibGljIHBsb3RCYW5kRXZlbnQ6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PjtcbiAgcHVibGljIHBsb3RMaW5lTW92ZTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90TGluZT4+O1xuICBwdWJsaWMgcGxvdEJhbmRDbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90QmFuZD4+O1xuICBwdWJsaWMgcGxvdEJhbmRDb250ZXh0TWVudTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90QmFuZD4+O1xuICBwdWJsaWMgcG9pbnRNb3ZlOiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PElQb2ludE1vdmU+PjtcbiAgcHVibGljIGFubm90YXRpb25Nb3ZlOiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PEFubm90YXRpb24+PjtcbiAgcHVibGljIGFubm90YXRpb25DbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj47XG4gIHB1YmxpYyBhbm5vdGF0aW9uQ29udGV4dE1lbnU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+O1xuICBwdWJsaWMgY2hhcnRDbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PjtcbiAgcHVibGljIGNoYXJ0Q29udGV4dE1lbnU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj47XG5cbiAgcHJpdmF0ZSBjb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ2hhcnRDb25maWc+KGRlZmF1bHRDaGFydENvbmZpZygpKTtcbiAgcHJpdmF0ZSBzaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RE9NUmVjdD4obnVsbCk7XG4gIHByaXZhdGUgcG9pbnRlck1vdmUkID0gbmV3IFN1YmplY3Q8UG9pbnRlckV2ZW50PigpO1xuICBwcml2YXRlIHRvb2x0aXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPFNlcmllczxCYXNlUG9pbnQ+LCBJRGlzcGxheVRvb2x0aXA+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHBsb3RCYW5kRXZlbnQkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PigpO1xuICBwcml2YXRlIHBsb3RMaW5lTW92ZSQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxQbG90TGluZT4+KCk7XG4gIHByaXZhdGUgcG9pbnRNb3ZlJCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PElQb2ludE1vdmU+PigpO1xuICBwcml2YXRlIGNoYXJ0Q2xpY2skID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4oKTtcbiAgcHJpdmF0ZSBjaGFydENvbnRleHRNZW51JCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PEJhc2VQb2ludD4+KCk7XG4gIHByaXZhdGUgYW5ub3RhdGlvbkV2ZW50JCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PEFubm90YXRpb24+PigpO1xuICBwcml2YXRlIGFubm90YXRpb25Nb3ZlJCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PEFubm90YXRpb24+PigpO1xuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2hpZGRlblNlcmllc1Bvc3RmaXggPSAnaGlkZGVuX3Nlcmllcyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZCA9IG9mKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpKTtcblxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWckLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlkKSxcbiAgICAgIG1hcCh0aGlzLnNldERlZmF1bHRzKSxcbiAgICAgIG1hcCh0aGlzLnNldFByZXBhcmF0aW9uRGF0YSksXG4gICAgICBtYXAodGhpcy5yZXN0b3JlTG9jYWxTdG9yYWdlKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cblxuICAgIHRoaXMuc2l6ZSA9IHRoaXMuc2l6ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIoKHNpemUpID0+IHNpemUgIT0gbnVsbCkpO1xuICAgIHRoaXMucG9pbnRlck1vdmUgPSB0aGlzLnBvaW50ZXJNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnRvb2x0aXBzID0gdGhpcy50b29sdGlwcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5wbG90QmFuZEV2ZW50ID0gdGhpcy5wbG90QmFuZEV2ZW50JC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBsb3RMaW5lTW92ZSA9IHRoaXMucGxvdExpbmVNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBvaW50TW92ZSA9IHRoaXMucG9pbnRNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXJ0Q2xpY2sgPSB0aGlzLmNoYXJ0Q2xpY2skLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuY2hhcnRDb250ZXh0TWVudSA9IHRoaXMuY2hhcnRDb250ZXh0TWVudSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hbm5vdGF0aW9uQ2xpY2sgPSB0aGlzLmFubm90YXRpb25FdmVudCRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoZmlsdGVyKChfKSA9PiBfPy5ldmVudD8udHlwZSA9PT0gJ2NsaWNrJykpO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNvbnRleHRNZW51ID0gdGhpcy5hbm5vdGF0aW9uRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjb250ZXh0bWVudScpKTtcbiAgICB0aGlzLmFubm90YXRpb25Nb3ZlID0gdGhpcy5hbm5vdGF0aW9uTW92ZSQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICB0aGlzLnBsb3RCYW5kQ2xpY2sgPSB0aGlzLnBsb3RCYW5kRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjbGljaycpKTtcbiAgICB0aGlzLnBsb3RCYW5kQ29udGV4dE1lbnUgPSB0aGlzLnBsb3RCYW5kRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjb250ZXh0bWVudScpKTtcbiAgICAvLyB0aGlzLnpvb21JbnN0YW5jZSA9IHRoaXMuem9vbUluc3RhbmNlJC5hc09ic2VydmFibGUoKTtcbiAgICAvLyB0aGlzLmJydXNoSW5zdGFuY2UgPSB0aGlzLmJydXNoSW5zdGFuY2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIHNldENvbmZpZyhjb25maWc6IElDaGFydENvbmZpZykge1xuICAgIHRoaXMuY2xlYXJUb29sdGlwcygpO1xuICAgIHRoaXMuY29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2l6ZShzaXplOiBET01SZWN0KSB7XG4gICAgdGhpcy5zaXplJC5uZXh0KHNpemUpO1xuICB9XG5cbiAgcHVibGljIHNldFBvaW50ZXJNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLnBvaW50ZXJNb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUb29sdGlwKHRvb2x0aXA6IElEaXNwbGF5VG9vbHRpcCkge1xuICAgIGNvbnN0IGN1cnJlbnRUb29sdGlwcyA9IHRoaXMudG9vbHRpcHMkLnZhbHVlO1xuICAgIGlmICghdG9vbHRpcC5wb2ludCkge1xuICAgICAgY3VycmVudFRvb2x0aXBzLmRlbGV0ZSh0b29sdGlwLnNlcmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRUb29sdGlwcy5zZXQodG9vbHRpcC5zZXJpZXMsIHRvb2x0aXApO1xuICAgIH1cbiAgICB0aGlzLnRvb2x0aXBzJC5uZXh0KFxuICAgICAgbmV3IE1hcDxTZXJpZXM8QmFzZVBvaW50PiwgSURpc3BsYXlUb29sdGlwPihjdXJyZW50VG9vbHRpcHMpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclRvb2x0aXBzKCkge1xuICAgIHRoaXMudG9vbHRpcHMkLm5leHQobmV3IE1hcCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0b2dnbGVWaXNpYmlsaXR5U2VyaWVzKHNlcmllc0luZGV4OiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCB2aXNpYmxlPzogYm9vbGVhbikge1xuXG4gICAgaWYgKHNlcmllc0luZGV4Py5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLmNvbmZpZy5waXBlKHRha2UoMSkpKTtcblxuICAgIHNlcmllc0luZGV4LmZvckVhY2goKHNlcmllSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZUluZGV4ID0gY3VycmVudENvbmZpZy5zZXJpZXMuZmluZEluZGV4KChfKSA9PiBfLmlkID09PSBzZXJpZUluZGV4KTtcblxuICAgICAgaWYgKGN1cnJlbnRTZXJpZUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50Q29uZmlnLnNlcmllc1tjdXJyZW50U2VyaWVJbmRleF0udmlzaWJsZSA9IHZpc2libGUgIT09IHVuZGVmaW5lZCA/IHZpc2libGUgOiAhY3VycmVudENvbmZpZy5zZXJpZXNbY3VycmVudFNlcmllSW5kZXhdLnZpc2libGU7XG5cbiAgICAgIGNvbnN0IHNlcmllc0xpbmtDb3VudCA9IGN1cnJlbnRDb25maWcuc2VyaWVzLmZpbHRlcigoXykgPT4gXy55QXhpc0luZGV4ID09PSBjdXJyZW50Q29uZmlnLnNlcmllc1tjdXJyZW50U2VyaWVJbmRleF0ueUF4aXNJbmRleCAmJiBfLnZpc2libGUgPT09IHRydWUpLmxlbmd0aFxuICAgICAgY3VycmVudENvbmZpZy55QXhpc1tjdXJyZW50Q29uZmlnLnNlcmllc1tjdXJyZW50U2VyaWVJbmRleF0ueUF4aXNJbmRleF0udmlzaWJsZSA9IHNlcmllc0xpbmtDb3VudCAhPT0gMDtcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2F2ZUNvb2tpZShjdXJyZW50Q29uZmlnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jb25maWckLm5leHQoY3VycmVudENvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVtaXRNb3ZlQW5ub3RhdGlvbihldmVudDogSUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4pIHtcbiAgICB0aGlzLmFubm90YXRpb25Nb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0QW5ub3RhdGlvbihldmVudDogSUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4pIHtcbiAgICB0aGlzLmFubm90YXRpb25FdmVudCQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdFBsb3RiYW5kKGV2ZW50OiBJQ2hhcnRFdmVudDxQbG90QmFuZD4pIHtcbiAgICB0aGlzLnBsb3RCYW5kRXZlbnQkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRQbG90bGluZShldmVudDogSUNoYXJ0RXZlbnQ8UGxvdExpbmU+KSB7XG4gICAgdGhpcy5wbG90TGluZU1vdmUkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRQb2ludChldmVudDogSUNoYXJ0RXZlbnQ8SVBvaW50TW92ZT4pIHtcbiAgICB0aGlzLnBvaW50TW92ZSQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdENoYXJ0Q2xpY2soZXZlbnQ6IElDaGFydEV2ZW50PEJhc2VQb2ludD4pIHtcbiAgICB0aGlzLmNoYXJ0Q2xpY2skLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRDaGFydENvbnRleHRNZW51KGV2ZW50OiBJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+KSB7XG4gICAgdGhpcy5jaGFydENvbnRleHRNZW51JC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIC8vIHB1YmxpYyBlbWl0Wm9vbUluc3RhbmNlKGV2ZW50OiBab29tU2VydmljZSkge1xuICAvLyAgIHRoaXMuem9vbUluc3RhbmNlJC5uZXh0KGV2ZW50KTtcbiAgLy8gfVxuICAvL1xuICAvLyBwdWJsaWMgZW1pdFpvb21JbnN0YW5jZShldmVudDogWm9vbVNlcnZpY2UpIHtcbiAgLy8gICB0aGlzLnpvb21JbnN0YW5jZSQubmV4dChldmVudCk7XG4gIC8vIH1cblxuICBwcml2YXRlIHNhdmVDb29raWUoY29uZmlnOiBJQ2hhcnRDb25maWcpIHtcbiAgICBpZighY29uZmlnLm5hbWUpIHJldHVybjtcbiAgICBjb25zdCBoaWRkZW5TZXJpZXMgPSBjb25maWcuc2VyaWVzPy5maWx0ZXIoKF8pID0+ICFfLnZpc2libGUpLm1hcCgoXykgPT4gXy5pZCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7Y29uZmlnLm5hbWV9XyR7Q2hhcnRTZXJ2aWNlLl9oaWRkZW5TZXJpZXNQb3N0Zml4fWAsIEpTT04uc3RyaW5naWZ5KGhpZGRlblNlcmllcykpXG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVMb2NhbFN0b3JhZ2UoY29uZmlnOiBJQ2hhcnRDb25maWcpOiBJQ2hhcnRDb25maWcge1xuICAgIGlmKCFjb25maWcubmFtZSkgcmV0dXJuIGNvbmZpZztcblxuICAgIGNvbnN0IGhpZGRlblNlcmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke2NvbmZpZy5uYW1lfV8ke0NoYXJ0U2VydmljZS5faGlkZGVuU2VyaWVzUG9zdGZpeH1gKTtcbiAgICBpZiAoaGlkZGVuU2VyaWVzKSB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShoaWRkZW5TZXJpZXMpIGFzIEFycmF5PHN0cmluZyB8IG51bWJlcj47XG4gICAgICBjb25maWcuc2VyaWVzID0gY29uZmlnLnNlcmllcy5tYXAoKHNlcmllLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXJpZS52aXNpYmxlID0gIWpzb24uaW5jbHVkZXMoc2VyaWUuaWQpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZUluZGV4ID0gY29uZmlnLnNlcmllcy5maW5kSW5kZXgoKF8pID0+IF8uaWQgPT09IHNlcmllLmlkKTtcblxuICAgICAgICBpZiAoY3VycmVudFNlcmllSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3Qgc2VyaWVzTGlua0NvdW50ID0gY29uZmlnLnNlcmllcy5maWx0ZXIoKF8pID0+IF8ueUF4aXNJbmRleCA9PT0gY29uZmlnLnNlcmllc1tjdXJyZW50U2VyaWVJbmRleF0ueUF4aXNJbmRleCAmJiBfLnZpc2libGUgPT09IHRydWUpLmxlbmd0aFxuICAgICAgICAgIGNvbmZpZy55QXhpc1tjb25maWcuc2VyaWVzW2N1cnJlbnRTZXJpZUluZGV4XS55QXhpc0luZGV4XS52aXNpYmxlID0gc2VyaWVzTGlua0NvdW50ICE9PSAwO1xuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gc2VyaWU7XG4gICAgICB9KTtcblxuXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0cyhkYXRhOiBbSUNoYXJ0Q29uZmlnLCBzdHJpbmddKTogSUNoYXJ0Q29uZmlnIHtcblxuICAgIGxldCBbY29uZmlnLCBpZF0gPSBkYXRhO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IChkZWZhdWx0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4gKHNvdXJjZSkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZywgc291cmNlKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDaGFydENvbmZpZygpLCBjb25maWcpO1xuICAgIGNvbmZpZy5pZCA9IGNvbmZpZy5pZCA/PyBpZDtcblxuICAgIGNvbmZpZy54QXhpcyA9IGNvbmZpZy54QXhpcy5tYXAoZGVmYXVsdENvbmZpZyhkZWZhdWx0QXhpc0NvbmZpZykpO1xuICAgIGNvbmZpZy55QXhpcyA9IGNvbmZpZy55QXhpcy5tYXAoZGVmYXVsdENvbmZpZyhkZWZhdWx0QXhpc0NvbmZpZykpO1xuICAgIGNvbmZpZy5zZXJpZXMgPSBjb25maWcuc2VyaWVzLm1hcChkZWZhdWx0Q29uZmlnKGRlZmF1bHRTZXJpZXNDb25maWcoKSkpO1xuXG4gICAgY29uZmlnLnNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uXyxcbiAgICAgICAgZGF0YTogXy5kYXRhID8/IFtdLFxuICAgICAgICBpZDogXy5pZCA/PyBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHBvc2l0ZVlDb3VudCA9IGNvbmZpZy55QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBvcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcblxuICAgIGNvbnN0IG5vbk9wcG9zaXRlWUNvdW50ID0gY29uZmlnLnlBeGlzPy5maWx0ZXIoKF8pID0+ICFfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBub25PcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiAhXy5vcHBvc2l0ZSk7XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMuYm90dG9tID0gMDtcbiAgICB9XG5cbiAgICBpZiAob3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMudG9wID0gMDtcbiAgICB9XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVZQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMubGVmdCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKG9wcG9zaXRlWUNvdW50Py5sZW5ndGggPiAxKSB7XG4gICAgICBjb25maWcuYm91bmRzLnJpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICBjb25maWcudG9vbHRpcCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRDaGFydENvbmZpZygpLnRvb2x0aXAsXG4gICAgICBjb25maWcudG9vbHRpcFxuICAgICk7XG5cbiAgICBjb25maWcuem9vbSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRDaGFydENvbmZpZygpLnpvb20sXG4gICAgICBjb25maWcuem9vbVxuICAgICk7XG5cbiAgICBjb25maWcuem9vbS5zeW5jQ2hhbm5lbCA9IGNvbmZpZy56b29tPy5zeW5jQ2hhbm5lbCA/PyBpZDtcblxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldFByZXBhcmF0aW9uRGF0YShjb25maWc6IElDaGFydENvbmZpZyk6IElDaGFydENvbmZpZyB7XG4gICAgaWYgKGNvbmZpZy5pbnZlcnRlZCkge1xuXG5cbiAgICAgIGNvbnN0IHhBeGVzID0gWy4uLmNvbmZpZy54QXhpc107XG4gICAgICBjb25zdCB5QXhlcyA9IFsuLi5jb25maWcueUF4aXNdO1xuXG4gICAgICBjb25maWcueEF4aXMgPSB5QXhlcztcbiAgICAgIGNvbmZpZy55QXhpcyA9IHhBeGVzO1xuXG4gICAgICBjb25maWcuc2VyaWVzID0gY29uZmlnLnNlcmllcz8ubWFwKChzZXJpZSkgPT4ge1xuICAgICAgICBjb25zdCB4ID0gc2VyaWUueEF4aXNJbmRleDtcbiAgICAgICAgY29uc3QgeSA9IHNlcmllLnlBeGlzSW5kZXg7XG4gICAgICAgIHNlcmllLnhBeGlzSW5kZXggPSB5O1xuICAgICAgICBzZXJpZS55QXhpc0luZGV4ID0geDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zZXJpZSxcbiAgICAgICAgICBjbGlwUG9pbnRzRGlyZWN0aW9uOiBDbGlwUG9pbnRzRGlyZWN0aW9uLnksXG4gICAgICAgICAgZGF0YTogc2VyaWU/LmRhdGE/Lm1hcCgocG9pbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnBvaW50LFxuICAgICAgICAgICAgICB4OiBwb2ludD8ueSxcbiAgICAgICAgICAgICAgeTogcG9pbnQ/LngsXG4gICAgICAgICAgICAgIHgxOiBwb2ludD8ueTEsXG4gICAgICAgICAgICAgIHkxOiBwb2ludD8ueDEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZz8uYnJ1c2g/LmVuYWJsZSkge1xuICAgICAgY29uZmlnLnlBeGlzID0gY29uZmlnLnlBeGlzLm1hcCgoXykgPT4gKHsuLi5fLCB6b29tOiBmYWxzZX0pKTtcbiAgICAgIGNvbmZpZy54QXhpcyA9IGNvbmZpZy54QXhpcy5tYXAoKF8pID0+ICh7Li4uXywgem9vbTogZmFsc2V9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuIl19
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as d3 from 'd3';
|
|
3
|
-
import { Axis } from '../core/axis/axis';
|
|
4
|
-
import { AxisOrientation } from '../model/enum/axis-orientation';
|
|
5
|
-
import { combineLatest, map, shareReplay, take, withLatestFrom, } from 'rxjs';
|
|
6
|
-
import { ScaleType } from '../model/enum/scale-type';
|
|
7
|
-
import { ZoomMessage } from '../model/i-broadcast-message';
|
|
8
|
-
import { ZoomType } from "../model/enum/zoom-type";
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "./chart.service";
|
|
11
|
-
import * as i2 from "./zoom.service";
|
|
12
|
-
export class ScaleService {
|
|
13
|
-
constructor(chartService, zoomService) {
|
|
14
|
-
this.chartService = chartService;
|
|
15
|
-
this.zoomService = zoomService;
|
|
16
|
-
this.transformCacheX = new Map();
|
|
17
|
-
this.transformCacheY = new Map();
|
|
18
|
-
this.scaleMapping = new Map()
|
|
19
|
-
.set(ScaleType.linear, d3.scaleLinear)
|
|
20
|
-
.set(ScaleType.time, d3.scaleTime)
|
|
21
|
-
.set(ScaleType.log, d3.scaleLog)
|
|
22
|
-
.set(ScaleType.symlog, d3.scaleSymlog)
|
|
23
|
-
.set(ScaleType.pow, d3.scalePow)
|
|
24
|
-
.set(ScaleType.sqrt, d3.scaleSqrt)
|
|
25
|
-
.set(ScaleType.band, d3.scaleBand);
|
|
26
|
-
this.scales = combineLatest([
|
|
27
|
-
this.chartService.size,
|
|
28
|
-
this.chartService.config,
|
|
29
|
-
this.zoomService.zoomed,
|
|
30
|
-
]).pipe(map((data) => {
|
|
31
|
-
const [size, config, zoom] = data;
|
|
32
|
-
const xAxisMap = new Map();
|
|
33
|
-
const yAxisMap = new Map();
|
|
34
|
-
config.yAxis.map((_, index) => {
|
|
35
|
-
yAxisMap.set(index, Axis.createAxis(AxisOrientation.y, config, index));
|
|
36
|
-
});
|
|
37
|
-
config.xAxis.map((_, index) => {
|
|
38
|
-
xAxisMap.set(index, Axis.createAxis(AxisOrientation.x, config, index));
|
|
39
|
-
});
|
|
40
|
-
// Generate x scales
|
|
41
|
-
const left = Array.from(yAxisMap.values())
|
|
42
|
-
.filter((_) => _.options?.visible && _.options?.opposite)
|
|
43
|
-
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
44
|
-
const right = Array.from(yAxisMap.values())
|
|
45
|
-
.filter((_) => _.options?.visible && _.options?.opposite !== true)
|
|
46
|
-
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
47
|
-
const finalWidth = (size.width || 0) - left - right;
|
|
48
|
-
xAxisMap.forEach((axis) => {
|
|
49
|
-
let domain = axis.extremes;
|
|
50
|
-
if (axis?.options.inverted) {
|
|
51
|
-
domain = [...axis.extremes].reverse();
|
|
52
|
-
}
|
|
53
|
-
let scale = this.scaleMapping
|
|
54
|
-
.get(axis.options.scaleType.type)()
|
|
55
|
-
.domain(domain)
|
|
56
|
-
.range([0, finalWidth - config.bounds.right]);
|
|
57
|
-
if (axis.options.niceTicks) {
|
|
58
|
-
scale.nice();
|
|
59
|
-
}
|
|
60
|
-
if (axis.options.scaleType.type === ScaleType.log) {
|
|
61
|
-
scale.base(axis.options.scaleType.base);
|
|
62
|
-
}
|
|
63
|
-
if (axis.options.scaleType.type === ScaleType.band) {
|
|
64
|
-
scale.paddingInner(0.1);
|
|
65
|
-
scale.paddingOuter(0.1);
|
|
66
|
-
scale.align(0.1);
|
|
67
|
-
}
|
|
68
|
-
axis.setScale(scale);
|
|
69
|
-
axis.setOriginDomain(scale.domain());
|
|
70
|
-
const hasCache = this.transformCacheX.has(axis.index);
|
|
71
|
-
const shouldRestore = zoom?.axis?.orientation !== AxisOrientation.x ||
|
|
72
|
-
zoom.axis?.index !== axis.index;
|
|
73
|
-
if (hasCache && shouldRestore) {
|
|
74
|
-
const restoredTransform = this.transformCacheX.get(axis.index);
|
|
75
|
-
axis.setScale(restoredTransform.rescaleX(scale));
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
if (zoom && zoom.domain) {
|
|
79
|
-
if (zoom.axis?.orientation === AxisOrientation.x) {
|
|
80
|
-
if (xAxisMap.has(zoom.axis.index)) {
|
|
81
|
-
const x = xAxisMap.get(zoom.axis.index);
|
|
82
|
-
const transform = this.zoomService.getD3Transform(zoom.domain, x.originDomain, x.scale, AxisOrientation.x, x.options.inverted);
|
|
83
|
-
const rescaled = transform.rescaleX(x.scale.copy());
|
|
84
|
-
x.setScale(rescaled);
|
|
85
|
-
this.transformCacheX.set(x.index, transform);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Generate y axis
|
|
90
|
-
const top = Array.from(xAxisMap.values())
|
|
91
|
-
.filter((_) => _.options?.visible && _.options?.opposite)
|
|
92
|
-
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
93
|
-
const bottom = Array.from(xAxisMap.values())
|
|
94
|
-
.filter((_) => _.options?.visible && _.options?.opposite !== true)
|
|
95
|
-
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
96
|
-
const finalHeight = (size.height || 0) -
|
|
97
|
-
top -
|
|
98
|
-
bottom -
|
|
99
|
-
config?.bounds?.top -
|
|
100
|
-
config.bounds?.bottom;
|
|
101
|
-
yAxisMap.forEach((axis) => {
|
|
102
|
-
let domain = axis.extremes;
|
|
103
|
-
if (axis.orientation === AxisOrientation.y) {
|
|
104
|
-
domain = [...axis.extremes].reverse();
|
|
105
|
-
}
|
|
106
|
-
if (axis?.options.inverted) {
|
|
107
|
-
domain = domain.reverse();
|
|
108
|
-
}
|
|
109
|
-
const scale = this.scaleMapping
|
|
110
|
-
.get(axis.options.scaleType.type)()
|
|
111
|
-
.domain(domain)
|
|
112
|
-
.range([config.bounds.top, finalHeight]);
|
|
113
|
-
if (axis.options.niceTicks) {
|
|
114
|
-
scale.nice();
|
|
115
|
-
}
|
|
116
|
-
if (axis.options.scaleType.type === ScaleType.log) {
|
|
117
|
-
scale.base(axis.options.scaleType.base);
|
|
118
|
-
}
|
|
119
|
-
if (axis.options.scaleType.type === ScaleType.band) {
|
|
120
|
-
scale.paddingInner(0.1);
|
|
121
|
-
scale.paddingOuter(0.1);
|
|
122
|
-
scale.align(0.1);
|
|
123
|
-
}
|
|
124
|
-
axis.setScale(scale);
|
|
125
|
-
axis.setOriginDomain(scale.domain());
|
|
126
|
-
const hasCache = this.transformCacheY.has(axis.index);
|
|
127
|
-
const shouldRestore = zoom?.axis?.orientation !== AxisOrientation.y ||
|
|
128
|
-
zoom.axis?.index !== axis.index;
|
|
129
|
-
if (hasCache && shouldRestore) {
|
|
130
|
-
const restoredTransform = this.transformCacheY.get(axis.index);
|
|
131
|
-
axis.setScale(restoredTransform.rescaleY(scale));
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
if (zoom && zoom.domain) {
|
|
135
|
-
if (zoom.axis?.orientation === AxisOrientation.y) {
|
|
136
|
-
if (yAxisMap.has(zoom.axis.index)) {
|
|
137
|
-
const y = yAxisMap.get(zoom.axis.index);
|
|
138
|
-
const transform = this.zoomService.getD3Transform(zoom.domain, y.originDomain, y.scale, AxisOrientation.y, y.options.inverted);
|
|
139
|
-
const rescaled = transform.rescaleY(y.scale.copy());
|
|
140
|
-
y.setScale(rescaled);
|
|
141
|
-
this.transformCacheY.set(y.index, transform);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return {
|
|
146
|
-
x: xAxisMap,
|
|
147
|
-
y: yAxisMap
|
|
148
|
-
};
|
|
149
|
-
}), shareReplay({
|
|
150
|
-
bufferSize: 1,
|
|
151
|
-
refCount: true,
|
|
152
|
-
}));
|
|
153
|
-
}
|
|
154
|
-
resetZoom() {
|
|
155
|
-
this.chartService.config.pipe(take(1), withLatestFrom(this.scales)).subscribe(([config, scales]) => {
|
|
156
|
-
config.xAxis.forEach((axis, index) => {
|
|
157
|
-
const scale = scales?.x?.get(index)?.originDomain;
|
|
158
|
-
if (scale) {
|
|
159
|
-
const msg = new ZoomMessage({
|
|
160
|
-
eventType: "end",
|
|
161
|
-
axis: {
|
|
162
|
-
index,
|
|
163
|
-
orientation: AxisOrientation.x
|
|
164
|
-
},
|
|
165
|
-
domain: scale,
|
|
166
|
-
chartId: config.id
|
|
167
|
-
});
|
|
168
|
-
this.zoomService.fireZoom(msg);
|
|
169
|
-
if (config.zoom.syncChannel && config.zoom.syncType === ZoomType.x) {
|
|
170
|
-
this.zoomService.broadcastZoom(msg);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
config.yAxis.forEach((axis, index) => {
|
|
175
|
-
const scale = scales?.y?.get(index)?.originDomain;
|
|
176
|
-
if (scale) {
|
|
177
|
-
const msg = new ZoomMessage({
|
|
178
|
-
eventType: "end",
|
|
179
|
-
axis: {
|
|
180
|
-
index,
|
|
181
|
-
orientation: AxisOrientation.y
|
|
182
|
-
},
|
|
183
|
-
domain: scale,
|
|
184
|
-
chartId: config.id
|
|
185
|
-
});
|
|
186
|
-
this.zoomService.fireZoom(msg);
|
|
187
|
-
if (config.zoom.syncChannel && config.zoom.syncType === ZoomType.y) {
|
|
188
|
-
this.zoomService.broadcastZoom(msg);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
ScaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ScaleService, deps: [{ token: i1.ChartService }, { token: i2.ZoomService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
-
ScaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ScaleService, providedIn: 'root' });
|
|
197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ScaleService, decorators: [{
|
|
198
|
-
type: Injectable,
|
|
199
|
-
args: [{
|
|
200
|
-
providedIn: 'root',
|
|
201
|
-
}]
|
|
202
|
-
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i2.ZoomService }]; } });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUV6QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRy9ELE9BQU8sRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxHQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxZQUFZO0lBZXZCLFlBQ1UsWUFBMEIsRUFDMUIsV0FBd0I7UUFEeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFkMUIsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBRW5ELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCO2FBQzdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUM7YUFDckMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNqQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQy9C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Q0FBQyxDQUFDO3FCQUNyQztpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQztnQkFDbEQsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUM7d0JBQzFCLFNBQVMsRUFBRSxLQUFLO3dCQUNoQixJQUFJLEVBQUU7NEJBQ0osS0FBSzs0QkFDTCxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7eUJBQy9CO3dCQUNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTtxQkFDbkIsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUU7d0JBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNyQztpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzt5R0E5T1UsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge1pvb21UcmFuc2Zvcm19IGZyb20gJ2QzJztcbmltcG9ydCB7QXhpc30gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4vY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIHRha2UsIHdpdGhMYXRlc3RGcm9tLH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuL3pvb20uc2VydmljZSc7XG5pbXBvcnQge1NjYWxlVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS9zY2FsZS10eXBlJztcbmltcG9ydCB7SVNjYWxlc01hcH0gZnJvbSAnLi4vbW9kZWwvaS1zY2FsZXMtbWFwJztcbmltcG9ydCB7Wm9vbU1lc3NhZ2V9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSBcIi4uL21vZGVsL2VudW0vem9vbS10eXBlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2FsZVNlcnZpY2Uge1xuICBwdWJsaWMgc2NhbGVzOiBPYnNlcnZhYmxlPElTY2FsZXNNYXA+O1xuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ2FjaGVYID0gbmV3IE1hcDxudW1iZXIsIFpvb21UcmFuc2Zvcm0+KCk7XG4gIHByaXZhdGUgdHJhbnNmb3JtQ2FjaGVZID0gbmV3IE1hcDxudW1iZXIsIFpvb21UcmFuc2Zvcm0+KCk7XG5cbiAgcHJpdmF0ZSBzY2FsZU1hcHBpbmcgPSBuZXcgTWFwPFNjYWxlVHlwZSwgYW55PigpXG4gICAgLnNldChTY2FsZVR5cGUubGluZWFyLCBkMy5zY2FsZUxpbmVhcilcbiAgICAuc2V0KFNjYWxlVHlwZS50aW1lLCBkMy5zY2FsZVRpbWUpXG4gICAgLnNldChTY2FsZVR5cGUubG9nLCBkMy5zY2FsZUxvZylcbiAgICAuc2V0KFNjYWxlVHlwZS5zeW1sb2csIGQzLnNjYWxlU3ltbG9nKVxuICAgIC5zZXQoU2NhbGVUeXBlLnBvdywgZDMuc2NhbGVQb3cpXG4gICAgLnNldChTY2FsZVR5cGUuc3FydCwgZDMuc2NhbGVTcXJ0KVxuICAgIC5zZXQoU2NhbGVUeXBlLmJhbmQsIGQzLnNjYWxlQmFuZClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlXG4gICkge1xuXG4gICAgdGhpcy5zY2FsZXMgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnNpemUsXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5jb25maWcsXG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLnpvb21lZCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWcsIFpvb21NZXNzYWdlXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2l6ZSwgY29uZmlnLCB6b29tXSA9IGRhdGE7XG5cbiAgICAgICAgY29uc3QgeEF4aXNNYXAgPSBuZXcgTWFwPG51bWJlciwgQXhpcz4oKTtcbiAgICAgICAgY29uc3QgeUF4aXNNYXAgPSBuZXcgTWFwPG51bWJlciwgQXhpcz4oKTtcblxuICAgICAgICBjb25maWcueUF4aXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHlBeGlzTWFwLnNldChpbmRleCwgQXhpcy5jcmVhdGVBeGlzKEF4aXNPcmllbnRhdGlvbi55LCBjb25maWcsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uZmlnLnhBeGlzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICB4QXhpc01hcC5zZXQoaW5kZXgsIEF4aXMuY3JlYXRlQXhpcyhBeGlzT3JpZW50YXRpb24ueCwgY29uZmlnLCBpbmRleCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSB4IHNjYWxlc1xuICAgICAgICBjb25zdCBsZWZ0ID0gQXJyYXkuZnJvbSh5QXhpc01hcC52YWx1ZXMoKSlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICBjb25zdCByaWdodCA9IEFycmF5LmZyb20oeUF4aXNNYXAudmFsdWVzKCkpXG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ci5zZWxmU2l6ZSwgMCk7XG5cbiAgICAgICAgY29uc3QgZmluYWxXaWR0aCA9IChzaXplLndpZHRoIHx8IDApIC0gbGVmdCAtIHJpZ2h0O1xuXG4gICAgICAgIHhBeGlzTWFwLmZvckVhY2goKGF4aXMpID0+IHtcbiAgICAgICAgICBsZXQgZG9tYWluID0gYXhpcy5leHRyZW1lcztcblxuICAgICAgICAgIGlmIChheGlzPy5vcHRpb25zLmludmVydGVkKSB7XG4gICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzY2FsZSA9IHRoaXMuc2NhbGVNYXBwaW5nXG4gICAgICAgICAgICAuZ2V0KGF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSkoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UoWzAsIGZpbmFsV2lkdGggLSBjb25maWcuYm91bmRzLnJpZ2h0XSk7XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgc2NhbGUubmljZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgIHNjYWxlLmJhc2UoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS5iYXNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgICAgICAgc2NhbGUucGFkZGluZ0lubmVyKDAuMSk7XG4gICAgICAgICAgICBzY2FsZS5wYWRkaW5nT3V0ZXIoMC4xKTtcbiAgICAgICAgICAgIHNjYWxlLmFsaWduKDAuMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBheGlzLnNldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgICBheGlzLnNldE9yaWdpbkRvbWFpbihzY2FsZS5kb21haW4oKSk7XG5cblxuICAgICAgICAgIGNvbnN0IGhhc0NhY2hlID0gdGhpcy50cmFuc2Zvcm1DYWNoZVguaGFzKGF4aXMuaW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHNob3VsZFJlc3RvcmUgPVxuICAgICAgICAgICAgem9vbT8uYXhpcz8ub3JpZW50YXRpb24gIT09IEF4aXNPcmllbnRhdGlvbi54IHx8XG4gICAgICAgICAgICB6b29tLmF4aXM/LmluZGV4ICE9PSBheGlzLmluZGV4O1xuXG4gICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmVkVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm1DYWNoZVguZ2V0KGF4aXMuaW5kZXgpO1xuICAgICAgICAgICAgYXhpcy5zZXRTY2FsZShyZXN0b3JlZFRyYW5zZm9ybS5yZXNjYWxlWChzY2FsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHpvb20gJiYgem9vbS5kb21haW4pIHtcbiAgICAgICAgICBpZiAoem9vbS5heGlzPy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcbiAgICAgICAgICAgIGlmICh4QXhpc01hcC5oYXMoem9vbS5heGlzLmluZGV4KSkge1xuICAgICAgICAgICAgICBjb25zdCB4ID0geEF4aXNNYXAuZ2V0KHpvb20uYXhpcy5pbmRleCk7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuem9vbVNlcnZpY2UuZ2V0RDNUcmFuc2Zvcm0oem9vbS5kb21haW4sIHgub3JpZ2luRG9tYWluLCB4LnNjYWxlLCBBeGlzT3JpZW50YXRpb24ueCwgeC5vcHRpb25zLmludmVydGVkKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzY2FsZWQgPSB0cmFuc2Zvcm0ucmVzY2FsZVgoeC5zY2FsZS5jb3B5KCkpO1xuICAgICAgICAgICAgICB4LnNldFNjYWxlKHJlc2NhbGVkKTtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZVguc2V0KHguaW5kZXgsIHRyYW5zZm9ybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICAvLyBHZW5lcmF0ZSB5IGF4aXNcblxuICAgICAgICBjb25zdCB0b3AgPSBBcnJheS5mcm9tKHhBeGlzTWFwLnZhbHVlcygpKVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucz8udmlzaWJsZSAmJiBfLm9wdGlvbnM/Lm9wcG9zaXRlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IEFycmF5LmZyb20oeEF4aXNNYXAudmFsdWVzKCkpXG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ci5zZWxmU2l6ZSwgMCk7XG5cbiAgICAgICAgY29uc3QgZmluYWxIZWlnaHQgPVxuICAgICAgICAgIChzaXplLmhlaWdodCB8fCAwKSAtXG4gICAgICAgICAgdG9wIC1cbiAgICAgICAgICBib3R0b20gLVxuICAgICAgICAgIGNvbmZpZz8uYm91bmRzPy50b3AgLVxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbTtcblxuICAgICAgICB5QXhpc01hcC5mb3JFYWNoKChheGlzKSA9PiB7XG4gICAgICAgICAgbGV0IGRvbWFpbiA9IGF4aXMuZXh0cmVtZXM7XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgICAgICAgIGRvbWFpbiA9IFsuLi5heGlzLmV4dHJlbWVzXS5yZXZlcnNlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGF4aXM/Lm9wdGlvbnMuaW52ZXJ0ZWQpIHtcbiAgICAgICAgICAgIGRvbWFpbiA9IGRvbWFpbi5yZXZlcnNlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlTWFwcGluZ1xuICAgICAgICAgICAgLmdldChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUpKClcbiAgICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgICAgLnJhbmdlKFtjb25maWcuYm91bmRzLnRvcCwgZmluYWxIZWlnaHRdKTtcblxuXG4gICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5uaWNlVGlja3MpIHtcbiAgICAgICAgICAgIHNjYWxlLm5pY2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUubG9nKSB7XG4gICAgICAgICAgICBzY2FsZS5iYXNlKGF4aXMub3B0aW9ucy5zY2FsZVR5cGUuYmFzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSA9PT0gU2NhbGVUeXBlLmJhbmQpIHtcbiAgICAgICAgICAgIHNjYWxlLnBhZGRpbmdJbm5lcigwLjEpO1xuICAgICAgICAgICAgc2NhbGUucGFkZGluZ091dGVyKDAuMSk7XG4gICAgICAgICAgICBzY2FsZS5hbGlnbigwLjEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXhpcy5zZXRTY2FsZShzY2FsZSk7XG4gICAgICAgICAgYXhpcy5zZXRPcmlnaW5Eb21haW4oc2NhbGUuZG9tYWluKCkpO1xuXG4gICAgICAgICAgY29uc3QgaGFzQ2FjaGUgPSB0aGlzLnRyYW5zZm9ybUNhY2hlWS5oYXMoYXhpcy5pbmRleCk7XG5cbiAgICAgICAgICBjb25zdCBzaG91bGRSZXN0b3JlID1cbiAgICAgICAgICAgIHpvb20/LmF4aXM/Lm9yaWVudGF0aW9uICE9PSBBeGlzT3JpZW50YXRpb24ueSB8fFxuICAgICAgICAgICAgem9vbS5heGlzPy5pbmRleCAhPT0gYXhpcy5pbmRleDtcblxuICAgICAgICAgIGlmIChoYXNDYWNoZSAmJiBzaG91bGRSZXN0b3JlKSB7XG4gICAgICAgICAgICBjb25zdCByZXN0b3JlZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtQ2FjaGVZLmdldChheGlzLmluZGV4KTtcbiAgICAgICAgICAgIGF4aXMuc2V0U2NhbGUocmVzdG9yZWRUcmFuc2Zvcm0ucmVzY2FsZVkoc2NhbGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh6b29tICYmIHpvb20uZG9tYWluKSB7XG4gICAgICAgICAgaWYgKHpvb20uYXhpcz8ub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICAgICAgICBpZiAoeUF4aXNNYXAuaGFzKHpvb20uYXhpcy5pbmRleCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeSA9IHlBeGlzTWFwLmdldCh6b29tLmF4aXMuaW5kZXgpO1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnpvb21TZXJ2aWNlLmdldEQzVHJhbnNmb3JtKHpvb20uZG9tYWluLFxuICAgICAgICAgICAgICAgIHkub3JpZ2luRG9tYWluLFxuICAgICAgICAgICAgICAgIHkuc2NhbGUsXG4gICAgICAgICAgICAgICAgQXhpc09yaWVudGF0aW9uLnksXG4gICAgICAgICAgICAgICAgeS5vcHRpb25zLmludmVydGVkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2NhbGVkID0gdHJhbnNmb3JtLnJlc2NhbGVZKHkuc2NhbGUuY29weSgpKTtcbiAgICAgICAgICAgICAgeS5zZXRTY2FsZShyZXNjYWxlZCk7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ2FjaGVZLnNldCh5LmluZGV4LCB0cmFuc2Zvcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHhBeGlzTWFwLFxuICAgICAgICAgIHk6IHlBeGlzTWFwXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXNldFpvb20oKSB7XG4gICAgdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZXMpXG4gICAgKS5zdWJzY3JpYmUoKFtjb25maWcsIHNjYWxlc106IFtJQ2hhcnRDb25maWcsIElTY2FsZXNNYXBdKSA9PiB7XG4gICAgICBjb25maWcueEF4aXMuZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSBzY2FsZXM/Lng/LmdldChpbmRleCk/Lm9yaWdpbkRvbWFpbjtcbiAgICAgICAgaWYgKHNjYWxlKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogXCJlbmRcIixcbiAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBBeGlzT3JpZW50YXRpb24ueFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbWFpbjogc2NhbGUsXG4gICAgICAgICAgICBjaGFydElkOiBjb25maWcuaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmZpcmVab29tKG1zZyk7XG4gICAgICAgICAgaWYgKGNvbmZpZy56b29tLnN5bmNDaGFubmVsICYmIGNvbmZpZy56b29tLnN5bmNUeXBlID09PSBab29tVHlwZS54KSB7XG4gICAgICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmJyb2FkY2FzdFpvb20obXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBjb25maWcueUF4aXMuZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSBzY2FsZXM/Lnk/LmdldChpbmRleCk/Lm9yaWdpbkRvbWFpbjtcbiAgICAgICAgaWYgKHNjYWxlKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogXCJlbmRcIixcbiAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBBeGlzT3JpZW50YXRpb24ueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbWFpbjogc2NhbGUsXG4gICAgICAgICAgICBjaGFydElkOiBjb25maWcuaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmZpcmVab29tKG1zZyk7XG4gICAgICAgICAgaWYgKGNvbmZpZy56b29tLnN5bmNDaGFubmVsICYmIGNvbmZpZy56b29tLnN5bmNUeXBlID09PSBab29tVHlwZS55KSB7XG4gICAgICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmJyb2FkY2FzdFpvb20obXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, combineLatest, filter, shareReplay } from 'rxjs';
|
|
2
|
-
import { AxisOrientation } from '../model/enum/axis-orientation';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { zoomIdentity } from 'd3';
|
|
5
|
-
import { ZoomType } from "../model/enum/zoom-type";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "./broadcast.service";
|
|
8
|
-
import * as i2 from "./chart.service";
|
|
9
|
-
export class ZoomService {
|
|
10
|
-
constructor(_broadcast, _chart) {
|
|
11
|
-
this._broadcast = _broadcast;
|
|
12
|
-
this._chart = _chart;
|
|
13
|
-
this.zoomed$ = new BehaviorSubject(null);
|
|
14
|
-
this.zoomed = this.zoomed$.asObservable().pipe(shareReplay({
|
|
15
|
-
bufferSize: 1,
|
|
16
|
-
refCount: true
|
|
17
|
-
}));
|
|
18
|
-
}
|
|
19
|
-
fireZoom(zoom) {
|
|
20
|
-
this.zoomed$.next(zoom);
|
|
21
|
-
}
|
|
22
|
-
broadcastZoom(zoom) {
|
|
23
|
-
if (this.broadcastChannel?.length) {
|
|
24
|
-
this._broadcast.broadcastZoom({
|
|
25
|
-
channel: this.broadcastChannel,
|
|
26
|
-
message: zoom
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
setBroadcastChannel(channel) {
|
|
31
|
-
if (this.broadcastSub) {
|
|
32
|
-
this.broadcastSub?.unsubscribe();
|
|
33
|
-
}
|
|
34
|
-
this.broadcastChannel = channel;
|
|
35
|
-
if (this.broadcastChannel?.length) {
|
|
36
|
-
this.broadcastSub = combineLatest([this._broadcast.subscribeToZoom(this.broadcastChannel), this._chart.config])
|
|
37
|
-
.pipe(filter(([zoom, config]) => {
|
|
38
|
-
return zoom.message?.chartId !== config.id && (config.zoom.syncType === ZoomType.xy ||
|
|
39
|
-
(zoom.message.axis.orientation === AxisOrientation.y && config.zoom.syncType === ZoomType.y) ||
|
|
40
|
-
(zoom.message.axis.orientation === AxisOrientation.x && config.zoom.syncType === ZoomType.x));
|
|
41
|
-
}))
|
|
42
|
-
.subscribe(([zoom, config]) => {
|
|
43
|
-
this.fireZoom(zoom.message);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
getD3Transform(targetDomain, originalDomain, scale, orientation, inverted) {
|
|
48
|
-
const zoomScale = Math.abs(scale(originalDomain[1]) - scale(originalDomain[0])) / Math.abs(scale(targetDomain[1]) - scale(targetDomain[0]));
|
|
49
|
-
let transform = zoomIdentity.scale(zoomScale);
|
|
50
|
-
if (orientation === AxisOrientation.x) {
|
|
51
|
-
if (!!inverted) {
|
|
52
|
-
transform = transform.translate(-scale(Math.max(...targetDomain)), 0);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
transform = transform.translate(-scale(Math.min(...targetDomain)), 0);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (orientation === AxisOrientation.y) {
|
|
59
|
-
if (!!inverted) {
|
|
60
|
-
transform = transform.translate(0, -scale(Math.min(...targetDomain)));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
transform = transform.translate(0, -scale(Math.max(...targetDomain)));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return transform;
|
|
67
|
-
}
|
|
68
|
-
ngOnDestroy() {
|
|
69
|
-
this.broadcastSub?.unsubscribe();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
ZoomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomService, deps: [{ token: i1.BroadcastService }, { token: i2.ChartService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
73
|
-
ZoomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomService, providedIn: 'root' });
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomService, decorators: [{
|
|
75
|
-
type: Injectable,
|
|
76
|
-
args: [{
|
|
77
|
-
providedIn: 'root',
|
|
78
|
-
}]
|
|
79
|
-
}], ctorParameters: function () { return [{ type: i1.BroadcastService }, { type: i2.ChartService }]; } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L3NlcnZpY2Uvem9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxXQUFXLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLElBQUksQ0FBQztBQUloQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFLakQsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBb0IsVUFBNEIsRUFDNUIsTUFBb0I7UUFEcEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUxoQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFNdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDekQsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQjtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWlCO1FBQzdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZTtRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUMvQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQzdFO2lCQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQWlELEVBQUUsRUFBRTtnQkFDOUUsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUFFO29CQUNwQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzVGLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLGVBQWUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUM3RixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7aUJBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsWUFBOEIsRUFDOUIsY0FBZ0MsRUFDaEMsS0FBSyxFQUNMLFdBQTRCLEVBQzVCLFFBQWlCO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVJLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxXQUFXLEtBQUssZUFBZSxDQUFDLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7aUJBQU07Z0JBQ0wsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7U0FDRjtRQUVELElBQUksV0FBVyxLQUFLLGVBQWUsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNkLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNMLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7d0dBN0VVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQnJvYWRjYXN0TWVzc2FnZSwgWm9vbU1lc3NhZ2V9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHt6b29tSWRlbnRpdHl9IGZyb20gJ2QzJztcbmltcG9ydCB7QnJvYWRjYXN0U2VydmljZX0gZnJvbSAnLi9icm9hZGNhc3Quc2VydmljZSc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tIFwiLi4vbW9kZWwvaS1jaGFydC1jb25maWdcIjtcbmltcG9ydCB7Wm9vbVR5cGV9IGZyb20gXCIuLi9tb2RlbC9lbnVtL3pvb20tdHlwZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgWm9vbVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICB6b29tZWQ6IE9ic2VydmFibGU8Wm9vbU1lc3NhZ2U+O1xuXG4gIHByaXZhdGUgem9vbWVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Wm9vbU1lc3NhZ2U+KG51bGwpO1xuICBwcml2YXRlIGJyb2FkY2FzdENoYW5uZWw6IHN0cmluZztcbiAgcHJpdmF0ZSBicm9hZGNhc3RTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9icm9hZGNhc3Q6IEJyb2FkY2FzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYXJ0OiBDaGFydFNlcnZpY2UpIHtcbiAgICB0aGlzLnpvb21lZCA9IHRoaXMuem9vbWVkJC5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KHtcbiAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICByZWZDb3VudDogdHJ1ZVxuICAgIH0pKTtcbiAgfVxuXG4gIGZpcmVab29tKHpvb206IFpvb21NZXNzYWdlKSB7XG4gICAgdGhpcy56b29tZWQkLm5leHQoem9vbSk7XG4gIH1cblxuICBicm9hZGNhc3Rab29tKHpvb206IFpvb21NZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9icm9hZGNhc3QuYnJvYWRjYXN0Wm9vbSh7XG4gICAgICAgIGNoYW5uZWw6IHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCxcbiAgICAgICAgbWVzc2FnZTogem9vbVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5icm9hZGNhc3RTdWIpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBjaGFubmVsO1xuICAgIGlmICh0aGlzLmJyb2FkY2FzdENoYW5uZWw/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5icm9hZGNhc3RTdWIgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBbdGhpcy5fYnJvYWRjYXN0LnN1YnNjcmliZVRvWm9vbSh0aGlzLmJyb2FkY2FzdENoYW5uZWwpLCB0aGlzLl9jaGFydC5jb25maWddXG4gICAgICApXG4gICAgICAgIC5waXBlKGZpbHRlcigoW3pvb20sIGNvbmZpZ106IFtJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4sIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgICByZXR1cm4gem9vbS5tZXNzYWdlPy5jaGFydElkICE9PSBjb25maWcuaWQgJiYgKFxuICAgICAgICAgICAgY29uZmlnLnpvb20uc3luY1R5cGUgPT09IFpvb21UeXBlLnh5IHx8XG4gICAgICAgICAgICAoem9vbS5tZXNzYWdlLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55ICYmIGNvbmZpZy56b29tLnN5bmNUeXBlID09PSBab29tVHlwZS55KSB8fFxuICAgICAgICAgICAgKHpvb20ubWVzc2FnZS5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCAmJiBjb25maWcuem9vbS5zeW5jVHlwZSA9PT0gWm9vbVR5cGUueClcbiAgICAgICAgICApO1xuICAgICAgICB9KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW3pvb20sIGNvbmZpZ10pID0+IHtcbiAgICAgICAgICB0aGlzLmZpcmVab29tKHpvb20ubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEQzVHJhbnNmb3JtKHRhcmdldERvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgb3JpZ2luYWxEb21haW46IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogQXhpc09yaWVudGF0aW9uLFxuICAgICAgICAgICAgICAgICBpbnZlcnRlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHpvb21TY2FsZSA9IE1hdGguYWJzKHNjYWxlKG9yaWdpbmFsRG9tYWluWzFdKSAtIHNjYWxlKG9yaWdpbmFsRG9tYWluWzBdKSkgLyBNYXRoLmFicyhzY2FsZSh0YXJnZXREb21haW5bMV0pIC0gc2NhbGUodGFyZ2V0RG9tYWluWzBdKSk7XG4gICAgbGV0IHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eS5zY2FsZSh6b29tU2NhbGUpO1xuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcbiAgICAgIGlmICghIWludmVydGVkKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjYWxlKE1hdGgubWF4KC4uLnRhcmdldERvbWFpbikpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjYWxlKE1hdGgubWluKC4uLnRhcmdldERvbWFpbikpLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICBpZiAoISFpbnZlcnRlZCkge1xuICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1zY2FsZShNYXRoLm1pbiguLi50YXJnZXREb21haW4pKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1zY2FsZShNYXRoLm1heCguLi50YXJnZXREb21haW4pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJyb2FkY2FzdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|