mdt-charts 1.27.1 → 1.27.2

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 (144) 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.js +24 -37
  62. package/lib/engine/features/valueLabels/valueLabelsHelper.js +6 -6
  63. package/lib/engine/features/valueLabelsCollision/valueLabelsCollision.js +9 -10
  64. package/lib/engine/features/valueLabelsCollision/valueLabelsCollisionHelper.js +4 -4
  65. package/lib/engine/filterManager/filterEventManager.js +18 -15
  66. package/lib/engine/helpers/domHelper.d.ts +3 -4
  67. package/lib/engine/helpers/domHelper.js +9 -13
  68. package/lib/engine/helpers/fontResizer/fontResizer.js +2 -2
  69. package/lib/engine/helpers/helper.js +14 -9
  70. package/lib/engine/helpers/namesHelper.js +2 -2
  71. package/lib/engine/polarNotation/donut/DonutHelper.js +6 -8
  72. package/lib/engine/polarNotation/donut/donut.d.ts +3 -3
  73. package/lib/engine/polarNotation/donut/donut.js +47 -58
  74. package/lib/engine/polarNotation/extenders/polarRecordOverflowAlert.js +11 -11
  75. package/lib/engine/polarNotation/polarManager.js +3 -5
  76. package/lib/engine/transitionManager.js +4 -7
  77. package/lib/engine/twoDimensionalNotation/area/area.d.ts +1 -1
  78. package/lib/engine/twoDimensionalNotation/area/area.js +77 -62
  79. package/lib/engine/twoDimensionalNotation/area/areaGenerator.js +4 -10
  80. package/lib/engine/twoDimensionalNotation/area/areaHelper.d.ts +3 -3
  81. package/lib/engine/twoDimensionalNotation/area/areaHelper.js +21 -13
  82. package/lib/engine/twoDimensionalNotation/bar/bar.d.ts +2 -2
  83. package/lib/engine/twoDimensionalNotation/bar/bar.js +70 -67
  84. package/lib/engine/twoDimensionalNotation/bar/barHelper.js +40 -35
  85. package/lib/engine/twoDimensionalNotation/dot/dotChart.js +60 -42
  86. package/lib/engine/twoDimensionalNotation/extenders/twoDimRecordOverflowAlert.js +7 -7
  87. package/lib/engine/twoDimensionalNotation/line/line.d.ts +4 -4
  88. package/lib/engine/twoDimensionalNotation/line/line.js +45 -28
  89. package/lib/engine/twoDimensionalNotation/line/lineBuilder.js +18 -16
  90. package/lib/engine/twoDimensionalNotation/line/lineGenerator.js +2 -4
  91. package/lib/engine/twoDimensionalNotation/line/lineHelper.d.ts +6 -6
  92. package/lib/engine/twoDimensionalNotation/line/lineHelper.js +26 -17
  93. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware.js +1 -1
  94. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.js +25 -21
  95. package/lib/engine/valueFormatter.d.ts +1 -1
  96. package/lib/main.d.ts +1 -0
  97. package/lib/main.js +8 -7
  98. package/lib/model/chartStyleModel/chartStyleModel.js +5 -3
  99. package/lib/model/chartStyleModel/colorRange.js +1 -3
  100. package/lib/model/chartStyleModel/twoDimensionalChartStyleModel.js +9 -7
  101. package/lib/model/dataManagerModel/dataManagerModel.js +28 -16
  102. package/lib/model/featuresModel/axisModel.d.ts +6 -3
  103. package/lib/model/featuresModel/axisModel.js +59 -32
  104. package/lib/model/featuresModel/axisModelService.js +2 -2
  105. package/lib/model/featuresModel/legendModel/legendCanvasModel.d.ts +1 -1
  106. package/lib/model/featuresModel/legendModel/legendCanvasModel.js +12 -12
  107. package/lib/model/featuresModel/legendModel/legendModel.js +2 -2
  108. package/lib/model/featuresModel/legendModel/polarMarginCalculator.js +1 -1
  109. package/lib/model/featuresModel/legendModel/twoDimLegendModel.js +4 -5
  110. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.d.ts +4 -5
  111. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.js +3 -5
  112. package/lib/model/featuresModel/scaleModel/scaleDomainService.js +10 -12
  113. package/lib/model/featuresModel/scaleModel/scaleModel.d.ts +8 -4
  114. package/lib/model/featuresModel/scaleModel/scaleModel.js +20 -12
  115. package/lib/model/featuresModel/scaleModel/scaleModelServices.js +5 -5
  116. package/lib/model/featuresModel/tooltipModel.js +1 -1
  117. package/lib/model/featuresModel/valueLabelsModel/valueLabelsModel.js +5 -5
  118. package/lib/model/helpers/modelHelper.js +6 -4
  119. package/lib/model/helpers/twoDimensionalModelHelper.d.ts +1 -1
  120. package/lib/model/helpers/twoDimensionalModelHelper.js +23 -23
  121. package/lib/model/helpers/unitsReader.js +1 -1
  122. package/lib/model/margin/marginModel.js +1 -1
  123. package/lib/model/margin/twoDim/twoDimMarginModel.d.ts +1 -0
  124. package/lib/model/margin/twoDim/twoDimMarginModel.js +38 -28
  125. package/lib/model/model.d.ts +17 -4
  126. package/lib/model/modelBuilder.d.ts +4 -4
  127. package/lib/model/modelBuilder.js +19 -18
  128. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.js +1 -1
  129. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.d.ts +5 -0
  130. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.js +8 -0
  131. package/lib/model/modelInstance/configReader.js +11 -10
  132. package/lib/model/modelInstance/dataModel/dataRepository.js +5 -5
  133. package/lib/model/modelInstance/modelInstance.d.ts +4 -2
  134. package/lib/model/modelInstance/modelInstance.js +5 -3
  135. package/lib/model/modelInstance/titleConfigReader.js +5 -5
  136. package/lib/model/notations/polar/donut/donutModel.js +1 -1
  137. package/lib/model/notations/polar/polarModel.js +6 -6
  138. package/lib/model/notations/twoDimensional/styles.d.ts +2 -2
  139. package/lib/model/notations/twoDimensional/styles.js +8 -8
  140. package/lib/model/notations/twoDimensionalModel.d.ts +0 -1
  141. package/lib/model/notations/twoDimensionalModel.js +32 -29
  142. package/package.json +59 -59
  143. package/tsconfig.production.json +14 -24
  144. package/README.md +0 -2
@@ -1,8 +1,8 @@
1
- import { interpolate } from 'd3-interpolate';
1
+ import { interpolate } from "d3-interpolate";
2
2
  import { Aggregator } from "../../features/aggregator/aggregator";
3
- import { DonutHelper } from './DonutHelper';
4
- import { DomHelper } from '../../helpers/domHelper';
5
- import { ColorReader } from '../../colorReader/colorReader';
3
+ import { DonutHelper } from "./DonutHelper";
4
+ import { DomHelper } from "../../helpers/domHelper";
5
+ import { ColorReader } from "../../colorReader/colorReader";
6
6
  export class Donut {
7
7
  static render(block, data, margin, chart, blockSize, settings) {
8
8
  const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
@@ -12,12 +12,13 @@ export class Donut {
12
12
  const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, settings.padAngle);
13
13
  const translateAttr = DonutHelper.getTranslate(margin, blockSize);
14
14
  Aggregator.render(block, chart.data.valueField, innerRadius, translateAttr, thickness, settings.aggregator);
15
- const donutBlock = block.getSvg()
16
- .append('g')
17
- .attr('class', this.donutBlockClass)
18
- .attr('x', translateAttr.x)
19
- .attr('y', translateAttr.y)
20
- .attr('transform', `translate(${translateAttr.x}, ${translateAttr.y})`);
15
+ const donutBlock = block
16
+ .getSvg()
17
+ .append("g")
18
+ .attr("class", this.donutBlockClass)
19
+ .attr("x", translateAttr.x)
20
+ .attr("y", translateAttr.y)
21
+ .attr("transform", `translate(${translateAttr.x}, ${translateAttr.y})`);
21
22
  this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart);
22
23
  this.renderClonesG(donutBlock);
23
24
  }
@@ -27,34 +28,31 @@ export class Donut {
27
28
  const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
28
29
  const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
29
30
  const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, donutSettings.padAngle);
30
- const oldData = block.getSvg()
31
+ const oldData = block
32
+ .getSvg()
31
33
  .selectAll(`.${this.donutBlockClass}`)
32
- .selectAll('path')
34
+ .selectAll("path")
33
35
  .data()
34
- .map(d => d.data);
36
+ .map((d) => d.data);
35
37
  const dataNewZeroRows = DonutHelper.mergeDataWithZeros(data, oldData, keyField, ColorReader.getChartColorField(chart));
36
38
  const dataExtraZeroRows = DonutHelper.mergeDataWithZeros(oldData, data, keyField, ColorReader.getChartColorField(chart));
37
39
  const donutBlock = block.getSvg().select(`.${this.donutBlockClass}`);
38
40
  this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, dataNewZeroRows, chart);
39
- const path = this.getAllArcGroups(block)
40
- .data(pieGenerator(dataExtraZeroRows))
41
- .select('path');
42
- const items = this.getAllArcGroups(block)
43
- .data(pieGenerator(data));
41
+ const path = this.getAllArcGroups(block).data(pieGenerator(dataExtraZeroRows)).select("path");
42
+ const items = this.getAllArcGroups(block).data(pieGenerator(data));
44
43
  this.setElementsColor(this.getAllArcGroups(block), chart);
45
- return new Promise(resolve => {
44
+ return new Promise((resolve) => {
46
45
  this.raiseClonesG(block);
47
- path
48
- .interrupt()
46
+ path.interrupt()
49
47
  .transition()
50
48
  .duration(block.transitionManager.durations.chartUpdate)
51
- .on('end', () => {
49
+ .on("end", () => {
52
50
  items.exit().remove();
53
- resolve('updated');
51
+ resolve("updated");
54
52
  })
55
- .attrTween('d', function (d) {
53
+ .attrTween("d", function (d) {
56
54
  const interpolateFunc = interpolate(this._currentData, d);
57
- return t => {
55
+ return (t) => {
58
56
  this._currentData = interpolateFunc(t); // _current - старые данные до обновления, задаются во время рендера
59
57
  return arcGenerator(this._currentData);
60
58
  };
@@ -65,61 +63,52 @@ export class Donut {
65
63
  this.setElementsColor(this.getAllArcGroups(block), chart);
66
64
  }
67
65
  static getAllArcGroups(block) {
68
- return block.getSvg()
69
- .selectAll(`.${this.arcItemClass}`);
66
+ return block.getSvg().selectAll(`.${this.arcItemClass}`);
70
67
  }
71
68
  static getAllArcClones(block) {
72
- return block.getSvg()
73
- .selectAll(`.${Donut.arcCloneClass}`);
69
+ return block.getSvg().selectAll(`.${Donut.arcCloneClass}`);
74
70
  }
75
71
  static getAllArcShadows(block) {
76
- return block.getSvg()
77
- .selectAll(`.${this.arcShadowClass}`);
72
+ return block.getSvg().selectAll(`.${this.arcShadowClass}`);
78
73
  }
79
74
  static renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart) {
80
75
  const items = donutBlock
81
76
  .selectAll(`.${this.arcItemClass}`)
82
77
  .data(pieGenerator(data))
83
78
  .enter()
84
- .append('g')
85
- .attr('class', this.arcItemClass);
79
+ .append("g")
80
+ .attr("class", this.arcItemClass);
86
81
  const arcs = items
87
- .append('path')
88
- .attr('d', arcGenerator)
89
- .attr('class', this.arcPathClass)
90
- .each(function (d) { this._currentData = d; }); // _currentData используется для получения текущих данных внутри функции обновления.
82
+ .append("path")
83
+ .attr("d", arcGenerator)
84
+ .attr("class", this.arcPathClass)
85
+ .each(function (d) {
86
+ this._currentData = d;
87
+ }); // _currentData используется для получения текущих данных внутри функции обновления.
91
88
  DomHelper.setCssClasses(arcs, chart.cssClasses);
92
89
  this.setElementsColor(items, chart);
93
90
  }
94
91
  static setElementsColor(arcItems, chart) {
95
- arcItems
96
- .select('path')
97
- .style('fill', ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
92
+ arcItems.select("path").style("fill", ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
98
93
  }
99
94
  /**
100
95
  * Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
101
96
  */
102
97
  static renderClonesG(donutBlock) {
103
- const clonesShadowsG = donutBlock.append('g').attr('class', this.arcShadowsGroupClass).raise();
104
- const clonesG = donutBlock.append('g').attr('class', this.arcClonesGroupClass).raise();
98
+ const clonesShadowsG = donutBlock.append("g").attr("class", this.arcShadowsGroupClass).raise();
99
+ const clonesG = donutBlock.append("g").attr("class", this.arcClonesGroupClass).raise();
105
100
  // ElementHighlighter.setShadowFilter(clonesG);
106
101
  }
107
102
  static raiseClonesG(block) {
108
- block.getSvg()
109
- .select(`.${this.donutBlockClass}`)
110
- .select(`.${this.arcShadowsGroupClass}`)
111
- .raise();
112
- block.getSvg()
113
- .select(`.${this.donutBlockClass}`)
114
- .select(`.${this.arcClonesGroupClass}`)
115
- .raise();
103
+ block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcShadowsGroupClass}`).raise();
104
+ block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcClonesGroupClass}`).raise();
116
105
  }
117
106
  }
118
- Donut.donutBlockClass = 'donut-block';
119
- Donut.arcPathClass = 'arc-path';
120
- Donut.arcItemClass = 'arc';
121
- Donut.arcHighlightedClass = 'arc-highlighted';
122
- Donut.arcClonesGroupClass = 'arc-clones';
123
- Donut.arcShadowsGroupClass = 'arc-shadow-clones';
124
- Donut.arcCloneClass = 'arc-clone';
125
- Donut.arcShadowClass = 'arc-shadow-clone';
107
+ Donut.donutBlockClass = "donut-block";
108
+ Donut.arcPathClass = "arc-path";
109
+ Donut.arcItemClass = "arc";
110
+ Donut.arcHighlightedClass = "arc-highlighted";
111
+ Donut.arcClonesGroupClass = "arc-clones";
112
+ Donut.arcShadowsGroupClass = "arc-shadow-clones";
113
+ Donut.arcCloneClass = "arc-clone";
114
+ Donut.arcShadowClass = "arc-shadow-clone";
@@ -2,10 +2,10 @@ import { RecordOverflowAlertCore } from "../../features/recordOverflowAlert/reco
2
2
  class PolarRecordOverflowAlertClass {
3
3
  constructor() {
4
4
  this.text = {
5
- one: 'категория',
6
- twoToFour: 'категории',
7
- tenToTwenty: 'категорий',
8
- other: 'категорий'
5
+ one: "категория",
6
+ twoToFour: "категории",
7
+ tenToTwenty: "категорий",
8
+ other: "категорий"
9
9
  };
10
10
  }
11
11
  render(block, options) {
@@ -22,17 +22,17 @@ class PolarRecordOverflowAlertClass {
22
22
  };
23
23
  }
24
24
  getPositionAttrs(options) {
25
- const position = options.legendPosition === 'off' ? 'bottom' : options.legendPosition;
26
- if (position === 'right') {
25
+ const position = options.legendPosition === "off" ? "bottom" : options.legendPosition;
26
+ if (position === "right") {
27
27
  return {
28
- bottom: '0',
29
- right: '0'
28
+ bottom: "0",
29
+ right: "0"
30
30
  };
31
31
  }
32
- if (position === 'bottom') {
32
+ if (position === "bottom") {
33
33
  return {
34
- bottom: '0',
35
- left: '0'
34
+ bottom: "0",
35
+ left: "0"
36
36
  };
37
37
  }
38
38
  }
@@ -19,8 +19,7 @@ export class PolarManager {
19
19
  hidedRecordsAmount: model.dataSettings.scope.hidedRecordsAmount,
20
20
  legendPosition: model.options.legend.position
21
21
  });
22
- engine.block.getSvg()
23
- .on('click', (e) => {
22
+ engine.block.getSvg().on("click", (e) => {
24
23
  if (e.target === engine.block.getSvg().node())
25
24
  this.clearSelection(engine.block.filterEventManager, model);
26
25
  });
@@ -35,8 +34,7 @@ export class PolarManager {
35
34
  ElementHighlighter.toggleActivityStyle(Donut.getAllArcGroups(block), true);
36
35
  Tooltip.hide(block);
37
36
  const options = model.options;
38
- Donut.update(block, data[options.data.dataSource], model.chartBlock.margin, options.charts[0], model.blockCanvas.size, options.chartCanvas, options.data.keyField.name)
39
- .then(() => {
37
+ Donut.update(block, data[options.data.dataSource], model.chartBlock.margin, options.charts[0], model.blockCanvas.size, options.chartCanvas, options.data.keyField.name).then(() => {
40
38
  Tooltip.render(block, model, data, model.otherComponents.tooltipBlock);
41
39
  block.filterEventManager.setListenerPolar(model.chartBlock.margin, model.blockCanvas.size, options);
42
40
  });
@@ -56,7 +54,7 @@ export class PolarManager {
56
54
  }
57
55
  renderCharts(block, charts, data, dataSource, margin, blockSize, donutSettings) {
58
56
  charts.forEach((chart) => {
59
- if (chart.type === 'donut')
57
+ if (chart.type === "donut")
60
58
  Donut.render(block, data[dataSource], margin, chart, blockSize, donutSettings);
61
59
  });
62
60
  }
@@ -40,14 +40,11 @@ export class TransitionManager {
40
40
  this.setDurations(transitionsDurations);
41
41
  }
42
42
  interruptTransitions() {
43
- this.transitionableElemClasses.forEach(elemClass => {
44
- const elementsSelection = this.block
45
- .getSvg()
46
- .selectAll(`.${elemClass}`)
47
- .interrupt();
48
- elementsSelection.nodes().forEach(node => interrupt(node));
43
+ this.transitionableElemClasses.forEach((elemClass) => {
44
+ const elementsSelection = this.block.getSvg().selectAll(`.${elemClass}`).interrupt();
45
+ elementsSelection.nodes().forEach((node) => interrupt(node));
49
46
  });
50
- this.block.getSvg().selectAll(`.${Axis.axesClass}`).selectAll('*').interrupt();
47
+ this.block.getSvg().selectAll(`.${Axis.axesClass}`).selectAll("*").interrupt();
51
48
  }
52
49
  setDurations(durations) {
53
50
  if (durations.chartUpdate !== undefined && durations.chartUpdate >= 0)
@@ -1,7 +1,7 @@
1
1
  import { BlockMargin, Field, LineLikeChartSettings, Orient, TwoDimensionalChartModel } from "../../../model/model";
2
2
  import { Scales } from "../../features/scale/scale";
3
3
  import { Block } from "../../block/block";
4
- import { MdtChartsDataRow } from '../../../config/config';
4
+ import { MdtChartsDataRow } from "../../../config/config";
5
5
  interface AreaOptions {
6
6
  staticSettings: LineLikeChartSettings;
7
7
  }
@@ -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 { AreaGeneratorFactory } from './areaHelper';
4
- import { DomHelper } from '../../helpers/domHelper';
5
- import { Helper } from '../../helpers/helper';
6
- import { getStackedDataWithOwn } from '../bar/stackedData/dataStacker';
3
+ import { AreaGeneratorFactory } from "./areaHelper";
4
+ import { DomHelper } from "../../helpers/domHelper";
5
+ import { Helper } from "../../helpers/helper";
6
+ import { getStackedDataWithOwn } from "../bar/stackedData/dataStacker";
7
7
  import { getStackedData, LineGeneratorFactory } from "../../../engine/twoDimensionalNotation/line/lineHelper";
8
8
  import { Line } from "../../../engine/twoDimensionalNotation/line/line";
9
9
  import { LineBuilder } from "../../../engine/twoDimensionalNotation/line/lineBuilder";
@@ -33,13 +33,11 @@ export class Area {
33
33
  updateColors(block, chart) {
34
34
  chart.data.valueFields.forEach((_vf, valueIndex) => {
35
35
  const chartGroup = block.svg.getChartGroup(chart.index);
36
- const areaPath = chartGroup
37
- .select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
36
+ const areaPath = chartGroup.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
38
37
  this.setChartFillStyle(chart, areaPath, valueIndex);
39
38
  if (chart.areaViewOptions.borderLine.on) {
40
- const borderLinePath = chartGroup
41
- .select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
42
- DomHelper.setChartElementColor(borderLinePath, chart.style.elementColors, valueIndex, 'stroke');
39
+ const borderLinePath = chartGroup.select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
40
+ DomHelper.setChartElementColor(borderLinePath, chart.style.elementColors, valueIndex, "stroke");
43
41
  }
44
42
  MarkDot.updateColors(block, chart, valueIndex);
45
43
  });
@@ -84,95 +82,113 @@ export class Area {
84
82
  ];
85
83
  }
86
84
  updateGroupedPath(block, areaObject, areaGenerator, newData) {
87
- return new Promise(resolve => {
85
+ return new Promise((resolve) => {
88
86
  if (areaObject.size() === 0) {
89
- resolve('');
87
+ resolve("");
90
88
  return;
91
89
  }
92
90
  let areaHandler = areaObject;
93
91
  if (block.transitionManager.durations.chartUpdate > 0)
94
- areaHandler = areaHandler.interrupt()
92
+ areaHandler = areaHandler
93
+ .interrupt()
95
94
  .transition()
96
95
  .duration(block.transitionManager.durations.chartUpdate)
97
- .on('end', () => resolve(''));
98
- areaHandler
99
- .attr('d', areaGenerator(newData));
96
+ .on("end", () => resolve(""));
97
+ areaHandler.attr("d", areaGenerator(newData));
100
98
  if (block.transitionManager.durations.chartUpdate <= 0)
101
- resolve('');
99
+ resolve("");
102
100
  });
103
101
  }
104
102
  updateSegmentedPath(block, areasObjects, areaGenerator) {
105
- return new Promise(resolve => {
103
+ return new Promise((resolve) => {
106
104
  if (areasObjects.size() === 0) {
107
- resolve('');
105
+ resolve("");
108
106
  return;
109
107
  }
110
108
  let areaHandler = areasObjects;
111
109
  if (block.transitionManager.durations.chartUpdate > 0)
112
- areaHandler = areaHandler.interrupt()
110
+ areaHandler = areaHandler
111
+ .interrupt()
113
112
  .transition()
114
113
  .duration(block.transitionManager.durations.chartUpdate)
115
- .on('end', () => resolve(''));
116
- areaHandler
117
- .attr('d', d => areaGenerator(d));
114
+ .on("end", () => resolve(""));
115
+ areaHandler.attr("d", (d) => areaGenerator(d));
118
116
  if (block.transitionManager.durations.chartUpdate <= 0)
119
- resolve('');
117
+ resolve("");
120
118
  });
121
119
  }
122
120
  setChartFillStyle(chart, path, valueIndex) {
123
- if (chart.areaViewOptions.fill.type === 'gradient')
124
- DomHelper.setChartGradientStyle(path, chart.index, valueIndex);
121
+ if (chart.areaViewOptions.fill.type === "gradient") {
122
+ path.style("fill", `url(#${chart.areaViewOptions.fill.ids[valueIndex]})`);
123
+ }
125
124
  else
126
- DomHelper.setChartStyle(path, chart.style, valueIndex, 'fill');
125
+ DomHelper.setChartStyle(path, chart.style, valueIndex, "fill");
127
126
  }
128
127
  createAreaGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
129
- return new AreaGeneratorFactory({ keyAxisOrient, scales, keyFieldName: keyField.name, margin, shouldRender: chart.lineLikeViewOptions.renderForKey, curve: this.options.staticSettings.shape.curve.type });
128
+ return new AreaGeneratorFactory({
129
+ keyAxisOrient,
130
+ scales,
131
+ keyFieldName: keyField.name,
132
+ margin,
133
+ shouldRender: chart.lineLikeViewOptions.renderForKey,
134
+ curve: this.options.staticSettings.shape.curve.type
135
+ });
130
136
  }
131
137
  createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
132
- return new LineGeneratorFactory({ keyAxisOrient, scales, keyFieldName: keyField.name, margin, shouldRender: chart.lineLikeViewOptions.renderForKey, curve: this.options.staticSettings.shape.curve.type });
138
+ return new LineGeneratorFactory({
139
+ keyAxisOrient,
140
+ scales,
141
+ keyFieldName: keyField.name,
142
+ margin,
143
+ shouldRender: chart.lineLikeViewOptions.renderForKey,
144
+ curve: this.options.staticSettings.shape.curve.type
145
+ });
133
146
  }
134
147
  renderArea(areaGeneratorFactory, block, chart, data, field, valueIndex) {
135
148
  const area = areaGeneratorFactory.getAreaGenerator(field.name);
136
- const path = block.svg.getChartGroup(chart.index)
137
- .append('path')
138
- .attr('d', area(data))
139
- .attr('class', Area.areaChartClass)
140
- .style('clip-path', `url(#${block.svg.getClipPathId()})`)
141
- .style('pointer-events', 'none');
149
+ const path = block.svg
150
+ .getChartGroup(chart.index)
151
+ .append("path")
152
+ .attr("d", area(data))
153
+ .attr("class", Area.areaChartClass)
154
+ .style("clip-path", `url(#${block.svg.getClipPathId()})`)
155
+ .style("pointer-events", "none");
142
156
  DomHelper.setCssClasses(path, Helper.getCssClassesWithElementIndex(chart.cssClasses, valueIndex));
143
157
  this.setChartFillStyle(chart, path, valueIndex);
144
158
  }
145
159
  renderBorderLine(lineGeneratorFactory, block, chart, data, field, valueIndex) {
146
160
  const lineGenerator = lineGeneratorFactory.getLineGenerator(field.name);
147
- const linePath = block.svg.getChartGroup(chart.index)
148
- .append('path')
149
- .attr('d', lineGenerator(data))
150
- .attr('class', `${Area.areaBorderLineClass}`)
151
- .style('fill', 'none')
152
- .style('clip-path', `url(#${block.svg.getClipPathId()})`)
153
- .style('pointer-events', 'none');
161
+ const linePath = block.svg
162
+ .getChartGroup(chart.index)
163
+ .append("path")
164
+ .attr("d", lineGenerator(data))
165
+ .attr("class", `${Area.areaBorderLineClass}`)
166
+ .style("fill", "none")
167
+ .style("clip-path", `url(#${block.svg.getClipPathId()})`)
168
+ .style("pointer-events", "none");
154
169
  DomHelper.setCssClasses(linePath, Helper.getCssClassesWithElementIndex(chart.cssClasses, valueIndex));
155
- DomHelper.setChartStyle(linePath, chart.areaViewOptions.borderLine.colorStyle, valueIndex, 'stroke');
170
+ DomHelper.setChartStyle(linePath, chart.areaViewOptions.borderLine.colorStyle, valueIndex, "stroke");
156
171
  }
157
172
  renderAreaSegmented(areaGeneratorFactory, block, scales, data, keyField, margin, keyAxisOrient, chart) {
158
- const stackedData = getStackedDataWithOwn(data, chart.data.valueFields.map(field => field.name));
173
+ const stackedData = getStackedDataWithOwn(data, chart.data.valueFields.map((field) => field.name));
159
174
  const areaGenerator = areaGeneratorFactory.getSegmentedAreaGenerator();
160
- const areas = block.svg.getChartGroup(chart.index)
175
+ const areas = block.svg
176
+ .getChartGroup(chart.index)
161
177
  .selectAll(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}`)
162
178
  .data(stackedData)
163
179
  .enter()
164
- .append('path')
165
- .attr('d', d => areaGenerator(d))
166
- .attr('class', Area.areaChartClass)
167
- .style('clip-path', `url(#${block.svg.getClipPathId()})`)
168
- .style('pointer-events', 'none');
180
+ .append("path")
181
+ .attr("d", (d) => areaGenerator(d))
182
+ .attr("class", Area.areaChartClass)
183
+ .style("clip-path", `url(#${block.svg.getClipPathId()})`)
184
+ .style("pointer-events", "none");
169
185
  const thisClass = this;
170
186
  areas.each(function (_, i) {
171
187
  thisClass.setChartFillStyle(chart, select(this), i);
172
188
  DomHelper.setCssClasses(select(this), Helper.getCssClassesWithElementIndex(chart.cssClasses, i));
173
189
  });
174
190
  stackedData.forEach((dataset, index) => {
175
- MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, '1', chart);
191
+ MarkDot.render(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, "1", chart);
176
192
  });
177
193
  }
178
194
  renderBorderLineSegmented(generatorFactory, block, data, chart) {
@@ -188,14 +204,14 @@ export class Area {
188
204
  });
189
205
  }
190
206
  updateAreaSegmented(block, scales, newData, keyField, margin, chart, keyAxisOrient) {
191
- const stackedData = getStackedDataWithOwn(newData, chart.data.valueFields.map(field => field.name));
207
+ const stackedData = getStackedDataWithOwn(newData, chart.data.valueFields.map((field) => field.name));
192
208
  const generatorFactory = this.createAreaGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField);
193
209
  const areaGenerator = generatorFactory.getSegmentedAreaGenerator();
194
210
  const areas = this.getAllAreasWithNewData(stackedData, block, chart, Area.areaChartClass);
195
211
  const prom = this.updateSegmentedPath(block, areas, areaGenerator);
196
212
  areas.each(function (dataset, index) {
197
213
  // '1' - атрибут, показывающий координаты согласно полю значения
198
- MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, '1', chart);
214
+ MarkDot.update(block, dataset, keyAxisOrient, scales, margin, keyField.name, index, "1", chart);
199
215
  });
200
216
  return prom;
201
217
  }
@@ -212,25 +228,24 @@ export class Area {
212
228
  }
213
229
  updateArea(areaGeneratorFactory, chartGroup, block, field, chart, newData, valueIndex) {
214
230
  const areaGenerator = areaGeneratorFactory.getAreaGenerator(field.name);
215
- const areaObject = chartGroup
216
- .select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
231
+ const areaObject = chartGroup.select(`.${Area.areaChartClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
217
232
  return this.updateGroupedPath(block, areaObject, areaGenerator, newData);
218
233
  }
219
234
  updateBorderLine(lineGeneratorFactory, chartGroup, block, field, chart, newData, valueIndex) {
220
235
  const borderLineGenerator = lineGeneratorFactory.getLineGenerator(field.name);
221
- const borderLineObject = chartGroup
222
- .select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
236
+ const borderLineObject = chartGroup.select(`.${Area.areaBorderLineClass}${Helper.getCssClassesLine(chart.cssClasses)}.chart-element-${valueIndex}`);
223
237
  return Line.updateGroupedPath(block, borderLineObject, borderLineGenerator, newData);
224
238
  }
225
239
  getAllAreasWithNewData(stackedData, block, chart, lineClass) {
226
- return block.svg.getChartGroup(chart.index)
240
+ return block.svg
241
+ .getChartGroup(chart.index)
227
242
  .selectAll(`path.${lineClass}${Helper.getCssClassesLine(chart.cssClasses)}`)
228
243
  .data(stackedData);
229
244
  }
230
245
  getLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField) {
231
- return chart.areaViewOptions.borderLine.on
232
- && this.createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField);
246
+ return (chart.areaViewOptions.borderLine.on &&
247
+ this.createLineGeneratorFactory(chart, scales, margin, keyAxisOrient, keyField));
233
248
  }
234
249
  }
235
- Area.areaChartClass = 'area';
236
- Area.areaBorderLineClass = 'area-border-line';
250
+ Area.areaChartClass = "area";
251
+ Area.areaBorderLineClass = "area-border-line";
@@ -4,19 +4,13 @@ export class AreaGenerator {
4
4
  this.options = options;
5
5
  }
6
6
  getVertical(xValue, y0Value, y1Value) {
7
- const generator = area()
8
- .x(xValue)
9
- .y0(y0Value)
10
- .y1(y1Value);
11
- this.options.middlewares.forEach(middleware => middleware.handle(generator));
7
+ const generator = area().x(xValue).y0(y0Value).y1(y1Value);
8
+ this.options.middlewares.forEach((middleware) => middleware.handle(generator));
12
9
  return generator;
13
10
  }
14
11
  getHorizontal(x0Value, x1Value, yValue) {
15
- const generator = area()
16
- .x0(x0Value)
17
- .x1(x1Value)
18
- .y(yValue);
19
- this.options.middlewares.forEach(middleware => middleware.handle(generator));
12
+ const generator = area().x0(x0Value).x1(x1Value).y(yValue);
13
+ this.options.middlewares.forEach((middleware) => middleware.handle(generator));
20
14
  return generator;
21
15
  }
22
16
  }
@@ -1,6 +1,6 @@
1
- import { Area as IArea } from 'd3-shape';
2
- import { MdtChartsDataRow } from '../../../config/config';
3
- import { LineLikeGeneratorFactoryOptions } from '../lineLike/generatorFactory/lineLikeGeneratorFactory';
1
+ import { Area as IArea } from "d3-shape";
2
+ import { MdtChartsDataRow } from "../../../config/config";
3
+ import { LineLikeGeneratorFactoryOptions } from "../lineLike/generatorFactory/lineLikeGeneratorFactory";
4
4
  export declare class AreaGeneratorFactory {
5
5
  private readonly options;
6
6
  constructor(options: LineLikeGeneratorFactoryOptions);
@@ -1,7 +1,7 @@
1
1
  import { Scale } from "../../features/scale/scale";
2
- import { LineLikeGeneratorDefinedMiddleware } from '../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware';
3
- import { AreaGenerator } from './areaGenerator';
4
- import { LineLikeGeneratorCurveMiddleware } from '../lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware';
2
+ import { LineLikeGeneratorDefinedMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware";
3
+ import { AreaGenerator } from "./areaGenerator";
4
+ import { LineLikeGeneratorCurveMiddleware } from "../lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware";
5
5
  export class AreaGeneratorFactory {
6
6
  constructor(options) {
7
7
  this.options = options;
@@ -11,14 +11,18 @@ export class AreaGeneratorFactory {
11
11
  const generator = new AreaGenerator({
12
12
  middlewares: [
13
13
  new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
14
- new LineLikeGeneratorDefinedMiddleware({ definedFn: shouldRender, valueFieldNameGetter: () => valueFieldName, dataRowGetter: (d) => d })
14
+ new LineLikeGeneratorDefinedMiddleware({
15
+ definedFn: shouldRender,
16
+ valueFieldNameGetter: () => valueFieldName,
17
+ dataRowGetter: (d) => d
18
+ })
15
19
  ]
16
20
  });
17
- if (keyAxisOrient === 'bottom' || keyAxisOrient === 'top') {
18
- return generator.getVertical(d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, d => scales.value(0) + margin.top, d => scales.value(d[valueFieldName]) + margin.top);
21
+ if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
22
+ return generator.getVertical((d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.left, (d) => scales.value(0) + margin.top, (d) => scales.value(d[valueFieldName]) + margin.top);
19
23
  }
20
- if (keyAxisOrient === 'left' || keyAxisOrient === 'right') {
21
- return generator.getHorizontal(d => scales.value(0) + margin.left, d => scales.value(d[valueFieldName]) + margin.left, d => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
24
+ if (keyAxisOrient === "left" || keyAxisOrient === "right") {
25
+ return generator.getHorizontal((d) => scales.value(0) + margin.left, (d) => scales.value(d[valueFieldName]) + margin.left, (d) => Scale.getScaledValue(scales.key, d[keyFieldName]) + margin.top);
22
26
  }
23
27
  }
24
28
  getSegmentedAreaGenerator() {
@@ -26,14 +30,18 @@ export class AreaGeneratorFactory {
26
30
  const generator = new AreaGenerator({
27
31
  middlewares: [
28
32
  new LineLikeGeneratorCurveMiddleware({ curve: this.options.curve }),
29
- new LineLikeGeneratorDefinedMiddleware({ definedFn: shouldRender, valueFieldNameGetter: (d) => d.fieldName, dataRowGetter: (d) => d.data })
33
+ new LineLikeGeneratorDefinedMiddleware({
34
+ definedFn: shouldRender,
35
+ valueFieldNameGetter: (d) => d.fieldName,
36
+ dataRowGetter: (d) => d.data
37
+ })
30
38
  ]
31
39
  });
32
- if (keyAxisOrient === 'bottom' || keyAxisOrient === 'top') {
33
- return generator.getVertical(d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, d => scales.value(d[0]) + margin.top, d => scales.value(d[1]) + margin.top);
40
+ if (keyAxisOrient === "bottom" || keyAxisOrient === "top") {
41
+ return generator.getVertical((d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.left, (d) => scales.value(d[0]) + margin.top, (d) => scales.value(d[1]) + margin.top);
34
42
  }
35
- if (keyAxisOrient === 'left' || keyAxisOrient === 'right') {
36
- return generator.getHorizontal(d => scales.value(d[0]) + margin.left, d => scales.value(d[1]) + margin.left, d => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
43
+ if (keyAxisOrient === "left" || keyAxisOrient === "right") {
44
+ return generator.getHorizontal((d) => scales.value(d[0]) + margin.left, (d) => scales.value(d[1]) + margin.left, (d) => Scale.getScaledValue(scales.key, d.data[keyFieldName]) + margin.top);
37
45
  }
38
46
  }
39
47
  }
@@ -1,4 +1,4 @@
1
- import { Selection, BaseType } from 'd3-selection';
1
+ import { Selection, BaseType } from "d3-selection";
2
2
  import { BarChartSettings, BlockMargin, Field, Orient, TwoDimensionalChartModel } from "../../../model/model";
3
3
  import { Scales } from "../../features/scale/scale";
4
4
  import { Block } from "../../block/block";
@@ -9,7 +9,7 @@ export interface RectElemWithAttrs extends SVGElement {
9
9
  y: number;
10
10
  width: number;
11
11
  height: number;
12
- orient: 'vertical' | 'horizontal';
12
+ orient: "vertical" | "horizontal";
13
13
  scaleSize: number;
14
14
  };
15
15
  }