@eclipse-scout/chart 22.0.39 → 23.1.0-beta.4

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 (112) hide show
  1. package/LICENSE +210 -0
  2. package/dist/d.ts/chart/AbstractChartRenderer.d.ts +48 -0
  3. package/dist/d.ts/chart/AbstractChartRenderer.d.ts.map +1 -0
  4. package/dist/d.ts/chart/AbstractSvgChartRenderer.d.ts +65 -0
  5. package/dist/d.ts/chart/AbstractSvgChartRenderer.d.ts.map +1 -0
  6. package/dist/d.ts/chart/Chart.d.ts +162 -0
  7. package/dist/d.ts/chart/Chart.d.ts.map +1 -0
  8. package/dist/d.ts/chart/ChartAdapter.d.ts +8 -0
  9. package/dist/d.ts/chart/ChartAdapter.d.ts.map +1 -0
  10. package/dist/d.ts/chart/ChartEventMap.d.ts +16 -0
  11. package/dist/d.ts/chart/ChartEventMap.d.ts.map +1 -0
  12. package/dist/d.ts/chart/ChartJsRenderer.d.ts +300 -0
  13. package/dist/d.ts/chart/ChartJsRenderer.d.ts.map +1 -0
  14. package/dist/d.ts/chart/ChartLayout.d.ts +8 -0
  15. package/dist/d.ts/chart/ChartLayout.d.ts.map +1 -0
  16. package/dist/d.ts/chart/ChartModel.d.ts +11 -0
  17. package/dist/d.ts/chart/ChartModel.d.ts.map +1 -0
  18. package/dist/d.ts/chart/FulfillmentChartRenderer.d.ts +22 -0
  19. package/dist/d.ts/chart/FulfillmentChartRenderer.d.ts.map +1 -0
  20. package/dist/d.ts/chart/SalesfunnelChartRenderer.d.ts +61 -0
  21. package/dist/d.ts/chart/SalesfunnelChartRenderer.d.ts.map +1 -0
  22. package/dist/d.ts/chart/SpeedoChartRenderer.d.ts +90 -0
  23. package/dist/d.ts/chart/SpeedoChartRenderer.d.ts.map +1 -0
  24. package/dist/d.ts/chart/VennAsync3Calculator.d.ts +32 -0
  25. package/dist/d.ts/chart/VennAsync3Calculator.d.ts.map +1 -0
  26. package/dist/d.ts/chart/VennChartRenderer.d.ts +36 -0
  27. package/dist/d.ts/chart/VennChartRenderer.d.ts.map +1 -0
  28. package/dist/d.ts/chart/VennCircle.d.ts +20 -0
  29. package/dist/d.ts/chart/VennCircle.d.ts.map +1 -0
  30. package/dist/d.ts/chart/VennCircleHelper.d.ts +13 -0
  31. package/dist/d.ts/chart/VennCircleHelper.d.ts.map +1 -0
  32. package/dist/d.ts/form/fields/chartfield/ChartField.d.ts +11 -0
  33. package/dist/d.ts/form/fields/chartfield/ChartField.d.ts.map +1 -0
  34. package/dist/d.ts/form/fields/chartfield/ChartFieldAdapter.d.ts +4 -0
  35. package/dist/d.ts/form/fields/chartfield/ChartFieldAdapter.d.ts.map +1 -0
  36. package/dist/d.ts/form/fields/chartfield/ChartFieldModel.d.ts +6 -0
  37. package/dist/d.ts/form/fields/chartfield/ChartFieldModel.d.ts.map +1 -0
  38. package/dist/d.ts/index.d.ts +31 -0
  39. package/dist/d.ts/index.d.ts.map +1 -0
  40. package/dist/d.ts/table/controls/ChartTableControl.d.ts +136 -0
  41. package/dist/d.ts/table/controls/ChartTableControl.d.ts.map +1 -0
  42. package/dist/d.ts/table/controls/ChartTableControlAdapter.d.ts +5 -0
  43. package/dist/d.ts/table/controls/ChartTableControlAdapter.d.ts.map +1 -0
  44. package/dist/d.ts/table/controls/ChartTableControlEventMap.d.ts +9 -0
  45. package/dist/d.ts/table/controls/ChartTableControlEventMap.d.ts.map +1 -0
  46. package/dist/d.ts/table/controls/ChartTableControlLayout.d.ts +8 -0
  47. package/dist/d.ts/table/controls/ChartTableControlLayout.d.ts.map +1 -0
  48. package/dist/d.ts/table/controls/ChartTableControlModel.d.ts +9 -0
  49. package/dist/d.ts/table/controls/ChartTableControlModel.d.ts.map +1 -0
  50. package/dist/d.ts/table/controls/ChartTableUserFilter.d.ts +29 -0
  51. package/dist/d.ts/table/controls/ChartTableUserFilter.d.ts.map +1 -0
  52. package/dist/d.ts/table/controls/ChartTableUserFilterModel.d.ts +11 -0
  53. package/dist/d.ts/table/controls/ChartTableUserFilterModel.d.ts.map +1 -0
  54. package/dist/d.ts/tile/ChartFieldTile.d.ts +14 -0
  55. package/dist/d.ts/tile/ChartFieldTile.d.ts.map +1 -0
  56. package/dist/d.ts/tile/ChartFieldTileAdapter.d.ts +4 -0
  57. package/dist/d.ts/tile/ChartFieldTileAdapter.d.ts.map +1 -0
  58. package/dist/d.ts/tile/ChartFieldTileModel.d.ts +6 -0
  59. package/dist/d.ts/tile/ChartFieldTileModel.d.ts.map +1 -0
  60. package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js +3 -0
  61. package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js.map +1 -0
  62. package/dist/eclipse-scout-chart-theme-dark-89bcf2022056cbf8e371.min.css +1 -0
  63. package/dist/eclipse-scout-chart-theme-dark.css +1 -1
  64. package/dist/eclipse-scout-chart-theme-dark.css.map +1 -1
  65. package/dist/eclipse-scout-chart-theme-e25b5923d4dba5f5ca7e.min.css +1 -0
  66. package/dist/eclipse-scout-chart-theme.css +1 -1
  67. package/dist/eclipse-scout-chart-theme.css.map +1 -1
  68. package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js +3 -0
  69. package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js.map +1 -0
  70. package/dist/eclipse-scout-chart.esm.js +6919 -0
  71. package/dist/eclipse-scout-chart.esm.js.map +1 -0
  72. package/dist/eclipse-scout-chart.js +683 -15122
  73. package/dist/eclipse-scout-chart.js.map +1 -1
  74. package/dist/file-list +8 -5
  75. package/dist/texts.json +17 -17
  76. package/package.json +21 -15
  77. package/src/chart/{AbstractChartRenderer.js → AbstractChartRenderer.ts} +31 -25
  78. package/src/chart/{AbstractSvgChartRenderer.js → AbstractSvgChartRenderer.ts} +78 -43
  79. package/src/chart/{Chart.js → Chart.ts} +153 -62
  80. package/src/chart/ChartAdapter.ts +27 -0
  81. package/src/chart/ChartEventMap.ts +27 -0
  82. package/src/chart/{ChartJsRenderer.js → ChartJsRenderer.ts} +367 -351
  83. package/src/chart/{ChartLayout.js → ChartLayout.ts} +9 -8
  84. package/src/chart/ChartModel.ts +21 -0
  85. package/src/chart/{FulfillmentChartRenderer.js → FulfillmentChartRenderer.ts} +21 -18
  86. package/src/chart/{SalesfunnelChartRenderer.js → SalesfunnelChartRenderer.ts} +96 -59
  87. package/src/chart/{SpeedoChartRenderer.js → SpeedoChartRenderer.ts} +61 -39
  88. package/src/chart/{VennAsync3Calculator.js → VennAsync3Calculator.ts} +37 -13
  89. package/src/chart/{VennChartRenderer.js → VennChartRenderer.ts} +58 -34
  90. package/src/chart/{VennCircle.js → VennCircle.ts} +22 -15
  91. package/src/chart/{VennCircleHelper.js → VennCircleHelper.ts} +15 -9
  92. package/src/form/fields/chartfield/{ChartField.js → ChartField.ts} +11 -5
  93. package/src/form/fields/chartfield/{ChartFieldAdapter.js → ChartFieldAdapter.ts} +3 -8
  94. package/src/form/fields/chartfield/ChartFieldModel.ts +16 -0
  95. package/src/index.ts +46 -0
  96. package/src/table/controls/{ChartTableControl.js → ChartTableControl.ts} +160 -120
  97. package/src/table/controls/{ChartTableControlAdapter.js → ChartTableControlAdapter.ts} +3 -4
  98. package/src/table/controls/ChartTableControlEventMap.ts +19 -0
  99. package/src/table/controls/{ChartTableControlLayout.js → ChartTableControlLayout.ts} +7 -5
  100. package/src/table/controls/ChartTableControlModel.ts +19 -0
  101. package/src/table/controls/{ChartTableUserFilter.js → ChartTableUserFilter.ts} +25 -12
  102. package/src/table/controls/ChartTableUserFilterModel.ts +19 -0
  103. package/src/tile/{ChartFieldTile.js → ChartFieldTile.ts} +14 -8
  104. package/src/tile/{ChartFieldTileAdapter.js → ChartFieldTileAdapter.ts} +3 -7
  105. package/src/tile/ChartFieldTileModel.ts +16 -0
  106. package/dist/eclipse-scout-chart-bc08151d11e1909eff6c.min.js +0 -3
  107. package/dist/eclipse-scout-chart-bc08151d11e1909eff6c.min.js.LICENSE.txt +0 -6
  108. package/dist/eclipse-scout-chart-bc08151d11e1909eff6c.min.js.map +0 -1
  109. package/dist/eclipse-scout-chart-theme-79622289bda68b525e3e.min.css +0 -1
  110. package/dist/eclipse-scout-chart-theme-dark-1de09c03e3dc40a9529a.min.css +0 -1
  111. package/src/chart/ChartAdapter.js +0 -30
  112. package/src/index.js +0 -36
@@ -1,20 +1,35 @@
1
1
  /*
2
- * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
6
- * http://www.eclipse.org/legal/epl-v10.html
6
+ * https://www.eclipse.org/legal/epl-v10.html
7
7
  *
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {numbers, RoundingMode} from '@eclipse-scout/core';
12
- import {AbstractSvgChartRenderer} from '../index';
11
+ import {EnumObject, numbers, RoundingMode} from '@eclipse-scout/core';
12
+ import {AbstractSvgChartRenderer, Chart} from '../index';
13
13
 
14
- export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
14
+ export class SpeedoChartRenderer extends AbstractSvgChartRenderer {
15
15
 
16
- constructor(chart) {
16
+ segmentSelectorForAnimation: string;
17
+
18
+ r: number;
19
+ scaleWeight: number;
20
+ my: number;
21
+ parts: number;
22
+ numSegmentsPerPart: number;
23
+ segmentWidth: number;
24
+ widthOfSegmentWithGap: number;
25
+ animationTriggered: boolean;
26
+
27
+ $filledParts: JQuery<SVGElement>[];
28
+ $pointer: JQuery<SVGElement>;
29
+
30
+ constructor(chart: Chart) {
17
31
  super(chart);
32
+
18
33
  this.segmentSelectorForAnimation = '.pointer';
19
34
  this.suppressLegendBox = true;
20
35
 
@@ -32,7 +47,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
32
47
  LEFT: 'left',
33
48
  CENTER: 'center',
34
49
  RIGHT: 'right'
35
- };
50
+ } as const;
36
51
 
37
52
  static NUM_PARTS_GREEN_CENTER = 7;
38
53
  static NUM_PARTS_GREEN_EDGE = 4;
@@ -47,7 +62,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
47
62
 
48
63
  static SEGMENT_GAP = 0.0103; // space between two segments (lines)
49
64
 
50
- _validate() {
65
+ protected override _validate(): boolean {
51
66
  let chartData = this.chart.data;
52
67
  let chartConfig = this.chart.config;
53
68
  if (!chartData ||
@@ -61,11 +76,11 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
61
76
  return true;
62
77
  }
63
78
 
64
- _renderInternal() {
79
+ protected override _renderInternal() {
65
80
  let chartData = this.chart.data,
66
- minValue = chartData.chartValueGroups[0].values[0],
67
- maxValue = chartData.chartValueGroups[0].values[2],
68
- value = chartData.chartValueGroups[0].values[1];
81
+ minValue = chartData.chartValueGroups[0].values[0] as number,
82
+ maxValue = chartData.chartValueGroups[0].values[2] as number,
83
+ value = chartData.chartValueGroups[0].values[1] as number;
69
84
 
70
85
  // radius of the scale
71
86
  this.r = Math.min(this.chartBox.height, this.chartBox.width / 2) * 0.7;
@@ -95,10 +110,10 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
95
110
  this.widthOfSegmentWithGap = this.segmentWidth + SpeedoChartRenderer.SEGMENT_GAP;
96
111
 
97
112
  // pointer value in range [0,1]
98
- let valuePercentage = this._limitValue((value - minValue) / (maxValue - minValue), 1);
113
+ let valuePercentage = this._getValuePercentage(value, minValue, maxValue);
99
114
 
100
- // value in the range [0,1] rounded to one segment
101
- let segmentToPointAt = Math.round(valuePercentage * numTotalGaps);
115
+ // value in the range [0,numTotalSegments - 1] rounded to one segment
116
+ let segmentToPointAt = this._getSegmentToPointAt(valuePercentage, numTotalSegments);
102
117
 
103
118
  // value rounded to the closest segment so that the pointer never stays "in between" two segments but always on a segment
104
119
  let valuePercentageRounded = this._getPercentageValueOfSegment(segmentToPointAt % this.numSegmentsPerPart,
@@ -113,11 +128,19 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
113
128
 
114
129
  this.$svg.addClass('speedo-chart-svg');
115
130
  if (this.chart.config.options.clickable) {
116
- this.$svg.on('click', this._createClickObject(null, null), this.chart._onValueClick.bind(this.chart));
131
+ this.$svg.on('click', this._createClickObject(null, null), e => this.chart.handleValueClick(e.data));
117
132
  }
118
133
  }
119
134
 
120
- _limitValue(value, maxValue) {
135
+ protected _getValuePercentage(value: number, minValue: number, maxValue: number): number {
136
+ return this._limitValue((value - minValue) / (maxValue - minValue), 1);
137
+ }
138
+
139
+ protected _getSegmentToPointAt(valuePercentage: number, numTotalSegments: number): number {
140
+ return this._limitValue(Math.floor(valuePercentage * numTotalSegments), numTotalSegments - 1);
141
+ }
142
+
143
+ protected _limitValue(value: number, maxValue: number): number {
121
144
  value = Math.max(value, 0); // cannot be < 0
122
145
  value = Math.min(value, maxValue); // cannot be > maxValue
123
146
  return value;
@@ -126,7 +149,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
126
149
  /**
127
150
  * Gets the percentage value in range [0,1] of the specified segment.
128
151
  */
129
- _getPercentageValueOfSegment(segmentIndexInPart, part) {
152
+ protected _getPercentageValueOfSegment(segmentIndexInPart: number, part: number): number {
130
153
  // get the segment position
131
154
  let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);
132
155
 
@@ -140,7 +163,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
140
163
  /**
141
164
  * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments
142
165
  */
143
- _renderPointer(valuePercentage) {
166
+ protected _renderPointer(valuePercentage: number) {
144
167
  this.$pointer = this.$svg.appendSVG('path', 'pointer')
145
168
  .attr('d', this._pathPointer(0))
146
169
  .attr('data-end', valuePercentage)
@@ -168,7 +191,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
168
191
  /**
169
192
  * renders a single segment line.
170
193
  */
171
- _renderSegment(from, to, colorClass) {
194
+ protected _renderSegment(from: number, to: number, colorClass: string): JQuery<SVGElement> {
172
195
  return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)
173
196
  .attr('id', 'ArcAxisWide' + this.chart.id)
174
197
  .attr('fill', 'none')
@@ -176,7 +199,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
176
199
  .attr('d', this._pathSegment(from, to));
177
200
  }
178
201
 
179
- _renderCirclePart(part) {
202
+ protected _renderCirclePart(part: number) {
180
203
  let colorClass = this._getColorForPart(part);
181
204
  // render 'empty' segments
182
205
  for (let i = 0; i < this.numSegmentsPerPart; i++) {
@@ -188,7 +211,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
188
211
  this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default
189
212
  }
190
213
 
191
- _renderLegend(minValue, value, maxValue, groupName) {
214
+ protected _renderLegend(minValue: number, value: number, maxValue: number, groupName: string) {
192
215
  let minMaxLegendFontSize = this.scaleWeight * 0.8,
193
216
  padding = 5, // same as in AbstractChartRenderer#_renderWireLegend
194
217
  labelYPos = this.my + padding,
@@ -202,7 +225,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
202
225
  h: 1
203
226
  },
204
227
  minLegendValue = minValue ? this._formatValue(minValue) : 0,
205
- legendValue = value ? this._formatValue(value) : 0,
228
+ legendValue = value ? this._formatValue(value) : '' + 0,
206
229
  maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;
207
230
 
208
231
  // tooltip for min/max value
@@ -231,8 +254,8 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
231
254
  };
232
255
  mouseOut();
233
256
  this.$svg
234
- .mouseenter(mouseIn)
235
- .mouseleave(mouseOut);
257
+ .on('mouseenter', mouseIn)
258
+ .on('mouseleave', mouseOut);
236
259
  }
237
260
 
238
261
  // actual value
@@ -246,7 +269,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
246
269
  /**
247
270
  * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].
248
271
  */
249
- _getPartForValue(valuePercentage) {
272
+ protected _getPartForValue(valuePercentage: number): number {
250
273
  let part = Math.floor(valuePercentage * this.parts);
251
274
  return this._limitValue(part, this.parts - 1);
252
275
  }
@@ -258,7 +281,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
258
281
  * 10 to 999 thousand: 123k
259
282
  * >= 1 million: millions with max. two fraction digits -> 1.23M
260
283
  */
261
- _formatValue(value) {
284
+ protected _formatValue(value: number): string {
262
285
  if (value < SpeedoChartRenderer.TEN_THOUSAND) {
263
286
  return this.session.locale.decimalFormat.format(value);
264
287
  }
@@ -273,7 +296,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
273
296
  /**
274
297
  * Updates the pointer position to point to the specified valuePercentage in range [0,1].
275
298
  */
276
- _updatePointer(valuePercentage) {
299
+ protected _updatePointer(valuePercentage: number) {
277
300
  this.$pointer
278
301
  .attr('d', this._pathPointer(valuePercentage))
279
302
  .removeClass('red yellow light-green dark-green')
@@ -283,13 +306,13 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
283
306
  /**
284
307
  * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].
285
308
  */
286
- _updatePartsFill(valuePercentage) {
309
+ protected _updatePartsFill(valuePercentage: number) {
287
310
  let from, to;
288
311
  for (let part = 0; part < this.$filledParts.length; part++) {
289
- from = this._calcSegmentPos(0, part, this.segmentWidth).from;
312
+ from = this._calcSegmentPos(0, part).from;
290
313
  if ((part + 1) / this.parts < valuePercentage) {
291
314
  // the current part is smaller than the value: completely filled part
292
- to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part, this.segmentWidth).to;
315
+ to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part).to;
293
316
  } else if (part / this.parts > valuePercentage) {
294
317
  // the current part is bigger than the speedo-value: hide element
295
318
  from = SpeedoChartRenderer.ARC_MIN;
@@ -307,7 +330,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
307
330
  * @param segmentIndexInPart the index of the segment line within the part.
308
331
  * @param part the part index.
309
332
  */
310
- _calcSegmentPos(segmentIndexInPart, part) {
333
+ protected _calcSegmentPos(segmentIndexInPart: number, part: number): { from: number; to: number } {
311
334
  let result = {
312
335
  from: 0,
313
336
  to: 0
@@ -318,7 +341,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
318
341
  return result;
319
342
  }
320
343
 
321
- _getColorForPart(part) {
344
+ protected _getColorForPart(part: number): string {
322
345
  let position = this.chart.config.options.speedo.greenAreaPosition;
323
346
  switch (position) {
324
347
  case SpeedoChartRenderer.Position.LEFT:
@@ -370,7 +393,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
370
393
  /**
371
394
  * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.
372
395
  */
373
- _pathSegment(start, end) {
396
+ protected _pathSegment(start: number, end: number): string {
374
397
  let s = start * 2 * Math.PI,
375
398
  e = end * 2 * Math.PI,
376
399
  pathString = '';
@@ -390,7 +413,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
390
413
  /**
391
414
  * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer
392
415
  */
393
- _pathPointer(valuePercentage) {
416
+ protected _pathPointer(valuePercentage: number): string {
394
417
  let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;
395
418
  let s = point * 2 * Math.PI,
396
419
  pointerOuterR = this.r - (1.4 * this.scaleWeight),
@@ -403,10 +426,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
403
426
  return pathString;
404
427
  }
405
428
 
406
- /**
407
- * @override
408
- */
409
- _removeAnimated(afterRemoveFunc) {
429
+ protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {
410
430
  if (this.animationTriggered) {
411
431
  return;
412
432
  }
@@ -429,3 +449,5 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
429
449
  });
430
450
  }
431
451
  }
452
+
453
+ export type GreenAreaPosition = EnumObject<typeof SpeedoChartRenderer.Position>;
@@ -1,20 +1,44 @@
1
1
  /*
2
- * Copyright (c) 2010-2020 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
6
- * http://www.eclipse.org/legal/epl-v10.html
6
+ * https://www.eclipse.org/legal/epl-v10.html
7
7
  *
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {Device} from '@eclipse-scout/core';
12
11
 
13
12
  // place venn 3 by simulation
14
13
  // find angle and distance (to a) and radius where "error" is minimal
15
- export default class VennAsync3Calculator {
16
-
17
- constructor(helper, venn1, venn2, venn3, u, v, w, uv, uw, vw, uvw, d12, d13, d23) {
14
+ import {VennCircle, VennCircleHelper} from '../index';
15
+
16
+ export class VennAsync3Calculator {
17
+ helper: VennCircleHelper;
18
+ venn1: VennCircle;
19
+ venn2: VennCircle;
20
+ venn3: VennCircle;
21
+ u: number;
22
+ v: number;
23
+ w: number;
24
+ uv: number;
25
+ uw: number;
26
+ vw: number;
27
+ uvw: number;
28
+
29
+ maxD: number;
30
+ dStep: number;
31
+ rStep: number;
32
+ alphaStep: number;
33
+
34
+ alphaBest: number;
35
+ dBest: number;
36
+ rBest: number;
37
+ errorBest: number;
38
+ callback: () => void;
39
+ cancelled: boolean;
40
+
41
+ constructor(helper: VennCircleHelper, venn1: VennCircle, venn2: VennCircle, venn3: VennCircle, u: number, v: number, w: number, uv: number, uw: number, vw: number, uvw: number, d12: number, d13: number, d23: number) {
18
42
  // if circles are empty, they are drawn as small circle, so: adjust u v w to find better errors
19
43
  if (u === 0 && uv === 0 && uw === 0 && uvw === 0) {
20
44
  u = 1;
@@ -38,13 +62,13 @@ export default class VennAsync3Calculator {
38
62
  this.vw = vw;
39
63
  this.uvw = uvw;
40
64
 
41
- // step and ranges for loops
65
+ /** step and ranges for loops */
42
66
  this.maxD = this.venn1.r + 2 * this.venn2.r + 2 * this.venn1.r + this.helper.distR;
43
67
  this.dStep = this.maxD / 30;
44
68
  this.rStep = venn3.r / 4;
45
69
  this.alphaStep = Math.PI / 30;
46
70
 
47
- // best vars (initialize with 0 so the optimizer knows that they are numbers)
71
+ /** best vars (initialize with 0 so the optimizer knows that they are numbers) */
48
72
  this.alphaBest = 0;
49
73
  this.dBest = 0;
50
74
  this.rBest = 0;
@@ -54,7 +78,7 @@ export default class VennAsync3Calculator {
54
78
  this.cancelled = false;
55
79
  }
56
80
 
57
- start(callback) {
81
+ start(callback: () => void) {
58
82
  this.callback = callback;
59
83
  setTimeout(this._next.bind(this, 0));
60
84
  }
@@ -63,7 +87,7 @@ export default class VennAsync3Calculator {
63
87
  this.cancelled = true;
64
88
  }
65
89
 
66
- _end() {
90
+ protected _end() {
67
91
  // set x and y and r of venn3
68
92
  this.venn3.x = this.venn1.x + this.dBest * Math.cos(this.alphaBest);
69
93
  this.venn3.y = this.venn1.y - this.dBest * Math.sin(this.alphaBest);
@@ -72,7 +96,7 @@ export default class VennAsync3Calculator {
72
96
  this.callback();
73
97
  }
74
98
 
75
- _next(alpha) {
99
+ protected _next(alpha: number) {
76
100
  if (!this.cancelled) {
77
101
  // iterate
78
102
  this._iteration(alpha);
@@ -91,7 +115,7 @@ export default class VennAsync3Calculator {
91
115
  }
92
116
  }
93
117
 
94
- _iteration(alpha) {
118
+ protected _iteration(alpha: number) {
95
119
  // optimize speed: no var lookup (should help the optimizer in general, and IE in particular)
96
120
  let maxD = this.maxD,
97
121
  dStep = this.dStep,
@@ -197,7 +221,7 @@ export default class VennAsync3Calculator {
197
221
  this.errorBest = errorBest;
198
222
  }
199
223
 
200
- _error(u, total, a, aTotal) {
224
+ protected _error(u: number, total: number, a: number, aTotal: number): number {
201
225
  // be brutal if basic error
202
226
  if ((u === 0 && a !== 0) || (u !== 0 && a === 0)) {
203
227
  return 1000;
@@ -3,17 +3,41 @@
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
6
- * http://www.eclipse.org/legal/epl-v10.html
6
+ * https://www.eclipse.org/legal/epl-v10.html
7
7
  *
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {AbstractSvgChartRenderer, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';
11
+ import {AbstractSvgChartRenderer, Chart, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';
12
12
  import $ from 'jquery';
13
-
14
- export default class VennChartRenderer extends AbstractSvgChartRenderer {
15
-
16
- constructor(chart) {
13
+ import {ChartValueGroup} from './Chart';
14
+ import {LegendPositions} from './AbstractSvgChartRenderer';
15
+
16
+ export class VennChartRenderer extends AbstractSvgChartRenderer {
17
+ animationTriggered: boolean;
18
+
19
+ data: ChartValueGroup[];
20
+ centerX: number;
21
+ centerY: number;
22
+ numberOfCircles: number;
23
+ readyToDraw: boolean;
24
+ wasCircle: boolean;
25
+
26
+ vennCircleHelper: VennCircleHelper;
27
+ async3Calculator: VennAsync3Calculator;
28
+
29
+ vennNumber1: VennCircle;
30
+ vennReal1: VennCircle;
31
+ vennNumber2: VennCircle;
32
+ vennReal2: VennCircle;
33
+ vennNumber3: VennCircle;
34
+ vennReal3: VennCircle;
35
+
36
+ $v1: JQuery<SVGElement>;
37
+ $v2: JQuery<SVGElement>;
38
+ $v3: JQuery<SVGElement>;
39
+
40
+ constructor(chart: Chart) {
17
41
  super(chart);
18
42
  this.animationTriggered = false;
19
43
  this.suppressLegendBox = true;
@@ -28,7 +52,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
28
52
  chart.config = $.extend(true, {}, defaultConfig, chart.config);
29
53
  }
30
54
 
31
- _validate() {
55
+ protected override _validate(): boolean {
32
56
  let chartData = this.chart.data;
33
57
  if (!chartData ||
34
58
  chartData.axes.length !== 0 ||
@@ -39,12 +63,12 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
39
63
  return true;
40
64
  }
41
65
 
42
- _renderInternal() {
66
+ protected override _renderInternal() {
43
67
  this.centerX = this.width / 2;
44
68
  this.centerY = this.height / 2;
45
69
 
46
70
  if (this.centerX === 0 || this.centerY === 0) {
47
- return false;
71
+ return;
48
72
  }
49
73
 
50
74
  // basic values
@@ -56,7 +80,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
56
80
  maxR = Math.min(this.centerX, this.centerY),
57
81
  minR = maxR / 15,
58
82
  total = this.data.reduce((s, e) => {
59
- return s + parseFloat(e.values[0]);
83
+ return s + (e.values[0] as number);
60
84
  }, 1);
61
85
 
62
86
  this.vennCircleHelper = new VennCircleHelper(distR, maxR, minR, total);
@@ -112,16 +136,16 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
112
136
  }
113
137
  }
114
138
 
115
- remove(requestAnimation, afterRemoveFunc) {
139
+ override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {
116
140
  this._cancelAsync3Calculator();
117
141
  super.remove(requestAnimation, afterRemoveFunc);
118
142
  }
119
143
 
120
144
  // calculation
121
145
 
122
- _calc1(v1) {
146
+ protected _calc1(v1: VennCircle) {
123
147
  // set basic data
124
- let a = this.data[0].values[0];
148
+ let a = this.data[0].values[0] as number;
125
149
 
126
150
  // calc sizes
127
151
  if (a > 0) {
@@ -138,11 +162,11 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
138
162
  v1.addLabel(a, v1.x, v1.y);
139
163
  }
140
164
 
141
- _calc2(v1, v2, real) {
165
+ protected _calc2(v1: VennCircle, v2: VennCircle, real: boolean) {
142
166
  // set basic data
143
- let a = this.data[0].values[0];
144
- let b = this.data[1].values[0];
145
- let ab = this.data[2].values[0];
167
+ let a = this.data[0].values[0] as number;
168
+ let b = this.data[1].values[0] as number;
169
+ let ab = this.data[2].values[0] as number;
146
170
  let d12;
147
171
 
148
172
  if (real) {
@@ -199,15 +223,15 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
199
223
  }
200
224
  }
201
225
 
202
- _calc3(v1, v2, v3, real, callback) {
226
+ protected _calc3(v1: VennCircle, v2: VennCircle, v3: VennCircle, real: boolean, callback: () => void) {
203
227
  // set basic data
204
- let a = this.data[0].values[0];
205
- let b = this.data[1].values[0];
206
- let c = this.data[2].values[0];
207
- let ab = this.data[3].values[0];
208
- let ac = this.data[4].values[0];
209
- let bc = this.data[5].values[0];
210
- let abc = this.data[6].values[0];
228
+ let a = this.data[0].values[0] as number;
229
+ let b = this.data[1].values[0] as number;
230
+ let c = this.data[2].values[0] as number;
231
+ let ab = this.data[3].values[0] as number;
232
+ let ac = this.data[4].values[0] as number;
233
+ let bc = this.data[5].values[0] as number;
234
+ let abc = this.data[6].values[0] as number;
211
235
 
212
236
  let d12, d13, d23;
213
237
 
@@ -279,7 +303,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
279
303
  }
280
304
  }
281
305
 
282
- _cancelAsync3Calculator() {
306
+ protected _cancelAsync3Calculator() {
283
307
  if (this.async3Calculator) {
284
308
  this.async3Calculator.cancel();
285
309
  this.async3Calculator = null;
@@ -288,7 +312,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
288
312
 
289
313
  // drawing
290
314
 
291
- _draw(animated, real) {
315
+ protected _draw(animated: boolean, real: boolean) {
292
316
  if (!this.rendered && !this.rendering) { // additional check, because this method might be called from a setTimeout()
293
317
  return;
294
318
  }
@@ -337,7 +361,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
337
361
  }
338
362
 
339
363
  // handling of circles
340
- _createCircle(circleIndex, color, cssClass) {
364
+ protected _createCircle(circleIndex: number, color: string, cssClass: string): JQuery<SVGElement> {
341
365
  let $circle = this.$svg.appendSVG('circle', 'venn-circle')
342
366
  .attr('cx', this.centerX)
343
367
  .attr('cy', this.centerY)
@@ -358,14 +382,14 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
358
382
  }
359
383
 
360
384
  if (this.chart.config.options.clickable) {
361
- $circle.on('click', this._createClickObject(null, circleIndex), this.chart._onValueClick.bind(this.chart));
385
+ $circle.on('click', this._createClickObject(null, circleIndex), e => this.chart.handleValueClick(e.data));
362
386
  }
363
387
 
364
388
  return $circle;
365
389
  }
366
390
 
367
391
  // handling of venn, label and legend
368
- _updateVenn(venn, animated) {
392
+ protected _updateVenn(venn: VennCircle, animated: boolean) {
369
393
  // move circle
370
394
  venn.$circle
371
395
  .animateSVG('cx', this.centerX + venn.x, animated ? this.animationDuration : 0, null, true)
@@ -386,12 +410,12 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
386
410
  y2: y2,
387
411
  v: venn.legendV,
388
412
  h: venn.legendH
389
- };
413
+ } as LegendPositions;
390
414
 
391
415
  this._renderWireLegend(venn.legend, legendPositions, 'venn-legend');
392
416
  }
393
417
 
394
- _drawLabel(text, dx, dy, animated) {
418
+ protected _drawLabel(text: number, dx: number, dy: number, animated: boolean) {
395
419
  // draw label
396
420
  let $label = this.$svg.appendSVG('text', 'venn-label')
397
421
  .attr('x', this.centerX + dx)
@@ -407,7 +431,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
407
431
  }
408
432
 
409
433
  // handling of show/hide numbers
410
- _show(event) {
434
+ protected _show(event: JQuery.MouseEventBase) {
411
435
  if (this.numberOfCircles === 1) {
412
436
  return; // Nothing to do for only one circle
413
437
  }
@@ -418,7 +442,7 @@ export default class VennChartRenderer extends AbstractSvgChartRenderer {
418
442
  // check if true enter or just from one circle to another
419
443
  let isCircle = toElement && $(toElement).hasClass('venn-circle');
420
444
  if (this.wasCircle && isCircle) {
421
- return false;
445
+ return;
422
446
  }
423
447
  this.wasCircle = isCircle;
424
448
 
@@ -1,37 +1,37 @@
1
1
  /*
2
- * Copyright (c) 2010-2020 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
6
- * http://www.eclipse.org/legal/epl-v10.html
6
+ * https://www.eclipse.org/legal/epl-v10.html
7
7
  *
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- // circle
11
+ export class VennCircle {
12
+ labels: Label[];
13
+ $circle: JQuery<SVGElement>;
14
+ x: number;
15
+ y: number;
16
+ r: number;
17
+ legend: string;
18
+ legendR: number;
19
+ legendH: -1 | 1;
20
+ legendV: -1 | 1;
12
21
 
13
- export default class VennCircle {
14
-
15
- constructor($circle) {
22
+ constructor($circle: JQuery<SVGElement>) {
16
23
  this.$circle = $circle;
17
- this.x;
18
- this.y;
19
- this.r;
20
- this.legend;
21
- this.legendR;
22
- this.legendH;
23
- this.legendV;
24
24
  this.labels = [];
25
25
  }
26
26
 
27
- setLegend(legend, horizontal, vertical, r) {
27
+ setLegend(legend: string, horizontal: -1 | 1, vertical: -1 | 1, r?: number) {
28
28
  this.legend = legend;
29
29
  this.legendH = horizontal;
30
30
  this.legendV = vertical;
31
31
  this.legendR = r || this.r;
32
32
  }
33
33
 
34
- addLabel(text, x, y) {
34
+ addLabel(text: number, x: number, y: number) {
35
35
  this.labels.push({
36
36
  text: text,
37
37
  x: x,
@@ -39,3 +39,10 @@ export default class VennCircle {
39
39
  });
40
40
  }
41
41
  }
42
+
43
+ export type Label = {
44
+ text: number;
45
+ x: number;
46
+ y: number;
47
+ };
48
+