mdt-charts 1.27.1 → 1.27.3

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.
Files changed (145) hide show
  1. package/.prettierrc +6 -0
  2. package/lib/config/config.d.ts +13 -13
  3. package/lib/designer/designerConfig.d.ts +1 -1
  4. package/lib/engine/block/block.js +14 -14
  5. package/lib/engine/block/blockHelper.js +2 -2
  6. package/lib/engine/block/blockSvg.js +25 -28
  7. package/lib/engine/block/defs/LinearGradientDef.js +9 -8
  8. package/lib/engine/contentManager/contentManagerFactory.js +1 -1
  9. package/lib/engine/elementHighlighter/elementHighlighter.d.ts +3 -3
  10. package/lib/engine/elementHighlighter/elementHighlighter.js +52 -54
  11. package/lib/engine/elementHighlighter/selectHighlighter.js +7 -7
  12. package/lib/engine/engine.d.ts +4 -4
  13. package/lib/engine/engine.js +5 -5
  14. package/lib/engine/features/aggregator/aggregator.d.ts +1 -1
  15. package/lib/engine/features/aggregator/aggregator.js +43 -45
  16. package/lib/engine/features/axis/axis.d.ts +1 -1
  17. package/lib/engine/features/axis/axis.js +53 -48
  18. package/lib/engine/features/axis/axisDomHelper.d.ts +3 -3
  19. package/lib/engine/features/axis/axisDomHelper.js +6 -8
  20. package/lib/engine/features/axis/axisHelper.d.ts +2 -2
  21. package/lib/engine/features/axis/axisHelper.js +14 -21
  22. package/lib/engine/features/axis/axisLabelDomHelper.d.ts +3 -3
  23. package/lib/engine/features/axis/axisLabelDomHelper.js +74 -66
  24. package/lib/engine/features/axis/axisLabelsEventManager.js +11 -11
  25. package/lib/engine/features/embeddedLabels/embeddedLabels.d.ts +3 -3
  26. package/lib/engine/features/embeddedLabels/embeddedLabels.js +44 -44
  27. package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.d.ts +1 -1
  28. package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.js +3 -6
  29. package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.d.ts +2 -2
  30. package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.js +22 -20
  31. package/lib/engine/features/gridLine/gidLineHelper.d.ts +1 -1
  32. package/lib/engine/features/gridLine/gidLineHelper.js +5 -5
  33. package/lib/engine/features/gridLine/gridLine.js +14 -23
  34. package/lib/engine/features/legend/legend.js +27 -36
  35. package/lib/engine/features/legend/legendDomHelper.js +18 -9
  36. package/lib/engine/features/legend/legendEventsManager.js +18 -13
  37. package/lib/engine/features/legend/legendHelper.js +19 -19
  38. package/lib/engine/features/legend/legendHelperService.js +5 -5
  39. package/lib/engine/features/legend/legendMarkerCreator.js +23 -22
  40. package/lib/engine/features/legend/legendWidthCalculator.js +5 -7
  41. package/lib/engine/features/markDots/markDot.d.ts +2 -2
  42. package/lib/engine/features/markDots/markDot.js +35 -34
  43. package/lib/engine/features/markDots/markDotsHelper.js +6 -6
  44. package/lib/engine/features/recordOverflowAlert/recordOverflowAlertCore.js +11 -11
  45. package/lib/engine/features/scale/scale.d.ts +4 -5
  46. package/lib/engine/features/scale/scale.js +16 -25
  47. package/lib/engine/features/tipBox/tipBox.d.ts +2 -2
  48. package/lib/engine/features/tipBox/tipBox.js +13 -17
  49. package/lib/engine/features/tipBox/tipBoxHelper.js +5 -5
  50. package/lib/engine/features/title/title.d.ts +1 -1
  51. package/lib/engine/features/title/title.js +8 -11
  52. package/lib/engine/features/tolltip/newTooltip/newTooltip.d.ts +1 -1
  53. package/lib/engine/features/tolltip/newTooltip/newTooltip.js +6 -8
  54. package/lib/engine/features/tolltip/tooltip.d.ts +2 -2
  55. package/lib/engine/features/tolltip/tooltip.js +47 -42
  56. package/lib/engine/features/tolltip/tooltipComponentsManager.d.ts +2 -2
  57. package/lib/engine/features/tolltip/tooltipComponentsManager.js +49 -52
  58. package/lib/engine/features/tolltip/tooltipDomHelper.d.ts +1 -1
  59. package/lib/engine/features/tolltip/tooltipDomHelper.js +41 -33
  60. package/lib/engine/features/tolltip/tooltipHelper.js +15 -11
  61. package/lib/engine/features/valueLabels/valueLabels.d.ts +3 -2
  62. package/lib/engine/features/valueLabels/valueLabels.js +33 -44
  63. package/lib/engine/features/valueLabels/valueLabelsHelper.js +6 -6
  64. package/lib/engine/features/valueLabelsCollision/valueLabelsCollision.js +9 -10
  65. package/lib/engine/features/valueLabelsCollision/valueLabelsCollisionHelper.js +4 -4
  66. package/lib/engine/filterManager/filterEventManager.js +18 -15
  67. package/lib/engine/helpers/domHelper.d.ts +3 -4
  68. package/lib/engine/helpers/domHelper.js +9 -13
  69. package/lib/engine/helpers/fontResizer/fontResizer.js +2 -2
  70. package/lib/engine/helpers/helper.js +14 -9
  71. package/lib/engine/helpers/namesHelper.js +2 -2
  72. package/lib/engine/polarNotation/donut/DonutHelper.js +6 -8
  73. package/lib/engine/polarNotation/donut/donut.d.ts +3 -3
  74. package/lib/engine/polarNotation/donut/donut.js +47 -58
  75. package/lib/engine/polarNotation/extenders/polarRecordOverflowAlert.js +11 -11
  76. package/lib/engine/polarNotation/polarManager.js +3 -5
  77. package/lib/engine/transitionManager.js +4 -7
  78. package/lib/engine/twoDimensionalNotation/area/area.d.ts +1 -1
  79. package/lib/engine/twoDimensionalNotation/area/area.js +77 -62
  80. package/lib/engine/twoDimensionalNotation/area/areaGenerator.js +4 -10
  81. package/lib/engine/twoDimensionalNotation/area/areaHelper.d.ts +3 -3
  82. package/lib/engine/twoDimensionalNotation/area/areaHelper.js +21 -13
  83. package/lib/engine/twoDimensionalNotation/bar/bar.d.ts +2 -2
  84. package/lib/engine/twoDimensionalNotation/bar/bar.js +70 -67
  85. package/lib/engine/twoDimensionalNotation/bar/barHelper.js +40 -35
  86. package/lib/engine/twoDimensionalNotation/dot/dotChart.js +60 -42
  87. package/lib/engine/twoDimensionalNotation/extenders/twoDimRecordOverflowAlert.js +7 -7
  88. package/lib/engine/twoDimensionalNotation/line/line.d.ts +4 -4
  89. package/lib/engine/twoDimensionalNotation/line/line.js +45 -28
  90. package/lib/engine/twoDimensionalNotation/line/lineBuilder.js +18 -16
  91. package/lib/engine/twoDimensionalNotation/line/lineGenerator.js +2 -4
  92. package/lib/engine/twoDimensionalNotation/line/lineHelper.d.ts +6 -6
  93. package/lib/engine/twoDimensionalNotation/line/lineHelper.js +26 -17
  94. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware.js +1 -1
  95. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.js +25 -21
  96. package/lib/engine/valueFormatter.d.ts +1 -1
  97. package/lib/main.d.ts +1 -0
  98. package/lib/main.js +8 -7
  99. package/lib/model/chartStyleModel/chartStyleModel.js +5 -3
  100. package/lib/model/chartStyleModel/colorRange.js +1 -3
  101. package/lib/model/chartStyleModel/twoDimensionalChartStyleModel.js +9 -7
  102. package/lib/model/dataManagerModel/dataManagerModel.js +28 -16
  103. package/lib/model/featuresModel/axisModel.d.ts +6 -3
  104. package/lib/model/featuresModel/axisModel.js +59 -32
  105. package/lib/model/featuresModel/axisModelService.js +2 -2
  106. package/lib/model/featuresModel/legendModel/legendCanvasModel.d.ts +1 -1
  107. package/lib/model/featuresModel/legendModel/legendCanvasModel.js +12 -12
  108. package/lib/model/featuresModel/legendModel/legendModel.js +2 -2
  109. package/lib/model/featuresModel/legendModel/polarMarginCalculator.js +1 -1
  110. package/lib/model/featuresModel/legendModel/twoDimLegendModel.js +4 -5
  111. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.d.ts +4 -5
  112. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.js +3 -5
  113. package/lib/model/featuresModel/scaleModel/scaleDomainService.js +10 -12
  114. package/lib/model/featuresModel/scaleModel/scaleModel.d.ts +8 -4
  115. package/lib/model/featuresModel/scaleModel/scaleModel.js +20 -12
  116. package/lib/model/featuresModel/scaleModel/scaleModelServices.js +5 -5
  117. package/lib/model/featuresModel/tooltipModel.js +1 -1
  118. package/lib/model/featuresModel/valueLabelsModel/valueLabelsModel.js +5 -5
  119. package/lib/model/helpers/modelHelper.js +6 -4
  120. package/lib/model/helpers/twoDimensionalModelHelper.d.ts +1 -1
  121. package/lib/model/helpers/twoDimensionalModelHelper.js +23 -23
  122. package/lib/model/helpers/unitsReader.js +1 -1
  123. package/lib/model/margin/marginModel.js +1 -1
  124. package/lib/model/margin/twoDim/twoDimMarginModel.d.ts +1 -0
  125. package/lib/model/margin/twoDim/twoDimMarginModel.js +38 -28
  126. package/lib/model/model.d.ts +17 -4
  127. package/lib/model/modelBuilder.d.ts +4 -4
  128. package/lib/model/modelBuilder.js +19 -18
  129. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.js +1 -1
  130. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.d.ts +5 -0
  131. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.js +8 -0
  132. package/lib/model/modelInstance/configReader.js +11 -10
  133. package/lib/model/modelInstance/dataModel/dataRepository.js +5 -5
  134. package/lib/model/modelInstance/modelInstance.d.ts +4 -2
  135. package/lib/model/modelInstance/modelInstance.js +5 -3
  136. package/lib/model/modelInstance/titleConfigReader.js +5 -5
  137. package/lib/model/notations/polar/donut/donutModel.js +1 -1
  138. package/lib/model/notations/polar/polarModel.js +6 -6
  139. package/lib/model/notations/twoDimensional/styles.d.ts +2 -2
  140. package/lib/model/notations/twoDimensional/styles.js +8 -8
  141. package/lib/model/notations/twoDimensionalModel.d.ts +0 -1
  142. package/lib/model/notations/twoDimensionalModel.js +32 -29
  143. package/package.json +59 -59
  144. package/tsconfig.production.json +14 -24
  145. package/README.md +0 -2
@@ -1,9 +1,9 @@
1
- import { select } from 'd3-selection';
1
+ import { select } from "d3-selection";
2
2
  import { MarkDot } from "../../features/markDots/markDot";
3
- import { getStackedData, LineGeneratorFactory, onLineChartInit } from './lineHelper';
4
- import { DomHelper } from '../../helpers/domHelper';
5
- import { Helper } from '../../helpers/helper';
6
- import { Pipeline } from '../../helpers/pipeline/Pipeline';
3
+ import { getStackedData, LineGeneratorFactory, onLineChartInit } from "./lineHelper";
4
+ import { DomHelper } from "../../helpers/domHelper";
5
+ import { Helper } from "../../helpers/helper";
6
+ import { Pipeline } from "../../helpers/pipeline/Pipeline";
7
7
  import { LineBuilder } from "../../../engine/twoDimensionalNotation/line/lineBuilder";
8
8
  export class Line {
9
9
  constructor(options) {
@@ -33,26 +33,35 @@ export class Line {
33
33
  }
34
34
  updateColors(block, chart) {
35
35
  chart.data.valueFields.forEach((_vf, valueIndex) => {
36
- const path = block.svg.getChartGroup(chart.index)
36
+ const path = block.svg
37
+ .getChartGroup(chart.index)
37
38
  .select(`.${this.lineChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
38
- DomHelper.setChartStyle(path, chart.style, valueIndex, 'stroke');
39
+ DomHelper.setChartStyle(path, chart.style, valueIndex, "stroke");
39
40
  MarkDot.updateColors(block, chart, valueIndex);
40
41
  });
41
42
  }
42
43
  renderGrouped(block, scales, data, keyField, margin, keyAxisOrient, chart) {
43
- const generatorFactory = new LineGeneratorFactory({ keyAxisOrient, scales, keyFieldName: keyField.name, margin, curve: this.options.staticSettings.shape.curve.type, shouldRender: chart.lineLikeViewOptions.renderForKey });
44
+ const generatorFactory = new LineGeneratorFactory({
45
+ keyAxisOrient,
46
+ scales,
47
+ keyFieldName: keyField.name,
48
+ margin,
49
+ curve: this.options.staticSettings.shape.curve.type,
50
+ shouldRender: chart.lineLikeViewOptions.renderForKey
51
+ });
44
52
  chart.data.valueFields.forEach((valueField, valueIndex) => {
45
53
  const lineGenerator = generatorFactory.getLineGenerator(valueField.name);
46
- let path = block.svg.getChartGroup(chart.index)
47
- .append('path')
48
- .attr('d', lineGenerator(data))
49
- .attr('class', this.lineChartClass)
50
- .style('fill', 'none')
51
- .style('clip-path', `url(#${block.svg.getClipPathId()})`)
52
- .style('pointer-events', 'none');
54
+ let path = block.svg
55
+ .getChartGroup(chart.index)
56
+ .append("path")
57
+ .attr("d", lineGenerator(data))
58
+ .attr("class", this.lineChartClass)
59
+ .style("fill", "none")
60
+ .style("clip-path", `url(#${block.svg.getClipPathId()})`)
61
+ .style("pointer-events", "none");
53
62
  path = this.creatingPipeline.execute(path, chart);
54
63
  DomHelper.setCssClasses(path, Helper.getCssClassesWithElementIndex(chart.cssClasses, valueIndex));
55
- DomHelper.setChartStyle(path, chart.style, valueIndex, 'stroke');
64
+ DomHelper.setChartStyle(path, chart.style, valueIndex, "stroke");
56
65
  MarkDot.render(block, data, keyAxisOrient, scales, margin, keyField.name, valueIndex, valueField.name, chart);
57
66
  });
58
67
  }
@@ -70,7 +79,7 @@ export class Line {
70
79
  DomHelper.setCssClasses(select(this), Helper.getCssClassesWithElementIndex(chart.cssClasses, i));
71
80
  });
72
81
  stackedData.forEach((dataset, stackIndex) => {
73
- MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, stackIndex, '1', chart);
82
+ MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, stackIndex, "1", chart);
74
83
  });
75
84
  }
76
85
  updateGrouped(block, scales, newData, keyField, margin, keyAxisOrient, chart) {
@@ -78,7 +87,8 @@ export class Line {
78
87
  const generatorFactory = this.createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField);
79
88
  chart.data.valueFields.forEach((valueField, valueFieldIndex) => {
80
89
  const lineGenerator = generatorFactory.getLineGenerator(valueField.name);
81
- const lineObject = block.svg.getChartGroup(chart.index)
90
+ const lineObject = block.svg
91
+ .getChartGroup(chart.index)
82
92
  .select(`.${this.lineChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueFieldIndex}`);
83
93
  const prom = Line.updateGroupedPath(block, lineObject, lineGenerator, newData);
84
94
  promises.push(prom);
@@ -96,30 +106,37 @@ export class Line {
96
106
  let lines = lineBuilder.getAllLinesWithNewData(stackedData, Line.lineChartClass);
97
107
  const prom = lineBuilder.updateSegmentedPath(lines);
98
108
  lines.each((dataset, index) => {
99
- MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, '1', chart);
109
+ MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, "1", chart);
100
110
  });
101
111
  return [prom];
102
112
  }
103
113
  static updateGroupedPath(block, lineObject, lineGenerator, newData) {
104
- return new Promise(resolve => {
114
+ return new Promise((resolve) => {
105
115
  if (lineObject.size() === 0) {
106
- resolve('');
116
+ resolve("");
107
117
  return;
108
118
  }
109
119
  let lineHandler = lineObject;
110
120
  if (block.transitionManager.durations.chartUpdate > 0)
111
- lineHandler = lineHandler.interrupt()
121
+ lineHandler = lineHandler
122
+ .interrupt()
112
123
  .transition()
113
124
  .duration(block.transitionManager.durations.chartUpdate)
114
- .on('end', () => resolve(''));
115
- lineHandler
116
- .attr('d', lineGenerator(newData));
125
+ .on("end", () => resolve(""));
126
+ lineHandler.attr("d", lineGenerator(newData));
117
127
  if (block.transitionManager.durations.chartUpdate <= 0)
118
- resolve('');
128
+ resolve("");
119
129
  });
120
130
  }
121
131
  createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
122
- return new LineGeneratorFactory({ keyAxisOrient, scales, keyFieldName: keyField.name, margin, shouldRender: chart.lineLikeViewOptions.renderForKey, curve: this.options.staticSettings.shape.curve.type });
132
+ return new LineGeneratorFactory({
133
+ keyAxisOrient,
134
+ scales,
135
+ keyFieldName: keyField.name,
136
+ margin,
137
+ shouldRender: chart.lineLikeViewOptions.renderForKey,
138
+ curve: this.options.staticSettings.shape.curve.type
139
+ });
123
140
  }
124
141
  }
125
- Line.lineChartClass = 'line';
142
+ Line.lineChartClass = "line";
@@ -7,42 +7,44 @@ export class LineBuilder {
7
7
  }
8
8
  renderSegmented(stakedData, lineClass) {
9
9
  const block = this.options.elementAccessors.getBlock();
10
- return block.svg.getChartGroup(this.chart.index)
10
+ return block.svg
11
+ .getChartGroup(this.chart.index)
11
12
  .selectAll(`.${lineClass}${Helper.getCssClassesLine(this.chart.cssClasses)}`)
12
13
  .data(stakedData)
13
14
  .enter()
14
- .append('path')
15
- .attr('d', d => this.lineGenerator(d))
16
- .attr('class', lineClass)
17
- .style('fill', 'none')
18
- .style('clip-path', `url(#${block.svg.getClipPathId()})`)
19
- .style('pointer-events', 'none');
15
+ .append("path")
16
+ .attr("d", (d) => this.lineGenerator(d))
17
+ .attr("class", lineClass)
18
+ .style("fill", "none")
19
+ .style("clip-path", `url(#${block.svg.getClipPathId()})`)
20
+ .style("pointer-events", "none");
20
21
  }
21
22
  setSegmentColor(segments, colorPalette) {
22
- segments.style('stroke', (d, i) => colorPalette[i % colorPalette.length]);
23
+ segments.style("stroke", (d, i) => colorPalette[i % colorPalette.length]);
23
24
  }
24
25
  updateSegmentedPath(linesObjects) {
25
26
  const block = this.options.elementAccessors.getBlock();
26
- return new Promise(resolve => {
27
+ return new Promise((resolve) => {
27
28
  if (linesObjects.size() === 0) {
28
- resolve('');
29
+ resolve("");
29
30
  return;
30
31
  }
31
32
  let linesHandler = linesObjects;
32
33
  if (block.transitionManager.durations.chartUpdate > 0)
33
- linesHandler = linesHandler.interrupt()
34
+ linesHandler = linesHandler
35
+ .interrupt()
34
36
  .transition()
35
37
  .duration(block.transitionManager.durations.chartUpdate)
36
- .on('end', () => resolve(''));
37
- linesHandler
38
- .attr('d', d => this.lineGenerator(d));
38
+ .on("end", () => resolve(""));
39
+ linesHandler.attr("d", (d) => this.lineGenerator(d));
39
40
  if (block.transitionManager.durations.chartUpdate <= 0)
40
- resolve('');
41
+ resolve("");
41
42
  });
42
43
  }
43
44
  getAllLinesWithNewData(stakedData, lineClass) {
44
45
  const block = this.options.elementAccessors.getBlock();
45
- return block.svg.getChartGroup(this.chart.index)
46
+ return block.svg
47
+ .getChartGroup(this.chart.index)
46
48
  .selectAll(`path.${lineClass}${Helper.getCssClassesLine(this.chart.cssClasses)}`)
47
49
  .data(stakedData);
48
50
  }
@@ -4,10 +4,8 @@ export class LineGenerator {
4
4
  this.options = options;
5
5
  }
6
6
  get(xValue, yValue) {
7
- const generator = line()
8
- .x(xValue)
9
- .y(yValue);
10
- this.options.middlewares.forEach(middleware => middleware.handle(generator));
7
+ const generator = line().x(xValue).y(yValue);
8
+ this.options.middlewares.forEach((middleware) => middleware.handle(generator));
11
9
  return generator;
12
10
  }
13
11
  }
@@ -1,10 +1,10 @@
1
- import { Line as ILine } from 'd3-shape';
2
- import { MdtChartsDataRow } from '../../../config/config';
1
+ import { Line as ILine } from "d3-shape";
2
+ import { MdtChartsDataRow } from "../../../config/config";
3
3
  import { TwoDimensionalChartModel } from "../../../model/model";
4
- import { Pipeline } from '../../helpers/pipeline/Pipeline';
5
- import { BaseType, Selection } from 'd3-selection';
6
- import { Segment } from '../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware';
7
- import { LineLikeGeneratorFactoryOptions } from '../lineLike/generatorFactory/lineLikeGeneratorFactory';
4
+ import { Pipeline } from "../../helpers/pipeline/Pipeline";
5
+ import { BaseType, Selection } from "d3-selection";
6
+ import { Segment } from "../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware";
7
+ import { LineLikeGeneratorFactoryOptions } from "../lineLike/generatorFactory/lineLikeGeneratorFactory";
8
8
  export declare class LineGeneratorFactory {
9
9
  private options;
10
10
  constructor(options: LineLikeGeneratorFactoryOptions);
@@ -1,8 +1,8 @@
1
- import { stack } from 'd3-shape';
1
+ import { stack } from "d3-shape";
2
2
  import { Scale } from "../../features/scale/scale";
3
- import { LineGenerator } from './lineGenerator';
4
- import { LineLikeGeneratorCurveMiddleware } from '../lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware';
5
- import { LineLikeGeneratorDefinedMiddleware } from '../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware';
3
+ import { LineGenerator } from "./lineGenerator";
4
+ import { LineLikeGeneratorCurveMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware";
5
+ import { LineLikeGeneratorDefinedMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware";
6
6
  export class LineGeneratorFactory {
7
7
  constructor(options) {
8
8
  this.options = options;
@@ -12,14 +12,18 @@ export class LineGeneratorFactory {
12
12
  const generator = new LineGenerator({
13
13
  middlewares: [
14
14
  new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
15
- new LineLikeGeneratorDefinedMiddleware({ definedFn: shouldRender, valueFieldNameGetter: () => valueFieldName, dataRowGetter: (d) => d })
15
+ new LineLikeGeneratorDefinedMiddleware({
16
+ definedFn: shouldRender,
17
+ valueFieldNameGetter: () => valueFieldName,
18
+ dataRowGetter: (d) => d
19
+ })
16
20
  ]
17
21
  });
18
- if (keyAxisOrient === 'bottom' || keyAxisOrient === 'top') {
19
- return generator.get(d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, d => scales.value(d[valueFieldName]) + margin.top);
22
+ if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
23
+ return generator.get((d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, (d) => scales.value(d[valueFieldName]) + margin.top);
20
24
  }
21
- if (keyAxisOrient === 'left' || keyAxisOrient === 'right') {
22
- return generator.get(d => scales.value(d[valueFieldName]) + margin.left, d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
25
+ if (keyAxisOrient === "left" || keyAxisOrient === "right") {
26
+ return generator.get((d) => scales.value(d[valueFieldName]) + margin.left, (d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
23
27
  }
24
28
  }
25
29
  getSegmentedLineGenerator() {
@@ -27,14 +31,18 @@ export class LineGeneratorFactory {
27
31
  const generator = new LineGenerator({
28
32
  middlewares: [
29
33
  new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
30
- new LineLikeGeneratorDefinedMiddleware({ definedFn: shouldRender, valueFieldNameGetter: (d) => d.fieldName, dataRowGetter: (d) => d.data })
34
+ new LineLikeGeneratorDefinedMiddleware({
35
+ definedFn: shouldRender,
36
+ valueFieldNameGetter: (d) => d.fieldName,
37
+ dataRowGetter: (d) => d.data
38
+ })
31
39
  ]
32
40
  });
33
- if (keyAxisOrient === 'bottom' || keyAxisOrient === 'top') {
34
- return generator.get(d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, d => scales.value(d[1]) + margin.top);
41
+ if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
42
+ return generator.get((d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, (d) => scales.value(d[1]) + margin.top);
35
43
  }
36
- if (keyAxisOrient === 'left' || keyAxisOrient === 'right') {
37
- return generator.get(d => scales.value(d[1]) + margin.left, d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
44
+ if (keyAxisOrient === "left" || keyAxisOrient === "right") {
45
+ return generator.get((d) => scales.value(d[1]) + margin.left, (d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
38
46
  }
39
47
  }
40
48
  }
@@ -48,13 +56,14 @@ export function onLineChartInit(creatingPipeline) {
48
56
  creatingPipeline.push(setStrokeWidth);
49
57
  }
50
58
  function setStrokeWidth(path, chart) {
51
- return path.style('stroke-width', chart.lineLikeViewOptions.strokeWidth);
59
+ return path.style("stroke-width", chart.lineLikeViewOptions.strokeWidth);
52
60
  }
53
61
  export function applyLineDash(lineSelection, dashSize, gapSize) {
54
- return lineSelection.style('stroke-dasharray', `${dashSize} ${gapSize}`);
62
+ return lineSelection.style("stroke-dasharray", `${dashSize} ${gapSize}`);
55
63
  }
56
64
  export function getStackedData(data, chart) {
57
- let stackedData = stack().keys(chart.data.valueFields.map(field => field.name))(data)
65
+ let stackedData = stack()
66
+ .keys(chart.data.valueFields.map((field) => field.name))(data)
58
67
  .map((layer, index) => {
59
68
  const fieldName = chart.data.valueFields[index].name;
60
69
  return layer.map((segment) => {
@@ -3,7 +3,7 @@ export class LineLikeGeneratorDefinedMiddleware {
3
3
  this.options = options;
4
4
  }
5
5
  handle(generator) {
6
- generator.defined(d => this.options.definedFn(this.options.dataRowGetter(d), this.options.valueFieldNameGetter(d)));
6
+ generator.defined((d) => this.options.definedFn(this.options.dataRowGetter(d), this.options.valueFieldNameGetter(d)));
7
7
  return generator;
8
8
  }
9
9
  }
@@ -26,10 +26,10 @@ export class TwoDimensionalManager {
26
26
  GridLine.render(engine.block, options.additionalElements.gridLine, options.axis, model.blockCanvas.size, model.chartBlock.margin, scales);
27
27
  this.dotChart = new CanvasDotChart({
28
28
  elementAccessors: {
29
- getBlock: () => engine.block,
29
+ getBlock: () => engine.block
30
30
  },
31
31
  canvas: {
32
- keyAxisOrient: options.axis.key.orient,
32
+ keyAxisOrient: options.axis.key.orient
33
33
  },
34
34
  dataOptions: {
35
35
  keyFieldName: options.data.keyField.name
@@ -50,14 +50,13 @@ export class TwoDimensionalManager {
50
50
  hidedRecordsAmount: model.dataSettings.scope.hidedRecordsAmount,
51
51
  chartOrientation: options.orient
52
52
  });
53
- engine.block.getSvg()
54
- .on('click', (e) => {
53
+ engine.block.getSvg().on("click", (e) => {
55
54
  if (e.target === engine.block.getSvg().node())
56
55
  this.clearSelection(engine.block.filterEventManager, model);
57
56
  });
58
57
  this.canvasValueLabels = new CanvasValueLabels({
59
58
  elementAccessors: {
60
- getBlock: () => engine.block,
59
+ getBlock: () => engine.block
61
60
  },
62
61
  data: {
63
62
  keyFieldName: options.data.keyField.name
@@ -88,8 +87,7 @@ export class TwoDimensionalManager {
88
87
  Axis.update(block, scales, options.scale, options.axis, model.blockCanvas.size, keyDomainEquality);
89
88
  GridLine.update(block, options.additionalElements.gridLine, options.axis, model.blockCanvas.size, model.chartBlock.margin, scales);
90
89
  const promises = this.updateCharts(block, options.charts, scales, data, model.options.data, model.chartBlock.margin, options.axis.key.orient, model.blockCanvas.size, options.chartSettings);
91
- Promise.all(promises)
92
- .then(() => {
90
+ Promise.all(promises).then(() => {
93
91
  block.filterEventManager.event2DUpdate(options);
94
92
  block.filterEventManager.registerEventFor2D(scales.key, model.chartBlock.margin, model.blockCanvas.size, options);
95
93
  Tooltip.render(block, model, data, model.otherComponents.tooltipBlock, scales);
@@ -105,12 +103,12 @@ export class TwoDimensionalManager {
105
103
  var _a;
106
104
  Legend.get().updateColors(block, model.options);
107
105
  (_a = this.linearGradientDef) === null || _a === void 0 ? void 0 : _a.updateColors(block.svg.ensureDefsRendered(), model.options.defs.gradients);
108
- model.options.charts.forEach(chart => {
109
- if (chart.type === 'bar')
106
+ model.options.charts.forEach((chart) => {
107
+ if (chart.type === "bar")
110
108
  Bar.get().updateColors(block, chart);
111
- else if (chart.type === 'line')
109
+ else if (chart.type === "line")
112
110
  Line.get({ staticSettings: model.options.chartSettings.lineLike }).updateColors(block, chart);
113
- else if (chart.type === 'area')
111
+ else if (chart.type === "area")
114
112
  Area.get({ staticSettings: model.options.chartSettings.lineLike }).updateColors(block, chart);
115
113
  });
116
114
  }
@@ -122,14 +120,17 @@ export class TwoDimensionalManager {
122
120
  block.svg.renderBarHatchPattern();
123
121
  block.svg.renderChartsBlock();
124
122
  charts.forEach((chart) => {
125
- const chartScales = { key: scales.key, value: chart.data.valueGroup === "secondary" ? scales.valueSecondary : scales.value };
126
- if (chart.type === 'bar')
123
+ const chartScales = {
124
+ key: scales.key,
125
+ value: chart.data.valueGroup === "secondary" ? scales.valueSecondary : scales.value
126
+ };
127
+ if (chart.type === "bar")
127
128
  Bar.get().render(block, chartScales, data[dataOptions.dataSource], dataOptions.keyField, margin, keyAxisOrient, chart, blockSize, chartSettings.bar, BarHelper.getBarsInGroupAmount(charts));
128
- else if (chart.type === 'line')
129
+ else if (chart.type === "line")
129
130
  Line.get({ staticSettings: chartSettings.lineLike }).render(block, chartScales, data[dataOptions.dataSource], dataOptions.keyField, margin, keyAxisOrient, chart);
130
- else if (chart.type === 'area')
131
+ else if (chart.type === "area")
131
132
  Area.get({ staticSettings: chartSettings.lineLike }).render(block, chartScales, data[dataOptions.dataSource], dataOptions.keyField, margin, keyAxisOrient, chart);
132
- else if (chart.type === 'dot')
133
+ else if (chart.type === "dot")
133
134
  this.dotChart.render(chartScales, chart, data[dataOptions.dataSource], margin);
134
135
  });
135
136
  EmbeddedLabels.raiseGroups(block);
@@ -138,18 +139,21 @@ export class TwoDimensionalManager {
138
139
  block.svg.updateChartClipPath(margin, blockSize);
139
140
  let promises = [];
140
141
  charts.forEach((chart) => {
141
- const chartScales = { key: scales.key, value: chart.data.valueGroup === "secondary" ? scales.valueSecondary : scales.value };
142
+ const chartScales = {
143
+ key: scales.key,
144
+ value: chart.data.valueGroup === "secondary" ? scales.valueSecondary : scales.value
145
+ };
142
146
  let proms;
143
- if (chart.type === 'bar') {
147
+ if (chart.type === "bar") {
144
148
  proms = Bar.get().update(block, data[dataOptions.dataSource], chartScales, margin, keyAxisOrient, chart, blockSize, BarHelper.getBarsInGroupAmount(charts), dataOptions.keyField, chartSettings.bar);
145
149
  }
146
- else if (chart.type === 'line') {
150
+ else if (chart.type === "line") {
147
151
  proms = Line.get({ staticSettings: chartSettings.lineLike }).update(block, chartScales, data[dataOptions.dataSource], dataOptions.keyField, margin, keyAxisOrient, chart);
148
152
  }
149
- else if (chart.type === 'area') {
153
+ else if (chart.type === "area") {
150
154
  proms = Area.get({ staticSettings: chartSettings.lineLike }).update(block, chartScales, data[dataOptions.dataSource], dataOptions.keyField, margin, chart, keyAxisOrient);
151
155
  }
152
- else if (chart.type === 'dot') {
156
+ else if (chart.type === "dot") {
153
157
  proms = this.dotChart.update(chartScales, data[dataOptions.dataSource], margin);
154
158
  }
155
159
  promises.push(...proms);
@@ -1,4 +1,4 @@
1
- import { Formatter } from '../designer/designerConfig';
1
+ import { Formatter } from "../designer/designerConfig";
2
2
  export declare class ValueFormatter {
3
3
  private static format;
4
4
  static formatField(fieldFormat: string, value: any): string;
package/lib/main.d.ts CHANGED
@@ -39,6 +39,7 @@ export declare class Chart implements IChart {
39
39
  private data;
40
40
  private parentElement;
41
41
  private isResizable;
42
+ private readonly id;
42
43
  private engine;
43
44
  private resizeHandler;
44
45
  /**
package/lib/main.js CHANGED
@@ -13,12 +13,13 @@ export class Chart {
13
13
  constructor(config, designerConfig, data, isResizable = false, filterCallback = null, selectedIds = []) {
14
14
  this.resizeHandler = this.resizeListener.bind(this);
15
15
  Chart.chartCounter++;
16
+ this.id = Chart.chartCounter;
16
17
  this.config = config;
17
18
  this.designerConfig = designerConfig;
18
19
  this.data = data;
19
20
  this.isResizable = isResizable;
20
- this.model = assembleModel(this.config, this.data, this.designerConfig);
21
- this.engine = new Engine(Chart.chartCounter, filterCallback, selectedIds);
21
+ this.model = assembleModel(this.config, this.data, this.designerConfig, this.id);
22
+ this.engine = new Engine(this.id, filterCallback, selectedIds);
22
23
  }
23
24
  /**
24
25
  * Рендер графика
@@ -43,7 +44,7 @@ export class Chart {
43
44
  * @param data Новые данные
44
45
  */
45
46
  updateData(data) {
46
- this.model = assembleModel(this.config, data, this.designerConfig);
47
+ this.model = assembleModel(this.config, data, this.designerConfig, this.id);
47
48
  this.data = data;
48
49
  this.engine.updateData(this.model, getPreparedData(this.model, this.data, this.config));
49
50
  }
@@ -58,7 +59,7 @@ export class Chart {
58
59
  this.config.canvas.size.height = newSize.height;
59
60
  if (newSize.width)
60
61
  this.config.canvas.size.width = newSize.width;
61
- this.model = assembleModel(this.config, this.data, this.designerConfig);
62
+ this.model = assembleModel(this.config, this.data, this.designerConfig, this.id);
62
63
  this.engine.updateFullBlock(this.model, getPreparedData(this.model, this.data, this.config));
63
64
  }
64
65
  /**
@@ -67,17 +68,17 @@ export class Chart {
67
68
  */
68
69
  updateColors(newColors) {
69
70
  this.designerConfig.chartStyle.baseColors = [...newColors];
70
- this.model = assembleModel(this.config, this.data, this.designerConfig);
71
+ this.model = assembleModel(this.config, this.data, this.designerConfig, this.id);
71
72
  this.engine.updateColors(this.model);
72
73
  }
73
74
  clearSelection() {
74
75
  this.engine.clearSelection(this.model);
75
76
  }
76
77
  registerResizeEvent() {
77
- window.addEventListener('resize', this.resizeHandler);
78
+ window.addEventListener("resize", this.resizeHandler);
78
79
  }
79
80
  removeResizeEvent() {
80
- window.removeEventListener('resize', this.resizeHandler);
81
+ window.removeEventListener("resize", this.resizeHandler);
81
82
  }
82
83
  resizeListener() {
83
84
  this.updateSize({
@@ -12,13 +12,15 @@ export class ChartStyleModelService {
12
12
  };
13
13
  }
14
14
  static getColorSet(baseColors, elementsAmount) {
15
- return chroma.scale(baseColors)
16
- .mode('rgb')
15
+ return chroma
16
+ .scale(baseColors)
17
+ .mode("rgb")
17
18
  .domain([0, 0.55, 0.75, 1])
18
19
  .colors(elementsAmount <= 1 ? 2 : elementsAmount);
19
20
  }
20
21
  static checkAndGet(baseColors) {
21
- if (baseColors.length === 0 || baseColors.filter(color => color === 'rgba(0, 0, 0, 0)' || !color).length > 0) {
22
+ if (baseColors.length === 0 ||
23
+ baseColors.filter((color) => color === "rgba(0, 0, 0, 0)" || !color).length > 0) {
22
24
  return this.standardColors;
23
25
  }
24
26
  return baseColors;
@@ -22,9 +22,7 @@ export function sortColorRange(colorRange) {
22
22
  range.sort((a, b) => {
23
23
  if (a.value == null)
24
24
  return -1;
25
- return a.value < b.value
26
- ? -1
27
- : (a.value == b.value ? 0 : 1);
25
+ return a.value < b.value ? -1 : a.value == b.value ? 0 : 1;
28
26
  });
29
27
  return range;
30
28
  }
@@ -10,16 +10,16 @@ export class TwoDimensionalChartStyleModel {
10
10
  getChartStyle(chart, chartIndex) {
11
11
  var _a, _b;
12
12
  const fieldsAmounts = this.getChartsValueFieldsAmounts();
13
- const opacity = chart.type === 'area' && ((_b = (_a = chart.areaStyles) === null || _a === void 0 ? void 0 : _a.gradient) === null || _b === void 0 ? void 0 : _b.on)
13
+ const opacity = chart.type === "area" && ((_b = (_a = chart.areaStyles) === null || _a === void 0 ? void 0 : _a.gradient) === null || _b === void 0 ? void 0 : _b.on)
14
14
  ? 1
15
15
  : this.service.getChartOpacity(this.charts.length, chart.type, fieldsAmounts[chartIndex], chart.isSegmented);
16
16
  return {
17
17
  elementColors: this.service.getChartColors(chart, this.chartStyleConfig, fieldsAmounts, chartIndex),
18
- opacity,
18
+ opacity
19
19
  };
20
20
  }
21
21
  getChartsValueFieldsAmounts() {
22
- return this.charts.map(chart => chart.data.valueFields.length);
22
+ return this.charts.map((chart) => chart.data.valueFields.length);
23
23
  }
24
24
  }
25
25
  export class TwoDimensionalChartStyleService {
@@ -32,7 +32,9 @@ export class TwoDimensionalChartStyleService {
32
32
  return generatedColors;
33
33
  }
34
34
  getChartOpacity(chartsLength, chartType, chartsValueFieldAmount, isChartSegmented) {
35
- if (chartType === 'area' && this.isMoreThanOneValueFieldOnCanvas(chartsLength, chartsValueFieldAmount) && !isChartSegmented)
35
+ if (chartType === "area" &&
36
+ this.isMoreThanOneValueFieldOnCanvas(chartsLength, chartsValueFieldAmount) &&
37
+ !isChartSegmented)
36
38
  return 0.5; // combined area with other charts has 0.5 opacity
37
39
  return 1;
38
40
  }
@@ -42,17 +44,17 @@ export class TwoDimensionalChartStyleService {
42
44
  const palette = ChartStyleModelService.getColorSet(baseColors, ModelHelper.getSum(chartsFieldsAmounts));
43
45
  const elementsAmount = chartsFieldsAmounts[chartIndex];
44
46
  const selectedColors = palette.slice(startIndex, startIndex + elementsAmount);
45
- if (chartType !== 'line')
47
+ if (chartType !== "line")
46
48
  return selectedColors;
47
49
  this.makeColorsBrighter(selectedColors);
48
50
  return selectedColors;
49
51
  }
50
52
  isMoreThanOneValueFieldOnCanvas(chartsLength, chartsValueFieldAmount) {
51
- return (chartsLength > 1 || chartsValueFieldAmount > 1);
53
+ return chartsLength > 1 || chartsValueFieldAmount > 1;
52
54
  }
53
55
  makeColorsBrighter(initialColors) {
54
56
  for (let i = 0; i < initialColors.length; i++) {
55
- initialColors[i] = chroma.mix(initialColors[i], 'white', 0.2).saturate(3).hex();
57
+ initialColors[i] = chroma.mix(initialColors[i], "white", 0.2).saturate(3).hex();
56
58
  }
57
59
  }
58
60
  getStartIndex(chartIndex, chartsFieldsAmounts) {