@eclipse-scout/chart 22.0.41 → 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 (110) 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-e25b5923d4dba5f5ca7e.min.css +1 -0
  65. package/dist/eclipse-scout-chart-theme.css +1 -1
  66. package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js +3 -0
  67. package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js.map +1 -0
  68. package/dist/eclipse-scout-chart.esm.js +6919 -0
  69. package/dist/eclipse-scout-chart.esm.js.map +1 -0
  70. package/dist/eclipse-scout-chart.js +641 -15109
  71. package/dist/eclipse-scout-chart.js.map +1 -1
  72. package/dist/file-list +8 -5
  73. package/dist/texts.json +17 -17
  74. package/package.json +21 -15
  75. package/src/chart/{AbstractChartRenderer.js → AbstractChartRenderer.ts} +31 -25
  76. package/src/chart/{AbstractSvgChartRenderer.js → AbstractSvgChartRenderer.ts} +78 -43
  77. package/src/chart/{Chart.js → Chart.ts} +151 -61
  78. package/src/chart/ChartAdapter.ts +27 -0
  79. package/src/chart/ChartEventMap.ts +27 -0
  80. package/src/chart/{ChartJsRenderer.js → ChartJsRenderer.ts} +356 -350
  81. package/src/chart/{ChartLayout.js → ChartLayout.ts} +9 -8
  82. package/src/chart/ChartModel.ts +21 -0
  83. package/src/chart/{FulfillmentChartRenderer.js → FulfillmentChartRenderer.ts} +21 -18
  84. package/src/chart/{SalesfunnelChartRenderer.js → SalesfunnelChartRenderer.ts} +96 -59
  85. package/src/chart/{SpeedoChartRenderer.js → SpeedoChartRenderer.ts} +50 -36
  86. package/src/chart/{VennAsync3Calculator.js → VennAsync3Calculator.ts} +37 -13
  87. package/src/chart/{VennChartRenderer.js → VennChartRenderer.ts} +58 -34
  88. package/src/chart/{VennCircle.js → VennCircle.ts} +22 -15
  89. package/src/chart/{VennCircleHelper.js → VennCircleHelper.ts} +15 -9
  90. package/src/form/fields/chartfield/{ChartField.js → ChartField.ts} +11 -5
  91. package/src/form/fields/chartfield/{ChartFieldAdapter.js → ChartFieldAdapter.ts} +3 -8
  92. package/src/form/fields/chartfield/ChartFieldModel.ts +16 -0
  93. package/src/index.ts +46 -0
  94. package/src/table/controls/{ChartTableControl.js → ChartTableControl.ts} +160 -120
  95. package/src/table/controls/{ChartTableControlAdapter.js → ChartTableControlAdapter.ts} +3 -4
  96. package/src/table/controls/ChartTableControlEventMap.ts +19 -0
  97. package/src/table/controls/{ChartTableControlLayout.js → ChartTableControlLayout.ts} +7 -5
  98. package/src/table/controls/ChartTableControlModel.ts +19 -0
  99. package/src/table/controls/{ChartTableUserFilter.js → ChartTableUserFilter.ts} +25 -12
  100. package/src/table/controls/ChartTableUserFilterModel.ts +19 -0
  101. package/src/tile/{ChartFieldTile.js → ChartFieldTile.ts} +14 -8
  102. package/src/tile/{ChartFieldTileAdapter.js → ChartFieldTileAdapter.ts} +3 -7
  103. package/src/tile/ChartFieldTileModel.ts +16 -0
  104. package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js +0 -3
  105. package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js.LICENSE.txt +0 -6
  106. package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js.map +0 -1
  107. package/dist/eclipse-scout-chart-theme-79622289bda68b525e3e.min.css +0 -1
  108. package/dist/eclipse-scout-chart-theme-dark-1de09c03e3dc40a9529a.min.css +0 -1
  109. package/src/chart/ChartAdapter.js +0 -30
  110. package/src/index.js +0 -36
@@ -8,13 +8,28 @@
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;
@@ -113,19 +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
- _getValuePercentage(value, minValue, maxValue) {
135
+ protected _getValuePercentage(value: number, minValue: number, maxValue: number): number {
121
136
  return this._limitValue((value - minValue) / (maxValue - minValue), 1);
122
137
  }
123
138
 
124
- _getSegmentToPointAt(valuePercentage, numTotalSegments) {
139
+ protected _getSegmentToPointAt(valuePercentage: number, numTotalSegments: number): number {
125
140
  return this._limitValue(Math.floor(valuePercentage * numTotalSegments), numTotalSegments - 1);
126
141
  }
127
142
 
128
- _limitValue(value, maxValue) {
143
+ protected _limitValue(value: number, maxValue: number): number {
129
144
  value = Math.max(value, 0); // cannot be < 0
130
145
  value = Math.min(value, maxValue); // cannot be > maxValue
131
146
  return value;
@@ -134,7 +149,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
134
149
  /**
135
150
  * Gets the percentage value in range [0,1] of the specified segment.
136
151
  */
137
- _getPercentageValueOfSegment(segmentIndexInPart, part) {
152
+ protected _getPercentageValueOfSegment(segmentIndexInPart: number, part: number): number {
138
153
  // get the segment position
139
154
  let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);
140
155
 
@@ -148,7 +163,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
148
163
  /**
149
164
  * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments
150
165
  */
151
- _renderPointer(valuePercentage) {
166
+ protected _renderPointer(valuePercentage: number) {
152
167
  this.$pointer = this.$svg.appendSVG('path', 'pointer')
153
168
  .attr('d', this._pathPointer(0))
154
169
  .attr('data-end', valuePercentage)
@@ -176,7 +191,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
176
191
  /**
177
192
  * renders a single segment line.
178
193
  */
179
- _renderSegment(from, to, colorClass) {
194
+ protected _renderSegment(from: number, to: number, colorClass: string): JQuery<SVGElement> {
180
195
  return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)
181
196
  .attr('id', 'ArcAxisWide' + this.chart.id)
182
197
  .attr('fill', 'none')
@@ -184,7 +199,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
184
199
  .attr('d', this._pathSegment(from, to));
185
200
  }
186
201
 
187
- _renderCirclePart(part) {
202
+ protected _renderCirclePart(part: number) {
188
203
  let colorClass = this._getColorForPart(part);
189
204
  // render 'empty' segments
190
205
  for (let i = 0; i < this.numSegmentsPerPart; i++) {
@@ -196,7 +211,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
196
211
  this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default
197
212
  }
198
213
 
199
- _renderLegend(minValue, value, maxValue, groupName) {
214
+ protected _renderLegend(minValue: number, value: number, maxValue: number, groupName: string) {
200
215
  let minMaxLegendFontSize = this.scaleWeight * 0.8,
201
216
  padding = 5, // same as in AbstractChartRenderer#_renderWireLegend
202
217
  labelYPos = this.my + padding,
@@ -210,7 +225,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
210
225
  h: 1
211
226
  },
212
227
  minLegendValue = minValue ? this._formatValue(minValue) : 0,
213
- legendValue = value ? this._formatValue(value) : 0,
228
+ legendValue = value ? this._formatValue(value) : '' + 0,
214
229
  maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;
215
230
 
216
231
  // tooltip for min/max value
@@ -239,8 +254,8 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
239
254
  };
240
255
  mouseOut();
241
256
  this.$svg
242
- .mouseenter(mouseIn)
243
- .mouseleave(mouseOut);
257
+ .on('mouseenter', mouseIn)
258
+ .on('mouseleave', mouseOut);
244
259
  }
245
260
 
246
261
  // actual value
@@ -254,7 +269,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
254
269
  /**
255
270
  * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].
256
271
  */
257
- _getPartForValue(valuePercentage) {
272
+ protected _getPartForValue(valuePercentage: number): number {
258
273
  let part = Math.floor(valuePercentage * this.parts);
259
274
  return this._limitValue(part, this.parts - 1);
260
275
  }
@@ -266,7 +281,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
266
281
  * 10 to 999 thousand: 123k
267
282
  * >= 1 million: millions with max. two fraction digits -> 1.23M
268
283
  */
269
- _formatValue(value) {
284
+ protected _formatValue(value: number): string {
270
285
  if (value < SpeedoChartRenderer.TEN_THOUSAND) {
271
286
  return this.session.locale.decimalFormat.format(value);
272
287
  }
@@ -281,7 +296,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
281
296
  /**
282
297
  * Updates the pointer position to point to the specified valuePercentage in range [0,1].
283
298
  */
284
- _updatePointer(valuePercentage) {
299
+ protected _updatePointer(valuePercentage: number) {
285
300
  this.$pointer
286
301
  .attr('d', this._pathPointer(valuePercentage))
287
302
  .removeClass('red yellow light-green dark-green')
@@ -291,13 +306,13 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
291
306
  /**
292
307
  * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].
293
308
  */
294
- _updatePartsFill(valuePercentage) {
309
+ protected _updatePartsFill(valuePercentage: number) {
295
310
  let from, to;
296
311
  for (let part = 0; part < this.$filledParts.length; part++) {
297
- from = this._calcSegmentPos(0, part, this.segmentWidth).from;
312
+ from = this._calcSegmentPos(0, part).from;
298
313
  if ((part + 1) / this.parts < valuePercentage) {
299
314
  // the current part is smaller than the value: completely filled part
300
- to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part, this.segmentWidth).to;
315
+ to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part).to;
301
316
  } else if (part / this.parts > valuePercentage) {
302
317
  // the current part is bigger than the speedo-value: hide element
303
318
  from = SpeedoChartRenderer.ARC_MIN;
@@ -315,7 +330,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
315
330
  * @param segmentIndexInPart the index of the segment line within the part.
316
331
  * @param part the part index.
317
332
  */
318
- _calcSegmentPos(segmentIndexInPart, part) {
333
+ protected _calcSegmentPos(segmentIndexInPart: number, part: number): { from: number; to: number } {
319
334
  let result = {
320
335
  from: 0,
321
336
  to: 0
@@ -326,7 +341,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
326
341
  return result;
327
342
  }
328
343
 
329
- _getColorForPart(part) {
344
+ protected _getColorForPart(part: number): string {
330
345
  let position = this.chart.config.options.speedo.greenAreaPosition;
331
346
  switch (position) {
332
347
  case SpeedoChartRenderer.Position.LEFT:
@@ -378,7 +393,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
378
393
  /**
379
394
  * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.
380
395
  */
381
- _pathSegment(start, end) {
396
+ protected _pathSegment(start: number, end: number): string {
382
397
  let s = start * 2 * Math.PI,
383
398
  e = end * 2 * Math.PI,
384
399
  pathString = '';
@@ -398,7 +413,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
398
413
  /**
399
414
  * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer
400
415
  */
401
- _pathPointer(valuePercentage) {
416
+ protected _pathPointer(valuePercentage: number): string {
402
417
  let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;
403
418
  let s = point * 2 * Math.PI,
404
419
  pointerOuterR = this.r - (1.4 * this.scaleWeight),
@@ -411,10 +426,7 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
411
426
  return pathString;
412
427
  }
413
428
 
414
- /**
415
- * @override
416
- */
417
- _removeAnimated(afterRemoveFunc) {
429
+ protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {
418
430
  if (this.animationTriggered) {
419
431
  return;
420
432
  }
@@ -437,3 +449,5 @@ export default class SpeedoChartRenderer extends AbstractSvgChartRenderer {
437
449
  });
438
450
  }
439
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
+