chartkick 5.0.1 → 5.0.2
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +19 -67
- data/lib/chartkick/version.rb +1 -1
- data/vendor/assets/javascripts/Chart.bundle.js +480 -202
- metadata +3 -3
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Chart.js v4.
|
2
|
+
* Chart.js v4.3.0
|
3
3
|
* https://www.chartjs.org
|
4
4
|
* (c) 2023 Chart.js Contributors
|
5
5
|
* Released under the MIT License
|
@@ -1589,12 +1589,8 @@
|
|
1589
1589
|
* @param items
|
1590
1590
|
*/
|
1591
1591
|
function _arrayUnique(items) {
|
1592
|
-
var set = new Set();
|
1593
|
-
|
1594
|
-
for (i = 0, ilen = items.length; i < ilen; ++i) {
|
1595
|
-
set.add(items[i]);
|
1596
|
-
}
|
1597
|
-
if (set.size === ilen) {
|
1592
|
+
var set = new Set(items);
|
1593
|
+
if (set.size === items.length) {
|
1598
1594
|
return items;
|
1599
1595
|
}
|
1600
1596
|
return Array.from(set);
|
@@ -1994,7 +1990,7 @@
|
|
1994
1990
|
delta = calculateDelta(tickValue, ticks);
|
1995
1991
|
}
|
1996
1992
|
var logDelta = log10(Math.abs(delta));
|
1997
|
-
var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
|
1993
|
+
var numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
|
1998
1994
|
var options = {
|
1999
1995
|
notation: notation,
|
2000
1996
|
minimumFractionDigits: numDecimal,
|
@@ -2245,12 +2241,22 @@
|
|
2245
2241
|
_indexable: false
|
2246
2242
|
}
|
2247
2243
|
}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);
|
2244
|
+
|
2245
|
+
/**
|
2246
|
+
* Converts the given font object into a CSS font string.
|
2247
|
+
* @param font - A font object.
|
2248
|
+
* @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
|
2249
|
+
* @private
|
2250
|
+
*/
|
2248
2251
|
function toFontString(font) {
|
2249
2252
|
if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
|
2250
2253
|
return null;
|
2251
2254
|
}
|
2252
2255
|
return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;
|
2253
2256
|
}
|
2257
|
+
/**
|
2258
|
+
* @private
|
2259
|
+
*/
|
2254
2260
|
function _measureText(ctx, data, gc, longest, string) {
|
2255
2261
|
var textWidth = data[string];
|
2256
2262
|
if (!textWidth) {
|
@@ -2262,6 +2268,9 @@
|
|
2262
2268
|
}
|
2263
2269
|
return longest;
|
2264
2270
|
}
|
2271
|
+
/**
|
2272
|
+
* @private
|
2273
|
+
*/ // eslint-disable-next-line complexity
|
2265
2274
|
function _longestText(ctx, font, arrayOfThings, cache) {
|
2266
2275
|
cache = cache || {};
|
2267
2276
|
var data = cache.data = cache.data || {};
|
@@ -2278,11 +2287,15 @@
|
|
2278
2287
|
var i, j, jlen, thing, nestedThing;
|
2279
2288
|
for (i = 0; i < ilen; i++) {
|
2280
2289
|
thing = arrayOfThings[i];
|
2281
|
-
|
2290
|
+
// Undefined strings and arrays should not be measured
|
2291
|
+
if (thing !== undefined && thing !== null && !isArray(thing)) {
|
2282
2292
|
longest = _measureText(ctx, data, gc, longest, thing);
|
2283
2293
|
} else if (isArray(thing)) {
|
2294
|
+
// if it is an array lets measure each element
|
2295
|
+
// to do maybe simplify this function a bit so we can do this more recursively?
|
2284
2296
|
for (j = 0, jlen = thing.length; j < jlen; j++) {
|
2285
2297
|
nestedThing = thing[j];
|
2298
|
+
// Undefined strings and arrays should not be measured
|
2286
2299
|
if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {
|
2287
2300
|
longest = _measureText(ctx, data, gc, longest, nestedThing);
|
2288
2301
|
}
|
@@ -2299,21 +2312,36 @@
|
|
2299
2312
|
}
|
2300
2313
|
return longest;
|
2301
2314
|
}
|
2315
|
+
/**
|
2316
|
+
* Returns the aligned pixel value to avoid anti-aliasing blur
|
2317
|
+
* @param chart - The chart instance.
|
2318
|
+
* @param pixel - A pixel value.
|
2319
|
+
* @param width - The width of the element.
|
2320
|
+
* @returns The aligned pixel value.
|
2321
|
+
* @private
|
2322
|
+
*/
|
2302
2323
|
function _alignPixel(chart, pixel, width) {
|
2303
2324
|
var devicePixelRatio = chart.currentDevicePixelRatio;
|
2304
2325
|
var halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
|
2305
2326
|
return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
|
2306
2327
|
}
|
2328
|
+
/**
|
2329
|
+
* Clears the entire canvas.
|
2330
|
+
*/
|
2307
2331
|
function clearCanvas(canvas, ctx) {
|
2308
2332
|
ctx = ctx || canvas.getContext('2d');
|
2309
2333
|
ctx.save();
|
2334
|
+
// canvas.width and canvas.height do not consider the canvas transform,
|
2335
|
+
// while clearRect does
|
2310
2336
|
ctx.resetTransform();
|
2311
2337
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
2312
2338
|
ctx.restore();
|
2313
2339
|
}
|
2314
2340
|
function drawPoint(ctx, options, x, y) {
|
2341
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
2315
2342
|
drawPointLegend(ctx, options, x, y, null);
|
2316
2343
|
}
|
2344
|
+
// eslint-disable-next-line complexity
|
2317
2345
|
function drawPointLegend(ctx, options, x, y, w) {
|
2318
2346
|
var type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
|
2319
2347
|
var style = options.pointStyle;
|
@@ -2336,6 +2364,7 @@
|
|
2336
2364
|
}
|
2337
2365
|
ctx.beginPath();
|
2338
2366
|
switch (style) {
|
2367
|
+
// Default includes circle
|
2339
2368
|
default:
|
2340
2369
|
if (w) {
|
2341
2370
|
ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
|
@@ -2354,6 +2383,13 @@
|
|
2354
2383
|
ctx.closePath();
|
2355
2384
|
break;
|
2356
2385
|
case 'rectRounded':
|
2386
|
+
// NOTE: the rounded rect implementation changed to use `arc` instead of
|
2387
|
+
// `quadraticCurveTo` since it generates better results when rect is
|
2388
|
+
// almost a circle. 0.516 (instead of 0.5) produces results with visually
|
2389
|
+
// closer proportion to the previous impl and it is inscribed in the
|
2390
|
+
// circle with `radius`. For more details, see the following PRs:
|
2391
|
+
// https://github.com/chartjs/Chart.js/issues/5597
|
2392
|
+
// https://github.com/chartjs/Chart.js/issues/5858
|
2357
2393
|
cornerRadius = radius * 0.516;
|
2358
2394
|
size = radius - cornerRadius;
|
2359
2395
|
xOffset = Math.cos(rad + QUARTER_PI) * size;
|
@@ -2374,6 +2410,7 @@
|
|
2374
2410
|
break;
|
2375
2411
|
}
|
2376
2412
|
rad += QUARTER_PI;
|
2413
|
+
/* falls through */
|
2377
2414
|
case 'rectRot':
|
2378
2415
|
xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
|
2379
2416
|
xOffset = Math.cos(rad) * radius;
|
@@ -2387,6 +2424,7 @@
|
|
2387
2424
|
break;
|
2388
2425
|
case 'crossRot':
|
2389
2426
|
rad += QUARTER_PI;
|
2427
|
+
/* falls through */
|
2390
2428
|
case 'cross':
|
2391
2429
|
xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
|
2392
2430
|
xOffset = Math.cos(rad) * radius;
|
@@ -2435,8 +2473,15 @@
|
|
2435
2473
|
ctx.stroke();
|
2436
2474
|
}
|
2437
2475
|
}
|
2476
|
+
/**
|
2477
|
+
* Returns true if the point is inside the rectangle
|
2478
|
+
* @param point - The point to test
|
2479
|
+
* @param area - The rectangle
|
2480
|
+
* @param margin - allowed margin
|
2481
|
+
* @private
|
2482
|
+
*/
|
2438
2483
|
function _isPointInArea(point, area, margin) {
|
2439
|
-
margin = margin || 0.5;
|
2484
|
+
margin = margin || 0.5; // margin - default is to match rounded decimals
|
2440
2485
|
return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
|
2441
2486
|
}
|
2442
2487
|
function clipArea(ctx, area) {
|
@@ -2448,6 +2493,9 @@
|
|
2448
2493
|
function unclipArea(ctx) {
|
2449
2494
|
ctx.restore();
|
2450
2495
|
}
|
2496
|
+
/**
|
2497
|
+
* @private
|
2498
|
+
*/
|
2451
2499
|
function _steppedLineTo(ctx, previous, target, flip, mode) {
|
2452
2500
|
if (!previous) {
|
2453
2501
|
return ctx.lineTo(target.x, target.y);
|
@@ -2463,40 +2511,15 @@
|
|
2463
2511
|
}
|
2464
2512
|
ctx.lineTo(target.x, target.y);
|
2465
2513
|
}
|
2514
|
+
/**
|
2515
|
+
* @private
|
2516
|
+
*/
|
2466
2517
|
function _bezierCurveTo(ctx, previous, target, flip) {
|
2467
2518
|
if (!previous) {
|
2468
2519
|
return ctx.lineTo(target.x, target.y);
|
2469
2520
|
}
|
2470
2521
|
ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);
|
2471
2522
|
}
|
2472
|
-
function renderText(ctx, text, x, y, font) {
|
2473
|
-
var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
2474
|
-
var lines = isArray(text) ? text : [text];
|
2475
|
-
var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
|
2476
|
-
var i, line;
|
2477
|
-
ctx.save();
|
2478
|
-
ctx.font = font.string;
|
2479
|
-
setRenderOpts(ctx, opts);
|
2480
|
-
for (i = 0; i < lines.length; ++i) {
|
2481
|
-
line = lines[i];
|
2482
|
-
if (opts.backdrop) {
|
2483
|
-
drawBackdrop(ctx, opts.backdrop);
|
2484
|
-
}
|
2485
|
-
if (stroke) {
|
2486
|
-
if (opts.strokeColor) {
|
2487
|
-
ctx.strokeStyle = opts.strokeColor;
|
2488
|
-
}
|
2489
|
-
if (!isNullOrUndef(opts.strokeWidth)) {
|
2490
|
-
ctx.lineWidth = opts.strokeWidth;
|
2491
|
-
}
|
2492
|
-
ctx.strokeText(line, x, y, opts.maxWidth);
|
2493
|
-
}
|
2494
|
-
ctx.fillText(line, x, y, opts.maxWidth);
|
2495
|
-
decorateText(ctx, x, y, line, opts);
|
2496
|
-
y += font.lineHeight;
|
2497
|
-
}
|
2498
|
-
ctx.restore();
|
2499
|
-
}
|
2500
2523
|
function setRenderOpts(ctx, opts) {
|
2501
2524
|
if (opts.translation) {
|
2502
2525
|
ctx.translate(opts.translation[0], opts.translation[1]);
|
@@ -2516,6 +2539,13 @@
|
|
2516
2539
|
}
|
2517
2540
|
function decorateText(ctx, x, y, line, opts) {
|
2518
2541
|
if (opts.strikethrough || opts.underline) {
|
2542
|
+
/**
|
2543
|
+
* Now that IE11 support has been dropped, we can use more
|
2544
|
+
* of the TextMetrics object. The actual bounding boxes
|
2545
|
+
* are unflagged in Chrome, Firefox, Edge, and Safari so they
|
2546
|
+
* can be safely used.
|
2547
|
+
* See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility
|
2548
|
+
*/
|
2519
2549
|
var metrics = ctx.measureText(line);
|
2520
2550
|
var left = x - metrics.actualBoundingBoxLeft;
|
2521
2551
|
var right = x + metrics.actualBoundingBoxRight;
|
@@ -2536,19 +2566,63 @@
|
|
2536
2566
|
ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
|
2537
2567
|
ctx.fillStyle = oldColor;
|
2538
2568
|
}
|
2569
|
+
/**
|
2570
|
+
* Render text onto the canvas
|
2571
|
+
*/
|
2572
|
+
function renderText(ctx, text, x, y, font) {
|
2573
|
+
var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
2574
|
+
var lines = isArray(text) ? text : [text];
|
2575
|
+
var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
|
2576
|
+
var i, line;
|
2577
|
+
ctx.save();
|
2578
|
+
ctx.font = font.string;
|
2579
|
+
setRenderOpts(ctx, opts);
|
2580
|
+
for (i = 0; i < lines.length; ++i) {
|
2581
|
+
line = lines[i];
|
2582
|
+
if (opts.backdrop) {
|
2583
|
+
drawBackdrop(ctx, opts.backdrop);
|
2584
|
+
}
|
2585
|
+
if (stroke) {
|
2586
|
+
if (opts.strokeColor) {
|
2587
|
+
ctx.strokeStyle = opts.strokeColor;
|
2588
|
+
}
|
2589
|
+
if (!isNullOrUndef(opts.strokeWidth)) {
|
2590
|
+
ctx.lineWidth = opts.strokeWidth;
|
2591
|
+
}
|
2592
|
+
ctx.strokeText(line, x, y, opts.maxWidth);
|
2593
|
+
}
|
2594
|
+
ctx.fillText(line, x, y, opts.maxWidth);
|
2595
|
+
decorateText(ctx, x, y, line, opts);
|
2596
|
+
y += Number(font.lineHeight);
|
2597
|
+
}
|
2598
|
+
ctx.restore();
|
2599
|
+
}
|
2600
|
+
/**
|
2601
|
+
* Add a path of a rectangle with rounded corners to the current sub-path
|
2602
|
+
* @param ctx - Context
|
2603
|
+
* @param rect - Bounding rect
|
2604
|
+
*/
|
2539
2605
|
function addRoundedRectPath(ctx, rect) {
|
2540
2606
|
var x = rect.x,
|
2541
2607
|
y = rect.y,
|
2542
2608
|
w = rect.w,
|
2543
2609
|
h = rect.h,
|
2544
2610
|
radius = rect.radius;
|
2611
|
+
// top left arc
|
2545
2612
|
ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
|
2613
|
+
// line from top left to bottom left
|
2546
2614
|
ctx.lineTo(x, y + h - radius.bottomLeft);
|
2615
|
+
// bottom left arc
|
2547
2616
|
ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
|
2617
|
+
// line from bottom left to bottom right
|
2548
2618
|
ctx.lineTo(x + w - radius.bottomRight, y + h);
|
2619
|
+
// bottom right arc
|
2549
2620
|
ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
|
2621
|
+
// line from bottom right to top right
|
2550
2622
|
ctx.lineTo(x + w, y + radius.topRight);
|
2623
|
+
// top right arc
|
2551
2624
|
ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
|
2625
|
+
// line from top right to top left
|
2552
2626
|
ctx.lineTo(x + radius.topLeft, y);
|
2553
2627
|
}
|
2554
2628
|
var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
|
@@ -2733,52 +2807,94 @@
|
|
2733
2807
|
function createContext(parentContext, context) {
|
2734
2808
|
return Object.assign(Object.create(parentContext), context);
|
2735
2809
|
}
|
2810
|
+
|
2811
|
+
/**
|
2812
|
+
* Creates a Proxy for resolving raw values for options.
|
2813
|
+
* @param scopes - The option scopes to look for values, in resolution order
|
2814
|
+
* @param prefixes - The prefixes for values, in resolution order.
|
2815
|
+
* @param rootScopes - The root option scopes
|
2816
|
+
* @param fallback - Parent scopes fallback
|
2817
|
+
* @param getTarget - callback for getting the target for changed values
|
2818
|
+
* @returns Proxy
|
2819
|
+
* @private
|
2820
|
+
*/
|
2736
2821
|
function _createResolver(scopes) {
|
2737
2822
|
var _cache;
|
2738
2823
|
var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];
|
2739
|
-
var rootScopes = arguments.length > 2
|
2824
|
+
var rootScopes = arguments.length > 2 ? arguments[2] : undefined;
|
2740
2825
|
var fallback = arguments.length > 3 ? arguments[3] : undefined;
|
2741
2826
|
var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {
|
2742
2827
|
return scopes[0];
|
2743
2828
|
};
|
2744
|
-
|
2829
|
+
var finalRootScopes = rootScopes || scopes;
|
2830
|
+
if (typeof fallback === 'undefined') {
|
2745
2831
|
fallback = _resolve('_fallback', scopes);
|
2746
2832
|
}
|
2747
|
-
var cache = (_cache = {}, _defineProperty$w(_cache, Symbol.toStringTag, 'Object'), _defineProperty$w(_cache, "_cacheable", true), _defineProperty$w(_cache, "_scopes", scopes), _defineProperty$w(_cache, "_rootScopes",
|
2748
|
-
return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes,
|
2833
|
+
var cache = (_cache = {}, _defineProperty$w(_cache, Symbol.toStringTag, 'Object'), _defineProperty$w(_cache, "_cacheable", true), _defineProperty$w(_cache, "_scopes", scopes), _defineProperty$w(_cache, "_rootScopes", finalRootScopes), _defineProperty$w(_cache, "_fallback", fallback), _defineProperty$w(_cache, "_getTarget", getTarget), _defineProperty$w(_cache, "override", function override(scope) {
|
2834
|
+
return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, finalRootScopes, fallback);
|
2749
2835
|
}), _cache);
|
2750
2836
|
return new Proxy(cache, {
|
2837
|
+
/**
|
2838
|
+
* A trap for the delete operator.
|
2839
|
+
*/
|
2751
2840
|
deleteProperty: function deleteProperty(target, prop) {
|
2752
|
-
delete target[prop];
|
2753
|
-
delete target._keys;
|
2754
|
-
delete scopes[0][prop];
|
2841
|
+
delete target[prop]; // remove from cache
|
2842
|
+
delete target._keys; // remove cached keys
|
2843
|
+
delete scopes[0][prop]; // remove from top level scope
|
2755
2844
|
return true;
|
2756
2845
|
},
|
2846
|
+
/**
|
2847
|
+
* A trap for getting property values.
|
2848
|
+
*/
|
2757
2849
|
get: function get(target, prop) {
|
2758
2850
|
return _cached(target, prop, function () {
|
2759
2851
|
return _resolveWithPrefixes(prop, prefixes, scopes, target);
|
2760
2852
|
});
|
2761
2853
|
},
|
2854
|
+
/**
|
2855
|
+
* A trap for Object.getOwnPropertyDescriptor.
|
2856
|
+
* Also used by Object.hasOwnProperty.
|
2857
|
+
*/
|
2762
2858
|
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {
|
2763
2859
|
return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
|
2764
2860
|
},
|
2861
|
+
/**
|
2862
|
+
* A trap for Object.getPrototypeOf.
|
2863
|
+
*/
|
2765
2864
|
getPrototypeOf: function getPrototypeOf() {
|
2766
2865
|
return Reflect.getPrototypeOf(scopes[0]);
|
2767
2866
|
},
|
2867
|
+
/**
|
2868
|
+
* A trap for the in operator.
|
2869
|
+
*/
|
2768
2870
|
has: function has(target, prop) {
|
2769
2871
|
return getKeysFromAllScopes(target).includes(prop);
|
2770
2872
|
},
|
2873
|
+
/**
|
2874
|
+
* A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
|
2875
|
+
*/
|
2771
2876
|
ownKeys: function ownKeys(target) {
|
2772
2877
|
return getKeysFromAllScopes(target);
|
2773
2878
|
},
|
2879
|
+
/**
|
2880
|
+
* A trap for setting property values.
|
2881
|
+
*/
|
2774
2882
|
set: function set(target, prop, value) {
|
2775
2883
|
var storage = target._storage || (target._storage = getTarget());
|
2776
|
-
target[prop] = storage[prop] = value;
|
2777
|
-
delete target._keys;
|
2884
|
+
target[prop] = storage[prop] = value; // set to top level scope + cache
|
2885
|
+
delete target._keys; // remove cached keys
|
2778
2886
|
return true;
|
2779
2887
|
}
|
2780
2888
|
});
|
2781
2889
|
}
|
2890
|
+
/**
|
2891
|
+
* Returns an Proxy for resolving option values with context.
|
2892
|
+
* @param proxy - The Proxy returned by `_createResolver`
|
2893
|
+
* @param context - Context object for scriptable/indexable options
|
2894
|
+
* @param subProxy - The proxy provided for scriptable options
|
2895
|
+
* @param descriptorDefaults - Defaults for descriptors
|
2896
|
+
* @private
|
2897
|
+
*/
|
2782
2898
|
function _attachContext(proxy, context, subProxy, descriptorDefaults) {
|
2783
2899
|
var cache = {
|
2784
2900
|
_cacheable: false,
|
@@ -2795,38 +2911,63 @@
|
|
2795
2911
|
}
|
2796
2912
|
};
|
2797
2913
|
return new Proxy(cache, {
|
2914
|
+
/**
|
2915
|
+
* A trap for the delete operator.
|
2916
|
+
*/
|
2798
2917
|
deleteProperty: function deleteProperty(target, prop) {
|
2799
|
-
delete target[prop];
|
2800
|
-
delete proxy[prop];
|
2918
|
+
delete target[prop]; // remove from cache
|
2919
|
+
delete proxy[prop]; // remove from proxy
|
2801
2920
|
return true;
|
2802
2921
|
},
|
2922
|
+
/**
|
2923
|
+
* A trap for getting property values.
|
2924
|
+
*/
|
2803
2925
|
get: function get(target, prop, receiver) {
|
2804
2926
|
return _cached(target, prop, function () {
|
2805
2927
|
return _resolveWithContext(target, prop, receiver);
|
2806
2928
|
});
|
2807
2929
|
},
|
2930
|
+
/**
|
2931
|
+
* A trap for Object.getOwnPropertyDescriptor.
|
2932
|
+
* Also used by Object.hasOwnProperty.
|
2933
|
+
*/
|
2808
2934
|
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {
|
2809
2935
|
return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
|
2810
2936
|
enumerable: true,
|
2811
2937
|
configurable: true
|
2812
2938
|
} : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);
|
2813
2939
|
},
|
2940
|
+
/**
|
2941
|
+
* A trap for Object.getPrototypeOf.
|
2942
|
+
*/
|
2814
2943
|
getPrototypeOf: function getPrototypeOf() {
|
2815
2944
|
return Reflect.getPrototypeOf(proxy);
|
2816
2945
|
},
|
2946
|
+
/**
|
2947
|
+
* A trap for the in operator.
|
2948
|
+
*/
|
2817
2949
|
has: function has(target, prop) {
|
2818
2950
|
return Reflect.has(proxy, prop);
|
2819
2951
|
},
|
2952
|
+
/**
|
2953
|
+
* A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
|
2954
|
+
*/
|
2820
2955
|
ownKeys: function ownKeys() {
|
2821
2956
|
return Reflect.ownKeys(proxy);
|
2822
2957
|
},
|
2958
|
+
/**
|
2959
|
+
* A trap for setting property values.
|
2960
|
+
*/
|
2823
2961
|
set: function set(target, prop, value) {
|
2824
|
-
proxy[prop] = value;
|
2825
|
-
delete target[prop];
|
2962
|
+
proxy[prop] = value; // set to proxy
|
2963
|
+
delete target[prop]; // remove from cache
|
2826
2964
|
return true;
|
2827
2965
|
}
|
2828
2966
|
});
|
2829
2967
|
}
|
2968
|
+
/**
|
2969
|
+
* @private
|
2970
|
+
*/
|
2830
2971
|
function _descriptors(proxy) {
|
2831
2972
|
var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
2832
2973
|
scriptable: true,
|
@@ -2861,6 +3002,7 @@
|
|
2861
3002
|
return target[prop];
|
2862
3003
|
}
|
2863
3004
|
var value = resolve();
|
3005
|
+
// cache the resolved value
|
2864
3006
|
target[prop] = value;
|
2865
3007
|
return value;
|
2866
3008
|
}
|
@@ -2869,7 +3011,8 @@
|
|
2869
3011
|
_context = target._context,
|
2870
3012
|
_subProxy = target._subProxy,
|
2871
3013
|
descriptors = target._descriptors;
|
2872
|
-
var value = _proxy[prop];
|
3014
|
+
var value = _proxy[prop]; // resolve from proxy
|
3015
|
+
// resolve with context
|
2873
3016
|
if (isFunction(value) && descriptors.isScriptable(prop)) {
|
2874
3017
|
value = _resolveScriptable(prop, value, target, receiver);
|
2875
3018
|
}
|
@@ -2877,11 +3020,12 @@
|
|
2877
3020
|
value = _resolveArray(prop, value, target, descriptors.isIndexable);
|
2878
3021
|
}
|
2879
3022
|
if (needsSubResolver(prop, value)) {
|
3023
|
+
// if the resolved value is an object, create a sub resolver for it
|
2880
3024
|
value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);
|
2881
3025
|
}
|
2882
3026
|
return value;
|
2883
3027
|
}
|
2884
|
-
function _resolveScriptable(prop,
|
3028
|
+
function _resolveScriptable(prop, getValue, target, receiver) {
|
2885
3029
|
var _proxy = target._proxy,
|
2886
3030
|
_context = target._context,
|
2887
3031
|
_subProxy = target._subProxy,
|
@@ -2890,9 +3034,10 @@
|
|
2890
3034
|
throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);
|
2891
3035
|
}
|
2892
3036
|
_stack.add(prop);
|
2893
|
-
value =
|
3037
|
+
var value = getValue(_context, _subProxy || receiver);
|
2894
3038
|
_stack["delete"](prop);
|
2895
3039
|
if (needsSubResolver(prop, value)) {
|
3040
|
+
// When scriptable option returns an object, create a resolver on that.
|
2896
3041
|
value = createSubResolver(_proxy._scopes, _proxy, prop, value);
|
2897
3042
|
}
|
2898
3043
|
return value;
|
@@ -2902,9 +3047,10 @@
|
|
2902
3047
|
_context = target._context,
|
2903
3048
|
_subProxy = target._subProxy,
|
2904
3049
|
descriptors = target._descriptors;
|
2905
|
-
if (
|
2906
|
-
|
3050
|
+
if (typeof _context.index !== 'undefined' && isIndexable(prop)) {
|
3051
|
+
return value[_context.index % value.length];
|
2907
3052
|
} else if (isObject(value[0])) {
|
3053
|
+
// Array of objects, return array or resolvers
|
2908
3054
|
var arr = value;
|
2909
3055
|
var scopes = _proxy._scopes.filter(function (s) {
|
2910
3056
|
return s !== arr;
|
@@ -2942,10 +3088,14 @@
|
|
2942
3088
|
if (scope) {
|
2943
3089
|
set.add(scope);
|
2944
3090
|
var fallback = resolveFallback(scope._fallback, key, value);
|
2945
|
-
if (
|
3091
|
+
if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {
|
3092
|
+
// When we reach the descriptor that defines a new _fallback, return that.
|
3093
|
+
// The fallback will resume to that new scope.
|
2946
3094
|
return fallback;
|
2947
3095
|
}
|
2948
|
-
} else if (scope === false &&
|
3096
|
+
} else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {
|
3097
|
+
// Fallback to `false` results to `false`, when falling back to different key.
|
3098
|
+
// For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`
|
2949
3099
|
return null;
|
2950
3100
|
}
|
2951
3101
|
}
|
@@ -2966,7 +3116,7 @@
|
|
2966
3116
|
if (key === null) {
|
2967
3117
|
return false;
|
2968
3118
|
}
|
2969
|
-
if (
|
3119
|
+
if (typeof fallback !== 'undefined' && fallback !== prop) {
|
2970
3120
|
key = addScopesFromKey(set, allScopes, fallback, key, value);
|
2971
3121
|
if (key === null) {
|
2972
3122
|
return false;
|
@@ -2989,6 +3139,7 @@
|
|
2989
3139
|
}
|
2990
3140
|
var target = parent[prop];
|
2991
3141
|
if (isArray(target) && isObject(value)) {
|
3142
|
+
// For array of objects, the object is used to store updated values
|
2992
3143
|
return value;
|
2993
3144
|
}
|
2994
3145
|
return target || {};
|
@@ -3001,7 +3152,7 @@
|
|
3001
3152
|
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
3002
3153
|
var prefix = _step7.value;
|
3003
3154
|
value = _resolve(readKey(prefix, prop), scopes);
|
3004
|
-
if (
|
3155
|
+
if (typeof value !== 'undefined') {
|
3005
3156
|
return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
|
3006
3157
|
}
|
3007
3158
|
}
|
@@ -3021,7 +3172,7 @@
|
|
3021
3172
|
continue;
|
3022
3173
|
}
|
3023
3174
|
var value = scope[key];
|
3024
|
-
if (
|
3175
|
+
if (typeof value !== 'undefined') {
|
3025
3176
|
return value;
|
3026
3177
|
}
|
3027
3178
|
}
|
@@ -3912,7 +4063,20 @@
|
|
3912
4063
|
};
|
3913
4064
|
}
|
3914
4065
|
function styleChanged(style, prevStyle) {
|
3915
|
-
|
4066
|
+
if (!prevStyle) {
|
4067
|
+
return false;
|
4068
|
+
}
|
4069
|
+
var cache = [];
|
4070
|
+
var replacer = function replacer(key, value) {
|
4071
|
+
if (!isPatternOrGradient(value)) {
|
4072
|
+
return value;
|
4073
|
+
}
|
4074
|
+
if (!cache.includes(value)) {
|
4075
|
+
cache.push(value);
|
4076
|
+
}
|
4077
|
+
return cache.indexOf(value);
|
4078
|
+
};
|
4079
|
+
return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);
|
3916
4080
|
}
|
3917
4081
|
|
3918
4082
|
var Animator = /*#__PURE__*/function () {
|
@@ -6238,7 +6402,7 @@
|
|
6238
6402
|
return name !== 'spacing';
|
6239
6403
|
},
|
6240
6404
|
_indexable: function _indexable(name) {
|
6241
|
-
return name !== 'spacing';
|
6405
|
+
return name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash');
|
6242
6406
|
}
|
6243
6407
|
});
|
6244
6408
|
_defineProperty$w(DoughnutController, "overrides", {
|
@@ -6875,8 +7039,8 @@
|
|
6875
7039
|
BubbleController: BubbleController,
|
6876
7040
|
DoughnutController: DoughnutController,
|
6877
7041
|
LineController: LineController,
|
6878
|
-
PolarAreaController: PolarAreaController,
|
6879
7042
|
PieController: PieController,
|
7043
|
+
PolarAreaController: PolarAreaController,
|
6880
7044
|
RadarController: RadarController,
|
6881
7045
|
ScatterController: ScatterController
|
6882
7046
|
});
|
@@ -6898,6 +7062,7 @@
|
|
6898
7062
|
var DateAdapterBase = /*#__PURE__*/function () {
|
6899
7063
|
function DateAdapterBase(options) {
|
6900
7064
|
_classCallCheck$x(this, DateAdapterBase);
|
7065
|
+
_defineProperty$w(this, "options", void 0);
|
6901
7066
|
this.options = options || {};
|
6902
7067
|
}
|
6903
7068
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
@@ -7418,18 +7583,18 @@
|
|
7418
7583
|
stack.placed += width;
|
7419
7584
|
y = box.bottom;
|
7420
7585
|
} else {
|
7421
|
-
var
|
7422
|
-
var
|
7586
|
+
var _height = chartArea.h * weight;
|
7587
|
+
var _width = stack.size || box.width;
|
7423
7588
|
if (defined(stack.start)) {
|
7424
7589
|
x = stack.start;
|
7425
7590
|
}
|
7426
7591
|
if (box.fullSize) {
|
7427
|
-
setBoxDims(box, x, userPadding.top,
|
7592
|
+
setBoxDims(box, x, userPadding.top, _width, params.outerHeight - userPadding.bottom - userPadding.top);
|
7428
7593
|
} else {
|
7429
|
-
setBoxDims(box, x, chartArea.top + stack.placed,
|
7594
|
+
setBoxDims(box, x, chartArea.top + stack.placed, _width, _height);
|
7430
7595
|
}
|
7431
7596
|
stack.start = x;
|
7432
|
-
stack.placed +=
|
7597
|
+
stack.placed += _height;
|
7433
7598
|
x = box.right;
|
7434
7599
|
}
|
7435
7600
|
}
|
@@ -7912,7 +8077,11 @@
|
|
7912
8077
|
var Element = /*#__PURE__*/function () {
|
7913
8078
|
function Element() {
|
7914
8079
|
_classCallCheck$x(this, Element);
|
8080
|
+
_defineProperty$w(this, "x", void 0);
|
8081
|
+
_defineProperty$w(this, "y", void 0);
|
7915
8082
|
_defineProperty$w(this, "active", false);
|
8083
|
+
_defineProperty$w(this, "options", void 0);
|
8084
|
+
_defineProperty$w(this, "$animations", void 0);
|
7916
8085
|
}
|
7917
8086
|
_createClass$x(Element, [{
|
7918
8087
|
key: "tooltipPosition",
|
@@ -8064,6 +8233,9 @@
|
|
8064
8233
|
var offsetFromEdge = function offsetFromEdge(scale, edge, offset) {
|
8065
8234
|
return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;
|
8066
8235
|
};
|
8236
|
+
var getTicksLimit = function getTicksLimit(ticksLength, maxTicksLimit) {
|
8237
|
+
return Math.min(maxTicksLimit || ticksLength, ticksLength);
|
8238
|
+
};
|
8067
8239
|
function sample(arr, numItems) {
|
8068
8240
|
var result = [];
|
8069
8241
|
var increment = arr.length / numItems;
|
@@ -8168,9 +8340,9 @@
|
|
8168
8340
|
maxWidth = right - left;
|
8169
8341
|
} else {
|
8170
8342
|
if (isObject(position)) {
|
8171
|
-
var
|
8172
|
-
var
|
8173
|
-
titleX = scales[
|
8343
|
+
var _positionAxisID = Object.keys(position)[0];
|
8344
|
+
var _value = position[_positionAxisID];
|
8345
|
+
titleX = scales[_positionAxisID].getPixelForValue(_value) - width + offset;
|
8174
8346
|
} else if (position === 'center') {
|
8175
8347
|
titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
|
8176
8348
|
} else {
|
@@ -8515,7 +8687,7 @@
|
|
8515
8687
|
value: function calculateLabelRotation() {
|
8516
8688
|
var options = this.options;
|
8517
8689
|
var tickOpts = options.ticks;
|
8518
|
-
var numTicks = this.ticks.length;
|
8690
|
+
var numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);
|
8519
8691
|
var minRotation = tickOpts.minRotation || 0;
|
8520
8692
|
var maxRotation = tickOpts.maxRotation;
|
8521
8693
|
var labelRotation = minRotation;
|
@@ -8703,21 +8875,22 @@
|
|
8703
8875
|
if (sampleSize < ticks.length) {
|
8704
8876
|
ticks = sample(ticks, sampleSize);
|
8705
8877
|
}
|
8706
|
-
this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);
|
8878
|
+
this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
|
8707
8879
|
}
|
8708
8880
|
return labelSizes;
|
8709
8881
|
}
|
8710
8882
|
}, {
|
8711
8883
|
key: "_computeLabelSizes",
|
8712
|
-
value: function _computeLabelSizes(ticks, length) {
|
8884
|
+
value: function _computeLabelSizes(ticks, length, maxTicksLimit) {
|
8713
8885
|
var ctx = this.ctx,
|
8714
8886
|
caches = this._longestTextCache;
|
8715
8887
|
var widths = [];
|
8716
8888
|
var heights = [];
|
8889
|
+
var increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
|
8717
8890
|
var widestLabelSize = 0;
|
8718
8891
|
var highestLabelSize = 0;
|
8719
8892
|
var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
|
8720
|
-
for (i = 0; i < length;
|
8893
|
+
for (i = 0; i < length; i += increment) {
|
8721
8894
|
label = ticks[i].label;
|
8722
8895
|
tickFont = this._resolveTickFontOptions(i);
|
8723
8896
|
ctx.font = fontString = tickFont.string;
|
@@ -8906,9 +9079,9 @@
|
|
8906
9079
|
if (position === 'center') {
|
8907
9080
|
borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
|
8908
9081
|
} else if (isObject(position)) {
|
8909
|
-
var
|
8910
|
-
var
|
8911
|
-
borderValue = alignBorderValue(this.chart.scales[
|
9082
|
+
var _positionAxisID2 = Object.keys(position)[0];
|
9083
|
+
var _value2 = position[_positionAxisID2];
|
9084
|
+
borderValue = alignBorderValue(this.chart.scales[_positionAxisID2].getPixelForValue(_value2));
|
8912
9085
|
}
|
8913
9086
|
tx1 = borderValue - axisHalfWidth;
|
8914
9087
|
tx2 = tx1 - tl;
|
@@ -8993,9 +9166,9 @@
|
|
8993
9166
|
textAlign = ret.textAlign;
|
8994
9167
|
x = ret.x;
|
8995
9168
|
} else if (position === 'right') {
|
8996
|
-
var
|
8997
|
-
textAlign =
|
8998
|
-
x =
|
9169
|
+
var _ret = this._getYAxisLabelAlignment(tl);
|
9170
|
+
textAlign = _ret.textAlign;
|
9171
|
+
x = _ret.x;
|
8999
9172
|
} else if (axis === 'x') {
|
9000
9173
|
if (position === 'center') {
|
9001
9174
|
y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
|
@@ -9009,9 +9182,9 @@
|
|
9009
9182
|
if (position === 'center') {
|
9010
9183
|
x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
|
9011
9184
|
} else if (isObject(position)) {
|
9012
|
-
var
|
9013
|
-
var
|
9014
|
-
x = this.chart.scales[
|
9185
|
+
var _positionAxisID3 = Object.keys(position)[0];
|
9186
|
+
var _value3 = position[_positionAxisID3];
|
9187
|
+
x = this.chart.scales[_positionAxisID3].getPixelForValue(_value3);
|
9015
9188
|
}
|
9016
9189
|
textAlign = this._getYAxisLabelAlignment(tl).textAlign;
|
9017
9190
|
}
|
@@ -9840,8 +10013,8 @@
|
|
9840
10013
|
plugins.push(registry.getPlugin(keys[i]));
|
9841
10014
|
}
|
9842
10015
|
var local = config.plugins || [];
|
9843
|
-
for (var
|
9844
|
-
var plugin = local[
|
10016
|
+
for (var _i2 = 0; _i2 < local.length; _i2++) {
|
10017
|
+
var plugin = local[_i2];
|
9845
10018
|
if (plugins.indexOf(plugin) === -1) {
|
9846
10019
|
plugins.push(plugin);
|
9847
10020
|
localIds[plugin.id] = true;
|
@@ -9922,6 +10095,11 @@
|
|
9922
10095
|
function getDefaultScaleIDFromAxis(axis, indexAxis) {
|
9923
10096
|
return axis === indexAxis ? '_index_' : '_value_';
|
9924
10097
|
}
|
10098
|
+
function idMatchesAxis(id) {
|
10099
|
+
if (id === 'x' || id === 'y' || id === 'r') {
|
10100
|
+
return id;
|
10101
|
+
}
|
10102
|
+
}
|
9925
10103
|
function axisFromPosition(position) {
|
9926
10104
|
if (position === 'top' || position === 'bottom') {
|
9927
10105
|
return 'x';
|
@@ -9930,15 +10108,39 @@
|
|
9930
10108
|
return 'y';
|
9931
10109
|
}
|
9932
10110
|
}
|
9933
|
-
function determineAxis(id
|
9934
|
-
if (id
|
10111
|
+
function determineAxis(id) {
|
10112
|
+
if (idMatchesAxis(id)) {
|
9935
10113
|
return id;
|
9936
10114
|
}
|
9937
|
-
|
9938
|
-
|
9939
|
-
|
10115
|
+
for (var _len11 = arguments.length, scaleOptions = new Array(_len11 > 1 ? _len11 - 1 : 0), _key11 = 1; _key11 < _len11; _key11++) {
|
10116
|
+
scaleOptions[_key11 - 1] = arguments[_key11];
|
10117
|
+
}
|
10118
|
+
for (var _i3 = 0, _scaleOptions = scaleOptions; _i3 < _scaleOptions.length; _i3++) {
|
10119
|
+
var opts = _scaleOptions[_i3];
|
10120
|
+
var axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
|
10121
|
+
if (axis) {
|
10122
|
+
return axis;
|
10123
|
+
}
|
10124
|
+
}
|
10125
|
+
throw new Error("Cannot determine type of '".concat(id, "' axis. Please provide 'axis' or 'position' option."));
|
10126
|
+
}
|
10127
|
+
function getAxisFromDataset(id, axis, dataset) {
|
10128
|
+
if (dataset[axis + 'AxisID'] === id) {
|
10129
|
+
return {
|
10130
|
+
axis: axis
|
10131
|
+
};
|
10132
|
+
}
|
10133
|
+
}
|
10134
|
+
function retrieveAxisFromDatasets(id, config) {
|
10135
|
+
if (config.data && config.data.datasets) {
|
10136
|
+
var boundDs = config.data.datasets.filter(function (d) {
|
10137
|
+
return d.xAxisID === id || d.yAxisID === id;
|
10138
|
+
});
|
10139
|
+
if (boundDs.length) {
|
10140
|
+
return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);
|
10141
|
+
}
|
9940
10142
|
}
|
9941
|
-
|
10143
|
+
return {};
|
9942
10144
|
}
|
9943
10145
|
function mergeScaleConfig(config, options) {
|
9944
10146
|
var chartDefaults = overrides[config.type] || {
|
@@ -9955,7 +10157,7 @@
|
|
9955
10157
|
if (scaleConf._proxy) {
|
9956
10158
|
return console.warn("Ignoring resolver passed as options for scale: ".concat(id));
|
9957
10159
|
}
|
9958
|
-
var axis = determineAxis(id, scaleConf);
|
10160
|
+
var axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);
|
9959
10161
|
var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
|
9960
10162
|
var defaultScaleOptions = chartDefaults.scales || {};
|
9961
10163
|
scales[id] = mergeIf(Object.create(null), [{
|
@@ -10251,7 +10453,7 @@
|
|
10251
10453
|
}
|
10252
10454
|
return false;
|
10253
10455
|
}
|
10254
|
-
var version = "4.
|
10456
|
+
var version = "4.3.0";
|
10255
10457
|
var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
|
10256
10458
|
function positionIsHorizontal(position, axis) {
|
10257
10459
|
return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
|
@@ -10292,8 +10494,8 @@
|
|
10292
10494
|
};
|
10293
10495
|
function moveNumericKeys(obj, start, move) {
|
10294
10496
|
var keys = Object.keys(obj);
|
10295
|
-
for (var
|
10296
|
-
var key = _keys[
|
10497
|
+
for (var _i4 = 0, _keys = keys; _i4 < _keys.length; _i4++) {
|
10498
|
+
var key = _keys[_i4];
|
10297
10499
|
var intKey = +key;
|
10298
10500
|
if (intKey >= start) {
|
10299
10501
|
var value = obj[key];
|
@@ -10325,7 +10527,7 @@
|
|
10325
10527
|
};
|
10326
10528
|
}
|
10327
10529
|
}
|
10328
|
-
var Chart
|
10530
|
+
var Chart = /*#__PURE__*/function () {
|
10329
10531
|
function Chart(item, userConfig) {
|
10330
10532
|
var _this12 = this;
|
10331
10533
|
_classCallCheck$x(this, Chart);
|
@@ -10802,9 +11004,9 @@
|
|
10802
11004
|
for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
|
10803
11005
|
this.getDatasetMeta(i).controller.configure();
|
10804
11006
|
}
|
10805
|
-
for (var
|
10806
|
-
this._updateDataset(
|
10807
|
-
datasetIndex:
|
11007
|
+
for (var _i5 = 0, _ilen = this.data.datasets.length; _i5 < _ilen; ++_i5) {
|
11008
|
+
this._updateDataset(_i5, isFunction(mode) ? mode({
|
11009
|
+
datasetIndex: _i5
|
10808
11010
|
}) : mode);
|
10809
11011
|
}
|
10810
11012
|
this.notifyPlugins('afterDatasetsUpdate', {
|
@@ -11334,14 +11536,14 @@
|
|
11334
11536
|
}]);
|
11335
11537
|
return Chart;
|
11336
11538
|
}();
|
11337
|
-
_defineProperty$w(Chart
|
11338
|
-
_defineProperty$w(Chart
|
11339
|
-
_defineProperty$w(Chart
|
11340
|
-
_defineProperty$w(Chart
|
11341
|
-
_defineProperty$w(Chart
|
11342
|
-
_defineProperty$w(Chart
|
11539
|
+
_defineProperty$w(Chart, "defaults", defaults);
|
11540
|
+
_defineProperty$w(Chart, "instances", instances);
|
11541
|
+
_defineProperty$w(Chart, "overrides", overrides);
|
11542
|
+
_defineProperty$w(Chart, "registry", registry);
|
11543
|
+
_defineProperty$w(Chart, "version", version);
|
11544
|
+
_defineProperty$w(Chart, "getChart", getChart);
|
11343
11545
|
function invalidatePlugins() {
|
11344
|
-
return each(Chart
|
11546
|
+
return each(Chart.instances, function (chart) {
|
11345
11547
|
return chart._plugins.invalidate();
|
11346
11548
|
});
|
11347
11549
|
}
|
@@ -11470,8 +11672,8 @@
|
|
11470
11672
|
ctx.lineTo(p4.x, p4.y);
|
11471
11673
|
// The corner segment from point 4 to point 5
|
11472
11674
|
if (innerEnd > 0) {
|
11473
|
-
var
|
11474
|
-
ctx.arc(
|
11675
|
+
var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
|
11676
|
+
ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
|
11475
11677
|
}
|
11476
11678
|
// The inner arc from point 5 to point b to point 6
|
11477
11679
|
var innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
|
@@ -11479,16 +11681,16 @@
|
|
11479
11681
|
ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
|
11480
11682
|
// The corner segment from point 6 to point 7
|
11481
11683
|
if (innerStart > 0) {
|
11482
|
-
var
|
11483
|
-
ctx.arc(
|
11684
|
+
var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
|
11685
|
+
ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
|
11484
11686
|
}
|
11485
11687
|
// The line from point 7 to point 8
|
11486
11688
|
var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
|
11487
11689
|
ctx.lineTo(p8.x, p8.y);
|
11488
11690
|
// The corner segment from point 8 to point 1
|
11489
11691
|
if (outerStart > 0) {
|
11490
|
-
var
|
11491
|
-
ctx.arc(
|
11692
|
+
var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
|
11693
|
+
ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
|
11492
11694
|
}
|
11493
11695
|
} else {
|
11494
11696
|
ctx.moveTo(x, y);
|
@@ -11525,11 +11727,15 @@
|
|
11525
11727
|
circumference = element.circumference,
|
11526
11728
|
options = element.options;
|
11527
11729
|
var borderWidth = options.borderWidth,
|
11528
|
-
borderJoinStyle = options.borderJoinStyle
|
11730
|
+
borderJoinStyle = options.borderJoinStyle,
|
11731
|
+
borderDash = options.borderDash,
|
11732
|
+
borderDashOffset = options.borderDashOffset;
|
11529
11733
|
var inner = options.borderAlign === 'inner';
|
11530
11734
|
if (!borderWidth) {
|
11531
11735
|
return;
|
11532
11736
|
}
|
11737
|
+
ctx.setLineDash(borderDash || []);
|
11738
|
+
ctx.lineDashOffset = borderDashOffset;
|
11533
11739
|
if (inner) {
|
11534
11740
|
ctx.lineWidth = borderWidth * 2;
|
11535
11741
|
ctx.lineJoin = borderJoinStyle || 'round';
|
@@ -11562,6 +11768,13 @@
|
|
11562
11768
|
var _this23;
|
11563
11769
|
_classCallCheck$x(this, ArcElement);
|
11564
11770
|
_this23 = _super12.call(this);
|
11771
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "circumference", void 0);
|
11772
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "endAngle", void 0);
|
11773
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "fullCircles", void 0);
|
11774
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "innerRadius", void 0);
|
11775
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "outerRadius", void 0);
|
11776
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "pixelMargin", void 0);
|
11777
|
+
_defineProperty$w(_assertThisInitialized$w(_this23), "startAngle", void 0);
|
11565
11778
|
_this23.options = undefined;
|
11566
11779
|
_this23.circumference = undefined;
|
11567
11780
|
_this23.startAngle = undefined;
|
@@ -11591,7 +11804,7 @@
|
|
11591
11804
|
innerRadius = _this$getProps2.innerRadius,
|
11592
11805
|
outerRadius = _this$getProps2.outerRadius,
|
11593
11806
|
circumference = _this$getProps2.circumference;
|
11594
|
-
var rAdjust = this.options.spacing / 2;
|
11807
|
+
var rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
|
11595
11808
|
var _circumference = valueOrDefault(circumference, endAngle - startAngle);
|
11596
11809
|
var betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
|
11597
11810
|
var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
|
@@ -11600,7 +11813,7 @@
|
|
11600
11813
|
}, {
|
11601
11814
|
key: "getCenterPoint",
|
11602
11815
|
value: function getCenterPoint(useFinalPosition) {
|
11603
|
-
var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'
|
11816
|
+
var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition),
|
11604
11817
|
x = _this$getProps3.x,
|
11605
11818
|
y = _this$getProps3.y,
|
11606
11819
|
startAngle = _this$getProps3.startAngle,
|
@@ -11653,6 +11866,8 @@
|
|
11653
11866
|
_defineProperty$w(ArcElement, "defaults", {
|
11654
11867
|
borderAlign: 'center',
|
11655
11868
|
borderColor: '#fff',
|
11869
|
+
borderDash: [],
|
11870
|
+
borderDashOffset: 0,
|
11656
11871
|
borderJoinStyle: undefined,
|
11657
11872
|
borderRadius: 0,
|
11658
11873
|
borderWidth: 2,
|
@@ -11664,6 +11879,12 @@
|
|
11664
11879
|
_defineProperty$w(ArcElement, "defaultRoutes", {
|
11665
11880
|
backgroundColor: 'backgroundColor'
|
11666
11881
|
});
|
11882
|
+
_defineProperty$w(ArcElement, "descriptors", {
|
11883
|
+
_scriptable: true,
|
11884
|
+
_indexable: function _indexable(name) {
|
11885
|
+
return name !== 'borderDash';
|
11886
|
+
}
|
11887
|
+
});
|
11667
11888
|
function setStyle(ctx, options) {
|
11668
11889
|
var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;
|
11669
11890
|
ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);
|
@@ -12028,18 +12249,13 @@
|
|
12028
12249
|
var PointElement = /*#__PURE__*/function (_Element4) {
|
12029
12250
|
_inherits$w(PointElement, _Element4);
|
12030
12251
|
var _super14 = _createSuper$w(PointElement);
|
12031
|
-
/**
|
12032
|
-
* @type {any}
|
12033
|
-
*/
|
12034
|
-
|
12035
|
-
/**
|
12036
|
-
* @type {any}
|
12037
|
-
*/
|
12038
|
-
|
12039
12252
|
function PointElement(cfg) {
|
12040
12253
|
var _this25;
|
12041
12254
|
_classCallCheck$x(this, PointElement);
|
12042
12255
|
_this25 = _super14.call(this);
|
12256
|
+
_defineProperty$w(_assertThisInitialized$w(_this25), "parsed", void 0);
|
12257
|
+
_defineProperty$w(_assertThisInitialized$w(_this25), "skip", void 0);
|
12258
|
+
_defineProperty$w(_assertThisInitialized$w(_this25), "stop", void 0);
|
12043
12259
|
_this25.options = undefined;
|
12044
12260
|
_this25.parsed = undefined;
|
12045
12261
|
_this25.skip = undefined;
|
@@ -12111,6 +12327,9 @@
|
|
12111
12327
|
return PointElement;
|
12112
12328
|
}(Element);
|
12113
12329
|
_defineProperty$w(PointElement, "id", 'point');
|
12330
|
+
/**
|
12331
|
+
* @type {any}
|
12332
|
+
*/
|
12114
12333
|
_defineProperty$w(PointElement, "defaults", {
|
12115
12334
|
borderWidth: 1,
|
12116
12335
|
hitRadius: 1,
|
@@ -12120,6 +12339,9 @@
|
|
12120
12339
|
radius: 3,
|
12121
12340
|
rotation: 0
|
12122
12341
|
});
|
12342
|
+
/**
|
12343
|
+
* @type {any}
|
12344
|
+
*/
|
12123
12345
|
_defineProperty$w(PointElement, "defaultRoutes", {
|
12124
12346
|
backgroundColor: 'backgroundColor',
|
12125
12347
|
borderColor: 'borderColor'
|
@@ -12331,9 +12553,9 @@
|
|
12331
12553
|
var elements = /*#__PURE__*/Object.freeze({
|
12332
12554
|
__proto__: null,
|
12333
12555
|
ArcElement: ArcElement,
|
12556
|
+
BarElement: BarElement,
|
12334
12557
|
LineElement: LineElement,
|
12335
|
-
PointElement: PointElement
|
12336
|
-
BarElement: BarElement
|
12558
|
+
PointElement: PointElement
|
12337
12559
|
});
|
12338
12560
|
var BORDER_COLORS = ['rgb(54, 162, 235)', 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' // grey
|
12339
12561
|
];
|
@@ -12512,6 +12734,9 @@
|
|
12512
12734
|
delete dataset._decimated;
|
12513
12735
|
delete dataset._data;
|
12514
12736
|
Object.defineProperty(dataset, 'data', {
|
12737
|
+
configurable: true,
|
12738
|
+
enumerable: true,
|
12739
|
+
writable: true,
|
12515
12740
|
value: data
|
12516
12741
|
});
|
12517
12742
|
}
|
@@ -13517,15 +13742,15 @@
|
|
13517
13742
|
_step24;
|
13518
13743
|
try {
|
13519
13744
|
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
13520
|
-
var
|
13521
|
-
if (
|
13522
|
-
col =
|
13745
|
+
var _hitbox = _step24.value;
|
13746
|
+
if (_hitbox.col !== col) {
|
13747
|
+
col = _hitbox.col;
|
13523
13748
|
top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
|
13524
13749
|
}
|
13525
|
-
|
13526
|
-
|
13527
|
-
|
13528
|
-
top +=
|
13750
|
+
_hitbox.top = top;
|
13751
|
+
_hitbox.left += this.left + padding;
|
13752
|
+
_hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(_hitbox.left), _hitbox.width);
|
13753
|
+
top += _hitbox.height + padding;
|
13529
13754
|
}
|
13530
13755
|
} catch (err) {
|
13531
13756
|
_iterator24.e(err);
|
@@ -14744,11 +14969,10 @@
|
|
14744
14969
|
}, {
|
14745
14970
|
key: "_drawColorBox",
|
14746
14971
|
value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {
|
14747
|
-
var
|
14972
|
+
var labelColor = this.labelColors[i];
|
14748
14973
|
var labelPointStyle = this.labelPointStyles[i];
|
14749
14974
|
var boxHeight = options.boxHeight,
|
14750
|
-
boxWidth = options.boxWidth
|
14751
|
-
boxPadding = options.boxPadding;
|
14975
|
+
boxWidth = options.boxWidth;
|
14752
14976
|
var bodyFont = toFont(options.bodyFont);
|
14753
14977
|
var colorX = getAlignedX(this, 'left', options);
|
14754
14978
|
var rtlColorX = rtlHelper.x(colorX);
|
@@ -14766,17 +14990,17 @@
|
|
14766
14990
|
ctx.strokeStyle = options.multiKeyBackground;
|
14767
14991
|
ctx.fillStyle = options.multiKeyBackground;
|
14768
14992
|
drawPoint(ctx, drawOptions, centerX, centerY);
|
14769
|
-
ctx.strokeStyle =
|
14770
|
-
ctx.fillStyle =
|
14993
|
+
ctx.strokeStyle = labelColor.borderColor;
|
14994
|
+
ctx.fillStyle = labelColor.backgroundColor;
|
14771
14995
|
drawPoint(ctx, drawOptions, centerX, centerY);
|
14772
14996
|
} else {
|
14773
|
-
ctx.lineWidth = isObject(
|
14774
|
-
ctx.strokeStyle =
|
14775
|
-
ctx.setLineDash(
|
14776
|
-
ctx.lineDashOffset =
|
14777
|
-
var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth
|
14778
|
-
var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth -
|
14779
|
-
var borderRadius = toTRBLCorners(
|
14997
|
+
ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max.apply(Math, _toConsumableArray(Object.values(labelColor.borderWidth))) : labelColor.borderWidth || 1;
|
14998
|
+
ctx.strokeStyle = labelColor.borderColor;
|
14999
|
+
ctx.setLineDash(labelColor.borderDash || []);
|
15000
|
+
ctx.lineDashOffset = labelColor.borderDashOffset || 0;
|
15001
|
+
var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
|
15002
|
+
var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
|
15003
|
+
var borderRadius = toTRBLCorners(labelColor.borderRadius);
|
14780
15004
|
if (Object.values(borderRadius).some(function (v) {
|
14781
15005
|
return v !== 0;
|
14782
15006
|
})) {
|
@@ -14791,7 +15015,7 @@
|
|
14791
15015
|
});
|
14792
15016
|
ctx.fill();
|
14793
15017
|
ctx.stroke();
|
14794
|
-
ctx.fillStyle =
|
15018
|
+
ctx.fillStyle = labelColor.backgroundColor;
|
14795
15019
|
ctx.beginPath();
|
14796
15020
|
addRoundedRectPath(ctx, {
|
14797
15021
|
x: innerX,
|
@@ -14805,7 +15029,7 @@
|
|
14805
15029
|
ctx.fillStyle = options.multiKeyBackground;
|
14806
15030
|
ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
|
14807
15031
|
ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
|
14808
|
-
ctx.fillStyle =
|
15032
|
+
ctx.fillStyle = labelColor.backgroundColor;
|
14809
15033
|
ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
|
14810
15034
|
}
|
14811
15035
|
}
|
@@ -15456,8 +15680,12 @@
|
|
15456
15680
|
}
|
15457
15681
|
}
|
15458
15682
|
for (; j < numSpaces; ++j) {
|
15683
|
+
var tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
|
15684
|
+
if (maxDefined && tickValue > max) {
|
15685
|
+
break;
|
15686
|
+
}
|
15459
15687
|
ticks.push({
|
15460
|
-
value:
|
15688
|
+
value: tickValue
|
15461
15689
|
});
|
15462
15690
|
}
|
15463
15691
|
if (maxDefined && includeBounds && niceMax !== max) {
|
@@ -15957,29 +16185,74 @@
|
|
15957
16185
|
limits.b = Math.max(limits.b, orig.b + y);
|
15958
16186
|
}
|
15959
16187
|
}
|
16188
|
+
function createPointLabelItem(scale, index, itemOpts) {
|
16189
|
+
var outerDistance = scale.drawingArea;
|
16190
|
+
var extra = itemOpts.extra,
|
16191
|
+
additionalAngle = itemOpts.additionalAngle,
|
16192
|
+
padding = itemOpts.padding,
|
16193
|
+
size = itemOpts.size;
|
16194
|
+
var pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
|
16195
|
+
var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
|
16196
|
+
var y = yForAngle(pointLabelPosition.y, size.h, angle);
|
16197
|
+
var textAlign = getTextAlignForAngle(angle);
|
16198
|
+
var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
|
16199
|
+
return {
|
16200
|
+
visible: true,
|
16201
|
+
x: pointLabelPosition.x,
|
16202
|
+
y: y,
|
16203
|
+
textAlign: textAlign,
|
16204
|
+
left: left,
|
16205
|
+
top: y,
|
16206
|
+
right: left + size.w,
|
16207
|
+
bottom: y + size.h
|
16208
|
+
};
|
16209
|
+
}
|
16210
|
+
function isNotOverlapped(item, area) {
|
16211
|
+
if (!area) {
|
16212
|
+
return true;
|
16213
|
+
}
|
16214
|
+
var left = item.left,
|
16215
|
+
top = item.top,
|
16216
|
+
right = item.right,
|
16217
|
+
bottom = item.bottom;
|
16218
|
+
var apexesInArea = _isPointInArea({
|
16219
|
+
x: left,
|
16220
|
+
y: top
|
16221
|
+
}, area) || _isPointInArea({
|
16222
|
+
x: left,
|
16223
|
+
y: bottom
|
16224
|
+
}, area) || _isPointInArea({
|
16225
|
+
x: right,
|
16226
|
+
y: top
|
16227
|
+
}, area) || _isPointInArea({
|
16228
|
+
x: right,
|
16229
|
+
y: bottom
|
16230
|
+
}, area);
|
16231
|
+
return !apexesInArea;
|
16232
|
+
}
|
15960
16233
|
function buildPointLabelItems(scale, labelSizes, padding) {
|
15961
16234
|
var items = [];
|
15962
16235
|
var valueCount = scale._pointLabels.length;
|
15963
16236
|
var opts = scale.options;
|
15964
|
-
var
|
15965
|
-
|
15966
|
-
|
16237
|
+
var _opts$pointLabels = opts.pointLabels,
|
16238
|
+
centerPointLabels = _opts$pointLabels.centerPointLabels,
|
16239
|
+
display = _opts$pointLabels.display;
|
16240
|
+
var itemOpts = {
|
16241
|
+
extra: getTickBackdropHeight(opts) / 2,
|
16242
|
+
additionalAngle: centerPointLabels ? PI / valueCount : 0
|
16243
|
+
};
|
16244
|
+
var area;
|
15967
16245
|
for (var i = 0; i < valueCount; i++) {
|
15968
|
-
|
15969
|
-
|
15970
|
-
var
|
15971
|
-
|
15972
|
-
|
15973
|
-
|
15974
|
-
|
15975
|
-
|
15976
|
-
|
15977
|
-
|
15978
|
-
left: left,
|
15979
|
-
top: y,
|
15980
|
-
right: left + size.w,
|
15981
|
-
bottom: y + size.h
|
15982
|
-
});
|
16246
|
+
itemOpts.padding = padding[i];
|
16247
|
+
itemOpts.size = labelSizes[i];
|
16248
|
+
var item = createPointLabelItem(scale, i, itemOpts);
|
16249
|
+
items.push(item);
|
16250
|
+
if (display === 'auto') {
|
16251
|
+
item.visible = isNotOverlapped(item, area);
|
16252
|
+
if (item.visible) {
|
16253
|
+
area = item;
|
16254
|
+
}
|
16255
|
+
}
|
15983
16256
|
}
|
15984
16257
|
return items;
|
15985
16258
|
}
|
@@ -16007,45 +16280,51 @@
|
|
16007
16280
|
}
|
16008
16281
|
return y;
|
16009
16282
|
}
|
16283
|
+
function drawPointLabelBox(ctx, opts, item) {
|
16284
|
+
var left = item.left,
|
16285
|
+
top = item.top,
|
16286
|
+
right = item.right,
|
16287
|
+
bottom = item.bottom;
|
16288
|
+
var backdropColor = opts.backdropColor;
|
16289
|
+
if (!isNullOrUndef(backdropColor)) {
|
16290
|
+
var borderRadius = toTRBLCorners(opts.borderRadius);
|
16291
|
+
var padding = toPadding(opts.backdropPadding);
|
16292
|
+
ctx.fillStyle = backdropColor;
|
16293
|
+
var backdropLeft = left - padding.left;
|
16294
|
+
var backdropTop = top - padding.top;
|
16295
|
+
var backdropWidth = right - left + padding.width;
|
16296
|
+
var backdropHeight = bottom - top + padding.height;
|
16297
|
+
if (Object.values(borderRadius).some(function (v) {
|
16298
|
+
return v !== 0;
|
16299
|
+
})) {
|
16300
|
+
ctx.beginPath();
|
16301
|
+
addRoundedRectPath(ctx, {
|
16302
|
+
x: backdropLeft,
|
16303
|
+
y: backdropTop,
|
16304
|
+
w: backdropWidth,
|
16305
|
+
h: backdropHeight,
|
16306
|
+
radius: borderRadius
|
16307
|
+
});
|
16308
|
+
ctx.fill();
|
16309
|
+
} else {
|
16310
|
+
ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
|
16311
|
+
}
|
16312
|
+
}
|
16313
|
+
}
|
16010
16314
|
function drawPointLabels(scale, labelCount) {
|
16011
16315
|
var ctx = scale.ctx,
|
16012
16316
|
pointLabels = scale.options.pointLabels;
|
16013
16317
|
for (var i = labelCount - 1; i >= 0; i--) {
|
16318
|
+
var item = scale._pointLabelItems[i];
|
16319
|
+
if (!item.visible) {
|
16320
|
+
continue;
|
16321
|
+
}
|
16014
16322
|
var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
|
16323
|
+
drawPointLabelBox(ctx, optsAtIndex, item);
|
16015
16324
|
var plFont = toFont(optsAtIndex.font);
|
16016
|
-
var
|
16017
|
-
|
16018
|
-
|
16019
|
-
textAlign = _scale$_pointLabelIte.textAlign,
|
16020
|
-
left = _scale$_pointLabelIte.left,
|
16021
|
-
top = _scale$_pointLabelIte.top,
|
16022
|
-
right = _scale$_pointLabelIte.right,
|
16023
|
-
bottom = _scale$_pointLabelIte.bottom;
|
16024
|
-
var backdropColor = optsAtIndex.backdropColor;
|
16025
|
-
if (!isNullOrUndef(backdropColor)) {
|
16026
|
-
var borderRadius = toTRBLCorners(optsAtIndex.borderRadius);
|
16027
|
-
var padding = toPadding(optsAtIndex.backdropPadding);
|
16028
|
-
ctx.fillStyle = backdropColor;
|
16029
|
-
var backdropLeft = left - padding.left;
|
16030
|
-
var backdropTop = top - padding.top;
|
16031
|
-
var backdropWidth = right - left + padding.width;
|
16032
|
-
var backdropHeight = bottom - top + padding.height;
|
16033
|
-
if (Object.values(borderRadius).some(function (v) {
|
16034
|
-
return v !== 0;
|
16035
|
-
})) {
|
16036
|
-
ctx.beginPath();
|
16037
|
-
addRoundedRectPath(ctx, {
|
16038
|
-
x: backdropLeft,
|
16039
|
-
y: backdropTop,
|
16040
|
-
w: backdropWidth,
|
16041
|
-
h: backdropHeight,
|
16042
|
-
radius: borderRadius
|
16043
|
-
});
|
16044
|
-
ctx.fill();
|
16045
|
-
} else {
|
16046
|
-
ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
|
16047
|
-
}
|
16048
|
-
}
|
16325
|
+
var x = item.x,
|
16326
|
+
y = item.y,
|
16327
|
+
textAlign = item.textAlign;
|
16049
16328
|
renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
|
16050
16329
|
color: optsAtIndex.color,
|
16051
16330
|
textAlign: textAlign,
|
@@ -17003,8 +17282,7 @@
|
|
17003
17282
|
});
|
17004
17283
|
var registerables = [controllers, elements, plugins, scales];
|
17005
17284
|
|
17006
|
-
Chart
|
17007
|
-
var Chart = Chart$1;
|
17285
|
+
Chart.register.apply(Chart, _toConsumableArray(registerables));
|
17008
17286
|
|
17009
17287
|
var helpers = /*#__PURE__*/Object.freeze({
|
17010
17288
|
__proto__: null,
|