chartkick 5.1.5 → 5.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0872574220622fecbfb25770afdfdf1f244df0ba36d768c8e1d49e220120a7a3'
4
- data.tar.gz: 639bdb33a206445211c2496e14624090fef6a7e0e32dd0466d2a308f88dc8d0e
3
+ metadata.gz: 7a5f1633a78d2567d005d45366a1d13e85c98feb784220658270ac32b0bd666e
4
+ data.tar.gz: b317306658b5e4f557c1acf9a6c1055acf1dff9e284f3927ebf25a60bb8c87f3
5
5
  SHA512:
6
- metadata.gz: 6a6d14dd85b91be1d82843ce6e241be6035bfe8b9f9d75e53ae59e4b9f83db09878c391d4bf3afaa8efca5b5ef397fa9bed27796d1c0963766cf14ac70e5d799
7
- data.tar.gz: 37f5e87298510df837427db88997c99f86082887f10105ed12bf0f61fb7b30ff96ac65bace73df35048764888483edf40f3de05d5c7e249ae62afffefd79c4dd
6
+ metadata.gz: 83675f87191af965cdee382091eb73206f48614ba4b668619e7d396664f4695def489cccfd824d84b22d7ea1ca0fae0e866c5ecc467829115faf2e329d7538df
7
+ data.tar.gz: 73e8abf43cf9f35221610e20f5c18e0804496aa7c7197b648314e0b74a95e70106cb400511cbae9eb83b8b173d04b260991f1aee43f07a6569b37076e8fc5887
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 5.2.0 (2025-06-16)
2
+
3
+ - Updated Chart.js to 4.5.0
4
+ - Dropped support for Ruby < 3.2
5
+
1
6
  ## 5.1.5 (2025-04-15)
2
7
 
3
8
  - Updated Chart.js to 4.4.9
@@ -1,3 +1,3 @@
1
1
  module Chartkick
2
- VERSION = "5.1.5"
2
+ VERSION = "5.2.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Chart.js v4.4.9
2
+ * Chart.js v4.5.0
3
3
  * https://www.chartjs.org
4
4
  * (c) 2025 Chart.js Contributors
5
5
  * Released under the MIT License
@@ -5786,6 +5786,39 @@
5786
5786
  value: function _getStackCount(index) {
5787
5787
  return this._getStacks(undefined, index).length;
5788
5788
  }
5789
+ }, {
5790
+ key: "_getAxisCount",
5791
+ value: function _getAxisCount() {
5792
+ return this._getAxis().length;
5793
+ }
5794
+ }, {
5795
+ key: "getFirstScaleIdForIndexAxis",
5796
+ value: function getFirstScaleIdForIndexAxis() {
5797
+ var scales = this.chart.scales;
5798
+ var indexScaleId = this.chart.options.indexAxis;
5799
+ return Object.keys(scales).filter(function (key) {
5800
+ return scales[key].axis === indexScaleId;
5801
+ }).shift();
5802
+ }
5803
+ }, {
5804
+ key: "_getAxis",
5805
+ value: function _getAxis() {
5806
+ var axis = {};
5807
+ var firstScaleAxisId = this.getFirstScaleIdForIndexAxis();
5808
+ var _iterator5 = _createForOfIteratorHelper$1(this.chart.data.datasets),
5809
+ _step5;
5810
+ try {
5811
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
5812
+ var dataset = _step5.value;
5813
+ axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;
5814
+ }
5815
+ } catch (err) {
5816
+ _iterator5.e(err);
5817
+ } finally {
5818
+ _iterator5.f();
5819
+ }
5820
+ return Object.keys(axis);
5821
+ }
5789
5822
  }, {
5790
5823
  key: "_getStackIndex",
5791
5824
  value: function _getStackIndex(datasetIndex, name, dataIndex) {
@@ -5890,10 +5923,13 @@
5890
5923
  var skipNull = options.skipNull;
5891
5924
  var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
5892
5925
  var center, size;
5926
+ var axisCount = this._getAxisCount();
5893
5927
  if (ruler.grouped) {
5894
5928
  var stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
5895
- var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
5896
- var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);
5929
+ var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);
5930
+ var axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;
5931
+ var axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));
5932
+ var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;
5897
5933
  center = range.start + range.chunk * stackIndex + range.chunk / 2;
5898
5934
  size = Math.min(maxBarThickness, range.chunk * range.ratio);
5899
5935
  } else {
@@ -7398,11 +7434,11 @@
7398
7434
  }
7399
7435
  function buildStacks(layouts) {
7400
7436
  var stacks = {};
7401
- var _iterator5 = _createForOfIteratorHelper$1(layouts),
7402
- _step5;
7437
+ var _iterator6 = _createForOfIteratorHelper$1(layouts),
7438
+ _step6;
7403
7439
  try {
7404
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
7405
- var wrap = _step5.value;
7440
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
7441
+ var wrap = _step6.value;
7406
7442
  var stack = wrap.stack,
7407
7443
  pos = wrap.pos,
7408
7444
  stackWeight = wrap.stackWeight;
@@ -7419,9 +7455,9 @@
7419
7455
  _stack.weight += stackWeight;
7420
7456
  }
7421
7457
  } catch (err) {
7422
- _iterator5.e(err);
7458
+ _iterator6.e(err);
7423
7459
  } finally {
7424
- _iterator5.f();
7460
+ _iterator6.f();
7425
7461
  }
7426
7462
  return stacks;
7427
7463
  }
@@ -7565,11 +7601,11 @@
7565
7601
  var userPadding = params.padding;
7566
7602
  var x = chartArea.x,
7567
7603
  y = chartArea.y;
7568
- var _iterator6 = _createForOfIteratorHelper$1(boxes),
7569
- _step6;
7604
+ var _iterator7 = _createForOfIteratorHelper$1(boxes),
7605
+ _step7;
7570
7606
  try {
7571
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
7572
- var layout = _step6.value;
7607
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
7608
+ var layout = _step7.value;
7573
7609
  var box = layout.box;
7574
7610
  var stack = stacks[layout.stack] || {
7575
7611
  count: 1,
@@ -7608,9 +7644,9 @@
7608
7644
  }
7609
7645
  }
7610
7646
  } catch (err) {
7611
- _iterator6.e(err);
7647
+ _iterator7.e(err);
7612
7648
  } finally {
7613
- _iterator6.f();
7649
+ _iterator7.f();
7614
7650
  }
7615
7651
  chartArea.x = x;
7616
7652
  chartArea.y = y;
@@ -7849,37 +7885,37 @@
7849
7885
  };
7850
7886
  }
7851
7887
  function nodeListContains(nodeList, canvas) {
7852
- var _iterator7 = _createForOfIteratorHelper$1(nodeList),
7853
- _step7;
7888
+ var _iterator8 = _createForOfIteratorHelper$1(nodeList),
7889
+ _step8;
7854
7890
  try {
7855
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
7856
- var node = _step7.value;
7891
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
7892
+ var node = _step8.value;
7857
7893
  if (node === canvas || node.contains(canvas)) {
7858
7894
  return true;
7859
7895
  }
7860
7896
  }
7861
7897
  } catch (err) {
7862
- _iterator7.e(err);
7898
+ _iterator8.e(err);
7863
7899
  } finally {
7864
- _iterator7.f();
7900
+ _iterator8.f();
7865
7901
  }
7866
7902
  }
7867
7903
  function createAttachObserver(chart, type, listener) {
7868
7904
  var canvas = chart.canvas;
7869
7905
  var observer = new MutationObserver(function (entries) {
7870
7906
  var trigger = false;
7871
- var _iterator8 = _createForOfIteratorHelper$1(entries),
7872
- _step8;
7907
+ var _iterator9 = _createForOfIteratorHelper$1(entries),
7908
+ _step9;
7873
7909
  try {
7874
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
7875
- var entry = _step8.value;
7910
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
7911
+ var entry = _step9.value;
7876
7912
  trigger = trigger || nodeListContains(entry.addedNodes, canvas);
7877
7913
  trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
7878
7914
  }
7879
7915
  } catch (err) {
7880
- _iterator8.e(err);
7916
+ _iterator9.e(err);
7881
7917
  } finally {
7882
- _iterator8.f();
7918
+ _iterator9.f();
7883
7919
  }
7884
7920
  if (trigger) {
7885
7921
  listener();
@@ -7895,18 +7931,18 @@
7895
7931
  var canvas = chart.canvas;
7896
7932
  var observer = new MutationObserver(function (entries) {
7897
7933
  var trigger = false;
7898
- var _iterator9 = _createForOfIteratorHelper$1(entries),
7899
- _step9;
7934
+ var _iterator10 = _createForOfIteratorHelper$1(entries),
7935
+ _step10;
7900
7936
  try {
7901
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
7902
- var entry = _step9.value;
7937
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
7938
+ var entry = _step10.value;
7903
7939
  trigger = trigger || nodeListContains(entry.removedNodes, canvas);
7904
7940
  trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
7905
7941
  }
7906
7942
  } catch (err) {
7907
- _iterator9.e(err);
7943
+ _iterator10.e(err);
7908
7944
  } finally {
7909
- _iterator9.f();
7945
+ _iterator10.f();
7910
7946
  }
7911
7947
  if (trigger) {
7912
7948
  listener();
@@ -9555,11 +9591,11 @@
9555
9591
  clipArea(ctx, area);
9556
9592
  }
9557
9593
  var items = this.getLabelItems(chartArea);
9558
- var _iterator10 = _createForOfIteratorHelper$1(items),
9559
- _step10;
9594
+ var _iterator11 = _createForOfIteratorHelper$1(items),
9595
+ _step11;
9560
9596
  try {
9561
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
9562
- var item = _step10.value;
9597
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
9598
+ var item = _step11.value;
9563
9599
  var renderTextOptions = item.options;
9564
9600
  var tickFont = item.font;
9565
9601
  var label = item.label;
@@ -9567,9 +9603,9 @@
9567
9603
  renderText(ctx, label, 0, y, tickFont, renderTextOptions);
9568
9604
  }
9569
9605
  } catch (err) {
9570
- _iterator10.e(err);
9606
+ _iterator11.e(err);
9571
9607
  } finally {
9572
- _iterator10.f();
9608
+ _iterator11.f();
9573
9609
  }
9574
9610
  if (area) {
9575
9611
  unclipArea(ctx);
@@ -9952,11 +9988,11 @@
9952
9988
  key: "_notify",
9953
9989
  value: function _notify(descriptors, chart, hook, args) {
9954
9990
  args = args || {};
9955
- var _iterator11 = _createForOfIteratorHelper$1(descriptors),
9956
- _step11;
9991
+ var _iterator12 = _createForOfIteratorHelper$1(descriptors),
9992
+ _step12;
9957
9993
  try {
9958
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
9959
- var descriptor = _step11.value;
9994
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
9995
+ var descriptor = _step12.value;
9960
9996
  var plugin = descriptor.plugin;
9961
9997
  var method = plugin[hook];
9962
9998
  var params = [chart, args, descriptor.options];
@@ -9965,9 +10001,9 @@
9965
10001
  }
9966
10002
  }
9967
10003
  } catch (err) {
9968
- _iterator11.e(err);
10004
+ _iterator12.e(err);
9969
10005
  } finally {
9970
- _iterator11.f();
10006
+ _iterator12.f();
9971
10007
  }
9972
10008
  return true;
9973
10009
  }
@@ -10048,11 +10084,11 @@
10048
10084
  localIds = _ref2.localIds;
10049
10085
  var result = [];
10050
10086
  var context = chart.getContext();
10051
- var _iterator12 = _createForOfIteratorHelper$1(plugins),
10052
- _step12;
10087
+ var _iterator13 = _createForOfIteratorHelper$1(plugins),
10088
+ _step13;
10053
10089
  try {
10054
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
10055
- var plugin = _step12.value;
10090
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
10091
+ var plugin = _step13.value;
10056
10092
  var id = plugin.id;
10057
10093
  var opts = getOpts(options[id], all);
10058
10094
  if (opts === null) {
@@ -10067,9 +10103,9 @@
10067
10103
  });
10068
10104
  }
10069
10105
  } catch (err) {
10070
- _iterator12.e(err);
10106
+ _iterator13.e(err);
10071
10107
  } finally {
10072
- _iterator12.f();
10108
+ _iterator13.f();
10073
10109
  }
10074
10110
  return result;
10075
10111
  }
@@ -10388,17 +10424,17 @@
10388
10424
  var subResolver = this.createResolver(scopes, context, subPrefixes);
10389
10425
  options = _attachContext(resolver, context, subResolver);
10390
10426
  }
10391
- var _iterator13 = _createForOfIteratorHelper$1(names),
10392
- _step13;
10427
+ var _iterator14 = _createForOfIteratorHelper$1(names),
10428
+ _step14;
10393
10429
  try {
10394
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
10395
- var prop = _step13.value;
10430
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
10431
+ var prop = _step14.value;
10396
10432
  result[prop] = options[prop];
10397
10433
  }
10398
10434
  } catch (err) {
10399
- _iterator13.e(err);
10435
+ _iterator14.e(err);
10400
10436
  } finally {
10401
- _iterator13.f();
10437
+ _iterator14.f();
10402
10438
  }
10403
10439
  return result;
10404
10440
  }
@@ -10442,11 +10478,11 @@
10442
10478
  var _descriptors2 = _descriptors(proxy),
10443
10479
  isScriptable = _descriptors2.isScriptable,
10444
10480
  isIndexable = _descriptors2.isIndexable;
10445
- var _iterator14 = _createForOfIteratorHelper$1(names),
10446
- _step14;
10481
+ var _iterator15 = _createForOfIteratorHelper$1(names),
10482
+ _step15;
10447
10483
  try {
10448
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
10449
- var prop = _step14.value;
10484
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
10485
+ var prop = _step15.value;
10450
10486
  var scriptable = isScriptable(prop);
10451
10487
  var indexable = isIndexable(prop);
10452
10488
  var value = (indexable || scriptable) && proxy[prop];
@@ -10455,13 +10491,13 @@
10455
10491
  }
10456
10492
  }
10457
10493
  } catch (err) {
10458
- _iterator14.e(err);
10494
+ _iterator15.e(err);
10459
10495
  } finally {
10460
- _iterator14.f();
10496
+ _iterator15.f();
10461
10497
  }
10462
10498
  return false;
10463
10499
  }
10464
- var version = "4.4.9";
10500
+ var version = "4.5.0";
10465
10501
  var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
10466
10502
  function positionIsHorizontal(position, axis) {
10467
10503
  return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
@@ -10911,21 +10947,21 @@
10911
10947
  value: function _updateHiddenIndices() {
10912
10948
  var _hiddenIndices = this._hiddenIndices;
10913
10949
  var changes = this._getUniformDataChanges() || [];
10914
- var _iterator15 = _createForOfIteratorHelper$1(changes),
10915
- _step15;
10950
+ var _iterator16 = _createForOfIteratorHelper$1(changes),
10951
+ _step16;
10916
10952
  try {
10917
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
10918
- var _step15$value = _step15.value,
10919
- method = _step15$value.method,
10920
- start = _step15$value.start,
10921
- count = _step15$value.count;
10953
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
10954
+ var _step16$value = _step16.value,
10955
+ method = _step16$value.method,
10956
+ start = _step16$value.start,
10957
+ count = _step16$value.count;
10922
10958
  var move = method === '_removeElements' ? -count : count;
10923
10959
  moveNumericKeys(_hiddenIndices, start, move);
10924
10960
  }
10925
10961
  } catch (err) {
10926
- _iterator15.e(err);
10962
+ _iterator16.e(err);
10927
10963
  } finally {
10928
- _iterator15.f();
10964
+ _iterator16.f();
10929
10965
  }
10930
10966
  }
10931
10967
  }, {
@@ -11535,6 +11571,40 @@
11535
11571
  return chart._plugins.invalidate();
11536
11572
  });
11537
11573
  }
11574
+ function clipSelf(ctx, element, endAngle) {
11575
+ var startAngle = element.startAngle,
11576
+ x = element.x,
11577
+ y = element.y,
11578
+ outerRadius = element.outerRadius,
11579
+ innerRadius = element.innerRadius,
11580
+ options = element.options;
11581
+ var borderWidth = options.borderWidth,
11582
+ borderJoinStyle = options.borderJoinStyle;
11583
+ var outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));
11584
+ ctx.beginPath();
11585
+ ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);
11586
+ if (innerRadius > 0) {
11587
+ var innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));
11588
+ ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);
11589
+ } else {
11590
+ var clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));
11591
+ if (borderJoinStyle === 'round') {
11592
+ ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);
11593
+ } else if (borderJoinStyle === 'bevel') {
11594
+ var r = 2 * clipWidth * clipWidth;
11595
+ var endX = -r * Math.cos(endAngle + PI / 2) + x;
11596
+ var endY = -r * Math.sin(endAngle + PI / 2) + y;
11597
+ var startX = r * Math.cos(startAngle + PI / 2) + x;
11598
+ var startY = r * Math.sin(startAngle + PI / 2) + y;
11599
+ ctx.lineTo(endX, endY);
11600
+ ctx.lineTo(startX, startY);
11601
+ }
11602
+ }
11603
+ ctx.closePath();
11604
+ ctx.moveTo(0, 0);
11605
+ ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
11606
+ ctx.clip('evenodd');
11607
+ }
11538
11608
  function clipArc(ctx, element, endAngle) {
11539
11609
  var startAngle = element.startAngle,
11540
11610
  pixelMargin = element.pixelMargin,
@@ -11717,7 +11787,8 @@
11717
11787
  var borderWidth = options.borderWidth,
11718
11788
  borderJoinStyle = options.borderJoinStyle,
11719
11789
  borderDash = options.borderDash,
11720
- borderDashOffset = options.borderDashOffset;
11790
+ borderDashOffset = options.borderDashOffset,
11791
+ borderRadius = options.borderRadius;
11721
11792
  var inner = options.borderAlign === 'inner';
11722
11793
  if (!borderWidth) {
11723
11794
  return;
@@ -11744,6 +11815,9 @@
11744
11815
  if (inner) {
11745
11816
  clipArc(ctx, element, endAngle);
11746
11817
  }
11818
+ if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {
11819
+ clipSelf(ctx, element, endAngle);
11820
+ }
11747
11821
  if (!fullCircles) {
11748
11822
  pathArc(ctx, element, offset, spacing, endAngle, circular);
11749
11823
  ctx.stroke();
@@ -11861,7 +11935,8 @@
11861
11935
  offset: 0,
11862
11936
  spacing: 0,
11863
11937
  angle: undefined,
11864
- circular: true
11938
+ circular: true,
11939
+ selfJoin: false
11865
11940
  });
11866
11941
  _defineProperty$1(ArcElement, "defaultRoutes", {
11867
11942
  backgroundColor: 'backgroundColor'
@@ -12027,11 +12102,11 @@
12027
12102
  var segments = line.segments,
12028
12103
  options = line.options;
12029
12104
  var segmentMethod = _getSegmentMethod(line);
12030
- var _iterator16 = _createForOfIteratorHelper$1(segments),
12031
- _step16;
12105
+ var _iterator17 = _createForOfIteratorHelper$1(segments),
12106
+ _step17;
12032
12107
  try {
12033
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
12034
- var segment = _step16.value;
12108
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
12109
+ var segment = _step17.value;
12035
12110
  setStyle(ctx, options, segment.style);
12036
12111
  ctx.beginPath();
12037
12112
  if (segmentMethod(ctx, line, segment, {
@@ -12043,9 +12118,9 @@
12043
12118
  ctx.stroke();
12044
12119
  }
12045
12120
  } catch (err) {
12046
- _iterator16.e(err);
12121
+ _iterator17.e(err);
12047
12122
  } finally {
12048
- _iterator16.f();
12123
+ _iterator17.f();
12049
12124
  }
12050
12125
  }
12051
12126
  var usePath2D = typeof Path2D === 'function';
@@ -12167,20 +12242,20 @@
12167
12242
  var loop = this._loop;
12168
12243
  start = start || 0;
12169
12244
  count = count || this.points.length - start;
12170
- var _iterator17 = _createForOfIteratorHelper$1(segments),
12171
- _step17;
12245
+ var _iterator18 = _createForOfIteratorHelper$1(segments),
12246
+ _step18;
12172
12247
  try {
12173
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
12174
- var segment = _step17.value;
12248
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
12249
+ var segment = _step18.value;
12175
12250
  loop &= segmentMethod(ctx, this, segment, {
12176
12251
  start: start,
12177
12252
  end: start + count - 1
12178
12253
  });
12179
12254
  }
12180
12255
  } catch (err) {
12181
- _iterator17.e(err);
12256
+ _iterator18.e(err);
12182
12257
  } finally {
12183
- _iterator17.f();
12258
+ _iterator18.f();
12184
12259
  }
12185
12260
  return !!loop;
12186
12261
  }
@@ -12829,11 +12904,11 @@
12829
12904
  var points = line.points;
12830
12905
  var tpoints = target.points;
12831
12906
  var parts = [];
12832
- var _iterator18 = _createForOfIteratorHelper$1(segments),
12833
- _step18;
12907
+ var _iterator19 = _createForOfIteratorHelper$1(segments),
12908
+ _step19;
12834
12909
  try {
12835
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
12836
- var segment = _step18.value;
12910
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
12911
+ var segment = _step19.value;
12837
12912
  var start = segment.start,
12838
12913
  end = segment.end;
12839
12914
  end = _findSegmentEnd(start, end, points);
@@ -12848,18 +12923,18 @@
12848
12923
  continue;
12849
12924
  }
12850
12925
  var targetSegments = _boundSegments(target, bounds);
12851
- var _iterator19 = _createForOfIteratorHelper$1(targetSegments),
12852
- _step19;
12926
+ var _iterator20 = _createForOfIteratorHelper$1(targetSegments),
12927
+ _step20;
12853
12928
  try {
12854
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
12855
- var tgt = _step19.value;
12929
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
12930
+ var tgt = _step20.value;
12856
12931
  var subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
12857
12932
  var fillSources = _boundSegment(segment, points, subBounds);
12858
- var _iterator20 = _createForOfIteratorHelper$1(fillSources),
12859
- _step20;
12933
+ var _iterator21 = _createForOfIteratorHelper$1(fillSources),
12934
+ _step21;
12860
12935
  try {
12861
- for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
12862
- var fillSource = _step20.value;
12936
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
12937
+ var fillSource = _step21.value;
12863
12938
  parts.push({
12864
12939
  source: fillSource,
12865
12940
  target: tgt,
@@ -12868,21 +12943,21 @@
12868
12943
  });
12869
12944
  }
12870
12945
  } catch (err) {
12871
- _iterator20.e(err);
12946
+ _iterator21.e(err);
12872
12947
  } finally {
12873
- _iterator20.f();
12948
+ _iterator21.f();
12874
12949
  }
12875
12950
  }
12876
12951
  } catch (err) {
12877
- _iterator19.e(err);
12952
+ _iterator20.e(err);
12878
12953
  } finally {
12879
- _iterator19.f();
12954
+ _iterator20.f();
12880
12955
  }
12881
12956
  }
12882
12957
  } catch (err) {
12883
- _iterator18.e(err);
12958
+ _iterator19.e(err);
12884
12959
  } finally {
12885
- _iterator18.f();
12960
+ _iterator19.f();
12886
12961
  }
12887
12962
  return parts;
12888
12963
  }
@@ -13287,24 +13362,41 @@
13287
13362
  clip = cfg.clip;
13288
13363
  var property = line._loop ? 'angle' : cfg.axis;
13289
13364
  ctx.save();
13290
- if (property === 'x' && below !== above) {
13291
- clipVertical(ctx, target, area.top);
13292
- fill(ctx, {
13293
- line: line,
13294
- target: target,
13295
- color: above,
13296
- scale: scale,
13297
- property: property,
13298
- clip: clip
13299
- });
13300
- ctx.restore();
13301
- ctx.save();
13302
- clipVertical(ctx, target, area.bottom);
13365
+ var fillColor = below;
13366
+ if (below !== above) {
13367
+ if (property === 'x') {
13368
+ clipVertical(ctx, target, area.top);
13369
+ fill(ctx, {
13370
+ line: line,
13371
+ target: target,
13372
+ color: above,
13373
+ scale: scale,
13374
+ property: property,
13375
+ clip: clip
13376
+ });
13377
+ ctx.restore();
13378
+ ctx.save();
13379
+ clipVertical(ctx, target, area.bottom);
13380
+ } else if (property === 'y') {
13381
+ clipHorizontal(ctx, target, area.left);
13382
+ fill(ctx, {
13383
+ line: line,
13384
+ target: target,
13385
+ color: below,
13386
+ scale: scale,
13387
+ property: property,
13388
+ clip: clip
13389
+ });
13390
+ ctx.restore();
13391
+ ctx.save();
13392
+ clipHorizontal(ctx, target, area.right);
13393
+ fillColor = above;
13394
+ }
13303
13395
  }
13304
13396
  fill(ctx, {
13305
13397
  line: line,
13306
13398
  target: target,
13307
- color: below,
13399
+ color: fillColor,
13308
13400
  scale: scale,
13309
13401
  property: property,
13310
13402
  clip: clip
@@ -13317,11 +13409,11 @@
13317
13409
  var first = true;
13318
13410
  var lineLoop = false;
13319
13411
  ctx.beginPath();
13320
- var _iterator21 = _createForOfIteratorHelper$1(segments),
13321
- _step21;
13412
+ var _iterator22 = _createForOfIteratorHelper$1(segments),
13413
+ _step22;
13322
13414
  try {
13323
- for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
13324
- var segment = _step21.value;
13415
+ for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
13416
+ var segment = _step22.value;
13325
13417
  var start = segment.start,
13326
13418
  end = segment.end;
13327
13419
  var firstPoint = points[start];
@@ -13343,14 +13435,54 @@
13343
13435
  }
13344
13436
  }
13345
13437
  } catch (err) {
13346
- _iterator21.e(err);
13438
+ _iterator22.e(err);
13347
13439
  } finally {
13348
- _iterator21.f();
13440
+ _iterator22.f();
13349
13441
  }
13350
13442
  ctx.lineTo(target.first().x, clipY);
13351
13443
  ctx.closePath();
13352
13444
  ctx.clip();
13353
13445
  }
13446
+ function clipHorizontal(ctx, target, clipX) {
13447
+ var segments = target.segments,
13448
+ points = target.points;
13449
+ var first = true;
13450
+ var lineLoop = false;
13451
+ ctx.beginPath();
13452
+ var _iterator23 = _createForOfIteratorHelper$1(segments),
13453
+ _step23;
13454
+ try {
13455
+ for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
13456
+ var segment = _step23.value;
13457
+ var start = segment.start,
13458
+ end = segment.end;
13459
+ var firstPoint = points[start];
13460
+ var lastPoint = points[_findSegmentEnd(start, end, points)];
13461
+ if (first) {
13462
+ ctx.moveTo(firstPoint.x, firstPoint.y);
13463
+ first = false;
13464
+ } else {
13465
+ ctx.lineTo(clipX, firstPoint.y);
13466
+ ctx.lineTo(firstPoint.x, firstPoint.y);
13467
+ }
13468
+ lineLoop = !!target.pathSegment(ctx, segment, {
13469
+ move: lineLoop
13470
+ });
13471
+ if (lineLoop) {
13472
+ ctx.closePath();
13473
+ } else {
13474
+ ctx.lineTo(clipX, lastPoint.y);
13475
+ }
13476
+ }
13477
+ } catch (err) {
13478
+ _iterator23.e(err);
13479
+ } finally {
13480
+ _iterator23.f();
13481
+ }
13482
+ ctx.lineTo(clipX, target.first().y);
13483
+ ctx.closePath();
13484
+ ctx.clip();
13485
+ }
13354
13486
  function fill(ctx, cfg) {
13355
13487
  var line = cfg.line,
13356
13488
  target = cfg.target,
@@ -13359,15 +13491,15 @@
13359
13491
  scale = cfg.scale,
13360
13492
  clip = cfg.clip;
13361
13493
  var segments = _segments(line, target, property);
13362
- var _iterator22 = _createForOfIteratorHelper$1(segments),
13363
- _step22;
13494
+ var _iterator24 = _createForOfIteratorHelper$1(segments),
13495
+ _step24;
13364
13496
  try {
13365
- for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
13366
- var _step22$value = _step22.value,
13367
- src = _step22$value.source,
13368
- tgt = _step22$value.target,
13369
- start = _step22$value.start,
13370
- end = _step22$value.end;
13497
+ for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
13498
+ var _step24$value = _step24.value,
13499
+ src = _step24$value.source,
13500
+ tgt = _step24$value.target,
13501
+ start = _step24$value.start,
13502
+ end = _step24$value.end;
13371
13503
  var _src$style = src.style,
13372
13504
  _src$style2 = _src$style === void 0 ? {} : _src$style,
13373
13505
  _src$style2$backgroun = _src$style2.backgroundColor,
@@ -13399,9 +13531,9 @@
13399
13531
  ctx.restore();
13400
13532
  }
13401
13533
  } catch (err) {
13402
- _iterator22.e(err);
13534
+ _iterator24.e(err);
13403
13535
  } finally {
13404
- _iterator22.f();
13536
+ _iterator24.f();
13405
13537
  }
13406
13538
  }
13407
13539
  function clipBounds(ctx, scale, clip, bounds) {
@@ -13725,11 +13857,11 @@
13725
13857
  if (this.isHorizontal()) {
13726
13858
  var row = 0;
13727
13859
  var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
13728
- var _iterator23 = _createForOfIteratorHelper$1(hitboxes),
13729
- _step23;
13860
+ var _iterator25 = _createForOfIteratorHelper$1(hitboxes),
13861
+ _step25;
13730
13862
  try {
13731
- for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
13732
- var hitbox = _step23.value;
13863
+ for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
13864
+ var hitbox = _step25.value;
13733
13865
  if (row !== hitbox.row) {
13734
13866
  row = hitbox.row;
13735
13867
  left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
@@ -13739,18 +13871,18 @@
13739
13871
  left += hitbox.width + padding;
13740
13872
  }
13741
13873
  } catch (err) {
13742
- _iterator23.e(err);
13874
+ _iterator25.e(err);
13743
13875
  } finally {
13744
- _iterator23.f();
13876
+ _iterator25.f();
13745
13877
  }
13746
13878
  } else {
13747
13879
  var col = 0;
13748
13880
  var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
13749
- var _iterator24 = _createForOfIteratorHelper$1(hitboxes),
13750
- _step24;
13881
+ var _iterator26 = _createForOfIteratorHelper$1(hitboxes),
13882
+ _step26;
13751
13883
  try {
13752
- for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
13753
- var _hitbox = _step24.value;
13884
+ for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
13885
+ var _hitbox = _step26.value;
13754
13886
  if (_hitbox.col !== col) {
13755
13887
  col = _hitbox.col;
13756
13888
  top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
@@ -13761,9 +13893,9 @@
13761
13893
  top += _hitbox.height + padding;
13762
13894
  }
13763
13895
  } catch (err) {
13764
- _iterator24.e(err);
13896
+ _iterator26.e(err);
13765
13897
  } finally {
13766
- _iterator24.f();
13898
+ _iterator26.f();
13767
13899
  }
13768
13900
  }
13769
13901
  }
@@ -15491,21 +15623,21 @@
15491
15623
  var added = this._addedLabels;
15492
15624
  if (added.length) {
15493
15625
  var labels = this.getLabels();
15494
- var _iterator25 = _createForOfIteratorHelper$1(added),
15495
- _step25;
15626
+ var _iterator27 = _createForOfIteratorHelper$1(added),
15627
+ _step27;
15496
15628
  try {
15497
- for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
15498
- var _step25$value = _step25.value,
15499
- _index3 = _step25$value.index,
15500
- label = _step25$value.label;
15629
+ for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
15630
+ var _step27$value = _step27.value,
15631
+ _index3 = _step27$value.index,
15632
+ label = _step27$value.label;
15501
15633
  if (labels[_index3] === label) {
15502
15634
  labels.splice(_index3, 1);
15503
15635
  }
15504
15636
  }
15505
15637
  } catch (err) {
15506
- _iterator25.e(err);
15638
+ _iterator27.e(err);
15507
15639
  } finally {
15508
- _iterator25.f();
15640
+ _iterator27.f();
15509
15641
  }
15510
15642
  this._addedLabels = [];
15511
15643
  }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chartkick
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.5
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-04-15 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  email: andrew@ankane.org
13
13
  executables: []
@@ -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.1'
45
+ version: '3.2'
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: 3.6.2
52
+ rubygems_version: 3.6.7
53
53
  specification_version: 4
54
54
  summary: Create beautiful JavaScript charts with one line of Ruby
55
55
  test_files: []