chartkick 5.2.1 → 5.3.0
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 +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +8 -8
- data/lib/chartkick/version.rb +1 -1
- data/vendor/assets/javascripts/Chart.bundle.js +133 -46
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b3c5c4b473895a289ec899639732d9210619ac293385ca13c09cecd4ca5cd1a2
|
|
4
|
+
data.tar.gz: 44b51e504332b13da342cd05e3a21f02582f8324a219d634340c3414e1cbdbac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a93e4c961160448349ae36bdf1c2dad352f33868a2307ea65f7d609c68302859771a23d098f424505c6f1c3be6baeae73ac155850f46b60e069cae3b4d6ac9f8
|
|
7
|
+
data.tar.gz: ee57e9a69303c6607d160eb855cdef4c35dca47ac37269c90ef8084852994b314e80d400a427ed6e7a67fe02bbe45eb8cee540e80bb17e35ee9f721b99a9674d
|
data/CHANGELOG.md
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -20,7 +20,7 @@ gem "chartkick"
|
|
|
20
20
|
|
|
21
21
|
Then follow the instructions for your JavaScript setup:
|
|
22
22
|
|
|
23
|
-
- [Importmap](#importmap) (Rails
|
|
23
|
+
- [Importmap](#importmap) (Rails default)
|
|
24
24
|
- [Bun, esbuild, rollup.js, or Webpack](#bun-esbuild-rollupjs-or-webpack)
|
|
25
25
|
- [Sprockets](#sprockets)
|
|
26
26
|
|
|
@@ -125,8 +125,8 @@ Multiple series
|
|
|
125
125
|
|
|
126
126
|
```erb
|
|
127
127
|
<%= line_chart [
|
|
128
|
-
{name: "Workout", data: {"
|
|
129
|
-
{name: "Call parents", data: {"
|
|
128
|
+
{name: "Workout", data: {"2026-01-01" => 3, "2026-01-02" => 4}},
|
|
129
|
+
{name: "Call parents", data: {"2026-01-01" => 5, "2026-01-02" => 3}}
|
|
130
130
|
] %>
|
|
131
131
|
```
|
|
132
132
|
|
|
@@ -143,13 +143,13 @@ Data can be a hash, array, or URL.
|
|
|
143
143
|
#### Hash
|
|
144
144
|
|
|
145
145
|
```erb
|
|
146
|
-
<%= line_chart({"
|
|
146
|
+
<%= line_chart({"2026-01-01" => 2, "2026-01-02" => 3}) %>
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
#### Array
|
|
150
150
|
|
|
151
151
|
```erb
|
|
152
|
-
<%= line_chart [["
|
|
152
|
+
<%= line_chart [["2026-01-01", 2], ["2026-01-02", 3]] %>
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
#### URL
|
|
@@ -195,7 +195,7 @@ Min and max values
|
|
|
195
195
|
Min and max for x-axis - *Chart.js*
|
|
196
196
|
|
|
197
197
|
```erb
|
|
198
|
-
<%= line_chart data, xmin: "
|
|
198
|
+
<%= line_chart data, xmin: "2026-01-01", xmax: "2026-02-01" %>
|
|
199
199
|
```
|
|
200
200
|
|
|
201
201
|
Colors
|
|
@@ -437,7 +437,7 @@ In your layout or views, add:
|
|
|
437
437
|
<%= javascript_include_tag "https://www.gstatic.com/charts/loader.js" %>
|
|
438
438
|
```
|
|
439
439
|
|
|
440
|
-
For Importmap (Rails
|
|
440
|
+
For Importmap (Rails default), in `config/importmap.rb`, add:
|
|
441
441
|
|
|
442
442
|
```ruby
|
|
443
443
|
pin "chartkick", to: "chartkick.js"
|
|
@@ -479,7 +479,7 @@ before your charts.
|
|
|
479
479
|
|
|
480
480
|
### Highcharts
|
|
481
481
|
|
|
482
|
-
For Importmap (Rails
|
|
482
|
+
For Importmap (Rails default), run:
|
|
483
483
|
|
|
484
484
|
```sh
|
|
485
485
|
bin/importmap pin highcharts --download
|
data/lib/chartkick/version.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Chart.js v4.
|
|
2
|
+
* Chart.js v4.6.1
|
|
3
3
|
* https://www.chartjs.org
|
|
4
|
-
* (c)
|
|
4
|
+
* (c) 2026 Chart.js Contributors
|
|
5
5
|
* Released under the MIT License
|
|
6
6
|
*
|
|
7
7
|
* @kurkle/color v0.3.2
|
|
@@ -231,15 +231,15 @@
|
|
|
231
231
|
function _toConsumableArray(r) {
|
|
232
232
|
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray$1(r) || _nonIterableSpread();
|
|
233
233
|
}
|
|
234
|
-
function _toPrimitive(t,
|
|
234
|
+
function _toPrimitive(t, e) {
|
|
235
235
|
if ("object" != typeof t || !t) return t;
|
|
236
|
-
var
|
|
237
|
-
if (void 0 !==
|
|
238
|
-
var i =
|
|
236
|
+
var r;
|
|
237
|
+
if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) {
|
|
238
|
+
var i = r.call(t, e || "default");
|
|
239
239
|
if ("object" != typeof i) return i;
|
|
240
240
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
241
241
|
}
|
|
242
|
-
return ("string" ===
|
|
242
|
+
return ("string" === e ? String : Number)(t);
|
|
243
243
|
}
|
|
244
244
|
function _toPropertyKey(t) {
|
|
245
245
|
var i = _toPrimitive(t, "string");
|
|
@@ -3577,10 +3577,12 @@
|
|
|
3577
3577
|
canvas.style.height = "".concat(chart.height, "px");
|
|
3578
3578
|
canvas.style.width = "".concat(chart.width, "px");
|
|
3579
3579
|
}
|
|
3580
|
-
|
|
3580
|
+
var canvasHeight = Math.floor(deviceHeight);
|
|
3581
|
+
var canvasWidth = Math.floor(deviceWidth);
|
|
3582
|
+
if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== canvasHeight || canvas.width !== canvasWidth) {
|
|
3581
3583
|
chart.currentDevicePixelRatio = pixelRatio;
|
|
3582
|
-
canvas.height =
|
|
3583
|
-
canvas.width =
|
|
3584
|
+
canvas.height = canvasHeight;
|
|
3585
|
+
canvas.width = canvasWidth;
|
|
3584
3586
|
chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
|
|
3585
3587
|
return true;
|
|
3586
3588
|
}
|
|
@@ -4682,7 +4684,7 @@
|
|
|
4682
4684
|
var parsed = _step2.value;
|
|
4683
4685
|
var stacks = parsed._stacks;
|
|
4684
4686
|
if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {
|
|
4685
|
-
|
|
4687
|
+
continue;
|
|
4686
4688
|
}
|
|
4687
4689
|
delete stacks[axis][datasetIndex];
|
|
4688
4690
|
if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {
|
|
@@ -6430,14 +6432,15 @@
|
|
|
6430
6432
|
circumference: 360,
|
|
6431
6433
|
radius: '100%',
|
|
6432
6434
|
spacing: 0,
|
|
6435
|
+
spacingMode: 'angular',
|
|
6433
6436
|
indexAxis: 'r'
|
|
6434
6437
|
});
|
|
6435
6438
|
_defineProperty$1(DoughnutController, "descriptors", {
|
|
6436
6439
|
_scriptable: function _scriptable(name) {
|
|
6437
|
-
return name !== 'spacing';
|
|
6440
|
+
return name !== 'spacing' && name !== 'spacingMode';
|
|
6438
6441
|
},
|
|
6439
6442
|
_indexable: function _indexable(name) {
|
|
6440
|
-
return name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash');
|
|
6443
|
+
return name !== 'spacing' && name !== 'spacingMode' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash');
|
|
6441
6444
|
}
|
|
6442
6445
|
});
|
|
6443
6446
|
_defineProperty$1(DoughnutController, "overrides", {
|
|
@@ -6727,6 +6730,12 @@
|
|
|
6727
6730
|
endAngle: endAngle,
|
|
6728
6731
|
options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)
|
|
6729
6732
|
};
|
|
6733
|
+
if (properties.options.spacing === 0) {
|
|
6734
|
+
properties.options.spacing = this.options.spacing;
|
|
6735
|
+
}
|
|
6736
|
+
if (properties.options.spacingMode === 'angular') {
|
|
6737
|
+
properties.options.spacingMode = this.options.spacingMode;
|
|
6738
|
+
}
|
|
6730
6739
|
this.updateElement(arc, i, properties, mode);
|
|
6731
6740
|
}
|
|
6732
6741
|
}
|
|
@@ -6764,7 +6773,9 @@
|
|
|
6764
6773
|
}
|
|
6765
6774
|
},
|
|
6766
6775
|
indexAxis: 'r',
|
|
6767
|
-
startAngle: 0
|
|
6776
|
+
startAngle: 0,
|
|
6777
|
+
spacing: 0,
|
|
6778
|
+
spacingMode: 'proportional'
|
|
6768
6779
|
});
|
|
6769
6780
|
_defineProperty$1(PolarAreaController, "overrides", {
|
|
6770
6781
|
aspectRatio: 1,
|
|
@@ -9653,7 +9664,9 @@
|
|
|
9653
9664
|
rotation: rotation,
|
|
9654
9665
|
textAlign: titleAlign(align, position, reverse),
|
|
9655
9666
|
textBaseline: 'middle',
|
|
9656
|
-
translation: [titleX, titleY]
|
|
9667
|
+
translation: [titleX, titleY],
|
|
9668
|
+
strokeColor: title.strokeColor,
|
|
9669
|
+
strokeWidth: title.strokeWidth
|
|
9657
9670
|
});
|
|
9658
9671
|
}
|
|
9659
9672
|
}, {
|
|
@@ -10509,7 +10522,7 @@
|
|
|
10509
10522
|
}
|
|
10510
10523
|
return false;
|
|
10511
10524
|
}
|
|
10512
|
-
var version = "4.
|
|
10525
|
+
var version = "4.6.1";
|
|
10513
10526
|
var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
|
|
10514
10527
|
function positionIsHorizontal(position, axis) {
|
|
10515
10528
|
return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
|
|
@@ -11675,6 +11688,23 @@
|
|
|
11675
11688
|
y: y + r * Math.sin(theta)
|
|
11676
11689
|
};
|
|
11677
11690
|
}
|
|
11691
|
+
function pathFullCircle(ctx, element, offset, spacing) {
|
|
11692
|
+
var x = element.x,
|
|
11693
|
+
y = element.y,
|
|
11694
|
+
start = element.startAngle,
|
|
11695
|
+
pixelMargin = element.pixelMargin,
|
|
11696
|
+
innerR = element.innerRadius;
|
|
11697
|
+
var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
|
|
11698
|
+
var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
|
|
11699
|
+
ctx.beginPath();
|
|
11700
|
+
ctx.arc(x, y, outerRadius, start, start + TAU);
|
|
11701
|
+
if (innerRadius > 0) {
|
|
11702
|
+
// Start the inner contour as a separate subpath to avoid a seam connector.
|
|
11703
|
+
ctx.moveTo(x + Math.cos(start) * innerRadius, y + Math.sin(start) * innerRadius);
|
|
11704
|
+
ctx.arc(x, y, innerRadius, start + TAU, start, true);
|
|
11705
|
+
}
|
|
11706
|
+
ctx.closePath();
|
|
11707
|
+
}
|
|
11678
11708
|
/**
|
|
11679
11709
|
* Path the arc, respecting border radius by separating into left and right halves.
|
|
11680
11710
|
*
|
|
@@ -11695,37 +11725,73 @@
|
|
|
11695
11725
|
start = element.startAngle,
|
|
11696
11726
|
pixelMargin = element.pixelMargin,
|
|
11697
11727
|
innerR = element.innerRadius;
|
|
11728
|
+
var _element$options$spac = element.options.spacingMode,
|
|
11729
|
+
spacingMode = _element$options$spac === void 0 ? 'angular' : _element$options$spac;
|
|
11730
|
+
var alpha = end - start;
|
|
11731
|
+
if (circular && element.options.selfJoin && Math.abs(alpha) >= TAU - 1e-4) {
|
|
11732
|
+
pathFullCircle(ctx, element, offset, spacing);
|
|
11733
|
+
return;
|
|
11734
|
+
}
|
|
11698
11735
|
var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
|
|
11699
11736
|
var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
|
|
11700
|
-
var
|
|
11701
|
-
var
|
|
11737
|
+
var outerSpacingOffset = 0;
|
|
11738
|
+
var innerSpacingOffset = 0;
|
|
11739
|
+
var beta = outerRadius > 0 ? Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius : 0.001;
|
|
11740
|
+
var angleOffset = (alpha - beta) / 2;
|
|
11702
11741
|
if (spacing) {
|
|
11703
11742
|
// When spacing is present, it is the same for all items
|
|
11704
11743
|
// So we adjust the start and end angle of the arc such that
|
|
11705
11744
|
// the distance is the same as it would be without the spacing
|
|
11706
11745
|
var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
|
|
11707
11746
|
var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
|
|
11708
|
-
var
|
|
11709
|
-
var
|
|
11710
|
-
|
|
11747
|
+
var avgNoSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
|
|
11748
|
+
var proportionalOffset = function () {
|
|
11749
|
+
var adjustedAngle = avgNoSpacingRadius !== 0 ? alpha * avgNoSpacingRadius / (avgNoSpacingRadius + spacing) : alpha;
|
|
11750
|
+
return (alpha - adjustedAngle) / 2;
|
|
11751
|
+
}();
|
|
11752
|
+
var angularOffset = avgNoSpacingRadius > 0 ? Math.asin(Math.min(1, spacing / avgNoSpacingRadius)) : 0;
|
|
11753
|
+
// Keep spacing trims below half the available span after base offset trimming.
|
|
11754
|
+
var maxOffset = Math.max(0, beta / 2 - 0.001);
|
|
11755
|
+
var maxOffsetSin = Math.sin(maxOffset);
|
|
11756
|
+
if (spacingMode === 'parallel') {
|
|
11757
|
+
if (innerRadius === 0 && maxOffsetSin > 0) {
|
|
11758
|
+
// A root radius of zero cannot realize a non-zero parallel separator width.
|
|
11759
|
+
// Raise the root just enough for the available angular span.
|
|
11760
|
+
var minInnerRadius = spacing / maxOffsetSin;
|
|
11761
|
+
var maxInnerRadius = Math.max(0, outerRadius - 0.001);
|
|
11762
|
+
innerRadius = Math.min(minInnerRadius, maxInnerRadius);
|
|
11763
|
+
}
|
|
11764
|
+
// Use one bounded spacing value for both radii so large spacing keeps stable geometry.
|
|
11765
|
+
var maxParallelSpacing = Math.min(outerRadius > 0 ? outerRadius * maxOffsetSin : Number.POSITIVE_INFINITY, innerRadius > 0 ? innerRadius * maxOffsetSin : Number.POSITIVE_INFINITY);
|
|
11766
|
+
var parallelSpacing = Math.min(spacing, maxParallelSpacing);
|
|
11767
|
+
outerSpacingOffset = outerRadius > 0 ? Math.asin(Math.min(1, parallelSpacing / outerRadius)) : Math.min(maxOffset, angularOffset);
|
|
11768
|
+
innerSpacingOffset = innerRadius > 0 ? Math.asin(Math.min(1, parallelSpacing / innerRadius)) : outerSpacingOffset;
|
|
11769
|
+
} else if (spacingMode === 'proportional') {
|
|
11770
|
+
outerSpacingOffset = Math.min(maxOffset, proportionalOffset);
|
|
11771
|
+
innerSpacingOffset = Math.min(maxOffset, proportionalOffset);
|
|
11772
|
+
} else {
|
|
11773
|
+
outerSpacingOffset = Math.min(maxOffset, angularOffset);
|
|
11774
|
+
innerSpacingOffset = Math.min(maxOffset, angularOffset);
|
|
11775
|
+
}
|
|
11711
11776
|
}
|
|
11712
|
-
var
|
|
11713
|
-
var
|
|
11714
|
-
var
|
|
11715
|
-
var
|
|
11716
|
-
var
|
|
11777
|
+
var outerStartAngle = start + angleOffset + outerSpacingOffset;
|
|
11778
|
+
var outerEndAngle = end - angleOffset - outerSpacingOffset;
|
|
11779
|
+
var innerStartAngle = start + angleOffset + innerSpacingOffset;
|
|
11780
|
+
var innerEndAngle = end - angleOffset - innerSpacingOffset;
|
|
11781
|
+
var angleDelta = Math.min(outerEndAngle - outerStartAngle, innerEndAngle - innerStartAngle);
|
|
11782
|
+
var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, angleDelta),
|
|
11717
11783
|
outerStart = _parseBorderRadius$.outerStart,
|
|
11718
11784
|
outerEnd = _parseBorderRadius$.outerEnd,
|
|
11719
11785
|
innerStart = _parseBorderRadius$.innerStart,
|
|
11720
11786
|
innerEnd = _parseBorderRadius$.innerEnd;
|
|
11721
11787
|
var outerStartAdjustedRadius = outerRadius - outerStart;
|
|
11722
11788
|
var outerEndAdjustedRadius = outerRadius - outerEnd;
|
|
11723
|
-
var outerStartAdjustedAngle =
|
|
11724
|
-
var outerEndAdjustedAngle =
|
|
11789
|
+
var outerStartAdjustedAngle = outerStartAngle + outerStart / outerStartAdjustedRadius;
|
|
11790
|
+
var outerEndAdjustedAngle = outerEndAngle - outerEnd / outerEndAdjustedRadius;
|
|
11725
11791
|
var innerStartAdjustedRadius = innerRadius + innerStart;
|
|
11726
11792
|
var innerEndAdjustedRadius = innerRadius + innerEnd;
|
|
11727
|
-
var innerStartAdjustedAngle =
|
|
11728
|
-
var innerEndAdjustedAngle =
|
|
11793
|
+
var innerStartAdjustedAngle = innerStartAngle + innerStart / innerStartAdjustedRadius;
|
|
11794
|
+
var innerEndAdjustedAngle = innerEndAngle - innerEnd / innerEndAdjustedRadius;
|
|
11729
11795
|
ctx.beginPath();
|
|
11730
11796
|
if (circular) {
|
|
11731
11797
|
// The first arc segments from point 1 to point a to point 2
|
|
@@ -11735,32 +11801,32 @@
|
|
|
11735
11801
|
// The corner segment from point 2 to point 3
|
|
11736
11802
|
if (outerEnd > 0) {
|
|
11737
11803
|
var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
|
|
11738
|
-
ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle,
|
|
11804
|
+
ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, outerEndAngle + HALF_PI);
|
|
11739
11805
|
}
|
|
11740
11806
|
// The line from point 3 to point 4
|
|
11741
|
-
var p4 = rThetaToXY(innerEndAdjustedRadius,
|
|
11807
|
+
var p4 = rThetaToXY(innerEndAdjustedRadius, innerEndAngle, x, y);
|
|
11742
11808
|
ctx.lineTo(p4.x, p4.y);
|
|
11743
11809
|
// The corner segment from point 4 to point 5
|
|
11744
11810
|
if (innerEnd > 0) {
|
|
11745
11811
|
var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
|
|
11746
|
-
ctx.arc(_pCenter.x, _pCenter.y, innerEnd,
|
|
11812
|
+
ctx.arc(_pCenter.x, _pCenter.y, innerEnd, innerEndAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
|
|
11747
11813
|
}
|
|
11748
11814
|
// The inner arc from point 5 to point b to point 6
|
|
11749
|
-
var innerMidAdjustedAngle = (
|
|
11750
|
-
ctx.arc(x, y, innerRadius,
|
|
11751
|
-
ctx.arc(x, y, innerRadius, innerMidAdjustedAngle,
|
|
11815
|
+
var innerMidAdjustedAngle = (innerEndAngle - innerEnd / innerRadius + (innerStartAngle + innerStart / innerRadius)) / 2;
|
|
11816
|
+
ctx.arc(x, y, innerRadius, innerEndAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
|
|
11817
|
+
ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, innerStartAngle + innerStart / innerRadius, true);
|
|
11752
11818
|
// The corner segment from point 6 to point 7
|
|
11753
11819
|
if (innerStart > 0) {
|
|
11754
11820
|
var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
|
|
11755
|
-
ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI,
|
|
11821
|
+
ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, innerStartAngle - HALF_PI);
|
|
11756
11822
|
}
|
|
11757
11823
|
// The line from point 7 to point 8
|
|
11758
|
-
var p8 = rThetaToXY(outerStartAdjustedRadius,
|
|
11824
|
+
var p8 = rThetaToXY(outerStartAdjustedRadius, outerStartAngle, x, y);
|
|
11759
11825
|
ctx.lineTo(p8.x, p8.y);
|
|
11760
11826
|
// The corner segment from point 8 to point 1
|
|
11761
11827
|
if (outerStart > 0) {
|
|
11762
11828
|
var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
|
|
11763
|
-
ctx.arc(_pCenter3.x, _pCenter3.y, outerStart,
|
|
11829
|
+
ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, outerStartAngle - HALF_PI, outerStartAdjustedAngle);
|
|
11764
11830
|
}
|
|
11765
11831
|
} else {
|
|
11766
11832
|
ctx.moveTo(x, y);
|
|
@@ -11815,6 +11881,7 @@
|
|
|
11815
11881
|
ctx.lineJoin = borderJoinStyle || 'bevel';
|
|
11816
11882
|
}
|
|
11817
11883
|
var endAngle = element.endAngle;
|
|
11884
|
+
var isFullCircle = Math.abs(endAngle - startAngle) >= TAU - 1e-4;
|
|
11818
11885
|
if (fullCircles) {
|
|
11819
11886
|
pathArc(ctx, element, offset, spacing, endAngle, circular);
|
|
11820
11887
|
for (var i = 0; i < fullCircles; ++i) {
|
|
@@ -11827,7 +11894,8 @@
|
|
|
11827
11894
|
if (inner) {
|
|
11828
11895
|
clipArc(ctx, element, endAngle);
|
|
11829
11896
|
}
|
|
11830
|
-
|
|
11897
|
+
var skipSelfClip = isFullCircle && element.innerRadius > 0;
|
|
11898
|
+
if (!skipSelfClip && options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {
|
|
11831
11899
|
clipSelf(ctx, element, endAngle);
|
|
11832
11900
|
}
|
|
11833
11901
|
if (!fullCircles) {
|
|
@@ -11847,6 +11915,7 @@
|
|
|
11847
11915
|
_defineProperty$1(_this21, "outerRadius", void 0);
|
|
11848
11916
|
_defineProperty$1(_this21, "pixelMargin", void 0);
|
|
11849
11917
|
_defineProperty$1(_this21, "startAngle", void 0);
|
|
11918
|
+
_defineProperty$1(_this21, "circular", void 0);
|
|
11850
11919
|
_this21.options = undefined;
|
|
11851
11920
|
_this21.circumference = undefined;
|
|
11852
11921
|
_this21.startAngle = undefined;
|
|
@@ -11855,6 +11924,7 @@
|
|
|
11855
11924
|
_this21.outerRadius = undefined;
|
|
11856
11925
|
_this21.pixelMargin = 0;
|
|
11857
11926
|
_this21.fullCircles = 0;
|
|
11927
|
+
_this21.circular = false;
|
|
11858
11928
|
if (cfg) {
|
|
11859
11929
|
Object.assign(_this21, cfg);
|
|
11860
11930
|
}
|
|
@@ -11946,6 +12016,7 @@
|
|
|
11946
12016
|
borderWidth: 2,
|
|
11947
12017
|
offset: 0,
|
|
11948
12018
|
spacing: 0,
|
|
12019
|
+
spacingMode: 'angular',
|
|
11949
12020
|
angle: undefined,
|
|
11950
12021
|
circular: true,
|
|
11951
12022
|
selfJoin: false
|
|
@@ -13350,7 +13421,7 @@
|
|
|
13350
13421
|
var meta = chart.getDatasetMeta(index);
|
|
13351
13422
|
var clip = getDatasetClipArea(chart, meta);
|
|
13352
13423
|
if (target && line.points.length) {
|
|
13353
|
-
clipArea(ctx, area);
|
|
13424
|
+
clipArea(ctx, clipToIndexBounds(area, meta.iScale));
|
|
13354
13425
|
doFill(ctx, {
|
|
13355
13426
|
line: line,
|
|
13356
13427
|
target: target,
|
|
@@ -13364,6 +13435,22 @@
|
|
|
13364
13435
|
unclipArea(ctx);
|
|
13365
13436
|
}
|
|
13366
13437
|
}
|
|
13438
|
+
function clipToIndexBounds(area, iScale) {
|
|
13439
|
+
if (!iScale || iScale.getPointPositionForValue) {
|
|
13440
|
+
return area;
|
|
13441
|
+
}
|
|
13442
|
+
var p1 = iScale.getPixelForValue(iScale.min);
|
|
13443
|
+
var p2 = iScale.getPixelForValue(iScale.max);
|
|
13444
|
+
var lo = Math.min(p1, p2);
|
|
13445
|
+
var hi = Math.max(p1, p2);
|
|
13446
|
+
return iScale.isHorizontal() ? _objectSpread2(_objectSpread2({}, area), {}, {
|
|
13447
|
+
left: Math.max(area.left, lo),
|
|
13448
|
+
right: Math.min(area.right, hi)
|
|
13449
|
+
}) : _objectSpread2(_objectSpread2({}, area), {}, {
|
|
13450
|
+
top: Math.max(area.top, lo),
|
|
13451
|
+
bottom: Math.min(area.bottom, hi)
|
|
13452
|
+
});
|
|
13453
|
+
}
|
|
13367
13454
|
function doFill(ctx, cfg) {
|
|
13368
13455
|
var line = cfg.line,
|
|
13369
13456
|
target = cfg.target,
|
|
@@ -21137,15 +21224,15 @@
|
|
|
21137
21224
|
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
21138
21225
|
}
|
|
21139
21226
|
|
|
21140
|
-
function toPrimitive(t,
|
|
21227
|
+
function toPrimitive(t, e) {
|
|
21141
21228
|
if ("object" != _typeof(t) || !t) return t;
|
|
21142
|
-
var
|
|
21143
|
-
if (void 0 !==
|
|
21144
|
-
var i =
|
|
21229
|
+
var r;
|
|
21230
|
+
if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) {
|
|
21231
|
+
var i = r.call(t, e || "default");
|
|
21145
21232
|
if ("object" != _typeof(i)) return i;
|
|
21146
21233
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
21147
21234
|
}
|
|
21148
|
-
return ("string" ===
|
|
21235
|
+
return ("string" === e ? String : Number)(t);
|
|
21149
21236
|
}
|
|
21150
21237
|
|
|
21151
21238
|
function toPropertyKey(t) {
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chartkick
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
@@ -42,14 +42,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
42
42
|
requirements:
|
|
43
43
|
- - ">="
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '3.
|
|
45
|
+
version: '3.3'
|
|
46
46
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
47
|
requirements:
|
|
48
48
|
- - ">="
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
50
|
version: '0'
|
|
51
51
|
requirements: []
|
|
52
|
-
rubygems_version:
|
|
52
|
+
rubygems_version: 4.0.20
|
|
53
53
|
specification_version: 4
|
|
54
54
|
summary: Create beautiful JavaScript charts with one line of Ruby
|
|
55
55
|
test_files: []
|