mdt-charts 1.28.2 → 1.29.0

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 (255) hide show
  1. package/lib/config/config.d.ts +164 -165
  2. package/lib/designer/designerConfig.d.ts +62 -59
  3. package/lib/engine/block/block.d.ts +22 -16
  4. package/lib/engine/block/block.js +51 -51
  5. package/lib/engine/block/blockHelper.d.ts +6 -6
  6. package/lib/engine/block/blockHelper.js +16 -16
  7. package/lib/engine/block/blockHtml.d.ts +8 -8
  8. package/lib/engine/block/blockHtml.js +15 -15
  9. package/lib/engine/block/blockSvg.d.ts +20 -20
  10. package/lib/engine/block/blockSvg.js +65 -66
  11. package/lib/engine/block/defs/LinearGradientDef.d.ts +2 -2
  12. package/lib/engine/block/defs/LinearGradientDef.js +27 -27
  13. package/lib/engine/block/defs/hatchPattern.d.ts +4 -4
  14. package/lib/engine/block/defs/hatchPattern.js +9 -9
  15. package/lib/engine/colorReader/colorReader.d.ts +5 -5
  16. package/lib/engine/colorReader/colorReader.js +18 -18
  17. package/lib/engine/contentManager/contentManager.d.ts +6 -6
  18. package/lib/engine/contentManager/contentManager.js +15 -15
  19. package/lib/engine/contentManager/contentManagerFactory.d.ts +6 -6
  20. package/lib/engine/contentManager/contentManagerFactory.js +12 -12
  21. package/lib/engine/elementHighlighter/elementHighlighter.d.ts +70 -22
  22. package/lib/engine/elementHighlighter/elementHighlighter.js +230 -181
  23. package/lib/engine/elementHighlighter/selectHighlighter.d.ts +29 -4
  24. package/lib/engine/elementHighlighter/selectHighlighter.js +189 -87
  25. package/lib/engine/engine.d.ts +16 -16
  26. package/lib/engine/engine.js +87 -62
  27. package/lib/engine/features/aggregator/aggregator.d.ts +24 -17
  28. package/lib/engine/features/aggregator/aggregator.js +113 -102
  29. package/lib/engine/features/axis/axis.d.ts +22 -9
  30. package/lib/engine/features/axis/axis.js +159 -150
  31. package/lib/engine/features/axis/axisDomHelper.d.ts +7 -2
  32. package/lib/engine/features/axis/axisDomHelper.js +19 -20
  33. package/lib/engine/features/axis/axisHelper.d.ts +9 -5
  34. package/lib/engine/features/axis/axisHelper.js +28 -33
  35. package/lib/engine/features/axis/axisLabelDomHelper.d.ts +26 -11
  36. package/lib/engine/features/axis/axisLabelDomHelper.js +156 -152
  37. package/lib/engine/features/axis/axisLabelsEventManager.d.ts +2 -2
  38. package/lib/engine/features/axis/axisLabelsEventManager.js +32 -32
  39. package/lib/engine/features/embeddedLabels/embeddedLabels.d.ts +51 -16
  40. package/lib/engine/features/embeddedLabels/embeddedLabels.js +234 -134
  41. package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.d.ts +13 -2
  42. package/lib/engine/features/embeddedLabels/embeddedLabelsDomHelper.js +20 -23
  43. package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.d.ts +32 -15
  44. package/lib/engine/features/embeddedLabels/embeddedLabelsHelper.js +56 -63
  45. package/lib/engine/features/gridLine/gidLineHelper.d.ts +13 -7
  46. package/lib/engine/features/gridLine/gidLineHelper.js +42 -49
  47. package/lib/engine/features/gridLine/gridLine.d.ts +19 -5
  48. package/lib/engine/features/gridLine/gridLine.js +35 -36
  49. package/lib/engine/features/legend/legend.d.ts +38 -29
  50. package/lib/engine/features/legend/legend.js +117 -92
  51. package/lib/engine/features/legend/legendDomHelper.d.ts +13 -6
  52. package/lib/engine/features/legend/legendDomHelper.js +63 -62
  53. package/lib/engine/features/legend/legendEventsManager.d.ts +13 -8
  54. package/lib/engine/features/legend/legendEventsManager.js +48 -47
  55. package/lib/engine/features/legend/legendHelper.d.ts +39 -14
  56. package/lib/engine/features/legend/legendHelper.js +98 -93
  57. package/lib/engine/features/legend/legendHelperService.d.ts +13 -6
  58. package/lib/engine/features/legend/legendHelperService.js +24 -25
  59. package/lib/engine/features/legend/legendMarkerCreator.d.ts +18 -9
  60. package/lib/engine/features/legend/legendMarkerCreator.js +79 -76
  61. package/lib/engine/features/legend/legendWidthCalculator.d.ts +7 -7
  62. package/lib/engine/features/legend/legendWidthCalculator.js +126 -122
  63. package/lib/engine/features/markDots/markDot.d.ts +42 -15
  64. package/lib/engine/features/markDots/markDot.js +101 -70
  65. package/lib/engine/features/markDots/markDotsHelper.d.ts +8 -1
  66. package/lib/engine/features/markDots/markDotsHelper.js +13 -12
  67. package/lib/engine/features/recordOverflowAlert/recordOverflowAlertCore.d.ts +17 -17
  68. package/lib/engine/features/recordOverflowAlert/recordOverflowAlertCore.js +42 -47
  69. package/lib/engine/features/scale/scale.d.ts +17 -12
  70. package/lib/engine/features/scale/scale.js +76 -69
  71. package/lib/engine/features/tipBox/tipBox.d.ts +9 -5
  72. package/lib/engine/features/tipBox/tipBox.js +24 -24
  73. package/lib/engine/features/tipBox/tipBoxHelper.d.ts +16 -9
  74. package/lib/engine/features/tipBox/tipBoxHelper.js +60 -45
  75. package/lib/engine/features/title/title.d.ts +6 -6
  76. package/lib/engine/features/title/title.js +34 -35
  77. package/lib/engine/features/tolltip/newTooltip/newTooltip.d.ts +15 -11
  78. package/lib/engine/features/tolltip/newTooltip/newTooltip.js +21 -21
  79. package/lib/engine/features/tolltip/newTooltip/newTooltipService.d.ts +13 -8
  80. package/lib/engine/features/tolltip/newTooltip/newTooltipService.js +26 -23
  81. package/lib/engine/features/tolltip/tooltip.d.ts +17 -11
  82. package/lib/engine/features/tolltip/tooltip.js +296 -142
  83. package/lib/engine/features/tolltip/tooltipComponentsManager.d.ts +21 -10
  84. package/lib/engine/features/tolltip/tooltipComponentsManager.js +113 -114
  85. package/lib/engine/features/tolltip/tooltipDomHelper.d.ts +43 -21
  86. package/lib/engine/features/tolltip/tooltipDomHelper.js +144 -120
  87. package/lib/engine/features/tolltip/tooltipHelper.d.ts +39 -9
  88. package/lib/engine/features/tolltip/tooltipHelper.js +114 -91
  89. package/lib/engine/features/valueLabels/valueLabels.d.ts +58 -38
  90. package/lib/engine/features/valueLabels/valueLabels.js +205 -169
  91. package/lib/engine/features/valueLabels/valueLabelsHelper.d.ts +7 -1
  92. package/lib/engine/features/valueLabels/valueLabelsHelper.js +23 -18
  93. package/lib/engine/features/valueLabelsCollision/valueLabelsCollision.d.ts +18 -15
  94. package/lib/engine/features/valueLabelsCollision/valueLabelsCollision.js +46 -47
  95. package/lib/engine/features/valueLabelsCollision/valueLabelsCollisionHelper.d.ts +6 -3
  96. package/lib/engine/features/valueLabelsCollision/valueLabelsCollisionHelper.js +49 -45
  97. package/lib/engine/filterManager/filterEventManager.d.ts +37 -26
  98. package/lib/engine/filterManager/filterEventManager.js +174 -129
  99. package/lib/engine/helpers/domHelper.d.ts +45 -20
  100. package/lib/engine/helpers/domHelper.js +62 -61
  101. package/lib/engine/helpers/fontResizer/fontResizer.d.ts +10 -10
  102. package/lib/engine/helpers/fontResizer/fontResizer.js +21 -16
  103. package/lib/engine/helpers/fontResizer/fontResizerService.d.ts +1 -1
  104. package/lib/engine/helpers/fontResizer/fontResizerService.js +9 -10
  105. package/lib/engine/helpers/helper.d.ts +27 -27
  106. package/lib/engine/helpers/helper.js +91 -92
  107. package/lib/engine/helpers/namesHelper.d.ts +3 -3
  108. package/lib/engine/helpers/namesHelper.js +6 -6
  109. package/lib/engine/helpers/pipeline/Pipeline.d.ts +5 -5
  110. package/lib/engine/helpers/pipeline/Pipeline.js +33 -33
  111. package/lib/engine/polarNotation/donut/DonutHelper.d.ts +25 -11
  112. package/lib/engine/polarNotation/donut/DonutHelper.js +71 -70
  113. package/lib/engine/polarNotation/donut/donut.d.ts +38 -23
  114. package/lib/engine/polarNotation/donut/donut.js +109 -99
  115. package/lib/engine/polarNotation/extenders/polarRecordOverflowAlert.d.ts +7 -7
  116. package/lib/engine/polarNotation/extenders/polarRecordOverflowAlert.js +36 -36
  117. package/lib/engine/polarNotation/polarManager.d.ts +5 -5
  118. package/lib/engine/polarNotation/polarManager.js +66 -52
  119. package/lib/engine/transitionManager.d.ts +13 -14
  120. package/lib/engine/transitionManager.js +48 -49
  121. package/lib/engine/twoDimensionalNotation/area/area.d.ts +44 -28
  122. package/lib/engine/twoDimensionalNotation/area/area.js +272 -238
  123. package/lib/engine/twoDimensionalNotation/area/areaGenerator.d.ts +13 -5
  124. package/lib/engine/twoDimensionalNotation/area/areaGenerator.js +13 -13
  125. package/lib/engine/twoDimensionalNotation/area/areaHelper.d.ts +4 -4
  126. package/lib/engine/twoDimensionalNotation/area/areaHelper.js +57 -41
  127. package/lib/engine/twoDimensionalNotation/bar/bar.d.ts +54 -29
  128. package/lib/engine/twoDimensionalNotation/bar/bar.js +362 -224
  129. package/lib/engine/twoDimensionalNotation/bar/barHelper.d.ts +71 -32
  130. package/lib/engine/twoDimensionalNotation/bar/barHelper.js +162 -126
  131. package/lib/engine/twoDimensionalNotation/bar/stackedData/dataStacker.d.ts +6 -6
  132. package/lib/engine/twoDimensionalNotation/bar/stackedData/dataStacker.js +24 -24
  133. package/lib/engine/twoDimensionalNotation/bar/stackedData/dataStackerService.d.ts +2 -2
  134. package/lib/engine/twoDimensionalNotation/bar/stackedData/dataStackerService.js +16 -17
  135. package/lib/engine/twoDimensionalNotation/dot/dotChart.d.ts +23 -23
  136. package/lib/engine/twoDimensionalNotation/dot/dotChart.js +135 -114
  137. package/lib/engine/twoDimensionalNotation/extenders/twoDimRecordOverflowAlert.d.ts +7 -7
  138. package/lib/engine/twoDimensionalNotation/extenders/twoDimRecordOverflowAlert.js +28 -28
  139. package/lib/engine/twoDimensionalNotation/line/line.d.ts +37 -16
  140. package/lib/engine/twoDimensionalNotation/line/line.js +162 -132
  141. package/lib/engine/twoDimensionalNotation/line/lineBuilder.d.ts +14 -11
  142. package/lib/engine/twoDimensionalNotation/line/lineBuilder.js +47 -48
  143. package/lib/engine/twoDimensionalNotation/line/lineGenerator.d.ts +4 -4
  144. package/lib/engine/twoDimensionalNotation/line/lineGenerator.js +8 -8
  145. package/lib/engine/twoDimensionalNotation/line/lineHelper.d.ts +12 -6
  146. package/lib/engine/twoDimensionalNotation/line/lineHelper.js +76 -60
  147. package/lib/engine/twoDimensionalNotation/lineLike/generatorFactory/lineLikeGeneratorFactory.d.ts +6 -6
  148. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware.d.ts +5 -5
  149. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorCurveMiddleware.js +16 -17
  150. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware.d.ts +11 -10
  151. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorDefineMiddleware.js +9 -7
  152. package/lib/engine/twoDimensionalNotation/lineLike/generatorMiddleware/lineLikeGeneratorMiddleware.d.ts +3 -1
  153. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.d.ts +9 -9
  154. package/lib/engine/twoDimensionalNotation/twoDimensionalManager.js +252 -143
  155. package/lib/engine/valueFormatter.d.ts +3 -3
  156. package/lib/engine/valueFormatter.js +6 -6
  157. package/lib/main.d.ts +82 -75
  158. package/lib/main.js +79 -84
  159. package/lib/model/EventEmitter.d.ts +8 -8
  160. package/lib/model/EventEmitter.js +24 -24
  161. package/lib/model/chartStyleModel/chartStyleModel.d.ts +5 -5
  162. package/lib/model/chartStyleModel/chartStyleModel.js +27 -25
  163. package/lib/model/chartStyleModel/colorRange.d.ts +3 -3
  164. package/lib/model/chartStyleModel/colorRange.js +19 -24
  165. package/lib/model/chartStyleModel/twoDimensionalChartStyleModel.d.ts +22 -12
  166. package/lib/model/chartStyleModel/twoDimensionalChartStyleModel.js +69 -60
  167. package/lib/model/configsValidator/configValidator.d.ts +1 -1
  168. package/lib/model/configsValidator/configValidator.js +4 -4
  169. package/lib/model/dataManagerModel/dataManagerModel.d.ts +36 -26
  170. package/lib/model/dataManagerModel/dataManagerModel.js +179 -128
  171. package/lib/model/dataManagerModel/dataManagerModelService.d.ts +2 -2
  172. package/lib/model/dataManagerModel/dataManagerModelService.js +25 -26
  173. package/lib/model/featuresModel/axisModel.d.ts +69 -18
  174. package/lib/model/featuresModel/axisModel.js +224 -169
  175. package/lib/model/featuresModel/axisModelService.d.ts +10 -6
  176. package/lib/model/featuresModel/axisModelService.js +27 -27
  177. package/lib/model/featuresModel/legendModel/legendCanvasModel.d.ts +16 -11
  178. package/lib/model/featuresModel/legendModel/legendCanvasModel.js +55 -59
  179. package/lib/model/featuresModel/legendModel/legendModel.d.ts +7 -3
  180. package/lib/model/featuresModel/legendModel/legendModel.js +59 -41
  181. package/lib/model/featuresModel/legendModel/polarMarginCalculator.d.ts +8 -3
  182. package/lib/model/featuresModel/legendModel/polarMarginCalculator.js +18 -20
  183. package/lib/model/featuresModel/legendModel/twoDimLegendModel.d.ts +8 -4
  184. package/lib/model/featuresModel/legendModel/twoDimLegendModel.js +40 -27
  185. package/lib/model/featuresModel/otherComponents.d.ts +7 -4
  186. package/lib/model/featuresModel/otherComponents.js +9 -9
  187. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.d.ts +6 -6
  188. package/lib/model/featuresModel/scaleModel/scaleAxisRecalcer.js +27 -23
  189. package/lib/model/featuresModel/scaleModel/scaleDomainService.d.ts +19 -5
  190. package/lib/model/featuresModel/scaleModel/scaleDomainService.js +44 -55
  191. package/lib/model/featuresModel/scaleModel/scaleModel.d.ts +10 -10
  192. package/lib/model/featuresModel/scaleModel/scaleModel.js +61 -50
  193. package/lib/model/featuresModel/scaleModel/scaleModelServices.js +15 -22
  194. package/lib/model/featuresModel/titleModel.d.ts +1 -1
  195. package/lib/model/featuresModel/titleModel.js +14 -14
  196. package/lib/model/featuresModel/tooltipModel.d.ts +1 -1
  197. package/lib/model/featuresModel/tooltipModel.js +5 -5
  198. package/lib/model/featuresModel/valueLabelsModel/valueLabelsModel.d.ts +23 -11
  199. package/lib/model/featuresModel/valueLabelsModel/valueLabelsModel.js +53 -51
  200. package/lib/model/helpers/modelHelper.d.ts +7 -7
  201. package/lib/model/helpers/modelHelper.js +38 -42
  202. package/lib/model/helpers/twoDimensionalModelHelper.d.ts +37 -9
  203. package/lib/model/helpers/twoDimensionalModelHelper.js +147 -125
  204. package/lib/model/helpers/unitsFromConfigReader.js +4 -4
  205. package/lib/model/helpers/unitsReader.d.ts +2 -2
  206. package/lib/model/helpers/unitsReader.js +11 -13
  207. package/lib/model/margin/marginModel.d.ts +7 -7
  208. package/lib/model/margin/marginModel.js +23 -20
  209. package/lib/model/margin/twoDim/twoDimMarginModel.d.ts +13 -13
  210. package/lib/model/margin/twoDim/twoDimMarginModel.js +184 -113
  211. package/lib/model/model.d.ts +308 -280
  212. package/lib/model/model.js +4 -4
  213. package/lib/model/modelBuilder.d.ts +27 -18
  214. package/lib/model/modelBuilder.js +85 -79
  215. package/lib/model/modelInstance/canvasModel/canvasModel.d.ts +17 -17
  216. package/lib/model/modelInstance/canvasModel/canvasModel.js +42 -43
  217. package/lib/model/modelInstance/canvasModel/canvasSizesModel/canvasMarginModel.d.ts +7 -7
  218. package/lib/model/modelInstance/canvasModel/canvasSizesModel/canvasSizeModel.d.ts +2 -2
  219. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.d.ts +6 -6
  220. package/lib/model/modelInstance/canvasModel/canvasSizesModel/marginModelService.js +24 -24
  221. package/lib/model/modelInstance/canvasModel/legendCanvasModel.d.ts +4 -4
  222. package/lib/model/modelInstance/canvasModel/legendCanvasModel.js +11 -11
  223. package/lib/model/modelInstance/canvasModel/titleCanvas.d.ts +4 -4
  224. package/lib/model/modelInstance/canvasModel/titleCanvas.js +9 -9
  225. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.d.ts +3 -3
  226. package/lib/model/modelInstance/chartBlockVersion/chartBlockVersion.js +6 -6
  227. package/lib/model/modelInstance/configReader.d.ts +32 -23
  228. package/lib/model/modelInstance/configReader.js +125 -94
  229. package/lib/model/modelInstance/dataModel/dataModel.d.ts +9 -9
  230. package/lib/model/modelInstance/dataModel/dataModel.js +24 -24
  231. package/lib/model/modelInstance/dataModel/dataRepository.d.ts +14 -14
  232. package/lib/model/modelInstance/dataModel/dataRepository.js +42 -42
  233. package/lib/model/modelInstance/modelInstance.d.ts +11 -6
  234. package/lib/model/modelInstance/modelInstance.js +16 -16
  235. package/lib/model/modelInstance/titleConfigReader.d.ts +8 -8
  236. package/lib/model/modelInstance/titleConfigReader.js +37 -30
  237. package/lib/model/notations/polar/donut/donutAggregatorService.d.ts +9 -6
  238. package/lib/model/notations/polar/donut/donutAggregatorService.js +40 -37
  239. package/lib/model/notations/polar/donut/donutModel.d.ts +9 -5
  240. package/lib/model/notations/polar/donut/donutModel.js +28 -28
  241. package/lib/model/notations/polar/donut/donutThicknessService.d.ts +3 -3
  242. package/lib/model/notations/polar/donut/donutThicknessService.js +13 -15
  243. package/lib/model/notations/polar/polarModel.d.ts +18 -7
  244. package/lib/model/notations/polar/polarModel.js +79 -65
  245. package/lib/model/notations/twoDimensional/styles.d.ts +44 -7
  246. package/lib/model/notations/twoDimensional/styles.js +234 -125
  247. package/lib/model/notations/twoDimensionalModel.d.ts +23 -13
  248. package/lib/model/notations/twoDimensionalModel.js +330 -162
  249. package/lib/optionsServices/publicOptionsService.d.ts +1 -1
  250. package/lib/optionsServices/publicOptionsService.js +4 -4
  251. package/lib/optionsServices/validators/sizeValidator.d.ts +2 -2
  252. package/lib/optionsServices/validators/sizeValidator.js +10 -11
  253. package/lib/style/charts-main.css +150 -151
  254. package/lib/style/charts-main.less +150 -151
  255. package/package.json +1 -1
@@ -2,74 +2,75 @@ import { merge } from "d3-array";
2
2
  import { arc, pie } from "d3-shape";
3
3
  const MIN_CHART_BLOCK_SIZE_FOR_MAX_THICKNESS = 400;
4
4
  export class DonutHelper {
5
- static getThickness(donutSettings, blockSize, margin) {
6
- const thicknessOpts = donutSettings.thickness;
7
- const chartBlockSize = this.getChartBlockSize(blockSize, margin);
8
- if (thicknessOpts.value)
9
- return this.getThicknessByUnit(chartBlockSize, thicknessOpts.value, thicknessOpts.unit);
10
- if (Math.min(chartBlockSize.width, chartBlockSize.height) > MIN_CHART_BLOCK_SIZE_FOR_MAX_THICKNESS)
11
- return this.getThicknessByUnit(chartBlockSize, thicknessOpts.max, thicknessOpts.unit);
12
- return this.getThicknessByUnit(chartBlockSize, thicknessOpts.min, thicknessOpts.unit);
13
- }
14
- static getArcCentroid(blockSize, margin, dataItem, donutThickness) {
15
- const arc = this.getArcGeneratorObject(blockSize, margin, donutThickness);
16
- return arc.centroid(dataItem);
17
- }
18
- static getArcGeneratorObject(blockSize, margin, donutThickness) {
19
- const outerRadius = this.getOuterRadius(margin, blockSize);
20
- const arc = this.getArcGenerator(outerRadius, outerRadius - donutThickness);
21
- return arc;
22
- }
23
- static getOuterRadius(margin, blockSize) {
24
- return (Math.min(blockSize.width - margin.left - margin.right, blockSize.height - margin.top - margin.bottom) / 2);
25
- }
26
- static getInnerRadius(outerRadius, thickness) {
27
- return outerRadius - thickness;
28
- }
29
- static getTranslate(margin, blockSize) {
30
- return {
31
- x: (blockSize.width - margin.left - margin.right) / 2 + margin.left,
32
- y: (blockSize.height - margin.top - margin.bottom) / 2 + margin.top
33
- };
34
- }
35
- static getArcGenerator(outerRadius, innerRadius) {
36
- return arc().innerRadius(innerRadius).outerRadius(outerRadius);
37
- }
38
- static getPieGenerator(valueField, padAngle) {
39
- return pie()
40
- .padAngle(padAngle)
41
- .sort(null)
42
- .value((d) => d[valueField]);
43
- }
44
- static mergeDataWithZeros(firstDataset, secondDataset, keyField, colorField) {
45
- const secondSet = new Set();
46
- secondDataset.forEach((dataRow) => {
47
- secondSet.add(dataRow[keyField]);
48
- });
49
- const onlyNew = firstDataset
50
- .filter((d) => !secondSet.has(d[keyField]))
51
- .map((d, index, array) => {
52
- const data = {
53
- keyField: array[index][keyField],
54
- valueField: 0,
55
- [colorField]: array[index][colorField]
56
- //TODO: добавить цвет из ColorReader'а
57
- };
58
- return data;
59
- });
60
- const sortedMerge = merge([secondDataset, onlyNew]);
61
- return sortedMerge;
62
- }
63
- static getThicknessByUnit(chartBlockSize, valueInPx, unit) {
64
- if (unit === "px")
65
- return valueInPx;
66
- const minSideSize = Math.min(chartBlockSize.width, chartBlockSize.height);
67
- return (minSideSize / 2) * (valueInPx / 100);
68
- }
69
- static getChartBlockSize(blockSize, margin) {
70
- return {
71
- height: blockSize.height - margin.top - margin.bottom,
72
- width: blockSize.width - margin.left - margin.right
73
- };
74
- }
5
+ static getThickness(donutSettings, blockSize, margin) {
6
+ const thicknessOpts = donutSettings.thickness;
7
+ const chartBlockSize = this.getChartBlockSize(blockSize, margin);
8
+ if (thicknessOpts.value)
9
+ return this.getThicknessByUnit(chartBlockSize, thicknessOpts.value, thicknessOpts.unit);
10
+ if (Math.min(chartBlockSize.width, chartBlockSize.height) > MIN_CHART_BLOCK_SIZE_FOR_MAX_THICKNESS)
11
+ return this.getThicknessByUnit(chartBlockSize, thicknessOpts.max, thicknessOpts.unit);
12
+ return this.getThicknessByUnit(chartBlockSize, thicknessOpts.min, thicknessOpts.unit);
13
+ }
14
+ static getArcCentroid(blockSize, margin, dataItem, donutThickness) {
15
+ const arc = this.getArcGeneratorObject(blockSize, margin, donutThickness);
16
+ return arc.centroid(dataItem);
17
+ }
18
+ static getArcGeneratorObject(blockSize, margin, donutThickness) {
19
+ const outerRadius = this.getOuterRadius(margin, blockSize);
20
+ const arc = this.getArcGenerator(outerRadius, outerRadius - donutThickness);
21
+ return arc;
22
+ }
23
+ static getOuterRadius(margin, blockSize) {
24
+ return (
25
+ Math.min(blockSize.width - margin.left - margin.right, blockSize.height - margin.top - margin.bottom) / 2
26
+ );
27
+ }
28
+ static getInnerRadius(outerRadius, thickness) {
29
+ return outerRadius - thickness;
30
+ }
31
+ static getTranslate(margin, blockSize) {
32
+ return {
33
+ x: (blockSize.width - margin.left - margin.right) / 2 + margin.left,
34
+ y: (blockSize.height - margin.top - margin.bottom) / 2 + margin.top
35
+ };
36
+ }
37
+ static getArcGenerator(outerRadius, innerRadius) {
38
+ return arc().innerRadius(innerRadius).outerRadius(outerRadius);
39
+ }
40
+ static getPieGenerator(valueField, padAngle) {
41
+ return pie()
42
+ .padAngle(padAngle)
43
+ .sort(null)
44
+ .value((d) => d[valueField]);
45
+ }
46
+ static mergeDataWithZeros(firstDataset, secondDataset, keyField, colorField) {
47
+ const secondSet = new Set();
48
+ secondDataset.forEach((dataRow) => {
49
+ secondSet.add(dataRow[keyField]);
50
+ });
51
+ const onlyNew = firstDataset
52
+ .filter((d) => !secondSet.has(d[keyField]))
53
+ .map((d, index, array) => {
54
+ const data = {
55
+ keyField: array[index][keyField],
56
+ valueField: 0,
57
+ [colorField]: array[index][colorField]
58
+ //TODO: добавить цвет из ColorReader'а
59
+ };
60
+ return data;
61
+ });
62
+ const sortedMerge = merge([secondDataset, onlyNew]);
63
+ return sortedMerge;
64
+ }
65
+ static getThicknessByUnit(chartBlockSize, valueInPx, unit) {
66
+ if (unit === "px") return valueInPx;
67
+ const minSideSize = Math.min(chartBlockSize.width, chartBlockSize.height);
68
+ return (minSideSize / 2) * (valueInPx / 100);
69
+ }
70
+ static getChartBlockSize(blockSize, margin) {
71
+ return {
72
+ height: blockSize.height - margin.top - margin.bottom,
73
+ width: blockSize.width - margin.left - margin.right
74
+ };
75
+ }
75
76
  }
@@ -4,29 +4,44 @@ import { BlockMargin, DonutChartSettings, PolarChartModel } from "../../../model
4
4
  import { Block } from "../../block/block";
5
5
  import { MdtChartsDataRow, Size } from "../../../config/config";
6
6
  export interface Translate {
7
- x: number;
8
- y: number;
7
+ x: number;
8
+ y: number;
9
9
  }
10
10
  export declare class Donut {
11
- static readonly donutBlockClass = "donut-block";
12
- static readonly arcPathClass = "arc-path";
13
- static readonly arcItemClass = "arc";
14
- static readonly arcHighlightedClass = "arc-highlighted";
15
- static readonly arcClonesGroupClass = "arc-clones";
16
- static readonly arcShadowsGroupClass = "arc-shadow-clones";
17
- static readonly arcCloneClass = "arc-clone";
18
- static readonly arcShadowClass = "arc-shadow-clone";
19
- static render(block: Block, data: MdtChartsDataRow[], margin: BlockMargin, chart: PolarChartModel, blockSize: Size, settings: DonutChartSettings): void;
20
- static update(block: Block, data: MdtChartsDataRow[], margin: BlockMargin, chart: PolarChartModel, blockSize: Size, donutSettings: DonutChartSettings, keyField: string): Promise<any>;
21
- static updateColors(block: Block, chart: PolarChartModel): void;
22
- static getAllArcGroups(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
23
- static getAllArcClones(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
24
- static getAllArcShadows(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
25
- private static renderNewArcItems;
26
- private static setElementsColor;
27
- /**
28
- * Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
29
- */
30
- private static renderClonesG;
31
- private static raiseClonesG;
11
+ static readonly donutBlockClass = "donut-block";
12
+ static readonly arcPathClass = "arc-path";
13
+ static readonly arcItemClass = "arc";
14
+ static readonly arcHighlightedClass = "arc-highlighted";
15
+ static readonly arcClonesGroupClass = "arc-clones";
16
+ static readonly arcShadowsGroupClass = "arc-shadow-clones";
17
+ static readonly arcCloneClass = "arc-clone";
18
+ static readonly arcShadowClass = "arc-shadow-clone";
19
+ static render(
20
+ block: Block,
21
+ data: MdtChartsDataRow[],
22
+ margin: BlockMargin,
23
+ chart: PolarChartModel,
24
+ blockSize: Size,
25
+ settings: DonutChartSettings
26
+ ): void;
27
+ static update(
28
+ block: Block,
29
+ data: MdtChartsDataRow[],
30
+ margin: BlockMargin,
31
+ chart: PolarChartModel,
32
+ blockSize: Size,
33
+ donutSettings: DonutChartSettings,
34
+ keyField: string
35
+ ): Promise<any>;
36
+ static updateColors(block: Block, chart: PolarChartModel): void;
37
+ static getAllArcGroups(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
38
+ static getAllArcClones(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
39
+ static getAllArcShadows(block: Block): Selection<SVGGElement, PieArcDatum<MdtChartsDataRow>, SVGGElement, unknown>;
40
+ private static renderNewArcItems;
41
+ private static setElementsColor;
42
+ /**
43
+ * Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
44
+ */
45
+ private static renderClonesG;
46
+ private static raiseClonesG;
32
47
  }
@@ -4,105 +4,115 @@ import { DonutHelper } from "./DonutHelper";
4
4
  import { DomHelper } from "../../helpers/domHelper";
5
5
  import { ColorReader } from "../../colorReader/colorReader";
6
6
  export class Donut {
7
- static render(block, data, margin, chart, blockSize, settings) {
8
- const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
9
- const thickness = DonutHelper.getThickness(settings, blockSize, margin);
10
- const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
11
- const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
12
- const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, settings.padAngle);
13
- const translateAttr = DonutHelper.getTranslate(margin, blockSize);
14
- Aggregator.render(block, chart.data.valueField, innerRadius, translateAttr, thickness, settings.aggregator);
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})`);
22
- this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart);
23
- this.renderClonesG(donutBlock);
24
- }
25
- static update(block, data, margin, chart, blockSize, donutSettings, keyField) {
26
- const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
27
- const thickness = DonutHelper.getThickness(donutSettings, blockSize, margin);
28
- const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
29
- const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
30
- const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, donutSettings.padAngle);
31
- const oldData = block
32
- .getSvg()
33
- .selectAll(`.${this.donutBlockClass}`)
34
- .selectAll("path")
35
- .data()
36
- .map((d) => d.data);
37
- const dataNewZeroRows = DonutHelper.mergeDataWithZeros(data, oldData, keyField, ColorReader.getChartColorField(chart));
38
- const dataExtraZeroRows = DonutHelper.mergeDataWithZeros(oldData, data, keyField, ColorReader.getChartColorField(chart));
39
- const donutBlock = block.getSvg().select(`.${this.donutBlockClass}`);
40
- this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, dataNewZeroRows, chart);
41
- const path = this.getAllArcGroups(block).data(pieGenerator(dataExtraZeroRows)).select("path");
42
- const items = this.getAllArcGroups(block).data(pieGenerator(data));
43
- this.setElementsColor(this.getAllArcGroups(block), chart);
44
- return new Promise((resolve) => {
45
- this.raiseClonesG(block);
46
- path.interrupt()
47
- .transition()
48
- .duration(block.transitionManager.durations.chartUpdate)
49
- .on("end", () => {
50
- items.exit().remove();
51
- resolve("updated");
52
- })
53
- .attrTween("d", function (d) {
54
- const interpolateFunc = interpolate(this._currentData, d);
55
- return (t) => {
56
- this._currentData = interpolateFunc(t); // _current - старые данные до обновления, задаются во время рендера
57
- return arcGenerator(this._currentData);
58
- };
59
- });
60
- });
61
- }
62
- static updateColors(block, chart) {
63
- this.setElementsColor(this.getAllArcGroups(block), chart);
64
- }
65
- static getAllArcGroups(block) {
66
- return block.getSvg().selectAll(`.${this.arcItemClass}`);
67
- }
68
- static getAllArcClones(block) {
69
- return block.getSvg().selectAll(`.${Donut.arcCloneClass}`);
70
- }
71
- static getAllArcShadows(block) {
72
- return block.getSvg().selectAll(`.${this.arcShadowClass}`);
73
- }
74
- static renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart) {
75
- const items = donutBlock
76
- .selectAll(`.${this.arcItemClass}`)
77
- .data(pieGenerator(data))
78
- .enter()
79
- .append("g")
80
- .attr("class", this.arcItemClass);
81
- const arcs = items
82
- .append("path")
83
- .attr("d", arcGenerator)
84
- .attr("class", this.arcPathClass)
85
- .each(function (d) {
86
- this._currentData = d;
87
- }); // _currentData используется для получения текущих данных внутри функции обновления.
88
- DomHelper.setCssClasses(arcs, chart.cssClasses);
89
- this.setElementsColor(items, chart);
90
- }
91
- static setElementsColor(arcItems, chart) {
92
- arcItems.select("path").style("fill", ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
93
- }
94
- /**
95
- * Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
96
- */
97
- static renderClonesG(donutBlock) {
98
- const clonesShadowsG = donutBlock.append("g").attr("class", this.arcShadowsGroupClass).raise();
99
- const clonesG = donutBlock.append("g").attr("class", this.arcClonesGroupClass).raise();
100
- // ElementHighlighter.setShadowFilter(clonesG);
101
- }
102
- static raiseClonesG(block) {
103
- block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcShadowsGroupClass}`).raise();
104
- block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcClonesGroupClass}`).raise();
105
- }
7
+ static render(block, data, margin, chart, blockSize, settings) {
8
+ const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
9
+ const thickness = DonutHelper.getThickness(settings, blockSize, margin);
10
+ const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
11
+ const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
12
+ const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, settings.padAngle);
13
+ const translateAttr = DonutHelper.getTranslate(margin, blockSize);
14
+ Aggregator.render(block, chart.data.valueField, innerRadius, translateAttr, thickness, settings.aggregator);
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})`);
22
+ this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart);
23
+ this.renderClonesG(donutBlock);
24
+ }
25
+ static update(block, data, margin, chart, blockSize, donutSettings, keyField) {
26
+ const outerRadius = DonutHelper.getOuterRadius(margin, blockSize);
27
+ const thickness = DonutHelper.getThickness(donutSettings, blockSize, margin);
28
+ const innerRadius = DonutHelper.getInnerRadius(outerRadius, thickness);
29
+ const arcGenerator = DonutHelper.getArcGenerator(outerRadius, innerRadius);
30
+ const pieGenerator = DonutHelper.getPieGenerator(chart.data.valueField.name, donutSettings.padAngle);
31
+ const oldData = block
32
+ .getSvg()
33
+ .selectAll(`.${this.donutBlockClass}`)
34
+ .selectAll("path")
35
+ .data()
36
+ .map((d) => d.data);
37
+ const dataNewZeroRows = DonutHelper.mergeDataWithZeros(
38
+ data,
39
+ oldData,
40
+ keyField,
41
+ ColorReader.getChartColorField(chart)
42
+ );
43
+ const dataExtraZeroRows = DonutHelper.mergeDataWithZeros(
44
+ oldData,
45
+ data,
46
+ keyField,
47
+ ColorReader.getChartColorField(chart)
48
+ );
49
+ const donutBlock = block.getSvg().select(`.${this.donutBlockClass}`);
50
+ this.renderNewArcItems(arcGenerator, pieGenerator, donutBlock, dataNewZeroRows, chart);
51
+ const path = this.getAllArcGroups(block).data(pieGenerator(dataExtraZeroRows)).select("path");
52
+ const items = this.getAllArcGroups(block).data(pieGenerator(data));
53
+ this.setElementsColor(this.getAllArcGroups(block), chart);
54
+ return new Promise((resolve) => {
55
+ this.raiseClonesG(block);
56
+ path.interrupt()
57
+ .transition()
58
+ .duration(block.transitionManager.durations.chartUpdate)
59
+ .on("end", () => {
60
+ items.exit().remove();
61
+ resolve("updated");
62
+ })
63
+ .attrTween("d", function (d) {
64
+ const interpolateFunc = interpolate(this._currentData, d);
65
+ return (t) => {
66
+ this._currentData = interpolateFunc(t); // _current - старые данные до обновления, задаются во время рендера
67
+ return arcGenerator(this._currentData);
68
+ };
69
+ });
70
+ });
71
+ }
72
+ static updateColors(block, chart) {
73
+ this.setElementsColor(this.getAllArcGroups(block), chart);
74
+ }
75
+ static getAllArcGroups(block) {
76
+ return block.getSvg().selectAll(`.${this.arcItemClass}`);
77
+ }
78
+ static getAllArcClones(block) {
79
+ return block.getSvg().selectAll(`.${Donut.arcCloneClass}`);
80
+ }
81
+ static getAllArcShadows(block) {
82
+ return block.getSvg().selectAll(`.${this.arcShadowClass}`);
83
+ }
84
+ static renderNewArcItems(arcGenerator, pieGenerator, donutBlock, data, chart) {
85
+ const items = donutBlock
86
+ .selectAll(`.${this.arcItemClass}`)
87
+ .data(pieGenerator(data))
88
+ .enter()
89
+ .append("g")
90
+ .attr("class", this.arcItemClass);
91
+ const arcs = items
92
+ .append("path")
93
+ .attr("d", arcGenerator)
94
+ .attr("class", this.arcPathClass)
95
+ .each(function (d) {
96
+ this._currentData = d;
97
+ }); // _currentData используется для получения текущих данных внутри функции обновления.
98
+ DomHelper.setCssClasses(arcs, chart.cssClasses);
99
+ this.setElementsColor(items, chart);
100
+ }
101
+ static setElementsColor(arcItems, chart) {
102
+ arcItems.select("path").style("fill", ({ data }, i) => ColorReader.getColorForArc(data, chart, i));
103
+ }
104
+ /**
105
+ * Рендер группы для клонов сегментов доната внутри donut-block. Объекдиняет в себе стили для клонов
106
+ */
107
+ static renderClonesG(donutBlock) {
108
+ const clonesShadowsG = donutBlock.append("g").attr("class", this.arcShadowsGroupClass).raise();
109
+ const clonesG = donutBlock.append("g").attr("class", this.arcClonesGroupClass).raise();
110
+ // ElementHighlighter.setShadowFilter(clonesG);
111
+ }
112
+ static raiseClonesG(block) {
113
+ block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcShadowsGroupClass}`).raise();
114
+ block.getSvg().select(`.${this.donutBlockClass}`).select(`.${this.arcClonesGroupClass}`).raise();
115
+ }
106
116
  }
107
117
  Donut.donutBlockClass = "donut-block";
108
118
  Donut.arcPathClass = "arc-path";
@@ -1,15 +1,15 @@
1
1
  import { LegendPosition } from "../../../model/model";
2
2
  import { Block } from "../../block/block";
3
3
  interface PolarRecordOverflowAlertOptions {
4
- hidedRecordsAmount: number;
5
- legendPosition: LegendPosition;
4
+ hidedRecordsAmount: number;
5
+ legendPosition: LegendPosition;
6
6
  }
7
7
  declare class PolarRecordOverflowAlertClass {
8
- private readonly text;
9
- render(block: Block, options: PolarRecordOverflowAlertOptions): void;
10
- update(block: Block, options: PolarRecordOverflowAlertOptions): void;
11
- private buildCoreOptions;
12
- private getPositionAttrs;
8
+ private readonly text;
9
+ render(block: Block, options: PolarRecordOverflowAlertOptions): void;
10
+ update(block: Block, options: PolarRecordOverflowAlertOptions): void;
11
+ private buildCoreOptions;
12
+ private getPositionAttrs;
13
13
  }
14
14
  export declare const PolarRecordOverflowAlert: PolarRecordOverflowAlertClass;
15
15
  export {};
@@ -1,40 +1,40 @@
1
1
  import { RecordOverflowAlertCore } from "../../features/recordOverflowAlert/recordOverflowAlertCore";
2
2
  class PolarRecordOverflowAlertClass {
3
- constructor() {
4
- this.text = {
5
- one: "категория",
6
- twoToFour: "категории",
7
- tenToTwenty: "категорий",
8
- other: "категорий"
9
- };
10
- }
11
- render(block, options) {
12
- RecordOverflowAlertCore.render(block, this.buildCoreOptions(options));
13
- }
14
- update(block, options) {
15
- RecordOverflowAlertCore.update(block, this.buildCoreOptions(options));
16
- }
17
- buildCoreOptions(options) {
18
- return {
19
- hidedRecordsAmount: options.hidedRecordsAmount,
20
- text: this.text,
21
- positionAttrs: this.getPositionAttrs(options)
22
- };
23
- }
24
- getPositionAttrs(options) {
25
- const position = options.legendPosition === "off" ? "bottom" : options.legendPosition;
26
- if (position === "right") {
27
- return {
28
- bottom: "0",
29
- right: "0"
30
- };
31
- }
32
- if (position === "bottom") {
33
- return {
34
- bottom: "0",
35
- left: "0"
36
- };
37
- }
38
- }
3
+ constructor() {
4
+ this.text = {
5
+ one: "категория",
6
+ twoToFour: "категории",
7
+ tenToTwenty: "категорий",
8
+ other: "категорий"
9
+ };
10
+ }
11
+ render(block, options) {
12
+ RecordOverflowAlertCore.render(block, this.buildCoreOptions(options));
13
+ }
14
+ update(block, options) {
15
+ RecordOverflowAlertCore.update(block, this.buildCoreOptions(options));
16
+ }
17
+ buildCoreOptions(options) {
18
+ return {
19
+ hidedRecordsAmount: options.hidedRecordsAmount,
20
+ text: this.text,
21
+ positionAttrs: this.getPositionAttrs(options)
22
+ };
23
+ }
24
+ getPositionAttrs(options) {
25
+ const position = options.legendPosition === "off" ? "bottom" : options.legendPosition;
26
+ if (position === "right") {
27
+ return {
28
+ bottom: "0",
29
+ right: "0"
30
+ };
31
+ }
32
+ if (position === "bottom") {
33
+ return {
34
+ bottom: "0",
35
+ left: "0"
36
+ };
37
+ }
38
+ }
39
39
  }
40
40
  export const PolarRecordOverflowAlert = new PolarRecordOverflowAlertClass();
@@ -5,9 +5,9 @@ import { MdtChartsDataSource } from "../../config/config";
5
5
  import { ChartContentManager } from "../contentManager/contentManagerFactory";
6
6
  import { FilterEventManager } from "../filterManager/filterEventManager";
7
7
  export declare class PolarManager implements ChartContentManager {
8
- render(engine: Engine, model: Model<PolarOptionsModel>): void;
9
- updateData(block: Block, model: Model<PolarOptionsModel>, data: MdtChartsDataSource): void;
10
- updateColors(block: Block, model: Model<PolarOptionsModel>): void;
11
- clearSelection(filterEventManager: FilterEventManager, model: Model<PolarOptionsModel>): void;
12
- private renderCharts;
8
+ render(engine: Engine, model: Model<PolarOptionsModel>): void;
9
+ updateData(block: Block, model: Model<PolarOptionsModel>, data: MdtChartsDataSource): void;
10
+ updateColors(block: Block, model: Model<PolarOptionsModel>): void;
11
+ clearSelection(filterEventManager: FilterEventManager, model: Model<PolarOptionsModel>): void;
12
+ private renderCharts;
13
13
  }