chartjs-plugin-chart2music 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,502 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _chart2music = _interopRequireDefault(require("chart2music"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
18
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
20
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
21
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
23
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
25
+ var calcMedian = function calcMedian(nums) {
26
+ return nums.length % 2 ? nums[Math.floor(nums.length / 2)] : (nums[nums.length / 2] + nums[nums.length / 2 - 1]) / 2;
27
+ };
28
+ var fiveNumberSummary = function fiveNumberSummary(nums) {
29
+ var sortedNumbers = nums.sort();
30
+ var min, max, q1, q3;
31
+ var datamin = Math.min.apply(Math, _toConsumableArray(sortedNumbers));
32
+ var datamax = Math.max.apply(Math, _toConsumableArray(sortedNumbers));
33
+ var median = calcMedian(sortedNumbers);
34
+ var length = sortedNumbers.length;
35
+ if (length % 2) {
36
+ q1 = calcMedian(sortedNumbers.slice(0, Math.floor(length / 2)));
37
+ q3 = calcMedian(sortedNumbers.slice(Math.ceil(length % 2)));
38
+ } else {
39
+ q1 = calcMedian(sortedNumbers.slice(0, length / 2 - 1));
40
+ q3 = calcMedian(sortedNumbers.slice(length / 2));
41
+ }
42
+ var iqr = q3 - q1;
43
+ if (datamax < q3 + iqr) {
44
+ max = datamax;
45
+ } else {
46
+ var _sortedNumbers$revers;
47
+ max = (_sortedNumbers$revers = sortedNumbers.reverse().find(function (num) {
48
+ return num < datamax;
49
+ })) !== null && _sortedNumbers$revers !== void 0 ? _sortedNumbers$revers : datamax;
50
+ }
51
+ if (datamin < q1 - iqr) {
52
+ min = datamin;
53
+ } else {
54
+ var _sortedNumbers$revers2;
55
+ min = (_sortedNumbers$revers2 = sortedNumbers.reverse().find(function (num) {
56
+ return num < datamin;
57
+ })) !== null && _sortedNumbers$revers2 !== void 0 ? _sortedNumbers$revers2 : datamin;
58
+ }
59
+ var outlier = sortedNumbers.filter(function (num) {
60
+ return num < min || num > max;
61
+ });
62
+ return _objectSpread({
63
+ low: min,
64
+ high: max,
65
+ median: median,
66
+ q1: q1,
67
+ q3: q3
68
+ }, outlier.length > 0 ? {
69
+ outlier: outlier
70
+ } : {});
71
+ };
72
+ var whichBoxData = function whichBoxData(data) {
73
+ return data.map(function (row, index) {
74
+ if (_typeof(row) === "object" && "min" in row) {
75
+ return _objectSpread(_objectSpread({}, row), {}, {
76
+ low: row.min,
77
+ high: row.max,
78
+ x: index
79
+ }, "outliers" in row ? {
80
+ outlier: row.outliers
81
+ } : {});
82
+ }
83
+ if (Array.isArray(row)) {
84
+ return _objectSpread(_objectSpread({}, fiveNumberSummary(row)), {}, {
85
+ x: index
86
+ });
87
+ }
88
+ });
89
+ };
90
+ var processBoxData = function processBoxData(data) {
91
+ if (data.datasets.length === 1) {
92
+ return {
93
+ data: whichBoxData(data.datasets[0].data)
94
+ };
95
+ }
96
+ var groups = [];
97
+ var result = {};
98
+ data.datasets.forEach(function (obj, index) {
99
+ var _obj$label;
100
+ var groupName = (_obj$label = obj.label) !== null && _obj$label !== void 0 ? _obj$label : "Group ".concat(index + 1);
101
+ groups.push(groupName);
102
+ result[groupName] = whichBoxData(obj.data);
103
+ });
104
+ return {
105
+ groups: groups,
106
+ data: result
107
+ };
108
+ };
109
+ var chartStates = new Map();
110
+ var chartjs_c2m_converter = {
111
+ bar: "bar",
112
+ line: "line",
113
+ pie: "pie",
114
+ polarArea: "bar",
115
+ doughnut: "pie",
116
+ boxplot: "box",
117
+ radar: "bar",
118
+ wordCloud: "bar",
119
+ scatter: "scatter"
120
+ };
121
+ var processChartType = function processChartType(chart) {
122
+ var topLevelType = chart.config.type;
123
+ var panelTypes = chart.data.datasets.map(function (_ref) {
124
+ var type = _ref.type;
125
+ return type !== null && type !== void 0 ? type : topLevelType;
126
+ });
127
+ var invalid = panelTypes.find(function (t) {
128
+ return !(t in chartjs_c2m_converter);
129
+ });
130
+ if (invalid) {
131
+ return {
132
+ valid: false,
133
+ invalidType: invalid
134
+ };
135
+ }
136
+ if (_toConsumableArray(new Set(panelTypes)).length === 1) {
137
+ return {
138
+ valid: true,
139
+ c2m_types: chartjs_c2m_converter[panelTypes[0]]
140
+ };
141
+ }
142
+ return {
143
+ valid: true,
144
+ c2m_types: panelTypes.map(function (t) {
145
+ return chartjs_c2m_converter[t];
146
+ })
147
+ };
148
+ };
149
+ var generateAxisInfo = function generateAxisInfo(chartAxisInfo, chart) {
150
+ var _chartAxisInfo$title;
151
+ var axis = {};
152
+ if (chartAxisInfo !== null && chartAxisInfo !== void 0 && chartAxisInfo.min) {
153
+ if (typeof chartAxisInfo.min === "string") {
154
+ axis.minimum = chart.data.labels.indexOf(chartAxisInfo.min);
155
+ } else {
156
+ axis.minimum = chartAxisInfo.min;
157
+ }
158
+ }
159
+ if (chartAxisInfo !== null && chartAxisInfo !== void 0 && chartAxisInfo.max) {
160
+ if (typeof chartAxisInfo.max === "string") {
161
+ axis.maximum = chart.data.labels.indexOf(chartAxisInfo.max);
162
+ } else {
163
+ axis.maximum = chartAxisInfo.max;
164
+ }
165
+ }
166
+ var label = chartAxisInfo === null || chartAxisInfo === void 0 || (_chartAxisInfo$title = chartAxisInfo.title) === null || _chartAxisInfo$title === void 0 ? void 0 : _chartAxisInfo$title.text;
167
+ if (label) {
168
+ axis.label = label;
169
+ }
170
+ if ((chartAxisInfo === null || chartAxisInfo === void 0 ? void 0 : chartAxisInfo.type) === "logarithmic") {
171
+ axis.type = "log10";
172
+ }
173
+ return axis;
174
+ };
175
+ var generateAxes = function generateAxes(chart) {
176
+ var _chart$options, _chart$options2;
177
+ var axes = {
178
+ x: _objectSpread(_objectSpread({}, generateAxisInfo((_chart$options = chart.options) === null || _chart$options === void 0 || (_chart$options = _chart$options.scales) === null || _chart$options === void 0 ? void 0 : _chart$options.x, chart)), {}, {
179
+ valueLabels: chart.data.labels.slice(0)
180
+ }),
181
+ y: _objectSpread(_objectSpread({}, generateAxisInfo((_chart$options2 = chart.options) === null || _chart$options2 === void 0 || (_chart$options2 = _chart$options2.scales) === null || _chart$options2 === void 0 ? void 0 : _chart$options2.y, chart)), {}, {
182
+ format: function format(value) {
183
+ return value.toLocaleString();
184
+ }
185
+ })
186
+ };
187
+ return axes;
188
+ };
189
+ var whichDataStructure = function whichDataStructure(data) {
190
+ if (Array.isArray(data[0])) {
191
+ return data.map(function (arr, x) {
192
+ var _arr$sort = arr.sort(),
193
+ _arr$sort2 = _slicedToArray(_arr$sort, 2),
194
+ low = _arr$sort2[0],
195
+ high = _arr$sort2[1];
196
+ return {
197
+ x: x,
198
+ low: low,
199
+ high: high
200
+ };
201
+ });
202
+ }
203
+ return data;
204
+ };
205
+ var scrubX = function scrubX(data) {
206
+ var blackboard = JSON.parse(JSON.stringify(data));
207
+ var labels = [];
208
+ if (Array.isArray(data)) {
209
+ // console.log("not grouped");
210
+ // Not grouped
211
+ blackboard.forEach(function (item, x) {
212
+ if (_typeof(item) === "object" && item !== null && "x" in item) {
213
+ labels.push(item.x);
214
+ item.x = x;
215
+ }
216
+ });
217
+ return {
218
+ labels: labels,
219
+ data: blackboard
220
+ };
221
+ }
222
+ };
223
+ var processData = function processData(data, c2m_types) {
224
+ if (c2m_types === "box") {
225
+ return processBoxData(data);
226
+ }
227
+ var groups = [];
228
+ if (data.datasets.length === 1) {
229
+ return {
230
+ data: whichDataStructure(data.datasets[0].data)
231
+ };
232
+ }
233
+ var result = {};
234
+ data.datasets.forEach(function (obj, index) {
235
+ var _obj$label2;
236
+ var groupName = (_obj$label2 = obj.label) !== null && _obj$label2 !== void 0 ? _obj$label2 : "Group ".concat(index + 1);
237
+ groups.push(groupName);
238
+ result[groupName] = whichDataStructure(obj.data);
239
+ });
240
+ return {
241
+ groups: groups,
242
+ data: result
243
+ };
244
+ };
245
+ var determineChartTitle = function determineChartTitle(options) {
246
+ var _options$plugins;
247
+ if ((_options$plugins = options.plugins) !== null && _options$plugins !== void 0 && (_options$plugins = _options$plugins.title) !== null && _options$plugins !== void 0 && _options$plugins.text) {
248
+ if (Array.isArray(options.plugins.title.text)) {
249
+ return options.plugins.title.text.join(", ");
250
+ }
251
+ return options.plugins.title.text;
252
+ }
253
+ return "";
254
+ };
255
+ var determineCCElement = function determineCCElement(canvas, provided) {
256
+ if (provided) {
257
+ return provided;
258
+ }
259
+ var cc = document.createElement("div");
260
+ canvas.insertAdjacentElement("afterend", cc);
261
+ return cc;
262
+ };
263
+ var displayPoint = function displayPoint(chart) {
264
+ if (!chartStates.has(chart)) {
265
+ return;
266
+ }
267
+ var _chartStates$get = chartStates.get(chart),
268
+ ref = _chartStates$get.c2m,
269
+ visible_groups = _chartStates$get.visible_groups;
270
+ var _ref$getCurrent = ref.getCurrent(),
271
+ point = _ref$getCurrent.point,
272
+ index = _ref$getCurrent.index;
273
+ try {
274
+ var _chart$tooltip;
275
+ var highlightElements = [];
276
+ if ("custom" in point) {
277
+ highlightElements.push({
278
+ // @ts-ignore
279
+ datasetIndex: point.custom.group,
280
+ // @ts-ignore
281
+ index: point.custom.index
282
+ });
283
+ } else {
284
+ visible_groups.forEach(function (datasetIndex) {
285
+ highlightElements.push({
286
+ datasetIndex: datasetIndex,
287
+ index: index
288
+ });
289
+ });
290
+ }
291
+ chart === null || chart === void 0 || chart.setActiveElements(highlightElements);
292
+ chart === null || chart === void 0 || (_chart$tooltip = chart.tooltip) === null || _chart$tooltip === void 0 || _chart$tooltip.setActiveElements(highlightElements, {});
293
+ chart === null || chart === void 0 || chart.update();
294
+ } catch (e) {
295
+ // console.warn(e);
296
+ }
297
+ };
298
+ var generateChart = function generateChart(chart, options) {
299
+ var _scrub$labels, _options$axes, _options$axes2, _scrub$data, _chart$config$options, _groups$map;
300
+ var _processChartType = processChartType(chart),
301
+ valid = _processChartType.valid,
302
+ c2m_types = _processChartType.c2m_types,
303
+ invalidType = _processChartType.invalidType;
304
+ if (!valid) {
305
+ var _options$errorCallbac;
306
+ // @ts-ignore
307
+ (_options$errorCallbac = options.errorCallback) === null || _options$errorCallbac === void 0 || _options$errorCallbac.call(options, "Unable to connect chart2music to chart. The chart is of type \"".concat(invalidType, "\", which is not one of the supported chart types for this plugin. This plugin supports: ").concat(Object.keys(chartjs_c2m_converter).join(", ")));
308
+ return;
309
+ }
310
+ var axes = generateAxes(chart);
311
+ if (chart.config.type === "wordCloud") {
312
+ delete axes.x.minimum;
313
+ delete axes.x.maximum;
314
+ delete axes.y.minimum;
315
+ delete axes.y.maximum;
316
+ if (!axes.x.label) {
317
+ axes.x.label = "Word";
318
+ }
319
+ if (!axes.y.label) {
320
+ axes.y.label = "Emphasis";
321
+ }
322
+ }
323
+ // Generate CC element
324
+ var cc = determineCCElement(chart.canvas, options.cc);
325
+ var _processData = processData(chart.data, c2m_types),
326
+ data = _processData.data,
327
+ groups = _processData.groups;
328
+ // lastDataObj = JSON.stringify(data);
329
+ var scrub = scrubX(data);
330
+ if (scrub !== null && scrub !== void 0 && scrub.labels && (scrub === null || scrub === void 0 || (_scrub$labels = scrub.labels) === null || _scrub$labels === void 0 ? void 0 : _scrub$labels.length) > 0) {
331
+ // Something was scrubbed
332
+ if (!chart.data.labels || chart.data.labels.length === 0) {
333
+ axes.x.valueLabels = scrub.labels.slice(0);
334
+ }
335
+ }
336
+ if (c2m_types === "scatter") {
337
+ scrub === null || scrub === void 0 || delete scrub.data;
338
+ delete axes.x.valueLabels;
339
+ }
340
+ axes = _objectSpread(_objectSpread({}, axes), {}, {
341
+ x: _objectSpread(_objectSpread({}, axes.x), (_options$axes = options.axes) === null || _options$axes === void 0 ? void 0 : _options$axes.x),
342
+ y: _objectSpread(_objectSpread({}, axes.y), (_options$axes2 = options.axes) === null || _options$axes2 === void 0 ? void 0 : _options$axes2.y)
343
+ });
344
+ var c2mOptions = {
345
+ cc: cc,
346
+ element: chart.canvas,
347
+ type: c2m_types,
348
+ data: (_scrub$data = scrub === null || scrub === void 0 ? void 0 : scrub.data) !== null && _scrub$data !== void 0 ? _scrub$data : data,
349
+ title: determineChartTitle(chart.options),
350
+ axes: axes,
351
+ options: {
352
+ // @ts-ignore
353
+ onFocusCallback: function onFocusCallback() {
354
+ displayPoint(chart);
355
+ }
356
+ }
357
+ };
358
+ if (Array.isArray(c2mOptions.data)) {
359
+ if (isNaN(c2mOptions.data[0])) {
360
+ c2mOptions.data = c2mOptions.data.map(function (point, index) {
361
+ return _objectSpread(_objectSpread({}, point), {}, {
362
+ custom: {
363
+ group: 0,
364
+ index: index
365
+ }
366
+ });
367
+ });
368
+ } else {
369
+ c2mOptions.data = c2mOptions.data.map(function (num, index) {
370
+ return {
371
+ x: index,
372
+ y: num,
373
+ custom: {
374
+ group: 0,
375
+ index: index
376
+ }
377
+ };
378
+ });
379
+ }
380
+ } else {
381
+ var _groups = Object.keys(c2mOptions.data);
382
+ _groups.forEach(function (groupName, groupNumber) {
383
+ if (!isNaN(c2mOptions.data[groupName][0])) {
384
+ c2mOptions.data[groupName] = c2mOptions.data[groupName].map(function (num, index) {
385
+ return {
386
+ x: index,
387
+ y: num,
388
+ custom: {
389
+ group: groupNumber,
390
+ index: index
391
+ }
392
+ };
393
+ });
394
+ } else {
395
+ c2mOptions.data[groupName] = c2mOptions.data[groupName].map(function (point, index) {
396
+ return _objectSpread(_objectSpread({}, point), {}, {
397
+ custom: {
398
+ group: groupNumber,
399
+ index: index
400
+ }
401
+ });
402
+ });
403
+ }
404
+ });
405
+ }
406
+ // @ts-ignore
407
+ if ((_chart$config$options = chart.config.options) !== null && _chart$config$options !== void 0 && (_chart$config$options = _chart$config$options.scales) !== null && _chart$config$options !== void 0 && (_chart$config$options = _chart$config$options.x) !== null && _chart$config$options !== void 0 && _chart$config$options.stacked) {
408
+ // @ts-ignore
409
+ c2mOptions.options.stack = true;
410
+ }
411
+ // @ts-ignore
412
+ if (options.audioEngine) {
413
+ // @ts-ignore
414
+ c2mOptions.audioEngine = options.audioEngine;
415
+ }
416
+ if (c2mOptions.data.length === 0) {
417
+ return;
418
+ }
419
+ var _c2mChart = (0, _chart2music["default"])(c2mOptions),
420
+ err = _c2mChart.err,
421
+ c2m = _c2mChart.data;
422
+ /* istanbul-ignore-next */
423
+ if (err) {
424
+ var _options$errorCallbac2;
425
+ // @ts-ignore
426
+ (_options$errorCallbac2 = options.errorCallback) === null || _options$errorCallbac2 === void 0 || _options$errorCallbac2.call(options, err);
427
+ return;
428
+ }
429
+ if (!c2m) {
430
+ return;
431
+ }
432
+ chartStates.set(chart, {
433
+ c2m: c2m,
434
+ visible_groups: (_groups$map = groups === null || groups === void 0 ? void 0 : groups.map(function (g, i) {
435
+ return i;
436
+ })) !== null && _groups$map !== void 0 ? _groups$map : []
437
+ });
438
+ };
439
+ var plugin = exports["default"] = {
440
+ id: "chartjs2music",
441
+ afterInit: function afterInit(chart, args, options) {
442
+ if (!chartStates.has(chart)) {
443
+ generateChart(chart, options);
444
+ // Remove tooltip when the chart blurs
445
+ chart.canvas.addEventListener("blur", function () {
446
+ var _chart$tooltip2;
447
+ chart.setActiveElements([]);
448
+ (_chart$tooltip2 = chart.tooltip) === null || _chart$tooltip2 === void 0 || _chart$tooltip2.setActiveElements([], {});
449
+ try {
450
+ chart.update();
451
+ } catch (e) {
452
+ // console.warn(e);
453
+ }
454
+ });
455
+ // Show tooltip when the chart receives focus
456
+ chart.canvas.addEventListener("focus", function () {
457
+ displayPoint(chart);
458
+ });
459
+ }
460
+ },
461
+ afterDatasetUpdate: function afterDatasetUpdate(chart, args, options) {
462
+ if (!args.mode) {
463
+ return;
464
+ }
465
+ if (!chartStates.has(chart)) {
466
+ generateChart(chart, options);
467
+ }
468
+ var _chartStates$get2 = chartStates.get(chart),
469
+ ref = _chartStates$get2.c2m,
470
+ visible_groups = _chartStates$get2.visible_groups;
471
+ if (!ref) {
472
+ return;
473
+ }
474
+ // @ts-ignore
475
+ var groups = ref._groups.slice(0);
476
+ // @ts-ignore
477
+ if (ref._options.stack) {
478
+ groups.shift();
479
+ }
480
+ if (args.mode === "hide") {
481
+ var err = ref.setCategoryVisibility(groups[args.index], false);
482
+ visible_groups.splice(args.index, 1);
483
+ if (err) {
484
+ console.error(err);
485
+ }
486
+ return;
487
+ }
488
+ if (args.mode === "show") {
489
+ var _err = ref.setCategoryVisibility(groups[args.index], true);
490
+ visible_groups.push(args.index);
491
+ if (_err) {
492
+ console.error(_err);
493
+ }
494
+ return;
495
+ }
496
+ },
497
+ defaults: {
498
+ cc: null,
499
+ audioEngine: null,
500
+ errorCallback: null
501
+ }
502
+ };
package/dist/plugin.js CHANGED
@@ -164,7 +164,7 @@ var chartjs2music = (function (c2mChart) {
164
164
  // console.log("not grouped");
165
165
  // Not grouped
166
166
  blackboard.forEach((item, x) => {
167
- if (typeof item === "object" && "x" in item) {
167
+ if (typeof item === "object" && item !== null && "x" in item) {
168
168
  labels.push(item.x);
169
169
  item.x = x;
170
170
  }
@@ -388,7 +388,12 @@ var chartjs2music = (function (c2mChart) {
388
388
  chart.canvas.addEventListener("blur", () => {
389
389
  chart.setActiveElements([]);
390
390
  chart.tooltip?.setActiveElements([], {});
391
- chart.update();
391
+ try {
392
+ chart.update();
393
+ }
394
+ catch (e) {
395
+ // console.warn(e);
396
+ }
392
397
  });
393
398
  // Show tooltip when the chart receives focus
394
399
  chart.canvas.addEventListener("focus", () => {
package/dist/plugin.mjs CHANGED
@@ -163,7 +163,7 @@ const scrubX = (data) => {
163
163
  // console.log("not grouped");
164
164
  // Not grouped
165
165
  blackboard.forEach((item, x) => {
166
- if (typeof item === "object" && "x" in item) {
166
+ if (typeof item === "object" && item !== null && "x" in item) {
167
167
  labels.push(item.x);
168
168
  item.x = x;
169
169
  }
@@ -387,7 +387,12 @@ const plugin = {
387
387
  chart.canvas.addEventListener("blur", () => {
388
388
  chart.setActiveElements([]);
389
389
  chart.tooltip?.setActiveElements([], {});
390
- chart.update();
390
+ try {
391
+ chart.update();
392
+ }
393
+ catch (e) {
394
+ // console.warn(e);
395
+ }
391
396
  });
392
397
  // Show tooltip when the chart receives focus
393
398
  chart.canvas.addEventListener("focus", () => {
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "chartjs-plugin-chart2music",
3
- "version": "0.1.5",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "Chart.js plugin for Chart2Music. Turns chart.js charts into music so the blind can hear data.",
6
6
  "main": "dist/plugin.js",
7
7
  "module": "dist/plugin.mjs",
8
8
  "exports": {
9
- "import": "./dist/plugin.mjs"
9
+ "import": "./dist/plugin.mjs",
10
+ "require": "./dist/plugin.cjs"
10
11
  },
11
12
  "files": [
12
13
  "dist/*"
@@ -30,31 +31,36 @@
30
31
  "license": "MIT",
31
32
  "scripts": {
32
33
  "start": "vite",
33
- "build": "rollup -c rollup.config.js --silent",
34
+ "build": "rollup -c rollup.config.js --silent && yarn build-cjs",
35
+ "build-cjs": "babel ./dist/plugin.mjs --out-file ./dist/plugin.cjs",
34
36
  "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
35
37
  "depcheck": "depcheck",
36
38
  "clean": "rimraf dist coverage"
37
39
  },
38
40
  "devDependencies": {
39
- "@rollup/plugin-typescript": "11.1.5",
40
- "@sgratzl/chartjs-chart-boxplot": "4.2.7",
41
- "@types/jest": "29.5.6",
41
+ "@babel/cli": "^7.23.9",
42
+ "@babel/core": "^7.23.9",
43
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
44
+ "@babel/preset-env": "^7.23.9",
45
+ "@rollup/plugin-typescript": "11.1.6",
46
+ "@sgratzl/chartjs-chart-boxplot": "4.2.8",
47
+ "@types/jest": "29.5.11",
42
48
  "canvas": "2.11.2",
43
- "chartjs-chart-wordcloud": "4.3.2",
49
+ "chartjs-chart-wordcloud": "4.3.3",
44
50
  "chartjs-plugin-a11y-legend": "0.1.1",
45
51
  "cross-env": "7.0.3",
46
52
  "depcheck": "1.4.7",
47
53
  "jest": "29.7.0",
48
54
  "jest-environment-jsdom": "29.7.0",
49
55
  "rimraf": "5.0.5",
50
- "rollup": "4.1.5",
51
- "ts-jest": "29.1.1",
56
+ "rollup": "4.9.6",
57
+ "ts-jest": "29.1.2",
52
58
  "tslib": "2.6.2",
53
- "typescript": "5.2.2",
54
- "vite": "4.5.0"
59
+ "typescript": "5.3.3",
60
+ "vite": "5.0.12"
55
61
  },
56
62
  "dependencies": {
57
- "chart.js": "4.4.0",
58
- "chart2music": "1.12.2"
63
+ "chart.js": "4.4.1",
64
+ "chart2music": "1.13.0"
59
65
  }
60
66
  }