@tetacom/ng-components 1.0.12 → 1.0.13

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.
@@ -2,10 +2,11 @@ import * as d3 from 'd3';
2
2
  import { DispatchType } from '../model/enum/dispatch-type';
3
3
  export class LineDrawer {
4
4
  constructor() {
5
- this.dispatch = d3.dispatch(DispatchType.moveLine);
5
+ this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);
6
6
  }
7
7
  draw(series, context, scaleX, scaleY, options) {
8
8
  const points = series.data;
9
+ const markerPoints = points.filter((_) => _.marker);
9
10
  const path = d3
10
11
  .line()
11
12
  .curve(series.curveType)
@@ -13,6 +14,41 @@ export class LineDrawer {
13
14
  .x((d) => scaleX(d.x))
14
15
  .y((d) => scaleY(d.y));
15
16
  const seriesIndex = options.series.findIndex((_) => _.id === series.id);
17
+ if (markerPoints?.length) {
18
+ const emit = (event, target) => {
19
+ this.dispatch.apply(DispatchType.movePoint, {
20
+ target: series,
21
+ point: {
22
+ ...target,
23
+ },
24
+ event,
25
+ });
26
+ };
27
+ context
28
+ .selectAll('circle')
29
+ .data(markerPoints)
30
+ .enter()
31
+ .append('circle')
32
+ .attr('class', 'draggable-marker')
33
+ .attr('r', (d) => d.marker?.style?.radius || 5)
34
+ .attr('cx', function (d) {
35
+ return scaleX(d.x);
36
+ })
37
+ .attr('cy', function (d) {
38
+ return scaleY(d.y);
39
+ })
40
+ .style('cursor', 'pointer')
41
+ .style('fill', (d) => d.marker?.style?.color || 'red')
42
+ .attr('stroke', (d) => d.marker?.style?.stroke || 'none')
43
+ .attr('stroke-width', (d) => d.marker?.style?.strokeWidth || 0);
44
+ context.selectAll('.draggable-marker').call(d3.drag().on('drag start end', function dragged(event, d) {
45
+ d.x = scaleX.invert(event.sourceEvent?.offsetX);
46
+ d.y = scaleY.invert(event.sourceEvent?.offsetY);
47
+ d3.select(this).attr('cx', scaleX(d.x)).attr('cy', scaleY(d.y));
48
+ context.select('path').attr('d', path);
49
+ emit(event, d);
50
+ }));
51
+ }
16
52
  context
17
53
  .append('path')
18
54
  .attr('class', (d) => series?.drag.enable ? 'draggable' : null)
@@ -103,4 +139,4 @@ export class LineDrawer {
103
139
  }
104
140
  }
105
141
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvZHJhd2VyL2xpbmUtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sVUFBVTtJQUdyQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksQ0FDRixNQUF5QixFQUN6QixPQUEyRCxFQUMzRCxNQUFXLEVBQ1gsTUFBVyxFQUNYLE9BQXFCO1FBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFM0IsTUFBTSxJQUFJLEdBQUcsRUFBRTthQUNaLElBQUksRUFBYTthQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO2FBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENB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QUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFFdEMsT0FBTztpQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO2lCQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDO2lCQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7aUJBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDekMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7aUJBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDOUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEcmF3ZXIgfSBmcm9tICcuLi9tb2RlbC9pLWRyYXdlcic7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9tb2RlbC9wb2ludC9iYXNlLXBvaW50JztcbmltcG9ydCB7IFNlcmllcyB9IGZyb20gJy4uL21vZGVsL3Nlcmllcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBDaGFydE9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbC9jaGFydC1vcHRpb25zJztcbmltcG9ydCB7IElEcmFnRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9pLWRyYWctZXZlbnQnO1xuaW1wb3J0IHsgRGlzcGF0Y2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9kaXNwYXRjaC10eXBlJztcblxuZXhwb3J0IGNsYXNzIExpbmVEcmF3ZXIgaW1wbGVtZW50cyBJRHJhd2VyPEJhc2VQb2ludD4ge1xuICBkaXNwYXRjaDogZDMuRGlzcGF0Y2g8SURyYWdFdmVudDxTZXJpZXM8QmFzZVBvaW50Pj4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaChEaXNwYXRjaFR5cGUubW92ZUxpbmUpO1xuICB9XG5cbiAgZHJhdyhcbiAgICBzZXJpZXM6IFNlcmllczxCYXNlUG9pbnQ+LFxuICAgIGNvbnRleHQ6IGQzLlNlbGVjdGlvbjxTVkdFbGVtZW50LCB1bmtub3duLCBudWxsLCB1bmRlZmluZWQ+LFxuICAgIHNjYWxlWDogYW55LFxuICAgIHNjYWxlWTogYW55LFxuICAgIG9wdGlvbnM6IENoYXJ0T3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb2ludHMgPSBzZXJpZXMuZGF0YTtcblxuICAgIGNvbnN0IHBhdGggPSBkM1xuICAgICAgLmxpbmU8QmFzZVBvaW50PigpXG4gICAgICAuY3VydmUoc2VyaWVzLmN1cnZlVHlwZSlcbiAgICAgIC5kZWZpbmVkKChkKSA9PiBkLnggIT0gbnVsbCAmJiBkLnkgIT0gbnVsbClcbiAgICAgIC54KChkKSA9PiBzY2FsZVgoZC54KSlcbiAgICAgIC55KChkKSA9PiBzY2FsZVkoZC55KSk7XG4gICAgY29uc3Qgc2VyaWVzSW5kZXggPSBvcHRpb25zLnNlcmllcy5maW5kSW5kZXgoKF8pID0+IF8uaWQgPT09IHNlcmllcy5pZCk7XG5cbiAgICBjb250ZXh0XG4gICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgIC5hdHRyKCdjbGFzcycsIChkOiBCYXNlUG9pbnQpID0+XG4gICAgICAgIHNlcmllcz8uZHJhZy5lbmFibGUgPyAnZHJhZ2dhYmxlJyA6IG51bGxcbiAgICAgIClcbiAgICAgIC5hdHRyKCdkYXRhLWRyYWdnYWJsZS1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzLmNvbG9yKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXMuc3Ryb2tlV2lkdGggPyBzZXJpZXMuc3Ryb2tlV2lkdGggOiAxKVxuICAgICAgLnN0eWxlKCdjdXJzb3InLCBzZXJpZXM/LmRyYWc/LmVuYWJsZSA/ICdtb3ZlJyA6ICdkZWZhdWx0JylcbiAgICAgIC5kYXR1bShwb2ludHMpXG4gICAgICAuYXR0cignZCcsIHBhdGggYXMgYW55KTtcblxuICAgIGNvbnN0IHUgPSBjb250ZXh0LmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2dyYWJiZXJzJyk7XG5cbiAgICBjb25zdCBlbWl0ID0gKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldDogU2VyaWVzPEJhc2VQb2ludD4pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2guYXBwbHkoRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcy5kcmFnLmVuYWJsZSkge1xuICAgICAgdS5zZWxlY3RBbGwoJ2NpcmNsZScpXG4gICAgICAgIC5kYXRhKHBvaW50cylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZ3JhYmJlci1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzPy5kcmFnPy5ncmFiYmVycz8uc3Ryb2tlID8/IHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5zdHJva2VXaWR0aCA/PyAxKVxuICAgICAgICAuYXR0cignZmlsbCcsIHNlcmllcz8uZHJhZz8uZ3JhYmJlcnM/LmZpbGwgPz8gc2VyaWVzPy5jb2xvcilcbiAgICAgICAgLmF0dHIoJ3InLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5yYWRpdXMgPz8gNClcbiAgICAgICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGVYKGQueCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWShkLnkpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdtb3ZlJylcbiAgICAgICAgLmNhbGwoXG4gICAgICAgICAgZDMuZHJhZygpLm9uKCdzdGFydCBkcmFnIGVuZCcsIGZ1bmN0aW9uIChldmVudCwgZDogQmFzZVBvaW50KSB7XG4gICAgICAgICAgICBkLnggPSBzY2FsZVguaW52ZXJ0KGV2ZW50LnNvdXJjZUV2ZW50Py5vZmZzZXRYKTtcbiAgICAgICAgICAgIGQueSA9IHNjYWxlWS5pbnZlcnQoZXZlbnQuc291cmNlRXZlbnQ/Lm9mZnNldFkpO1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ2N4Jywgc2NhbGVYKGQueCkpLmF0dHIoJ2N5Jywgc2NhbGVZKGQueSkpO1xuXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgIC5zZWxlY3QoYFtkYXRhLWRyYWdnYWJsZS1pZD0nJHtzZXJpZXNJbmRleH0nXWApXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgcGF0aCk7XG5cbiAgICAgICAgICAgIGVtaXQoZXZlbnQsIHNlcmllcyk7XG5cbiAgICAgICAgICAgIGlmIChzZXJpZXM/LmRyYWc/LmV4dGVuZExpbmUpIHtcbiAgICAgICAgICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIHUuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYXdFeHRlbmRlZExpbmUgPSAoKSA9PiB7XG4gICAgICBjb250ZXh0LnNlbGVjdEFsbChgW2RhdGEtZXh0ZW5kZWQtaWQ9JyR7c2VyaWVzSW5kZXh9J11gKS5yZW1vdmUoKTtcblxuICAgICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwMi54IC0gcDEueCwgMikgKyBNYXRoLnBvdyhwMi55IC0gcDIueSwgMilcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ZW5kTGVuZ3RoID0gNTA7XG5cbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWCA9IHAyLnggKyAoKHAyLnggLSBwMS54KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWSA9IHAyLnkgKyAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRTdGFydFggPSBwMS54IC0gKChwMi54IC0gcDEueCkgLyBkaXN0YW5jZSkgKiBleHRlbmRMZW5ndGg7XG4gICAgICBjb25zdCBleHRlbmRlZFN0YXJ0WSA9IHAxLnkgLSAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29udGV4dFxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2V4dGVuZGVkTGluZScpXG4gICAgICAgIC5hdHRyKCdkYXRhLWV4dGVuZGVkLWlkJywgc2VyaWVzSW5kZXgpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZXJpZXM/LmNvbG9yKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzPy5zdHJva2VXaWR0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgICAgLmF0dHIoJ3gxJywgc2NhbGVYKHAxLngpKVxuICAgICAgICAuYXR0cigneTEnLCBzY2FsZVkocDEueSkpXG4gICAgICAgIC5hdHRyKCd4MicsIHNjYWxlWChleHRlbmRlZFN0YXJ0WCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZFN0YXJ0WSkpO1xuXG4gICAgICBjb250ZXh0XG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZXh0ZW5kZWRMaW5lJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZXh0ZW5kZWQtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LnN0cm9rZVdpZHRoKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIHNlcmllcz8uc3Ryb2tlRGFzaGFycmF5KVxuICAgICAgICAuYXR0cigneDEnLCBzY2FsZVgocDIueCkpXG4gICAgICAgIC5hdHRyKCd5MScsIHNjYWxlWShwMi55KSlcbiAgICAgICAgLmF0dHIoJ3gyJywgc2NhbGVYKGV4dGVuZGVkRW5kWCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZEVuZFkpKTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcz8uZHJhZz8uZXh0ZW5kTGluZSAmJiBwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvZHJhd2VyL2xpbmUtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sVUFBVTtJQUdyQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBSSxDQUNGLE1BQXlCLEVBQ3pCLE9BQTJELEVBQzNELE1BQVcsRUFDWCxNQUFXLEVBQ1gsT0FBcUI7UUFFckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUUzQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsTUFBTSxJQUFJLEdBQUcsRUFBRTthQUNaLElBQUksRUFBYTthQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO2FBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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Q3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBRXRDLE9BQU87aUJBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztpQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztpQkFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO2lCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDO2lCQUNqRCxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFO1lBQzlDLGdCQUFnQixFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRHJhd2VyIH0gZnJvbSAnLi4vbW9kZWwvaS1kcmF3ZXInO1xuaW1wb3J0IHsgQmFzZVBvaW50IH0gZnJvbSAnLi4vbW9kZWwvcG9pbnQvYmFzZS1wb2ludCc7XG5pbXBvcnQgeyBTZXJpZXMgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHsgQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWwvY2hhcnQtb3B0aW9ucyc7XG5pbXBvcnQgeyBJRHJhZ0V2ZW50IH0gZnJvbSAnLi4vbW9kZWwvaS1kcmFnLWV2ZW50JztcbmltcG9ydCB7IERpc3BhdGNoVHlwZSB9IGZyb20gJy4uL21vZGVsL2VudW0vZGlzcGF0Y2gtdHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBMaW5lRHJhd2VyIGltcGxlbWVudHMgSURyYXdlcjxCYXNlUG9pbnQ+IHtcbiAgZGlzcGF0Y2g6IGQzLkRpc3BhdGNoPElEcmFnRXZlbnQ8U2VyaWVzPEJhc2VQb2ludD4+PjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRpc3BhdGNoID0gZDMuZGlzcGF0Y2goRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCBEaXNwYXRjaFR5cGUubW92ZVBvaW50KTtcbiAgfVxuXG4gIGRyYXcoXG4gICAgc2VyaWVzOiBTZXJpZXM8QmFzZVBvaW50PixcbiAgICBjb250ZXh0OiBkMy5TZWxlY3Rpb248U1ZHRWxlbWVudCwgdW5rbm93biwgbnVsbCwgdW5kZWZpbmVkPixcbiAgICBzY2FsZVg6IGFueSxcbiAgICBzY2FsZVk6IGFueSxcbiAgICBvcHRpb25zOiBDaGFydE9wdGlvbnNcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcG9pbnRzID0gc2VyaWVzLmRhdGE7XG5cbiAgICBjb25zdCBtYXJrZXJQb2ludHMgPSBwb2ludHMuZmlsdGVyKChfKSA9PiBfLm1hcmtlcik7XG5cbiAgICBjb25zdCBwYXRoID0gZDNcbiAgICAgIC5saW5lPEJhc2VQb2ludD4oKVxuICAgICAgLmN1cnZlKHNlcmllcy5jdXJ2ZVR5cGUpXG4gICAgICAuZGVmaW5lZCgoZCkgPT4gZC54ICE9IG51bGwgJiYgZC55ICE9IG51bGwpXG4gICAgICAueCgoZCkgPT4gc2NhbGVYKGQueCkpXG4gICAgICAueSgoZCkgPT4gc2NhbGVZKGQueSkpO1xuXG4gICAgY29uc3Qgc2VyaWVzSW5kZXggPSBvcHRpb25zLnNlcmllcy5maW5kSW5kZXgoKF8pID0+IF8uaWQgPT09IHNlcmllcy5pZCk7XG5cbiAgICBpZiAobWFya2VyUG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVtaXQgPSAoZXZlbnQ6IERyYWdFdmVudCwgdGFyZ2V0OiBCYXNlUG9pbnQpID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaC5hcHBseShEaXNwYXRjaFR5cGUubW92ZVBvaW50LCB7XG4gICAgICAgICAgdGFyZ2V0OiBzZXJpZXMsXG4gICAgICAgICAgcG9pbnQ6IHtcbiAgICAgICAgICAgIC4uLnRhcmdldCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnRleHRcbiAgICAgICAgLnNlbGVjdEFsbCgnY2lyY2xlJylcbiAgICAgICAgLmRhdGEobWFya2VyUG9pbnRzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZHJhZ2dhYmxlLW1hcmtlcicpXG4gICAgICAgIC5hdHRyKCdyJywgKGQpID0+IGQubWFya2VyPy5zdHlsZT8ucmFkaXVzIHx8IDUpXG4gICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWChkLngpO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBzY2FsZVkoZC55KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIChkKSA9PiBkLm1hcmtlcj8uc3R5bGU/LmNvbG9yIHx8ICdyZWQnKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgKGQpID0+IGQubWFya2VyPy5zdHlsZT8uc3Ryb2tlIHx8ICdub25lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIChkKSA9PiBkLm1hcmtlcj8uc3R5bGU/LnN0cm9rZVdpZHRoIHx8IDApO1xuXG4gICAgICBjb250ZXh0LnNlbGVjdEFsbCgnLmRyYWdnYWJsZS1tYXJrZXInKS5jYWxsKFxuICAgICAgICBkMy5kcmFnKCkub24oJ2RyYWcgc3RhcnQgZW5kJywgZnVuY3Rpb24gZHJhZ2dlZChldmVudCwgZDogQmFzZVBvaW50KSB7XG4gICAgICAgICAgZC54ID0gc2NhbGVYLmludmVydChldmVudC5zb3VyY2VFdmVudD8ub2Zmc2V0WCk7XG4gICAgICAgICAgZC55ID0gc2NhbGVZLmludmVydChldmVudC5zb3VyY2VFdmVudD8ub2Zmc2V0WSk7XG5cbiAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cignY3gnLCBzY2FsZVgoZC54KSkuYXR0cignY3knLCBzY2FsZVkoZC55KSk7XG4gICAgICAgICAgY29udGV4dC5zZWxlY3QoJ3BhdGgnKS5hdHRyKCdkJywgcGF0aCk7XG5cbiAgICAgICAgICBlbWl0KGV2ZW50LCBkKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29udGV4dFxuICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAoZDogQmFzZVBvaW50KSA9PlxuICAgICAgICBzZXJpZXM/LmRyYWcuZW5hYmxlID8gJ2RyYWdnYWJsZScgOiBudWxsXG4gICAgICApXG4gICAgICAuYXR0cignZGF0YS1kcmFnZ2FibGUtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcy5jb2xvcilcbiAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5Jywgc2VyaWVzPy5zdHJva2VEYXNoYXJyYXkpXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzLnN0cm9rZVdpZHRoID8gc2VyaWVzLnN0cm9rZVdpZHRoIDogMSlcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgc2VyaWVzPy5kcmFnPy5lbmFibGUgPyAnbW92ZScgOiAnZGVmYXVsdCcpXG4gICAgICAuZGF0dW0ocG9pbnRzKVxuICAgICAgLmF0dHIoJ2QnLCBwYXRoKTtcblxuICAgIGNvbnN0IHUgPSBjb250ZXh0LmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2dyYWJiZXJzJyk7XG5cbiAgICBjb25zdCBlbWl0ID0gKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldDogU2VyaWVzPEJhc2VQb2ludD4pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2guYXBwbHkoRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcy5kcmFnLmVuYWJsZSkge1xuICAgICAgdS5zZWxlY3RBbGwoJ2NpcmNsZScpXG4gICAgICAgIC5kYXRhKHBvaW50cylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZ3JhYmJlci1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzPy5kcmFnPy5ncmFiYmVycz8uc3Ryb2tlID8/IHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5zdHJva2VXaWR0aCA/PyAxKVxuICAgICAgICAuYXR0cignZmlsbCcsIHNlcmllcz8uZHJhZz8uZ3JhYmJlcnM/LmZpbGwgPz8gc2VyaWVzPy5jb2xvcilcbiAgICAgICAgLmF0dHIoJ3InLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5yYWRpdXMgPz8gNClcbiAgICAgICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGVYKGQueCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWShkLnkpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdtb3ZlJylcbiAgICAgICAgLmNhbGwoXG4gICAgICAgICAgZDMuZHJhZygpLm9uKCdzdGFydCBkcmFnIGVuZCcsIGZ1bmN0aW9uIChldmVudCwgZDogQmFzZVBvaW50KSB7XG4gICAgICAgICAgICBkLnggPSBzY2FsZVguaW52ZXJ0KGV2ZW50LnNvdXJjZUV2ZW50Py5vZmZzZXRYKTtcbiAgICAgICAgICAgIGQueSA9IHNjYWxlWS5pbnZlcnQoZXZlbnQuc291cmNlRXZlbnQ/Lm9mZnNldFkpO1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ2N4Jywgc2NhbGVYKGQueCkpLmF0dHIoJ2N5Jywgc2NhbGVZKGQueSkpO1xuXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgIC5zZWxlY3QoYFtkYXRhLWRyYWdnYWJsZS1pZD0nJHtzZXJpZXNJbmRleH0nXWApXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgcGF0aCk7XG5cbiAgICAgICAgICAgIGVtaXQoZXZlbnQsIHNlcmllcyk7XG5cbiAgICAgICAgICAgIGlmIChzZXJpZXM/LmRyYWc/LmV4dGVuZExpbmUpIHtcbiAgICAgICAgICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIHUuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYXdFeHRlbmRlZExpbmUgPSAoKSA9PiB7XG4gICAgICBjb250ZXh0LnNlbGVjdEFsbChgW2RhdGEtZXh0ZW5kZWQtaWQ9JyR7c2VyaWVzSW5kZXh9J11gKS5yZW1vdmUoKTtcblxuICAgICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwMi54IC0gcDEueCwgMikgKyBNYXRoLnBvdyhwMi55IC0gcDIueSwgMilcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ZW5kTGVuZ3RoID0gNTA7XG5cbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWCA9IHAyLnggKyAoKHAyLnggLSBwMS54KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWSA9IHAyLnkgKyAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRTdGFydFggPSBwMS54IC0gKChwMi54IC0gcDEueCkgLyBkaXN0YW5jZSkgKiBleHRlbmRMZW5ndGg7XG4gICAgICBjb25zdCBleHRlbmRlZFN0YXJ0WSA9IHAxLnkgLSAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29udGV4dFxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2V4dGVuZGVkTGluZScpXG4gICAgICAgIC5hdHRyKCdkYXRhLWV4dGVuZGVkLWlkJywgc2VyaWVzSW5kZXgpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZXJpZXM/LmNvbG9yKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzPy5zdHJva2VXaWR0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgICAgLmF0dHIoJ3gxJywgc2NhbGVYKHAxLngpKVxuICAgICAgICAuYXR0cigneTEnLCBzY2FsZVkocDEueSkpXG4gICAgICAgIC5hdHRyKCd4MicsIHNjYWxlWChleHRlbmRlZFN0YXJ0WCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZFN0YXJ0WSkpO1xuXG4gICAgICBjb250ZXh0XG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZXh0ZW5kZWRMaW5lJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZXh0ZW5kZWQtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LnN0cm9rZVdpZHRoKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIHNlcmllcz8uc3Ryb2tlRGFzaGFycmF5KVxuICAgICAgICAuYXR0cigneDEnLCBzY2FsZVgocDIueCkpXG4gICAgICAgIC5hdHRyKCd5MScsIHNjYWxlWShwMi55KSlcbiAgICAgICAgLmF0dHIoJ3gyJywgc2NhbGVYKGV4dGVuZGVkRW5kWCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZEVuZFkpKTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcz8uZHJhZz8uZXh0ZW5kTGluZSAmJiBwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  export var DispatchType;
2
2
  (function (DispatchType) {
3
3
  DispatchType["moveLine"] = "moveLine";
4
+ DispatchType["movePoint"] = "movePoint";
4
5
  })(DispatchType || (DispatchType = {}));
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2gtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9lbnVtL2Rpc3BhdGNoLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksWUFFWDtBQUZELFdBQVksWUFBWTtJQUN0QixxQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBRlcsWUFBWSxLQUFaLFlBQVksUUFFdkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEaXNwYXRjaFR5cGUge1xuICBtb3ZlTGluZSA9ICdtb3ZlTGluZScsXG59XG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2gtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9lbnVtL2Rpc3BhdGNoLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0QixxQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEaXNwYXRjaFR5cGUge1xuICBtb3ZlTGluZSA9ICdtb3ZlTGluZScsXG4gIG1vdmVQb2ludCA9ICdtb3ZlUG9pbnQnLFxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9wb2ludC9iYXNlLXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEJhc2VQb2ludCB7XG4gIHg6IG51bWJlcjtcbiAgeDE/OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgeTE/OiBudW1iZXI7XG4gIGNvbG9yPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9wb2ludC9iYXNlLXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXJrZXJPcHRpb25zIH0gZnJvbSAnLi9tYXJrZXItb3B0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB4MT86IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB5MT86IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG1hcmtlcj86IE1hcmtlck9wdGlvbnM7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvbW9kZWwvcG9pbnQvbWFya2VyLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWFya2VyT3B0aW9ucyB7XG4gIGRyYWdnYWJsZT86IGJvb2xlYW47XG4gIHN0eWxlPzoge1xuICAgIHJhZGl1cz86IG51bWJlcjtcbiAgICBzdHJva2U/OiBudW1iZXI7XG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gICAgY29sb3I/OiBzdHJpbmc7XG4gIH07XG59XG4iXX0=
@@ -10062,15 +10062,17 @@ class BarDrawer {
10062
10062
  var DispatchType;
10063
10063
  (function (DispatchType) {
10064
10064
  DispatchType["moveLine"] = "moveLine";
10065
+ DispatchType["movePoint"] = "movePoint";
10065
10066
  })(DispatchType || (DispatchType = {}));
10066
10067
 
10067
10068
  class LineDrawer {
10068
10069
  constructor() {
10069
- this.dispatch = d3.dispatch(DispatchType.moveLine);
10070
+ this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);
10070
10071
  }
10071
10072
  draw(series, context, scaleX, scaleY, options) {
10072
10073
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
10073
10074
  const points = series.data;
10075
+ const markerPoints = points.filter((_) => _.marker);
10074
10076
  const path = d3
10075
10077
  .line()
10076
10078
  .curve(series.curveType)
@@ -10078,6 +10080,40 @@ class LineDrawer {
10078
10080
  .x((d) => scaleX(d.x))
10079
10081
  .y((d) => scaleY(d.y));
10080
10082
  const seriesIndex = options.series.findIndex((_) => _.id === series.id);
10083
+ if (markerPoints === null || markerPoints === void 0 ? void 0 : markerPoints.length) {
10084
+ const emit = (event, target) => {
10085
+ this.dispatch.apply(DispatchType.movePoint, {
10086
+ target: series,
10087
+ point: Object.assign({}, target),
10088
+ event,
10089
+ });
10090
+ };
10091
+ context
10092
+ .selectAll('circle')
10093
+ .data(markerPoints)
10094
+ .enter()
10095
+ .append('circle')
10096
+ .attr('class', 'draggable-marker')
10097
+ .attr('r', (d) => { var _a, _b; return ((_b = (_a = d.marker) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.radius) || 5; })
10098
+ .attr('cx', function (d) {
10099
+ return scaleX(d.x);
10100
+ })
10101
+ .attr('cy', function (d) {
10102
+ return scaleY(d.y);
10103
+ })
10104
+ .style('cursor', 'pointer')
10105
+ .style('fill', (d) => { var _a, _b; return ((_b = (_a = d.marker) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.color) || 'red'; })
10106
+ .attr('stroke', (d) => { var _a, _b; return ((_b = (_a = d.marker) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.stroke) || 'none'; })
10107
+ .attr('stroke-width', (d) => { var _a, _b; return ((_b = (_a = d.marker) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.strokeWidth) || 0; });
10108
+ context.selectAll('.draggable-marker').call(d3.drag().on('drag start end', function dragged(event, d) {
10109
+ var _a, _b;
10110
+ d.x = scaleX.invert((_a = event.sourceEvent) === null || _a === void 0 ? void 0 : _a.offsetX);
10111
+ d.y = scaleY.invert((_b = event.sourceEvent) === null || _b === void 0 ? void 0 : _b.offsetY);
10112
+ d3.select(this).attr('cx', scaleX(d.x)).attr('cy', scaleY(d.y));
10113
+ context.select('path').attr('d', path);
10114
+ emit(event, d);
10115
+ }));
10116
+ }
10081
10117
  context
10082
10118
  .append('path')
10083
10119
  .attr('class', (d) => (series === null || series === void 0 ? void 0 : series.drag.enable) ? 'draggable' : null)
@@ -10539,6 +10575,7 @@ class TetaChart {
10539
10575
  this.plotLinesMove$ = new Subject();
10540
10576
  this.plotBandsMove$ = new Subject();
10541
10577
  this.seriesMove$ = new Subject();
10578
+ this.pointMove$ = new Subject();
10542
10579
  this.zoom$ = new Subject();
10543
10580
  this._container = null;
10544
10581
  this._width = 0;
@@ -10560,6 +10597,7 @@ class TetaChart {
10560
10597
  this.plotLinesMove = this.plotLinesMove$.asObservable();
10561
10598
  this.plotBandsMove = this.plotBandsMove$.asObservable();
10562
10599
  this.seriesMove = this.seriesMove$.asObservable();
10600
+ this.pointMove = this.pointMove$.asObservable();
10563
10601
  this.zoom = this.zoom$.asObservable();
10564
10602
  }
10565
10603
  redraw(options) {
@@ -11366,7 +11404,7 @@ class TetaChart {
11366
11404
  .attr('class', 'series')
11367
11405
  .attr('clip-path', `url(#draw-window-${this.uniqId})`);
11368
11406
  series === null || series === void 0 ? void 0 : series.forEach((seriesItem, index) => {
11369
- var _a;
11407
+ var _a, _b;
11370
11408
  if (seriesItem.renderTo === 'canvas') {
11371
11409
  d3.select(this._container.nativeElement)
11372
11410
  .select('canvas')
@@ -11424,9 +11462,15 @@ class TetaChart {
11424
11462
  const emit = (event) => {
11425
11463
  this.seriesMove$.next(event);
11426
11464
  };
11465
+ const emitPoint = (event) => {
11466
+ this.pointMove$.next(event);
11467
+ };
11427
11468
  (_a = drawer === null || drawer === void 0 ? void 0 : drawer.dispatch) === null || _a === void 0 ? void 0 : _a.on(DispatchType.moveLine, function () {
11428
11469
  emit(this);
11429
11470
  });
11471
+ (_b = drawer === null || drawer === void 0 ? void 0 : drawer.dispatch) === null || _b === void 0 ? void 0 : _b.on(DispatchType.movePoint, function () {
11472
+ emitPoint(this);
11473
+ });
11430
11474
  });
11431
11475
  }
11432
11476
  createTooltip() {
@@ -11875,6 +11919,7 @@ class ChartComponent {
11875
11919
  this.plotLinesMove = new EventEmitter();
11876
11920
  this.plotBandsMove = new EventEmitter();
11877
11921
  this.seriesMove = new EventEmitter();
11922
+ this.pointMove = new EventEmitter();
11878
11923
  this.zoomChange = new EventEmitter();
11879
11924
  this._alive = true;
11880
11925
  this.size$ = new Subject();
@@ -11923,8 +11968,7 @@ class ChartComponent {
11923
11968
  (_b = this._chart) === null || _b === void 0 ? void 0 : _b.setZoom(this.zoom);
11924
11969
  }
11925
11970
  }
11926
- ngOnInit() {
11927
- }
11971
+ ngOnInit() { }
11928
11972
  ngAfterViewInit() {
11929
11973
  this._observer = new ResizeObserver((entries) => {
11930
11974
  const { contentRect } = entries[0];
@@ -11972,6 +12016,11 @@ class ChartComponent {
11972
12016
  this._chart.seriesMove
11973
12017
  .pipe(takeWhile((_) => this._alive))
11974
12018
  .subscribe((_) => this.seriesMove.emit(_));
12019
+ this._chart.pointMove
12020
+ .pipe(takeWhile((_) => this._alive))
12021
+ .subscribe((_) => {
12022
+ this.pointMove.emit(_);
12023
+ });
11975
12024
  this._chart.zoom
11976
12025
  .pipe(takeWhile((_) => this._alive), map((_) => {
11977
12026
  this.zoomChange.emit(_);
@@ -11989,7 +12038,7 @@ class ChartComponent {
11989
12038
  }
11990
12039
  }
11991
12040
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ChartComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
11992
- ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ChartComponent, selector: "teta-chart", inputs: { zoom: "zoom", config: "config" }, outputs: { plotLinesMove: "plotLinesMove", plotBandsMove: "plotBandsMove", seriesMove: "seriesMove", zoomChange: "zoomChange" }, host: { listeners: { "click": "click($event)" } }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12041
+ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ChartComponent, selector: "teta-chart", inputs: { zoom: "zoom", config: "config" }, outputs: { plotLinesMove: "plotLinesMove", plotBandsMove: "plotBandsMove", seriesMove: "seriesMove", pointMove: "pointMove", zoomChange: "zoomChange" }, host: { listeners: { "click": "click($event)" } }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11993
12042
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ChartComponent, decorators: [{
11994
12043
  type: Component,
11995
12044
  args: [{ selector: 'teta-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"] }]
@@ -12003,6 +12052,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
12003
12052
  type: Output
12004
12053
  }], seriesMove: [{
12005
12054
  type: Output
12055
+ }], pointMove: [{
12056
+ type: Output
12006
12057
  }], zoomChange: [{
12007
12058
  type: Output
12008
12059
  }], chart: [{