mdt-charts 1.28.1 → 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
@@ -6,98 +6,123 @@ import { LegendEventsManager } from "./legendEventsManager";
6
6
  import { LegendHelper } from "./legendHelper";
7
7
  import { LegendMarkerCreator } from "./legendMarkerCreator";
8
8
  export class Legend {
9
- constructor() {
10
- this.markerCreator = new LegendMarkerCreator();
11
- }
12
- static get() {
13
- return new Legend();
14
- }
15
- render(block, data, options, model) {
16
- if (options.legend.position !== "off") {
17
- const legendObject = this.renderObject(block, options.legend.position, model.otherComponents.legendBlock, model.blockCanvas.size);
18
- this.setContent(block, data, options, legendObject, model.otherComponents.legendBlock);
19
- }
20
- }
21
- update(block, data, model) {
22
- if (model.options.legend.position !== "off") {
23
- const legendObject = this.getObject(block);
24
- const legendCoordinate = LegendHelper.getLegendCoordinateByPosition(model.options.legend.position, model.otherComponents.legendBlock, model.blockCanvas.size);
25
- this.fillCoordinate(legendObject, legendCoordinate);
26
- this.removeContent(legendObject);
27
- this.setContent(block, data, model.options, legendObject, model.otherComponents.legendBlock);
28
- }
29
- }
30
- updateColors(block, options) {
31
- if (options.type === "polar" && ColorReader.isNeedReadFromData(options.charts[0]))
32
- return;
33
- const legendObject = this.getObject(block);
34
- const colors = LegendHelper.getMarksColor(options);
35
- const itemWrappers = legendObject.selectAll(`.${Legend.itemClass}`);
36
- const markerCreator = this.markerCreator;
37
- itemWrappers.each(function (d, i) {
38
- const selection = select(this);
39
- markerCreator.updateColorForItem(selection, Object.assign(Object.assign({}, d), { color: colors[i % colors.length] }));
40
- });
41
- }
42
- static getItemsByKeys(block, keys, condition = SelectionCondition.Include) {
43
- return block
44
- .getSvg()
45
- .selectAll(`.${this.itemClass}`)
46
- .filter((d) => {
47
- const index = keys.findIndex((k) => k === d.textContent);
48
- return condition === SelectionCondition.Include ? index !== -1 : index === -1;
49
- });
50
- }
51
- setContent(block, data, options, legendObject, legendBlockModel) {
52
- const items = LegendHelper.getLegendItemsContent(options, data);
53
- const colors = LegendHelper.getMarksColor(options, data[options.data.dataSource]);
54
- const renderingOptions = LegendHelper.getContentRenderingOptions(options.type, options.legend.position, legendBlockModel);
55
- const itemBlocks = this.renderContent(legendObject, items, colors, renderingOptions);
56
- if (options.type === "polar") {
57
- LegendEventsManager.setListeners(block, options.data.keyField.name, itemBlocks, options.selectable);
58
- }
59
- else {
60
- LegendDomHelper.setItemsTitles(itemBlocks);
61
- }
62
- }
63
- renderObject(block, legendPosition, legendBlockModel, blockSize) {
64
- const legendObject = block.getSvg().append("foreignObject").attr("class", Legend.objectClass);
65
- const legendCoordinate = LegendHelper.getLegendCoordinateByPosition(legendPosition, legendBlockModel, blockSize);
66
- this.fillCoordinate(legendObject, legendCoordinate);
67
- return legendObject;
68
- }
69
- renderContent(foreignObject, items, colorPalette, options) {
70
- const wrapper = foreignObject.append("xhtml:div");
71
- wrapper.classed(options.wrapperClasses.join(" "), true);
72
- const itemWrappers = wrapper.selectAll(`.${Legend.itemClass}`).data(items).enter().append("div");
73
- itemWrappers.classed(options.itemsOptions.wrapperClasses.join(" "), true);
74
- const markerCreator = this.markerCreator;
75
- itemWrappers.each(function (d, i) {
76
- const selection = select(this);
77
- const markers = markerCreator.create(selection, Object.assign(Object.assign({}, d), { color: colorPalette[i % colorPalette.length] }));
78
- markers.classed(options.itemsOptions.markerClass, true);
79
- });
80
- itemWrappers
81
- .append("span")
82
- .attr("class", options.itemsOptions.labelClass)
83
- .text((d) => d.textContent);
84
- if (options.shouldCropLabels)
85
- LegendDomHelper.decreaseRowLabels(foreignObject, itemWrappers, options.blockModel.static);
86
- return itemWrappers;
87
- }
88
- getObject(block) {
89
- return block.getSvg().select(`foreignObject.${Legend.objectClass}`);
90
- }
91
- removeContent(legendObject) {
92
- legendObject.select(`.${Legend.legendBlockClass}`).remove();
93
- }
94
- fillCoordinate(legendBlock, coordinate) {
95
- legendBlock
96
- .attr("x", coordinate.x)
97
- .attr("y", coordinate.y)
98
- .attr("width", coordinate.width)
99
- .attr("height", coordinate.height);
100
- }
9
+ constructor() {
10
+ this.markerCreator = new LegendMarkerCreator();
11
+ }
12
+ static get() {
13
+ return new Legend();
14
+ }
15
+ render(block, data, options, model) {
16
+ if (options.legend.position !== "off") {
17
+ const legendObject = this.renderObject(
18
+ block,
19
+ options.legend.position,
20
+ model.otherComponents.legendBlock,
21
+ model.blockCanvas.size
22
+ );
23
+ this.setContent(block, data, options, legendObject, model.otherComponents.legendBlock);
24
+ }
25
+ }
26
+ update(block, data, model) {
27
+ if (model.options.legend.position !== "off") {
28
+ const legendObject = this.getObject(block);
29
+ const legendCoordinate = LegendHelper.getLegendCoordinateByPosition(
30
+ model.options.legend.position,
31
+ model.otherComponents.legendBlock,
32
+ model.blockCanvas.size
33
+ );
34
+ this.fillCoordinate(legendObject, legendCoordinate);
35
+ this.removeContent(legendObject);
36
+ this.setContent(block, data, model.options, legendObject, model.otherComponents.legendBlock);
37
+ }
38
+ }
39
+ updateColors(block, options) {
40
+ if (options.type === "polar" && ColorReader.isNeedReadFromData(options.charts[0])) return;
41
+ const legendObject = this.getObject(block);
42
+ const colors = LegendHelper.getMarksColor(options);
43
+ const itemWrappers = legendObject.selectAll(`.${Legend.itemClass}`);
44
+ const markerCreator = this.markerCreator;
45
+ itemWrappers.each(function (d, i) {
46
+ const selection = select(this);
47
+ markerCreator.updateColorForItem(
48
+ selection,
49
+ Object.assign(Object.assign({}, d), {
50
+ color: colors[i % colors.length]
51
+ })
52
+ );
53
+ });
54
+ }
55
+ static getItemsByKeys(block, keys, condition = SelectionCondition.Include) {
56
+ return block
57
+ .getSvg()
58
+ .selectAll(`.${this.itemClass}`)
59
+ .filter((d) => {
60
+ const index = keys.findIndex((k) => k === d.textContent);
61
+ return condition === SelectionCondition.Include ? index !== -1 : index === -1;
62
+ });
63
+ }
64
+ setContent(block, data, options, legendObject, legendBlockModel) {
65
+ const items = LegendHelper.getLegendItemsContent(options, data);
66
+ const colors = LegendHelper.getMarksColor(options, data[options.data.dataSource]);
67
+ const renderingOptions = LegendHelper.getContentRenderingOptions(
68
+ options.type,
69
+ options.legend.position,
70
+ legendBlockModel
71
+ );
72
+ const itemBlocks = this.renderContent(legendObject, items, colors, renderingOptions);
73
+ if (options.type === "polar") {
74
+ LegendEventsManager.setListeners(block, options.data.keyField.name, itemBlocks, options.selectable);
75
+ } else {
76
+ LegendDomHelper.setItemsTitles(itemBlocks);
77
+ }
78
+ }
79
+ renderObject(block, legendPosition, legendBlockModel, blockSize) {
80
+ const legendObject = block.getSvg().append("foreignObject").attr("class", Legend.objectClass);
81
+ const legendCoordinate = LegendHelper.getLegendCoordinateByPosition(
82
+ legendPosition,
83
+ legendBlockModel,
84
+ blockSize
85
+ );
86
+ this.fillCoordinate(legendObject, legendCoordinate);
87
+ return legendObject;
88
+ }
89
+ renderContent(foreignObject, items, colorPalette, options) {
90
+ const wrapper = foreignObject.append("xhtml:div");
91
+ wrapper.classed(options.wrapperClasses.join(" "), true);
92
+ const itemWrappers = wrapper.selectAll(`.${Legend.itemClass}`).data(items).enter().append("div");
93
+ itemWrappers.classed(options.itemsOptions.wrapperClasses.join(" "), true);
94
+ const markerCreator = this.markerCreator;
95
+ itemWrappers.each(function (d, i) {
96
+ const selection = select(this);
97
+ const markers = markerCreator.create(
98
+ selection,
99
+ Object.assign(Object.assign({}, d), {
100
+ color: colorPalette[i % colorPalette.length]
101
+ })
102
+ );
103
+ markers.classed(options.itemsOptions.markerClass, true);
104
+ });
105
+ itemWrappers
106
+ .append("span")
107
+ .attr("class", options.itemsOptions.labelClass)
108
+ .text((d) => d.textContent);
109
+ if (options.shouldCropLabels)
110
+ LegendDomHelper.decreaseRowLabels(foreignObject, itemWrappers, options.blockModel.static);
111
+ return itemWrappers;
112
+ }
113
+ getObject(block) {
114
+ return block.getSvg().select(`foreignObject.${Legend.objectClass}`);
115
+ }
116
+ removeContent(legendObject) {
117
+ legendObject.select(`.${Legend.legendBlockClass}`).remove();
118
+ }
119
+ fillCoordinate(legendBlock, coordinate) {
120
+ legendBlock
121
+ .attr("x", coordinate.x)
122
+ .attr("y", coordinate.y)
123
+ .attr("width", coordinate.width)
124
+ .attr("height", coordinate.height);
125
+ }
101
126
  }
102
127
  Legend.objectClass = "legend-object";
103
128
  Legend.labelClass = "legend-label";
@@ -3,10 +3,17 @@ import { ChartLegendEngineModel } from "./legendHelper";
3
3
  import { StaticLegendBlockCanvas } from "../../../designer/designerConfig";
4
4
  export declare type LegendItemSelection = Selection<HTMLDivElement, ChartLegendEngineModel, BaseType, unknown>;
5
5
  export declare class LegendDomHelper {
6
- static setItemsTitles(items: LegendItemSelection): void;
7
- static decreaseRowLabels(legendBlock: Selection<SVGForeignObjectElement, unknown, HTMLElement, any>, items: LegendItemSelection, staticLegend: StaticLegendBlockCanvas): void;
8
- /** @deprecated */
9
- static cropRowLabels(legendBlock: Selection<SVGForeignObjectElement, unknown, HTMLElement, any>, items: LegendItemSelection): void;
10
- private static getItemsRightMargins;
11
- private static getItemsWidth;
6
+ static setItemsTitles(items: LegendItemSelection): void;
7
+ static decreaseRowLabels(
8
+ legendBlock: Selection<SVGForeignObjectElement, unknown, HTMLElement, any>,
9
+ items: LegendItemSelection,
10
+ staticLegend: StaticLegendBlockCanvas
11
+ ): void;
12
+ /** @deprecated */
13
+ static cropRowLabels(
14
+ legendBlock: Selection<SVGForeignObjectElement, unknown, HTMLElement, any>,
15
+ items: LegendItemSelection
16
+ ): void;
17
+ private static getItemsRightMargins;
18
+ private static getItemsWidth;
12
19
  }
@@ -4,66 +4,67 @@ import { Legend } from "./legend";
4
4
  import { LegendHelper } from "./legendHelper";
5
5
  import { getNewLegendItemWidths } from "./legendWidthCalculator";
6
6
  export class LegendDomHelper {
7
- static setItemsTitles(items) {
8
- items.attr("title", (d) => d.textContent);
9
- }
10
- static decreaseRowLabels(legendBlock, items, staticLegend) {
11
- let itemsRightMargins = this.getItemsRightMargins(items);
12
- const itemConfig = [];
13
- items.nodes().forEach((node, i) => {
14
- itemConfig.push({
15
- width: node.getBoundingClientRect().width,
16
- marginLeft: 0,
17
- marginRight: itemsRightMargins[i]
18
- });
19
- });
20
- const newWidths = getNewLegendItemWidths({
21
- items: itemConfig,
22
- wrapper: {
23
- maxRowsAmount: staticLegend.maxLinesAmount,
24
- width: legendBlock.node().getBoundingClientRect().width
25
- }
26
- });
27
- items.nodes().forEach((node, i) => {
28
- node.style.width = `${newWidths[i]}px`;
29
- });
30
- }
31
- /** @deprecated */
32
- static cropRowLabels(legendBlock, items) {
33
- const maxWidth = legendBlock.node().getBoundingClientRect().width;
34
- let itemsLeftMargins = this.getItemsRightMargins(items);
35
- let itemsWidth = this.getItemsWidth(items);
36
- let sumOfItemsWidth = LegendHelper.getSumOfItemsWidths(itemsWidth, itemsLeftMargins);
37
- const maxItemWidth = LegendHelper.getMaxItemWidth(legendBlock.attr("width"), itemsLeftMargins, "row");
38
- let index = 0;
39
- let loopFlag = true; // if at least one label has no text, loop ends
40
- while (sumOfItemsWidth > maxWidth && loopFlag) {
41
- items.nodes().forEach((node) => {
42
- const textBlock = node.querySelector(`.${Legend.labelClass}`);
43
- if (node.getBoundingClientRect().width > maxItemWidth && textBlock.textContent) {
44
- let labelText = index > 0
45
- ? textBlock.textContent.substr(0, textBlock.textContent.length - 3)
46
- : textBlock.textContent;
47
- labelText = labelText.substr(0, labelText.length - 1);
48
- textBlock.textContent = labelText + "...";
49
- itemsLeftMargins = this.getItemsRightMargins(items);
50
- itemsWidth = this.getItemsWidth(items);
51
- sumOfItemsWidth = LegendHelper.getSumOfItemsWidths(itemsWidth, itemsLeftMargins);
52
- if (labelText.length === 0) {
53
- textBlock.textContent = "";
54
- loopFlag = false;
55
- }
56
- }
57
- });
58
- index++;
59
- }
60
- }
61
- static getItemsRightMargins(items) {
62
- return items
63
- .nodes()
64
- .map((node) => Helper.getPXValueFromString(DomHelper.getCssPropertyValue(node, "margin-right")));
65
- }
66
- static getItemsWidth(items) {
67
- return items.nodes().map((node) => node.getBoundingClientRect().width);
68
- }
7
+ static setItemsTitles(items) {
8
+ items.attr("title", (d) => d.textContent);
9
+ }
10
+ static decreaseRowLabels(legendBlock, items, staticLegend) {
11
+ let itemsRightMargins = this.getItemsRightMargins(items);
12
+ const itemConfig = [];
13
+ items.nodes().forEach((node, i) => {
14
+ itemConfig.push({
15
+ width: node.getBoundingClientRect().width,
16
+ marginLeft: 0,
17
+ marginRight: itemsRightMargins[i]
18
+ });
19
+ });
20
+ const newWidths = getNewLegendItemWidths({
21
+ items: itemConfig,
22
+ wrapper: {
23
+ maxRowsAmount: staticLegend.maxLinesAmount,
24
+ width: legendBlock.node().getBoundingClientRect().width
25
+ }
26
+ });
27
+ items.nodes().forEach((node, i) => {
28
+ node.style.width = `${newWidths[i]}px`;
29
+ });
30
+ }
31
+ /** @deprecated */
32
+ static cropRowLabels(legendBlock, items) {
33
+ const maxWidth = legendBlock.node().getBoundingClientRect().width;
34
+ let itemsLeftMargins = this.getItemsRightMargins(items);
35
+ let itemsWidth = this.getItemsWidth(items);
36
+ let sumOfItemsWidth = LegendHelper.getSumOfItemsWidths(itemsWidth, itemsLeftMargins);
37
+ const maxItemWidth = LegendHelper.getMaxItemWidth(legendBlock.attr("width"), itemsLeftMargins, "row");
38
+ let index = 0;
39
+ let loopFlag = true; // if at least one label has no text, loop ends
40
+ while (sumOfItemsWidth > maxWidth && loopFlag) {
41
+ items.nodes().forEach((node) => {
42
+ const textBlock = node.querySelector(`.${Legend.labelClass}`);
43
+ if (node.getBoundingClientRect().width > maxItemWidth && textBlock.textContent) {
44
+ let labelText =
45
+ index > 0
46
+ ? textBlock.textContent.substr(0, textBlock.textContent.length - 3)
47
+ : textBlock.textContent;
48
+ labelText = labelText.substr(0, labelText.length - 1);
49
+ textBlock.textContent = labelText + "...";
50
+ itemsLeftMargins = this.getItemsRightMargins(items);
51
+ itemsWidth = this.getItemsWidth(items);
52
+ sumOfItemsWidth = LegendHelper.getSumOfItemsWidths(itemsWidth, itemsLeftMargins);
53
+ if (labelText.length === 0) {
54
+ textBlock.textContent = "";
55
+ loopFlag = false;
56
+ }
57
+ }
58
+ });
59
+ index++;
60
+ }
61
+ }
62
+ static getItemsRightMargins(items) {
63
+ return items
64
+ .nodes()
65
+ .map((node) => Helper.getPXValueFromString(DomHelper.getCssPropertyValue(node, "margin-right")));
66
+ }
67
+ static getItemsWidth(items) {
68
+ return items.nodes().map((node) => node.getBoundingClientRect().width);
69
+ }
69
70
  }
@@ -1,12 +1,17 @@
1
1
  import { Block } from "../../block/block";
2
2
  import { LegendItemSelection } from "./legendDomHelper";
3
3
  export declare class LegendEventsManager {
4
- /**
5
- * @param block
6
- * @param keyFieldName
7
- * @param legendItems айтемы легенды полара, которые привязаны к ключам
8
- */
9
- static setListeners(block: Block, keyFieldName: string, legendItems: LegendItemSelection, selectable: boolean): void;
10
- private static setHoverListeners;
11
- private static setClickListeners;
4
+ /**
5
+ * @param block
6
+ * @param keyFieldName
7
+ * @param legendItems айтемы легенды полара, которые привязаны к ключам
8
+ */
9
+ static setListeners(
10
+ block: Block,
11
+ keyFieldName: string,
12
+ legendItems: LegendItemSelection,
13
+ selectable: boolean
14
+ ): void;
15
+ private static setHoverListeners;
16
+ private static setClickListeners;
12
17
  }
@@ -2,51 +2,52 @@ import { pointer, select } from "d3-selection";
2
2
  import { ElementHighlighter } from "../../elementHighlighter/elementHighlighter";
3
3
  import { Donut } from "../../polarNotation/donut/donut";
4
4
  export class LegendEventsManager {
5
- /**
6
- * @param block
7
- * @param keyFieldName
8
- * @param legendItems айтемы легенды полара, которые привязаны к ключам
9
- */
10
- static setListeners(block, keyFieldName, legendItems, selectable) {
11
- this.setHoverListeners(block, keyFieldName, legendItems);
12
- if (selectable)
13
- this.setClickListeners(block, keyFieldName, legendItems);
14
- }
15
- static setHoverListeners(block, keyFieldName, legendItems) {
16
- const arcItems = Donut.getAllArcGroups(block);
17
- legendItems.on("mousemove", function (e, keyValue) {
18
- arcItems
19
- .filter((row) => row.data[keyFieldName] === keyValue.textContent)
20
- .dispatch("mousemove", {
21
- bubbles: false,
22
- cancelable: true,
23
- detail: {
24
- pointer: pointer(e, block.getWrapper().node()),
25
- ignoreTranslate: true
26
- }
27
- });
28
- });
29
- legendItems.on("mouseover", function (e, keyValue) {
30
- arcItems.filter((row) => row.data[keyFieldName] === keyValue.textContent).dispatch("mouseover");
31
- ElementHighlighter.toggleActivityStyle(select(this), true);
32
- });
33
- legendItems.on("mouseleave", function (e, keyValue) {
34
- arcItems.filter((row) => row.data[keyFieldName] === keyValue.textContent).dispatch("mouseleave");
35
- if (!block.filterEventManager.isSelected(keyValue.textContent) &&
36
- block.filterEventManager.getSelectedKeys().length > 0)
37
- ElementHighlighter.toggleActivityStyle(select(this), false);
38
- });
39
- }
40
- static setClickListeners(block, keyFieldName, legendItems) {
41
- const arcItems = Donut.getAllArcGroups(block);
42
- legendItems.on("click", (e, keyValue) => {
43
- arcItems
44
- .filter((row) => row.data[keyFieldName] === keyValue.textContent)
45
- .dispatch("click", {
46
- bubbles: false,
47
- cancelable: true,
48
- detail: { multySelect: e.ctrlKey || e.metaKey }
49
- });
50
- });
51
- }
5
+ /**
6
+ * @param block
7
+ * @param keyFieldName
8
+ * @param legendItems айтемы легенды полара, которые привязаны к ключам
9
+ */
10
+ static setListeners(block, keyFieldName, legendItems, selectable) {
11
+ this.setHoverListeners(block, keyFieldName, legendItems);
12
+ if (selectable) this.setClickListeners(block, keyFieldName, legendItems);
13
+ }
14
+ static setHoverListeners(block, keyFieldName, legendItems) {
15
+ const arcItems = Donut.getAllArcGroups(block);
16
+ legendItems.on("mousemove", function (e, keyValue) {
17
+ arcItems
18
+ .filter((row) => row.data[keyFieldName] === keyValue.textContent)
19
+ .dispatch("mousemove", {
20
+ bubbles: false,
21
+ cancelable: true,
22
+ detail: {
23
+ pointer: pointer(e, block.getWrapper().node()),
24
+ ignoreTranslate: true
25
+ }
26
+ });
27
+ });
28
+ legendItems.on("mouseover", function (e, keyValue) {
29
+ arcItems.filter((row) => row.data[keyFieldName] === keyValue.textContent).dispatch("mouseover");
30
+ ElementHighlighter.toggleActivityStyle(select(this), true);
31
+ });
32
+ legendItems.on("mouseleave", function (e, keyValue) {
33
+ arcItems.filter((row) => row.data[keyFieldName] === keyValue.textContent).dispatch("mouseleave");
34
+ if (
35
+ !block.filterEventManager.isSelected(keyValue.textContent) &&
36
+ block.filterEventManager.getSelectedKeys().length > 0
37
+ )
38
+ ElementHighlighter.toggleActivityStyle(select(this), false);
39
+ });
40
+ }
41
+ static setClickListeners(block, keyFieldName, legendItems) {
42
+ const arcItems = Donut.getAllArcGroups(block);
43
+ legendItems.on("click", (e, keyValue) => {
44
+ arcItems
45
+ .filter((row) => row.data[keyFieldName] === keyValue.textContent)
46
+ .dispatch("click", {
47
+ bubbles: false,
48
+ cancelable: true,
49
+ detail: { multySelect: e.ctrlKey || e.metaKey }
50
+ });
51
+ });
52
+ }
52
53
  }
@@ -1,24 +1,49 @@
1
1
  import { ChartNotation, MdtChartsDataRow, MdtChartsDataSource, Size } from "../../../config/config";
2
2
  import { LegendItemsDirection } from "../../../model/featuresModel/legendModel/legendCanvasModel";
3
- import { ChartLegendModel, LegendBlockModel, LegendPosition, Orient, PolarOptionsModel, TwoDimensionalOptionsModel } from "../../../model/model";
3
+ import {
4
+ ChartLegendModel,
5
+ LegendBlockModel,
6
+ LegendPosition,
7
+ Orient,
8
+ PolarOptionsModel,
9
+ TwoDimensionalOptionsModel
10
+ } from "../../../model/model";
4
11
  import { LegendContentRenderingOptions } from "./legend";
5
12
  import { LegendHelperService } from "./legendHelperService";
6
13
  export interface LegendCoordinate {
7
- x: number;
8
- y: number;
9
- height: number;
10
- width: number;
14
+ x: number;
15
+ y: number;
16
+ height: number;
17
+ width: number;
11
18
  }
12
19
  export interface ChartLegendEngineModel extends ChartLegendModel {
13
- textContent: string;
20
+ textContent: string;
14
21
  }
15
22
  export declare class LegendHelper {
16
- static service: LegendHelperService;
17
- static getLegendItemsContent(options: TwoDimensionalOptionsModel | PolarOptionsModel, data: MdtChartsDataSource): ChartLegendEngineModel[];
18
- static getMarksColor(options: TwoDimensionalOptionsModel | PolarOptionsModel, dataRows?: MdtChartsDataRow[]): string[];
19
- static getMaxItemWidth(legendBlockWidth: string, marginsLeft: number[], itemsDirection: LegendItemsDirection): number;
20
- static getSumOfItemsWidths(itemsWidth: number[], marginsLeft: number[]): number;
21
- static getLegendCoordinateByPosition(legendPosition: Orient, legendBlockModel: LegendBlockModel, blockSize: Size): LegendCoordinate;
22
- static getContentRenderingOptions(chartNotation: ChartNotation, legendPosition: LegendPosition, legendBlockModel: LegendBlockModel): LegendContentRenderingOptions;
23
- private static getLegendClassByChartNotation;
23
+ static service: LegendHelperService;
24
+ static getLegendItemsContent(
25
+ options: TwoDimensionalOptionsModel | PolarOptionsModel,
26
+ data: MdtChartsDataSource
27
+ ): ChartLegendEngineModel[];
28
+ static getMarksColor(
29
+ options: TwoDimensionalOptionsModel | PolarOptionsModel,
30
+ dataRows?: MdtChartsDataRow[]
31
+ ): string[];
32
+ static getMaxItemWidth(
33
+ legendBlockWidth: string,
34
+ marginsLeft: number[],
35
+ itemsDirection: LegendItemsDirection
36
+ ): number;
37
+ static getSumOfItemsWidths(itemsWidth: number[], marginsLeft: number[]): number;
38
+ static getLegendCoordinateByPosition(
39
+ legendPosition: Orient,
40
+ legendBlockModel: LegendBlockModel,
41
+ blockSize: Size
42
+ ): LegendCoordinate;
43
+ static getContentRenderingOptions(
44
+ chartNotation: ChartNotation,
45
+ legendPosition: LegendPosition,
46
+ legendBlockModel: LegendBlockModel
47
+ ): LegendContentRenderingOptions;
48
+ private static getLegendClassByChartNotation;
24
49
  }