chartkick 4.0.3 → 4.0.4

Sign up to get free protection for your applications and to get access to all the features.
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