@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
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { AxisOrientation } from '../../../model/enum/axis-orientation';
|
|
2
|
-
import { maxIndex } from 'd3-array';
|
|
3
|
-
import { getTextWidth } from '../../utils/public-api';
|
|
4
|
-
import { ScaleType } from "../../../model/enum/scale-type";
|
|
5
|
-
export class AxisSizeBuilder {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.titlePadding = 11;
|
|
8
|
-
this.basePadding = 16;
|
|
9
|
-
this.backupRatio = 0.58;
|
|
10
|
-
}
|
|
11
|
-
build(settings) {
|
|
12
|
-
let finalPadding = this.basePadding;
|
|
13
|
-
if (settings.orientation === AxisOrientation.y) {
|
|
14
|
-
const formatter = settings.options.tickFormat || settings.defaultFormatter();
|
|
15
|
-
finalPadding += settings.options.title ? this.titlePadding : 0;
|
|
16
|
-
const scale = settings.defaultScale()();
|
|
17
|
-
scale.domain(settings.extremes);
|
|
18
|
-
if (settings.options.scaleType.type === ScaleType.band) {
|
|
19
|
-
scale.ticks = (ticks) => {
|
|
20
|
-
return scale.domain();
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
const ticks = scale.ticks(20);
|
|
24
|
-
const maxElementLengthIndex = maxIndex(ticks, (_) => formatter(_).length);
|
|
25
|
-
finalPadding += getTextWidth(formatter(ticks[maxElementLengthIndex]), this.backupRatio);
|
|
26
|
-
}
|
|
27
|
-
if (settings.orientation === AxisOrientation.x) {
|
|
28
|
-
finalPadding += finalPadding + 20;
|
|
29
|
-
}
|
|
30
|
-
return finalPadding;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpcy1zaXplLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY29yZS9heGlzL2J1aWxkZXJzL2F4aXMtc2l6ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsTUFBTSxPQUFPLGVBQWU7SUFBNUI7UUFDVSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksQ0FBQztJQXNDN0IsQ0FBQztJQXBDQyxLQUFLLENBQUMsUUFBYztRQUNsQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXBDLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTdFLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRy9CLElBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JELEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtvQkFDL0IsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBQ3ZCLENBQUMsQ0FBQTthQUNGO1lBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5QixNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FDcEMsS0FBSyxFQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMzQixDQUFDO1lBRUYsWUFBWSxJQUFJLFlBQVksQ0FDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7U0FDSDtRQUVELElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQzlDLFlBQVksSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9heGlzJztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHttYXhJbmRleH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtnZXRUZXh0V2lkdGh9IGZyb20gJy4uLy4uL3V0aWxzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHtJQnVpbGRlcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvaS1idWlsZGVyJztcbmltcG9ydCB7U2NhbGVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvZW51bS9zY2FsZS10eXBlXCI7XG5cbmV4cG9ydCBjbGFzcyBBeGlzU2l6ZUJ1aWxkZXIgaW1wbGVtZW50cyBJQnVpbGRlcjxBeGlzLCBudW1iZXI+IHtcbiAgcHJpdmF0ZSB0aXRsZVBhZGRpbmcgPSAxMTtcbiAgcHJpdmF0ZSBiYXNlUGFkZGluZyA9IDE2O1xuICBwcml2YXRlIGJhY2t1cFJhdGlvID0gMC41ODtcblxuICBidWlsZChzZXR0aW5nczogQXhpcyk6IG51bWJlciB7XG4gICAgbGV0IGZpbmFsUGFkZGluZyA9IHRoaXMuYmFzZVBhZGRpbmc7XG5cbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZXR0aW5ncy5vcHRpb25zLnRpY2tGb3JtYXQgfHwgc2V0dGluZ3MuZGVmYXVsdEZvcm1hdHRlcigpO1xuXG4gICAgICBmaW5hbFBhZGRpbmcgKz0gc2V0dGluZ3Mub3B0aW9ucy50aXRsZSA/IHRoaXMudGl0bGVQYWRkaW5nIDogMDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBzZXR0aW5ncy5kZWZhdWx0U2NhbGUoKSgpO1xuICAgICAgc2NhbGUuZG9tYWluKHNldHRpbmdzLmV4dHJlbWVzKVxuXG5cbiAgICAgIGlmKHNldHRpbmdzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5iYW5kKSB7XG4gICAgICAgIHNjYWxlLnRpY2tzID0gKHRpY2tzPzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlLmRvbWFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHRpY2tzID0gc2NhbGUudGlja3MoMjApO1xuXG4gICAgICBjb25zdCBtYXhFbGVtZW50TGVuZ3RoSW5kZXggPSBtYXhJbmRleChcbiAgICAgICAgdGlja3MsXG4gICAgICAgIChfKSA9PiBmb3JtYXR0ZXIoXykubGVuZ3RoXG4gICAgICApO1xuXG4gICAgICBmaW5hbFBhZGRpbmcgKz0gZ2V0VGV4dFdpZHRoKFxuICAgICAgICBmb3JtYXR0ZXIodGlja3NbbWF4RWxlbWVudExlbmd0aEluZGV4XSksXG4gICAgICAgIHRoaXMuYmFja3VwUmF0aW9cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgZmluYWxQYWRkaW5nICs9IGZpbmFsUGFkZGluZyArIDIwO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbFBhZGRpbmc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { AxisOrientation } from '../../../model/enum/axis-orientation';
|
|
2
|
-
import * as d3 from 'd3';
|
|
3
|
-
import { ScaleType } from "../../../model/enum/scale-type";
|
|
4
|
-
export class ExtremesBuilder {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.extentAccessorMap = new Map()
|
|
7
|
-
.set(AxisOrientation.x, (_) => _.x)
|
|
8
|
-
.set(AxisOrientation.y, (_) => _.y);
|
|
9
|
-
this.extremes = [0, 0];
|
|
10
|
-
}
|
|
11
|
-
build(settings) {
|
|
12
|
-
const options = settings.options;
|
|
13
|
-
const hasMin = options?.min != null;
|
|
14
|
-
const hasMax = options?.max != null;
|
|
15
|
-
if (!hasMin || !hasMax) {
|
|
16
|
-
const linkedSeries = settings.linkedSeries();
|
|
17
|
-
const data = linkedSeries.reduce((acc, current) => {
|
|
18
|
-
return acc.concat(current.data);
|
|
19
|
-
}, []);
|
|
20
|
-
const accessor = this.extentAccessorMap.get(settings.orientation);
|
|
21
|
-
this.extremes = data.length > 1 ? d3.extent(data, accessor) : [0, 0];
|
|
22
|
-
if (settings.options.scaleType.type === ScaleType.band) {
|
|
23
|
-
this.extremes = data.map(accessor);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (hasMin) {
|
|
27
|
-
this.extremes[0] = options?.min;
|
|
28
|
-
}
|
|
29
|
-
if (hasMax) {
|
|
30
|
-
this.extremes[1] = options?.max;
|
|
31
|
-
}
|
|
32
|
-
return this.extremes;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmVtZXMtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jb3JlL2F4aXMvYnVpbGRlcnMvZXh0cmVtZXMtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBQ1Usc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQ0Y7YUFDOUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QixhQUFRLEdBQXdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZ0NqRCxDQUFDO0lBOUJDLEtBQUssQ0FBQyxRQUFjO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQWdCLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXJFLElBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUNuQztTQUVGO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUM7U0FDakM7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQztTQUNqQztRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lCdWlsZGVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9pLWJ1aWxkZXInO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9heGlzJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge1NjYWxlVHlwZX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2VudW0vc2NhbGUtdHlwZVwiO1xuXG5leHBvcnQgY2xhc3MgRXh0cmVtZXNCdWlsZGVyIGltcGxlbWVudHMgSUJ1aWxkZXI8QXhpcywgbnVtYmVyW10gfCBzdHJpbmdbXT4ge1xuICBwcml2YXRlIGV4dGVudEFjY2Vzc29yTWFwID0gbmV3IE1hcDxBeGlzT3JpZW50YXRpb24sXG4gICAgKHBvaW50OiBCYXNlUG9pbnQpID0+IG51bWJlcj4oKVxuICAgIC5zZXQoQXhpc09yaWVudGF0aW9uLngsIChfKSA9PiBfLngpXG4gICAgLnNldChBeGlzT3JpZW50YXRpb24ueSwgKF8pID0+IF8ueSk7XG5cbiAgcHJpdmF0ZSBleHRyZW1lczogbnVtYmVyW10gfCBzdHJpbmdbXSA9IFswLCAwXTtcblxuICBidWlsZChzZXR0aW5nczogQXhpcyk6IG51bWJlcltdIHwgc3RyaW5nW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZXR0aW5ncy5vcHRpb25zO1xuXG4gICAgY29uc3QgaGFzTWluID0gb3B0aW9ucz8ubWluICE9IG51bGw7XG4gICAgY29uc3QgaGFzTWF4ID0gb3B0aW9ucz8ubWF4ICE9IG51bGw7XG5cbiAgICBpZiAoIWhhc01pbiB8fCAhaGFzTWF4KSB7XG4gICAgICBjb25zdCBsaW5rZWRTZXJpZXMgPSBzZXR0aW5ncy5saW5rZWRTZXJpZXMoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsaW5rZWRTZXJpZXMucmVkdWNlKChhY2M6IEJhc2VQb2ludFtdLCBjdXJyZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGN1cnJlbnQuZGF0YSk7XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IHRoaXMuZXh0ZW50QWNjZXNzb3JNYXAuZ2V0KHNldHRpbmdzLm9yaWVudGF0aW9uKTtcbiAgICAgIHRoaXMuZXh0cmVtZXMgPSBkYXRhLmxlbmd0aCA+IDEgPyBkMy5leHRlbnQoZGF0YSwgYWNjZXNzb3IpIDogWzAsIDBdO1xuXG4gICAgICBpZihzZXR0aW5ncy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgICB0aGlzLmV4dHJlbWVzID0gZGF0YS5tYXAoYWNjZXNzb3IpXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoaGFzTWluKSB7XG4gICAgICB0aGlzLmV4dHJlbWVzWzBdID0gb3B0aW9ucz8ubWluO1xuICAgIH1cblxuICAgIGlmIChoYXNNYXgpIHtcbiAgICAgIHRoaXMuZXh0cmVtZXNbMV0gPSBvcHRpb25zPy5tYXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXh0cmVtZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Directive, Input, } from '@angular/core';
|
|
2
|
-
import { BrushType } from '../model/enum/brush-type';
|
|
3
|
-
import * as d3 from 'd3';
|
|
4
|
-
import { BrushMessage } from '../model/i-broadcast-message';
|
|
5
|
-
import { filter, takeWhile } from 'rxjs';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../service/brush.service";
|
|
8
|
-
import * as i2 from "../service/chart.service";
|
|
9
|
-
export class BrushableDirective {
|
|
10
|
-
constructor(brushService, chartService, element, zone) {
|
|
11
|
-
this.brushService = brushService;
|
|
12
|
-
this.chartService = chartService;
|
|
13
|
-
this.element = element;
|
|
14
|
-
this.zone = zone;
|
|
15
|
-
this.brushMap = new Map()
|
|
16
|
-
.set(BrushType.x, d3.brushX())
|
|
17
|
-
.set(BrushType.y, d3.brushY());
|
|
18
|
-
this._alive = true;
|
|
19
|
-
this._container = d3.select(this.element.nativeElement);
|
|
20
|
-
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
this.brushService.brushDomain.pipe(takeWhile(() => this._alive), filter((brush) => brush.chartId !== this.config.id)).subscribe((brush) => {
|
|
23
|
-
this._container.call(this.brush.move, [
|
|
24
|
-
Math.floor(brush.selection[0]),
|
|
25
|
-
Math.floor(brush.selection[1]),
|
|
26
|
-
].map(this.axis.scale));
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
ngOnDestroy() {
|
|
30
|
-
this._alive = false;
|
|
31
|
-
}
|
|
32
|
-
ngAfterViewInit() {
|
|
33
|
-
if (this.config?.brush?.enable) {
|
|
34
|
-
const brushMessage = new BrushMessage({
|
|
35
|
-
chartId: this.config.id,
|
|
36
|
-
selection: [this.config?.brush?.from, this.config?.brush?.to],
|
|
37
|
-
mode: 'init'
|
|
38
|
-
});
|
|
39
|
-
this.brushService.setBrush(brushMessage);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
ngOnChanges(changes) {
|
|
43
|
-
if (changes.hasOwnProperty('config')) {
|
|
44
|
-
this.clearPreviousSelection();
|
|
45
|
-
}
|
|
46
|
-
if (this.config?.brush?.enable) {
|
|
47
|
-
this.applyBrush(this.config, this.axis.scale);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
applyBrush(config, brushScale) {
|
|
51
|
-
this.brush?.on('start brush end', null);
|
|
52
|
-
if (config.brush?.enable) {
|
|
53
|
-
this.brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);
|
|
54
|
-
this.brush.on('start brush end', (_) => {
|
|
55
|
-
if (_.sourceEvent) {
|
|
56
|
-
if (!_.selection)
|
|
57
|
-
return;
|
|
58
|
-
const [from, to] = _.selection;
|
|
59
|
-
if (to - from === 0) {
|
|
60
|
-
const selection = this.selection?.map(brushScale) ??
|
|
61
|
-
[config.brush?.from, config.brush?.to].map(brushScale);
|
|
62
|
-
const halfBrushHeight = (selection[1] - selection[0]) / 2;
|
|
63
|
-
const invertedSelection = [
|
|
64
|
-
from - halfBrushHeight,
|
|
65
|
-
to + halfBrushHeight,
|
|
66
|
-
].map(brushScale.invert);
|
|
67
|
-
if (invertedSelection[1] - invertedSelection[0] >
|
|
68
|
-
config.brush?.max) {
|
|
69
|
-
this._container.call(this.brush.move, [
|
|
70
|
-
Math.floor(invertedSelection[0]),
|
|
71
|
-
Math.floor(invertedSelection[0] + config.brush?.max),
|
|
72
|
-
].map(brushScale));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (invertedSelection[1] - invertedSelection[0] <
|
|
76
|
-
config.brush?.min) {
|
|
77
|
-
this._container.call(this.brush.move, [
|
|
78
|
-
Math.floor(invertedSelection[0]),
|
|
79
|
-
Math.ceil(invertedSelection[0] + config.brush?.min),
|
|
80
|
-
].map(brushScale));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this._container.call(this.brush.move, [
|
|
84
|
-
from - halfBrushHeight,
|
|
85
|
-
to + halfBrushHeight,
|
|
86
|
-
]);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (brushScale.invert(to) - brushScale.invert(from) >
|
|
90
|
-
config.brush?.max) {
|
|
91
|
-
this._container.call(this.brush.move, this.selection
|
|
92
|
-
? [
|
|
93
|
-
this.selection[0],
|
|
94
|
-
this.selection[0] + config.brush?.max,
|
|
95
|
-
].map(brushScale)
|
|
96
|
-
: [config.brush?.from, config.brush?.to].map(brushScale));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (brushScale.invert(to) - brushScale.invert(from) <
|
|
100
|
-
config.brush?.min) {
|
|
101
|
-
this._container.call(this.brush.move, this.selection
|
|
102
|
-
? [
|
|
103
|
-
this.selection[0],
|
|
104
|
-
this.selection[0] + config.brush?.min,
|
|
105
|
-
].map(brushScale)
|
|
106
|
-
: [config.brush?.from, config.brush?.to].map(brushScale));
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (_.sourceEvent instanceof MouseEvent) {
|
|
110
|
-
this.selection = _.selection.map(brushScale.invert);
|
|
111
|
-
}
|
|
112
|
-
const brushMessage = new BrushMessage({
|
|
113
|
-
chartId: this.config.id,
|
|
114
|
-
selection: [brushScale.invert(from), brushScale.invert(to)],
|
|
115
|
-
mode: _.mode
|
|
116
|
-
});
|
|
117
|
-
this.brushService.setBrush(brushMessage);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
this.zone.runOutsideAngular(() => {
|
|
121
|
-
setTimeout(() => {
|
|
122
|
-
this._container.call(this.brush);
|
|
123
|
-
let domain = brushScale.domain();
|
|
124
|
-
if (config?.brush?.from) {
|
|
125
|
-
domain[0] = config.brush.from;
|
|
126
|
-
}
|
|
127
|
-
if (config?.brush?.to) {
|
|
128
|
-
domain[1] = config.brush.to;
|
|
129
|
-
}
|
|
130
|
-
this._container.call(this.brush.move, this.selection
|
|
131
|
-
? this.selection.map(brushScale)
|
|
132
|
-
: domain.map(brushScale), {});
|
|
133
|
-
}, 0);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
clearPreviousSelection() {
|
|
138
|
-
this.selection = null;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
BrushableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: BrushableDirective, deps: [{ token: i1.BrushService }, { token: i2.ChartService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
142
|
-
BrushableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: BrushableDirective, selector: "[tetaBrushable]", inputs: { config: "config", axis: "axis" }, usesOnChanges: true, ngImport: i0 });
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: BrushableDirective, decorators: [{
|
|
144
|
-
type: Directive,
|
|
145
|
-
args: [{
|
|
146
|
-
selector: '[tetaBrushable]',
|
|
147
|
-
}]
|
|
148
|
-
}], ctorParameters: function () { return [{ type: i1.BrushService }, { type: i2.ChartService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { config: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], axis: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}] } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ1c2hhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQUt2QyxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsT0FBbUIsRUFDbkIsSUFBWTtRQUhaLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQVZkLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0M7YUFDM0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFTcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hDLFNBQVMsQ0FB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QUFDLElBQUksQ0FBQztxQkFDL0I7b0JBRUQsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTt3QkFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3FCQUM3QjtvQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2YsSUFBSSxDQUFDLFNBQVM7d0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQzFCLEVBQUUsQ0FDSCxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7OytHQTlMVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCOzRLQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7QnJ1c2hTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL2JydXNoLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge0F4aXN9IGZyb20gJy4uL2NvcmUvYXhpcy9heGlzJztcbmltcG9ydCB7QnJ1c2hUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtCcnVzaE1lc3NhZ2V9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VXaGlsZX0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhQnJ1c2hhYmxlXScsXG59KVxuZXhwb3J0IGNsYXNzIEJydXNoYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb25maWc6IElDaGFydENvbmZpZztcbiAgQElucHV0KCkgYXhpczogQXhpcztcblxuICBwcml2YXRlIHNlbGVjdGlvbjogbnVtYmVyW107XG4gIHByaXZhdGUgYnJ1c2g6IGQzLkJydXNoQmVoYXZpb3I8YW55PjtcbiAgcHJpdmF0ZSBicnVzaE1hcCA9IG5ldyBNYXA8QnJ1c2hUeXBlLCBkMy5CcnVzaEJlaGF2aW9yPGFueT4+KClcbiAgICAuc2V0KEJydXNoVHlwZS54LCBkMy5icnVzaFgoKSlcbiAgICAuc2V0KEJydXNoVHlwZS55LCBkMy5icnVzaFkoKSk7XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfY29udGFpbmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYnJ1c2hTZXJ2aWNlOiBCcnVzaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fY29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYnJ1c2hTZXJ2aWNlLmJydXNoRG9tYWluLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgZmlsdGVyKChicnVzaCkgPT4gYnJ1c2guY2hhcnRJZCAhPT0gdGhpcy5jb25maWcuaWQpXG4gICAgKS5zdWJzY3JpYmUoKGJydXNoKSA9PiB7XG4gICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgdGhpcy5icnVzaC5tb3ZlLFxuICAgICAgICBbXG4gICAgICAgICAgTWF0aC5mbG9vcihicnVzaC5zZWxlY3Rpb25bMF0pLFxuICAgICAgICAgIE1hdGguZmxvb3IoYnJ1c2guc2VsZWN0aW9uWzFdKSxcbiAgICAgICAgXS5tYXAodGhpcy5heGlzLnNjYWxlKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYodGhpcy5jb25maWc/LmJydXNoPy5lbmFibGUpIHtcbiAgICAgIGNvbnN0IGJydXNoTWVzc2FnZSA9IG5ldyBCcnVzaE1lc3NhZ2Uoe1xuICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgc2VsZWN0aW9uOiBbdGhpcy5jb25maWc/LmJydXNoPy5mcm9tLCB0aGlzLmNvbmZpZz8uYnJ1c2g/LnRvXSxcbiAgICAgICAgbW9kZTogJ2luaXQnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJ1c2hTZXJ2aWNlLnNldEJydXNoKGJydXNoTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjb25maWcnKSkge1xuICAgICAgdGhpcy5jbGVhclByZXZpb3VzU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5icnVzaD8uZW5hYmxlKSB7XG4gICAgICB0aGlzLmFwcGx5QnJ1c2goXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICB0aGlzLmF4aXMuc2NhbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlCcnVzaChjb25maWc6IElDaGFydENvbmZpZywgYnJ1c2hTY2FsZTogYW55KSB7XG4gICAgdGhpcy5icnVzaD8ub24oJ3N0YXJ0IGJydXNoIGVuZCcsIG51bGwpO1xuICAgIGlmIChjb25maWcuYnJ1c2g/LmVuYWJsZSkge1xuICAgICAgdGhpcy5icnVzaCA9IHRoaXMuYnJ1c2hNYXAuZ2V0KGNvbmZpZz8uYnJ1c2g/LnR5cGUgPz8gQnJ1c2hUeXBlLngpO1xuICAgICAgdGhpcy5icnVzaC5vbignc3RhcnQgYnJ1c2ggZW5kJywgKF86IGQzLkQzQnJ1c2hFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgIGlmIChfLnNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFfLnNlbGVjdGlvbikgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IFtmcm9tLCB0b10gPSBfLnNlbGVjdGlvbiBhcyBudW1iZXJbXTtcbiAgICAgICAgICBpZiAodG8gLSBmcm9tID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IG51bWJlcltdID1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/Lm1hcChicnVzaFNjYWxlKSA/P1xuICAgICAgICAgICAgICBbY29uZmlnLmJydXNoPy5mcm9tLCBjb25maWcuYnJ1c2g/LnRvXS5tYXAoYnJ1c2hTY2FsZSk7XG4gICAgICAgICAgICBjb25zdCBoYWxmQnJ1c2hIZWlnaHQgPSAoc2VsZWN0aW9uWzFdIC0gc2VsZWN0aW9uWzBdKSAvIDI7XG4gICAgICAgICAgICBjb25zdCBpbnZlcnRlZFNlbGVjdGlvbjogbnVtYmVyW10gPSBbXG4gICAgICAgICAgICAgIGZyb20gLSBoYWxmQnJ1c2hIZWlnaHQsXG4gICAgICAgICAgICAgIHRvICsgaGFsZkJydXNoSGVpZ2h0LFxuICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZS5pbnZlcnQpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGludmVydGVkU2VsZWN0aW9uWzFdIC0gaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gPlxuICAgICAgICAgICAgICBjb25maWcuYnJ1c2g/Lm1heFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGludmVydGVkU2VsZWN0aW9uWzBdKSxcbiAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gKyBjb25maWcuYnJ1c2g/Lm1heCksXG4gICAgICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGludmVydGVkU2VsZWN0aW9uWzFdIC0gaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gPFxuICAgICAgICAgICAgICBjb25maWcuYnJ1c2g/Lm1pblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGludmVydGVkU2VsZWN0aW9uWzBdKSxcbiAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChpbnZlcnRlZFNlbGVjdGlvblswXSArIGNvbmZpZy5icnVzaD8ubWluKSxcbiAgICAgICAgICAgICAgICBdLm1hcChicnVzaFNjYWxlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKHRoaXMuYnJ1c2gubW92ZSwgW1xuICAgICAgICAgICAgICBmcm9tIC0gaGFsZkJydXNoSGVpZ2h0LFxuICAgICAgICAgICAgICB0byArIGhhbGZCcnVzaEhlaWdodCxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGJydXNoU2NhbGUuaW52ZXJ0KHRvKSAtIGJydXNoU2NhbGUuaW52ZXJ0KGZyb20pID5cbiAgICAgICAgICAgIGNvbmZpZy5icnVzaD8ubWF4XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgICAgICAgdGhpcy5icnVzaC5tb3ZlLFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25bMF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblswXSArIGNvbmZpZy5icnVzaD8ubWF4LFxuICAgICAgICAgICAgICAgIF0ubWFwKGJydXNoU2NhbGUpXG4gICAgICAgICAgICAgICAgOiBbY29uZmlnLmJydXNoPy5mcm9tLCBjb25maWcuYnJ1c2g/LnRvXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYnJ1c2hTY2FsZS5pbnZlcnQodG8pIC0gYnJ1c2hTY2FsZS5pbnZlcnQoZnJvbSkgPFxuICAgICAgICAgICAgY29uZmlnLmJydXNoPy5taW5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLmJydXNoLm1vdmUsXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblswXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uWzBdICsgY29uZmlnLmJydXNoPy5taW4sXG4gICAgICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICAgICA6IFtjb25maWcuYnJ1c2g/LmZyb20sIGNvbmZpZy5icnVzaD8udG9dLm1hcChicnVzaFNjYWxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXy5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gXy5zZWxlY3Rpb24ubWFwKGJydXNoU2NhbGUuaW52ZXJ0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBicnVzaE1lc3NhZ2UgPSBuZXcgQnJ1c2hNZXNzYWdlKHtcbiAgICAgICAgICAgIGNoYXJ0SWQ6IHRoaXMuY29uZmlnLmlkLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBbYnJ1c2hTY2FsZS5pbnZlcnQoZnJvbSksIGJydXNoU2NhbGUuaW52ZXJ0KHRvKV0sXG4gICAgICAgICAgICBtb2RlOiBfLm1vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJydXNoU2VydmljZS5zZXRCcnVzaChicnVzaE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNhbGwodGhpcy5icnVzaCk7XG5cbiAgICAgICAgICBsZXQgZG9tYWluID0gYnJ1c2hTY2FsZS5kb21haW4oKTtcblxuICAgICAgICAgIGlmIChjb25maWc/LmJydXNoPy5mcm9tKSB7XG4gICAgICAgICAgICBkb21haW5bMF0gPSBjb25maWcuYnJ1c2guZnJvbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29uZmlnPy5icnVzaD8udG8pIHtcbiAgICAgICAgICAgIGRvbWFpblsxXSA9IGNvbmZpZy5icnVzaC50bztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICAgID8gdGhpcy5zZWxlY3Rpb24ubWFwKGJydXNoU2NhbGUpXG4gICAgICAgICAgICAgIDogZG9tYWluLm1hcChicnVzaFNjYWxlKSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbGVhclByZXZpb3VzU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
-
import { DragPointType } from '../model/enum/drag-point-type';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class DraggablePointDirective {
|
|
5
|
-
constructor(_elementRef) {
|
|
6
|
-
this._elementRef = _elementRef;
|
|
7
|
-
this.moveStart = new EventEmitter();
|
|
8
|
-
this.moveProcess = new EventEmitter();
|
|
9
|
-
this.moveEnd = new EventEmitter();
|
|
10
|
-
}
|
|
11
|
-
mouseDown(event) {
|
|
12
|
-
if (!this.tetaDraggablePoint) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
event.stopPropagation();
|
|
16
|
-
event.preventDefault();
|
|
17
|
-
this.startPosition = {
|
|
18
|
-
x: event.x,
|
|
19
|
-
y: event.y
|
|
20
|
-
};
|
|
21
|
-
this.moveStart.emit(this.startPosition);
|
|
22
|
-
}
|
|
23
|
-
mouseUp(event) {
|
|
24
|
-
if (this.startPosition !== null && this.startPosition !== undefined) {
|
|
25
|
-
let deltaX = event.x - this.startPosition.x;
|
|
26
|
-
let deltaY = event.y - this.startPosition.y;
|
|
27
|
-
if (this.dragDirection === DragPointType.x) {
|
|
28
|
-
deltaY = 0;
|
|
29
|
-
}
|
|
30
|
-
if (this.dragDirection === DragPointType.y) {
|
|
31
|
-
deltaX = 0;
|
|
32
|
-
}
|
|
33
|
-
if (this.allowDrag && !this.allowDrag({
|
|
34
|
-
x: event.x,
|
|
35
|
-
y: event.y,
|
|
36
|
-
deltaX,
|
|
37
|
-
deltaY
|
|
38
|
-
})) {
|
|
39
|
-
this.startPosition = null;
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (this.transformCache) {
|
|
43
|
-
this.transformCache.x = this.transformCache.x + deltaX;
|
|
44
|
-
this.transformCache.y = this.transformCache.y + deltaY;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this.transformCache = {
|
|
48
|
-
x: deltaX,
|
|
49
|
-
y: deltaY
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
this.moveEnd.emit({
|
|
53
|
-
x: event.x,
|
|
54
|
-
y: event.y,
|
|
55
|
-
deltaX,
|
|
56
|
-
deltaY
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
this.startPosition = null;
|
|
60
|
-
}
|
|
61
|
-
mouseMove(event) {
|
|
62
|
-
if (this.startPosition) {
|
|
63
|
-
let deltaX = event.x - this.startPosition.x;
|
|
64
|
-
let deltaY = event.y - this.startPosition.y;
|
|
65
|
-
if (this.transformCache) {
|
|
66
|
-
deltaX = this.transformCache.x + deltaX;
|
|
67
|
-
deltaY = this.transformCache.y + deltaY;
|
|
68
|
-
}
|
|
69
|
-
if (this.allowDrag && !this.allowDrag({
|
|
70
|
-
x: event.x,
|
|
71
|
-
y: event.y,
|
|
72
|
-
deltaX,
|
|
73
|
-
deltaY
|
|
74
|
-
})) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (this.dragDirection === DragPointType.x) {
|
|
78
|
-
deltaY = 0;
|
|
79
|
-
}
|
|
80
|
-
if (this.dragDirection === DragPointType.y) {
|
|
81
|
-
deltaX = 0;
|
|
82
|
-
}
|
|
83
|
-
this.setTransform(deltaX, deltaY);
|
|
84
|
-
event.stopPropagation();
|
|
85
|
-
event.preventDefault();
|
|
86
|
-
this.moveProcess.emit({
|
|
87
|
-
x: event.x,
|
|
88
|
-
y: event.y,
|
|
89
|
-
deltaX,
|
|
90
|
-
deltaY
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
setTransform(x, y) {
|
|
95
|
-
this._elementRef.nativeElement.style.transform = `translate(${x}px, ${y}px)`;
|
|
96
|
-
}
|
|
97
|
-
resetTransform() {
|
|
98
|
-
this.setTransform(0, 0);
|
|
99
|
-
this.transformCache = null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
DraggablePointDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DraggablePointDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
103
|
-
DraggablePointDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: DraggablePointDirective, selector: "[tetaDraggablePoint]", inputs: { tetaDraggablePoint: "tetaDraggablePoint", dragDirection: "dragDirection", allowDrag: "allowDrag" }, outputs: { moveStart: "moveStart", moveProcess: "moveProcess", moveEnd: "moveEnd" }, host: { listeners: { "mousedown": "mouseDown($event)", "touchstart": "mouseDown($event)", "window:mouseup": "mouseUp($event)", "window:touchend": "mouseUp($event)", "window:mousemove": "mouseMove($event)", "window:touchmove": "mouseMove($event)" } }, exportAs: ["tetaDraggablePoint"], ngImport: i0 });
|
|
104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DraggablePointDirective, decorators: [{
|
|
105
|
-
type: Directive,
|
|
106
|
-
args: [{
|
|
107
|
-
selector: '[tetaDraggablePoint]',
|
|
108
|
-
exportAs: 'tetaDraggablePoint'
|
|
109
|
-
}]
|
|
110
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { tetaDraggablePoint: [{
|
|
111
|
-
type: Input
|
|
112
|
-
}], dragDirection: [{
|
|
113
|
-
type: Input
|
|
114
|
-
}], allowDrag: [{
|
|
115
|
-
type: Input
|
|
116
|
-
}], moveStart: [{
|
|
117
|
-
type: Output
|
|
118
|
-
}], moveProcess: [{
|
|
119
|
-
type: Output
|
|
120
|
-
}], moveEnd: [{
|
|
121
|
-
type: Output
|
|
122
|
-
}], mouseDown: [{
|
|
123
|
-
type: HostListener,
|
|
124
|
-
args: ['mousedown', ['$event']]
|
|
125
|
-
}, {
|
|
126
|
-
type: HostListener,
|
|
127
|
-
args: ['touchstart', ['$event']]
|
|
128
|
-
}], mouseUp: [{
|
|
129
|
-
type: HostListener,
|
|
130
|
-
args: ['window:mouseup', ['$event']]
|
|
131
|
-
}, {
|
|
132
|
-
type: HostListener,
|
|
133
|
-
args: ['window:touchend', ['$event']]
|
|
134
|
-
}], mouseMove: [{
|
|
135
|
-
type: HostListener,
|
|
136
|
-
args: ['window:mousemove', ['$event']]
|
|
137
|
-
}, {
|
|
138
|
-
type: HostListener,
|
|
139
|
-
args: ['window:touchmove', ['$event']]
|
|
140
|
-
}] } });
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXBvaW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9kaXJlY3RpdmVzL2RyYWdnYWJsZS1wb2ludC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU01RCxNQUFNLE9BQU8sdUJBQXVCO0lBb0JsQyxZQUFvQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUdqQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBR2xDLENBQUM7UUFFSyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUtwQyxDQUFDO1FBRUssWUFBTyxHQUFHLElBQUksWUFBWSxFQUtoQyxDQUFDO0lBbkJMLENBQUM7SUF1QkQsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNWLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNYLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUlELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ25FLElBQUksTUFBTSxHQUFHLEtB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJhZ1BvaW50VHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS9kcmFnLXBvaW50LXR5cGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGV0YURyYWdnYWJsZVBvaW50XScsXG4gIGV4cG9ydEFzOiAndGV0YURyYWdnYWJsZVBvaW50J1xufSlcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVQb2ludERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIHRldGFEcmFnZ2FibGVQb2ludDogYm9vbGVhbjtcbiAgQElucHV0KCkgZHJhZ0RpcmVjdGlvbjogRHJhZ1BvaW50VHlwZTtcbiAgQElucHV0KCkgYWxsb3dEcmFnOiAocG9pbnQ6IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIGRlbHRhWDogbnVtYmVyLFxuICAgIGRlbHRhWTogbnVtYmVyXG4gIH0pID0+IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBzdGFydFBvc2l0aW9uOiB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcjtcbiAgfTtcblxuICBwcml2YXRlIHRyYW5zZm9ybUNhY2hlOiB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcjtcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gIH1cblxuICBAT3V0cHV0KCkgbW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlclxuICB9PigpO1xuXG4gIEBPdXRwdXQoKSBtb3ZlUHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICAgZGVsdGFZOiBudW1iZXJcbiAgfT4oKTtcblxuICBAT3V0cHV0KCkgbW92ZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICAgZGVsdGFZOiBudW1iZXJcbiAgfT4oKTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgbW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnRldGFEcmFnZ2FibGVQb2ludCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcbiAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHRoaXMuc3RhcnRQb3NpdGlvbik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIG1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zdGFydFBvc2l0aW9uICE9PSBudWxsICYmIHRoaXMuc3RhcnRQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgZGVsdGFYID0gZXZlbnQueCAtIHRoaXMuc3RhcnRQb3NpdGlvbi54O1xuICAgICAgbGV0IGRlbHRhWSA9IGV2ZW50LnkgLSB0aGlzLnN0YXJ0UG9zaXRpb24ueTtcbiAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3Rpb24gPT09IERyYWdQb2ludFR5cGUueCkge1xuICAgICAgICBkZWx0YVkgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGlvbiA9PT0gRHJhZ1BvaW50VHlwZS55KSB7XG4gICAgICAgIGRlbHRhWCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hbGxvd0RyYWcgJiYgIXRoaXMuYWxsb3dEcmFnKHtcbiAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgeTogZXZlbnQueSxcbiAgICAgICAgZGVsdGFYLFxuICAgICAgICBkZWx0YVlcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRyYW5zZm9ybUNhY2hlKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtQ2FjaGUueCA9IHRoaXMudHJhbnNmb3JtQ2FjaGUueCArIGRlbHRhWDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZS55ID0gdGhpcy50cmFuc2Zvcm1DYWNoZS55ICsgZGVsdGFZO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZSA9IHtcbiAgICAgICAgICB4OiBkZWx0YVgsXG4gICAgICAgICAgeTogZGVsdGFZXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLm1vdmVFbmQuZW1pdCh7XG4gICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgIHk6IGV2ZW50LnksXG4gICAgICAgIGRlbHRhWCxcbiAgICAgICAgZGVsdGFZXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gbnVsbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgbW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc3RhcnRQb3NpdGlvbikge1xuICAgICAgbGV0IGRlbHRhWCA9IGV2ZW50LnggLSB0aGlzLnN0YXJ0UG9zaXRpb24ueDtcbiAgICAgIGxldCBkZWx0YVkgPSBldmVudC55IC0gdGhpcy5zdGFydFBvc2l0aW9uLnk7XG4gICAgICBpZiAodGhpcy50cmFuc2Zvcm1DYWNoZSkge1xuICAgICAgICBkZWx0YVggPSB0aGlzLnRyYW5zZm9ybUNhY2hlLnggKyBkZWx0YVg7XG4gICAgICAgIGRlbHRhWSA9IHRoaXMudHJhbnNmb3JtQ2FjaGUueSArIGRlbHRhWTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93RHJhZyAmJiAhdGhpcy5hbGxvd0RyYWcoe1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55LFxuICAgICAgICBkZWx0YVgsXG4gICAgICAgIGRlbHRhWVxuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGlvbiA9PT0gRHJhZ1BvaW50VHlwZS54KSB7XG4gICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kcmFnRGlyZWN0aW9uID09PSBEcmFnUG9pbnRUeXBlLnkpIHtcbiAgICAgICAgZGVsdGFYID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZVByb2Nlc3MuZW1pdCh7XG4gICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgIHk6IGV2ZW50LnksXG4gICAgICAgIGRlbHRhWCxcbiAgICAgICAgZGVsdGFZXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICB9XG5cbiAgcmVzZXRUcmFuc2Zvcm0oKSB7XG4gICAgdGhpcy5zZXRUcmFuc2Zvcm0oMCwgMCk7XG4gICAgdGhpcy50cmFuc2Zvcm1DYWNoZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
|