@vaadin/charts 23.1.0-alpha1 → 23.1.0-alpha4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/charts",
3
- "version": "23.1.0-alpha1",
3
+ "version": "23.1.0-alpha4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -34,15 +34,15 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "@polymer/polymer": "^3.0.0",
37
- "@vaadin/component-base": "23.1.0-alpha1",
37
+ "@vaadin/component-base": "23.1.0-alpha4",
38
38
  "@vaadin/vaadin-license-checker": "^2.1.0",
39
- "@vaadin/vaadin-themable-mixin": "23.1.0-alpha1",
39
+ "@vaadin/vaadin-themable-mixin": "23.1.0-alpha4",
40
40
  "highcharts": "9.2.2"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@esm-bundle/chai": "^4.3.4",
44
44
  "@vaadin/testing-helpers": "^0.3.2",
45
- "sinon": "^9.2.4"
45
+ "sinon": "^13.0.2"
46
46
  },
47
- "gitHead": "5d0cdee069f866037c507265fafb4d0476795333"
47
+ "gitHead": "aacdb7fe09811894751f0378ff7fb66071892c71"
48
48
  }
@@ -123,7 +123,7 @@ class ChartSeries extends PolymerElement {
123
123
  */
124
124
  values: {
125
125
  type: Array,
126
- value: () => []
126
+ value: () => [],
127
127
  },
128
128
 
129
129
  /**
@@ -135,7 +135,7 @@ class ChartSeries extends PolymerElement {
135
135
  */
136
136
  valueMin: {
137
137
  type: Number,
138
- reflectToAttribute: true
138
+ reflectToAttribute: true,
139
139
  },
140
140
 
141
141
  /**
@@ -145,7 +145,7 @@ class ChartSeries extends PolymerElement {
145
145
  */
146
146
  valueMax: {
147
147
  type: Number,
148
- reflectToAttribute: true
148
+ reflectToAttribute: true,
149
149
  },
150
150
 
151
151
  /**
@@ -155,7 +155,7 @@ class ChartSeries extends PolymerElement {
155
155
  */
156
156
  type: {
157
157
  type: String,
158
- reflectToAttribute: true
158
+ reflectToAttribute: true,
159
159
  },
160
160
 
161
161
  /**
@@ -164,7 +164,7 @@ class ChartSeries extends PolymerElement {
164
164
  */
165
165
  title: {
166
166
  type: String,
167
- reflectToAttribute: true
167
+ reflectToAttribute: true,
168
168
  },
169
169
 
170
170
  /**
@@ -177,7 +177,7 @@ class ChartSeries extends PolymerElement {
177
177
  */
178
178
  markers: {
179
179
  type: String,
180
- reflectToAttribute: true
180
+ reflectToAttribute: true,
181
181
  },
182
182
 
183
183
  /**
@@ -187,7 +187,7 @@ class ChartSeries extends PolymerElement {
187
187
  */
188
188
  unit: {
189
189
  type: String,
190
- reflectToAttribute: true
190
+ reflectToAttribute: true,
191
191
  },
192
192
 
193
193
  /**
@@ -198,7 +198,7 @@ class ChartSeries extends PolymerElement {
198
198
  */
199
199
  stack: {
200
200
  type: String,
201
- reflectToAttribute: true
201
+ reflectToAttribute: true,
202
202
  },
203
203
 
204
204
  /**
@@ -210,7 +210,7 @@ class ChartSeries extends PolymerElement {
210
210
  */
211
211
  neckPosition: {
212
212
  type: String,
213
- reflectToAttribute: true
213
+ reflectToAttribute: true,
214
214
  },
215
215
 
216
216
  /**
@@ -222,7 +222,7 @@ class ChartSeries extends PolymerElement {
222
222
  */
223
223
  neckWidth: {
224
224
  type: String,
225
- reflectToAttribute: true
225
+ reflectToAttribute: true,
226
226
  },
227
227
 
228
228
  /**
@@ -231,7 +231,7 @@ class ChartSeries extends PolymerElement {
231
231
  * @readonly
232
232
  */
233
233
  options: {
234
- type: Object
234
+ type: Object,
235
235
  },
236
236
 
237
237
  /**
@@ -240,7 +240,7 @@ class ChartSeries extends PolymerElement {
240
240
  */
241
241
  additionalOptions: {
242
242
  type: Object,
243
- reflectToAttribute: true
243
+ reflectToAttribute: true,
244
244
  },
245
245
 
246
246
  /**
@@ -248,8 +248,8 @@ class ChartSeries extends PolymerElement {
248
248
  * @protected
249
249
  */
250
250
  _series: {
251
- type: Object
252
- }
251
+ type: Object,
252
+ },
253
253
  };
254
254
  }
255
255
 
@@ -265,7 +265,7 @@ class ChartSeries extends PolymerElement {
265
265
  '__unitObserver(unit, valueMin, valueMax, _series)',
266
266
  '__valueMinObserver(valueMin, _series)',
267
267
  '__valueMaxObserver(valueMax, _series)',
268
- '__valuesObserver(values.splices, _series)'
268
+ '__valuesObserver(values.splices, _series)',
269
269
  ];
270
270
  }
271
271
 
@@ -409,7 +409,7 @@ class ChartSeries extends PolymerElement {
409
409
  }
410
410
 
411
411
  series.update({
412
- marker: this.__markersConfiguration
412
+ marker: this.__markersConfiguration,
413
413
  });
414
414
  }
415
415
 
@@ -434,7 +434,7 @@ class ChartSeries extends PolymerElement {
434
434
 
435
435
  /** @private */
436
436
  __showWarn(propertyName, acceptedValues) {
437
- console.warn('<vaadin-chart-series> Acceptable values for "' + propertyName + '" are ' + acceptedValues);
437
+ console.warn(`<vaadin-chart-series> Acceptable values for "${propertyName}" are ${acceptedValues}`);
438
438
  }
439
439
  }
440
440
 
@@ -582,13 +582,13 @@ declare class Chart extends ResizeMixin(ThemableMixin(ElementMixin(HTMLElement))
582
582
  addEventListener<K extends keyof ChartEventMap>(
583
583
  type: K,
584
584
  listener: (this: Chart, ev: ChartEventMap[K]) => void,
585
- options?: boolean | AddEventListenerOptions
585
+ options?: boolean | AddEventListenerOptions,
586
586
  ): void;
587
587
 
588
588
  removeEventListener<K extends keyof ChartEventMap>(
589
589
  type: K,
590
590
  listener: (this: Chart, ev: ChartEventMap[K]) => void,
591
- options?: boolean | EventListenerOptions
591
+ options?: boolean | EventListenerOptions,
592
592
  ): void;
593
593
  }
594
594
 
@@ -52,7 +52,7 @@ export function deepMerge(target, source) {
52
52
  }
53
53
 
54
54
  ['exportChart', 'exportChartLocal', 'getSVG'].forEach((methodName) => {
55
- /* eslint-disable no-invalid-this */
55
+ /* eslint-disable no-invalid-this, prefer-arrow-callback */
56
56
  Highcharts.wrap(Highcharts.Chart.prototype, methodName, function (proceed, ...args) {
57
57
  Highcharts.fireEvent(this, 'beforeExport');
58
58
  const result = proceed.apply(this, args);
@@ -62,6 +62,10 @@ export function deepMerge(target, source) {
62
62
  /* eslint-enable no-invalid-this */
63
63
  });
64
64
 
65
+ // Init Highcharts global language defaults
66
+ // No data message should be empty by default
67
+ Highcharts.setOptions({ lang: { noData: '' } });
68
+
65
69
  /**
66
70
  * `<vaadin-chart>` is a Web Component for creating high quality charts.
67
71
  *
@@ -305,7 +309,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
305
309
  */
306
310
  categories: {
307
311
  type: Object,
308
- reflectToAttribute: true
312
+ reflectToAttribute: true,
309
313
  },
310
314
 
311
315
  /**
@@ -314,7 +318,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
314
318
  */
315
319
  categoryMax: {
316
320
  type: Number,
317
- reflectToAttribute: true
321
+ reflectToAttribute: true,
318
322
  },
319
323
 
320
324
  /**
@@ -323,7 +327,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
323
327
  */
324
328
  categoryMin: {
325
329
  type: Number,
326
- reflectToAttribute: true
330
+ reflectToAttribute: true,
327
331
  },
328
332
 
329
333
  /**
@@ -339,7 +343,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
339
343
  */
340
344
  categoryPosition: {
341
345
  type: String,
342
- reflectToAttribute: true
346
+ reflectToAttribute: true,
343
347
  },
344
348
 
345
349
  /**
@@ -349,7 +353,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
349
353
  */
350
354
  noLegend: {
351
355
  type: Boolean,
352
- reflectToAttribute: true
356
+ reflectToAttribute: true,
353
357
  },
354
358
 
355
359
  /**
@@ -362,7 +366,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
362
366
  */
363
367
  stacking: {
364
368
  type: String,
365
- reflectToAttribute: true
369
+ reflectToAttribute: true,
366
370
  },
367
371
 
368
372
  /**
@@ -370,7 +374,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
370
374
  */
371
375
  timeline: {
372
376
  type: Boolean,
373
- reflectToAttribute: true
377
+ reflectToAttribute: true,
374
378
  },
375
379
 
376
380
  /**
@@ -379,7 +383,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
379
383
  */
380
384
  title: {
381
385
  type: String,
382
- reflectToAttribute: true
386
+ reflectToAttribute: true,
383
387
  },
384
388
 
385
389
  /**
@@ -387,7 +391,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
387
391
  */
388
392
  tooltip: {
389
393
  type: Boolean,
390
- reflectToAttribute: true
394
+ reflectToAttribute: true,
391
395
  },
392
396
 
393
397
  /**
@@ -396,7 +400,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
396
400
  */
397
401
  type: {
398
402
  type: String,
399
- reflectToAttribute: true
403
+ reflectToAttribute: true,
400
404
  },
401
405
 
402
406
  /**
@@ -405,7 +409,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
405
409
  */
406
410
  subtitle: {
407
411
  type: String,
408
- reflectToAttribute: true
412
+ reflectToAttribute: true,
409
413
  },
410
414
 
411
415
  /**
@@ -418,7 +422,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
418
422
  */
419
423
  chart3d: {
420
424
  type: Boolean,
421
- reflectToAttribute: true
425
+ reflectToAttribute: true,
422
426
  },
423
427
 
424
428
  /**
@@ -428,8 +432,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
428
432
  */
429
433
  emptyText: {
430
434
  type: String,
431
- value: ' ',
432
- reflectToAttribute: true
435
+ reflectToAttribute: true,
433
436
  },
434
437
 
435
438
  /**
@@ -438,7 +441,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
438
441
  */
439
442
  additionalOptions: {
440
443
  type: Object,
441
- reflectToAttribute: true
444
+ reflectToAttribute: true,
442
445
  },
443
446
 
444
447
  /**
@@ -447,8 +450,8 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
447
450
  */
448
451
  polar: {
449
452
  type: Boolean,
450
- reflectToAttribute: true
451
- }
453
+ reflectToAttribute: true,
454
+ },
452
455
  };
453
456
  }
454
457
 
@@ -467,7 +470,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
467
470
  '__updateSubtitle(subtitle, configuration)',
468
471
  '__updateTitle(title, configuration)',
469
472
  '__updateType(type, configuration)',
470
- '__updateAdditionalOptions(additionalOptions.*)'
473
+ '__updateAdditionalOptions(additionalOptions.*)',
471
474
  ];
472
475
  }
473
476
 
@@ -490,29 +493,29 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
490
493
 
491
494
  this._baseConfig = {
492
495
  chart: {
493
- styledMode: true
496
+ styledMode: true,
494
497
  },
495
498
  credits: {
496
- enabled: false
499
+ enabled: false,
497
500
  },
498
501
  exporting: {
499
- enabled: false
502
+ enabled: false,
500
503
  },
501
504
  title: {
502
- text: null
505
+ text: null,
503
506
  },
504
507
  series: [],
505
508
  xAxis: {},
506
509
  yAxis: {
507
- axisGenerated: true
508
- }
510
+ axisGenerated: true,
511
+ },
509
512
  };
510
513
 
511
514
  this._baseChart3d = {
512
515
  enabled: true,
513
516
  alpha: 15,
514
517
  beta: 15,
515
- depth: 50
518
+ depth: 50,
516
519
  };
517
520
  }
518
521
 
@@ -532,9 +535,17 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
532
535
  this._jsonConfigurationBuffer = null;
533
536
  this.__initChart(options);
534
537
  this.__addChildObserver();
538
+ this.__checkTurboMode();
535
539
  });
536
540
  }
537
541
 
542
+ /** @protected */
543
+ ready() {
544
+ super.ready();
545
+
546
+ this.addEventListener('chart-redraw', this.__onRedraw.bind(this));
547
+ }
548
+
538
549
  /**
539
550
  * @return {!Options}
540
551
  */
@@ -554,7 +565,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
554
565
 
555
566
  if (this.title) {
556
567
  options.title = {
557
- text: this.title
568
+ text: this.title,
558
569
  };
559
570
  }
560
571
 
@@ -568,7 +579,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
568
579
 
569
580
  if (this.subtitle) {
570
581
  options.subtitle = {
571
- text: this.subtitle
582
+ text: this.subtitle,
572
583
  };
573
584
  }
574
585
 
@@ -604,7 +615,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
604
615
 
605
616
  if (this.noLegend) {
606
617
  options.legend = {
607
- enabled: false
618
+ enabled: false,
608
619
  };
609
620
  }
610
621
 
@@ -741,7 +752,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
741
752
  * @param {Object} detail.originalEvent object with details about the event sent
742
753
  * @param {Object} chart Chart object where the event was sent from
743
754
  */
744
- selection: 'chart-selection'
755
+ selection: 'chart-selection',
745
756
  };
746
757
  }
747
758
 
@@ -813,7 +824,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
813
824
  * @param {Object} detail.originalEvent object with details about the event sent
814
825
  * @param {Object} series Series object where the event was sent from
815
826
  */
816
- show: 'series-show'
827
+ show: 'series-show',
817
828
  };
818
829
  }
819
830
 
@@ -885,7 +896,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
885
896
  * @param {Object} detail.originalEvent object with details about the event sent
886
897
  * @param {Object} point Point object where the event was sent from
887
898
  */
888
- update: 'point-update'
899
+ update: 'point-update',
889
900
  };
890
901
  }
891
902
 
@@ -898,7 +909,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
898
909
  * @param {Object} detail.originalEvent object with details about the event sent
899
910
  * @param {Object} axis Point object where the event was sent from
900
911
  */
901
- afterSetExtremes: 'xaxes-extremes-set'
912
+ afterSetExtremes: 'xaxes-extremes-set',
902
913
  };
903
914
  }
904
915
 
@@ -911,7 +922,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
911
922
  * @param {Object} detail.originalEvent object with details about the event sent
912
923
  * @param {Object} axis Point object where the event was sent from
913
924
  */
914
- afterSetExtremes: 'yaxes-extremes-set'
925
+ afterSetExtremes: 'yaxes-extremes-set',
915
926
  };
916
927
  }
917
928
 
@@ -1032,13 +1043,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1032
1043
  // Best effort to make chart display custom empty-text messages when series are removed.
1033
1044
  // This is needed because Highcharts currently doesn't react. A condition not catered for is
1034
1045
  // when all points are removed from all series without removing any series.
1035
- const isEmpty =
1036
- this.configuration.series.length === 0 ||
1037
- this.configuration.series.map((e) => e.data.length === 0).reduce((e1, e2) => e1 && e2, true);
1038
- if (isEmpty) {
1039
- this.configuration.hideNoData();
1040
- this.configuration.showNoData(this.emptyText);
1041
- }
1046
+ this.__updateNoDataElement(this.configuration);
1042
1047
  }
1043
1048
 
1044
1049
  /** @private */
@@ -1061,7 +1066,9 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1061
1066
  /** @protected */
1062
1067
  disconnectedCallback() {
1063
1068
  super.disconnectedCallback();
1064
- this._childObserver && this._childObserver.disconnect();
1069
+ if (this._childObserver) {
1070
+ this._childObserver.disconnect();
1071
+ }
1065
1072
  }
1066
1073
 
1067
1074
  /**
@@ -1226,10 +1233,10 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1226
1233
  if (attr.indexOf('_fn_') === 0 && (typeof targetProperty === 'string' || targetProperty instanceof String)) {
1227
1234
  try {
1228
1235
  // eslint-disable-next-line no-eval
1229
- jsonConfiguration[attr.substr(4)] = eval('(' + targetProperty + ')');
1236
+ jsonConfiguration[attr.substr(4)] = eval(`(${targetProperty})`);
1230
1237
  } catch (e) {
1231
1238
  // eslint-disable-next-line no-eval
1232
- jsonConfiguration[attr.substr(4)] = eval('(function(){' + targetProperty + '})');
1239
+ jsonConfiguration[attr.substr(4)] = eval(`(function(){${targetProperty}})`);
1233
1240
  }
1234
1241
  delete jsonConfiguration[attr];
1235
1242
  } else if (targetProperty instanceof Object) {
@@ -1295,8 +1302,8 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1295
1302
  composed: true,
1296
1303
  detail: {
1297
1304
  originalEvent: event,
1298
- [eventType]: event.target
1299
- }
1305
+ [eventType]: event.target,
1306
+ },
1300
1307
  };
1301
1308
 
1302
1309
  if (event.type === 'afterSetExtremes') {
@@ -1346,12 +1353,11 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1346
1353
 
1347
1354
  // Zoom out a bit to avoid clipping the chart's edge on paper
1348
1355
  effectiveCss =
1349
- effectiveCss +
1350
- 'body {' +
1351
- ' -moz-transform: scale(0.9, 0.9);' + // Mozilla
1352
- ' zoom: 0.9;' + // Others
1353
- ' zoom: 90%;' + // Webkit
1354
- '}';
1356
+ `${effectiveCss}body {` +
1357
+ ` -moz-transform: scale(0.9, 0.9);` + // Mozilla
1358
+ ` zoom: 0.9;` + // Others
1359
+ ` zoom: 90%;` + // Webkit
1360
+ `}`;
1355
1361
 
1356
1362
  this.tempBodyStyle = document.createElement('style');
1357
1363
  this.tempBodyStyle.textContent = effectiveCss;
@@ -1509,14 +1515,14 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1509
1515
 
1510
1516
  config.update({
1511
1517
  chart: {
1512
- inverted: this.__shouldInvert()
1513
- }
1518
+ inverted: this.__shouldInvert(),
1519
+ },
1514
1520
  });
1515
1521
 
1516
1522
  config.xAxis.forEach((e) =>
1517
1523
  e.update({
1518
- opposite: this.__shouldFlipOpposite()
1519
- })
1524
+ opposite: this.__shouldFlipOpposite(),
1525
+ }),
1520
1526
  );
1521
1527
  }
1522
1528
 
@@ -1561,7 +1567,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1561
1567
 
1562
1568
  if (type && type.length > 0) {
1563
1569
  config.update({
1564
- chart: { type }
1570
+ chart: { type },
1565
1571
  });
1566
1572
  }
1567
1573
  }
@@ -1610,8 +1616,8 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1610
1616
 
1611
1617
  config.update({
1612
1618
  plotOptions: {
1613
- series: { stacking }
1614
- }
1619
+ series: { stacking },
1620
+ },
1615
1621
  });
1616
1622
  }
1617
1623
 
@@ -1627,17 +1633,17 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1627
1633
  options3d: {
1628
1634
  ...this._baseChart3d,
1629
1635
  ...(this.additionalOptions && this.additionalOptions.chart && this.additionalOptions.chart.options3d),
1630
- enabled: true
1631
- }
1632
- }
1636
+ enabled: true,
1637
+ },
1638
+ },
1633
1639
  });
1634
1640
  } else {
1635
1641
  config.update({
1636
1642
  chart: {
1637
1643
  options3d: {
1638
- enabled: false
1639
- }
1640
- }
1644
+ enabled: false,
1645
+ },
1646
+ },
1641
1647
  });
1642
1648
  }
1643
1649
  }
@@ -1649,7 +1655,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1649
1655
  }
1650
1656
 
1651
1657
  config.update({
1652
- chart: { polar }
1658
+ chart: { polar },
1653
1659
  });
1654
1660
  }
1655
1661
 
@@ -1661,11 +1667,24 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1661
1667
 
1662
1668
  config.update({
1663
1669
  lang: {
1664
- noData: emptyText
1665
- }
1670
+ noData: emptyText,
1671
+ },
1666
1672
  });
1667
- config.hideNoData();
1668
- config.showNoData(emptyText);
1673
+ this.__updateNoDataElement(config);
1674
+ }
1675
+
1676
+ /**
1677
+ * Force the no data text element to become visible if the chart has no data.
1678
+ * This is necessary in cases where Highcharts does not update the element
1679
+ * automatically, for example when setting the language config
1680
+ * @private
1681
+ */
1682
+ __updateNoDataElement(config) {
1683
+ const isEmpty = config.series.every((e) => e.data.length === 0);
1684
+ if (isEmpty) {
1685
+ config.hideNoData();
1686
+ config.showNoData(this.emptyText);
1687
+ }
1669
1688
  }
1670
1689
 
1671
1690
  /** @private */
@@ -1748,7 +1767,7 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1748
1767
  __updateStyles() {
1749
1768
  // Chrome returns default value if property is not set
1750
1769
  // check if flex is defined for chart, and different than default value
1751
- const isFlex = getComputedStyle(this).flex != '0 1 auto';
1770
+ const isFlex = getComputedStyle(this).flex !== '0 1 auto';
1752
1771
 
1753
1772
  // If chart element is a flexible item the chartContainer should be flex too
1754
1773
  if (isFlex) {
@@ -1769,7 +1788,35 @@ class Chart extends ResizeMixin(ElementMixin(ThemableMixin(PolymerElement))) {
1769
1788
 
1770
1789
  /** @private */
1771
1790
  __showWarn(propertyName, acceptedValues) {
1772
- console.warn('<vaadin-chart> Acceptable values for "' + propertyName + '" are ' + acceptedValues);
1791
+ console.warn(`<vaadin-chart> Acceptable values for "${propertyName}" are ${acceptedValues}`);
1792
+ }
1793
+
1794
+ /** @private */
1795
+ __onRedraw() {
1796
+ this.__checkTurboMode();
1797
+ }
1798
+
1799
+ /** @private */
1800
+ __checkTurboMode() {
1801
+ const isDevelopmentMode = !!window.Vaadin.developmentMode;
1802
+
1803
+ if (!this.configuration || !isDevelopmentMode || this.__turboModeWarningAlreadyLogged) {
1804
+ return;
1805
+ }
1806
+
1807
+ const exceedsTurboThreshold = this.configuration.series.some((series) => {
1808
+ const threshold = (series.options && series.options.turboThreshold) || 0;
1809
+ const dataLength = series.data.length;
1810
+
1811
+ return threshold > 0 && dataLength > threshold;
1812
+ });
1813
+
1814
+ if (exceedsTurboThreshold) {
1815
+ this.__turboModeWarningAlreadyLogged = true;
1816
+ console.warn(
1817
+ '<vaadin-chart> Turbo mode has been enabled for one or more series, because the number of data items exceeds the configured threshold. Turbo mode improves the performance of charts with lots of data, but is not compatible with every type of series. Please consult the documentation on compatibility, or how to disable turbo mode.',
1818
+ );
1819
+ }
1773
1820
  }
1774
1821
  }
1775
1822