chartkick 4.0.2 → 4.0.3

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: 6c7fa77eaa5945f84a46d2482bcdf7d5472d76a1f64e658b5703ca94af159b5c
4
- data.tar.gz: 6a6ba76b72c5f5a1f19e5fad672221c4dd5ac9939f89be4550b39cc87175b35d
3
+ metadata.gz: a0db2fe39f763929c498438dc88f75dd51dbc9ace5ede4819e9f4d88c0cad72f
4
+ data.tar.gz: a1dbaf6eddf2bccfdc1e6f4b9fc114eea952eb021dedb7775832d3d5c2b8a389
5
5
  SHA512:
6
- metadata.gz: b316a62c2fa403bb4fb02a8340360366431d3c5ffd198b52f055cc710d176d745d660283df955aee40e45b9f99d340e935eb3f2aa191e98770258858938534e5
7
- data.tar.gz: 061df713e35e3bda787b12a2567f7a38980979fc4c696268a9095db13f1de98ea0dbdea66c0b727c3f596c3d2c4a27dc7d464a24ca60956a0c6e14d9c4038536
6
+ metadata.gz: 0eccf48920536b5f4277cac070759d501ee77177805e06146db100e1818337de38e7c9ae45109362817da72425d3385993136012d57530266122deb09c670ea1
7
+ data.tar.gz: 55190f89407e99810198d82cda444c49f8877b86ea0148e8d408f06a4d3fc9935e07ec77414119f4d06ccd905bf9124b6678c044c2cd9d68e7de206b2901e3d3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 4.0.3 (2021-04-10)
2
+
3
+ - Updated Chartkick.js to 4.0.3
4
+ - Updated Chart.js to 3.1.0
5
+
1
6
  ## 4.0.2 (2021-04-06)
2
7
 
3
8
  - Updated Chartkick.js to 4.0.2
@@ -1,3 +1,3 @@
1
1
  module Chartkick
2
- VERSION = "4.0.2"
2
+ VERSION = "4.0.3"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Chart.js v3.0.2
2
+ * Chart.js v3.1.0
3
3
  * https://www.chartjs.org
4
4
  * (c) 2021 Chart.js Contributors
5
5
  * Released under the MIT License
@@ -2051,7 +2051,24 @@
2051
2051
  ctx.restore();
2052
2052
  }
2053
2053
 
2054
+ function addRoundedRectPath(ctx, rect) {
2055
+ var x = rect.x,
2056
+ y = rect.y,
2057
+ w = rect.w,
2058
+ h = rect.h,
2059
+ radius = rect.radius;
2060
+ ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
2061
+ ctx.lineTo(x, y + h - radius.bottomLeft);
2062
+ ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
2063
+ ctx.lineTo(x + w - radius.bottomRight, y + h);
2064
+ ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
2065
+ ctx.lineTo(x + w, y + radius.topRight);
2066
+ ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
2067
+ ctx.lineTo(x + radius.topLeft, y);
2068
+ }
2069
+
2054
2070
  var LINE_HEIGHT = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);
2071
+ var FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);
2055
2072
 
2056
2073
  function toLineHeight(value, size) {
2057
2074
  var matches = ('' + value).match(LINE_HEIGHT);
@@ -2078,7 +2095,7 @@
2078
2095
  return +v || 0;
2079
2096
  };
2080
2097
 
2081
- function readValueToProps(value, props) {
2098
+ function _readValueToProps(value, props) {
2082
2099
  var ret = {};
2083
2100
  var objProps = isObject(props);
2084
2101
  var keys = objProps ? Object.keys(props) : props;
@@ -2108,7 +2125,7 @@
2108
2125
  }
2109
2126
 
2110
2127
  function toTRBL(value) {
2111
- return readValueToProps(value, {
2128
+ return _readValueToProps(value, {
2112
2129
  top: 'y',
2113
2130
  right: 'x',
2114
2131
  bottom: 'y',
@@ -2117,7 +2134,7 @@
2117
2134
  }
2118
2135
 
2119
2136
  function toTRBLCorners(value) {
2120
- return readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
2137
+ return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
2121
2138
  }
2122
2139
 
2123
2140
  function toPadding(value) {
@@ -2136,11 +2153,18 @@
2136
2153
  size = parseInt(size, 10);
2137
2154
  }
2138
2155
 
2156
+ var style = valueOrDefault(options.style, fallback.style);
2157
+
2158
+ if (style && !('' + style).match(FONT_STYLE)) {
2159
+ console.warn('Invalid font style specified: "' + style + '"');
2160
+ style = '';
2161
+ }
2162
+
2139
2163
  var font = {
2140
2164
  family: valueOrDefault(options.family, fallback.family),
2141
2165
  lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
2142
2166
  size: size,
2143
- style: valueOrDefault(options.style, fallback.style),
2167
+ style: style,
2144
2168
  weight: valueOrDefault(options.weight, fallback.weight),
2145
2169
  string: ''
2146
2170
  };
@@ -2331,12 +2355,15 @@
2331
2355
  var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];
2332
2356
  var rootScopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scopes;
2333
2357
  var fallback = arguments.length > 3 ? arguments[3] : undefined;
2358
+ var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {
2359
+ return scopes[0];
2360
+ };
2334
2361
 
2335
2362
  if (!defined(fallback)) {
2336
2363
  fallback = _resolve('_fallback', scopes);
2337
2364
  }
2338
2365
 
2339
- var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, "_cacheable", true), _defineProperty(_cache, "_scopes", scopes), _defineProperty(_cache, "_rootScopes", rootScopes), _defineProperty(_cache, "_fallback", fallback), _defineProperty(_cache, "override", function override(scope) {
2366
+ var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, "_cacheable", true), _defineProperty(_cache, "_scopes", scopes), _defineProperty(_cache, "_rootScopes", rootScopes), _defineProperty(_cache, "_fallback", fallback), _defineProperty(_cache, "_getTarget", getTarget), _defineProperty(_cache, "override", function override(scope) {
2340
2367
  return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, rootScopes, fallback);
2341
2368
  }), _cache);
2342
2369
  return new Proxy(cache, {
@@ -2364,7 +2391,8 @@
2364
2391
  return getKeysFromAllScopes(target);
2365
2392
  },
2366
2393
  set: function set(target, prop, value) {
2367
- scopes[0][prop] = value;
2394
+ var storage = target._storage || (target._storage = getTarget());
2395
+ storage[prop] = value;
2368
2396
  delete target[prop];
2369
2397
  delete target._keys;
2370
2398
  return true;
@@ -2594,12 +2622,6 @@
2594
2622
  var fallback = resolveFallback(resolver._fallback, prop, value);
2595
2623
  var allScopes = [].concat(_toConsumableArray(parentScopes), _toConsumableArray(rootScopes));
2596
2624
  var set = new Set();
2597
- var firstParent = parentScopes[0];
2598
-
2599
- if (isObject(firstParent) && !(prop in firstParent)) {
2600
- set.add(firstParent[prop] = {});
2601
- }
2602
-
2603
2625
  set.add(value);
2604
2626
  var key = addScopesFromKey(set, allScopes, prop, fallback || prop);
2605
2627
 
@@ -2615,7 +2637,15 @@
2615
2637
  }
2616
2638
  }
2617
2639
 
2618
- return _createResolver(_toConsumableArray(set), [''], rootScopes, fallback);
2640
+ return _createResolver(_toConsumableArray(set), [''], rootScopes, fallback, function () {
2641
+ var parent = resolver._getTarget();
2642
+
2643
+ if (!(prop in parent)) {
2644
+ parent[prop] = {};
2645
+ }
2646
+
2647
+ return parent[prop];
2648
+ });
2619
2649
  }
2620
2650
 
2621
2651
  function addScopesFromKey(set, allScopes, key, fallback) {
@@ -3245,7 +3275,7 @@
3245
3275
 
3246
3276
  return {
3247
3277
  between: function between(n, s, e) {
3248
- return n >= s && n <= e;
3278
+ return n >= Math.min(s, e) && n <= Math.max(e, s);
3249
3279
  },
3250
3280
  compare: function compare(a, b) {
3251
3281
  return a - b;
@@ -3256,11 +3286,17 @@
3256
3286
  };
3257
3287
  }
3258
3288
 
3259
- function makeSubSegment(start, end, loop, count) {
3289
+ function normalizeSegment(_ref) {
3290
+ var start = _ref.start,
3291
+ end = _ref.end,
3292
+ count = _ref.count,
3293
+ loop = _ref.loop,
3294
+ style = _ref.style;
3260
3295
  return {
3261
3296
  start: start % count,
3262
3297
  end: end % count,
3263
- loop: loop && (end - start + 1) % count === 0
3298
+ loop: loop && (end - start + 1) % count === 0,
3299
+ style: style
3264
3300
  };
3265
3301
  }
3266
3302
 
@@ -3303,7 +3339,8 @@
3303
3339
  return {
3304
3340
  start: start,
3305
3341
  end: end,
3306
- loop: loop
3342
+ loop: loop,
3343
+ style: segment.style
3307
3344
  };
3308
3345
  }
3309
3346
 
@@ -3325,7 +3362,8 @@
3325
3362
  var _getSegment = getSegment(segment, points, bounds),
3326
3363
  start = _getSegment.start,
3327
3364
  end = _getSegment.end,
3328
- loop = _getSegment.loop;
3365
+ loop = _getSegment.loop,
3366
+ style = _getSegment.style;
3329
3367
 
3330
3368
  var result = [];
3331
3369
  var inside = false;
@@ -3363,7 +3401,13 @@
3363
3401
  }
3364
3402
 
3365
3403
  if (subStart !== null && shouldStop()) {
3366
- result.push(makeSubSegment(subStart, i, loop, count));
3404
+ result.push(normalizeSegment({
3405
+ start: subStart,
3406
+ end: i,
3407
+ loop: loop,
3408
+ count: count,
3409
+ style: style
3410
+ }));
3367
3411
  subStart = null;
3368
3412
  }
3369
3413
 
@@ -3372,7 +3416,13 @@
3372
3416
  }
3373
3417
 
3374
3418
  if (subStart !== null) {
3375
- result.push(makeSubSegment(subStart, end, loop, count));
3419
+ result.push(normalizeSegment({
3420
+ start: subStart,
3421
+ end: end,
3422
+ loop: loop,
3423
+ count: count,
3424
+ style: style
3425
+ }));
3376
3426
  }
3377
3427
 
3378
3428
  return result;
@@ -3466,7 +3516,7 @@
3466
3516
  return result;
3467
3517
  }
3468
3518
 
3469
- function _computeSegments(line) {
3519
+ function _computeSegments(line, segmentOptions) {
3470
3520
  var points = line.points;
3471
3521
  var spanGaps = line.options.spanGaps;
3472
3522
  var count = points.length;
@@ -3482,16 +3532,98 @@
3482
3532
  end = _findStartAndEnd.end;
3483
3533
 
3484
3534
  if (spanGaps === true) {
3485
- return [{
3535
+ return splitByStyles([{
3486
3536
  start: start,
3487
3537
  end: end,
3488
3538
  loop: loop
3489
- }];
3539
+ }], points, segmentOptions);
3490
3540
  }
3491
3541
 
3492
3542
  var max = end < start ? end + count : end;
3493
3543
  var completeLoop = !!line._fullLoop && start === 0 && end === count - 1;
3494
- return solidSegments(points, start, max, completeLoop);
3544
+ return splitByStyles(solidSegments(points, start, max, completeLoop), points, segmentOptions);
3545
+ }
3546
+
3547
+ function splitByStyles(segments, points, segmentOptions) {
3548
+ if (!segmentOptions || !segmentOptions.setContext || !points) {
3549
+ return segments;
3550
+ }
3551
+
3552
+ return doSplitByStyles(segments, points, segmentOptions);
3553
+ }
3554
+
3555
+ function doSplitByStyles(segments, points, segmentOptions) {
3556
+ var count = points.length;
3557
+ var result = [];
3558
+ var start = segments[0].start;
3559
+ var i = start;
3560
+
3561
+ var _iterator8 = _createForOfIteratorHelper(segments),
3562
+ _step8;
3563
+
3564
+ try {
3565
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
3566
+ var segment = _step8.value;
3567
+ var prevStyle = void 0,
3568
+ style = void 0;
3569
+ var prev = points[start % count];
3570
+
3571
+ for (i = start + 1; i <= segment.end; i++) {
3572
+ var pt = points[i % count];
3573
+ style = readStyle(segmentOptions.setContext({
3574
+ type: 'segment',
3575
+ p0: prev,
3576
+ p1: pt
3577
+ }));
3578
+
3579
+ if (styleChanged(style, prevStyle)) {
3580
+ result.push({
3581
+ start: start,
3582
+ end: i - 1,
3583
+ loop: segment.loop,
3584
+ style: prevStyle
3585
+ });
3586
+ prevStyle = style;
3587
+ start = i - 1;
3588
+ }
3589
+
3590
+ prev = pt;
3591
+ prevStyle = style;
3592
+ }
3593
+
3594
+ if (start < i - 1) {
3595
+ result.push({
3596
+ start: start,
3597
+ end: i - 1,
3598
+ loop: segment.loop,
3599
+ style: style
3600
+ });
3601
+ start = i - 1;
3602
+ }
3603
+ }
3604
+ } catch (err) {
3605
+ _iterator8.e(err);
3606
+ } finally {
3607
+ _iterator8.f();
3608
+ }
3609
+
3610
+ return result;
3611
+ }
3612
+
3613
+ function readStyle(options) {
3614
+ return {
3615
+ backgroundColor: options.backgroundColor,
3616
+ borderCapStyle: options.borderCapStyle,
3617
+ borderDash: options.borderDash,
3618
+ borderDashOffset: options.borderDashOffset,
3619
+ borderJoinStyle: options.borderJoinStyle,
3620
+ borderWidth: options.borderWidth,
3621
+ borderColor: options.borderColor
3622
+ };
3623
+ }
3624
+
3625
+ function styleChanged(style, prevStyle) {
3626
+ return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);
3495
3627
  }
3496
3628
 
3497
3629
  var Animator = /*#__PURE__*/function () {
@@ -4178,7 +4310,7 @@
4178
4310
  }
4179
4311
 
4180
4312
  function getStackKey(indexScale, valueScale, meta) {
4181
- return indexScale.id + '.' + valueScale.id + '.' + meta.stack + '.' + meta.type;
4313
+ return "".concat(indexScale.id, ".").concat(valueScale.id, ".").concat(meta.stack || meta.type);
4182
4314
  }
4183
4315
 
4184
4316
  function getUserBounds(scale) {
@@ -5272,7 +5404,8 @@
5272
5404
  me.updateSharedOptions(sharedOptions, mode, firstOpts);
5273
5405
 
5274
5406
  for (var i = start; i < start + count; i++) {
5275
- var vpixels = reset ? {
5407
+ var parsed = me.getParsed(i);
5408
+ var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {
5276
5409
  base: base,
5277
5410
  head: base
5278
5411
  } : me._calculateBarValuePixels(i);
@@ -6158,20 +6291,17 @@
6158
6291
 
6159
6292
  line._decimated = !!_dataset._decimated;
6160
6293
  line.points = points;
6294
+ var options = me.resolveDatasetElementOptions(mode);
6161
6295
 
6162
- if (mode !== 'resize') {
6163
- var options = me.resolveDatasetElementOptions(mode);
6164
-
6165
- if (!me.options.showLine) {
6166
- options.borderWidth = 0;
6167
- }
6168
-
6169
- me.updateElement(line, undefined, {
6170
- animated: !animationsDisabled,
6171
- options: options
6172
- }, mode);
6296
+ if (!me.options.showLine) {
6297
+ options.borderWidth = 0;
6173
6298
  }
6174
6299
 
6300
+ options.segment = me.options.segment;
6301
+ me.updateElement(line, undefined, {
6302
+ animated: !animationsDisabled,
6303
+ options: options
6304
+ }, mode);
6175
6305
  me.updateElements(points, start, count, mode);
6176
6306
  }
6177
6307
  }, {
@@ -6195,10 +6325,12 @@
6195
6325
  var point = points[i];
6196
6326
  var parsed = me.getParsed(i);
6197
6327
  var properties = directUpdate ? point : {};
6328
+ var nullData = isNullOrUndef(parsed.y);
6198
6329
  var x = properties.x = xScale.getPixelForValue(parsed.x, i);
6199
- var y = properties.y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(_stacked ? me.applyStack(yScale, parsed, _stacked) : parsed.y, i);
6200
- properties.skip = isNaN(x) || isNaN(y);
6330
+ var y = properties.y = reset || nullData ? yScale.getBasePixel() : yScale.getPixelForValue(_stacked ? me.applyStack(yScale, parsed, _stacked) : parsed.y, i);
6331
+ properties.skip = isNaN(x) || isNaN(y) || nullData;
6201
6332
  properties.stop = i > 0 && parsed.x - prevParsed.x > maxGapLength;
6333
+ properties.parsed = parsed;
6202
6334
 
6203
6335
  if (includeOptions) {
6204
6336
  properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
@@ -7081,20 +7213,15 @@
7081
7213
  var box = layout.box;
7082
7214
  var maxPadding = chartArea.maxPadding;
7083
7215
 
7084
- if (isObject(layout.pos)) {
7085
- return {
7086
- same: false,
7087
- other: false
7088
- };
7089
- }
7216
+ if (!isObject(layout.pos)) {
7217
+ if (layout.size) {
7218
+ chartArea[layout.pos] -= layout.size;
7219
+ }
7090
7220
 
7091
- if (layout.size) {
7092
- chartArea[layout.pos] -= layout.size;
7221
+ layout.size = layout.horizontal ? box.height : box.width;
7222
+ chartArea[layout.pos] += layout.size;
7093
7223
  }
7094
7224
 
7095
- layout.size = layout.horizontal ? box.height : box.width;
7096
- chartArea[layout.pos] += layout.size;
7097
-
7098
7225
  if (box.getPadding) {
7099
7226
  updateMaxPadding(maxPadding, box.getPadding());
7100
7227
  }
@@ -7842,12 +7969,7 @@
7842
7969
  offset: false,
7843
7970
  borderDash: [],
7844
7971
  borderDashOffset: 0.0,
7845
- borderColor: function borderColor(_ctx, options) {
7846
- return options.color;
7847
- },
7848
- borderWidth: function borderWidth(_ctx, options) {
7849
- return options.lineWidth;
7850
- }
7972
+ borderWidth: 1
7851
7973
  },
7852
7974
  title: {
7853
7975
  display: false,
@@ -7877,6 +7999,7 @@
7877
7999
  });
7878
8000
  defaults.route('scale.ticks', 'color', '', 'color');
7879
8001
  defaults.route('scale.grid', 'color', '', 'borderColor');
8002
+ defaults.route('scale.grid', 'borderColor', '', 'borderColor');
7880
8003
  defaults.route('scale.title', 'color', '', 'color');
7881
8004
  defaults.describe('scale', {
7882
8005
  _fallback: false,
@@ -8223,7 +8346,7 @@
8223
8346
  key: "init",
8224
8347
  value: function init(options) {
8225
8348
  var me = this;
8226
- me.options = options;
8349
+ me.options = options.setContext(me.getContext());
8227
8350
  me.axis = options.axis;
8228
8351
  me._userMin = me.parse(options.min);
8229
8352
  me._userMax = me.parse(options.max);
@@ -8589,7 +8712,7 @@
8589
8712
  var sin = Math.sin(angleRadians);
8590
8713
 
8591
8714
  if (isHorizontal) {
8592
- var labelHeight = sin * widest.width + cos * highest.height;
8715
+ var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
8593
8716
  minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);
8594
8717
  } else {
8595
8718
  var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
@@ -9012,27 +9135,29 @@
9012
9135
  var ticks = me.ticks;
9013
9136
  var align = optionTicks.align,
9014
9137
  crossAlign = optionTicks.crossAlign,
9015
- padding = optionTicks.padding;
9138
+ padding = optionTicks.padding,
9139
+ mirror = optionTicks.mirror;
9016
9140
  var tl = getTickMarkLength(options.grid);
9017
9141
  var tickAndPadding = tl + padding;
9142
+ var hTickAndPadding = mirror ? -padding : tickAndPadding;
9018
9143
  var rotation = -toRadians(me.labelRotation);
9019
9144
  var items = [];
9020
9145
  var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
9021
9146
  var textBaseline = 'middle';
9022
9147
 
9023
9148
  if (position === 'top') {
9024
- y = me.bottom - tickAndPadding;
9149
+ y = me.bottom - hTickAndPadding;
9025
9150
  textAlign = me._getXAxisLabelAlignment();
9026
9151
  } else if (position === 'bottom') {
9027
- y = me.top + tickAndPadding;
9152
+ y = me.top + hTickAndPadding;
9028
9153
  textAlign = me._getXAxisLabelAlignment();
9029
9154
  } else if (position === 'left') {
9030
- var ret = this._getYAxisLabelAlignment(tl);
9155
+ var ret = me._getYAxisLabelAlignment(tl);
9031
9156
 
9032
9157
  textAlign = ret.textAlign;
9033
9158
  x = ret.x;
9034
9159
  } else if (position === 'right') {
9035
- var _ret = this._getYAxisLabelAlignment(tl);
9160
+ var _ret = me._getYAxisLabelAlignment(tl);
9036
9161
 
9037
9162
  textAlign = _ret.textAlign;
9038
9163
  x = _ret.x;
@@ -9055,7 +9180,7 @@
9055
9180
  x = me.chart.scales[_positionAxisID2].getPixelForValue(_value2);
9056
9181
  }
9057
9182
 
9058
- textAlign = this._getYAxisLabelAlignment(tl).textAlign;
9183
+ textAlign = me._getYAxisLabelAlignment(tl).textAlign;
9059
9184
  }
9060
9185
 
9061
9186
  if (axis === 'y') {
@@ -9101,6 +9226,10 @@
9101
9226
  textOffset = labelSizes.highest.height - lineCount * lineHeight;
9102
9227
  }
9103
9228
  }
9229
+
9230
+ if (mirror) {
9231
+ textOffset *= -1;
9232
+ }
9104
9233
  } else {
9105
9234
  y = pixel;
9106
9235
  textOffset = (1 - lineCount) * lineHeight / 2;
@@ -9166,7 +9295,7 @@
9166
9295
  if (position === 'left') {
9167
9296
  if (mirror) {
9168
9297
  textAlign = 'left';
9169
- x = me.right - padding;
9298
+ x = me.right + padding;
9170
9299
  } else {
9171
9300
  x = me.right - tickAndPadding;
9172
9301
 
@@ -9282,7 +9411,7 @@
9282
9411
  var grid = me.options.grid;
9283
9412
  var ctx = me.ctx;
9284
9413
  var chart = me.chart;
9285
- var borderOpts = grid.setContext(me.getContext(0));
9414
+ var borderOpts = grid.setContext(me.getContext());
9286
9415
  var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
9287
9416
 
9288
9417
  var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));
@@ -9338,8 +9467,7 @@
9338
9467
  }
9339
9468
 
9340
9469
  if (axisWidth) {
9341
- var edgeOpts = grid.setContext(me.getContext(me._ticksLength - 1));
9342
- var lastLineWidth = edgeOpts.lineWidth;
9470
+ var lastLineWidth = borderOpts.lineWidth;
9343
9471
  var borderValue = me._borderValue;
9344
9472
  var x1, x2, y1, y2;
9345
9473
 
@@ -9361,7 +9489,7 @@
9361
9489
  y: y2
9362
9490
  }, {
9363
9491
  width: axisWidth,
9364
- color: edgeOpts.borderColor
9492
+ color: borderOpts.borderColor
9365
9493
  });
9366
9494
  }
9367
9495
  }
@@ -9811,7 +9939,7 @@
9811
9939
 
9812
9940
  _createClass(PluginService, [{
9813
9941
  key: "notify",
9814
- value: function notify(chart, hook, args) {
9942
+ value: function notify(chart, hook, args, filter) {
9815
9943
  var me = this;
9816
9944
 
9817
9945
  if (hook === 'beforeInit') {
@@ -9820,7 +9948,7 @@
9820
9948
  me._notify(me._init, chart, 'install');
9821
9949
  }
9822
9950
 
9823
- var descriptors = me._descriptors(chart);
9951
+ var descriptors = filter ? me._descriptors(chart).filter(filter) : me._descriptors(chart);
9824
9952
 
9825
9953
  var result = me._notify(descriptors, chart, hook, args);
9826
9954
 
@@ -10351,7 +10479,7 @@
10351
10479
  return false;
10352
10480
  }
10353
10481
 
10354
- var version = "3.0.2";
10482
+ var version = "3.1.0";
10355
10483
  var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
10356
10484
 
10357
10485
  function positionIsHorizontal(position, axis) {
@@ -11340,8 +11468,8 @@
11340
11468
  }
11341
11469
  }, {
11342
11470
  key: "notifyPlugins",
11343
- value: function notifyPlugins(hook, args) {
11344
- return this._plugins.notify(this, hook, args);
11471
+ value: function notifyPlugins(hook, args, filter) {
11472
+ return this._plugins.notify(this, hook, args, filter);
11345
11473
  }
11346
11474
  }, {
11347
11475
  key: "_updateHoverStyles",
@@ -11371,6 +11499,8 @@
11371
11499
  }, {
11372
11500
  key: "_eventHandler",
11373
11501
  value: function _eventHandler(e, replay) {
11502
+ var _this6 = this;
11503
+
11374
11504
  var me = this;
11375
11505
  var args = {
11376
11506
  event: e,
@@ -11378,14 +11508,18 @@
11378
11508
  cancelable: true
11379
11509
  };
11380
11510
 
11381
- if (me.notifyPlugins('beforeEvent', args) === false) {
11511
+ var eventFilter = function eventFilter(plugin) {
11512
+ return (plugin.options.events || _this6.options.events).includes(e.type);
11513
+ };
11514
+
11515
+ if (me.notifyPlugins('beforeEvent', args, eventFilter) === false) {
11382
11516
  return;
11383
11517
  }
11384
11518
 
11385
11519
  var changed = me._handleEvent(e, replay);
11386
11520
 
11387
11521
  args.cancelable = false;
11388
- me.notifyPlugins('afterEvent', args);
11522
+ me.notifyPlugins('afterEvent', args, eventFilter);
11389
11523
 
11390
11524
  if (changed || args.changed) {
11391
11525
  me.render();
@@ -11412,10 +11546,11 @@
11412
11546
  }
11413
11547
 
11414
11548
  me._lastEvent = null;
11415
- callback(options.onHover, [e, active, me], me);
11416
11549
 
11417
- if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {
11418
- if (_isPointInArea(e, me.chartArea, me._minPadding)) {
11550
+ if (_isPointInArea(e, me.chartArea, me._minPadding)) {
11551
+ callback(options.onHover, [e, active, me], me);
11552
+
11553
+ if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {
11419
11554
  callback(options.onClick, [e, active, me], me);
11420
11555
  }
11421
11556
  }
@@ -11507,6 +11642,35 @@
11507
11642
  ctx.clip();
11508
11643
  }
11509
11644
 
11645
+ function toRadiusCorners(value) {
11646
+ return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);
11647
+ }
11648
+
11649
+ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
11650
+ var o = toRadiusCorners(arc.options.borderRadius);
11651
+ var halfThickness = (outerRadius - innerRadius) / 2;
11652
+ var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
11653
+
11654
+ var computeOuterLimit = function computeOuterLimit(val) {
11655
+ var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
11656
+ return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
11657
+ };
11658
+
11659
+ return {
11660
+ outerStart: computeOuterLimit(o.outerStart),
11661
+ outerEnd: computeOuterLimit(o.outerEnd),
11662
+ innerStart: _limitValue(o.innerStart, 0, innerLimit),
11663
+ innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
11664
+ };
11665
+ }
11666
+
11667
+ function rThetaToXY(r, theta, x, y) {
11668
+ return {
11669
+ x: x + r * Math.cos(theta),
11670
+ y: y + r * Math.sin(theta)
11671
+ };
11672
+ }
11673
+
11510
11674
  function pathArc(ctx, element) {
11511
11675
  var x = element.x,
11512
11676
  y = element.y,
@@ -11515,9 +11679,55 @@
11515
11679
  pixelMargin = element.pixelMargin;
11516
11680
  var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);
11517
11681
  var innerRadius = element.innerRadius + pixelMargin;
11682
+
11683
+ var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),
11684
+ outerStart = _parseBorderRadius$.outerStart,
11685
+ outerEnd = _parseBorderRadius$.outerEnd,
11686
+ innerStart = _parseBorderRadius$.innerStart,
11687
+ innerEnd = _parseBorderRadius$.innerEnd;
11688
+
11689
+ var outerStartAdjustedRadius = outerRadius - outerStart;
11690
+ var outerEndAdjustedRadius = outerRadius - outerEnd;
11691
+ var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
11692
+ var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
11693
+ var innerStartAdjustedRadius = innerRadius + innerStart;
11694
+ var innerEndAdjustedRadius = innerRadius + innerEnd;
11695
+ var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
11696
+ var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
11518
11697
  ctx.beginPath();
11519
- ctx.arc(x, y, outerRadius, startAngle, endAngle);
11520
- ctx.arc(x, y, innerRadius, endAngle, startAngle, true);
11698
+ ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);
11699
+
11700
+ if (outerEnd > 0) {
11701
+ var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
11702
+ ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
11703
+ }
11704
+
11705
+ var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
11706
+ ctx.lineTo(p4.x, p4.y);
11707
+
11708
+ if (innerEnd > 0) {
11709
+ var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
11710
+
11711
+ ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
11712
+ }
11713
+
11714
+ ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);
11715
+
11716
+ if (innerStart > 0) {
11717
+ var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
11718
+
11719
+ ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
11720
+ }
11721
+
11722
+ var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
11723
+ ctx.lineTo(p8.x, p8.y);
11724
+
11725
+ if (outerStart > 0) {
11726
+ var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
11727
+
11728
+ ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
11729
+ }
11730
+
11521
11731
  ctx.closePath();
11522
11732
  }
11523
11733
 
@@ -11576,14 +11786,7 @@
11576
11786
  }
11577
11787
 
11578
11788
  function drawBorder(ctx, element) {
11579
- var x = element.x,
11580
- y = element.y,
11581
- startAngle = element.startAngle,
11582
- endAngle = element.endAngle,
11583
- pixelMargin = element.pixelMargin,
11584
- options = element.options;
11585
- var outerRadius = element.outerRadius;
11586
- var innerRadius = element.innerRadius + pixelMargin;
11789
+ var options = element.options;
11587
11790
  var inner = options.borderAlign === 'inner';
11588
11791
 
11589
11792
  if (!options.borderWidth) {
@@ -11606,10 +11809,7 @@
11606
11809
  clipArc(ctx, element);
11607
11810
  }
11608
11811
 
11609
- ctx.beginPath();
11610
- ctx.arc(x, y, outerRadius, startAngle, endAngle);
11611
- ctx.arc(x, y, innerRadius, endAngle, startAngle, true);
11612
- ctx.closePath();
11812
+ pathArc(ctx, element);
11613
11813
  ctx.stroke();
11614
11814
  }
11615
11815
 
@@ -11619,25 +11819,25 @@
11619
11819
  var _super12 = _createSuper(ArcElement);
11620
11820
 
11621
11821
  function ArcElement(cfg) {
11622
- var _this6;
11822
+ var _this7;
11623
11823
 
11624
11824
  _classCallCheck(this, ArcElement);
11625
11825
 
11626
- _this6 = _super12.call(this);
11627
- _this6.options = undefined;
11628
- _this6.circumference = undefined;
11629
- _this6.startAngle = undefined;
11630
- _this6.endAngle = undefined;
11631
- _this6.innerRadius = undefined;
11632
- _this6.outerRadius = undefined;
11633
- _this6.pixelMargin = 0;
11634
- _this6.fullCircles = 0;
11826
+ _this7 = _super12.call(this);
11827
+ _this7.options = undefined;
11828
+ _this7.circumference = undefined;
11829
+ _this7.startAngle = undefined;
11830
+ _this7.endAngle = undefined;
11831
+ _this7.innerRadius = undefined;
11832
+ _this7.outerRadius = undefined;
11833
+ _this7.pixelMargin = 0;
11834
+ _this7.fullCircles = 0;
11635
11835
 
11636
11836
  if (cfg) {
11637
- Object.assign(_assertThisInitialized(_this6), cfg);
11837
+ Object.assign(_assertThisInitialized(_this7), cfg);
11638
11838
  }
11639
11839
 
11640
- return _this6;
11840
+ return _this7;
11641
11841
  }
11642
11842
 
11643
11843
  _createClass(ArcElement, [{
@@ -11722,6 +11922,7 @@
11722
11922
  ArcElement.defaults = {
11723
11923
  borderAlign: 'center',
11724
11924
  borderColor: '#fff',
11925
+ borderRadius: 0,
11725
11926
  borderWidth: 2,
11726
11927
  offset: 0,
11727
11928
  angle: undefined
@@ -11730,13 +11931,14 @@
11730
11931
  backgroundColor: 'backgroundColor'
11731
11932
  };
11732
11933
 
11733
- function setStyle(ctx, vm) {
11734
- ctx.lineCap = vm.borderCapStyle;
11735
- ctx.setLineDash(vm.borderDash);
11736
- ctx.lineDashOffset = vm.borderDashOffset;
11737
- ctx.lineJoin = vm.borderJoinStyle;
11738
- ctx.lineWidth = vm.borderWidth;
11739
- ctx.strokeStyle = vm.borderColor;
11934
+ function setStyle(ctx, options) {
11935
+ var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;
11936
+ ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);
11937
+ ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));
11938
+ ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);
11939
+ ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);
11940
+ ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);
11941
+ ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);
11740
11942
  }
11741
11943
 
11742
11944
  function lineTo(ctx, previous, target) {
@@ -11907,21 +12109,50 @@
11907
12109
  }
11908
12110
  }
11909
12111
 
12112
+ setStyle(ctx, line.options);
11910
12113
  ctx.stroke(path);
11911
12114
  }
11912
12115
 
11913
12116
  function strokePathDirect(ctx, line, start, count) {
11914
- ctx.beginPath();
12117
+ var segments = line.segments,
12118
+ options = line.options;
11915
12119
 
11916
- if (line.path(ctx, start, count)) {
11917
- ctx.closePath();
11918
- }
12120
+ var segmentMethod = _getSegmentMethod(line);
11919
12121
 
11920
- ctx.stroke();
12122
+ var _iterator6 = _createForOfIteratorHelper(segments),
12123
+ _step6;
12124
+
12125
+ try {
12126
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
12127
+ var segment = _step6.value;
12128
+ setStyle(ctx, options, segment.style);
12129
+ ctx.beginPath();
12130
+
12131
+ if (segmentMethod(ctx, line, segment, {
12132
+ start: start,
12133
+ end: start + count - 1
12134
+ })) {
12135
+ ctx.closePath();
12136
+ }
12137
+
12138
+ ctx.stroke();
12139
+ }
12140
+ } catch (err) {
12141
+ _iterator6.e(err);
12142
+ } finally {
12143
+ _iterator6.f();
12144
+ }
11921
12145
  }
11922
12146
 
11923
12147
  var usePath2D = typeof Path2D === 'function';
11924
- var strokePath = usePath2D ? strokePathWithCache : strokePathDirect;
12148
+
12149
+ function _draw(ctx, line, start, count) {
12150
+ if (usePath2D && line.segments.length === 1) {
12151
+ strokePathWithCache(ctx, line, start, count);
12152
+ } else {
12153
+ strokePathDirect(ctx, line, start, count);
12154
+ }
12155
+ }
11925
12156
 
11926
12157
  var LineElement = /*#__PURE__*/function (_Element3) {
11927
12158
  _inherits(LineElement, _Element3);
@@ -11929,26 +12160,26 @@
11929
12160
  var _super13 = _createSuper(LineElement);
11930
12161
 
11931
12162
  function LineElement(cfg) {
11932
- var _this7;
12163
+ var _this8;
11933
12164
 
11934
12165
  _classCallCheck(this, LineElement);
11935
12166
 
11936
- _this7 = _super13.call(this);
11937
- _this7.animated = true;
11938
- _this7.options = undefined;
11939
- _this7._loop = undefined;
11940
- _this7._fullLoop = undefined;
11941
- _this7._path = undefined;
11942
- _this7._points = undefined;
11943
- _this7._segments = undefined;
11944
- _this7._decimated = false;
11945
- _this7._pointsUpdated = false;
12167
+ _this8 = _super13.call(this);
12168
+ _this8.animated = true;
12169
+ _this8.options = undefined;
12170
+ _this8._loop = undefined;
12171
+ _this8._fullLoop = undefined;
12172
+ _this8._path = undefined;
12173
+ _this8._points = undefined;
12174
+ _this8._segments = undefined;
12175
+ _this8._decimated = false;
12176
+ _this8._pointsUpdated = false;
11946
12177
 
11947
12178
  if (cfg) {
11948
- Object.assign(_assertThisInitialized(_this7), cfg);
12179
+ Object.assign(_assertThisInitialized(_this8), cfg);
11949
12180
  }
11950
12181
 
11951
- return _this7;
12182
+ return _this8;
11952
12183
  }
11953
12184
 
11954
12185
  _createClass(LineElement, [{
@@ -11980,7 +12211,7 @@
11980
12211
  }, {
11981
12212
  key: "segments",
11982
12213
  get: function get() {
11983
- return this._segments || (this._segments = _computeSegments(this));
12214
+ return this._segments || (this._segments = _computeSegments(this, this.options.segment));
11984
12215
  }
11985
12216
  }, {
11986
12217
  key: "first",
@@ -12055,7 +12286,6 @@
12055
12286
  value: function path(ctx, start, count) {
12056
12287
  var me = this;
12057
12288
  var segments = me.segments;
12058
- var ilen = segments.length;
12059
12289
 
12060
12290
  var segmentMethod = _getSegmentMethod(me);
12061
12291
 
@@ -12063,11 +12293,21 @@
12063
12293
  start = start || 0;
12064
12294
  count = count || me.points.length - start;
12065
12295
 
12066
- for (var i = 0; i < ilen; ++i) {
12067
- loop &= segmentMethod(ctx, me, segments[i], {
12068
- start: start,
12069
- end: start + count - 1
12070
- });
12296
+ var _iterator7 = _createForOfIteratorHelper(segments),
12297
+ _step7;
12298
+
12299
+ try {
12300
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
12301
+ var segment = _step7.value;
12302
+ loop &= segmentMethod(ctx, me, segment, {
12303
+ start: start,
12304
+ end: start + count - 1
12305
+ });
12306
+ }
12307
+ } catch (err) {
12308
+ _iterator7.e(err);
12309
+ } finally {
12310
+ _iterator7.f();
12071
12311
  }
12072
12312
 
12073
12313
  return !!loop;
@@ -12084,8 +12324,9 @@
12084
12324
  }
12085
12325
 
12086
12326
  ctx.save();
12087
- setStyle(ctx, options);
12088
- strokePath(ctx, me, start, count);
12327
+
12328
+ _draw(ctx, me, start, count);
12329
+
12089
12330
  ctx.restore();
12090
12331
 
12091
12332
  if (me.animated) {
@@ -12138,20 +12379,21 @@
12138
12379
  var _super14 = _createSuper(PointElement);
12139
12380
 
12140
12381
  function PointElement(cfg) {
12141
- var _this8;
12382
+ var _this9;
12142
12383
 
12143
12384
  _classCallCheck(this, PointElement);
12144
12385
 
12145
- _this8 = _super14.call(this);
12146
- _this8.options = undefined;
12147
- _this8.skip = undefined;
12148
- _this8.stop = undefined;
12386
+ _this9 = _super14.call(this);
12387
+ _this9.options = undefined;
12388
+ _this9.parsed = undefined;
12389
+ _this9.skip = undefined;
12390
+ _this9.stop = undefined;
12149
12391
 
12150
12392
  if (cfg) {
12151
- Object.assign(_assertThisInitialized(_this8), cfg);
12393
+ Object.assign(_assertThisInitialized(_this9), cfg);
12152
12394
  }
12153
12395
 
12154
- return _this8;
12396
+ return _this9;
12155
12397
  }
12156
12398
 
12157
12399
  _createClass(PointElement, [{
@@ -12371,22 +12613,6 @@
12371
12613
  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
12372
12614
  }
12373
12615
 
12374
- function addRoundedRectPath(ctx, rect) {
12375
- var x = rect.x,
12376
- y = rect.y,
12377
- w = rect.w,
12378
- h = rect.h,
12379
- radius = rect.radius;
12380
- ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
12381
- ctx.lineTo(x, y + h - radius.bottomLeft);
12382
- ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
12383
- ctx.lineTo(x + w - radius.bottomRight, y + h);
12384
- ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
12385
- ctx.lineTo(x + w, y + radius.topRight);
12386
- ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
12387
- ctx.lineTo(x + radius.topLeft, y);
12388
- }
12389
-
12390
12616
  function addNormalRectPath(ctx, rect) {
12391
12617
  ctx.rect(rect.x, rect.y, rect.w, rect.h);
12392
12618
  }
@@ -12397,22 +12623,22 @@
12397
12623
  var _super15 = _createSuper(BarElement);
12398
12624
 
12399
12625
  function BarElement(cfg) {
12400
- var _this9;
12626
+ var _this10;
12401
12627
 
12402
12628
  _classCallCheck(this, BarElement);
12403
12629
 
12404
- _this9 = _super15.call(this);
12405
- _this9.options = undefined;
12406
- _this9.horizontal = undefined;
12407
- _this9.base = undefined;
12408
- _this9.width = undefined;
12409
- _this9.height = undefined;
12630
+ _this10 = _super15.call(this);
12631
+ _this10.options = undefined;
12632
+ _this10.horizontal = undefined;
12633
+ _this10.base = undefined;
12634
+ _this10.width = undefined;
12635
+ _this10.height = undefined;
12410
12636
 
12411
12637
  if (cfg) {
12412
- Object.assign(_assertThisInitialized(_this9), cfg);
12638
+ Object.assign(_assertThisInitialized(_this10), cfg);
12413
12639
  }
12414
12640
 
12415
- return _this9;
12641
+ return _this10;
12416
12642
  }
12417
12643
 
12418
12644
  _createClass(BarElement, [{
@@ -12500,12 +12726,18 @@
12500
12726
  BarElement: BarElement
12501
12727
  });
12502
12728
 
12503
- function lttbDecimation(data, availableWidth, options) {
12729
+ function lttbDecimation(data, start, count, availableWidth, options) {
12504
12730
  var samples = options.samples || availableWidth;
12731
+
12732
+ if (samples >= count) {
12733
+ return data.slice(start, start + count);
12734
+ }
12735
+
12505
12736
  var decimated = [];
12506
- var bucketWidth = (data.length - 2) / (samples - 2);
12737
+ var bucketWidth = (count - 2) / (samples - 2);
12507
12738
  var sampledIndex = 0;
12508
- var a = 0;
12739
+ var endIndex = start + count - 1;
12740
+ var a = start;
12509
12741
  var i, maxAreaPoint, maxArea, area, nextA;
12510
12742
  decimated[sampledIndex++] = data[a];
12511
12743
 
@@ -12513,19 +12745,19 @@
12513
12745
  var avgX = 0;
12514
12746
  var avgY = 0;
12515
12747
  var j = void 0;
12516
- var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1;
12517
- var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, data.length);
12748
+ var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;
12749
+ var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;
12518
12750
  var avgRangeLength = avgRangeEnd - avgRangeStart;
12519
12751
 
12520
12752
  for (j = avgRangeStart; j < avgRangeEnd; j++) {
12521
- avgX = data[j].x;
12522
- avgY = data[j].y;
12753
+ avgX += data[j].x;
12754
+ avgY += data[j].y;
12523
12755
  }
12524
12756
 
12525
12757
  avgX /= avgRangeLength;
12526
12758
  avgY /= avgRangeLength;
12527
- var rangeOffs = Math.floor(i * bucketWidth) + 1;
12528
- var rangeTo = Math.floor((i + 1) * bucketWidth) + 1;
12759
+ var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;
12760
+ var rangeTo = Math.floor((i + 1) * bucketWidth) + 1 + start;
12529
12761
  var _data$a = data[a],
12530
12762
  pointAx = _data$a.x,
12531
12763
  pointAy = _data$a.y;
@@ -12545,20 +12777,21 @@
12545
12777
  a = nextA;
12546
12778
  }
12547
12779
 
12548
- decimated[sampledIndex++] = data[data.length - 1];
12780
+ decimated[sampledIndex++] = data[endIndex];
12549
12781
  return decimated;
12550
12782
  }
12551
12783
 
12552
- function minMaxDecimation(data, availableWidth) {
12784
+ function minMaxDecimation(data, start, count, availableWidth) {
12553
12785
  var avgX = 0;
12554
12786
  var countX = 0;
12555
12787
  var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;
12556
12788
  var decimated = [];
12557
- var xMin = data[0].x;
12558
- var xMax = data[data.length - 1].x;
12789
+ var endIndex = start + count - 1;
12790
+ var xMin = data[start].x;
12791
+ var xMax = data[endIndex].x;
12559
12792
  var dx = xMax - xMin;
12560
12793
 
12561
- for (i = 0; i < data.length; ++i) {
12794
+ for (i = start; i < start + count; ++i) {
12562
12795
  point = data[i];
12563
12796
  x = (point.x - xMin) / dx * availableWidth;
12564
12797
  y = point.y;
@@ -12622,6 +12855,34 @@
12622
12855
  });
12623
12856
  }
12624
12857
 
12858
+ function getStartAndCountOfVisiblePointsSimplified(meta, points) {
12859
+ var pointCount = points.length;
12860
+ var start = 0;
12861
+ var count;
12862
+ var iScale = meta.iScale;
12863
+
12864
+ var _iScale$getUserBounds2 = iScale.getUserBounds(),
12865
+ min = _iScale$getUserBounds2.min,
12866
+ max = _iScale$getUserBounds2.max,
12867
+ minDefined = _iScale$getUserBounds2.minDefined,
12868
+ maxDefined = _iScale$getUserBounds2.maxDefined;
12869
+
12870
+ if (minDefined) {
12871
+ start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);
12872
+ }
12873
+
12874
+ if (maxDefined) {
12875
+ count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;
12876
+ } else {
12877
+ count = pointCount - start;
12878
+ }
12879
+
12880
+ return {
12881
+ start: start,
12882
+ count: count
12883
+ };
12884
+ }
12885
+
12625
12886
  var plugin_decimation = {
12626
12887
  id: 'decimation',
12627
12888
  defaults: {
@@ -12659,7 +12920,11 @@
12659
12920
  return;
12660
12921
  }
12661
12922
 
12662
- if (data.length <= 4 * availableWidth) {
12923
+ var _getStartAndCountOfVi2 = getStartAndCountOfVisiblePointsSimplified(meta, data),
12924
+ start = _getStartAndCountOfVi2.start,
12925
+ count = _getStartAndCountOfVi2.count;
12926
+
12927
+ if (count <= 4 * availableWidth) {
12663
12928
  return;
12664
12929
  }
12665
12930
 
@@ -12682,11 +12947,11 @@
12682
12947
 
12683
12948
  switch (options.algorithm) {
12684
12949
  case 'lttb':
12685
- decimated = lttbDecimation(data, availableWidth, options);
12950
+ decimated = lttbDecimation(data, start, count, availableWidth, options);
12686
12951
  break;
12687
12952
 
12688
12953
  case 'min-max':
12689
- decimated = minMaxDecimation(data, availableWidth);
12954
+ decimated = minMaxDecimation(data, start, count, availableWidth);
12690
12955
  break;
12691
12956
 
12692
12957
  default:
@@ -13131,37 +13396,65 @@
13131
13396
  var tpoints = target.points;
13132
13397
  var parts = [];
13133
13398
 
13134
- for (var i = 0; i < segments.length; i++) {
13135
- var segment = segments[i];
13136
- var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);
13137
-
13138
- if (!target.segments) {
13139
- parts.push({
13140
- source: segment,
13141
- target: bounds,
13142
- start: points[segment.start],
13143
- end: points[segment.end]
13144
- });
13145
- continue;
13146
- }
13147
-
13148
- var subs = _boundSegments(target, bounds);
13149
-
13150
- for (var j = 0; j < subs.length; ++j) {
13151
- var sub = subs[j];
13152
- var subBounds = getBounds(property, tpoints[sub.start], tpoints[sub.end], sub.loop);
13399
+ var _iterator8 = _createForOfIteratorHelper(segments),
13400
+ _step8;
13153
13401
 
13154
- var fillSources = _boundSegment(segment, points, subBounds);
13402
+ try {
13403
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
13404
+ var segment = _step8.value;
13405
+ var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);
13155
13406
 
13156
- for (var k = 0; k < fillSources.length; k++) {
13407
+ if (!target.segments) {
13157
13408
  parts.push({
13158
- source: fillSources[k],
13159
- target: sub,
13160
- start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),
13161
- end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))
13409
+ source: segment,
13410
+ target: bounds,
13411
+ start: points[segment.start],
13412
+ end: points[segment.end]
13162
13413
  });
13414
+ continue;
13415
+ }
13416
+
13417
+ var targetSegments = _boundSegments(target, bounds);
13418
+
13419
+ var _iterator9 = _createForOfIteratorHelper(targetSegments),
13420
+ _step9;
13421
+
13422
+ try {
13423
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
13424
+ var tgt = _step9.value;
13425
+ var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
13426
+
13427
+ var fillSources = _boundSegment(segment, points, subBounds);
13428
+
13429
+ var _iterator10 = _createForOfIteratorHelper(fillSources),
13430
+ _step10;
13431
+
13432
+ try {
13433
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
13434
+ var fillSource = _step10.value;
13435
+ parts.push({
13436
+ source: fillSource,
13437
+ target: tgt,
13438
+ start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),
13439
+ end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))
13440
+ });
13441
+ }
13442
+ } catch (err) {
13443
+ _iterator10.e(err);
13444
+ } finally {
13445
+ _iterator10.f();
13446
+ }
13447
+ }
13448
+ } catch (err) {
13449
+ _iterator9.e(err);
13450
+ } finally {
13451
+ _iterator9.f();
13163
13452
  }
13164
13453
  }
13454
+ } catch (err) {
13455
+ _iterator8.e(err);
13456
+ } finally {
13457
+ _iterator8.f();
13165
13458
  }
13166
13459
 
13167
13460
  return parts;
@@ -13201,38 +13494,50 @@
13201
13494
 
13202
13495
  var segments = _segments(line, target, property);
13203
13496
 
13204
- ctx.fillStyle = color;
13497
+ var _iterator11 = _createForOfIteratorHelper(segments),
13498
+ _step11;
13205
13499
 
13206
- for (var i = 0, ilen = segments.length; i < ilen; ++i) {
13207
- var _segments$i2 = segments[i],
13208
- src = _segments$i2.source,
13209
- tgt = _segments$i2.target,
13210
- start = _segments$i2.start,
13211
- end = _segments$i2.end;
13212
- ctx.save();
13213
- clipBounds(ctx, scale, getBounds(property, start, end));
13214
- ctx.beginPath();
13215
- var lineLoop = !!line.pathSegment(ctx, src);
13500
+ 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;
13507
+ var _src$style = src.style;
13508
+ _src$style = _src$style === void 0 ? {} : _src$style;
13509
+ var _src$style$background = _src$style.backgroundColor,
13510
+ backgroundColor = _src$style$background === void 0 ? color : _src$style$background;
13511
+ ctx.save();
13512
+ ctx.fillStyle = backgroundColor;
13513
+ clipBounds(ctx, scale, getBounds(property, start, end));
13514
+ ctx.beginPath();
13515
+ var lineLoop = !!line.pathSegment(ctx, src);
13216
13516
 
13217
- if (lineLoop) {
13218
- ctx.closePath();
13219
- } else {
13220
- interpolatedLineTo(ctx, target, end, property);
13221
- }
13517
+ if (lineLoop) {
13518
+ ctx.closePath();
13519
+ } else {
13520
+ interpolatedLineTo(ctx, target, end, property);
13521
+ }
13222
13522
 
13223
- var targetLoop = !!target.pathSegment(ctx, tgt, {
13224
- move: lineLoop,
13225
- reverse: true
13226
- });
13227
- var loop = lineLoop && targetLoop;
13523
+ var targetLoop = !!target.pathSegment(ctx, tgt, {
13524
+ move: lineLoop,
13525
+ reverse: true
13526
+ });
13527
+ var loop = lineLoop && targetLoop;
13228
13528
 
13229
- if (!loop) {
13230
- interpolatedLineTo(ctx, target, start, property);
13231
- }
13529
+ if (!loop) {
13530
+ interpolatedLineTo(ctx, target, start, property);
13531
+ }
13232
13532
 
13233
- ctx.closePath();
13234
- ctx.fill(loop ? 'evenodd' : 'nonzero');
13235
- ctx.restore();
13533
+ ctx.closePath();
13534
+ ctx.fill(loop ? 'evenodd' : 'nonzero');
13535
+ ctx.restore();
13536
+ }
13537
+ } catch (err) {
13538
+ _iterator11.e(err);
13539
+ } finally {
13540
+ _iterator11.f();
13236
13541
  }
13237
13542
  }
13238
13543
 
@@ -13274,11 +13579,38 @@
13274
13579
  ctx.restore();
13275
13580
  }
13276
13581
 
13582
+ function drawfill(ctx, source, area) {
13583
+ var target = getTarget(source);
13584
+ var line = source.line,
13585
+ scale = source.scale;
13586
+ var lineOpts = line.options;
13587
+ var fillOption = lineOpts.fill;
13588
+ var color = lineOpts.backgroundColor;
13589
+
13590
+ var _ref6 = fillOption || {},
13591
+ _ref6$above = _ref6.above,
13592
+ above = _ref6$above === void 0 ? color : _ref6$above,
13593
+ _ref6$below = _ref6.below,
13594
+ below = _ref6$below === void 0 ? color : _ref6$below;
13595
+
13596
+ if (target && line.points.length) {
13597
+ clipArea(ctx, area);
13598
+ doFill(ctx, {
13599
+ line: line,
13600
+ target: target,
13601
+ above: above,
13602
+ below: below,
13603
+ area: area,
13604
+ scale: scale
13605
+ });
13606
+ unclipArea(ctx);
13607
+ }
13608
+ }
13609
+
13277
13610
  var plugin_filler = {
13278
13611
  id: 'filler',
13279
13612
  afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {
13280
13613
  var count = (chart.data.datasets || []).length;
13281
- var propagate = options.propagate;
13282
13614
  var sources = [];
13283
13615
  var meta, i, line, source;
13284
13616
 
@@ -13309,59 +13641,37 @@
13309
13641
  continue;
13310
13642
  }
13311
13643
 
13312
- source.fill = resolveTarget(sources, i, propagate);
13644
+ source.fill = resolveTarget(sources, i, options.propagate);
13313
13645
  }
13314
13646
  },
13315
- beforeDatasetsDraw: function beforeDatasetsDraw(chart) {
13647
+ beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {
13316
13648
  var metasets = chart.getSortedVisibleDatasetMetas();
13317
13649
  var area = chart.chartArea;
13318
- var i, meta;
13319
13650
 
13320
- for (i = metasets.length - 1; i >= 0; --i) {
13321
- meta = metasets[i].$filler;
13651
+ for (var i = metasets.length - 1; i >= 0; --i) {
13652
+ var source = metasets[i].$filler;
13322
13653
 
13323
- if (meta) {
13324
- meta.line.updateControlPoints(area);
13654
+ if (source) {
13655
+ source.line.updateControlPoints(area);
13656
+
13657
+ if (options.drawTime === 'beforeDatasetsDraw') {
13658
+ drawfill(chart.ctx, source, area);
13659
+ }
13325
13660
  }
13326
13661
  }
13327
13662
  },
13328
- beforeDatasetDraw: function beforeDatasetDraw(chart, args) {
13329
- var area = chart.chartArea;
13330
- var ctx = chart.ctx;
13663
+ beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {
13331
13664
  var source = args.meta.$filler;
13332
13665
 
13333
- if (!source || source.fill === false) {
13666
+ if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {
13334
13667
  return;
13335
13668
  }
13336
13669
 
13337
- var target = getTarget(source);
13338
- var line = source.line,
13339
- scale = source.scale;
13340
- var lineOpts = line.options;
13341
- var fillOption = lineOpts.fill;
13342
- var color = lineOpts.backgroundColor;
13343
-
13344
- var _ref6 = fillOption || {},
13345
- _ref6$above = _ref6.above,
13346
- above = _ref6$above === void 0 ? color : _ref6$above,
13347
- _ref6$below = _ref6.below,
13348
- below = _ref6$below === void 0 ? color : _ref6$below;
13349
-
13350
- if (target && line.points.length) {
13351
- clipArea(ctx, area);
13352
- doFill(ctx, {
13353
- line: line,
13354
- target: target,
13355
- above: above,
13356
- below: below,
13357
- area: area,
13358
- scale: scale
13359
- });
13360
- unclipArea(ctx);
13361
- }
13670
+ drawfill(chart.ctx, source, chart.chartArea);
13362
13671
  },
13363
13672
  defaults: {
13364
- propagate: true
13673
+ propagate: true,
13674
+ drawTime: 'beforeDatasetDraw'
13365
13675
  }
13366
13676
  };
13367
13677
 
@@ -13393,34 +13703,34 @@
13393
13703
  var _super16 = _createSuper(Legend);
13394
13704
 
13395
13705
  function Legend(config) {
13396
- var _this10;
13706
+ var _this11;
13397
13707
 
13398
13708
  _classCallCheck(this, Legend);
13399
13709
 
13400
- _this10 = _super16.call(this);
13401
- _this10._added = false;
13402
- _this10.legendHitBoxes = [];
13403
- _this10._hoveredItem = null;
13404
- _this10.doughnutMode = false;
13405
- _this10.chart = config.chart;
13406
- _this10.options = config.options;
13407
- _this10.ctx = config.ctx;
13408
- _this10.legendItems = undefined;
13409
- _this10.columnSizes = undefined;
13410
- _this10.lineWidths = undefined;
13411
- _this10.maxHeight = undefined;
13412
- _this10.maxWidth = undefined;
13413
- _this10.top = undefined;
13414
- _this10.bottom = undefined;
13415
- _this10.left = undefined;
13416
- _this10.right = undefined;
13417
- _this10.height = undefined;
13418
- _this10.width = undefined;
13419
- _this10._margins = undefined;
13420
- _this10.position = undefined;
13421
- _this10.weight = undefined;
13422
- _this10.fullSize = undefined;
13423
- return _this10;
13710
+ _this11 = _super16.call(this);
13711
+ _this11._added = false;
13712
+ _this11.legendHitBoxes = [];
13713
+ _this11._hoveredItem = null;
13714
+ _this11.doughnutMode = false;
13715
+ _this11.chart = config.chart;
13716
+ _this11.options = config.options;
13717
+ _this11.ctx = config.ctx;
13718
+ _this11.legendItems = undefined;
13719
+ _this11.columnSizes = undefined;
13720
+ _this11.lineWidths = undefined;
13721
+ _this11.maxHeight = undefined;
13722
+ _this11.maxWidth = undefined;
13723
+ _this11.top = undefined;
13724
+ _this11.bottom = undefined;
13725
+ _this11.left = undefined;
13726
+ _this11.right = undefined;
13727
+ _this11.height = undefined;
13728
+ _this11.width = undefined;
13729
+ _this11._margins = undefined;
13730
+ _this11.position = undefined;
13731
+ _this11.weight = undefined;
13732
+ _this11.fullSize = undefined;
13733
+ return _this11;
13424
13734
  }
13425
13735
 
13426
13736
  _createClass(Legend, [{
@@ -13616,12 +13926,12 @@
13616
13926
 
13617
13927
  var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);
13618
13928
 
13619
- var _iterator6 = _createForOfIteratorHelper(hitboxes),
13620
- _step6;
13929
+ var _iterator12 = _createForOfIteratorHelper(hitboxes),
13930
+ _step12;
13621
13931
 
13622
13932
  try {
13623
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
13624
- var hitbox = _step6.value;
13933
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
13934
+ var hitbox = _step12.value;
13625
13935
 
13626
13936
  if (row !== hitbox.row) {
13627
13937
  row = hitbox.row;
@@ -13633,21 +13943,21 @@
13633
13943
  left += hitbox.width + padding;
13634
13944
  }
13635
13945
  } catch (err) {
13636
- _iterator6.e(err);
13946
+ _iterator12.e(err);
13637
13947
  } finally {
13638
- _iterator6.f();
13948
+ _iterator12.f();
13639
13949
  }
13640
13950
  } else {
13641
13951
  var col = 0;
13642
13952
 
13643
13953
  var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);
13644
13954
 
13645
- var _iterator7 = _createForOfIteratorHelper(hitboxes),
13646
- _step7;
13955
+ var _iterator13 = _createForOfIteratorHelper(hitboxes),
13956
+ _step13;
13647
13957
 
13648
13958
  try {
13649
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
13650
- var _hitbox = _step7.value;
13959
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
13960
+ var _hitbox = _step13.value;
13651
13961
 
13652
13962
  if (_hitbox.col !== col) {
13653
13963
  col = _hitbox.col;
@@ -13659,9 +13969,9 @@
13659
13969
  top += _hitbox.height + padding;
13660
13970
  }
13661
13971
  } catch (err) {
13662
- _iterator7.e(err);
13972
+ _iterator13.e(err);
13663
13973
  } finally {
13664
- _iterator7.f();
13974
+ _iterator13.f();
13665
13975
  }
13666
13976
  }
13667
13977
  }
@@ -13706,8 +14016,6 @@
13706
14016
  ctx.textAlign = rtlHelper.textAlign('left');
13707
14017
  ctx.textBaseline = 'middle';
13708
14018
  ctx.lineWidth = 0.5;
13709
- ctx.strokeStyle = fontColor;
13710
- ctx.fillStyle = fontColor;
13711
14019
  ctx.font = labelFont.string;
13712
14020
 
13713
14021
  var _getBoxSize2 = getBoxSize(labelOpts, fontSize),
@@ -13742,10 +14050,28 @@
13742
14050
  drawPoint(ctx, drawOptions, centerX, centerY);
13743
14051
  } else {
13744
14052
  var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
13745
- ctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), yBoxTop, boxWidth, boxHeight);
14053
+ var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
14054
+ var borderRadius = toTRBLCorners(legendItem.borderRadius);
14055
+ ctx.beginPath();
14056
+
14057
+ if (Object.values(borderRadius).some(function (v) {
14058
+ return v !== 0;
14059
+ })) {
14060
+ addRoundedRectPath(ctx, {
14061
+ x: xBoxLeft,
14062
+ y: yBoxTop,
14063
+ w: boxWidth,
14064
+ h: boxHeight,
14065
+ radius: borderRadius
14066
+ });
14067
+ } else {
14068
+ ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
14069
+ }
14070
+
14071
+ ctx.fill();
13746
14072
 
13747
14073
  if (lineWidth !== 0) {
13748
- ctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), yBoxTop, boxWidth, boxHeight);
14074
+ ctx.stroke();
13749
14075
  }
13750
14076
  }
13751
14077
 
@@ -13780,6 +14106,8 @@
13780
14106
  overrideTextDirection(me.ctx, opts.textDirection);
13781
14107
  var lineHeight = itemHeight + padding;
13782
14108
  me.legendItems.forEach(function (legendItem, i) {
14109
+ ctx.strokeStyle = legendItem.fontColor || fontColor;
14110
+ ctx.fillStyle = legendItem.fontColor || fontColor;
13783
14111
  var textWidth = ctx.measureText(legendItem.text).width;
13784
14112
  var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
13785
14113
  var width = boxWidth + fontSize / 2 + textWidth;
@@ -13991,13 +14319,15 @@
13991
14319
  var _chart$legend$options = chart.legend.options.labels,
13992
14320
  usePointStyle = _chart$legend$options.usePointStyle,
13993
14321
  pointStyle = _chart$legend$options.pointStyle,
13994
- textAlign = _chart$legend$options.textAlign;
14322
+ textAlign = _chart$legend$options.textAlign,
14323
+ color = _chart$legend$options.color;
13995
14324
  return chart._getSortedDatasetMetas().map(function (meta) {
13996
14325
  var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
13997
14326
  var borderWidth = toPadding(style.borderWidth);
13998
14327
  return {
13999
14328
  text: datasets[meta.index].label,
14000
14329
  fillStyle: style.backgroundColor,
14330
+ fontColor: color,
14001
14331
  hidden: !meta.visible,
14002
14332
  lineCap: style.borderCapStyle,
14003
14333
  lineDash: style.borderDash,
@@ -14008,6 +14338,7 @@
14008
14338
  pointStyle: pointStyle || style.pointStyle,
14009
14339
  rotation: style.rotation,
14010
14340
  textAlign: textAlign || style.textAlign,
14341
+ borderRadius: 0,
14011
14342
  datasetIndex: meta.index
14012
14343
  };
14013
14344
  }, this);
@@ -14040,25 +14371,25 @@
14040
14371
  var _super17 = _createSuper(Title);
14041
14372
 
14042
14373
  function Title(config) {
14043
- var _this11;
14374
+ var _this12;
14044
14375
 
14045
14376
  _classCallCheck(this, Title);
14046
14377
 
14047
- _this11 = _super17.call(this);
14048
- _this11.chart = config.chart;
14049
- _this11.options = config.options;
14050
- _this11.ctx = config.ctx;
14051
- _this11._padding = undefined;
14052
- _this11.top = undefined;
14053
- _this11.bottom = undefined;
14054
- _this11.left = undefined;
14055
- _this11.right = undefined;
14056
- _this11.width = undefined;
14057
- _this11.height = undefined;
14058
- _this11.position = undefined;
14059
- _this11.weight = undefined;
14060
- _this11.fullSize = undefined;
14061
- return _this11;
14378
+ _this12 = _super17.call(this);
14379
+ _this12.chart = config.chart;
14380
+ _this12.options = config.options;
14381
+ _this12.ctx = config.ctx;
14382
+ _this12._padding = undefined;
14383
+ _this12.top = undefined;
14384
+ _this12.bottom = undefined;
14385
+ _this12.left = undefined;
14386
+ _this12.right = undefined;
14387
+ _this12.width = undefined;
14388
+ _this12.height = undefined;
14389
+ _this12.position = undefined;
14390
+ _this12.weight = undefined;
14391
+ _this12.fullSize = undefined;
14392
+ return _this12;
14062
14393
  }
14063
14394
 
14064
14395
  _createClass(Title, [{
@@ -14196,7 +14527,7 @@
14196
14527
  align: 'center',
14197
14528
  display: false,
14198
14529
  font: {
14199
- style: 'bold'
14530
+ weight: 'bold'
14200
14531
  },
14201
14532
  fullSize: true,
14202
14533
  padding: 10,
@@ -14521,39 +14852,39 @@
14521
14852
  var _super18 = _createSuper(Tooltip);
14522
14853
 
14523
14854
  function Tooltip(config) {
14524
- var _this12;
14855
+ var _this13;
14525
14856
 
14526
14857
  _classCallCheck(this, Tooltip);
14527
14858
 
14528
- _this12 = _super18.call(this);
14529
- _this12.opacity = 0;
14530
- _this12._active = [];
14531
- _this12._chart = config._chart;
14532
- _this12._eventPosition = undefined;
14533
- _this12._size = undefined;
14534
- _this12._cachedAnimations = undefined;
14535
- _this12._tooltipItems = [];
14536
- _this12.$animations = undefined;
14537
- _this12.$context = undefined;
14538
- _this12.options = config.options;
14539
- _this12.dataPoints = undefined;
14540
- _this12.title = undefined;
14541
- _this12.beforeBody = undefined;
14542
- _this12.body = undefined;
14543
- _this12.afterBody = undefined;
14544
- _this12.footer = undefined;
14545
- _this12.xAlign = undefined;
14546
- _this12.yAlign = undefined;
14547
- _this12.x = undefined;
14548
- _this12.y = undefined;
14549
- _this12.height = undefined;
14550
- _this12.width = undefined;
14551
- _this12.caretX = undefined;
14552
- _this12.caretY = undefined;
14553
- _this12.labelColors = undefined;
14554
- _this12.labelPointStyles = undefined;
14555
- _this12.labelTextColors = undefined;
14556
- return _this12;
14859
+ _this13 = _super18.call(this);
14860
+ _this13.opacity = 0;
14861
+ _this13._active = [];
14862
+ _this13._chart = config._chart;
14863
+ _this13._eventPosition = undefined;
14864
+ _this13._size = undefined;
14865
+ _this13._cachedAnimations = undefined;
14866
+ _this13._tooltipItems = [];
14867
+ _this13.$animations = undefined;
14868
+ _this13.$context = undefined;
14869
+ _this13.options = config.options;
14870
+ _this13.dataPoints = undefined;
14871
+ _this13.title = undefined;
14872
+ _this13.beforeBody = undefined;
14873
+ _this13.body = undefined;
14874
+ _this13.afterBody = undefined;
14875
+ _this13.footer = undefined;
14876
+ _this13.xAlign = undefined;
14877
+ _this13.yAlign = undefined;
14878
+ _this13.x = undefined;
14879
+ _this13.y = undefined;
14880
+ _this13.height = undefined;
14881
+ _this13.width = undefined;
14882
+ _this13.caretX = undefined;
14883
+ _this13.caretY = undefined;
14884
+ _this13.labelColors = undefined;
14885
+ _this13.labelPointStyles = undefined;
14886
+ _this13.labelTextColors = undefined;
14887
+ return _this13;
14557
14888
  }
14558
14889
 
14559
14890
  _createClass(Tooltip, [{
@@ -14871,13 +15202,45 @@
14871
15202
  ctx.fillStyle = labelColors.backgroundColor;
14872
15203
  drawPoint(ctx, drawOptions, centerX, centerY);
14873
15204
  } else {
14874
- ctx.fillStyle = options.multiKeyBackground;
14875
- ctx.fillRect(rtlHelper.leftForLtr(rtlColorX, boxWidth), colorY, boxWidth, boxHeight);
14876
- ctx.lineWidth = 1;
15205
+ ctx.lineWidth = labelColors.borderWidth || 1;
14877
15206
  ctx.strokeStyle = labelColors.borderColor;
14878
- ctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, boxWidth), colorY, boxWidth, boxHeight);
14879
- ctx.fillStyle = labelColors.backgroundColor;
14880
- ctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2), colorY + 1, boxWidth - 2, boxHeight - 2);
15207
+ ctx.setLineDash(labelColors.borderDash || []);
15208
+ ctx.lineDashOffset = labelColors.borderDashOffset || 0;
15209
+ var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
15210
+ var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
15211
+ var borderRadius = toTRBLCorners(labelColors.borderRadius);
15212
+
15213
+ if (Object.values(borderRadius).some(function (v) {
15214
+ return v !== 0;
15215
+ })) {
15216
+ ctx.beginPath();
15217
+ ctx.fillStyle = options.multiKeyBackground;
15218
+ addRoundedRectPath(ctx, {
15219
+ x: outerX,
15220
+ y: colorY,
15221
+ w: boxWidth,
15222
+ h: boxHeight,
15223
+ radius: borderRadius
15224
+ });
15225
+ ctx.fill();
15226
+ ctx.stroke();
15227
+ ctx.fillStyle = labelColors.backgroundColor;
15228
+ ctx.beginPath();
15229
+ addRoundedRectPath(ctx, {
15230
+ x: innerX,
15231
+ y: colorY + 1,
15232
+ w: boxWidth - 2,
15233
+ h: boxHeight - 2,
15234
+ radius: borderRadius
15235
+ });
15236
+ ctx.fill();
15237
+ } else {
15238
+ ctx.fillStyle = options.multiKeyBackground;
15239
+ ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
15240
+ ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
15241
+ ctx.fillStyle = labelColors.backgroundColor;
15242
+ ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
15243
+ }
14881
15244
  }
14882
15245
 
14883
15246
  ctx.fillStyle = me.labelTextColors[i];
@@ -15221,7 +15584,7 @@
15221
15584
  backgroundColor: 'rgba(0,0,0,0.8)',
15222
15585
  titleColor: '#fff',
15223
15586
  titleFont: {
15224
- style: 'bold'
15587
+ weight: 'bold'
15225
15588
  },
15226
15589
  titleSpacing: 2,
15227
15590
  titleMarginBottom: 6,
@@ -15234,7 +15597,7 @@
15234
15597
  footerSpacing: 2,
15235
15598
  footerMarginTop: 6,
15236
15599
  footerFont: {
15237
- style: 'bold'
15600
+ weight: 'bold'
15238
15601
  },
15239
15602
  footerAlign: 'left',
15240
15603
  padding: 6,
@@ -15311,7 +15674,11 @@
15311
15674
  var options = meta.controller.getStyle(tooltipItem.dataIndex);
15312
15675
  return {
15313
15676
  borderColor: options.borderColor,
15314
- backgroundColor: options.backgroundColor
15677
+ backgroundColor: options.backgroundColor,
15678
+ borderWidth: options.borderWidth,
15679
+ borderDash: options.borderDash,
15680
+ borderDashOffset: options.borderDashOffset,
15681
+ borderRadius: 0
15315
15682
  };
15316
15683
  },
15317
15684
  labelTextColor: function labelTextColor() {
@@ -15389,14 +15756,14 @@
15389
15756
  var _super19 = _createSuper(CategoryScale);
15390
15757
 
15391
15758
  function CategoryScale(cfg) {
15392
- var _this13;
15759
+ var _this14;
15393
15760
 
15394
15761
  _classCallCheck(this, CategoryScale);
15395
15762
 
15396
- _this13 = _super19.call(this, cfg);
15397
- _this13._startValue = undefined;
15398
- _this13._valueRange = 0;
15399
- return _this13;
15763
+ _this14 = _super19.call(this, cfg);
15764
+ _this14._startValue = undefined;
15765
+ _this14._valueRange = 0;
15766
+ return _this14;
15400
15767
  }
15401
15768
 
15402
15769
  _createClass(CategoryScale, [{
@@ -15635,17 +16002,17 @@
15635
16002
  var _super20 = _createSuper(LinearScaleBase);
15636
16003
 
15637
16004
  function LinearScaleBase(cfg) {
15638
- var _this14;
16005
+ var _this15;
15639
16006
 
15640
16007
  _classCallCheck(this, LinearScaleBase);
15641
16008
 
15642
- _this14 = _super20.call(this, cfg);
15643
- _this14.start = undefined;
15644
- _this14.end = undefined;
15645
- _this14._startValue = undefined;
15646
- _this14._endValue = undefined;
15647
- _this14._valueRange = 0;
15648
- return _this14;
16009
+ _this15 = _super20.call(this, cfg);
16010
+ _this15.start = undefined;
16011
+ _this15.end = undefined;
16012
+ _this15._startValue = undefined;
16013
+ _this15._endValue = undefined;
16014
+ _this15._valueRange = 0;
16015
+ return _this15;
15649
16016
  }
15650
16017
 
15651
16018
  _createClass(LinearScaleBase, [{
@@ -15899,16 +16266,16 @@
15899
16266
  var _super22 = _createSuper(LogarithmicScale);
15900
16267
 
15901
16268
  function LogarithmicScale(cfg) {
15902
- var _this15;
16269
+ var _this16;
15903
16270
 
15904
16271
  _classCallCheck(this, LogarithmicScale);
15905
16272
 
15906
- _this15 = _super22.call(this, cfg);
15907
- _this15.start = undefined;
15908
- _this15.end = undefined;
15909
- _this15._startValue = undefined;
15910
- _this15._valueRange = 0;
15911
- return _this15;
16273
+ _this16 = _super22.call(this, cfg);
16274
+ _this16.start = undefined;
16275
+ _this16.end = undefined;
16276
+ _this16._startValue = undefined;
16277
+ _this16._valueRange = 0;
16278
+ return _this16;
15912
16279
  }
15913
16280
 
15914
16281
  _createClass(LogarithmicScale, [{
@@ -16297,17 +16664,17 @@
16297
16664
  var _super23 = _createSuper(RadialLinearScale);
16298
16665
 
16299
16666
  function RadialLinearScale(cfg) {
16300
- var _this16;
16667
+ var _this17;
16301
16668
 
16302
16669
  _classCallCheck(this, RadialLinearScale);
16303
16670
 
16304
- _this16 = _super23.call(this, cfg);
16305
- _this16.xCenter = undefined;
16306
- _this16.yCenter = undefined;
16307
- _this16.drawingArea = undefined;
16308
- _this16._pointLabels = [];
16309
- _this16._pointLabelItems = [];
16310
- return _this16;
16671
+ _this17 = _super23.call(this, cfg);
16672
+ _this17.xCenter = undefined;
16673
+ _this17.yCenter = undefined;
16674
+ _this17.drawingArea = undefined;
16675
+ _this17._pointLabels = [];
16676
+ _this17._pointLabelItems = [];
16677
+ return _this17;
16311
16678
  }
16312
16679
 
16313
16680
  _createClass(RadialLinearScale, [{
@@ -16794,21 +17161,21 @@
16794
17161
  var _super24 = _createSuper(TimeScale);
16795
17162
 
16796
17163
  function TimeScale(props) {
16797
- var _this17;
17164
+ var _this18;
16798
17165
 
16799
17166
  _classCallCheck(this, TimeScale);
16800
17167
 
16801
- _this17 = _super24.call(this, props);
16802
- _this17._cache = {
17168
+ _this18 = _super24.call(this, props);
17169
+ _this18._cache = {
16803
17170
  data: [],
16804
17171
  labels: [],
16805
17172
  all: []
16806
17173
  };
16807
- _this17._unit = 'day';
16808
- _this17._majorUnit = undefined;
16809
- _this17._offsets = {};
16810
- _this17._normalized = false;
16811
- return _this17;
17174
+ _this18._unit = 'day';
17175
+ _this18._majorUnit = undefined;
17176
+ _this18._offsets = {};
17177
+ _this18._normalized = false;
17178
+ return _this18;
16812
17179
  }
16813
17180
 
16814
17181
  _createClass(TimeScale, [{
@@ -17032,7 +17399,7 @@
17032
17399
  var label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));
17033
17400
 
17034
17401
  var formatter = options.ticks.callback;
17035
- return formatter ? formatter(label, index, ticks) : label;
17402
+ return formatter ? callback(formatter, [label, index, ticks], me) : label;
17036
17403
  }
17037
17404
  }, {
17038
17405
  key: "generateTickLabels",
@@ -17197,14 +17564,14 @@
17197
17564
  var _super25 = _createSuper(TimeSeriesScale);
17198
17565
 
17199
17566
  function TimeSeriesScale(props) {
17200
- var _this18;
17567
+ var _this19;
17201
17568
 
17202
17569
  _classCallCheck(this, TimeSeriesScale);
17203
17570
 
17204
- _this18 = _super25.call(this, props);
17205
- _this18._table = [];
17206
- _this18._maxIndex = undefined;
17207
- return _this18;
17571
+ _this19 = _super25.call(this, props);
17572
+ _this19._table = [];
17573
+ _this19._maxIndex = undefined;
17574
+ return _this19;
17208
17575
  }
17209
17576
 
17210
17577
  _createClass(TimeSeriesScale, [{