@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
package/dist/file-list CHANGED
@@ -1,12 +1,15 @@
1
- eclipse-scout-chart-bc08151d11e1909eff6c.min.js
2
- eclipse-scout-chart-bc08151d11e1909eff6c.min.js.LICENSE.txt
3
- eclipse-scout-chart-bc08151d11e1909eff6c.min.js.map
4
- eclipse-scout-chart-theme-79622289bda68b525e3e.min.css
5
- eclipse-scout-chart-theme-dark-1de09c03e3dc40a9529a.min.css
1
+ eclipse-scout-chart-fae6f958a044232e659c.min.js
2
+ eclipse-scout-chart-fae6f958a044232e659c.min.js.map
3
+ eclipse-scout-chart-theme-dark-89bcf2022056cbf8e371.min.css
6
4
  eclipse-scout-chart-theme-dark.css
7
5
  eclipse-scout-chart-theme-dark.css.map
6
+ eclipse-scout-chart-theme-e25b5923d4dba5f5ca7e.min.css
8
7
  eclipse-scout-chart-theme.css
9
8
  eclipse-scout-chart-theme.css.map
9
+ eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js
10
+ eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js.map
11
+ eclipse-scout-chart.esm.js
12
+ eclipse-scout-chart.esm.js.map
10
13
  eclipse-scout-chart.js
11
14
  eclipse-scout-chart.js.map
12
15
  file-list
package/dist/texts.json CHANGED
@@ -33,23 +33,6 @@
33
33
  "ui.groupedByYear": "groupé par an",
34
34
  "ui.line": "Ligne"
35
35
  },
36
- "it": {
37
- "ui.Bio": "Bio",
38
- "ui.Brd": "Brd",
39
- "ui.Chart": "Diagramma",
40
- "ui.Mio": "Mio",
41
- "ui.Mrd": "Mrd",
42
- "ui.TooMuchData": "Troppi dati",
43
- "ui.Trd": "Trd",
44
- "ui.Tri": "Tri",
45
- "ui.Value": "Valore",
46
- "ui.bar": "barra",
47
- "ui.groupedByDate": "raggruppato per data",
48
- "ui.groupedByMonth": "raggruppato per mese",
49
- "ui.groupedByWeekday": "raggruppato per giorno della settimana",
50
- "ui.groupedByYear": "raggruppato per anno",
51
- "ui.line": "Linea"
52
- },
53
36
  "de": {
54
37
  "ui.Bio": "Bio.",
55
38
  "ui.Brd": "Brd.",
@@ -66,5 +49,22 @@
66
49
  "ui.groupedByWeekday": "gruppiert nach Wochentag",
67
50
  "ui.groupedByYear": "gruppiert nach Jahr",
68
51
  "ui.line": "Linie"
52
+ },
53
+ "it": {
54
+ "ui.Bio": "Bio",
55
+ "ui.Brd": "Brd",
56
+ "ui.Chart": "Diagramma",
57
+ "ui.Mio": "Mio",
58
+ "ui.Mrd": "Mrd",
59
+ "ui.TooMuchData": "Troppi dati",
60
+ "ui.Trd": "Trd",
61
+ "ui.Tri": "Tri",
62
+ "ui.Value": "Valore",
63
+ "ui.bar": "barra",
64
+ "ui.groupedByDate": "raggruppato per data",
65
+ "ui.groupedByMonth": "raggruppato per mese",
66
+ "ui.groupedByWeekday": "raggruppato per giorno della settimana",
67
+ "ui.groupedByYear": "raggruppato per anno",
68
+ "ui.line": "Linea"
69
69
  }
70
70
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-scout/chart",
3
- "version": "22.0.39",
3
+ "version": "23.1.0-beta.4",
4
4
  "description": "Eclipse Scout chart",
5
5
  "author": "BSI Business Systems Integration AG",
6
6
  "homepage": "https://www.eclipse.org/scout",
@@ -10,44 +10,50 @@
10
10
  },
11
11
  "license": "EPL-1.0",
12
12
  "engines": {
13
- "node": ">=16.13.0",
14
- "npm": ">=8.1.0",
15
- "pnpm": ">=6.22.2"
13
+ "node": ">=18.12.1",
14
+ "npm": ">=9.1.1",
15
+ "pnpm": ">=7.16.0"
16
16
  },
17
17
  "keywords": [
18
18
  "scout",
19
19
  "eclipse-scout",
20
20
  "chart"
21
21
  ],
22
- "main": "./src/index.js",
22
+ "main": "./dist/eclipse-scout-chart.esm.js",
23
+ "module": "./dist/eclipse-scout-chart.esm.js",
23
24
  "files": [
24
25
  "dist",
25
26
  "src"
26
27
  ],
27
28
  "devDependencies": {
28
- "@eclipse-scout/cli": "22.0.39",
29
+ "@eclipse-scout/cli": "23.1.0-beta.4",
29
30
  "@eclipse-scout/releng": "^22.0.0",
30
- "jasmine-core": "3.10.1",
31
- "karma": "6.3.20"
31
+ "jasmine-core": "4.5.0",
32
+ "jasmine-jquery": "2.1.1",
33
+ "karma": "6.4.1",
34
+ "@types/jquery": "3.5.14",
35
+ "@types/jasmine": "4.3.0",
36
+ "@types/jasmine-jquery": "1.5.34"
32
37
  },
33
38
  "dependencies": {
34
- "@eclipse-scout/core": "22.0.39",
39
+ "@eclipse-scout/core": "23.1.0-beta.4",
35
40
  "jquery": "3.6.0",
36
- "chart.js": "3.7.0",
37
- "chartjs-plugin-datalabels": "2.0.0"
41
+ "chart.js": "3.9.1",
42
+ "chartjs-plugin-datalabels": "2.1.0"
38
43
  },
39
44
  "scripts": {
40
45
  "testserver:start": "scout-scripts test-server:start",
41
46
  "testserver:stop": "scout-scripts test-server:stop",
42
47
  "test:ci": "scout-scripts test:ci",
43
- "build:dev": "scout-scripts build:dev",
44
- "build:prod": "scout-scripts build:prod",
45
- "build:all": "scout-scripts build:dev && scout-scripts build:prod",
48
+ "build:dev": "scout-scripts build:dev --run default global",
49
+ "build:prod": "scout-scripts build:prod --run default global",
50
+ "build:all": "npm run build:dev && npm run build:prod",
46
51
  "build:dev:watch": "scout-scripts build:dev:watch",
47
52
  "cleanup:snapshots": "releng-scripts cleanup:snapshots",
48
53
  "version:snapshot:dependencies": "releng-scripts version:snapshot:dependencies",
49
54
  "version:snapshot": "releng-scripts version:snapshot",
50
55
  "version:release:dependencies": "releng-scripts version:release:dependencies",
51
56
  "version:release": "releng-scripts version:release"
52
- }
57
+ },
58
+ "types": "./dist/d.ts/index.d.ts"
53
59
  }
@@ -3,32 +3,38 @@
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
11
 
12
- export default class AbstractChartRenderer {
12
+ import {Chart} from '../index';
13
+ import {Session} from '@eclipse-scout/core';
14
+ import {UpdateChartOptions} from './Chart';
13
15
 
14
- /**
15
- * @param {Chart} chart
16
- */
17
- constructor(chart) {
16
+ export class AbstractChartRenderer {
17
+ chart: Chart;
18
+ session: Session;
19
+
20
+ /** true while this.render() is executing */
21
+ rendering: boolean;
22
+ rendered: boolean;
18
23
 
19
- /**
20
- * @property {Chart} chart
21
- */
24
+ /** set by render() and remove(), makes it unnecessary to carry an argument through all method calls */
25
+ animationDuration: number;
26
+ firstOpaqueBackgroundColor: string;
27
+
28
+ constructor(chart: Chart) {
22
29
  this.chart = chart;
23
30
  this.session = chart.session;
24
- this.rendering = false; // true while this.render() is executing
31
+ this.rendering = false;
25
32
  this.rendered = false;
26
- this.animationDuration = 0; // set by render() and remove(), makes it unnecessary to carry an argument through all method calls
27
-
33
+ this.animationDuration = 0;
28
34
  this.firstOpaqueBackgroundColor = '';
29
35
  }
30
36
 
31
- validate() {
37
+ validate(): boolean {
32
38
  if (!this._validateChartData()) {
33
39
  return false;
34
40
  }
@@ -36,7 +42,7 @@ export default class AbstractChartRenderer {
36
42
  return this._validate();
37
43
  }
38
44
 
39
- _validateChartData() {
45
+ protected _validateChartData(): boolean {
40
46
  let chartData = this.chart && this.chart.data;
41
47
  if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0) {
42
48
  return false;
@@ -71,7 +77,7 @@ export default class AbstractChartRenderer {
71
77
  return true;
72
78
  }
73
79
 
74
- _validate() {
80
+ protected _validate(): boolean {
75
81
  // Override in subclasses
76
82
  return true;
77
83
  }
@@ -81,7 +87,7 @@ export default class AbstractChartRenderer {
81
87
  * Whether animations should be used while rendering the chart. Note that his
82
88
  * property is ignored when chart.config.options.animation.duration is <code>0</code>!
83
89
  */
84
- render(requestAnimation) {
90
+ render(requestAnimation: boolean) {
85
91
  this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;
86
92
  if (!this.validate() || !this.chart.rendered) {
87
93
  return;
@@ -92,7 +98,7 @@ export default class AbstractChartRenderer {
92
98
  this.rendered = true;
93
99
  }
94
100
 
95
- _render() {
101
+ protected _render() {
96
102
  // Override in subclasses
97
103
  }
98
104
 
@@ -102,7 +108,7 @@ export default class AbstractChartRenderer {
102
108
  }
103
109
  }
104
110
 
105
- _renderCheckedItems() {
111
+ protected _renderCheckedItems() {
106
112
  // nop
107
113
  }
108
114
 
@@ -111,7 +117,7 @@ export default class AbstractChartRenderer {
111
117
  * Whether animations should be used while updating the chart. Note that his
112
118
  * property is ignored when chart.config.options.animation.duration is <code>0</code>!
113
119
  */
114
- updateData(requestAnimation) {
120
+ updateData(requestAnimation: boolean) {
115
121
  if (!this.rendered) {
116
122
  this.render(requestAnimation);
117
123
  return;
@@ -123,11 +129,11 @@ export default class AbstractChartRenderer {
123
129
  this._updateData();
124
130
  }
125
131
 
126
- _updateData() {
132
+ protected _updateData() {
127
133
  // Override in subclasses
128
134
  }
129
135
 
130
- isDataUpdatable() {
136
+ isDataUpdatable(): boolean {
131
137
  return false;
132
138
  }
133
139
 
@@ -143,7 +149,7 @@ export default class AbstractChartRenderer {
143
149
  * Whether animations should be used while removing the chart. Note that his
144
150
  * property is ignored when chart.config.options.animation.duration is <code>0</code>!
145
151
  */
146
- remove(requestAnimation, afterRemoveFunc) {
152
+ remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {
147
153
  this.animationDuration = requestAnimation && this.chart.config.options.animation.duration;
148
154
  if (this.animationDuration && this.rendered) {
149
155
  this._removeAnimated(afterRemoveFunc);
@@ -152,12 +158,12 @@ export default class AbstractChartRenderer {
152
158
  }
153
159
  }
154
160
 
155
- _remove(afterRemoveFunc) {
161
+ protected _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {
156
162
  this.rendered = false;
157
163
  afterRemoveFunc && afterRemoveFunc();
158
164
  }
159
165
 
160
- _removeAnimated(afterRemoveFunc) {
166
+ protected _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {
161
167
  // Override in subclasses
162
168
  this._remove(afterRemoveFunc);
163
169
  }
@@ -165,7 +171,7 @@ export default class AbstractChartRenderer {
165
171
  /**
166
172
  * Controls if the animation of the chart is shown when chart data has been updated.
167
173
  */
168
- shouldAnimateRemoveOnUpdate(opts) {
174
+ shouldAnimateRemoveOnUpdate(opts: UpdateChartOptions): boolean {
169
175
  return opts.requestAnimation;
170
176
  }
171
177
  }
@@ -1,9 +1,9 @@
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
@@ -11,15 +11,25 @@
11
11
  import {ObjectFactory, strings, styles} from '@eclipse-scout/core';
12
12
  import $ from 'jquery';
13
13
  import {AbstractChartRenderer, Chart} from '../index';
14
+ import {ClickObject} from './Chart';
14
15
 
15
- export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
16
+ export class AbstractSvgChartRenderer extends AbstractChartRenderer {
17
+ chartBox: ChartBox;
16
18
 
17
- constructor(chart) {
19
+ /** Clipping and masking */
20
+ clipId: string;
21
+ maskId: string;
22
+ suppressLegendBox: boolean;
23
+ height: number;
24
+ width: number;
25
+ chartAnimationStopping: boolean;
26
+
27
+ $svg: JQuery<SVGElement>;
28
+
29
+ constructor(chart: Chart) {
18
30
  super(chart);
19
- this.chartBox = {};
20
- this.labelBox = {};
31
+ this.chartBox = null;
21
32
 
22
- // Clipping and masking
23
33
  this.clipId = 'Clip-' + ObjectFactory.get().createUniqueId();
24
34
  this.maskId = 'Mask-' + ObjectFactory.get().createUniqueId();
25
35
 
@@ -31,16 +41,14 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
31
41
  static FONT_SIZE_MIDDLE = 'middleFont';
32
42
  static FONT_SIZE_BIG = 'bigFont';
33
43
 
34
- _render() {
44
+ protected override _render() {
35
45
  if (!this.$svg) {
36
46
  this.$svg = this.chart.$container.appendSVG('svg', 'chart-svg');
37
47
  }
38
48
  this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$svg);
39
- this.svgHeight = this.$svg.height();
40
- this.svgWidth = this.$svg.width();
41
49
  // This works, because CSS specifies 100% width/height
42
- this.height = this.svgHeight;
43
- this.width = this.svgWidth;
50
+ this.height = this.$svg.height();
51
+ this.width = this.$svg.width();
44
52
  this._initChartBox();
45
53
  if (this._useFontSizeBig()) {
46
54
  this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_BIG);
@@ -58,27 +66,27 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
58
66
  this._renderInternal();
59
67
  }
60
68
 
61
- _renderInternal() {
69
+ protected _renderInternal() {
62
70
  // Override in subclasses
63
71
  }
64
72
 
65
- _useFontSizeBig() {
73
+ protected _useFontSizeBig(): boolean {
66
74
  return false;
67
75
  }
68
76
 
69
- _useFontSizeMiddle() {
77
+ protected _useFontSizeMiddle(): boolean {
70
78
  return false;
71
79
  }
72
80
 
73
- _useFontSizeSmall() {
81
+ protected _useFontSizeSmall(): boolean {
74
82
  return false;
75
83
  }
76
84
 
77
- _useFontSizeSmallest() {
85
+ protected _useFontSizeSmallest(): boolean {
78
86
  return false;
79
87
  }
80
88
 
81
- remove(requestAnimation, afterRemoveFunc) {
89
+ override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {
82
90
  if (this.rendered && !this.chartAnimationStopping) {
83
91
  this.chartAnimationStopping = true;
84
92
  this.$svg.children().stop(true, false);
@@ -87,7 +95,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
87
95
  super.remove(requestAnimation, afterRemoveFunc);
88
96
  }
89
97
 
90
- _remove(afterRemoveFunc) {
98
+ protected override _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {
91
99
  // this function is called directly from renderers after all removal animations are done
92
100
  // however, other animations may have been queued in the meantime (e.g. in case the chart was removed, then added (+animation queued), and then removed again)
93
101
  if (this.rendered) {
@@ -104,11 +112,8 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
104
112
 
105
113
  /**
106
114
  * For all parameters: use null when parameter is not used or set by a chart type.
107
- *
108
- * @param xIndex number
109
- * @param datasetIndex number
110
115
  */
111
- _createClickObject(xIndex, datasetIndex) {
116
+ protected _createClickObject(xIndex: number, datasetIndex: number): ClickObject {
112
117
  return {
113
118
  xIndex: xIndex,
114
119
  dataIndex: xIndex,
@@ -116,15 +121,15 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
116
121
  };
117
122
  }
118
123
 
119
- _measureText(text, legendLabelClass) {
124
+ protected _measureText(text: string, legendLabelClass?: string): { height: number; width: number } {
120
125
  let $label = this.$svg.appendSVG('text', legendLabelClass)
121
126
  .attr('x', 0)
122
127
  .attr('y', 0)
123
128
  .attr('visibility', 'hidden')
124
- .text(text);
129
+ .text(text) as JQuery<SVGGraphicsElement>;
125
130
  let textBounds;
126
131
  try {
127
- // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a boundingbox with 0
132
+ // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a bounding box with 0
128
133
  textBounds = $label[0].getBBox();
129
134
  } catch (e) {
130
135
  return {
@@ -137,7 +142,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
137
142
  return textBounds;
138
143
  }
139
144
 
140
- _renderLine(x1, y1, x2, y2, lineClass) {
145
+ protected _renderLine(x1: number, y1: number, x2: number, y2: number, lineClass: string): JQuery<SVGElement> {
141
146
  let $line = this.$svg.appendSVG('line', lineClass)
142
147
  .attr('x1', x1).attr('y1', y1)
143
148
  .attr('x2', x2).attr('y2', y2);
@@ -149,7 +154,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
149
154
  return $line;
150
155
  }
151
156
 
152
- _renderLineLabel(x, y, label, labelClass, drawBackground) {
157
+ protected _renderLineLabel(x: number, y: number, label: string, labelClass: string, drawBackground: boolean): JQuery<SVGElement> {
153
158
  let $label = this.$svg.appendSVG('text', labelClass ? labelClass : 'line-label')
154
159
  .attr('x', x).attr('y', y)
155
160
  .text(label);
@@ -179,7 +184,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
179
184
  return $label;
180
185
  }
181
186
 
182
- _initChartBox() {
187
+ protected _initChartBox() {
183
188
  this.chartBox = {
184
189
  width: this.width,
185
190
  height: this.height,
@@ -194,7 +199,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
194
199
  };
195
200
  }
196
201
 
197
- _createAnimationObjectWithTabIndexRemoval(animationFunc, duration) {
202
+ protected _createAnimationObjectWithTabIndexRemoval<T>(animationFunc: (now: number, tween: JQuery.Tween<T>) => void, duration?: number): JQuery.EffectsOptions<T> {
198
203
  return {
199
204
  step: function(now, fx) {
200
205
  try {
@@ -212,7 +217,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
212
217
  };
213
218
  }
214
219
 
215
- _addClipping(cssClass) {
220
+ protected _addClipping(cssClass: string) {
216
221
  // add clip and mask paths for all relevant objects
217
222
  let $clip = this.$svg
218
223
  .appendSVG('clipPath');
@@ -234,19 +239,22 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
234
239
  });
235
240
  }
236
241
 
237
- _renderWireLegend(text, legendPositions, className, drawBackgroundBox) {
238
- let legend = {
239
- detachFunc: () => {
240
- },
241
- attachFunc: () => {
242
- },
243
- removeFunc: () => {
244
- }
245
- };
242
+ protected _renderWireLegend(text: string, legendPositions: LegendPositions, className: string, drawBackgroundBox?: boolean): Legend {
246
243
  if (!this.chart.config.options.plugins.tooltip.enabled) {
247
- return legend;
244
+ return {
245
+ detachFunc: () => {
246
+ // nop
247
+ },
248
+ attachFunc: () => {
249
+ // nop
250
+ },
251
+ removeFunc: () => {
252
+ // nop
253
+ }
254
+ };
248
255
  }
249
- let padding = 5,
256
+ let legend = {} as Legend,
257
+ padding = 5,
250
258
  $background,
251
259
  backgroundWidth = 0,
252
260
  lineHeight = 17,
@@ -274,7 +282,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
274
282
  for (let i = 0; i < text.length; i++) {
275
283
  let posIndex = text.length - i - 1;
276
284
  let yPos = positions.y2 + positions.v * padding - lineHeight * posIndex - padding * posIndex;
277
- let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);
285
+ let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox) as JQuery<SVGTextContentElement>;
278
286
  $line.addClass(className);
279
287
  lengthLegend = Math.max(lengthLegend, $line[0].getComputedTextLength());
280
288
  if (i === 0) {
@@ -417,3 +425,30 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
417
425
  return legend;
418
426
  }
419
427
  }
428
+
429
+ export type ChartBox = {
430
+ width: number;
431
+ height: number;
432
+ xOffset: number;
433
+ yOffset: number;
434
+ mX: () => number;
435
+ mY: () => number;
436
+ };
437
+
438
+ export type Legend = {
439
+ $field?: JQuery;
440
+ detachFunc: () => void;
441
+ attachFunc: () => void;
442
+ removeFunc: () => void;
443
+ };
444
+
445
+ export type LegendPositions = {
446
+ x1: number;
447
+ x2: number;
448
+ y1: number;
449
+ y2: number;
450
+ v: number;
451
+ h: number;
452
+ autoPosition: boolean;
453
+ posFunc: (labelWidth: number, labelHeight: number) => LegendPositions;
454
+ };