evui 3.4.128 → 3.4.129

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.
@@ -11174,7 +11174,7 @@ module.exports = exports;
11174
11174
  /***/ "9224":
11175
11175
  /***/ (function(module) {
11176
11176
 
11177
- module.exports = JSON.parse("{\"a\":\"3.4.128\"}");
11177
+ module.exports = JSON.parse("{\"a\":\"3.4.129\"}");
11178
11178
 
11179
11179
  /***/ }),
11180
11180
 
@@ -38503,26 +38503,26 @@ var es_string_match = __webpack_require__("466d");
38503
38503
  return value;
38504
38504
  }
38505
38505
 
38506
- var assignLabelWith = function assignLabelWith(v, target, lb) {
38507
- if (v % target === 0) {
38508
- return "".concat((v / target).toFixed(decimalPoint)).concat(lb);
38509
- }
38506
+ var isNegative = value < 0;
38507
+ var absValue = Math.abs(value);
38510
38508
 
38511
- return "".concat((v / target).toFixed(1)).concat(lb);
38512
- };
38513
-
38514
- if (value >= quad) {
38515
- label = assignLabelWith(value, quad, 'P');
38516
- } else if (value >= trill) {
38517
- label = assignLabelWith(value, trill, 'T');
38518
- } else if (value >= billi) {
38519
- label = assignLabelWith(value, billi, 'G');
38520
- } else if (value >= milli) {
38521
- label = assignLabelWith(value, milli, 'M');
38522
- } else if (value >= killo) {
38523
- label = assignLabelWith(value, 1000, 'K');
38509
+ var assignLabelWith = function assignLabelWith(v, target, lb) {
38510
+ var result = v % target === 0 ? "".concat((v / target).toFixed(decimalPoint)).concat(lb) : "".concat((v / target).toFixed(1)).concat(lb);
38511
+ return isNegative ? "-".concat(result) : result;
38512
+ };
38513
+
38514
+ if (absValue >= quad) {
38515
+ label = assignLabelWith(absValue, quad, 'P');
38516
+ } else if (absValue >= trill) {
38517
+ label = assignLabelWith(absValue, trill, 'T');
38518
+ } else if (absValue >= billi) {
38519
+ label = assignLabelWith(absValue, billi, 'G');
38520
+ } else if (absValue >= milli) {
38521
+ label = assignLabelWith(absValue, milli, 'M');
38522
+ } else if (absValue >= killo) {
38523
+ label = assignLabelWith(absValue, 1000, 'K');
38524
38524
  } else {
38525
- label = value.toFixed(decimalPoint);
38525
+ label = isNegative ? "-".concat(absValue.toFixed(decimalPoint)) : value.toFixed(decimalPoint);
38526
38526
  }
38527
38527
 
38528
38528
  return label;
@@ -38796,21 +38796,23 @@ var modules = {
38796
38796
  seriesIDs.forEach(function (seriesID) {
38797
38797
  var series = _this.seriesList[seriesID];
38798
38798
  var sData = data[seriesID];
38799
+ var passingValue = series === null || series === void 0 ? void 0 : series.passingValue;
38799
38800
 
38800
38801
  if (series && sData) {
38801
38802
  series.data = _this.addSeriesDSforScatter(sData);
38802
- series.minMax = _this.getSeriesMinMax(series.data);
38803
+ series.minMax = _this.getSeriesMinMax(series.data, passingValue);
38803
38804
  }
38804
38805
  });
38805
38806
  } else if (typeKey === 'heatMap') {
38806
38807
  seriesIDs.forEach(function (seriesID) {
38807
38808
  var series = _this.seriesList[seriesID];
38809
+ var passingValue = series === null || series === void 0 ? void 0 : series.passingValue;
38808
38810
  var sData = data[seriesID];
38809
38811
 
38810
38812
  if (series && sData) {
38811
38813
  series.labels = label;
38812
38814
  series.data = _this.addSeriesDSForHeatMap(sData);
38813
- series.minMax = _this.getSeriesMinMax(series.data);
38815
+ series.minMax = _this.getSeriesMinMax(series.data, passingValue);
38814
38816
  series.valueOpt = _this.getSeriesValueOptForHeatMap(series);
38815
38817
  }
38816
38818
  });
@@ -38842,7 +38844,7 @@ var modules = {
38842
38844
  series.data = _this.addSeriesDS(sData, label, series.isExistGrp);
38843
38845
  }
38844
38846
 
38845
- series.minMax = _this.getSeriesMinMax(series.data);
38847
+ series.minMax = _this.getSeriesMinMax(series.data, series.passingValue);
38846
38848
  }
38847
38849
  });
38848
38850
  }
@@ -39238,17 +39240,19 @@ var modules = {
39238
39240
  var isHorizontal = this.options.horizontal;
39239
39241
  var sdata = [];
39240
39242
 
39241
- var getBaseDataPosition = function getBaseDataPosition(baseIndex, dataIndex) {
39243
+ var getBaseDataPosition = function getBaseDataPosition(baseIndex, dataIndex, curr) {
39242
39244
  var nextBaseSeriesIndex = baseIndex - 1;
39243
39245
  var baseSeries = _this4.seriesList[bsIds[baseIndex]];
39244
39246
  var baseDataList = baseSeries.data;
39245
39247
  var baseData = baseDataList[dataIndex];
39246
39248
  var position = isHorizontal ? baseData === null || baseData === void 0 ? void 0 : baseData.x : baseData === null || baseData === void 0 ? void 0 : baseData.y;
39247
- var isPassingValue = baseSeries.passingValue === (baseData === null || baseData === void 0 ? void 0 : baseData.o);
39249
+ var baseValue = baseData === null || baseData === void 0 ? void 0 : baseData.o;
39250
+ var isPassingValue = !helpers_util.isNullOrUndefined(baseSeries === null || baseSeries === void 0 ? void 0 : baseSeries.passingValue) && (baseSeries === null || baseSeries === void 0 ? void 0 : baseSeries.passingValue) === baseValue;
39251
+ var isSameSign = curr >= 0 && baseValue >= 0 || curr < 0 && baseValue < 0;
39248
39252
 
39249
- if (isPassingValue || position == null || !baseSeries.show) {
39253
+ if (isPassingValue || position == null || !isSameSign || !baseSeries.show) {
39250
39254
  if (nextBaseSeriesIndex > -1) {
39251
- return getBaseDataPosition(nextBaseSeriesIndex, dataIndex);
39255
+ return getBaseDataPosition(nextBaseSeriesIndex, dataIndex, curr);
39252
39256
  }
39253
39257
 
39254
39258
  return 0;
@@ -39259,7 +39263,7 @@ var modules = {
39259
39263
 
39260
39264
  data.forEach(function (curr, index) {
39261
39265
  var baseIndex = bsIds.length - 1 < 0 ? 0 : bsIds.length - 1;
39262
- var bdata = getBaseDataPosition(baseIndex, index); // base(previous) series data
39266
+ var bdata = getBaseDataPosition(baseIndex, index, curr); // base(previous) series data
39263
39267
 
39264
39268
  var odata = curr; // current series original data
39265
39269
 
@@ -39442,7 +39446,7 @@ var modules = {
39442
39446
  *
39443
39447
  * @returns {object} min/max info for series
39444
39448
  */
39445
- getSeriesMinMax: function getSeriesMinMax(data) {
39449
+ getSeriesMinMax: function getSeriesMinMax(data, passingValue) {
39446
39450
  var def = {
39447
39451
  minX: null,
39448
39452
  minY: null,
@@ -39453,22 +39457,24 @@ var modules = {
39453
39457
  var isHorizontal = this.options.horizontal;
39454
39458
 
39455
39459
  if (data.length) {
39460
+ var usePassingValue = !helpers_util.isNullOrUndefined(passingValue);
39456
39461
  return data.reduce(function (acc, p, index) {
39457
- var _p$x, _p$y;
39462
+ var _p$x, _p$y, _p$o;
39458
39463
 
39459
39464
  var minmax = acc;
39460
39465
  var px = ((_p$x = p.x) === null || _p$x === void 0 ? void 0 : _p$x.value) || p.x;
39461
39466
  var py = ((_p$y = p.y) === null || _p$y === void 0 ? void 0 : _p$y.value) || p.y;
39467
+ var po = ((_p$o = p.o) === null || _p$o === void 0 ? void 0 : _p$o.value) || p.o;
39462
39468
 
39463
- if (px <= minmax.minX) {
39469
+ if (usePassingValue ? po !== passingValue && px <= minmax.minX : px <= minmax.minX) {
39464
39470
  minmax.minX = px === null ? 0 : px;
39465
39471
  }
39466
39472
 
39467
- if (py <= minmax.minY) {
39473
+ if (usePassingValue ? po !== passingValue && py <= minmax.minY : py <= minmax.minY) {
39468
39474
  minmax.minY = py === null ? 0 : py;
39469
39475
  }
39470
39476
 
39471
- if (px >= minmax.maxX) {
39477
+ if (usePassingValue ? po !== passingValue && px >= minmax.maxX : px >= minmax.maxX) {
39472
39478
  minmax.maxX = px === null ? 0 : px;
39473
39479
 
39474
39480
  if (isHorizontal && px !== null) {
@@ -39477,7 +39483,7 @@ var modules = {
39477
39483
  }
39478
39484
  }
39479
39485
 
39480
- if (py >= minmax.maxY) {
39486
+ if (usePassingValue ? po !== passingValue && py >= minmax.maxY : py >= minmax.maxY) {
39481
39487
  minmax.maxY = py === null ? 0 : py;
39482
39488
 
39483
39489
  if (!isHorizontal && py !== null) {
@@ -40231,14 +40237,25 @@ var modules = {
40231
40237
  }
40232
40238
  }
40233
40239
 
40234
- if (smm.maxX >= minmax.x[axisX].max) {
40240
+ var isExistGrp = _this10.seriesList[key].isExistGrp;
40241
+ var maxXisNegative = minmax.x[axisX].max < 0;
40242
+
40243
+ if (isExistGrp && maxXisNegative) {
40244
+ minmax.x[axisX].max = smm.maxX;
40245
+ minmax.x[axisX].maxSID = key;
40246
+ } else if (!minmax.x[axisX].max || smm.maxX >= minmax.x[axisX].max) {
40235
40247
  minmax.x[axisX].max = smm.maxX;
40236
40248
  minmax.x[axisX].maxSID = key;
40237
40249
  }
40238
40250
 
40239
- if (smm.maxY >= minmax.y[axisY].max) {
40251
+ var maxYisNegative = minmax.y[axisY].max < 0;
40252
+
40253
+ if (isExistGrp && maxYisNegative) {
40254
+ minmax.y[axisY].max = smm.maxY;
40255
+ minmax.y[axisY].maxSID = key;
40256
+ } else if (!minmax.y[axisY].max || smm.maxY >= minmax.y[axisY].max) {
40240
40257
  minmax.y[axisY].max = smm.maxY;
40241
- minmax.y[axisX].maxSID = key;
40258
+ minmax.y[axisY].maxSID = key;
40242
40259
  }
40243
40260
  }
40244
40261
 
@@ -41699,6 +41716,7 @@ var TIME_INTERVALS = {
41699
41716
 
41700
41717
 
41701
41718
 
41719
+
41702
41720
  var element_line_Line = /*#__PURE__*/function () {
41703
41721
  function Line(sId, opt, sIdx) {
41704
41722
  var _this = this;
@@ -41832,7 +41850,6 @@ var element_line_Line = /*#__PURE__*/function () {
41832
41850
  ctx.setLineDash(this.segments);
41833
41851
  }
41834
41852
 
41835
- var endPoint = chartRect.y2 - labelOffset.bottom;
41836
41853
  var isLinearInterpolation = this.useLinearInterpolation();
41837
41854
  var barAreaByCombo = 0;
41838
41855
  var minmaxX = axesSteps.x[this.xAxisIndex];
@@ -41855,8 +41872,12 @@ var element_line_Line = /*#__PURE__*/function () {
41855
41872
 
41856
41873
  var getYPos = function getYPos(val) {
41857
41874
  return helpers_canvas.calculateY(val, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
41858
- }; // draw line
41875
+ };
41859
41876
 
41877
+ var includeNegativeValue = this.data.some(function (data) {
41878
+ return data.o < 0;
41879
+ });
41880
+ var endPoint = includeNegativeValue ? getYPos(0) : chartRect.y2 - labelOffset.bottom; // draw line
41860
41881
 
41861
41882
  var prevValid;
41862
41883
  this.data.forEach(function (curr) {
@@ -41916,9 +41937,10 @@ var element_line_Line = /*#__PURE__*/function () {
41916
41937
  }
41917
41938
  });
41918
41939
  var gradient = ctx.createLinearGradient(0, chartRect.y2, 0, maxValueYPos);
41919
- gradient.addColorStop(0, fillColor);
41940
+ var mainGradientColor = extent.opacity < 1 ? fillColor : mainColor;
41941
+ gradient.addColorStop(0, includeNegativeValue ? mainGradientColor : fillColor);
41920
41942
  gradient.addColorStop(0.5, fillColor);
41921
- gradient.addColorStop(1, extent.opacity < 1 ? fillColor : mainColor);
41943
+ gradient.addColorStop(1, mainGradientColor);
41922
41944
  ctx.fillStyle = gradient;
41923
41945
  } else {
41924
41946
  ctx.fillStyle = fillColor;
@@ -41986,7 +42008,7 @@ var element_line_Line = /*#__PURE__*/function () {
41986
42008
 
41987
42009
  var nextData = _this2.data[jx];
41988
42010
  var xp = getXPos(nextData.x);
41989
- var bp = (_getYPos2 = getYPos(nextData.b)) !== null && _getYPos2 !== void 0 ? _getYPos2 : endPoint;
42011
+ var bp = (_getYPos2 = getYPos(nextData.b)) !== null && _getYPos2 !== void 0 ? _getYPos2 : getYPos(0);
41990
42012
  ctx.lineTo(xp, bp);
41991
42013
  }
41992
42014
 
@@ -42097,22 +42119,23 @@ var element_line_Line = /*#__PURE__*/function () {
42097
42119
 
42098
42120
  var s = 0;
42099
42121
  var e = gdata.length - 1;
42100
- var xpInterval = ((_gdata$ = gdata[1]) === null || _gdata$ === void 0 ? void 0 : _gdata$.xp) - gdata[0].xp < 6 ? 1.5 : 6;
42122
+ var gap = Math.ceil(Math.abs(((_gdata$ = gdata[1]) === null || _gdata$ === void 0 ? void 0 : _gdata$.xp) - gdata[0].xp) / 2) || 0;
42123
+ var xpInterval = Math.max(gap, 6);
42101
42124
 
42102
42125
  while (s <= e) {
42103
42126
  var m = Math.floor((s + e) / 2);
42104
42127
  var x = gdata[m].xp;
42105
42128
  var y = gdata[m].yp;
42106
42129
 
42107
- if (x - xpInterval < xp && xp < x + xpInterval) {
42130
+ if (x - xpInterval <= xp && xp <= x + xpInterval) {
42108
42131
  var _gdata$m, _gdata$xp, _gdata, _gdata2, _gdata3;
42109
42132
 
42110
42133
  var curXpInterval = ((_gdata$m = gdata[m]) === null || _gdata$m === void 0 ? void 0 : _gdata$m.xp) - ((_gdata$xp = (_gdata = gdata[m - 1]) === null || _gdata === void 0 ? void 0 : _gdata.xp) !== null && _gdata$xp !== void 0 ? _gdata$xp : 0);
42111
42134
 
42112
42135
  if ((_gdata2 = gdata[m - 1]) !== null && _gdata2 !== void 0 && _gdata2.xp && (_gdata3 = gdata[m + 1]) !== null && _gdata3 !== void 0 && _gdata3.xp && curXpInterval > 0) {
42113
- var leftXp = xp - gdata[m - 1].xp;
42136
+ var leftXp = Math.abs(xp - gdata[m - 1].xp);
42114
42137
  var midXp = Math.abs(xp - gdata[m].xp);
42115
- var rightXp = gdata[m + 1].xp - xp;
42138
+ var rightXp = Math.abs(gdata[m + 1].xp - xp);
42116
42139
 
42117
42140
  if (Math.abs(this.beforeMouseXp - xp) >= curXpInterval - SPARE_XP && (this.beforeFindItemIndex === m || midXp === rightXp || midXp === leftXp)) {
42118
42141
  if (this.beforeMouseXp - xp > 0) {
@@ -42760,8 +42783,12 @@ var element_bar_Bar = /*#__PURE__*/function () {
42760
42783
 
42761
42784
  var xArea = chartRect.chartWidth - (labelOffset.left + labelOffset.right);
42762
42785
  var yArea = chartRect.chartHeight - (labelOffset.top + labelOffset.bottom);
42763
- var xsp = chartRect.x1 + labelOffset.left;
42764
- var ysp = chartRect.y2 - labelOffset.bottom;
42786
+ var xAxisPosition = chartRect.x1 + labelOffset.left;
42787
+ var yAxisPosition = chartRect.y2 - labelOffset.bottom;
42788
+ var xZeroPosition = helpers_canvas.calculateX(0, minmaxX.graphMin, minmaxX.graphMax, xArea);
42789
+ var yZeroPosition = helpers_canvas.calculateY(0, minmaxY.graphMin, minmaxY.graphMax, yArea);
42790
+ var xsp = isHorizontal ? xAxisPosition + xZeroPosition : xAxisPosition;
42791
+ var ysp = isHorizontal ? yAxisPosition : yAxisPosition + yZeroPosition;
42765
42792
  var dArea = isHorizontal ? yArea : xArea;
42766
42793
  var cArea = dArea / (totalCount || 1);
42767
42794
  var cPad;
@@ -42825,7 +42852,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42825
42852
  categoryPoint = ysp - cArea * screenIndex - cPad;
42826
42853
  } else {
42827
42854
  categoryPoint = xsp + cArea * screenIndex + cPad;
42828
- }
42855
+ } // 기본 위치 설정
42856
+
42829
42857
 
42830
42858
  if (isHorizontal) {
42831
42859
  x = xsp;
@@ -42833,22 +42861,30 @@ var element_bar_Bar = /*#__PURE__*/function () {
42833
42861
  } else {
42834
42862
  x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42835
42863
  y = ysp;
42836
- }
42864
+ } // 너비 / 높이 계산, 스택의 경우 위치 값 재계산
42865
+
42837
42866
 
42838
42867
  if (isHorizontal) {
42868
+ var barValue = item.b ? item.o : item.x;
42869
+ w = helpers_canvas.calculateX(barValue, minmaxX.graphMin, minmaxX.graphMax, xArea, -xZeroPosition);
42870
+
42839
42871
  if (item.b) {
42840
- w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42841
- x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42842
- } else {
42843
- w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42872
+ x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp - xZeroPosition);
42844
42873
  }
42845
- } else if (item.b) {
42846
- // vertical stack bar chart
42847
- h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42848
- y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42874
+
42875
+ var minimumBarWidth = barValue > 0 ? -1 : 1;
42876
+ w = barValue && Math.abs(w) === 0 ? minimumBarWidth : w;
42849
42877
  } else {
42850
- // vertical bar chart
42851
- h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42878
+ var _barValue = item.b ? item.o : item.y;
42879
+
42880
+ h = helpers_canvas.calculateY(_barValue, minmaxY.graphMin, minmaxY.graphMax, yArea, -yZeroPosition);
42881
+
42882
+ if (item.b) {
42883
+ y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp - yZeroPosition);
42884
+ }
42885
+
42886
+ var minimumBarHeight = _barValue > 0 ? -1 : 1;
42887
+ h = _barValue && Math.abs(h) === 0 ? minimumBarHeight : h;
42852
42888
  }
42853
42889
 
42854
42890
  var barColor = item.dataColor || this.color;
@@ -43137,10 +43173,10 @@ var element_bar_Bar = /*#__PURE__*/function () {
43137
43173
  align = _this$showValue.align,
43138
43174
  formatter = _this$showValue.formatter,
43139
43175
  decimalPoint = _this$showValue.decimalPoint;
43140
- var x = positions.x,
43141
- y = positions.y,
43142
- w = positions.w,
43143
- h = positions.h;
43176
+ var barX = positions.x,
43177
+ barY = positions.y,
43178
+ barWidth = positions.w,
43179
+ barHeight = positions.h;
43144
43180
  var ctx = context;
43145
43181
  ctx.save();
43146
43182
  ctx.beginPath();
@@ -43175,25 +43211,27 @@ var element_bar_Bar = /*#__PURE__*/function () {
43175
43211
  formattedTxt = (_Util$labelSignFormat = helpers_util.labelSignFormat(value, decimalPoint)) !== null && _Util$labelSignFormat !== void 0 ? _Util$labelSignFormat : '';
43176
43212
  }
43177
43213
 
43214
+ var isNegativeValue = value < 0;
43178
43215
  var textWidth = Math.round(ctx.measureText(formattedTxt).width);
43179
- var textHeight = fontSize + 4;
43180
- var minXPos = x + 10;
43181
- var minYPos = y - 10;
43182
- var widthFreeSpaceToDraw = w - 10;
43183
- var heightFreeSpaceToDraw = Math.abs(h + 10);
43184
- var centerX = x + w / 2 <= minXPos ? minXPos : x + w / 2;
43185
- var centerY = y + h / 2 >= minYPos ? minYPos : y + h / 2;
43186
- var centerYHorizontal = isHighlight ? y + h / 2 : y - h / 2;
43216
+ var textHeight = fontSize; // fontSize와 textHeight는 같을 수 없지만, 정확히 구할 필요 없음
43217
+
43218
+ var GAP = 10;
43219
+ var minXPos = isNegativeValue ? barX - GAP : barX + GAP;
43220
+ var minYPos = isNegativeValue ? barY + GAP : barY - GAP;
43221
+ var centerXOnBar = barX + barWidth / 2;
43222
+ var centerYOnBar = isHighlight ? barY + barHeight / 2 : barY - barHeight / 2;
43223
+ var drawableBarWidth = Math.abs(barWidth) - GAP;
43224
+ var drawableBarHeight = Math.abs(barHeight) - GAP;
43187
43225
 
43188
43226
  switch (align) {
43189
43227
  case 'start':
43190
43228
  {
43191
- if (isHorizontal) {
43192
- if (textWidth < widthFreeSpaceToDraw) {
43193
- ctx.fillText(formattedTxt, minXPos, centerYHorizontal);
43194
- }
43195
- } else if (textHeight < heightFreeSpaceToDraw) {
43196
- ctx.fillText(formattedTxt, centerX, minYPos);
43229
+ if (isHorizontal && textWidth < drawableBarWidth) {
43230
+ var xPos = isNegativeValue ? minXPos - textWidth : minXPos;
43231
+ ctx.fillText(formattedTxt, xPos, centerYOnBar);
43232
+ } else if (!isHorizontal && textHeight < drawableBarHeight) {
43233
+ var yPos = isNegativeValue ? barY + GAP : barY - GAP;
43234
+ ctx.fillText(formattedTxt, centerXOnBar, yPos);
43197
43235
  }
43198
43236
 
43199
43237
  break;
@@ -43201,12 +43239,10 @@ var element_bar_Bar = /*#__PURE__*/function () {
43201
43239
 
43202
43240
  case 'center':
43203
43241
  {
43204
- if (isHorizontal) {
43205
- if (textWidth < widthFreeSpaceToDraw) {
43206
- ctx.fillText(formattedTxt, centerX, centerYHorizontal);
43207
- }
43208
- } else if (textHeight < heightFreeSpaceToDraw) {
43209
- ctx.fillText(formattedTxt, centerX, centerY);
43242
+ if (isHorizontal && textWidth < drawableBarWidth) {
43243
+ ctx.fillText(formattedTxt, centerXOnBar, centerYOnBar);
43244
+ } else if (!isHorizontal && textHeight < drawableBarHeight) {
43245
+ ctx.fillText(formattedTxt, centerXOnBar, barY + barHeight / 2);
43210
43246
  }
43211
43247
 
43212
43248
  break;
@@ -43220,9 +43256,26 @@ var element_bar_Bar = /*#__PURE__*/function () {
43220
43256
  }
43221
43257
 
43222
43258
  if (isHorizontal) {
43223
- ctx.fillText(formattedTxt, minXPos + w, centerYHorizontal);
43259
+ var minXOnChart = this.chartRect.x1 + this.labelOffset.left;
43260
+ var maxXOnChart = this.chartRect.x2 - this.labelOffset.right;
43261
+
43262
+ if (isNegativeValue) {
43263
+ var _xPos = barX - GAP + barWidth - textWidth;
43264
+
43265
+ if (_xPos > minXOnChart) {
43266
+ ctx.fillText(formattedTxt, _xPos, centerYOnBar);
43267
+ }
43268
+ } else {
43269
+ var _xPos2 = barX + GAP + barWidth;
43270
+
43271
+ if (_xPos2 + textWidth < maxXOnChart) {
43272
+ ctx.fillText(formattedTxt, _xPos2, centerYOnBar);
43273
+ }
43274
+ }
43224
43275
  } else {
43225
- ctx.fillText(formattedTxt, centerX, y + h - textHeight / 2);
43276
+ var _yPos = isNegativeValue ? barY + barHeight + GAP : barY + barHeight - GAP;
43277
+
43278
+ ctx.fillText(formattedTxt, centerXOnBar, _yPos);
43226
43279
  }
43227
43280
 
43228
43281
  break;
@@ -43231,14 +43284,22 @@ var element_bar_Bar = /*#__PURE__*/function () {
43231
43284
  default:
43232
43285
  case 'end':
43233
43286
  {
43234
- if (isHorizontal) {
43235
- if (textWidth < widthFreeSpaceToDraw) {
43236
- var xPos = x + w - textWidth * 2;
43237
- ctx.fillText(formattedTxt, xPos <= minXPos ? minXPos : xPos, centerYHorizontal);
43287
+ if (isHorizontal && textWidth < drawableBarWidth) {
43288
+ var _xPos3 = isNegativeValue ? barX + barWidth + GAP : barX + barWidth - textWidth - GAP;
43289
+
43290
+ ctx.fillText(formattedTxt, _xPos3, centerYOnBar);
43291
+ } else if (!isHorizontal) {
43292
+ if (isNegativeValue) {
43293
+ var _yPos2 = barY + barHeight - GAP;
43294
+
43295
+ if (_yPos2 > minYPos) {
43296
+ ctx.fillText(formattedTxt, centerXOnBar, _yPos2);
43297
+ }
43298
+ } else if (textHeight < drawableBarHeight) {
43299
+ var _yPos3 = barY + barHeight + GAP;
43300
+
43301
+ ctx.fillText(formattedTxt, centerXOnBar, _yPos3);
43238
43302
  }
43239
- } else if (textHeight < heightFreeSpaceToDraw) {
43240
- var yPos = y + h + textHeight;
43241
- ctx.fillText(formattedTxt, centerX, yPos >= minYPos ? minYPos : yPos);
43242
43303
  }
43243
43304
 
43244
43305
  break;
@@ -43295,28 +43356,50 @@ var element_bar_Bar = /*#__PURE__*/function () {
43295
43356
  ctx.beginPath();
43296
43357
  ctx.moveTo(x, y);
43297
43358
 
43359
+ if (Math.abs(w) < r * 2) {
43360
+ r = Math.abs(w) / 2;
43361
+ }
43362
+
43363
+ if (Math.abs(h) < r * 2) {
43364
+ r = Math.abs(h) / 2;
43365
+ }
43366
+
43298
43367
  if (isHorizontal) {
43299
- if (h < r * 2) {
43300
- r = h / 2;
43368
+ var isNegativeValue = w < 0;
43369
+
43370
+ if (isNegativeValue) {
43371
+ w += r;
43372
+ ctx.lineTo(x + w, y);
43373
+ ctx.arcTo(x + w - r, y, x + w - r, y - r, r);
43374
+ ctx.arcTo(x + w - r, y - h, x + w, y - h, r);
43375
+ ctx.lineTo(x, y - h);
43376
+ ctx.lineTo(x, y);
43377
+ } else {
43378
+ w -= r;
43379
+ ctx.lineTo(x + w, y);
43380
+ ctx.arcTo(x + w + r, y, x + w + r, y - r, r);
43381
+ ctx.arcTo(x + w + r, y - h, x + w, y - h, r);
43382
+ ctx.lineTo(x, y - h);
43383
+ ctx.lineTo(x, y);
43301
43384
  }
43302
-
43303
- w -= r;
43304
- ctx.lineTo(x + w, y);
43305
- ctx.arcTo(x + w + r, y, x + w + r, y - r, r);
43306
- ctx.arcTo(x + w + r, y - h, x + w, y - h, r);
43307
- ctx.lineTo(x, y - h);
43308
- ctx.lineTo(x, y);
43309
43385
  } else {
43310
- if (w < r * 2) {
43311
- r = w / 2;
43386
+ var _isNegativeValue = h > 0;
43387
+
43388
+ if (_isNegativeValue) {
43389
+ h -= r;
43390
+ ctx.lineTo(x + w, y);
43391
+ ctx.lineTo(x + w, y + h);
43392
+ ctx.arcTo(x + w, y + h + r, x - w + r, y + h + r, r);
43393
+ ctx.arcTo(x, y + h + r, x, y + h, r);
43394
+ ctx.lineTo(x, y);
43395
+ } else {
43396
+ h += r;
43397
+ ctx.lineTo(x + w, y);
43398
+ ctx.lineTo(x + w, y + h);
43399
+ ctx.arcTo(x + w, y + h - r, x + w - r, y + h - r, r);
43400
+ ctx.arcTo(x, y + h - r, x, y + h, r);
43401
+ ctx.lineTo(x, y);
43312
43402
  }
43313
-
43314
- h += r;
43315
- ctx.lineTo(x + w, y);
43316
- ctx.lineTo(x + w, y + h);
43317
- ctx.arcTo(x + w, y + h - r, x + w - r, y + h - r, r);
43318
- ctx.arcTo(x, y + h - r, x, y + h, r);
43319
- ctx.lineTo(x, y);
43320
43403
  }
43321
43404
 
43322
43405
  ctx.fill();
@@ -45071,6 +45154,7 @@ var scale_Scale = /*#__PURE__*/function () {
45071
45154
  }
45072
45155
  /**
45073
45156
  * With range information, calculate how many labels in axis
45157
+ * linear type은 scale.linear.js에서 처리
45074
45158
  * @param {object} range min/max information
45075
45159
  *
45076
45160
  * @returns {object} steps, interval, min/max graph value
@@ -45279,6 +45363,14 @@ var scale_Scale = /*#__PURE__*/function () {
45279
45363
 
45280
45364
  ctx.beginPath();
45281
45365
  ticks[ix] = axisMinForLabel + ix * stepValue;
45366
+ var isZeroLine = ticks[ix] === 0;
45367
+
45368
+ if (isZeroLine && _this3.zeroLineColor) {
45369
+ ctx.strokeStyle = _this3.zeroLineColor;
45370
+ } else {
45371
+ ctx.strokeStyle = _this3.gridLineColor;
45372
+ }
45373
+
45282
45374
  linePosition = labelCenter + aliasPixel;
45283
45375
  labelText = _this3.getLabelFormat(Math.min(axisMax, ticks[ix]), {
45284
45376
  prev: (_ticks = ticks[ix - 1]) !== null && _ticks !== void 0 ? _ticks : ''
@@ -45384,9 +45476,11 @@ var scale_Scale = /*#__PURE__*/function () {
45384
45476
  }
45385
45477
 
45386
45478
  var mergedPlotBandOpt = lodash_es_defaultsDeep({}, plotBand, PLOT_BAND_OPTION);
45387
- var from = mergedPlotBandOpt.from,
45388
- to = mergedPlotBandOpt.to,
45479
+ var userDefinedFrom = mergedPlotBandOpt.from,
45480
+ userDefinedTo = mergedPlotBandOpt.to,
45389
45481
  labelOpt = mergedPlotBandOpt.label;
45482
+ var from = userDefinedFrom ? Math.max(userDefinedFrom, axisMin) : axisMin;
45483
+ var to = userDefinedTo ? Math.min(userDefinedTo, axisMax) : axisMax;
45390
45484
 
45391
45485
  _this3.setPlotBandStyle(mergedPlotBandOpt);
45392
45486
 
@@ -45394,8 +45488,8 @@ var scale_Scale = /*#__PURE__*/function () {
45394
45488
  var toPos;
45395
45489
 
45396
45490
  if (_this3.type === 'x') {
45397
- fromPos = helpers_canvas.calculateX(from !== null && from !== void 0 ? from : minX, axisMin, axisMax, xArea, minX);
45398
- toPos = helpers_canvas.calculateX(to !== null && to !== void 0 ? to : maxX, axisMin, axisMax, xArea, minX);
45491
+ fromPos = helpers_canvas.calculateX(from, axisMin, axisMax, xArea, minX);
45492
+ toPos = helpers_canvas.calculateX(to, axisMin, axisMax, xArea, minX);
45399
45493
 
45400
45494
  if (fromPos === null || toPos === null) {
45401
45495
  return;
@@ -45403,8 +45497,8 @@ var scale_Scale = /*#__PURE__*/function () {
45403
45497
 
45404
45498
  _this3.drawXPlotBand(fromPos, toPos, minX, maxX, minY, maxY);
45405
45499
  } else {
45406
- fromPos = helpers_canvas.calculateY(from !== null && from !== void 0 ? from : axisMin, axisMin, axisMax, yArea, maxY);
45407
- toPos = helpers_canvas.calculateY(to !== null && to !== void 0 ? to : axisMax, axisMin, axisMax, yArea, maxY);
45500
+ fromPos = helpers_canvas.calculateY(from, axisMin, axisMax, yArea, maxY);
45501
+ toPos = helpers_canvas.calculateY(to, axisMin, axisMax, yArea, maxY);
45408
45502
 
45409
45503
  if (fromPos === null || toPos === null) {
45410
45504
  return;
@@ -45975,6 +46069,7 @@ var scale_time_TimeScale = /*#__PURE__*/function (_Scale) {
45975
46069
 
45976
46070
 
45977
46071
 
46072
+
45978
46073
  var scale_linear_LinearScale = /*#__PURE__*/function (_Scale) {
45979
46074
  _inherits(LinearScale, _Scale);
45980
46075
 
@@ -46013,16 +46108,192 @@ var scale_linear_LinearScale = /*#__PURE__*/function (_Scale) {
46013
46108
  * Calculate interval
46014
46109
  * @param {object} range range information
46015
46110
  *
46016
- * @returns {number} interval
46111
+ * @returns {number} interval (한 칸에 표시할 값의 간격)
46017
46112
  */
46018
46113
 
46019
46114
  }, {
46020
46115
  key: "getInterval",
46021
46116
  value: function getInterval(range) {
46117
+ if (this.interval) return this.interval;
46022
46118
  var max = range.maxValue;
46023
46119
  var min = range.minValue;
46024
- var step = range.maxSteps;
46025
- return this.interval ? this.interval : Math.ceil((max - min) / step);
46120
+ var steps = range.maxSteps; // step이 0이면 interval 계산 불가
46121
+
46122
+ if (!steps || steps <= 0) return 0; // startToZero이고, 최소값이 음수일 경우 0을 반드시 포함
46123
+
46124
+ if (this.startToZero && min < 0) {
46125
+ var totalRange = Math.abs(min) + Math.abs(max); // 비율로 나눔
46126
+
46127
+ var negativeRatio = Math.abs(min) / totalRange;
46128
+ var positiveRatio = Math.abs(max) / totalRange; // 각 방향에 최소 1칸 이상 배정되도록 보장
46129
+
46130
+ var negativeSteps = Math.max(1, Math.round(negativeRatio * steps));
46131
+ var positiveSteps = Math.max(1, steps - negativeSteps); // 다시 합이 steps보다 커질 수도 있으니, 조정
46132
+
46133
+ if (negativeSteps + positiveSteps > steps) {
46134
+ // 가장 큰 쪽에서 하나 줄임
46135
+ if (negativeRatio > positiveRatio) {
46136
+ negativeSteps -= 1;
46137
+ } else {
46138
+ positiveSteps -= 1;
46139
+ }
46140
+ }
46141
+
46142
+ return Math.ceil(Math.max(Math.abs(min) / (negativeSteps || 1), Math.abs(max) / (positiveSteps || 1)));
46143
+ }
46144
+
46145
+ return Math.ceil((max - min) / steps);
46146
+ }
46147
+ /**
46148
+ * With range information, calculate how many labels in axis
46149
+ * @param {object} range min/max information
46150
+ *
46151
+ * @returns {object} steps, interval, min/max graph value
46152
+ */
46153
+
46154
+ }, {
46155
+ key: "calculateSteps",
46156
+ value: function calculateSteps(range) {
46157
+ var maxValue = range.maxValue,
46158
+ minValue = range.minValue;
46159
+ var _range$maxSteps = range.maxSteps,
46160
+ maxSteps = _range$maxSteps === void 0 ? 1 : _range$maxSteps;
46161
+ var interval = this.getInterval(range);
46162
+ var graphMin = 0;
46163
+ var graphMax = 0; // 그래프 최대/최소 값 계산
46164
+
46165
+ if (minValue >= 0) {
46166
+ // 전부 양수
46167
+ graphMin = +minValue;
46168
+ graphMax = Math.ceil(maxValue / interval) * interval;
46169
+ } else if (maxValue >= 0) {
46170
+ // 양수/음수 혼합
46171
+ graphMin = Math.floor(minValue / interval) * interval;
46172
+ graphMax = Math.ceil(maxValue / interval) * interval;
46173
+ } else {
46174
+ // 전부 음수
46175
+ graphMax = +maxValue;
46176
+ graphMin = Math.floor(minValue / interval) * interval;
46177
+ }
46178
+
46179
+ var graphRange = graphMax - graphMin;
46180
+ var numberOfSteps = Math.round(graphRange / interval); // 특수 케이스: 양수 최소값, 최대값이 1일 경우
46181
+
46182
+ if (minValue > 0 && maxValue === 1) {
46183
+ if (!this.decimalPoint) {
46184
+ interval = 1;
46185
+ numberOfSteps = 1;
46186
+ maxSteps = 1;
46187
+ } else if (maxSteps > 2) {
46188
+ interval = 0.2;
46189
+ numberOfSteps = 5;
46190
+ maxSteps = 5;
46191
+ } else {
46192
+ interval = 0.5;
46193
+ numberOfSteps = 2;
46194
+ maxSteps = 2;
46195
+ }
46196
+ } // 최대 스텝 수 조정
46197
+
46198
+
46199
+ while (numberOfSteps > maxSteps) {
46200
+ interval *= 2;
46201
+ numberOfSteps = Math.round(graphRange / interval);
46202
+ interval = Math.ceil(graphRange / numberOfSteps);
46203
+ }
46204
+
46205
+ if (graphRange > numberOfSteps * interval) {
46206
+ interval = Math.ceil(graphRange / numberOfSteps);
46207
+ }
46208
+
46209
+ return {
46210
+ steps: numberOfSteps,
46211
+ interval: interval,
46212
+ graphMin: graphMin,
46213
+ graphMax: graphMax
46214
+ };
46215
+ }
46216
+ /**
46217
+ * Calculate min/max value, label and size information for axis
46218
+ * @param {object} minMax min/max information
46219
+ * @param {object} scrollbarOpt scrollbar option
46220
+ *
46221
+ * @returns {object} min/max value and label
46222
+ */
46223
+
46224
+ }, {
46225
+ key: "calculateScaleRange",
46226
+ value: function calculateScaleRange(minMax, scrollbarOpt) {
46227
+ var _this$labelStyle;
46228
+
46229
+ var maxValue;
46230
+ var minValue;
46231
+ var isDefaultMaxSameAsMin = false;
46232
+ var range = scrollbarOpt !== null && scrollbarOpt !== void 0 && scrollbarOpt.use ? scrollbarOpt === null || scrollbarOpt === void 0 ? void 0 : scrollbarOpt.range : this.range;
46233
+
46234
+ if (Array.isArray(range) && (range === null || range === void 0 ? void 0 : range.length) === 2) {
46235
+ if (this.options.type === 'heatMap') {
46236
+ maxValue = range[1] > +minMax.max ? +minMax.max : range[1];
46237
+ minValue = range[0] < +minMax.min ? +minMax.min : range[0];
46238
+ } else {
46239
+ maxValue = range[1];
46240
+ minValue = range[0];
46241
+ }
46242
+ } else if (typeof range === 'function') {
46243
+ var _range = range(minMax.min, minMax.max);
46244
+
46245
+ var _range2 = _slicedToArray(_range, 2);
46246
+
46247
+ minValue = _range2[0];
46248
+ maxValue = _range2[1];
46249
+ } else {
46250
+ maxValue = minMax.max;
46251
+ minValue = minMax.min;
46252
+ } // autoScaleRatio 적용 케이스
46253
+
46254
+
46255
+ if (this.autoScaleRatio) {
46256
+ var temp = maxValue; // 양수 방향에만 autoScaleRatio 적용
46257
+
46258
+ maxValue = Math.ceil(maxValue * (this.autoScaleRatio + 1));
46259
+
46260
+ if (maxValue > 0 && minValue < 0) {
46261
+ // 양수/음수 혼합 케이스 -- 음수 방향에도 maxValue 증가분만큼 더하기
46262
+ var diff = temp - maxValue;
46263
+ minValue += diff;
46264
+ } else if (maxValue < 0 && minValue < 0) {
46265
+ // 전부 음수 케이스 -- 음수 방향에도 autoScaleRatio 적용
46266
+ minValue = Math.ceil(minValue * (this.autoScaleRatio + 1));
46267
+ }
46268
+ } // 0 기준 축 설정 케이스
46269
+
46270
+
46271
+ if (this.startToZero) {
46272
+ if (minValue > 0) {
46273
+ minValue = 0;
46274
+ }
46275
+
46276
+ if (maxValue < 0) {
46277
+ maxValue = 0;
46278
+ }
46279
+ }
46280
+
46281
+ if (maxValue === minValue) {
46282
+ maxValue += 1;
46283
+ isDefaultMaxSameAsMin = true;
46284
+ }
46285
+
46286
+ var minLabel = this.getLabelFormat(minValue);
46287
+ var maxLabel = this.getLabelFormat(maxValue, {
46288
+ isMaxValueSameAsMin: isDefaultMaxSameAsMin
46289
+ });
46290
+ return {
46291
+ min: minValue,
46292
+ max: maxValue,
46293
+ minLabel: minLabel,
46294
+ maxLabel: maxLabel,
46295
+ size: helpers_util.calcTextSize(maxLabel, helpers_util.getLabelStyle(this.labelStyle), (_this$labelStyle = this.labelStyle) === null || _this$labelStyle === void 0 ? void 0 : _this$labelStyle.padding)
46296
+ };
46026
46297
  }
46027
46298
  }]);
46028
46299
 
@@ -47252,7 +47523,7 @@ var plugins_legend_modules = {
47252
47523
  var useLegendSeries = [];
47253
47524
 
47254
47525
  if (groups) {
47255
- useLegendSeries = groups.slice().reverse().filter(function (sId) {
47526
+ useLegendSeries = groups.filter(function (sId) {
47256
47527
  return _this3.seriesList[sId].showLegend;
47257
47528
  }).map(function (sId) {
47258
47529
  return [sId, _this3.seriesList[sId]];
@@ -47303,9 +47574,8 @@ var plugins_legend_modules = {
47303
47574
  },
47304
47575
 
47305
47576
  /**
47306
- * Adds legends for each group in `groups` array, iterating through each series
47307
- * within the group in reverse order. This ensures the legends align with the series
47308
- * order as displayed in the chart. Only adds series with `showLegend` set to `true`.
47577
+ * Adds legends for each group in `groups` array, iterating through each series within the group.
47578
+ * Only adds series with `showLegend` set to `true`.
47309
47579
  *
47310
47580
  * @param {Array} groups - Array of groups containing series identifiers.
47311
47581
  * @param {Object} seriesList - Object containing all series, keyed by series ID.
@@ -47316,7 +47586,7 @@ var plugins_legend_modules = {
47316
47586
  var _this5 = this;
47317
47587
 
47318
47588
  groups.forEach(function (group) {
47319
- group.slice().reverse().forEach(function (sId) {
47589
+ group.forEach(function (sId) {
47320
47590
  var series = seriesList[sId];
47321
47591
 
47322
47592
  if (series && series.showLegend) {
@@ -50458,6 +50728,15 @@ function inRange(number, start, end) {
50458
50728
 
50459
50729
 
50460
50730
 
50731
+
50732
+
50733
+
50734
+
50735
+
50736
+
50737
+
50738
+
50739
+
50461
50740
 
50462
50741
 
50463
50742
 
@@ -50564,14 +50843,30 @@ var plugins_interaction_modules = {
50564
50843
  }
50565
50844
 
50566
50845
  if (indicator.use && type !== 'pie' && type !== 'scatter' && type !== 'heatMap') {
50567
- _this.drawIndicator(offset, indicator.color);
50846
+ // Use data point position instead of mouse position for indicator when tooltip is enabled
50847
+ var indicatorOffset = offset;
50568
50848
 
50569
50849
  var label = _this.getTimeLabel(offset);
50570
50850
 
50851
+ var useAxisTrigger = tooltip.use && tooltip.trigger === 'axis' && type === 'line';
50852
+
50853
+ if (useAxisTrigger && Object.keys(hitInfo.items).length) {
50854
+ var hitId = hitInfo.hitId || Object.keys(hitInfo.items)[0];
50855
+ var hitItem = hitInfo.items[hitId];
50856
+
50857
+ if (hitItem && hitItem.data && hitItem.data.xp !== undefined && hitItem.data.yp !== undefined) {
50858
+ indicatorOffset = [hitItem.data.xp, hitItem.data.yp];
50859
+ label = _this.data.labels[hitItem.index];
50860
+ }
50861
+ }
50862
+
50863
+ _this.drawIndicator(indicatorOffset, indicator.color);
50864
+
50571
50865
  args.hoveredLabel = {
50572
50866
  horizontal: _this.options.horizontal,
50573
50867
  label: label,
50574
- mousePosition: [e.clientX, e.clientY]
50868
+ mousePosition: [e.clientX, e.clientY],
50869
+ useAxisTrigger: useAxisTrigger
50575
50870
  };
50576
50871
  } else {
50577
50872
  args.hoveredLabel = {
@@ -51431,17 +51726,59 @@ var plugins_interaction_modules = {
51431
51726
  }
51432
51727
  },
51433
51728
 
51729
+ /**
51730
+ * @typedef {object} HitInfo
51731
+ * @property {object} items
51732
+ * @property {string} hitId
51733
+ * @property {object} maxTip
51734
+ * @property {object} maxHighlight
51735
+ */
51736
+
51434
51737
  /**
51435
51738
  * Find graph item on mouse position
51436
51739
  * @param {array} offset return value from getMousePosition()
51437
51740
  *
51438
- * @returns {object} hit item information
51741
+ * @returns {HitInfo} hit item information
51439
51742
  */
51440
51743
  findHitItem: function findHitItem(offset) {
51744
+ var _this4 = this;
51745
+
51441
51746
  var sIds = Object.keys(this.seriesList);
51442
51747
  var items = {};
51443
51748
  var isHorizontal = !!this.options.horizontal;
51444
- var ctx = this.tooltipCtx;
51749
+ var ctx = this.tooltipCtx; // Cache for measureText to avoid repeated calculations
51750
+
51751
+ if (!this._measureTextCache) {
51752
+ this._measureTextCache = new Map();
51753
+ } // Use sliding window cache based on text length to maintain frequently used entries
51754
+
51755
+
51756
+ if (this._measureTextCache.size > 1000) {
51757
+ var entries = Array.from(this._measureTextCache.entries()); // Sort by text length (shorter texts are likely more frequently used)
51758
+
51759
+ entries.sort(function (_ref2, _ref3) {
51760
+ var _ref4 = _slicedToArray(_ref2, 1),
51761
+ keyA = _ref4[0];
51762
+
51763
+ var _ref5 = _slicedToArray(_ref3, 1),
51764
+ keyB = _ref5[0];
51765
+
51766
+ var textA = keyA.split('-')[0];
51767
+ var textB = keyB.split('-')[0];
51768
+ return textA.length - textB.length;
51769
+ }); // Keep the first 500 entries (shorter texts)
51770
+
51771
+ this._measureTextCache.clear();
51772
+
51773
+ entries.slice(0, 500).forEach(function (_ref6) {
51774
+ var _ref7 = _slicedToArray(_ref6, 2),
51775
+ key = _ref7[0],
51776
+ value = _ref7[1];
51777
+
51778
+ _this4._measureTextCache.set(key, value);
51779
+ });
51780
+ }
51781
+
51445
51782
  var hitId = null;
51446
51783
  var maxs = '';
51447
51784
  var maxsw = 0;
@@ -51451,64 +51788,81 @@ var plugins_interaction_modules = {
51451
51788
 
51452
51789
  for (var ix = 0; ix < sIds.length; ix++) {
51453
51790
  var sId = sIds[ix];
51454
- var series = this.seriesList[sId];
51791
+ var series = this.seriesList[sId]; // Skip hidden series for performance
51455
51792
 
51456
- if (series.findGraphData) {
51457
- var item = series.findGraphData(offset, isHorizontal);
51793
+ if (!series.show || !series.findGraphData) {
51794
+ // eslint-disable-next-line no-continue
51795
+ continue;
51796
+ }
51458
51797
 
51459
- if (item !== null && item !== void 0 && item.data) {
51460
- var gdata = void 0;
51798
+ var item = series.findGraphData(offset, isHorizontal);
51461
51799
 
51462
- if (item.data.o === null && series.interpolation !== 'zero') {
51463
- if (!series.isExistGrp) {
51464
- gdata = isHorizontal ? item.data.x : item.data.y;
51465
- }
51466
- } else if (!isNaN(item.data.o)) {
51467
- gdata = item.data.o;
51800
+ if (item !== null && item !== void 0 && item.data) {
51801
+ var gdata = void 0;
51802
+
51803
+ if (item.data.o === null && series.interpolation !== 'zero') {
51804
+ if (!series.isExistGrp) {
51805
+ gdata = isHorizontal ? item.data.x : item.data.y;
51468
51806
  }
51807
+ } else if (!isNaN(item.data.o)) {
51808
+ gdata = item.data.o;
51809
+ }
51469
51810
 
51470
- if (gdata !== null && gdata !== undefined) {
51471
- var formattedSeriesName = this.getFormattedTooltipLabel({
51472
- dataId: series.id,
51473
- seriesId: sId,
51474
- seriesName: series.name,
51475
- itemData: item.data
51476
- });
51477
- var sw = ctx ? ctx.measureText(formattedSeriesName).width : 1;
51478
- item.id = series.id;
51479
- item.name = formattedSeriesName;
51480
- item.axis = {
51481
- x: series.xAxisIndex,
51482
- y: series.yAxisIndex
51483
- };
51484
- items[sId] = item;
51485
- var formattedTxt = this.getFormattedTooltipValue({
51486
- dataId: series.id,
51487
- seriesId: sId,
51488
- seriesName: formattedSeriesName,
51489
- value: gdata,
51490
- itemData: item.data
51491
- });
51492
- item.data.formatted = formattedTxt;
51811
+ if (gdata !== null && gdata !== undefined) {
51812
+ var formattedSeriesName = this.getFormattedTooltipLabel({
51813
+ dataId: series.id,
51814
+ seriesId: sId,
51815
+ seriesName: series.name,
51816
+ itemData: item.data
51817
+ }); // Use cached measureText for better performance
51493
51818
 
51494
- if (maxsw < sw) {
51495
- maxs = formattedSeriesName;
51496
- maxsw = sw;
51497
- }
51819
+ var sw = 1;
51498
51820
 
51499
- if (maxv.length <= "".concat(formattedTxt).length) {
51500
- maxv = "".concat(formattedTxt);
51501
- }
51821
+ if (ctx) {
51822
+ var cacheKey = "".concat(formattedSeriesName, "-").concat(ctx.font);
51502
51823
 
51503
- if (maxg === null || maxg <= gdata) {
51504
- maxg = gdata;
51505
- maxSID = sId;
51506
- }
51824
+ if (this._measureTextCache.has(cacheKey)) {
51825
+ sw = this._measureTextCache.get(cacheKey);
51826
+ } else {
51827
+ sw = ctx.measureText(formattedSeriesName).width;
51507
51828
 
51508
- if (item.hit) {
51509
- hitId = sId;
51829
+ this._measureTextCache.set(cacheKey, sw);
51510
51830
  }
51511
51831
  }
51832
+
51833
+ item.id = series.id;
51834
+ item.name = formattedSeriesName;
51835
+ item.axis = {
51836
+ x: series.xAxisIndex,
51837
+ y: series.yAxisIndex
51838
+ };
51839
+ items[sId] = item;
51840
+ var formattedTxt = this.getFormattedTooltipValue({
51841
+ dataId: series.id,
51842
+ seriesId: sId,
51843
+ seriesName: formattedSeriesName,
51844
+ value: gdata,
51845
+ itemData: item.data
51846
+ });
51847
+ item.data.formatted = formattedTxt;
51848
+
51849
+ if (maxsw < sw) {
51850
+ maxs = formattedSeriesName;
51851
+ maxsw = sw;
51852
+ }
51853
+
51854
+ if (maxv.length <= "".concat(formattedTxt).length) {
51855
+ maxv = "".concat(formattedTxt);
51856
+ }
51857
+
51858
+ if (maxg === null || maxg <= gdata) {
51859
+ maxg = gdata;
51860
+ maxSID = sId;
51861
+ }
51862
+
51863
+ if (item.hit) {
51864
+ hitId = sId;
51865
+ }
51512
51866
  }
51513
51867
  }
51514
51868
  }
@@ -51531,13 +51885,13 @@ var plugins_interaction_modules = {
51531
51885
  * @param itemData
51532
51886
  * @returns {string}
51533
51887
  */
51534
- getFormattedTooltipLabel: function getFormattedTooltipLabel(_ref2) {
51888
+ getFormattedTooltipLabel: function getFormattedTooltipLabel(_ref8) {
51535
51889
  var _tooltipOpt$formatter;
51536
51890
 
51537
- var dataId = _ref2.dataId,
51538
- seriesId = _ref2.seriesId,
51539
- seriesName = _ref2.seriesName,
51540
- itemData = _ref2.itemData;
51891
+ var dataId = _ref8.dataId,
51892
+ seriesId = _ref8.seriesId,
51893
+ seriesName = _ref8.seriesName,
51894
+ itemData = _ref8.itemData;
51541
51895
  var opt = this.options;
51542
51896
  var tooltipOpt = opt.tooltip;
51543
51897
  var tooltipLabelFormatter = tooltipOpt === null || tooltipOpt === void 0 ? void 0 : (_tooltipOpt$formatter = tooltipOpt.formatter) === null || _tooltipOpt$formatter === void 0 ? void 0 : _tooltipOpt$formatter.label;
@@ -51564,14 +51918,14 @@ var plugins_interaction_modules = {
51564
51918
  * @param itemData
51565
51919
  * @returns {string}
51566
51920
  */
51567
- getFormattedTooltipValue: function getFormattedTooltipValue(_ref3) {
51921
+ getFormattedTooltipValue: function getFormattedTooltipValue(_ref9) {
51568
51922
  var _tooltipOpt$formatter2;
51569
51923
 
51570
- var dataId = _ref3.dataId,
51571
- seriesId = _ref3.seriesId,
51572
- seriesName = _ref3.seriesName,
51573
- value = _ref3.value,
51574
- itemData = _ref3.itemData;
51924
+ var dataId = _ref9.dataId,
51925
+ seriesId = _ref9.seriesId,
51926
+ seriesName = _ref9.seriesName,
51927
+ value = _ref9.value,
51928
+ itemData = _ref9.itemData;
51575
51929
  var opt = this.options;
51576
51930
  var isHorizontal = !!opt.horizontal;
51577
51931
  var tooltipOpt = opt.tooltip;
@@ -51744,7 +52098,7 @@ var plugins_interaction_modules = {
51744
52098
  * @returns {object[]}
51745
52099
  */
51746
52100
  getSelectedLabelInfoWithLabelData: function getSelectedLabelInfoWithLabelData(labelIndexList, targetAxis) {
51747
- var _this4 = this;
52101
+ var _this5 = this;
51748
52102
 
51749
52103
  var _this$options9 = this.options,
51750
52104
  selectLabelOpt = _this$options9.selectLabel,
@@ -51760,14 +52114,14 @@ var plugins_interaction_modules = {
51760
52114
  {
51761
52115
  result.dataIndex.splice(selectLabelOpt.limit);
51762
52116
  result.label = result.dataIndex.map(function (i) {
51763
- return _this4.data.labels[i];
52117
+ return _this5.data.labels[i];
51764
52118
  });
51765
52119
  var dataEntries = Object.entries(this.data.data);
51766
52120
  result.data = result.dataIndex.map(function (labelIdx) {
51767
- return Object.fromEntries(dataEntries.map(function (_ref4) {
51768
- var _ref5 = _slicedToArray(_ref4, 2),
51769
- sId = _ref5[0],
51770
- data = _ref5[1];
52121
+ return Object.fromEntries(dataEntries.map(function (_ref10) {
52122
+ var _ref11 = _slicedToArray(_ref10, 2),
52123
+ sId = _ref11[0],
52124
+ data = _ref11[1];
51771
52125
 
51772
52126
  return [sId, data[labelIdx]];
51773
52127
  }));
@@ -51790,12 +52144,12 @@ var plugins_interaction_modules = {
51790
52144
  }
51791
52145
 
51792
52146
  result.label = result.dataIndex.map(function (i) {
51793
- return _this4.data.labels[targetAxisDirection][i];
52147
+ return _this5.data.labels[targetAxisDirection][i];
51794
52148
  });
51795
52149
  var dataValues = Object.values(this.data.data)[0];
51796
- result.data = dataValues.filter(function (_ref6) {
51797
- var x = _ref6.x,
51798
- y = _ref6.y;
52150
+ result.data = dataValues.filter(function (_ref12) {
52151
+ var x = _ref12.x,
52152
+ y = _ref12.y;
51799
52153
  return result.label.includes(targetAxisDirection === 'y' ? y : x);
51800
52154
  });
51801
52155
  break;
@@ -51918,14 +52272,14 @@ var plugins_interaction_modules = {
51918
52272
  * object.range: coordinate-based range in graph
51919
52273
  * @returns {object}
51920
52274
  */
51921
- getSelectionRange: function getSelectionRange(_ref7) {
52275
+ getSelectionRange: function getSelectionRange(_ref13) {
51922
52276
  var _this$boxOverflow, _this$boxOverflow2, _this$boxOverflow3, _this$boxOverflow4;
51923
52277
 
51924
- var xsp = _ref7.xsp,
51925
- ysp = _ref7.ysp,
51926
- width = _ref7.width,
51927
- height = _ref7.height,
51928
- range = _ref7.range;
52278
+ var xsp = _ref13.xsp,
52279
+ ysp = _ref13.ysp,
52280
+ width = _ref13.width,
52281
+ height = _ref13.height,
52282
+ range = _ref13.range;
51929
52283
  var dataRangeX = this.axesSteps.x.length ? this.axesSteps.x[0] : null;
51930
52284
  var dataRangeY = this.axesSteps.y.length ? this.axesSteps.y[0] : null;
51931
52285
 
@@ -51982,11 +52336,11 @@ var plugins_interaction_modules = {
51982
52336
 
51983
52337
  var sId = Object.keys(this.seriesList)[0];
51984
52338
 
51985
- var _ref8 = (_this$seriesList$sId$ = this.seriesList[sId].findSelectionRange(range)) !== null && _this$seriesList$sId$ !== void 0 ? _this$seriesList$sId$ : {},
51986
- xMin = _ref8.xMin,
51987
- xMax = _ref8.xMax,
51988
- yMin = _ref8.yMin,
51989
- yMax = _ref8.yMax;
52339
+ var _ref14 = (_this$seriesList$sId$ = this.seriesList[sId].findSelectionRange(range)) !== null && _this$seriesList$sId$ !== void 0 ? _this$seriesList$sId$ : {},
52340
+ xMin = _ref14.xMin,
52341
+ xMax = _ref14.xMax,
52342
+ yMin = _ref14.yMin,
52343
+ yMax = _ref14.yMax;
51990
52344
 
51991
52345
  return {
51992
52346
  xMin: xMin !== null && xMin !== void 0 ? xMin : dataRangeX.graphMin,
@@ -52076,6 +52430,7 @@ var plugins_interaction_modules = {
52076
52430
 
52077
52431
 
52078
52432
 
52433
+
52079
52434
  var LINE_SPACING = 8;
52080
52435
  var VALUE_MARGIN = 50;
52081
52436
  var SCROLL_WIDTH = 17;
@@ -52866,7 +53221,7 @@ var plugins_tooltip_modules = {
52866
53221
  y1: this.chartRect.y1 + this.labelOffset.top,
52867
53222
  y2: this.chartRect.y2 - this.labelOffset.bottom
52868
53223
  };
52869
- var mouseXIp = 1; // mouseInterpolation
53224
+ var mouseXIp = 5; // mouseInterpolation - increased for better edge detection
52870
53225
 
52871
53226
  var mouseYIp = 10;
52872
53227
  var options = this.options;
@@ -52962,7 +53317,8 @@ var plugins_tooltip_modules = {
52962
53317
 
52963
53318
  var horizontal = _ref5.horizontal,
52964
53319
  label = _ref5.label,
52965
- mousePosition = _ref5.mousePosition;
53320
+ mousePosition = _ref5.mousePosition,
53321
+ useAxisTrigger = _ref5.useAxisTrigger;
52966
53322
 
52967
53323
  if (!mousePosition || !!horizontal !== !!this.options.horizontal) {
52968
53324
  return;
@@ -53009,7 +53365,25 @@ var plugins_tooltip_modules = {
53009
53365
  y2: this.chartRect.y2 - this.labelOffset.bottom
53010
53366
  };
53011
53367
 
53012
- if (horizontal) {
53368
+ if (useAxisTrigger && label) {
53369
+ var _this$data$labels5;
53370
+
53371
+ var matchIndex = (_this$data$labels5 = this.data.labels) === null || _this$data$labels5 === void 0 ? void 0 : _this$data$labels5.findIndex(function (l) {
53372
+ return (l === null || l === void 0 ? void 0 : l.valueOf()) === (label === null || label === void 0 ? void 0 : label.valueOf());
53373
+ });
53374
+
53375
+ if (matchIndex >= 0) {
53376
+ var _Object$keys, _this$seriesList, _this$seriesList$seri, _this$seriesList$seri2;
53377
+
53378
+ var seriesId = (_Object$keys = Object.keys(this.seriesList)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
53379
+ var dataPoint = (_this$seriesList = this.seriesList) === null || _this$seriesList === void 0 ? void 0 : (_this$seriesList$seri = _this$seriesList[seriesId]) === null || _this$seriesList$seri === void 0 ? void 0 : (_this$seriesList$seri2 = _this$seriesList$seri.data) === null || _this$seriesList$seri2 === void 0 ? void 0 : _this$seriesList$seri2[matchIndex];
53380
+
53381
+ if ((dataPoint === null || dataPoint === void 0 ? void 0 : dataPoint.xp) !== undefined && (dataPoint === null || dataPoint === void 0 ? void 0 : dataPoint.xp) !== null) {
53382
+ var yPosition = !lodash_es_isNil(dataPoint.yp) ? dataPoint.yp : (graphPos.y1 + graphPos.y2) / 2;
53383
+ this.drawIndicator([dataPoint.xp, yPosition], this.options.indicator.color);
53384
+ }
53385
+ }
53386
+ } else if (horizontal) {
53013
53387
  var chartHeight = graphPos.y2 - graphPos.y1;
53014
53388
  var offsetY = chartHeight * (label - fromTime) / (toTime - fromTime) + graphPos.y1;
53015
53389
  this.drawIndicator([graphPos.x2, offsetY], this.options.indicator.color);
@@ -53360,7 +53734,6 @@ var plugins_pie_modules = {
53360
53734
 
53361
53735
 
53362
53736
 
53363
-
53364
53737
  var element_tip_modules = {
53365
53738
  /**
53366
53739
  * Draw TextTip with tip's locationInfo
@@ -53394,8 +53767,7 @@ var element_tip_modules = {
53394
53767
  }
53395
53768
 
53396
53769
  if (labelTipOpt.use && labelTipOpt.showTip) {
53397
- var isHeatMap = opt.type === 'heatMap';
53398
- isExistSelectedLabel = isHeatMap ? this.drawLabelTipForHeatMap() : this.drawLabelTip();
53770
+ isExistSelectedLabel = opt.type === 'heatMap' ? this.drawLabelTipForHeatMap() : this.drawTipForSelectedLabel();
53399
53771
  }
53400
53772
 
53401
53773
  var executeDrawIndicator = function executeDrawIndicator(tipOpt) {
@@ -53681,9 +54053,10 @@ var element_tip_modules = {
53681
54053
 
53682
54054
  /**
53683
54055
  * Draw Selected Label Tip
54056
+ * none Text
53684
54057
  * @returns {boolean} Whether drew at least one tip
53685
54058
  */
53686
- drawLabelTip: function drawLabelTip() {
54059
+ drawTipForSelectedLabel: function drawTipForSelectedLabel() {
53687
54060
  var _this2 = this;
53688
54061
 
53689
54062
  var opt = this.options;
@@ -53709,7 +54082,7 @@ var element_tip_modules = {
53709
54082
  };
53710
54083
  var labelAxes = isHorizontal ? this.axesY[0] : this.axesX[0];
53711
54084
  var valueAxes = isHorizontal ? this.axesX[0] : this.axesY[0];
53712
- var valueAxesRange = isHorizontal ? this.axesRange.x[0] : this.axesRange.y[0];
54085
+ var valueAxesSteps = isHorizontal ? this.axesSteps.x[0] : this.axesSteps.y[0];
53713
54086
  var valuePositionCalcFunction = isHorizontal ? helpers_canvas.calculateX : helpers_canvas.calculateY;
53714
54087
  var labelPositionCalcFunction = isHorizontal ? helpers_canvas.calculateY : helpers_canvas.calculateX;
53715
54088
  var scrollbarOpt = isHorizontal ? this.scrollbar.y : this.scrollbar.x;
@@ -53727,8 +54100,8 @@ var element_tip_modules = {
53727
54100
  return _this2.seriesList[sId].isExistGrp && !_this2.seriesList[sId].isOverlapping;
53728
54101
  });
53729
54102
  var groups = (_this$data$groups$ = (_this$data$groups = this.data.groups) === null || _this$data$groups === void 0 ? void 0 : _this$data$groups[0]) !== null && _this$data$groups$ !== void 0 ? _this$data$groups$ : [];
53730
- var gp;
53731
- var dp;
54103
+ var labelPos;
54104
+ var dataPos;
53732
54105
  var value;
53733
54106
  var labelStartPoint;
53734
54107
  var labelEndPoint;
@@ -53776,31 +54149,39 @@ var element_tip_modules = {
53776
54149
  }
53777
54150
 
53778
54151
  data.forEach(function (selectedData, i) {
53779
- if (labelTipOpt.fixedPosTop) {
53780
- value = valueAxesRange.max;
53781
- } else if (isExistGrp) {
53782
- var sumValue = visibleSeries.reduce(function (ac, sId) {
53783
- var _selectedData$sId$val, _selectedData$sId;
53784
-
53785
- return groups.includes(sId) ? ac + ((_selectedData$sId$val = (_selectedData$sId = selectedData[sId]) === null || _selectedData$sId === void 0 ? void 0 : _selectedData$sId.value) !== null && _selectedData$sId$val !== void 0 ? _selectedData$sId$val : selectedData[sId]) : ac;
53786
- }, 0);
53787
- var nonGroupValues = visibleSeries.filter(function (sId) {
53788
- return !groups.includes(sId);
53789
- }).map(function (sId) {
53790
- var _selectedData$sId$val2, _selectedData$sId2;
53791
-
53792
- return (_selectedData$sId$val2 = (_selectedData$sId2 = selectedData[sId]) === null || _selectedData$sId2 === void 0 ? void 0 : _selectedData$sId2.value) !== null && _selectedData$sId$val2 !== void 0 ? _selectedData$sId$val2 : selectedData[sId];
53793
- });
53794
- value = Math.max.apply(Math, _toConsumableArray(nonGroupValues).concat([sumValue]));
53795
- } else if (visibleSeries.length) {
53796
- var visibleValue = visibleSeries.map(function (sId) {
53797
- var _selectedData$sId$val3, _selectedData$sId3;
53798
-
53799
- return (_selectedData$sId$val3 = (_selectedData$sId3 = selectedData[sId]) === null || _selectedData$sId3 === void 0 ? void 0 : _selectedData$sId3.value) !== null && _selectedData$sId$val3 !== void 0 ? _selectedData$sId$val3 : selectedData[sId];
53800
- });
53801
- value = Math.max.apply(Math, _toConsumableArray(visibleValue));
53802
- } else {
53803
- value = valueAxesRange.max;
54152
+ value = valueAxesSteps.graphMax;
54153
+
54154
+ if (!labelTipOpt.fixedPosTop) {
54155
+ if (isExistGrp) {
54156
+ var _visibleSeries$filter, _visibleSeries$filter2;
54157
+
54158
+ var positiveSum = visibleSeries === null || visibleSeries === void 0 ? void 0 : visibleSeries.reduce(function (ac, sId) {
54159
+ var _selectedData$sId$val, _selectedData$sId, _selectedData$sId$val2, _selectedData$sId2;
54160
+
54161
+ return groups.includes(sId) && ((_selectedData$sId$val = (_selectedData$sId = selectedData[sId]) === null || _selectedData$sId === void 0 ? void 0 : _selectedData$sId.value) !== null && _selectedData$sId$val !== void 0 ? _selectedData$sId$val : selectedData[sId]) > 0 ? ac + ((_selectedData$sId$val2 = (_selectedData$sId2 = selectedData[sId]) === null || _selectedData$sId2 === void 0 ? void 0 : _selectedData$sId2.value) !== null && _selectedData$sId$val2 !== void 0 ? _selectedData$sId$val2 : selectedData[sId]) : ac;
54162
+ }, 0);
54163
+ var nonGroupValues = (_visibleSeries$filter = visibleSeries === null || visibleSeries === void 0 ? void 0 : (_visibleSeries$filter2 = visibleSeries.filter(function (sId) {
54164
+ return !groups.includes(sId);
54165
+ })) === null || _visibleSeries$filter2 === void 0 ? void 0 : _visibleSeries$filter2.map(function (sId) {
54166
+ var _selectedData$sId$val3, _selectedData$sId3;
54167
+
54168
+ return (_selectedData$sId$val3 = (_selectedData$sId3 = selectedData[sId]) === null || _selectedData$sId3 === void 0 ? void 0 : _selectedData$sId3.value) !== null && _selectedData$sId$val3 !== void 0 ? _selectedData$sId$val3 : selectedData[sId];
54169
+ })) !== null && _visibleSeries$filter !== void 0 ? _visibleSeries$filter : [];
54170
+ var maxNonGroupValue = (nonGroupValues === null || nonGroupValues === void 0 ? void 0 : nonGroupValues.length) > 0 ? nonGroupValues.reduce(function (max, val) {
54171
+ return Math.max(max, val !== null && val !== void 0 ? val : -Infinity);
54172
+ }, -Infinity) : -Infinity;
54173
+ value = positiveSum > 0 ? Math.max(maxNonGroupValue, positiveSum) : Math.max(maxNonGroupValue, 0);
54174
+ } else if (visibleSeries.length) {
54175
+ var visibleValue = visibleSeries.map(function (sId) {
54176
+ var _selectedData$sId$val4, _selectedData$sId4;
54177
+
54178
+ return (_selectedData$sId$val4 = (_selectedData$sId4 = selectedData[sId]) === null || _selectedData$sId4 === void 0 ? void 0 : _selectedData$sId4.value) !== null && _selectedData$sId$val4 !== void 0 ? _selectedData$sId$val4 : selectedData[sId];
54179
+ });
54180
+ var maxValue = visibleValue.length > 0 ? visibleValue.reduce(function (max, val) {
54181
+ return Math.max(max, val !== null && val !== void 0 ? val : -Infinity);
54182
+ }, -Infinity) : -Infinity;
54183
+ value = maxValue > 0 || _this2.options.type !== 'bar' ? maxValue : 0;
54184
+ }
53804
54185
  }
53805
54186
 
53806
54187
  if (labelAxes.labels) {
@@ -53810,18 +54191,17 @@ var element_tip_modules = {
53810
54191
 
53811
54192
  var labelIndex = dataIndex[i] - startIndex;
53812
54193
  var labelCenter = Math.round(labelStartPoint + labelGap * labelIndex);
53813
- dp = labelCenter + labelGap / 2;
54194
+ labelPos = labelCenter + labelGap / 2;
53814
54195
  } else {
53815
- dp = labelPositionCalcFunction(label[i], graphX.graphMin, graphX.graphMax, chartWidth - sizeObj.comboOffset, aPos.x1 + sizeObj.comboOffset / 2);
54196
+ labelPos = labelPositionCalcFunction(label[i], graphX.graphMin, graphX.graphMax, chartWidth - sizeObj.comboOffset, aPos.x1 + sizeObj.comboOffset / 2);
53816
54197
  }
53817
54198
 
53818
- gp = valuePositionCalcFunction(value, valueAxesRange.min, valueAxesRange.max, valueSpace, valueStartPoint);
53819
- gp += offset;
54199
+ dataPos = valuePositionCalcFunction(value, valueAxesSteps.graphMin, valueAxesSteps.graphMax, valueSpace, valueStartPoint) + offset;
53820
54200
 
53821
54201
  _this2.showTip({
53822
54202
  context: _this2.bufferCtx,
53823
- x: isHorizontal ? gp : dp,
53824
- y: isHorizontal ? dp : gp,
54203
+ x: isHorizontal ? dataPos : labelPos,
54204
+ y: isHorizontal ? labelPos : dataPos,
53825
54205
  opt: labelTipOpt,
53826
54206
  isSamePos: false
53827
54207
  });
@@ -53933,10 +54313,11 @@ var element_tip_modules = {
53933
54313
  }
53934
54314
  } else if (isHorizontal) {
53935
54315
  gp = helpers_canvas.calculateX(value, graphX.graphMin, graphX.graphMax, xArea, xsp);
53936
- gp += offset;
54316
+ gp = value < 0 ? gp - offset : gp + offset;
53937
54317
  } else {
53938
- gp = helpers_canvas.calculateY(value, graphY.graphMin, graphY.graphMax, yArea, ysp);
53939
- gp -= offset;
54318
+ var adjustedValue = type === 'bar' && value < 0 ? 0 : value;
54319
+ gp = helpers_canvas.calculateY(adjustedValue, graphY.graphMin, graphY.graphMax, yArea, ysp);
54320
+ gp = adjustedValue < 0 ? gp + offset : gp - offset;
53940
54321
  }
53941
54322
 
53942
54323
  var maxTipType = 'center';
@@ -53968,7 +54349,8 @@ var element_tip_modules = {
53968
54349
  arrowSize: arrowSize,
53969
54350
  borderRadius: borderRadius,
53970
54351
  text: text,
53971
- textStyle: textStyle
54352
+ textStyle: textStyle,
54353
+ isNegative: value < 0
53972
54354
  });
53973
54355
  }
53974
54356
 
@@ -54002,12 +54384,21 @@ var element_tip_modules = {
54002
54384
  borderRadius = param.borderRadius,
54003
54385
  text = param.text,
54004
54386
  opt = param.opt,
54005
- textStyle = param.textStyle;
54387
+ textStyle = param.textStyle,
54388
+ isNegative = param.isNegative;
54006
54389
  var ctx = param.context;
54007
54390
  var sx = x - width / 2;
54008
54391
  var ex = x + width / 2;
54009
54392
  var sy = y - height;
54010
54393
  var ey = y;
54394
+
54395
+ if (isNegative) {
54396
+ if (isHorizontal) {
54397
+ sx = x - width / 2 - width;
54398
+ ex = x - width / 2;
54399
+ }
54400
+ }
54401
+
54011
54402
  ctx.save();
54012
54403
  ctx.font = textStyle;
54013
54404
  ctx.fillStyle = (_opt$tipBackground = opt.tipBackground) !== null && _opt$tipBackground !== void 0 ? _opt$tipBackground : opt.tipStyle.background;
@@ -54015,44 +54406,73 @@ var element_tip_modules = {
54015
54406
  ctx.beginPath();
54016
54407
  ctx.moveTo(sx + borderRadius, sy);
54017
54408
  ctx.quadraticCurveTo(sx, sy, sx, sy + borderRadius);
54018
-
54019
- if (isHorizontal) {
54020
- ctx.lineTo(sx, sy + borderRadius + arrowSize / 2);
54021
- ctx.lineTo(sx - arrowSize, ey - height / 2);
54022
- ctx.lineTo(sx, ey - borderRadius - arrowSize / 2);
54023
- }
54024
-
54025
54409
  ctx.lineTo(sx, ey - borderRadius);
54026
54410
  ctx.quadraticCurveTo(sx, ey, sx + borderRadius, ey);
54027
-
54028
- if (!isHorizontal) {
54029
- if (type === 'left') {
54030
- ctx.lineTo(sx + borderRadius + arrowSize, ey + arrowSize);
54031
- ctx.lineTo(sx + borderRadius + arrowSize * 2, ey);
54032
- } else if (type === 'right') {
54033
- ctx.lineTo(ex - arrowSize * 2 - borderRadius, ey);
54034
- ctx.lineTo(ex - arrowSize - borderRadius, ey + arrowSize);
54035
- } else {
54036
- ctx.lineTo(x - arrowSize, ey);
54037
- ctx.lineTo(x, ey + arrowSize);
54038
- ctx.lineTo(x + arrowSize, ey);
54039
- }
54040
- }
54041
-
54042
54411
  ctx.lineTo(ex - borderRadius, ey);
54043
54412
  ctx.quadraticCurveTo(ex, ey, ex, ey - borderRadius);
54044
54413
  ctx.lineTo(ex, sy + borderRadius);
54045
54414
  ctx.quadraticCurveTo(ex, sy, ex - borderRadius, sy);
54046
54415
  ctx.lineTo(sx + borderRadius, sy);
54047
54416
  ctx.closePath();
54048
- ctx.fill();
54417
+ ctx.fill(); // draw arrow
54418
+
54419
+ ctx.beginPath();
54420
+
54421
+ if (isHorizontal) {
54422
+ if (isNegative) {
54423
+ ctx.moveTo(ex, ey);
54424
+ ctx.lineTo(ex, sy + borderRadius + arrowSize / 2);
54425
+ ctx.lineTo(ex + arrowSize, ey - height / 2);
54426
+ ctx.lineTo(ex, ey - borderRadius - arrowSize / 2);
54427
+ } else {
54428
+ ctx.moveTo(sx, sy);
54429
+ ctx.lineTo(sx, sy + borderRadius + arrowSize / 2);
54430
+ ctx.lineTo(sx - arrowSize, ey - height / 2);
54431
+ ctx.lineTo(sx, ey - borderRadius - arrowSize / 2);
54432
+ }
54433
+
54434
+ ctx.closePath();
54435
+ ctx.fill();
54436
+ } else {
54437
+ if (isNegative) {
54438
+ if (type === 'left') {
54439
+ ctx.lineTo(sx + borderRadius + arrowSize, ey + arrowSize);
54440
+ ctx.lineTo(sx + borderRadius + arrowSize * 2, ey);
54441
+ } else if (type === 'right') {
54442
+ ctx.lineTo(ex - arrowSize * 2 - borderRadius, ey);
54443
+ ctx.lineTo(ex - arrowSize - borderRadius, ey + arrowSize);
54444
+ } else {
54445
+ ctx.lineTo(x - arrowSize, ey);
54446
+ ctx.lineTo(x, ey + arrowSize);
54447
+ ctx.lineTo(x + arrowSize, ey);
54448
+ }
54449
+ } else if (!isNegative) {
54450
+ if (type === 'left') {
54451
+ ctx.moveTo(sx, sy);
54452
+ ctx.lineTo(sx + borderRadius + arrowSize, ey + arrowSize);
54453
+ ctx.lineTo(sx + borderRadius + arrowSize * 2, ey);
54454
+ } else if (type === 'right') {
54455
+ ctx.moveTo(ex, sy);
54456
+ ctx.lineTo(ex - arrowSize * 2 - borderRadius, ey);
54457
+ ctx.lineTo(ex - arrowSize - borderRadius, ey + arrowSize);
54458
+ } else {
54459
+ ctx.lineTo(x - arrowSize, ey);
54460
+ ctx.lineTo(x, ey + arrowSize);
54461
+ ctx.lineTo(x + arrowSize, ey);
54462
+ }
54463
+ }
54464
+
54465
+ ctx.closePath();
54466
+ ctx.fill();
54467
+ }
54468
+
54049
54469
  ctx.restore();
54050
54470
  ctx.save();
54051
54471
  ctx.font = textStyle;
54052
54472
  ctx.fillStyle = (_opt$tipTextColor = opt.tipTextColor) !== null && _opt$tipTextColor !== void 0 ? _opt$tipTextColor : opt.tipStyle.textColor;
54053
54473
  ctx.textBaseline = 'middle';
54054
54474
  ctx.textAlign = 'center';
54055
- ctx.fillText("".concat(text), x, sy + height / 2);
54475
+ ctx.fillText("".concat(text), sx + width / 2, sy + height / 2);
54056
54476
  ctx.restore();
54057
54477
  },
54058
54478
 
@@ -54304,11 +54724,13 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54304
54724
  value: function drawSyncedIndicator(_ref) {
54305
54725
  var horizontal = _ref.horizontal,
54306
54726
  label = _ref.label,
54307
- mousePosition = _ref.mousePosition;
54727
+ mousePosition = _ref.mousePosition,
54728
+ useAxisTrigger = _ref.useAxisTrigger;
54308
54729
  this.drawSyncedIndicator({
54309
54730
  horizontal: horizontal,
54310
54731
  label: label,
54311
- mousePosition: mousePosition
54732
+ mousePosition: mousePosition,
54733
+ useAxisTrigger: useAxisTrigger
54312
54734
  });
54313
54735
  }
54314
54736
  }, {
@@ -56136,6 +56558,7 @@ var DEFAULT_OPTIONS = {
56136
56558
  combo: false,
56137
56559
  tooltip: {
56138
56560
  use: true,
56561
+ trigger: 'axis',
56139
56562
  sortByValue: true,
56140
56563
  backgroundColor: '#4C4C4C',
56141
56564
  fontColor: '#FFFFFF',