chartjs-chart-matrix 1.0.0 → 1.1.1

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.
package/README.md CHANGED
@@ -6,12 +6,12 @@
6
6
  [![release](https://img.shields.io/github/release/kurkle/chartjs-chart-matrix.svg?style=flat-square)](https://github.com/kurkle/chartjs-chart-matrix/releases/latest)
7
7
  ![npm bundle size](https://img.shields.io/bundlephobia/min/chartjs-chart-matrix.svg)
8
8
  ![GitHub](https://img.shields.io/github/license/kurkle/chartjs-chart-matrix.svg)
9
- [![Coverage Status](https://coveralls.io/repos/github/kurkle/chartjs-chart-matrix/badge.svg?branch=next)](https://coveralls.io/github/kurkle/chartjs-chart-matrix?branch=next)
9
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=kurkle_chartjs-chart-matrix&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=kurkle_chartjs-chart-matrix)
10
10
  [![documentation](https://img.shields.io/static/v1?message=Documentation&color=informational)](https://chartjs-chart-matrix.pages.dev)
11
11
 
12
12
  ## Documentation
13
13
 
14
- To create a matrix chart, include chartjs-chart-matrix.js after chart.js and then create the chart by setting the `type` attribute to `'matrix'`
14
+ To create a matrix chart, include `chartjs-chart-matrix.js` after `chart.js` and then create the chart by setting the `type` attribute to `'matrix'`
15
15
 
16
16
  ```js
17
17
  const chart = new Chart(ctx, {
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * chartjs-chart-matrix v1.0.0
2
+ * chartjs-chart-matrix v1.1.1
3
3
  * https://chartjs-chart-matrix.pages.dev/
4
4
  * (c) 2021 Jukka Kurkela
5
5
  * Released under the MIT license
6
6
  */
7
7
  import { DatasetController, Element } from 'chart.js';
8
- import { isObject } from 'chart.js/helpers';
8
+ import { toTRBLCorners, addRoundedRectPath, isObject } from 'chart.js/helpers';
9
9
 
10
- var version = "1.0.0";
10
+ var version = "1.1.1";
11
11
 
12
12
  class MatrixController extends DatasetController {
13
13
  initialize() {
@@ -36,8 +36,8 @@ class MatrixController extends DatasetController {
36
36
  const options = me.resolveDataElementOptions(i, mode);
37
37
  const {width, height, anchorX, anchorY} = options;
38
38
  const properties = {
39
- x: anchorX === 'left' ? x : x - width / (anchorX === 'right' ? 1 : 2),
40
- y: anchorY === 'top' ? y : y - height / (anchorY === 'bottom' ? 1 : 2),
39
+ x: resolveX(anchorX, x, width),
40
+ y: resolveY(anchorY, y, height),
41
41
  width,
42
42
  height,
43
43
  options
@@ -59,6 +59,26 @@ class MatrixController extends DatasetController {
59
59
  }
60
60
  }
61
61
 
62
+ function resolveX(anchorX, x, width) {
63
+ if (anchorX === 'left' || anchorX === 'start') {
64
+ return x;
65
+ }
66
+ if (anchorX === 'right' || anchorX === 'end') {
67
+ return x - width;
68
+ }
69
+ return x - width / 2;
70
+ }
71
+
72
+ function resolveY(anchorY, y, height) {
73
+ if (anchorY === 'top' || anchorY === 'start') {
74
+ return y;
75
+ }
76
+ if (anchorY === 'bottom' || anchorY === 'end') {
77
+ return y - height;
78
+ }
79
+ return y - height / 2;
80
+ }
81
+
62
82
  MatrixController.id = 'matrix';
63
83
 
64
84
  MatrixController.version = version;
@@ -179,21 +199,23 @@ class MatrixElement extends Element {
179
199
  draw(ctx) {
180
200
  const options = this.options;
181
201
  const {inner, outer} = boundingRects(this);
202
+ const radius = toTRBLCorners(options.borderRadius);
182
203
 
183
204
  ctx.save();
184
205
 
185
206
  if (outer.w !== inner.w || outer.h !== inner.h) {
186
207
  ctx.beginPath();
187
- ctx.rect(outer.x, outer.y, outer.w, outer.h);
188
- ctx.clip();
189
- ctx.rect(inner.x, inner.y, inner.w, inner.h);
208
+ addRoundedRectPath(ctx, {x: outer.x, y: outer.y, w: outer.w, h: outer.h, radius});
209
+ addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});
190
210
  ctx.fillStyle = options.backgroundColor;
191
211
  ctx.fill();
192
212
  ctx.fillStyle = options.borderColor;
193
213
  ctx.fill('evenodd');
194
214
  } else {
215
+ ctx.beginPath();
216
+ addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});
195
217
  ctx.fillStyle = options.backgroundColor;
196
- ctx.fillRect(inner.x, inner.y, inner.w, inner.h);
218
+ ctx.fill();
197
219
  }
198
220
 
199
221
  ctx.restore();
@@ -233,6 +255,7 @@ MatrixElement.defaults = {
233
255
  backgroundColor: undefined,
234
256
  borderColor: undefined,
235
257
  borderWidth: undefined,
258
+ borderRadius: 0,
236
259
  anchorX: undefined,
237
260
  anchorY: undefined,
238
261
  width: 20,
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * chartjs-chart-matrix v1.0.0
2
+ * chartjs-chart-matrix v1.1.1
3
3
  * https://chartjs-chart-matrix.pages.dev/
4
4
  * (c) 2021 Jukka Kurkela
5
5
  * Released under the MIT license
@@ -8,13 +8,13 @@
8
8
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('chart.js'), require('chart.js/helpers')) :
9
9
  typeof define === 'function' && define.amd ? define(['chart.js', 'chart.js/helpers'], factory) :
10
10
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Chart, global.Chart.helpers));
11
- }(this, (function (Chart, helpers) { 'use strict';
11
+ })(this, (function (Chart, helpers) { 'use strict';
12
12
 
13
13
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
14
 
15
15
  var Chart__default = /*#__PURE__*/_interopDefaultLegacy(Chart);
16
16
 
17
- var version = "1.0.0";
17
+ var version = "1.1.1";
18
18
 
19
19
  class MatrixController extends Chart.DatasetController {
20
20
  initialize() {
@@ -43,8 +43,8 @@ class MatrixController extends Chart.DatasetController {
43
43
  const options = me.resolveDataElementOptions(i, mode);
44
44
  const {width, height, anchorX, anchorY} = options;
45
45
  const properties = {
46
- x: anchorX === 'left' ? x : x - width / (anchorX === 'right' ? 1 : 2),
47
- y: anchorY === 'top' ? y : y - height / (anchorY === 'bottom' ? 1 : 2),
46
+ x: resolveX(anchorX, x, width),
47
+ y: resolveY(anchorY, y, height),
48
48
  width,
49
49
  height,
50
50
  options
@@ -66,6 +66,26 @@ class MatrixController extends Chart.DatasetController {
66
66
  }
67
67
  }
68
68
 
69
+ function resolveX(anchorX, x, width) {
70
+ if (anchorX === 'left' || anchorX === 'start') {
71
+ return x;
72
+ }
73
+ if (anchorX === 'right' || anchorX === 'end') {
74
+ return x - width;
75
+ }
76
+ return x - width / 2;
77
+ }
78
+
79
+ function resolveY(anchorY, y, height) {
80
+ if (anchorY === 'top' || anchorY === 'start') {
81
+ return y;
82
+ }
83
+ if (anchorY === 'bottom' || anchorY === 'end') {
84
+ return y - height;
85
+ }
86
+ return y - height / 2;
87
+ }
88
+
69
89
  MatrixController.id = 'matrix';
70
90
 
71
91
  MatrixController.version = version;
@@ -186,21 +206,23 @@ class MatrixElement extends Chart.Element {
186
206
  draw(ctx) {
187
207
  const options = this.options;
188
208
  const {inner, outer} = boundingRects(this);
209
+ const radius = helpers.toTRBLCorners(options.borderRadius);
189
210
 
190
211
  ctx.save();
191
212
 
192
213
  if (outer.w !== inner.w || outer.h !== inner.h) {
193
214
  ctx.beginPath();
194
- ctx.rect(outer.x, outer.y, outer.w, outer.h);
195
- ctx.clip();
196
- ctx.rect(inner.x, inner.y, inner.w, inner.h);
215
+ helpers.addRoundedRectPath(ctx, {x: outer.x, y: outer.y, w: outer.w, h: outer.h, radius});
216
+ helpers.addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});
197
217
  ctx.fillStyle = options.backgroundColor;
198
218
  ctx.fill();
199
219
  ctx.fillStyle = options.borderColor;
200
220
  ctx.fill('evenodd');
201
221
  } else {
222
+ ctx.beginPath();
223
+ helpers.addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});
202
224
  ctx.fillStyle = options.backgroundColor;
203
- ctx.fillRect(inner.x, inner.y, inner.w, inner.h);
225
+ ctx.fill();
204
226
  }
205
227
 
206
228
  ctx.restore();
@@ -240,12 +262,13 @@ MatrixElement.defaults = {
240
262
  backgroundColor: undefined,
241
263
  borderColor: undefined,
242
264
  borderWidth: undefined,
265
+ borderRadius: 0,
243
266
  anchorX: undefined,
244
267
  anchorY: undefined,
245
268
  width: 20,
246
269
  height: 20
247
270
  };
248
271
 
249
- Chart__default['default'].register(MatrixController, MatrixElement);
272
+ Chart__default["default"].register(MatrixController, MatrixElement);
250
273
 
251
- })));
274
+ }));
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * chartjs-chart-matrix v1.0.0
2
+ * chartjs-chart-matrix v1.1.1
3
3
  * https://chartjs-chart-matrix.pages.dev/
4
4
  * (c) 2021 Jukka Kurkela
5
5
  * Released under the MIT license
6
6
  */
7
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("chart.js"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","chart.js/helpers"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Chart,t.Chart.helpers)}(this,(function(t,e){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var r=i(t);class n extends t.DatasetController{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,r){const n=this,o="reset"===r,{xScale:h,yScale:s}=n._cachedMeta,a=n.resolveDataElementOptions(e,r),l=n.getSharedOptions(r,t[e],a);for(let a=e;a<e+i;a++){const e=!o&&n.getParsed(a),i=o?h.getBasePixel():h.getPixelForValue(e.x),l=o?s.getBasePixel():s.getPixelForValue(e.y),d=n.resolveDataElementOptions(a,r),{width:c,height:u,anchorX:f,anchorY:g}=d,p={x:"left"===f?i:i-c/("right"===f?1:2),y:"top"===g?l:l-u/("bottom"===g?1:2),width:c,height:u,options:d};n.updateElement(t[a],a,p,r)}n.updateSharedOptions(l,r)}draw(){const t=this,e=t.getMeta().data||[];let i,r;for(i=0,r=e.length;i<r;++i)e[i].draw(t._ctx)}}function o(t,e){const{x:i,y:r,width:n,height:o}=t.getProps(["x","y","width","height"],e);return{left:i,top:r,right:i+n,bottom:r+o}}function h(t,e,i){return Math.max(Math.min(t,i),e)}function s(t){const i=o(t),r=i.right-i.left,n=i.bottom-i.top,s=function(t,i,r){const n=t.options.borderWidth;let o,s,a,l;return e.isObject(n)?(o=+n.top||0,s=+n.right||0,a=+n.bottom||0,l=+n.left||0):o=s=a=l=+n||0,{t:h(o,0,r),r:h(s,0,i),b:h(a,0,r),l:h(l,0,i)}}(t,r/2,n/2);return{outer:{x:i.left,y:i.top,w:r,h:n},inner:{x:i.left+s.l,y:i.top+s.t,w:r-s.l-s.r,h:n-s.t-s.b}}}function a(t,e,i,r){const n=null===e,h=null===i,s=!(!t||n&&h)&&o(t,r);return s&&(n||e>=s.left&&e<=s.right)&&(h||i>=s.top&&i<=s.bottom)}n.id="matrix",n.version="1.0.0",n.defaults={dataElementType:"matrix",animations:{numbers:{type:"number",properties:["x","y","width","height"]}},anchorX:"center",anchorY:"center"},n.overrides={interaction:{mode:"nearest",intersect:!0},scales:{x:{type:"linear",offset:!0},y:{type:"linear",reverse:!0}}};class l extends t.Element{constructor(t){super(),this.options=void 0,this.width=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this.options,{inner:i,outer:r}=s(this);t.save(),r.w!==i.w||r.h!==i.h?(t.beginPath(),t.rect(r.x,r.y,r.w,r.h),t.clip(),t.rect(i.x,i.y,i.w,i.h),t.fillStyle=e.backgroundColor,t.fill(),t.fillStyle=e.borderColor,t.fill("evenodd")):(t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h)),t.restore()}inRange(t,e,i){return a(this,t,e,i)}inXRange(t,e){return a(this,t,null,e)}inYRange(t,e){return a(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,width:r,height:n}=this.getProps(["x","y","width","height"],t);return{x:e+r/2,y:i+n/2}}tooltipPosition(){return this.getCenterPoint()}getRange(t){return"x"===t?this.width/2:this.height/2}}l.id="matrix",l.defaults={backgroundColor:void 0,borderColor:void 0,borderWidth:void 0,anchorX:void 0,anchorY:void 0,width:20,height:20},r.default.register(n,l)}));
7
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("chart.js"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","chart.js/helpers"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Chart,t.Chart.helpers)}(this,(function(t,e){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var r=i(t);class n extends t.DatasetController{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,r){const n=this,s="reset"===r,{xScale:h,yScale:d}=n._cachedMeta,l=n.resolveDataElementOptions(e,r),u=n.getSharedOptions(r,t[e],l);for(let l=e;l<e+i;l++){const e=!s&&n.getParsed(l),i=s?h.getBasePixel():h.getPixelForValue(e.x),u=s?d.getBasePixel():d.getPixelForValue(e.y),c=n.resolveDataElementOptions(l,r),{width:f,height:g,anchorX:p,anchorY:x}=c,y={x:o(p,i,f),y:a(x,u,g),width:f,height:g,options:c};n.updateElement(t[l],l,y,r)}n.updateSharedOptions(u,r)}draw(){const t=this,e=t.getMeta().data||[];let i,r;for(i=0,r=e.length;i<r;++i)e[i].draw(t._ctx)}}function o(t,e,i){return"left"===t||"start"===t?e:"right"===t||"end"===t?e-i:e-i/2}function a(t,e,i){return"top"===t||"start"===t?e:"bottom"===t||"end"===t?e-i:e-i/2}function s(t,e){const{x:i,y:r,width:n,height:o}=t.getProps(["x","y","width","height"],e);return{left:i,top:r,right:i+n,bottom:r+o}}function h(t,e,i){return Math.max(Math.min(t,i),e)}function d(t){const i=s(t),r=i.right-i.left,n=i.bottom-i.top,o=function(t,i,r){const n=t.options.borderWidth;let o,a,s,d;return e.isObject(n)?(o=+n.top||0,a=+n.right||0,s=+n.bottom||0,d=+n.left||0):o=a=s=d=+n||0,{t:h(o,0,r),r:h(a,0,i),b:h(s,0,r),l:h(d,0,i)}}(t,r/2,n/2);return{outer:{x:i.left,y:i.top,w:r,h:n},inner:{x:i.left+o.l,y:i.top+o.t,w:r-o.l-o.r,h:n-o.t-o.b}}}function l(t,e,i,r){const n=null===e,o=null===i,a=!(!t||n&&o)&&s(t,r);return a&&(n||e>=a.left&&e<=a.right)&&(o||i>=a.top&&i<=a.bottom)}n.id="matrix",n.version="1.1.1",n.defaults={dataElementType:"matrix",animations:{numbers:{type:"number",properties:["x","y","width","height"]}},anchorX:"center",anchorY:"center"},n.overrides={interaction:{mode:"nearest",intersect:!0},scales:{x:{type:"linear",offset:!0},y:{type:"linear",reverse:!0}}};class u extends t.Element{constructor(t){super(),this.options=void 0,this.width=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const i=this.options,{inner:r,outer:n}=d(this),o=e.toTRBLCorners(i.borderRadius);t.save(),n.w!==r.w||n.h!==r.h?(t.beginPath(),e.addRoundedRectPath(t,{x:n.x,y:n.y,w:n.w,h:n.h,radius:o}),e.addRoundedRectPath(t,{x:r.x,y:r.y,w:r.w,h:r.h,radius:o}),t.fillStyle=i.backgroundColor,t.fill(),t.fillStyle=i.borderColor,t.fill("evenodd")):(t.beginPath(),e.addRoundedRectPath(t,{x:r.x,y:r.y,w:r.w,h:r.h,radius:o}),t.fillStyle=i.backgroundColor,t.fill()),t.restore()}inRange(t,e,i){return l(this,t,e,i)}inXRange(t,e){return l(this,t,null,e)}inYRange(t,e){return l(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,width:r,height:n}=this.getProps(["x","y","width","height"],t);return{x:e+r/2,y:i+n/2}}tooltipPosition(){return this.getCenterPoint()}getRange(t){return"x"===t?this.width/2:this.height/2}}u.id="matrix",u.defaults={backgroundColor:void 0,borderColor:void 0,borderWidth:void 0,borderRadius:0,anchorX:void 0,anchorY:void 0,width:20,height:20},r.default.register(n,u)}));
8
8
  //# sourceMappingURL=chartjs-chart-matrix.min.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chartjs-chart-matrix",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Chart.js module for creating matrix charts",
5
5
  "main": "dist/chartjs-chart-matrix.js",
6
6
  "module": "dist/chartjs-chart-matrix.esm.js",
@@ -29,7 +29,8 @@
29
29
  "matrix"
30
30
  ],
31
31
  "files": [
32
- "dist/*.js"
32
+ "dist/*.js",
33
+ "types/index.esm.d.ts"
33
34
  ],
34
35
  "author": "Jukka Kurkela",
35
36
  "license": "MIT",
@@ -38,18 +39,18 @@
38
39
  },
39
40
  "homepage": "https://chartjs-chart-matrix.pages.dev/",
40
41
  "devDependencies": {
41
- "@rollup/plugin-commonjs": "^18.0.0",
42
+ "@rollup/plugin-commonjs": "^21.0.1",
42
43
  "@rollup/plugin-json": "^4.1.0",
43
- "@rollup/plugin-node-resolve": "^11.2.0",
44
- "@typescript-eslint/eslint-plugin": "^4.22.0",
45
- "@typescript-eslint/parser": "^4.22.0",
44
+ "@rollup/plugin-node-resolve": "^13.0.0",
45
+ "@typescript-eslint/eslint-plugin": "^5.6.0",
46
+ "@typescript-eslint/parser": "^5.6.0",
46
47
  "chart.js": "^3.0.0",
47
48
  "chartjs-adapter-date-fns": "^2.0.0",
48
- "chartjs-test-utils": "^0.2.2",
49
+ "chartjs-test-utils": "^0.3.0",
49
50
  "concurrently": "^6.0.0",
50
51
  "cross-env": "^7.0.3",
51
52
  "date-fns": "^2.19.0",
52
- "eslint": "^7.22.0",
53
+ "eslint": "^8.4.1",
53
54
  "eslint-config-chartjs": "^0.3.0",
54
55
  "eslint-plugin-es": "^4.1.0",
55
56
  "eslint-plugin-html": "^6.1.2",
@@ -68,9 +69,9 @@
68
69
  "rollup-plugin-analyzer": "^4.0.0",
69
70
  "rollup-plugin-istanbul": "^3.0.0",
70
71
  "rollup-plugin-terser": "^7.0.2",
71
- "typescript": "^4.2.4",
72
+ "typescript": "^4.5.2",
72
73
  "vuepress": "^1.8.2",
73
- "vuepress-plugin-flexsearch": "^0.1.0",
74
+ "vuepress-plugin-flexsearch": "^0.3.0",
74
75
  "vuepress-plugin-redirect": "^1.2.5",
75
76
  "vuepress-theme-chartjs": "^0.2.0"
76
77
  },
@@ -0,0 +1,72 @@
1
+ import {
2
+ BorderRadius,
3
+ Chart,
4
+ ChartType,
5
+ ChartComponent,
6
+ CommonElementOptions,
7
+ CommonHoverOptions,
8
+ ControllerDatasetOptions,
9
+ DatasetController,
10
+ Element,
11
+ ScriptableAndArrayOptions,
12
+ ScriptableContext,
13
+ VisualElement
14
+ } from 'chart.js';
15
+ import { AnyObject } from 'chart.js/types/basic';
16
+
17
+ export interface MatrixControllerDatasetOptions<TType extends ChartType>
18
+ extends ControllerDatasetOptions,
19
+ ScriptableAndArrayOptions<MatrixOptions, ScriptableContext<TType>>,
20
+ ScriptableAndArrayOptions<CommonHoverOptions, ScriptableContext<TType>> {
21
+ }
22
+
23
+ export interface MatrixDataPoint {
24
+ x: number,
25
+ y: number,
26
+ }
27
+
28
+ declare module 'chart.js' {
29
+ export interface ChartTypeRegistry {
30
+ matrix: {
31
+ chartOptions: CoreChartOptions<'matrix'>;
32
+ datasetOptions: MatrixControllerDatasetOptions<'matrix'>;
33
+ defaultDataPoint: MatrixDataPoint;
34
+ parsedDataType: MatrixDataPoint;
35
+ metaExtensions: AnyObject;
36
+ scales: keyof CartesianScaleTypeRegistry;
37
+ }
38
+ }
39
+ }
40
+
41
+ export interface MatrixProps {
42
+ x: number;
43
+ y: number;
44
+ width: number;
45
+ height: number;
46
+ }
47
+
48
+ export type AnchorX = 'left' | 'center' | 'right';
49
+ export type AnchorY = 'top' | 'center' | 'bottom';
50
+ export interface MatrixOptions extends CommonElementOptions {
51
+ borderRadius: number | BorderRadius;
52
+ anchorX: AnchorX;
53
+ anchorY: AnchorY;
54
+ width: number;
55
+ height: number;
56
+ }
57
+
58
+ export type MatrixController = DatasetController;
59
+ export const MatrixController: ChartComponent & {
60
+ prototype: MatrixController;
61
+ new (chart: Chart, datasetIndex: number): MatrixController;
62
+ };
63
+
64
+ export interface MatrixElement<
65
+ T extends MatrixProps = MatrixProps,
66
+ O extends MatrixOptions = MatrixOptions
67
+ > extends Element<T, O>, VisualElement {}
68
+
69
+ export const MatrixElement: ChartComponent & {
70
+ prototype: MatrixElement;
71
+ new (cfg: AnyObject): MatrixElement;
72
+ };