@tetacom/ng-components 1.0.12 → 1.0.16

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.
@@ -1,11 +1,13 @@
1
1
  import * as d3 from 'd3';
2
2
  import { DispatchType } from '../model/enum/dispatch-type';
3
+ import { DragPointType } from '../model/enum/drag-point-type';
3
4
  export class LineDrawer {
4
5
  constructor() {
5
- this.dispatch = d3.dispatch(DispatchType.moveLine);
6
+ this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);
6
7
  }
7
8
  draw(series, context, scaleX, scaleY, options) {
8
9
  const points = series.data;
10
+ const markerPoints = points.filter((_) => _.marker);
9
11
  const path = d3
10
12
  .line()
11
13
  .curve(series.curveType)
@@ -15,7 +17,7 @@ export class LineDrawer {
15
17
  const seriesIndex = options.series.findIndex((_) => _.id === series.id);
16
18
  context
17
19
  .append('path')
18
- .attr('class', (d) => series?.drag.enable ? 'draggable' : null)
20
+ .attr('class', (d) => series?.drag.enable ? 'draggable' : `series-${seriesIndex}`)
19
21
  .attr('data-draggable-id', seriesIndex)
20
22
  .attr('fill', 'none')
21
23
  .attr('stroke', series.color)
@@ -101,6 +103,50 @@ export class LineDrawer {
101
103
  if (series?.drag?.extendLine && points?.length) {
102
104
  drawExtendedLine();
103
105
  }
106
+ if (markerPoints?.length) {
107
+ const emit = (event, target) => {
108
+ this.dispatch.apply(DispatchType.movePoint, {
109
+ target: series,
110
+ point: {
111
+ ...target,
112
+ },
113
+ event,
114
+ });
115
+ };
116
+ context
117
+ .selectAll(`draggable-marker-${seriesIndex}`)
118
+ .data(markerPoints)
119
+ .enter()
120
+ .append('circle')
121
+ .attr('class', `draggable-marker-${seriesIndex}`)
122
+ .attr('r', (d) => d.marker?.style?.radius || 5)
123
+ .attr('cx', function (d) {
124
+ return scaleX(d.x);
125
+ })
126
+ .attr('cy', function (d) {
127
+ return scaleY(d.y);
128
+ })
129
+ .style('cursor', 'pointer')
130
+ .style('fill', (d) => d.marker?.style?.color || 'none')
131
+ .attr('stroke', (d) => d.marker?.style?.stroke || 'none')
132
+ .attr('stroke-width', (d) => d.marker?.style?.strokeWidth || 0);
133
+ context.selectAll(`.draggable-marker-${seriesIndex}`).call(d3.drag().on('drag start end', function dragged(event, d) {
134
+ const node = d3.select(this);
135
+ if (event.type === 'start') {
136
+ node.raise().classed('active', true);
137
+ }
138
+ if (d.marker?.dragType === DragPointType.x) {
139
+ d.x = scaleX.invert(event.sourceEvent?.offsetX);
140
+ node.attr('cx', scaleX(d.x));
141
+ }
142
+ if (d.marker?.dragType === DragPointType.y) {
143
+ d.y = scaleY.invert(event.sourceEvent?.offsetY);
144
+ node.attr('cy', scaleY(d.y));
145
+ }
146
+ context.select(`.series-${seriesIndex}`).attr('d', path);
147
+ emit(event, d);
148
+ }));
149
+ }
104
150
  }
105
151
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvZHJhd2VyL2xpbmUtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sVUFBVTtJQUdyQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksQ0FDRixNQUF5QixFQUN6QixPQUEyRCxFQUMzRCxNQUFXLEVBQ1gsTUFBVyxFQUNYLE9BQXFCO1FBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFM0IsTUFBTSxJQUFJLEdBQUcsRUFBRTthQUNaLElBQUksRUFBYTthQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO2FBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEUsT0FBTzthQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBWSxFQUFFLEVBQUUsQ0FDOUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6QzthQUNBLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUM7YUFDdEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7YUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDO2FBQ2pELElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pFLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzFELEtBQUssQ0FBQyxNQUFNLENBQUM7YUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLElBQVcsQ0FBQyxDQUFDO1FBRTFCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksR0FBRyxDQUFDLEtBQWdCLEVBQUUsTUFBeUIsRUFBRSxFQUFFO1lBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pDLE1BQU07Z0JBQ04sS0FBSzthQUNOLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDdEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUM7aUJBQ1osS0FBSyxFQUFFO2lCQUNQLE1BQU0sQ0FBQyxRQUFRLENBQUM7aUJBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUM7aUJBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQztpQkFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLEtBQUssQ0FBQztpQkFDM0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO2lCQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDckIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDckIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQkFDdkIsSUFBSSxDQUNILEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBWTtnQkFDMUQsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVoRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyx1QkFBdUIsV0FBVyxJQUFJLENBQUM7cUJBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRW5CLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXBCLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7b0JBQzVCLGdCQUFnQixFQUFFLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVKLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFbEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXJDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNwRCxDQUFDO1lBRUYsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUNqQixPQUFPO2FBQ1I7WUFFRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFeEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQ3RFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUV0RSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDeEUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBRXhFLE9BQU87aUJBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztpQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztpQkFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO2lCQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDO2lCQUNqRCxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFFdEMsT0FBTztpQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO2lCQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDO2lCQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7aUJBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDekMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7aUJBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDOUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEcmF3ZXIgfSBmcm9tICcuLi9tb2RlbC9pLWRyYXdlcic7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9tb2RlbC9wb2ludC9iYXNlLXBvaW50JztcbmltcG9ydCB7IFNlcmllcyB9IGZyb20gJy4uL21vZGVsL3Nlcmllcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBDaGFydE9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbC9jaGFydC1vcHRpb25zJztcbmltcG9ydCB7IElEcmFnRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9pLWRyYWctZXZlbnQnO1xuaW1wb3J0IHsgRGlzcGF0Y2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9kaXNwYXRjaC10eXBlJztcblxuZXhwb3J0IGNsYXNzIExpbmVEcmF3ZXIgaW1wbGVtZW50cyBJRHJhd2VyPEJhc2VQb2ludD4ge1xuICBkaXNwYXRjaDogZDMuRGlzcGF0Y2g8SURyYWdFdmVudDxTZXJpZXM8QmFzZVBvaW50Pj4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaChEaXNwYXRjaFR5cGUubW92ZUxpbmUpO1xuICB9XG5cbiAgZHJhdyhcbiAgICBzZXJpZXM6IFNlcmllczxCYXNlUG9pbnQ+LFxuICAgIGNvbnRleHQ6IGQzLlNlbGVjdGlvbjxTVkdFbGVtZW50LCB1bmtub3duLCBudWxsLCB1bmRlZmluZWQ+LFxuICAgIHNjYWxlWDogYW55LFxuICAgIHNjYWxlWTogYW55LFxuICAgIG9wdGlvbnM6IENoYXJ0T3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb2ludHMgPSBzZXJpZXMuZGF0YTtcblxuICAgIGNvbnN0IHBhdGggPSBkM1xuICAgICAgLmxpbmU8QmFzZVBvaW50PigpXG4gICAgICAuY3VydmUoc2VyaWVzLmN1cnZlVHlwZSlcbiAgICAgIC5kZWZpbmVkKChkKSA9PiBkLnggIT0gbnVsbCAmJiBkLnkgIT0gbnVsbClcbiAgICAgIC54KChkKSA9PiBzY2FsZVgoZC54KSlcbiAgICAgIC55KChkKSA9PiBzY2FsZVkoZC55KSk7XG4gICAgY29uc3Qgc2VyaWVzSW5kZXggPSBvcHRpb25zLnNlcmllcy5maW5kSW5kZXgoKF8pID0+IF8uaWQgPT09IHNlcmllcy5pZCk7XG5cbiAgICBjb250ZXh0XG4gICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgIC5hdHRyKCdjbGFzcycsIChkOiBCYXNlUG9pbnQpID0+XG4gICAgICAgIHNlcmllcz8uZHJhZy5lbmFibGUgPyAnZHJhZ2dhYmxlJyA6IG51bGxcbiAgICAgIClcbiAgICAgIC5hdHRyKCdkYXRhLWRyYWdnYWJsZS1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzLmNvbG9yKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXMuc3Ryb2tlV2lkdGggPyBzZXJpZXMuc3Ryb2tlV2lkdGggOiAxKVxuICAgICAgLnN0eWxlKCdjdXJzb3InLCBzZXJpZXM/LmRyYWc/LmVuYWJsZSA/ICdtb3ZlJyA6ICdkZWZhdWx0JylcbiAgICAgIC5kYXR1bShwb2ludHMpXG4gICAgICAuYXR0cignZCcsIHBhdGggYXMgYW55KTtcblxuICAgIGNvbnN0IHUgPSBjb250ZXh0LmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2dyYWJiZXJzJyk7XG5cbiAgICBjb25zdCBlbWl0ID0gKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldDogU2VyaWVzPEJhc2VQb2ludD4pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2guYXBwbHkoRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcy5kcmFnLmVuYWJsZSkge1xuICAgICAgdS5zZWxlY3RBbGwoJ2NpcmNsZScpXG4gICAgICAgIC5kYXRhKHBvaW50cylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZ3JhYmJlci1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzPy5kcmFnPy5ncmFiYmVycz8uc3Ryb2tlID8/IHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5zdHJva2VXaWR0aCA/PyAxKVxuICAgICAgICAuYXR0cignZmlsbCcsIHNlcmllcz8uZHJhZz8uZ3JhYmJlcnM/LmZpbGwgPz8gc2VyaWVzPy5jb2xvcilcbiAgICAgICAgLmF0dHIoJ3InLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5yYWRpdXMgPz8gNClcbiAgICAgICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGVYKGQueCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWShkLnkpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdtb3ZlJylcbiAgICAgICAgLmNhbGwoXG4gICAgICAgICAgZDMuZHJhZygpLm9uKCdzdGFydCBkcmFnIGVuZCcsIGZ1bmN0aW9uIChldmVudCwgZDogQmFzZVBvaW50KSB7XG4gICAgICAgICAgICBkLnggPSBzY2FsZVguaW52ZXJ0KGV2ZW50LnNvdXJjZUV2ZW50Py5vZmZzZXRYKTtcbiAgICAgICAgICAgIGQueSA9IHNjYWxlWS5pbnZlcnQoZXZlbnQuc291cmNlRXZlbnQ/Lm9mZnNldFkpO1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ2N4Jywgc2NhbGVYKGQueCkpLmF0dHIoJ2N5Jywgc2NhbGVZKGQueSkpO1xuXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgIC5zZWxlY3QoYFtkYXRhLWRyYWdnYWJsZS1pZD0nJHtzZXJpZXNJbmRleH0nXWApXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgcGF0aCk7XG5cbiAgICAgICAgICAgIGVtaXQoZXZlbnQsIHNlcmllcyk7XG5cbiAgICAgICAgICAgIGlmIChzZXJpZXM/LmRyYWc/LmV4dGVuZExpbmUpIHtcbiAgICAgICAgICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIHUuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYXdFeHRlbmRlZExpbmUgPSAoKSA9PiB7XG4gICAgICBjb250ZXh0LnNlbGVjdEFsbChgW2RhdGEtZXh0ZW5kZWQtaWQ9JyR7c2VyaWVzSW5kZXh9J11gKS5yZW1vdmUoKTtcblxuICAgICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwMi54IC0gcDEueCwgMikgKyBNYXRoLnBvdyhwMi55IC0gcDIueSwgMilcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ZW5kTGVuZ3RoID0gNTA7XG5cbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWCA9IHAyLnggKyAoKHAyLnggLSBwMS54KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWSA9IHAyLnkgKyAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRTdGFydFggPSBwMS54IC0gKChwMi54IC0gcDEueCkgLyBkaXN0YW5jZSkgKiBleHRlbmRMZW5ndGg7XG4gICAgICBjb25zdCBleHRlbmRlZFN0YXJ0WSA9IHAxLnkgLSAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29udGV4dFxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2V4dGVuZGVkTGluZScpXG4gICAgICAgIC5hdHRyKCdkYXRhLWV4dGVuZGVkLWlkJywgc2VyaWVzSW5kZXgpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZXJpZXM/LmNvbG9yKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzPy5zdHJva2VXaWR0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgICAgLmF0dHIoJ3gxJywgc2NhbGVYKHAxLngpKVxuICAgICAgICAuYXR0cigneTEnLCBzY2FsZVkocDEueSkpXG4gICAgICAgIC5hdHRyKCd4MicsIHNjYWxlWChleHRlbmRlZFN0YXJ0WCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZFN0YXJ0WSkpO1xuXG4gICAgICBjb250ZXh0XG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZXh0ZW5kZWRMaW5lJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZXh0ZW5kZWQtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LnN0cm9rZVdpZHRoKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIHNlcmllcz8uc3Ryb2tlRGFzaGFycmF5KVxuICAgICAgICAuYXR0cigneDEnLCBzY2FsZVgocDIueCkpXG4gICAgICAgIC5hdHRyKCd5MScsIHNjYWxlWShwMi55KSlcbiAgICAgICAgLmF0dHIoJ3gyJywgc2NhbGVYKGV4dGVuZGVkRW5kWCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZEVuZFkpKTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcz8uZHJhZz8uZXh0ZW5kTGluZSAmJiBwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvZHJhd2VyL2xpbmUtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsTUFBTSxPQUFPLFVBQVU7SUFHckI7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksQ0FDRixNQUF5QixFQUN6QixPQUEyRCxFQUMzRCxNQUFXLEVBQ1gsTUFBVyxFQUNYLE9BQXFCO1FBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFM0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBELE1BQU0sSUFBSSxHQUFHLEVBQUU7YUFDWixJQUFJLEVBQWE7YUFDakIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQzthQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFF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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjtnQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUV6RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEcmF3ZXIgfSBmcm9tICcuLi9tb2RlbC9pLWRyYXdlcic7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9tb2RlbC9wb2ludC9iYXNlLXBvaW50JztcbmltcG9ydCB7IFNlcmllcyB9IGZyb20gJy4uL21vZGVsL3Nlcmllcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBDaGFydE9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbC9jaGFydC1vcHRpb25zJztcbmltcG9ydCB7IElEcmFnRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9pLWRyYWctZXZlbnQnO1xuaW1wb3J0IHsgRGlzcGF0Y2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9kaXNwYXRjaC10eXBlJztcbmltcG9ydCB7IERyYWdQb2ludFR5cGUgfSBmcm9tICcuLi9tb2RlbC9lbnVtL2RyYWctcG9pbnQtdHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBMaW5lRHJhd2VyIGltcGxlbWVudHMgSURyYXdlcjxCYXNlUG9pbnQ+IHtcbiAgZGlzcGF0Y2g6IGQzLkRpc3BhdGNoPElEcmFnRXZlbnQ8U2VyaWVzPEJhc2VQb2ludD4+PjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRpc3BhdGNoID0gZDMuZGlzcGF0Y2goRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCBEaXNwYXRjaFR5cGUubW92ZVBvaW50KTtcbiAgfVxuXG4gIGRyYXcoXG4gICAgc2VyaWVzOiBTZXJpZXM8QmFzZVBvaW50PixcbiAgICBjb250ZXh0OiBkMy5TZWxlY3Rpb248U1ZHRWxlbWVudCwgdW5rbm93biwgbnVsbCwgdW5kZWZpbmVkPixcbiAgICBzY2FsZVg6IGFueSxcbiAgICBzY2FsZVk6IGFueSxcbiAgICBvcHRpb25zOiBDaGFydE9wdGlvbnNcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcG9pbnRzID0gc2VyaWVzLmRhdGE7XG5cbiAgICBjb25zdCBtYXJrZXJQb2ludHMgPSBwb2ludHMuZmlsdGVyKChfKSA9PiBfLm1hcmtlcik7XG5cbiAgICBjb25zdCBwYXRoID0gZDNcbiAgICAgIC5saW5lPEJhc2VQb2ludD4oKVxuICAgICAgLmN1cnZlKHNlcmllcy5jdXJ2ZVR5cGUpXG4gICAgICAuZGVmaW5lZCgoZCkgPT4gZC54ICE9IG51bGwgJiYgZC55ICE9IG51bGwpXG4gICAgICAueCgoZCkgPT4gc2NhbGVYKGQueCkpXG4gICAgICAueSgoZCkgPT4gc2NhbGVZKGQueSkpO1xuXG4gICAgY29uc3Qgc2VyaWVzSW5kZXggPSBvcHRpb25zLnNlcmllcy5maW5kSW5kZXgoKF8pID0+IF8uaWQgPT09IHNlcmllcy5pZCk7XG5cbiAgICBjb250ZXh0XG4gICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgIC5hdHRyKCdjbGFzcycsIChkOiBCYXNlUG9pbnQpID0+XG4gICAgICAgIHNlcmllcz8uZHJhZy5lbmFibGUgPyAnZHJhZ2dhYmxlJyA6IGBzZXJpZXMtJHtzZXJpZXNJbmRleH1gXG4gICAgICApXG4gICAgICAuYXR0cignZGF0YS1kcmFnZ2FibGUtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcy5jb2xvcilcbiAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5Jywgc2VyaWVzPy5zdHJva2VEYXNoYXJyYXkpXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzLnN0cm9rZVdpZHRoID8gc2VyaWVzLnN0cm9rZVdpZHRoIDogMSlcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgc2VyaWVzPy5kcmFnPy5lbmFibGUgPyAnbW92ZScgOiAnZGVmYXVsdCcpXG4gICAgICAuZGF0dW0ocG9pbnRzKVxuICAgICAgLmF0dHIoJ2QnLCBwYXRoKTtcblxuICAgIGNvbnN0IHUgPSBjb250ZXh0LmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2dyYWJiZXJzJyk7XG5cbiAgICBjb25zdCBlbWl0ID0gKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldDogU2VyaWVzPEJhc2VQb2ludD4pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2guYXBwbHkoRGlzcGF0Y2hUeXBlLm1vdmVMaW5lLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcy5kcmFnLmVuYWJsZSkge1xuICAgICAgdS5zZWxlY3RBbGwoJ2NpcmNsZScpXG4gICAgICAgIC5kYXRhKHBvaW50cylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZ3JhYmJlci1pZCcsIHNlcmllc0luZGV4KVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VyaWVzPy5kcmFnPy5ncmFiYmVycz8uc3Ryb2tlID8/IHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5zdHJva2VXaWR0aCA/PyAxKVxuICAgICAgICAuYXR0cignZmlsbCcsIHNlcmllcz8uZHJhZz8uZ3JhYmJlcnM/LmZpbGwgPz8gc2VyaWVzPy5jb2xvcilcbiAgICAgICAgLmF0dHIoJ3InLCBzZXJpZXM/LmRyYWc/LmdyYWJiZXJzPy5yYWRpdXMgPz8gNClcbiAgICAgICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGVYKGQueCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWShkLnkpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdtb3ZlJylcbiAgICAgICAgLmNhbGwoXG4gICAgICAgICAgZDMuZHJhZygpLm9uKCdzdGFydCBkcmFnIGVuZCcsIGZ1bmN0aW9uIChldmVudCwgZDogQmFzZVBvaW50KSB7XG4gICAgICAgICAgICBkLnggPSBzY2FsZVguaW52ZXJ0KGV2ZW50LnNvdXJjZUV2ZW50Py5vZmZzZXRYKTtcbiAgICAgICAgICAgIGQueSA9IHNjYWxlWS5pbnZlcnQoZXZlbnQuc291cmNlRXZlbnQ/Lm9mZnNldFkpO1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ2N4Jywgc2NhbGVYKGQueCkpLmF0dHIoJ2N5Jywgc2NhbGVZKGQueSkpO1xuXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgIC5zZWxlY3QoYFtkYXRhLWRyYWdnYWJsZS1pZD0nJHtzZXJpZXNJbmRleH0nXWApXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgcGF0aCk7XG5cbiAgICAgICAgICAgIGVtaXQoZXZlbnQsIHNlcmllcyk7XG5cbiAgICAgICAgICAgIGlmIChzZXJpZXM/LmRyYWc/LmV4dGVuZExpbmUpIHtcbiAgICAgICAgICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIHUuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYXdFeHRlbmRlZExpbmUgPSAoKSA9PiB7XG4gICAgICBjb250ZXh0LnNlbGVjdEFsbChgW2RhdGEtZXh0ZW5kZWQtaWQ9JyR7c2VyaWVzSW5kZXh9J11gKS5yZW1vdmUoKTtcblxuICAgICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwMi54IC0gcDEueCwgMikgKyBNYXRoLnBvdyhwMi55IC0gcDIueSwgMilcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ZW5kTGVuZ3RoID0gNTA7XG5cbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWCA9IHAyLnggKyAoKHAyLnggLSBwMS54KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVuZGVkRW5kWSA9IHAyLnkgKyAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRTdGFydFggPSBwMS54IC0gKChwMi54IC0gcDEueCkgLyBkaXN0YW5jZSkgKiBleHRlbmRMZW5ndGg7XG4gICAgICBjb25zdCBleHRlbmRlZFN0YXJ0WSA9IHAxLnkgLSAoKHAyLnkgLSBwMS55KSAvIGRpc3RhbmNlKSAqIGV4dGVuZExlbmd0aDtcblxuICAgICAgY29udGV4dFxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2V4dGVuZGVkTGluZScpXG4gICAgICAgIC5hdHRyKCdkYXRhLWV4dGVuZGVkLWlkJywgc2VyaWVzSW5kZXgpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZXJpZXM/LmNvbG9yKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgc2VyaWVzPy5zdHJva2VXaWR0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBzZXJpZXM/LnN0cm9rZURhc2hhcnJheSlcbiAgICAgICAgLmF0dHIoJ3gxJywgc2NhbGVYKHAxLngpKVxuICAgICAgICAuYXR0cigneTEnLCBzY2FsZVkocDEueSkpXG4gICAgICAgIC5hdHRyKCd4MicsIHNjYWxlWChleHRlbmRlZFN0YXJ0WCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZFN0YXJ0WSkpO1xuXG4gICAgICBjb250ZXh0XG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZXh0ZW5kZWRMaW5lJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtZXh0ZW5kZWQtaWQnLCBzZXJpZXNJbmRleClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlcmllcz8uY29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBzZXJpZXM/LnN0cm9rZVdpZHRoKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIHNlcmllcz8uc3Ryb2tlRGFzaGFycmF5KVxuICAgICAgICAuYXR0cigneDEnLCBzY2FsZVgocDIueCkpXG4gICAgICAgIC5hdHRyKCd5MScsIHNjYWxlWShwMi55KSlcbiAgICAgICAgLmF0dHIoJ3gyJywgc2NhbGVYKGV4dGVuZGVkRW5kWCkpXG4gICAgICAgIC5hdHRyKCd5MicsIHNjYWxlWShleHRlbmRlZEVuZFkpKTtcbiAgICB9O1xuXG4gICAgaWYgKHNlcmllcz8uZHJhZz8uZXh0ZW5kTGluZSAmJiBwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgZHJhd0V4dGVuZGVkTGluZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXJrZXJQb2ludHM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZW1pdCA9IChldmVudDogRHJhZ0V2ZW50LCB0YXJnZXQ6IEJhc2VQb2ludCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoLmFwcGx5KERpc3BhdGNoVHlwZS5tb3ZlUG9pbnQsIHtcbiAgICAgICAgICB0YXJnZXQ6IHNlcmllcyxcbiAgICAgICAgICBwb2ludDoge1xuICAgICAgICAgICAgLi4udGFyZ2V0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29udGV4dFxuICAgICAgICAuc2VsZWN0QWxsKGBkcmFnZ2FibGUtbWFya2VyLSR7c2VyaWVzSW5kZXh9YClcbiAgICAgICAgLmRhdGEobWFya2VyUG9pbnRzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCBgZHJhZ2dhYmxlLW1hcmtlci0ke3Nlcmllc0luZGV4fWApXG4gICAgICAgIC5hdHRyKCdyJywgKGQpID0+IGQubWFya2VyPy5zdHlsZT8ucmFkaXVzIHx8IDUpXG4gICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlWChkLngpO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBzY2FsZVkoZC55KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIChkKSA9PiBkLm1hcmtlcj8uc3R5bGU/LmNvbG9yIHx8ICdub25lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIChkKSA9PiBkLm1hcmtlcj8uc3R5bGU/LnN0cm9rZSB8fCAnbm9uZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAoZCkgPT4gZC5tYXJrZXI/LnN0eWxlPy5zdHJva2VXaWR0aCB8fCAwKTtcblxuICAgICAgY29udGV4dC5zZWxlY3RBbGwoYC5kcmFnZ2FibGUtbWFya2VyLSR7c2VyaWVzSW5kZXh9YCkuY2FsbChcbiAgICAgICAgZDMuZHJhZygpLm9uKCdkcmFnIHN0YXJ0IGVuZCcsIGZ1bmN0aW9uIGRyYWdnZWQoZXZlbnQsIGQ6IEJhc2VQb2ludCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBkMy5zZWxlY3QodGhpcyk7XG5cbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgbm9kZS5yYWlzZSgpLmNsYXNzZWQoJ2FjdGl2ZScsIHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueCkge1xuICAgICAgICAgICAgZC54ID0gc2NhbGVYLmludmVydChldmVudC5zb3VyY2VFdmVudD8ub2Zmc2V0WCk7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ2N4Jywgc2NhbGVYKGQueCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueSkge1xuICAgICAgICAgICAgZC55ID0gc2NhbGVZLmludmVydChldmVudC5zb3VyY2VFdmVudD8ub2Zmc2V0WSk7XG4gICAgICAgICAgICBub2RlLmF0dHIoJ2N5Jywgc2NhbGVZKGQueSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuc2VsZWN0KGAuc2VyaWVzLSR7c2VyaWVzSW5kZXh9YCkuYXR0cignZCcsIHBhdGgpO1xuXG4gICAgICAgICAgZW1pdChldmVudCwgZCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -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
@@ -0,0 +1,7 @@
1
+ export var DragPointType;
2
+ (function (DragPointType) {
3
+ DragPointType[DragPointType["x"] = 0] = "x";
4
+ DragPointType[DragPointType["y"] = 1] = "y";
5
+ DragPointType[DragPointType["xy"] = 2] = "xy";
6
+ })(DragPointType || (DragPointType = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wb2ludC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29tcG9uZW50L2NoYXJ0L21vZGVsL2VudW0vZHJhZy1wb2ludC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsMkNBQUMsQ0FBQTtJQUNELDJDQUFDLENBQUE7SUFDRCw2Q0FBRSxDQUFBO0FBQ0osQ0FBQyxFQUpXLGFBQWEsS0FBYixhQUFhLFFBSXhCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRHJhZ1BvaW50VHlwZSB7XG4gIHgsXG4gIHksXG4gIHh5LFxufVxuIl19
@@ -4,4 +4,5 @@ export * from './series-type';
4
4
  export * from './legend-type';
5
5
  export * from './scale-type';
6
6
  export * from './zoom-type';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9lbnVtL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F4aXMtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjYWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VyaWVzLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9sZWdlbmQtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjYWxlLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi96b29tLXR5cGUnO1xuIl19
7
+ export * from './drag-point-type';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9lbnVtL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXhpcy10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2NhbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJpZXMtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xlZ2VuZC10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2NhbGUtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3pvb20tdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctcG9pbnQtdHlwZSc7XG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnQvY2hhcnQvbW9kZWwvcG9pbnQvbWFya2VyLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERyYWdQb2ludFR5cGUgfSBmcm9tICcuLi9lbnVtL2RyYWctcG9pbnQtdHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2VyT3B0aW9ucyB7XG4gIGRyYWdnYWJsZT86IGJvb2xlYW47XG4gIGRyYWdUeXBlOiBEcmFnUG9pbnRUeXBlO1xuICBzdHlsZT86IHtcbiAgICByYWRpdXM/OiBudW1iZXI7XG4gICAgc3Ryb2tlPzogc3RyaW5nO1xuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICB9O1xufVxuIl19
@@ -1,3 +1,4 @@
1
1
  export * from './base-point';
2
2
  export * from './bar-point';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9wb2ludC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlLXBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vYmFyLXBvaW50JztcbiJdfQ==
3
+ export * from './marker-options';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9tb2RlbC9wb2ludC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2UtcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXItcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXJrZXItb3B0aW9ucyc7XG4iXX0=
@@ -10062,15 +10062,24 @@ 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
 
10068
+ var DragPointType;
10069
+ (function (DragPointType) {
10070
+ DragPointType[DragPointType["x"] = 0] = "x";
10071
+ DragPointType[DragPointType["y"] = 1] = "y";
10072
+ DragPointType[DragPointType["xy"] = 2] = "xy";
10073
+ })(DragPointType || (DragPointType = {}));
10074
+
10067
10075
  class LineDrawer {
10068
10076
  constructor() {
10069
- this.dispatch = d3.dispatch(DispatchType.moveLine);
10077
+ this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);
10070
10078
  }
10071
10079
  draw(series, context, scaleX, scaleY, options) {
10072
10080
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
10073
10081
  const points = series.data;
10082
+ const markerPoints = points.filter((_) => _.marker);
10074
10083
  const path = d3
10075
10084
  .line()
10076
10085
  .curve(series.curveType)
@@ -10080,7 +10089,7 @@ class LineDrawer {
10080
10089
  const seriesIndex = options.series.findIndex((_) => _.id === series.id);
10081
10090
  context
10082
10091
  .append('path')
10083
- .attr('class', (d) => (series === null || series === void 0 ? void 0 : series.drag.enable) ? 'draggable' : null)
10092
+ .attr('class', (d) => (series === null || series === void 0 ? void 0 : series.drag.enable) ? 'draggable' : `series-${seriesIndex}`)
10084
10093
  .attr('data-draggable-id', seriesIndex)
10085
10094
  .attr('fill', 'none')
10086
10095
  .attr('stroke', series.color)
@@ -10167,6 +10176,49 @@ class LineDrawer {
10167
10176
  if (((_p = series === null || series === void 0 ? void 0 : series.drag) === null || _p === void 0 ? void 0 : _p.extendLine) && (points === null || points === void 0 ? void 0 : points.length)) {
10168
10177
  drawExtendedLine();
10169
10178
  }
10179
+ if (markerPoints === null || markerPoints === void 0 ? void 0 : markerPoints.length) {
10180
+ const emit = (event, target) => {
10181
+ this.dispatch.apply(DispatchType.movePoint, {
10182
+ target: series,
10183
+ point: Object.assign({}, target),
10184
+ event,
10185
+ });
10186
+ };
10187
+ context
10188
+ .selectAll(`draggable-marker-${seriesIndex}`)
10189
+ .data(markerPoints)
10190
+ .enter()
10191
+ .append('circle')
10192
+ .attr('class', `draggable-marker-${seriesIndex}`)
10193
+ .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; })
10194
+ .attr('cx', function (d) {
10195
+ return scaleX(d.x);
10196
+ })
10197
+ .attr('cy', function (d) {
10198
+ return scaleY(d.y);
10199
+ })
10200
+ .style('cursor', 'pointer')
10201
+ .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) || 'none'; })
10202
+ .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'; })
10203
+ .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; });
10204
+ context.selectAll(`.draggable-marker-${seriesIndex}`).call(d3.drag().on('drag start end', function dragged(event, d) {
10205
+ var _a, _b, _c, _d;
10206
+ const node = d3.select(this);
10207
+ if (event.type === 'start') {
10208
+ node.raise().classed('active', true);
10209
+ }
10210
+ if (((_a = d.marker) === null || _a === void 0 ? void 0 : _a.dragType) === DragPointType.x) {
10211
+ d.x = scaleX.invert((_b = event.sourceEvent) === null || _b === void 0 ? void 0 : _b.offsetX);
10212
+ node.attr('cx', scaleX(d.x));
10213
+ }
10214
+ if (((_c = d.marker) === null || _c === void 0 ? void 0 : _c.dragType) === DragPointType.y) {
10215
+ d.y = scaleY.invert((_d = event.sourceEvent) === null || _d === void 0 ? void 0 : _d.offsetY);
10216
+ node.attr('cy', scaleY(d.y));
10217
+ }
10218
+ context.select(`.series-${seriesIndex}`).attr('d', path);
10219
+ emit(event, d);
10220
+ }));
10221
+ }
10170
10222
  }
10171
10223
  }
10172
10224
 
@@ -10539,6 +10591,7 @@ class TetaChart {
10539
10591
  this.plotLinesMove$ = new Subject();
10540
10592
  this.plotBandsMove$ = new Subject();
10541
10593
  this.seriesMove$ = new Subject();
10594
+ this.pointMove$ = new Subject();
10542
10595
  this.zoom$ = new Subject();
10543
10596
  this._container = null;
10544
10597
  this._width = 0;
@@ -10560,6 +10613,7 @@ class TetaChart {
10560
10613
  this.plotLinesMove = this.plotLinesMove$.asObservable();
10561
10614
  this.plotBandsMove = this.plotBandsMove$.asObservable();
10562
10615
  this.seriesMove = this.seriesMove$.asObservable();
10616
+ this.pointMove = this.pointMove$.asObservable();
10563
10617
  this.zoom = this.zoom$.asObservable();
10564
10618
  }
10565
10619
  redraw(options) {
@@ -10672,11 +10726,11 @@ class TetaChart {
10672
10726
  this.visibleChartWindowWidth = this.caluclateChartWidth();
10673
10727
  }
10674
10728
  _redraw() {
10729
+ this.drawPlotBands();
10730
+ this.drawPlotLines();
10675
10731
  this.drawChart();
10676
10732
  this.drawAxis();
10677
10733
  this.drawGridLines();
10678
- this.drawPlotBands();
10679
- this.drawPlotLines();
10680
10734
  this.drawAnnotations();
10681
10735
  }
10682
10736
  addZoom() {
@@ -11063,6 +11117,7 @@ class TetaChart {
11063
11117
  .attr('y2', this._height -
11064
11118
  this._options.bounds.top -
11065
11119
  this._options.bounds.bottom)
11120
+ .style('display', (d) => ((d === null || d === void 0 ? void 0 : d.resizable) ? 'unset' : 'none'))
11066
11121
  .attr('transform', `translate(0, ${this._options.bounds.top})`)
11067
11122
  .style('stroke-width', 8)
11068
11123
  .style('stroke', 'rgba(0, 0, 0, 0)')
@@ -11117,6 +11172,7 @@ class TetaChart {
11117
11172
  .data(axis.options.plotBands)
11118
11173
  .join('line')
11119
11174
  .attr('class', 'drag-right')
11175
+ .style('display', (d) => ((d === null || d === void 0 ? void 0 : d.resizable) ? 'unset' : 'none'))
11120
11176
  .attr('x1', (d) => x(d.to))
11121
11177
  .attr('x2', (d) => x(d.to))
11122
11178
  .attr('y1', 0)
@@ -11366,7 +11422,7 @@ class TetaChart {
11366
11422
  .attr('class', 'series')
11367
11423
  .attr('clip-path', `url(#draw-window-${this.uniqId})`);
11368
11424
  series === null || series === void 0 ? void 0 : series.forEach((seriesItem, index) => {
11369
- var _a;
11425
+ var _a, _b;
11370
11426
  if (seriesItem.renderTo === 'canvas') {
11371
11427
  d3.select(this._container.nativeElement)
11372
11428
  .select('canvas')
@@ -11424,9 +11480,15 @@ class TetaChart {
11424
11480
  const emit = (event) => {
11425
11481
  this.seriesMove$.next(event);
11426
11482
  };
11483
+ const emitPoint = (event) => {
11484
+ this.pointMove$.next(event);
11485
+ };
11427
11486
  (_a = drawer === null || drawer === void 0 ? void 0 : drawer.dispatch) === null || _a === void 0 ? void 0 : _a.on(DispatchType.moveLine, function () {
11428
11487
  emit(this);
11429
11488
  });
11489
+ (_b = drawer === null || drawer === void 0 ? void 0 : drawer.dispatch) === null || _b === void 0 ? void 0 : _b.on(DispatchType.movePoint, function () {
11490
+ emitPoint(this);
11491
+ });
11430
11492
  });
11431
11493
  }
11432
11494
  createTooltip() {
@@ -11875,6 +11937,7 @@ class ChartComponent {
11875
11937
  this.plotLinesMove = new EventEmitter();
11876
11938
  this.plotBandsMove = new EventEmitter();
11877
11939
  this.seriesMove = new EventEmitter();
11940
+ this.pointMove = new EventEmitter();
11878
11941
  this.zoomChange = new EventEmitter();
11879
11942
  this._alive = true;
11880
11943
  this.size$ = new Subject();
@@ -11923,8 +11986,7 @@ class ChartComponent {
11923
11986
  (_b = this._chart) === null || _b === void 0 ? void 0 : _b.setZoom(this.zoom);
11924
11987
  }
11925
11988
  }
11926
- ngOnInit() {
11927
- }
11989
+ ngOnInit() { }
11928
11990
  ngAfterViewInit() {
11929
11991
  this._observer = new ResizeObserver((entries) => {
11930
11992
  const { contentRect } = entries[0];
@@ -11972,6 +12034,11 @@ class ChartComponent {
11972
12034
  this._chart.seriesMove
11973
12035
  .pipe(takeWhile((_) => this._alive))
11974
12036
  .subscribe((_) => this.seriesMove.emit(_));
12037
+ this._chart.pointMove
12038
+ .pipe(takeWhile((_) => this._alive))
12039
+ .subscribe((_) => {
12040
+ this.pointMove.emit(_);
12041
+ });
11975
12042
  this._chart.zoom
11976
12043
  .pipe(takeWhile((_) => this._alive), map((_) => {
11977
12044
  this.zoomChange.emit(_);
@@ -11989,7 +12056,7 @@ class ChartComponent {
11989
12056
  }
11990
12057
  }
11991
12058
  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 });
12059
+ 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
12060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ChartComponent, decorators: [{
11994
12061
  type: Component,
11995
12062
  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 +12070,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
12003
12070
  type: Output
12004
12071
  }], seriesMove: [{
12005
12072
  type: Output
12073
+ }], pointMove: [{
12074
+ type: Output
12006
12075
  }], zoomChange: [{
12007
12076
  type: Output
12008
12077
  }], chart: [{
@@ -13234,5 +13303,5 @@ class StringUtil {
13234
13303
  * Generated bundle index. Do not edit.
13235
13304
  */
13236
13305
 
13237
- export { AccordionComponent, AccordionContentDirective, AccordionHeadComponent, AccordionItemComponent, AccordionModule, AggregationType, Align, Annotation, AreaDrawer, ArrayUtil, Axis, AxisOptions, AxisType, BarDrawer, BooleanCellComponent, BooleanFilter, BooleanFilterComponent, ButtonComponent, ButtonModule, CHECKBOX_CONTROL_VALUE_ACCESSOR, CellComponent, CellComponentBase, CellHostComponent, Chart3dComponent, Chart3dModule, Chart3dOptions, ChartBounds, ChartComponent, ChartModule, ChartOptions, CheckboxComponent, CheckboxModule, ClickOutsideDirective, ClickOutsideModule, ClickService, ColumnReorderEvent, ColumnResizeEvent, ContextMenuDirective, ContextMenuModule, CurrentModal, DATE_PICKER_CONTROL_VALUE_ACCESSOR, DAY_SELECT_CONTROL_VALUE_ACCESSOR, DateCellComponent, DateFilter, DateFilterComponent, DateFilterValue, DatePeriod, DatePickerComponent, DatePickerModule, DateTimeCellComponent, DateUtil, DaySelectComponent, DelimiterComponent, DelimiterModule, DetailComponentBase, DialogComponent, DialogService, DisableControlDirective, DisableControlModule, DomUtil, DragSortContainerDirective, DragSortItemDirective, DragSortModule, DropdownComponent, DropdownContentDirective, DropdownDirective, DropdownHeadDirective, DropdownModule, DynamicComponentModule, DynamicComponentService, DynamicContentBaseDirective, DynamicData, EditEvent, EditType, ExpandPanelComponent, ExpandPanelContentDirective, ExpandPanelHeadDirective, ExpandPanelModule, FileItemComponent, FileUploadAreaComponent, FileUploadModule, FilterBase, FilterComponentBase, FilterHostComponent, FilterItem, FilterModule, FilterPanelComponent, FilterState, FilterType, FormGroupTitleComponent, FormsUtil, GroupRowComponent, HeadCellComponentBase, HeadCellHostComponent, HighlightDirective, HighlightModule, HintDirective, HintModule, IconComponent, IconModule, IconService, IconSpriteDirective, InputComponent, InputModule, LegendType, LineDrawer, ListCellComponent, ListFilter, ListFilterComponent, ListFilterType, LoaderDirective, LoaderModule, MONTH_PICKER_CONTROL_VALUE_ACCESSOR, Message, MessageComponent, MessageHostComponent, MessageModule, MessageService, ModalCloseReason, ModalContainerComponent, ModalInstance, ModalModule, ModalService, MonthPickerComponent, NoAutofillDirective, NoAutofillModule, NumberPipe, NumberPipeModule, NumericCellComponent, NumericFilter, NumericFilterComponent, NumericFilterValue, OnlyNumberDirective, OnlyNumberModule, OverlayContainerService, PagerComponent, PagerModule, PagerState, PagerUtil, PanelComponent, PanelModule, PieDrawer, PlotBand, PlotLine, PopupContentComponent, PositionUtil, ProgressBarComponent, ProgressBarModule, PropertyGridComponent, PropertyGridModule, RadioButtonComponent, RadioComponent, RadioModule, ResizeDragDirective, ResizeDragModule, ResizePanelComponent, ResizePanelModule, SLIDER_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, Scale, ScaleType, ScatterDrawer, SelectComponent, SelectModule, SelectOptionDirective, SelectType, SelectValueDirective, Series, SeriesType, SidebarComponent, SidebarModule, SidebarPosition, SortEvent, SortParam, SplineDrawer, StringCellComponent, StringFilter, StringFilterComponent, StringFilterType, StringUtil, SwitchButtonComponent, SwitchComponent, SwitchModule, TOGGLE_CONTROL_VALUE_ACCESSOR, TabComponent, TabContentDirective, TabTitleDirective, TableBodyComponent, TableColumn, TableColumnStore, TableComponent, TableContextMenuConfig, TableHeadComponent, TableModule, TableRow, TableService, TabsComponent, TabsModule, TetaChart, TetaContentRef, TetaSize, TetaTemplateDirective, TetaTemplateModule, TextFieldComponent, ThemeSwitchComponent, ThemeSwitchModule, ThemeSwitchService, ToggleComponent, ToggleModule, ToolbarComponent, ToolbarModule, TooltipDirective, TooltipModule, TooltipOptions, TreeComponent, TreeItemToggleComponent, TreeModule, TreeService, VerticalAlign, ZoomType, getCellComponent };
13306
+ export { AccordionComponent, AccordionContentDirective, AccordionHeadComponent, AccordionItemComponent, AccordionModule, AggregationType, Align, Annotation, AreaDrawer, ArrayUtil, Axis, AxisOptions, AxisType, BarDrawer, BooleanCellComponent, BooleanFilter, BooleanFilterComponent, ButtonComponent, ButtonModule, CHECKBOX_CONTROL_VALUE_ACCESSOR, CellComponent, CellComponentBase, CellHostComponent, Chart3dComponent, Chart3dModule, Chart3dOptions, ChartBounds, ChartComponent, ChartModule, ChartOptions, CheckboxComponent, CheckboxModule, ClickOutsideDirective, ClickOutsideModule, ClickService, ColumnReorderEvent, ColumnResizeEvent, ContextMenuDirective, ContextMenuModule, CurrentModal, DATE_PICKER_CONTROL_VALUE_ACCESSOR, DAY_SELECT_CONTROL_VALUE_ACCESSOR, DateCellComponent, DateFilter, DateFilterComponent, DateFilterValue, DatePeriod, DatePickerComponent, DatePickerModule, DateTimeCellComponent, DateUtil, DaySelectComponent, DelimiterComponent, DelimiterModule, DetailComponentBase, DialogComponent, DialogService, DisableControlDirective, DisableControlModule, DomUtil, DragPointType, DragSortContainerDirective, DragSortItemDirective, DragSortModule, DropdownComponent, DropdownContentDirective, DropdownDirective, DropdownHeadDirective, DropdownModule, DynamicComponentModule, DynamicComponentService, DynamicContentBaseDirective, DynamicData, EditEvent, EditType, ExpandPanelComponent, ExpandPanelContentDirective, ExpandPanelHeadDirective, ExpandPanelModule, FileItemComponent, FileUploadAreaComponent, FileUploadModule, FilterBase, FilterComponentBase, FilterHostComponent, FilterItem, FilterModule, FilterPanelComponent, FilterState, FilterType, FormGroupTitleComponent, FormsUtil, GroupRowComponent, HeadCellComponentBase, HeadCellHostComponent, HighlightDirective, HighlightModule, HintDirective, HintModule, IconComponent, IconModule, IconService, IconSpriteDirective, InputComponent, InputModule, LegendType, LineDrawer, ListCellComponent, ListFilter, ListFilterComponent, ListFilterType, LoaderDirective, LoaderModule, MONTH_PICKER_CONTROL_VALUE_ACCESSOR, Message, MessageComponent, MessageHostComponent, MessageModule, MessageService, ModalCloseReason, ModalContainerComponent, ModalInstance, ModalModule, ModalService, MonthPickerComponent, NoAutofillDirective, NoAutofillModule, NumberPipe, NumberPipeModule, NumericCellComponent, NumericFilter, NumericFilterComponent, NumericFilterValue, OnlyNumberDirective, OnlyNumberModule, OverlayContainerService, PagerComponent, PagerModule, PagerState, PagerUtil, PanelComponent, PanelModule, PieDrawer, PlotBand, PlotLine, PopupContentComponent, PositionUtil, ProgressBarComponent, ProgressBarModule, PropertyGridComponent, PropertyGridModule, RadioButtonComponent, RadioComponent, RadioModule, ResizeDragDirective, ResizeDragModule, ResizePanelComponent, ResizePanelModule, SLIDER_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, Scale, ScaleType, ScatterDrawer, SelectComponent, SelectModule, SelectOptionDirective, SelectType, SelectValueDirective, Series, SeriesType, SidebarComponent, SidebarModule, SidebarPosition, SortEvent, SortParam, SplineDrawer, StringCellComponent, StringFilter, StringFilterComponent, StringFilterType, StringUtil, SwitchButtonComponent, SwitchComponent, SwitchModule, TOGGLE_CONTROL_VALUE_ACCESSOR, TabComponent, TabContentDirective, TabTitleDirective, TableBodyComponent, TableColumn, TableColumnStore, TableComponent, TableContextMenuConfig, TableHeadComponent, TableModule, TableRow, TableService, TabsComponent, TabsModule, TetaChart, TetaContentRef, TetaSize, TetaTemplateDirective, TetaTemplateModule, TextFieldComponent, ThemeSwitchComponent, ThemeSwitchModule, ThemeSwitchService, ToggleComponent, ToggleModule, ToolbarComponent, ToolbarModule, TooltipDirective, TooltipModule, TooltipOptions, TreeComponent, TreeItemToggleComponent, TreeModule, TreeService, VerticalAlign, ZoomType, getCellComponent };
13238
13307
  //# sourceMappingURL=tetacom-ng-components.mjs.map