chartkick 4.0.3 → 4.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0db2fe39f763929c498438dc88f75dd51dbc9ace5ede4819e9f4d88c0cad72f
4
- data.tar.gz: a1dbaf6eddf2bccfdc1e6f4b9fc114eea952eb021dedb7775832d3d5c2b8a389
3
+ metadata.gz: 4e28ff576b7b488cc3ca1add95bf96832461189f5b085816e67d9923fdf13494
4
+ data.tar.gz: 282c01fdc0d199d4dd9d17a0aa887a67a0d8ce52df584a46d172e636496ad25e
5
5
  SHA512:
6
- metadata.gz: 0eccf48920536b5f4277cac070759d501ee77177805e06146db100e1818337de38e7c9ae45109362817da72425d3385993136012d57530266122deb09c670ea1
7
- data.tar.gz: 55190f89407e99810198d82cda444c49f8877b86ea0148e8d408f06a4d3fc9935e07ec77414119f4d06ccd905bf9124b6678c044c2cd9d68e7de206b2901e3d3
6
+ metadata.gz: 3a450c12a1973131b412d99525d400d2910e63e24edb93cb6ce27670dc6a1eaf70e13dfec9829a67cae6afcf4e77737eea2c442232c00bdd3c5d5e7b126a1a93
7
+ data.tar.gz: 3d59060b8e7dd24f3239dccc0b7079a66e3d1351a1e565e948e46faa2a2b28a462ee6d91b99602a334f91861ea2cf3a77419bf0c86677a83c278b4f97ef3d4fb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 4.0.4 (2021-05-01)
2
+
3
+ - Updated Chartkick.js to 4.0.4
4
+ - Updated Chart.js to 3.2.1
5
+
1
6
  ## 4.0.3 (2021-04-10)
2
7
 
3
8
  - Updated Chartkick.js to 4.0.3
data/README.md CHANGED
@@ -29,7 +29,7 @@ yarn add chartkick chart.js
29
29
  And in `app/javascript/packs/application.js`, add:
30
30
 
31
31
  ```js
32
- require("chartkick/chart.js")
32
+ import "chartkick/chart.js"
33
33
  ```
34
34
 
35
35
  For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
@@ -430,7 +430,7 @@ yarn add chartkick chart.js
430
430
  And in `app/javascript/packs/application.js`, add:
431
431
 
432
432
  ```js
433
- require("chartkick/chart.js")
433
+ import "chartkick/chart.js"
434
434
  ```
435
435
 
436
436
  For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
@@ -457,7 +457,7 @@ yarn add chartkick
457
457
  And in `app/javascript/packs/application.js`, add:
458
458
 
459
459
  ```js
460
- require("chartkick")
460
+ import "chartkick"
461
461
  ```
462
462
 
463
463
  For Rails 5 / Sprockets, in `app/assets/javascripts/application.js`, add:
@@ -485,7 +485,7 @@ yarn add chartkick highcharts
485
485
  And in `app/javascript/packs/application.js`, add:
486
486
 
487
487
  ```js
488
- require("chartkick/highcharts")
488
+ import "chartkick/highcharts"
489
489
  ```
490
490
 
491
491
  For Rails 5 / Sprockets, download [highcharts.js](https://code.highcharts.com/highcharts.js) into `vendor/assets/javascripts` (or use `yarn add highcharts` in Rails 5.1+), and in `app/assets/javascripts/application.js`, add:
@@ -1,3 +1,3 @@
1
1
  module Chartkick
2
- VERSION = "4.0.3"
2
+ VERSION = "4.0.4"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Chart.js v3.1.0
2
+ * Chart.js v3.2.1
3
3
  * https://www.chartjs.org
4
4
  * (c) 2021 Chart.js Contributors
5
5
  * Released under the MIT License
@@ -9,7 +9,7 @@
9
9
  * (c) 2021 chartjs-adapter-date-fns Contributors
10
10
  * Released under the MIT license
11
11
  *
12
- * date-fns v2.0.19
12
+ * date-fns v2.21.1
13
13
  * https://date-fns.org
14
14
  * (c) 2020 Sasha Koss and Lesha Koss
15
15
  * Released under the MIT License
@@ -594,6 +594,31 @@
594
594
  return typeof value === 'function';
595
595
  };
596
596
 
597
+ var setsEqual = function setsEqual(a, b) {
598
+ if (a.size !== b.size) {
599
+ return false;
600
+ }
601
+
602
+ var _iterator = _createForOfIteratorHelper(a),
603
+ _step;
604
+
605
+ try {
606
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
607
+ var item = _step.value;
608
+
609
+ if (!b.has(item)) {
610
+ return false;
611
+ }
612
+ }
613
+ } catch (err) {
614
+ _iterator.e(err);
615
+ } finally {
616
+ _iterator.f();
617
+ }
618
+
619
+ return true;
620
+ };
621
+
597
622
  var PI = Math.PI;
598
623
  var TAU = 2 * PI;
599
624
  var PITAU = TAU + PI;
@@ -2107,18 +2132,18 @@
2107
2132
  return value;
2108
2133
  };
2109
2134
 
2110
- var _iterator = _createForOfIteratorHelper(keys),
2111
- _step;
2135
+ var _iterator2 = _createForOfIteratorHelper(keys),
2136
+ _step2;
2112
2137
 
2113
2138
  try {
2114
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
2115
- var prop = _step.value;
2139
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
2140
+ var prop = _step2.value;
2116
2141
  ret[prop] = numberOrZero$1(read(prop));
2117
2142
  }
2118
2143
  } catch (err) {
2119
- _iterator.e(err);
2144
+ _iterator2.e(err);
2120
2145
  } finally {
2121
- _iterator.f();
2146
+ _iterator2.f();
2122
2147
  }
2123
2148
 
2124
2149
  return ret;
@@ -2561,19 +2586,19 @@
2561
2586
 
2562
2587
  value = [];
2563
2588
 
2564
- var _iterator2 = _createForOfIteratorHelper(arr),
2565
- _step2;
2589
+ var _iterator3 = _createForOfIteratorHelper(arr),
2590
+ _step3;
2566
2591
 
2567
2592
  try {
2568
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
2569
- var item = _step2.value;
2593
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
2594
+ var item = _step3.value;
2570
2595
  var resolver = createSubResolver(scopes, _proxy, prop, item);
2571
2596
  value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
2572
2597
  }
2573
2598
  } catch (err) {
2574
- _iterator2.e(err);
2599
+ _iterator3.e(err);
2575
2600
  } finally {
2576
- _iterator2.f();
2601
+ _iterator3.f();
2577
2602
  }
2578
2603
  }
2579
2604
 
@@ -2589,12 +2614,12 @@
2589
2614
  };
2590
2615
 
2591
2616
  function addScopes(set, parentScopes, key, parentFallback) {
2592
- var _iterator3 = _createForOfIteratorHelper(parentScopes),
2593
- _step3;
2617
+ var _iterator4 = _createForOfIteratorHelper(parentScopes),
2618
+ _step4;
2594
2619
 
2595
2620
  try {
2596
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
2597
- var parent = _step3.value;
2621
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
2622
+ var parent = _step4.value;
2598
2623
  var scope = getScope(key, parent);
2599
2624
 
2600
2625
  if (scope) {
@@ -2609,9 +2634,9 @@
2609
2634
  }
2610
2635
  }
2611
2636
  } catch (err) {
2612
- _iterator3.e(err);
2637
+ _iterator4.e(err);
2613
2638
  } finally {
2614
- _iterator3.f();
2639
+ _iterator4.f();
2615
2640
  }
2616
2641
 
2617
2642
  return false;
@@ -2659,12 +2684,12 @@
2659
2684
  function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
2660
2685
  var value;
2661
2686
 
2662
- var _iterator4 = _createForOfIteratorHelper(prefixes),
2663
- _step4;
2687
+ var _iterator5 = _createForOfIteratorHelper(prefixes),
2688
+ _step5;
2664
2689
 
2665
2690
  try {
2666
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
2667
- var prefix = _step4.value;
2691
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
2692
+ var prefix = _step5.value;
2668
2693
  value = _resolve(readKey(prefix, prop), scopes);
2669
2694
 
2670
2695
  if (defined(value)) {
@@ -2672,19 +2697,19 @@
2672
2697
  }
2673
2698
  }
2674
2699
  } catch (err) {
2675
- _iterator4.e(err);
2700
+ _iterator5.e(err);
2676
2701
  } finally {
2677
- _iterator4.f();
2702
+ _iterator5.f();
2678
2703
  }
2679
2704
  }
2680
2705
 
2681
2706
  function _resolve(key, scopes) {
2682
- var _iterator5 = _createForOfIteratorHelper(scopes),
2683
- _step5;
2707
+ var _iterator6 = _createForOfIteratorHelper(scopes),
2708
+ _step6;
2684
2709
 
2685
2710
  try {
2686
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
2687
- var scope = _step5.value;
2711
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
2712
+ var scope = _step6.value;
2688
2713
 
2689
2714
  if (!scope) {
2690
2715
  continue;
@@ -2697,9 +2722,9 @@
2697
2722
  }
2698
2723
  }
2699
2724
  } catch (err) {
2700
- _iterator5.e(err);
2725
+ _iterator6.e(err);
2701
2726
  } finally {
2702
- _iterator5.f();
2727
+ _iterator6.f();
2703
2728
  }
2704
2729
  }
2705
2730
 
@@ -2716,33 +2741,33 @@
2716
2741
  function resolveKeysFromAllScopes(scopes) {
2717
2742
  var set = new Set();
2718
2743
 
2719
- var _iterator6 = _createForOfIteratorHelper(scopes),
2720
- _step6;
2744
+ var _iterator7 = _createForOfIteratorHelper(scopes),
2745
+ _step7;
2721
2746
 
2722
2747
  try {
2723
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
2724
- var scope = _step6.value;
2748
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
2749
+ var scope = _step7.value;
2725
2750
 
2726
- var _iterator7 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {
2751
+ var _iterator8 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {
2727
2752
  return !k.startsWith('_');
2728
2753
  })),
2729
- _step7;
2754
+ _step8;
2730
2755
 
2731
2756
  try {
2732
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
2733
- var key = _step7.value;
2757
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
2758
+ var key = _step8.value;
2734
2759
  set.add(key);
2735
2760
  }
2736
2761
  } catch (err) {
2737
- _iterator7.e(err);
2762
+ _iterator8.e(err);
2738
2763
  } finally {
2739
- _iterator7.f();
2764
+ _iterator8.f();
2740
2765
  }
2741
2766
  }
2742
2767
  } catch (err) {
2743
- _iterator6.e(err);
2768
+ _iterator7.e(err);
2744
2769
  } finally {
2745
- _iterator6.f();
2770
+ _iterator7.f();
2746
2771
  }
2747
2772
 
2748
2773
  return _toConsumableArray(set);
@@ -3558,12 +3583,12 @@
3558
3583
  var start = segments[0].start;
3559
3584
  var i = start;
3560
3585
 
3561
- var _iterator8 = _createForOfIteratorHelper(segments),
3562
- _step8;
3586
+ var _iterator9 = _createForOfIteratorHelper(segments),
3587
+ _step9;
3563
3588
 
3564
3589
  try {
3565
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
3566
- var segment = _step8.value;
3590
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
3591
+ var segment = _step9.value;
3567
3592
  var prevStyle = void 0,
3568
3593
  style = void 0;
3569
3594
  var prev = points[start % count];
@@ -3602,9 +3627,9 @@
3602
3627
  }
3603
3628
  }
3604
3629
  } catch (err) {
3605
- _iterator8.e(err);
3630
+ _iterator9.e(err);
3606
3631
  } finally {
3607
- _iterator8.f();
3632
+ _iterator9.f();
3608
3633
  }
3609
3634
 
3610
3635
  return result;
@@ -3644,6 +3669,7 @@
3644
3669
  callbacks.forEach(function (fn) {
3645
3670
  return fn({
3646
3671
  chart: chart,
3672
+ initial: anims.initial,
3647
3673
  numSteps: numSteps,
3648
3674
  currentStep: Math.min(date - anims.start, numSteps)
3649
3675
  });
@@ -3712,6 +3738,8 @@
3712
3738
  anims.running = false;
3713
3739
 
3714
3740
  me._notify(chart, anims, date, 'complete');
3741
+
3742
+ anims.initial = false;
3715
3743
  }
3716
3744
 
3717
3745
  remaining += items.length;
@@ -3732,6 +3760,7 @@
3732
3760
  if (!anims) {
3733
3761
  anims = {
3734
3762
  running: false,
3763
+ initial: true,
3735
3764
  items: [],
3736
3765
  listeners: {
3737
3766
  complete: [],
@@ -4331,6 +4360,28 @@
4331
4360
  return subStack[indexValue] || (subStack[indexValue] = {});
4332
4361
  }
4333
4362
 
4363
+ function getLastIndexInStack(stack, vScale, positive) {
4364
+ var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas('bar').reverse()),
4365
+ _step2;
4366
+
4367
+ try {
4368
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4369
+ var meta = _step2.value;
4370
+ var value = stack[meta.index];
4371
+
4372
+ if (positive && value > 0 || !positive && value < 0) {
4373
+ return meta.index;
4374
+ }
4375
+ }
4376
+ } catch (err) {
4377
+ _iterator2.e(err);
4378
+ } finally {
4379
+ _iterator2.f();
4380
+ }
4381
+
4382
+ return null;
4383
+ }
4384
+
4334
4385
  function updateStacks(controller, parsed) {
4335
4386
  var chart = controller.chart,
4336
4387
  meta = controller._cachedMeta;
@@ -4351,6 +4402,8 @@
4351
4402
  var itemStacks = item._stacks || (item._stacks = {});
4352
4403
  stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
4353
4404
  stack[datasetIndex] = value;
4405
+ stack._top = getLastIndexInStack(stack, vScale, true);
4406
+ stack._bottom = getLastIndexInStack(stack, vScale, false);
4354
4407
  }
4355
4408
  }
4356
4409
 
@@ -4388,12 +4441,12 @@
4388
4441
  function clearStacks(meta, items) {
4389
4442
  items = items || meta._parsed;
4390
4443
 
4391
- var _iterator2 = _createForOfIteratorHelper(items),
4392
- _step2;
4444
+ var _iterator3 = _createForOfIteratorHelper(items),
4445
+ _step3;
4393
4446
 
4394
4447
  try {
4395
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4396
- var parsed = _step2.value;
4448
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
4449
+ var parsed = _step3.value;
4397
4450
  var stacks = parsed._stacks;
4398
4451
 
4399
4452
  if (!stacks || stacks[meta.vScale.id] === undefined || stacks[meta.vScale.id][meta.index] === undefined) {
@@ -4403,9 +4456,9 @@
4403
4456
  delete stacks[meta.vScale.id][meta.index];
4404
4457
  }
4405
4458
  } catch (err) {
4406
- _iterator2.e(err);
4459
+ _iterator3.e(err);
4407
4460
  } finally {
4408
- _iterator2.f();
4461
+ _iterator3.f();
4409
4462
  }
4410
4463
  }
4411
4464
 
@@ -4601,6 +4654,7 @@
4601
4654
  if (me._parsing === false) {
4602
4655
  meta._parsed = data;
4603
4656
  meta._sorted = true;
4657
+ parsed = data;
4604
4658
  } else {
4605
4659
  if (isArray(data[start])) {
4606
4660
  parsed = me.parseArrayData(meta, data, start, count);
@@ -5181,7 +5235,14 @@
5181
5235
  var i, ilen, curr, prev;
5182
5236
 
5183
5237
  var updateMinAndPrev = function updateMinAndPrev() {
5184
- min = Math.min(min, i && Math.abs(curr - prev) || min);
5238
+ if (curr === 32767 || curr === -32768) {
5239
+ return;
5240
+ }
5241
+
5242
+ if (defined(prev)) {
5243
+ min = Math.min(min, Math.abs(curr - prev) || min);
5244
+ }
5245
+
5185
5246
  prev = curr;
5186
5247
  };
5187
5248
 
@@ -5190,6 +5251,8 @@
5190
5251
  updateMinAndPrev();
5191
5252
  }
5192
5253
 
5254
+ prev = undefined;
5255
+
5193
5256
  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
5194
5257
  curr = scale.getPixelForTick(i);
5195
5258
  updateMinAndPrev();
@@ -5412,9 +5475,11 @@
5412
5475
 
5413
5476
  var ipixels = me._calculateBarIndexPixels(i, ruler);
5414
5477
 
5478
+ var stack = (parsed._stacks || {})[vScale.axis];
5415
5479
  var properties = {
5416
5480
  horizontal: horizontal,
5417
5481
  base: vpixels.base,
5482
+ enableBorderRadius: !stack || isFloatBar(parsed._custom) || me.index === stack._top || me.index === stack._bottom,
5418
5483
  x: horizontal ? vpixels.head : ipixels.center,
5419
5484
  y: horizontal ? ipixels.center : vpixels.head,
5420
5485
  height: horizontal ? ipixels.size : undefined,
@@ -5473,8 +5538,8 @@
5473
5538
  }
5474
5539
  }, {
5475
5540
  key: "_getStackIndex",
5476
- value: function _getStackIndex(datasetIndex, name) {
5477
- var stacks = this._getStacks(datasetIndex);
5541
+ value: function _getStackIndex(datasetIndex, name, dataIndex) {
5542
+ var stacks = this._getStacks(datasetIndex, dataIndex);
5478
5543
 
5479
5544
  var index = name !== undefined ? stacks.indexOf(name) : -1;
5480
5545
  return index === -1 ? stacks.length - 1 : index;
@@ -5588,14 +5653,15 @@
5588
5653
  var me = this;
5589
5654
  var scale = ruler.scale;
5590
5655
  var options = me.options;
5656
+ var skipNull = options.skipNull;
5591
5657
  var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
5592
5658
  var center, size;
5593
5659
 
5594
5660
  if (ruler.grouped) {
5595
- var stackCount = options.skipNull ? me._getStackCount(index) : ruler.stackCount;
5661
+ var stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;
5596
5662
  var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
5597
5663
 
5598
- var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack);
5664
+ var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);
5599
5665
 
5600
5666
  center = range.start + range.chunk * stackIndex + range.chunk / 2;
5601
5667
  size = Math.min(maxBarThickness, range.chunk * range.ratio);
@@ -7994,7 +8060,10 @@
7994
8060
  minor: {},
7995
8061
  major: {},
7996
8062
  align: 'center',
7997
- crossAlign: 'near'
8063
+ crossAlign: 'near',
8064
+ showLabelBackdrop: false,
8065
+ backdropColor: 'rgba(255, 255, 255, 0.75)',
8066
+ backdropPadding: 2
7998
8067
  }
7999
8068
  });
8000
8069
  defaults.route('scale.ticks', 'color', '', 'color');
@@ -8320,6 +8389,7 @@
8320
8389
  _this4.labelRotation = undefined;
8321
8390
  _this4.min = undefined;
8322
8391
  _this4.max = undefined;
8392
+ _this4._range = undefined;
8323
8393
  _this4.ticks = [];
8324
8394
  _this4._gridLineItems = null;
8325
8395
  _this4._labelItems = null;
@@ -8476,6 +8546,7 @@
8476
8546
  me.beforeDataLimits();
8477
8547
  me.determineDataLimits();
8478
8548
  me.afterDataLimits();
8549
+ me._range = _addGrace(me, me.options.grace);
8479
8550
  me._dataLimitsCached = true;
8480
8551
  }
8481
8552
 
@@ -8613,6 +8684,14 @@
8613
8684
  tick = ticks[i];
8614
8685
  tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);
8615
8686
  }
8687
+
8688
+ for (i = 0; i < ilen; i++) {
8689
+ if (isNullOrUndef(ticks[i].label)) {
8690
+ ticks.splice(i, 1);
8691
+ ilen--;
8692
+ i--;
8693
+ }
8694
+ }
8616
8695
  }
8617
8696
  }, {
8618
8697
  key: "afterTickToLabelConversion",
@@ -8900,7 +8979,9 @@
8900
8979
  first: valueAt(0),
8901
8980
  last: valueAt(length - 1),
8902
8981
  widest: valueAt(widest),
8903
- highest: valueAt(highest)
8982
+ highest: valueAt(highest),
8983
+ widths: widths,
8984
+ heights: heights
8904
8985
  };
8905
8986
  }
8906
8987
  }, {
@@ -9012,7 +9093,7 @@
9012
9093
  var ticksLength = ticks.length + (offset ? 1 : 0);
9013
9094
  var tl = getTickMarkLength(grid);
9014
9095
  var items = [];
9015
- var borderOpts = grid.setContext(me.getContext(0));
9096
+ var borderOpts = grid.setContext(me.getContext());
9016
9097
  var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;
9017
9098
  var axisHalfWidth = axisWidth / 2;
9018
9099
 
@@ -9235,6 +9316,44 @@
9235
9316
  textOffset = (1 - lineCount) * lineHeight / 2;
9236
9317
  }
9237
9318
 
9319
+ var backdrop = void 0;
9320
+
9321
+ if (optsAtIndex.showLabelBackdrop) {
9322
+ var labelPadding = toPadding(optsAtIndex.backdropPadding);
9323
+ var height = labelSizes.heights[i];
9324
+ var width = labelSizes.widths[i];
9325
+ var top = y + textOffset - labelPadding.top;
9326
+ var left = x - labelPadding.left;
9327
+
9328
+ switch (textBaseline) {
9329
+ case 'middle':
9330
+ top -= height / 2;
9331
+ break;
9332
+
9333
+ case 'bottom':
9334
+ top -= height;
9335
+ break;
9336
+ }
9337
+
9338
+ switch (textAlign) {
9339
+ case 'center':
9340
+ left -= width / 2;
9341
+ break;
9342
+
9343
+ case 'right':
9344
+ left -= width;
9345
+ break;
9346
+ }
9347
+
9348
+ backdrop = {
9349
+ left: left,
9350
+ top: top,
9351
+ width: width + labelPadding.width,
9352
+ height: height + labelPadding.height,
9353
+ color: optsAtIndex.backdropColor
9354
+ };
9355
+ }
9356
+
9238
9357
  items.push({
9239
9358
  rotation: rotation,
9240
9359
  label: label,
@@ -9245,7 +9364,8 @@
9245
9364
  textOffset: textOffset,
9246
9365
  textAlign: textAlign,
9247
9366
  textBaseline: textBaseline,
9248
- translation: [x, y]
9367
+ translation: [x, y],
9368
+ backdrop: backdrop
9249
9369
  });
9250
9370
  }
9251
9371
 
@@ -9410,9 +9530,6 @@
9410
9530
  var me = this;
9411
9531
  var grid = me.options.grid;
9412
9532
  var ctx = me.ctx;
9413
- var chart = me.chart;
9414
- var borderOpts = grid.setContext(me.getContext());
9415
- var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
9416
9533
 
9417
9534
  var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));
9418
9535
 
@@ -9465,33 +9582,43 @@
9465
9582
  }
9466
9583
  }
9467
9584
  }
9585
+ }
9586
+ }, {
9587
+ key: "drawBorder",
9588
+ value: function drawBorder() {
9589
+ var me = this;
9590
+ var chart = me.chart,
9591
+ ctx = me.ctx,
9592
+ grid = me.options.grid;
9593
+ var borderOpts = grid.setContext(me.getContext());
9594
+ var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
9468
9595
 
9469
- if (axisWidth) {
9470
- var lastLineWidth = borderOpts.lineWidth;
9471
- var borderValue = me._borderValue;
9472
- var x1, x2, y1, y2;
9596
+ if (!axisWidth) {
9597
+ return;
9598
+ }
9473
9599
 
9474
- if (me.isHorizontal()) {
9475
- x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;
9476
- x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
9477
- y1 = y2 = borderValue;
9478
- } else {
9479
- y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;
9480
- y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
9481
- x1 = x2 = borderValue;
9482
- }
9600
+ var lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;
9601
+ var borderValue = me._borderValue;
9602
+ var x1, x2, y1, y2;
9483
9603
 
9484
- drawLine({
9485
- x: x1,
9486
- y: y1
9487
- }, {
9488
- x: x2,
9489
- y: y2
9490
- }, {
9491
- width: axisWidth,
9492
- color: borderOpts.borderColor
9493
- });
9604
+ if (me.isHorizontal()) {
9605
+ x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;
9606
+ x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
9607
+ y1 = y2 = borderValue;
9608
+ } else {
9609
+ y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;
9610
+ y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
9611
+ x1 = x2 = borderValue;
9494
9612
  }
9613
+
9614
+ ctx.save();
9615
+ ctx.lineWidth = borderOpts.borderWidth;
9616
+ ctx.strokeStyle = borderOpts.borderColor;
9617
+ ctx.beginPath();
9618
+ ctx.moveTo(x1, y1);
9619
+ ctx.lineTo(x2, y2);
9620
+ ctx.stroke();
9621
+ ctx.restore();
9495
9622
  }
9496
9623
  }, {
9497
9624
  key: "drawLabels",
@@ -9519,6 +9646,12 @@
9519
9646
  var item = items[i];
9520
9647
  var tickFont = item.font;
9521
9648
  var label = item.label;
9649
+
9650
+ if (item.backdrop) {
9651
+ ctx.fillStyle = item.backdrop.color;
9652
+ ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);
9653
+ }
9654
+
9522
9655
  var y = item.textOffset;
9523
9656
  renderText(ctx, label, 0, y, tickFont, item);
9524
9657
  }
@@ -9581,6 +9714,7 @@
9581
9714
 
9582
9715
  me.drawBackground();
9583
9716
  me.drawGrid(chartArea);
9717
+ me.drawBorder();
9584
9718
  me.drawTitle();
9585
9719
  me.drawLabels(chartArea);
9586
9720
  }
@@ -9592,7 +9726,7 @@
9592
9726
  var tz = opts.ticks && opts.ticks.z || 0;
9593
9727
  var gz = opts.grid && opts.grid.z || 0;
9594
9728
 
9595
- if (!me._isVisible() || tz === gz || me.draw !== Scale.prototype.draw) {
9729
+ if (!me._isVisible() || me.draw !== Scale.prototype.draw) {
9596
9730
  return [{
9597
9731
  z: tz,
9598
9732
  draw: function draw(chartArea) {
@@ -9608,6 +9742,11 @@
9608
9742
  me.drawGrid(chartArea);
9609
9743
  me.drawTitle();
9610
9744
  }
9745
+ }, {
9746
+ z: gz + 1,
9747
+ draw: function draw() {
9748
+ me.drawBorder();
9749
+ }
9611
9750
  }, {
9612
9751
  z: tz,
9613
9752
  draw: function draw(chartArea) {
@@ -9640,6 +9779,15 @@
9640
9779
  var opts = this.options.ticks.setContext(this.getContext(index));
9641
9780
  return toFont(opts.font);
9642
9781
  }
9782
+ }, {
9783
+ key: "_maxDigits",
9784
+ value: function _maxDigits() {
9785
+ var me = this;
9786
+
9787
+ var fontSize = me._resolveTickFontOptions(0).lineHeight;
9788
+
9789
+ return me.isHorizontal() ? me.width / fontSize / 0.7 : me.height / fontSize;
9790
+ }
9643
9791
  }]);
9644
9792
 
9645
9793
  return Scale;
@@ -9965,12 +10113,12 @@
9965
10113
  value: function _notify(descriptors, chart, hook, args) {
9966
10114
  args = args || {};
9967
10115
 
9968
- var _iterator3 = _createForOfIteratorHelper(descriptors),
9969
- _step3;
10116
+ var _iterator4 = _createForOfIteratorHelper(descriptors),
10117
+ _step4;
9970
10118
 
9971
10119
  try {
9972
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
9973
- var descriptor = _step3.value;
10120
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
10121
+ var descriptor = _step4.value;
9974
10122
  var plugin = descriptor.plugin;
9975
10123
  var method = plugin[hook];
9976
10124
  var params = [chart, args, descriptor.options];
@@ -9980,9 +10128,9 @@
9980
10128
  }
9981
10129
  }
9982
10130
  } catch (err) {
9983
- _iterator3.e(err);
10131
+ _iterator4.e(err);
9984
10132
  } finally {
9985
- _iterator3.f();
10133
+ _iterator4.f();
9986
10134
  }
9987
10135
 
9988
10136
  return true;
@@ -10189,14 +10337,16 @@
10189
10337
  options.scales = mergeScaleConfig(config, options);
10190
10338
  }
10191
10339
 
10192
- function initConfig(config) {
10193
- config = config || {};
10194
- var data = config.data = config.data || {
10195
- datasets: [],
10196
- labels: []
10197
- };
10340
+ function initData(data) {
10341
+ data = data || {};
10198
10342
  data.datasets = data.datasets || [];
10199
10343
  data.labels = data.labels || [];
10344
+ return data;
10345
+ }
10346
+
10347
+ function initConfig(config) {
10348
+ config = config || {};
10349
+ config.data = initData(config.data);
10200
10350
  initOptions(config);
10201
10351
  return config;
10202
10352
  }
@@ -10247,7 +10397,7 @@
10247
10397
  return this._config.data;
10248
10398
  },
10249
10399
  set: function set(data) {
10250
- this._config.data = data;
10400
+ this._config.data = initData(data);
10251
10401
  }
10252
10402
  }, {
10253
10403
  key: "options",
@@ -10396,18 +10546,18 @@
10396
10546
  options = _attachContext(resolver, context, subResolver);
10397
10547
  }
10398
10548
 
10399
- var _iterator4 = _createForOfIteratorHelper(names),
10400
- _step4;
10549
+ var _iterator5 = _createForOfIteratorHelper(names),
10550
+ _step5;
10401
10551
 
10402
10552
  try {
10403
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
10404
- var prop = _step4.value;
10553
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
10554
+ var prop = _step5.value;
10405
10555
  result[prop] = options[prop];
10406
10556
  }
10407
10557
  } catch (err) {
10408
- _iterator4.e(err);
10558
+ _iterator5.e(err);
10409
10559
  } finally {
10410
- _iterator4.f();
10560
+ _iterator5.f();
10411
10561
  }
10412
10562
 
10413
10563
  return result;
@@ -10459,27 +10609,27 @@
10459
10609
  isScriptable = _descriptors2.isScriptable,
10460
10610
  isIndexable = _descriptors2.isIndexable;
10461
10611
 
10462
- var _iterator5 = _createForOfIteratorHelper(names),
10463
- _step5;
10612
+ var _iterator6 = _createForOfIteratorHelper(names),
10613
+ _step6;
10464
10614
 
10465
10615
  try {
10466
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
10467
- var prop = _step5.value;
10616
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
10617
+ var prop = _step6.value;
10468
10618
 
10469
10619
  if (isScriptable(prop) && isFunction(proxy[prop]) || isIndexable(prop) && isArray(proxy[prop])) {
10470
10620
  return true;
10471
10621
  }
10472
10622
  }
10473
10623
  } catch (err) {
10474
- _iterator5.e(err);
10624
+ _iterator6.e(err);
10475
10625
  } finally {
10476
- _iterator5.f();
10626
+ _iterator6.f();
10477
10627
  }
10478
10628
 
10479
10629
  return false;
10480
10630
  }
10481
10631
 
10482
- var version = "3.1.0";
10632
+ var version = "3.2.1";
10483
10633
  var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
10484
10634
 
10485
10635
  function positionIsHorizontal(position, axis) {
@@ -10917,6 +11067,13 @@
10917
11067
  var animsDisabled = me._animationsDisabled = !me.options.animation;
10918
11068
  me.ensureScalesHaveIDs();
10919
11069
  me.buildOrUpdateScales();
11070
+ var existingEvents = new Set(Object.keys(me._listeners));
11071
+ var newEvents = new Set(me.options.events);
11072
+
11073
+ if (!setsEqual(existingEvents, newEvents)) {
11074
+ me.unbindEvents();
11075
+ me.bindEvents();
11076
+ }
10920
11077
 
10921
11078
  me._plugins.invalidate();
10922
11079
 
@@ -11408,7 +11565,7 @@
11408
11565
  return;
11409
11566
  }
11410
11567
 
11411
- delete me._listeners;
11568
+ me._listeners = {};
11412
11569
  each(listeners, function (listener, type) {
11413
11570
  me.platform.removeEventListener(me, type, listener);
11414
11571
  });
@@ -11950,23 +12107,30 @@
11950
12107
  return _steppedLineTo;
11951
12108
  }
11952
12109
 
11953
- if (options.tension) {
12110
+ if (options.tension || options.cubicInterpolationMode === 'monotone') {
11954
12111
  return _bezierCurveTo;
11955
12112
  }
11956
12113
 
11957
12114
  return lineTo;
11958
12115
  }
11959
12116
 
11960
- function pathVars(points, segment, params) {
11961
- params = params || {};
12117
+ function pathVars(points, segment) {
12118
+ var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
11962
12119
  var count = points.length;
11963
- var start = Math.max(params.start || 0, segment.start);
11964
- var end = Math.min(params.end || count - 1, segment.end);
12120
+ var _params$start = params.start,
12121
+ paramsStart = _params$start === void 0 ? 0 : _params$start,
12122
+ _params$end = params.end,
12123
+ paramsEnd = _params$end === void 0 ? count - 1 : _params$end;
12124
+ var segmentStart = segment.start,
12125
+ segmentEnd = segment.end;
12126
+ var start = Math.max(paramsStart, segmentStart);
12127
+ var end = Math.min(paramsEnd, segmentEnd);
12128
+ var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
11965
12129
  return {
11966
12130
  count: count,
11967
12131
  start: start,
11968
12132
  loop: segment.loop,
11969
- ilen: end < start ? count + end - start : end - start
12133
+ ilen: end < start && !outside ? count + end - start : end - start
11970
12134
  };
11971
12135
  }
11972
12136
 
@@ -12082,7 +12246,7 @@
12082
12246
  function _getSegmentMethod(line) {
12083
12247
  var opts = line.options;
12084
12248
  var borderDash = opts.borderDash && opts.borderDash.length;
12085
- var useFastPath = !line._decimated && !line._loop && !opts.tension && !opts.stepped && !borderDash;
12249
+ var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
12086
12250
  return useFastPath ? fastPathSegment : pathSegment;
12087
12251
  }
12088
12252
 
@@ -12091,7 +12255,7 @@
12091
12255
  return _steppedInterpolation;
12092
12256
  }
12093
12257
 
12094
- if (options.tension) {
12258
+ if (options.tension || options.cubicInterpolationMode === 'monotone') {
12095
12259
  return _bezierInterpolation;
12096
12260
  }
12097
12261
 
@@ -12119,12 +12283,12 @@
12119
12283
 
12120
12284
  var segmentMethod = _getSegmentMethod(line);
12121
12285
 
12122
- var _iterator6 = _createForOfIteratorHelper(segments),
12123
- _step6;
12286
+ var _iterator7 = _createForOfIteratorHelper(segments),
12287
+ _step7;
12124
12288
 
12125
12289
  try {
12126
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
12127
- var segment = _step6.value;
12290
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
12291
+ var segment = _step7.value;
12128
12292
  setStyle(ctx, options, segment.style);
12129
12293
  ctx.beginPath();
12130
12294
 
@@ -12138,9 +12302,9 @@
12138
12302
  ctx.stroke();
12139
12303
  }
12140
12304
  } catch (err) {
12141
- _iterator6.e(err);
12305
+ _iterator7.e(err);
12142
12306
  } finally {
12143
- _iterator6.f();
12307
+ _iterator7.f();
12144
12308
  }
12145
12309
  }
12146
12310
 
@@ -12188,7 +12352,7 @@
12188
12352
  var me = this;
12189
12353
  var options = me.options;
12190
12354
 
12191
- if (options.tension && !options.stepped && !me._pointsUpdated) {
12355
+ if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {
12192
12356
  var loop = options.spanGaps ? me._loop : me._fullLoop;
12193
12357
 
12194
12358
  _updateBezierControlPoints(me._points, options, chartArea, loop);
@@ -12293,21 +12457,21 @@
12293
12457
  start = start || 0;
12294
12458
  count = count || me.points.length - start;
12295
12459
 
12296
- var _iterator7 = _createForOfIteratorHelper(segments),
12297
- _step7;
12460
+ var _iterator8 = _createForOfIteratorHelper(segments),
12461
+ _step8;
12298
12462
 
12299
12463
  try {
12300
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
12301
- var segment = _step7.value;
12464
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
12465
+ var segment = _step8.value;
12302
12466
  loop &= segmentMethod(ctx, me, segment, {
12303
12467
  start: start,
12304
12468
  end: start + count - 1
12305
12469
  });
12306
12470
  }
12307
12471
  } catch (err) {
12308
- _iterator7.e(err);
12472
+ _iterator8.e(err);
12309
12473
  } finally {
12310
- _iterator7.f();
12474
+ _iterator8.f();
12311
12475
  }
12312
12476
 
12313
12477
  return !!loop;
@@ -12560,15 +12724,19 @@
12560
12724
  }
12561
12725
 
12562
12726
  function parseBorderRadius(bar, maxW, maxH) {
12727
+ var _bar$getProps2 = bar.getProps(['enableBorderRadius']),
12728
+ enableBorderRadius = _bar$getProps2.enableBorderRadius;
12729
+
12563
12730
  var value = bar.options.borderRadius;
12564
12731
  var o = toTRBLCorners(value);
12565
12732
  var maxR = Math.min(maxW, maxH);
12566
12733
  var skip = parseBorderSkipped(bar);
12734
+ var enableBorder = enableBorderRadius || isObject(value);
12567
12735
  return {
12568
- topLeft: skipOrLimit(skip.top || skip.left, o.topLeft, 0, maxR),
12569
- topRight: skipOrLimit(skip.top || skip.right, o.topRight, 0, maxR),
12570
- bottomLeft: skipOrLimit(skip.bottom || skip.left, o.bottomLeft, 0, maxR),
12571
- bottomRight: skipOrLimit(skip.bottom || skip.right, o.bottomRight, 0, maxR)
12736
+ topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
12737
+ topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
12738
+ bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
12739
+ bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
12572
12740
  };
12573
12741
  }
12574
12742
 
@@ -12712,6 +12880,7 @@
12712
12880
  borderSkipped: 'start',
12713
12881
  borderWidth: 0,
12714
12882
  borderRadius: 0,
12883
+ enableBorderRadius: true,
12715
12884
  pointStyle: undefined
12716
12885
  };
12717
12886
  BarElement.defaultRoutes = {
@@ -12842,16 +13011,20 @@
12842
13011
  return decimated;
12843
13012
  }
12844
13013
 
13014
+ function cleanDecimatedDataset(dataset) {
13015
+ if (dataset._decimated) {
13016
+ var data = dataset._data;
13017
+ delete dataset._decimated;
13018
+ delete dataset._data;
13019
+ Object.defineProperty(dataset, 'data', {
13020
+ value: data
13021
+ });
13022
+ }
13023
+ }
13024
+
12845
13025
  function cleanDecimatedData(chart) {
12846
13026
  chart.data.datasets.forEach(function (dataset) {
12847
- if (dataset._decimated) {
12848
- var data = dataset._data;
12849
- delete dataset._decimated;
12850
- delete dataset._data;
12851
- Object.defineProperty(dataset, 'data', {
12852
- value: data
12853
- });
12854
- }
13027
+ cleanDecimatedDataset(dataset);
12855
13028
  });
12856
13029
  }
12857
13030
 
@@ -12925,6 +13098,7 @@
12925
13098
  count = _getStartAndCountOfVi2.count;
12926
13099
 
12927
13100
  if (count <= 4 * availableWidth) {
13101
+ cleanDecimatedDataset(dataset);
12928
13102
  return;
12929
13103
  }
12930
13104
 
@@ -13396,12 +13570,12 @@
13396
13570
  var tpoints = target.points;
13397
13571
  var parts = [];
13398
13572
 
13399
- var _iterator8 = _createForOfIteratorHelper(segments),
13400
- _step8;
13573
+ var _iterator9 = _createForOfIteratorHelper(segments),
13574
+ _step9;
13401
13575
 
13402
13576
  try {
13403
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
13404
- var segment = _step8.value;
13577
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
13578
+ var segment = _step9.value;
13405
13579
  var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);
13406
13580
 
13407
13581
  if (!target.segments) {
@@ -13416,22 +13590,22 @@
13416
13590
 
13417
13591
  var targetSegments = _boundSegments(target, bounds);
13418
13592
 
13419
- var _iterator9 = _createForOfIteratorHelper(targetSegments),
13420
- _step9;
13593
+ var _iterator10 = _createForOfIteratorHelper(targetSegments),
13594
+ _step10;
13421
13595
 
13422
13596
  try {
13423
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
13424
- var tgt = _step9.value;
13597
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
13598
+ var tgt = _step10.value;
13425
13599
  var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
13426
13600
 
13427
13601
  var fillSources = _boundSegment(segment, points, subBounds);
13428
13602
 
13429
- var _iterator10 = _createForOfIteratorHelper(fillSources),
13430
- _step10;
13603
+ var _iterator11 = _createForOfIteratorHelper(fillSources),
13604
+ _step11;
13431
13605
 
13432
13606
  try {
13433
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
13434
- var fillSource = _step10.value;
13607
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
13608
+ var fillSource = _step11.value;
13435
13609
  parts.push({
13436
13610
  source: fillSource,
13437
13611
  target: tgt,
@@ -13440,21 +13614,21 @@
13440
13614
  });
13441
13615
  }
13442
13616
  } catch (err) {
13443
- _iterator10.e(err);
13617
+ _iterator11.e(err);
13444
13618
  } finally {
13445
- _iterator10.f();
13619
+ _iterator11.f();
13446
13620
  }
13447
13621
  }
13448
13622
  } catch (err) {
13449
- _iterator9.e(err);
13623
+ _iterator10.e(err);
13450
13624
  } finally {
13451
- _iterator9.f();
13625
+ _iterator10.f();
13452
13626
  }
13453
13627
  }
13454
13628
  } catch (err) {
13455
- _iterator8.e(err);
13629
+ _iterator9.e(err);
13456
13630
  } finally {
13457
- _iterator8.f();
13631
+ _iterator9.f();
13458
13632
  }
13459
13633
 
13460
13634
  return parts;
@@ -13494,16 +13668,16 @@
13494
13668
 
13495
13669
  var segments = _segments(line, target, property);
13496
13670
 
13497
- var _iterator11 = _createForOfIteratorHelper(segments),
13498
- _step11;
13671
+ var _iterator12 = _createForOfIteratorHelper(segments),
13672
+ _step12;
13499
13673
 
13500
13674
  try {
13501
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
13502
- var _step11$value = _step11.value,
13503
- src = _step11$value.source,
13504
- tgt = _step11$value.target,
13505
- start = _step11$value.start,
13506
- end = _step11$value.end;
13675
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
13676
+ var _step12$value = _step12.value,
13677
+ src = _step12$value.source,
13678
+ tgt = _step12$value.target,
13679
+ start = _step12$value.start,
13680
+ end = _step12$value.end;
13507
13681
  var _src$style = src.style;
13508
13682
  _src$style = _src$style === void 0 ? {} : _src$style;
13509
13683
  var _src$style$background = _src$style.backgroundColor,
@@ -13535,9 +13709,9 @@
13535
13709
  ctx.restore();
13536
13710
  }
13537
13711
  } catch (err) {
13538
- _iterator11.e(err);
13712
+ _iterator12.e(err);
13539
13713
  } finally {
13540
- _iterator11.f();
13714
+ _iterator12.f();
13541
13715
  }
13542
13716
  }
13543
13717
 
@@ -13548,7 +13722,7 @@
13548
13722
  below = cfg.below,
13549
13723
  area = cfg.area,
13550
13724
  scale = cfg.scale;
13551
- var property = line._loop ? 'angle' : 'x';
13725
+ var property = line._loop ? 'angle' : cfg.axis;
13552
13726
  ctx.save();
13553
13727
 
13554
13728
  if (property === 'x' && below !== above) {
@@ -13582,7 +13756,8 @@
13582
13756
  function drawfill(ctx, source, area) {
13583
13757
  var target = getTarget(source);
13584
13758
  var line = source.line,
13585
- scale = source.scale;
13759
+ scale = source.scale,
13760
+ axis = source.axis;
13586
13761
  var lineOpts = line.options;
13587
13762
  var fillOption = lineOpts.fill;
13588
13763
  var color = lineOpts.backgroundColor;
@@ -13601,7 +13776,8 @@
13601
13776
  above: above,
13602
13777
  below: below,
13603
13778
  area: area,
13604
- scale: scale
13779
+ scale: scale,
13780
+ axis: axis
13605
13781
  });
13606
13782
  unclipArea(ctx);
13607
13783
  }
@@ -13625,6 +13801,7 @@
13625
13801
  index: i,
13626
13802
  fill: decodeFill(line, i, count),
13627
13803
  chart: chart,
13804
+ axis: meta.controller.options.indexAxis,
13628
13805
  scale: meta.vScale,
13629
13806
  line: line
13630
13807
  };
@@ -13644,19 +13821,37 @@
13644
13821
  source.fill = resolveTarget(sources, i, options.propagate);
13645
13822
  }
13646
13823
  },
13647
- beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {
13824
+ beforeDraw: function beforeDraw(chart, _args, options) {
13825
+ var draw = options.drawTime === 'beforeDraw';
13648
13826
  var metasets = chart.getSortedVisibleDatasetMetas();
13649
13827
  var area = chart.chartArea;
13650
13828
 
13651
13829
  for (var i = metasets.length - 1; i >= 0; --i) {
13652
13830
  var source = metasets[i].$filler;
13653
13831
 
13654
- if (source) {
13655
- source.line.updateControlPoints(area);
13832
+ if (!source) {
13833
+ continue;
13834
+ }
13656
13835
 
13657
- if (options.drawTime === 'beforeDatasetsDraw') {
13658
- drawfill(chart.ctx, source, area);
13659
- }
13836
+ source.line.updateControlPoints(area);
13837
+
13838
+ if (draw) {
13839
+ drawfill(chart.ctx, source, area);
13840
+ }
13841
+ }
13842
+ },
13843
+ beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {
13844
+ if (options.drawTime !== 'beforeDatasetsDraw') {
13845
+ return;
13846
+ }
13847
+
13848
+ var metasets = chart.getSortedVisibleDatasetMetas();
13849
+
13850
+ for (var i = metasets.length - 1; i >= 0; --i) {
13851
+ var source = metasets[i].$filler;
13852
+
13853
+ if (source) {
13854
+ drawfill(chart.ctx, source, chart.chartArea);
13660
13855
  }
13661
13856
  }
13662
13857
  },
@@ -13926,12 +14121,12 @@
13926
14121
 
13927
14122
  var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);
13928
14123
 
13929
- var _iterator12 = _createForOfIteratorHelper(hitboxes),
13930
- _step12;
14124
+ var _iterator13 = _createForOfIteratorHelper(hitboxes),
14125
+ _step13;
13931
14126
 
13932
14127
  try {
13933
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
13934
- var hitbox = _step12.value;
14128
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
14129
+ var hitbox = _step13.value;
13935
14130
 
13936
14131
  if (row !== hitbox.row) {
13937
14132
  row = hitbox.row;
@@ -13943,21 +14138,21 @@
13943
14138
  left += hitbox.width + padding;
13944
14139
  }
13945
14140
  } catch (err) {
13946
- _iterator12.e(err);
14141
+ _iterator13.e(err);
13947
14142
  } finally {
13948
- _iterator12.f();
14143
+ _iterator13.f();
13949
14144
  }
13950
14145
  } else {
13951
14146
  var col = 0;
13952
14147
 
13953
14148
  var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);
13954
14149
 
13955
- var _iterator13 = _createForOfIteratorHelper(hitboxes),
13956
- _step13;
14150
+ var _iterator14 = _createForOfIteratorHelper(hitboxes),
14151
+ _step14;
13957
14152
 
13958
14153
  try {
13959
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
13960
- var _hitbox = _step13.value;
14154
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
14155
+ var _hitbox = _step14.value;
13961
14156
 
13962
14157
  if (_hitbox.col !== col) {
13963
14158
  col = _hitbox.col;
@@ -13969,9 +14164,9 @@
13969
14164
  top += _hitbox.height + padding;
13970
14165
  }
13971
14166
  } catch (err) {
13972
- _iterator13.e(err);
14167
+ _iterator14.e(err);
13973
14168
  } finally {
13974
- _iterator13.f();
14169
+ _iterator14.f();
13975
14170
  }
13976
14171
  }
13977
14172
  }
@@ -14571,6 +14766,10 @@
14571
14766
  };
14572
14767
  },
14573
14768
  nearest: function nearest(items, eventPosition) {
14769
+ if (!items.length) {
14770
+ return false;
14771
+ }
14772
+
14574
14773
  var x = eventPosition.x;
14575
14774
  var y = eventPosition.y;
14576
14775
  var minDistance = Number.POSITIVE_INFINITY;
@@ -15520,9 +15719,11 @@
15520
15719
  }, {
15521
15720
  key: "_positionChanged",
15522
15721
  value: function _positionChanged(active, e) {
15523
- var me = this;
15524
- var position = positioners[me.options.position].call(me, active, e);
15525
- return me.caretX !== position.x || me.caretY !== position.y;
15722
+ var caretX = this.caretX,
15723
+ caretY = this.caretY,
15724
+ options = this.options;
15725
+ var position = positioners[options.position].call(this, active, e);
15726
+ return position !== false && (caretX !== position.x || caretY !== position.y);
15526
15727
  }
15527
15728
  }]);
15528
15729
 
@@ -15901,7 +16102,9 @@
15901
16102
  max = generationOptions.max,
15902
16103
  precision = generationOptions.precision,
15903
16104
  count = generationOptions.count,
15904
- maxTicks = generationOptions.maxTicks;
16105
+ maxTicks = generationOptions.maxTicks,
16106
+ maxDigits = generationOptions.maxDigits,
16107
+ horizontal = generationOptions.horizontal;
15905
16108
  var unit = step || 1;
15906
16109
  var maxSpaces = maxTicks - 1;
15907
16110
  var rmin = dataRange.min,
@@ -15909,6 +16112,7 @@
15909
16112
  var minDefined = !isNullOrUndef(min);
15910
16113
  var maxDefined = !isNullOrUndef(max);
15911
16114
  var countDefined = !isNullOrUndef(count);
16115
+ var minSpacing = (rmax - rmin) / maxDigits;
15912
16116
  var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
15913
16117
  var factor, niceMin, niceMax, numSpaces;
15914
16118
 
@@ -15968,7 +16172,7 @@
15968
16172
  j++;
15969
16173
  }
15970
16174
 
15971
- if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, spacing / 10)) {
16175
+ if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, minSpacing * (horizontal ? ('' + min).length : 1))) {
15972
16176
  j++;
15973
16177
  }
15974
16178
  }
@@ -15980,7 +16184,7 @@
15980
16184
  }
15981
16185
 
15982
16186
  if (maxDefined) {
15983
- if (almostEquals(ticks[ticks.length - 1].value, max, spacing / 10)) {
16187
+ if (almostEquals(ticks[ticks.length - 1].value, max, minSpacing * (horizontal ? ('' + max).length : 1))) {
15984
16188
  ticks[ticks.length - 1].value = max;
15985
16189
  } else {
15986
16190
  ticks.push({
@@ -16114,9 +16318,12 @@
16114
16318
  max: opts.max,
16115
16319
  precision: tickOpts.precision,
16116
16320
  step: tickOpts.stepSize,
16117
- count: tickOpts.count
16321
+ count: tickOpts.count,
16322
+ maxDigits: me._maxDigits(),
16323
+ horizontal: me.isHorizontal()
16118
16324
  };
16119
- var ticks = generateTicks$1(numericGeneratorOptions, _addGrace(me, opts.grace));
16325
+ var dataRange = me._range || me;
16326
+ var ticks = generateTicks$1(numericGeneratorOptions, dataRange);
16120
16327
 
16121
16328
  if (opts.bounds === 'ticks') {
16122
16329
  _setMinAndMaxByKey(ticks, me, 'value');
@@ -16896,6 +17103,9 @@
16896
17103
  ctx.restore();
16897
17104
  }
16898
17105
  }
17106
+ }, {
17107
+ key: "drawBorder",
17108
+ value: function drawBorder() {}
16899
17109
  }, {
16900
17110
  key: "drawLabels",
16901
17111
  value: function drawLabels() {
@@ -16962,8 +17172,6 @@
16962
17172
  startAngle: 0,
16963
17173
  ticks: {
16964
17174
  showLabelBackdrop: true,
16965
- backdropColor: 'rgba(255,255,255,0.75)',
16966
- backdropPadding: 2,
16967
17175
  callback: Ticks.formatters.numeric
16968
17176
  },
16969
17177
  pointLabels: {
@@ -17047,10 +17255,10 @@
17047
17255
  }
17048
17256
 
17049
17257
  var adapter = scale._adapter;
17050
- var options = scale.options.time;
17051
- var parser = options.parser,
17052
- round = options.round,
17053
- isoWeekday = options.isoWeekday;
17258
+ var _scale$_parseOpts = scale._parseOpts,
17259
+ parser = _scale$_parseOpts.parser,
17260
+ round = _scale$_parseOpts.round,
17261
+ isoWeekday = _scale$_parseOpts.isoWeekday;
17054
17262
  var value = input;
17055
17263
 
17056
17264
  if (typeof parser === 'function') {
@@ -17175,6 +17383,7 @@
17175
17383
  _this18._majorUnit = undefined;
17176
17384
  _this18._offsets = {};
17177
17385
  _this18._normalized = false;
17386
+ _this18._parseOpts = undefined;
17178
17387
  return _this18;
17179
17388
  }
17180
17389
 
@@ -17184,6 +17393,11 @@
17184
17393
  var time = scaleOpts.time || (scaleOpts.time = {});
17185
17394
  var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
17186
17395
  mergeIf(time.displayFormats, adapter.formats());
17396
+ this._parseOpts = {
17397
+ parser: time.parser,
17398
+ round: time.round,
17399
+ isoWeekday: time.isoWeekday
17400
+ };
17187
17401
 
17188
17402
  _get(_getPrototypeOf(TimeScale.prototype), "init", this).call(this, scaleOpts);
17189
17403
 
@@ -17766,8 +17980,8 @@
17766
17980
  *
17767
17981
  * @param {Date|Number} date - the date to be changed
17768
17982
  * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
17769
- * @returns {Date} the new date with the days added
17770
- * @throws {TypeError} 2 arguments required
17983
+ * @returns {Date} - the new date with the days added
17984
+ * @throws {TypeError} - 2 arguments required
17771
17985
  *
17772
17986
  * @example
17773
17987
  * // Add 10 days to 1 September 2014:
@@ -17831,7 +18045,7 @@
17831
18045
  }
17832
18046
 
17833
18047
  var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for
17834
- // month, day, etc. For example, new Date(2020, 1, 0) returns 31 Dec 2019 and
18048
+ // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
17835
18049
  // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
17836
18050
  // want except that dates will wrap around the end of a month, meaning that
17837
18051
  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
@@ -17943,12 +18157,12 @@
17943
18157
  *
17944
18158
  * @example
17945
18159
  * // The start of a week for 2 September 2014 11:55:00:
17946
- * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
18160
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
17947
18161
  * //=> Sun Aug 31 2014 00:00:00
17948
18162
  *
17949
18163
  * @example
17950
18164
  * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:
17951
- * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
18165
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
17952
18166
  * //=> Mon Sep 01 2014 00:00:00
17953
18167
  */
17954
18168
 
@@ -18891,6 +19105,36 @@
18891
19105
  return result === 0 ? 0 : result;
18892
19106
  }
18893
19107
 
19108
+ /**
19109
+ * @name startOfMinute
19110
+ * @category Minute Helpers
19111
+ * @summary Return the start of a minute for the given date.
19112
+ *
19113
+ * @description
19114
+ * Return the start of a minute for the given date.
19115
+ * The result will be in the local timezone.
19116
+ *
19117
+ * ### v2.0.0 breaking changes:
19118
+ *
19119
+ * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
19120
+ *
19121
+ * @param {Date|Number} date - the original date
19122
+ * @returns {Date} the start of a minute
19123
+ * @throws {TypeError} 1 argument required
19124
+ *
19125
+ * @example
19126
+ * // The start of a minute for 1 December 2014 22:15:45.400:
19127
+ * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
19128
+ * //=> Mon Dec 01 2014 22:15:00
19129
+ */
19130
+
19131
+ function startOfMinute(dirtyDate) {
19132
+ requiredArgs(1, arguments);
19133
+ var date = toDate(dirtyDate);
19134
+ date.setSeconds(0, 0);
19135
+ return date;
19136
+ }
19137
+
18894
19138
  /**
18895
19139
  * @name startOfQuarter
18896
19140
  * @category Quarter Helpers
@@ -21121,7 +21365,7 @@
21121
21365
  * | | ss | 00, 01, ..., 59 | |
21122
21366
  * | Fraction of second | S | 0, 1, ..., 9 | |
21123
21367
  * | | SS | 00, 01, ..., 99 | |
21124
- * | | SSS | 000, 0001, ..., 999 | |
21368
+ * | | SSS | 000, 001, ..., 999 | |
21125
21369
  * | | SSSS | ... | 3 |
21126
21370
  * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |
21127
21371
  * | | XX | -0800, +0530, Z | |
@@ -23536,36 +23780,6 @@
23536
23780
  return date;
23537
23781
  }
23538
23782
 
23539
- /**
23540
- * @name startOfMinute
23541
- * @category Minute Helpers
23542
- * @summary Return the start of a minute for the given date.
23543
- *
23544
- * @description
23545
- * Return the start of a minute for the given date.
23546
- * The result will be in the local timezone.
23547
- *
23548
- * ### v2.0.0 breaking changes:
23549
- *
23550
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
23551
- *
23552
- * @param {Date|Number} date - the original date
23553
- * @returns {Date} the start of a minute
23554
- * @throws {TypeError} 1 argument required
23555
- *
23556
- * @example
23557
- * // The start of a minute for 1 December 2014 22:15:45.400:
23558
- * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
23559
- * //=> Mon Dec 01 2014 22:15:00
23560
- */
23561
-
23562
- function startOfMinute(dirtyDate) {
23563
- requiredArgs(1, arguments);
23564
- var date = toDate(dirtyDate);
23565
- date.setSeconds(0, 0);
23566
- return date;
23567
- }
23568
-
23569
23783
  /**
23570
23784
  * @name startOfSecond
23571
23785
  * @category Second Helpers