evui 3.4.108 → 3.4.110

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.
@@ -11164,7 +11164,7 @@ module.exports = exports;
11164
11164
  /***/ "9224":
11165
11165
  /***/ (function(module) {
11166
11166
 
11167
- module.exports = JSON.parse("{\"a\":\"3.4.108\"}");
11167
+ module.exports = JSON.parse("{\"a\":\"3.4.110\"}");
11168
11168
 
11169
11169
  /***/ }),
11170
11170
 
@@ -42592,8 +42592,6 @@ var element_bar_Bar = /*#__PURE__*/function () {
42592
42592
  _createClass(Bar, [{
42593
42593
  key: "draw",
42594
42594
  value: function draw(param) {
42595
- var _this2 = this;
42596
-
42597
42595
  if (!this.show) {
42598
42596
  return;
42599
42597
  }
@@ -42623,7 +42621,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42623
42621
  var _ref2 = [minmaxX.minIndex, minmaxX.maxIndex];
42624
42622
  minIndex = _ref2[0];
42625
42623
  maxIndex = _ref2[1];
42626
- }
42624
+ } // minIndex, maxIndex가 유효하면 실제 그릴 데이터 개수로 보정
42625
+
42627
42626
 
42628
42627
  if (truthyNumber(minIndex) && truthyNumber(maxIndex)) {
42629
42628
  totalCount = maxIndex - minIndex + 1;
@@ -42678,131 +42677,142 @@ var element_bar_Bar = /*#__PURE__*/function () {
42678
42677
  this.labelOffset = labelOffset;
42679
42678
  this.borderRadius = param.borderRadius;
42680
42679
  this.filteredCount = totalCount;
42681
- var categoryPoint = null;
42682
- this.data.forEach(function (dataItem, index) {
42683
- var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42680
+ var startIndex = truthyNumber(minIndex) ? minIndex : 0;
42681
+ var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1; // 스크롤 범위 내에서만 루프 돌림
42684
42682
 
42685
- ctx.beginPath();
42686
- var item = dataItem;
42683
+ for (var i = startIndex; i <= endIndex; i++) {
42684
+ var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
42687
42685
 
42688
- if (truthyNumber(minIndex) && index < minIndex) {
42689
- return;
42690
- } else if (truthyNumber(minIndex) && index > maxIndex) {
42691
- return;
42692
- }
42686
+ var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
42693
42687
 
42694
- if (isHorizontal) {
42695
- categoryPoint = ysp - cArea * (index - (minIndex || 0)) - cPad;
42696
- } else {
42697
- categoryPoint = xsp + cArea * (index - (minIndex || 0)) + cPad;
42698
- }
42688
+ if (item) {
42689
+ var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42699
42690
 
42700
- if (isHorizontal) {
42701
- x = xsp;
42702
- y = Math.round(categoryPoint - (bArea * barSeriesX - (h + bPad)));
42703
- } else {
42704
- x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42705
- y = ysp;
42706
- }
42691
+ // 스크롤 offset(minIndex)만큼 보정해서 그리기
42692
+ var categoryPoint = void 0;
42707
42693
 
42708
- if (isHorizontal) {
42709
- if (item.b) {
42710
- w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42711
- x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42694
+ if (isHorizontal) {
42695
+ categoryPoint = ysp - cArea * screenIndex - cPad;
42712
42696
  } else {
42713
- w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42697
+ categoryPoint = xsp + cArea * screenIndex + cPad;
42714
42698
  }
42715
- } else if (item.b) {
42716
- // vertical stack bar chart
42717
- h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42718
- y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42719
- } else {
42720
- // vertical bar chart
42721
- h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42722
- }
42723
42699
 
42724
- var barColor = item.dataColor || _this2.color;
42725
- var legendHitInfo = param === null || param === void 0 ? void 0 : param.legendHitInfo;
42726
- var selectLabelOption = param === null || param === void 0 ? void 0 : (_param$selectLabel = param.selectLabel) === null || _param$selectLabel === void 0 ? void 0 : _param$selectLabel.option;
42727
- var selectItemOption = param === null || param === void 0 ? void 0 : (_param$selectItem = param.selectItem) === null || _param$selectItem === void 0 ? void 0 : _param$selectItem.option;
42728
- var selectedLabelList = (_param$selectLabel$se = param === null || param === void 0 ? void 0 : (_param$selectLabel2 = param.selectLabel) === null || _param$selectLabel2 === void 0 ? void 0 : (_param$selectLabel2$s = _param$selectLabel2.selected) === null || _param$selectLabel2$s === void 0 ? void 0 : _param$selectLabel2$s.dataIndex) !== null && _param$selectLabel$se !== void 0 ? _param$selectLabel$se : [];
42729
-
42730
- var _ref3 = (_param$selectItem$sel = param === null || param === void 0 ? void 0 : (_param$selectItem2 = param.selectItem) === null || _param$selectItem2 === void 0 ? void 0 : _param$selectItem2.selected) !== null && _param$selectItem$sel !== void 0 ? _param$selectItem$sel : {},
42731
- selectedItemDataIndex = _ref3.dataIndex,
42732
- selectedItemSeriesId = _ref3.seriesID;
42733
-
42734
- var isDownplay = false;
42700
+ if (isHorizontal) {
42701
+ x = xsp;
42702
+ y = Math.round(categoryPoint - (bArea * barSeriesX - (h + bPad)));
42703
+ } else {
42704
+ x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42705
+ y = ysp;
42706
+ }
42735
42707
 
42736
- if (legendHitInfo) {
42737
- isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== _this2.sId;
42738
- } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42739
- isDownplay = selectedLabelList.length && !selectedLabelList.includes(index);
42740
- } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42741
- if (_this2.isExistGrp) {
42742
- isDownplay = selectedItemDataIndex !== index;
42708
+ if (isHorizontal) {
42709
+ if (item.b) {
42710
+ w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42711
+ x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42712
+ } else {
42713
+ w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42714
+ }
42715
+ } else if (item.b) {
42716
+ // vertical stack bar chart
42717
+ h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42718
+ y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42743
42719
  } else {
42744
- isDownplay = selectedItemDataIndex !== index || selectedItemSeriesId !== _this2.sId;
42720
+ // vertical bar chart
42721
+ h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42745
42722
  }
42746
- }
42747
42723
 
42748
- if (typeof barColor !== 'string') {
42749
- ctx.fillStyle = helpers_canvas.createGradient(ctx, isHorizontal, {
42750
- x: x,
42751
- y: y,
42752
- w: w,
42753
- h: h
42754
- }, barColor, isDownplay);
42755
- } else {
42756
- var noneDownplayOpacity = barColor.includes('rgba') ? helpers_util.getOpacity(barColor) : 1;
42757
- var opacity = isDownplay ? 0.1 : noneDownplayOpacity;
42758
- ctx.fillStyle = helpers_util.colorStringToRgba(barColor, opacity);
42759
- }
42724
+ var barColor = item.dataColor || this.color;
42725
+ var legendHitInfo = param === null || param === void 0 ? void 0 : param.legendHitInfo;
42726
+ var selectLabelOption = param === null || param === void 0 ? void 0 : (_param$selectLabel = param.selectLabel) === null || _param$selectLabel === void 0 ? void 0 : _param$selectLabel.option;
42727
+ var selectItemOption = param === null || param === void 0 ? void 0 : (_param$selectItem = param.selectItem) === null || _param$selectItem === void 0 ? void 0 : _param$selectItem.option;
42728
+ var selectedLabelList = (_param$selectLabel$se = param === null || param === void 0 ? void 0 : (_param$selectLabel2 = param.selectLabel) === null || _param$selectLabel2 === void 0 ? void 0 : (_param$selectLabel2$s = _param$selectLabel2.selected) === null || _param$selectLabel2$s === void 0 ? void 0 : _param$selectLabel2$s.dataIndex) !== null && _param$selectLabel$se !== void 0 ? _param$selectLabel$se : [];
42729
+
42730
+ var _ref3 = (_param$selectItem$sel = param === null || param === void 0 ? void 0 : (_param$selectItem2 = param.selectItem) === null || _param$selectItem2 === void 0 ? void 0 : _param$selectItem2.selected) !== null && _param$selectItem$sel !== void 0 ? _param$selectItem$sel : {},
42731
+ selectedItemDataIndex = _ref3.dataIndex,
42732
+ selectedItemSeriesId = _ref3.seriesID;
42733
+
42734
+ var isDownplay = false;
42735
+
42736
+ if (legendHitInfo) {
42737
+ isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== this.sId;
42738
+ } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42739
+ isDownplay = selectedLabelList.length && !selectedLabelList.includes(i);
42740
+ } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42741
+ if (this.isExistGrp) {
42742
+ isDownplay = selectedItemDataIndex !== i;
42743
+ } else {
42744
+ isDownplay = selectedItemDataIndex !== i || selectedItemSeriesId !== this.sId;
42745
+ }
42746
+ }
42760
42747
 
42761
- _this2.drawBar({
42762
- ctx: ctx,
42763
- positions: {
42764
- x: x,
42765
- y: y,
42766
- w: w,
42767
- h: h
42748
+ if (typeof barColor !== 'string') {
42749
+ ctx.fillStyle = helpers_canvas.createGradient(ctx, isHorizontal, {
42750
+ x: x,
42751
+ y: y,
42752
+ w: w,
42753
+ h: h
42754
+ }, barColor, isDownplay);
42755
+ } else {
42756
+ var noneDownplayOpacity = barColor.includes('rgba') ? helpers_util.getOpacity(barColor) : 1;
42757
+ var opacity = isDownplay ? 0.1 : noneDownplayOpacity;
42758
+ ctx.fillStyle = helpers_util.colorStringToRgba(barColor, opacity);
42768
42759
  }
42769
- });
42770
42760
 
42771
- if (showValue.use) {
42772
- _this2.drawValueLabels({
42773
- context: ctx,
42774
- data: item,
42761
+ this.drawBar({
42762
+ ctx: ctx,
42775
42763
  positions: {
42776
42764
  x: x,
42777
42765
  y: y,
42778
- h: h,
42779
- w: w
42780
- },
42781
- isHighlight: false,
42782
- textColor: item.dataTextColor
42766
+ w: w,
42767
+ h: h
42768
+ }
42783
42769
  });
42784
- }
42785
42770
 
42786
- item.xp = x; // eslint-disable-line
42771
+ if (showValue.use) {
42772
+ this.drawValueLabels({
42773
+ context: ctx,
42774
+ data: item,
42775
+ positions: {
42776
+ x: x,
42777
+ y: y,
42778
+ h: h,
42779
+ w: w
42780
+ },
42781
+ isHighlight: false,
42782
+ textColor: item.dataTextColor,
42783
+ index: i
42784
+ });
42785
+ } // 좌표 및 인덱스 정보 세팅 (툴팁/hover용)
42787
42786
 
42788
- item.yp = y; // eslint-disable-line
42789
42787
 
42790
- item.w = w; // eslint-disable-line
42788
+ item.xp = x; // eslint-disable-line
42791
42789
 
42792
- item.h = isHorizontal ? -h : h; // eslint-disable-line
42793
- });
42790
+ item.yp = y; // eslint-disable-line
42791
+
42792
+ item.w = w; // eslint-disable-line
42793
+
42794
+ item.h = isHorizontal ? -h : h; // eslint-disable-line
42795
+
42796
+ item.index = i; // 실제 데이터 인덱스 (스크롤 offset 포함)
42797
+ // 검색(hitInfo) 로직은 this.data[0..filteredCount-1] 범위만 검사하므로,
42798
+ // 현재 화면에 그린 항목을 배열 앞쪽으로 매핑해준다.
42799
+
42800
+ this.data[screenIndex] = item;
42801
+ }
42802
+ }
42794
42803
  }
42795
42804
  /**
42796
42805
  * Draw item highlight
42797
42806
  * @param {object} item object for drawing series data
42798
42807
  * @param {CanvasRenderingContext2D} context canvas context
42808
+ * @param {number} index label index
42799
42809
  *
42800
42810
  * @returns {undefined}
42801
42811
  */
42802
42812
 
42803
42813
  }, {
42804
42814
  key: "itemHighlight",
42805
- value: function itemHighlight(item, context) {
42815
+ value: function itemHighlight(item, context, index) {
42806
42816
  var showValue = this.showValue;
42807
42817
  var gdata = item.data;
42808
42818
  var ctx = context;
@@ -42852,7 +42862,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42852
42862
  w: w
42853
42863
  },
42854
42864
  isHighlight: true,
42855
- textColor: item.data.dataTextColor || item.dataTextColor
42865
+ textColor: item.data.dataTextColor || item.dataTextColor,
42866
+ index: index
42856
42867
  });
42857
42868
  }
42858
42869
 
@@ -42977,6 +42988,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
42977
42988
  * @param positions series value positions
42978
42989
  * @param isHighlight draw label with highlight effect
42979
42990
  * @param textColor data text color
42991
+ * @param index label index
42980
42992
  */
42981
42993
 
42982
42994
  }, {
@@ -42986,7 +42998,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42986
42998
  data = _ref4.data,
42987
42999
  positions = _ref4.positions,
42988
43000
  isHighlight = _ref4.isHighlight,
42989
- textColor = _ref4.textColor;
43001
+ textColor = _ref4.textColor,
43002
+ index = _ref4.index;
42990
43003
  var isHorizontal = this.isHorizontal;
42991
43004
  var _this$showValue = this.showValue,
42992
43005
  fontSize = _this$showValue.fontSize,
@@ -43021,7 +43034,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43021
43034
 
43022
43035
  if (formatter) {
43023
43036
  formattedTxt = formatter(value, {
43024
- label: isHorizontal ? data.y : data.x
43037
+ label: isHorizontal ? data.y : data.x,
43038
+ index: index
43025
43039
  });
43026
43040
  }
43027
43041
 
@@ -43120,6 +43134,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43120
43134
  return;
43121
43135
  }
43122
43136
 
43137
+ ctx.save();
43138
+
43123
43139
  if (isBorderRadius && !isStackBar) {
43124
43140
  try {
43125
43141
  this.drawRoundedRect(ctx, positions);
@@ -43129,6 +43145,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43129
43145
  } else {
43130
43146
  ctx.fillRect(x, y, w, h);
43131
43147
  }
43148
+
43149
+ ctx.restore();
43132
43150
  }
43133
43151
  }, {
43134
43152
  key: "drawRoundedRect",
@@ -43144,6 +43162,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43144
43162
  var squarePath = new Path2D();
43145
43163
  squarePath.rect(chartRect.x1 + labelOffset.left, chartRect.y1, chartRect.chartWidth - labelOffset.right, chartRect.chartHeight - labelOffset.bottom);
43146
43164
  ctx.clip(squarePath);
43165
+ ctx.beginPath();
43147
43166
  ctx.moveTo(x, y);
43148
43167
 
43149
43168
  if (isHorizontal) {
@@ -43372,7 +43391,7 @@ var element_bar_time_TimeBar = /*#__PURE__*/function (_Bar) {
43372
43391
  this.chartRect = chartRect;
43373
43392
  this.labelOffset = labelOffset;
43374
43393
  this.borderRadius = param.borderRadius;
43375
- this.data.forEach(function (item) {
43394
+ this.data.forEach(function (item, index) {
43376
43395
  ctx.beginPath();
43377
43396
 
43378
43397
  if (isHorizontal) {
@@ -43452,7 +43471,8 @@ var element_bar_time_TimeBar = /*#__PURE__*/function (_Bar) {
43452
43471
  h: h,
43453
43472
  w: w
43454
43473
  },
43455
- isHighlight: false
43474
+ isHighlight: false,
43475
+ index: index
43456
43476
  });
43457
43477
  }
43458
43478
  }
@@ -49034,8 +49054,24 @@ var plugins_scrollbar_module = {
49034
49054
  limitMax = +minMax.max;
49035
49055
  }
49036
49056
 
49037
- scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49038
- scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49057
+ var originalWidth = max - min;
49058
+ var availableWidth = limitMax - limitMin;
49059
+
49060
+ if (originalWidth >= availableWidth) {
49061
+ scrollbarOpt.range[0] = limitMin;
49062
+ scrollbarOpt.range[1] = limitMax;
49063
+ } else {
49064
+ scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49065
+ scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49066
+
49067
+ if (scrollbarOpt.range[1] - scrollbarOpt.range[0] < originalWidth) {
49068
+ scrollbarOpt.range[0] = scrollbarOpt.range[1] - originalWidth;
49069
+
49070
+ if (scrollbarOpt.range[0] < limitMin) {
49071
+ scrollbarOpt.range[0] = limitMin;
49072
+ }
49073
+ }
49074
+ }
49039
49075
  }
49040
49076
  }
49041
49077
  },
@@ -49073,9 +49109,22 @@ var plugins_scrollbar_module = {
49073
49109
  var isUpdateAxesRange = !lodash_es_isEqual(newOpt === null || newOpt === void 0 ? void 0 : (_newOpt$4 = newOpt[0]) === null || _newOpt$4 === void 0 ? void 0 : _newOpt$4.range, axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$5 = axisOpt[0]) === null || _axisOpt$5 === void 0 ? void 0 : _axisOpt$5.range);
49074
49110
 
49075
49111
  if (isUpdateAxesRange || updateData) {
49076
- var _newOpt$5, _newOpt$5$range, _newOpt$6;
49112
+ var _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
49113
+
49114
+ var isResetPosition = dir === 'x' ? (_this$options$axesX2 = this.options.axesX) === null || _this$options$axesX2 === void 0 ? void 0 : (_this$options$axesX2$ = _this$options$axesX2[0]) === null || _this$options$axesX2$ === void 0 ? void 0 : (_this$options$axesX2$2 = _this$options$axesX2$.scrollbar) === null || _this$options$axesX2$2 === void 0 ? void 0 : _this$options$axesX2$2.resetPosition : (_this$options$axesY2 = this.options.axesY) === null || _this$options$axesY2 === void 0 ? void 0 : (_this$options$axesY2$ = _this$options$axesY2[0]) === null || _this$options$axesY2$ === void 0 ? void 0 : (_this$options$axesY2$2 = _this$options$axesY2$.scrollbar) === null || _this$options$axesY2$2 === void 0 ? void 0 : _this$options$axesY2$2.resetPosition;
49115
+
49116
+ if (isUpdateAxesRange || isResetPosition) {
49117
+ var _newOpt$5, _newOpt$5$range, _newOpt$6;
49118
+
49119
+ this.scrollbar[dir].range = newOpt !== null && newOpt !== void 0 && (_newOpt$5 = newOpt[0]) !== null && _newOpt$5 !== void 0 && (_newOpt$5$range = _newOpt$5.range) !== null && _newOpt$5$range !== void 0 && _newOpt$5$range.length ? _toConsumableArray(newOpt === null || newOpt === void 0 ? void 0 : (_newOpt$6 = newOpt[0]) === null || _newOpt$6 === void 0 ? void 0 : _newOpt$6.range) : null; // range가 업데이트되면 저장된 스크롤 위치를 초기화
49120
+
49121
+ delete this.scrollbar[dir].savedPosition;
49122
+ } else if (updateData) {
49123
+ // 데이터가 업데이트되면 저장된 픽셀 위치는 더 이상 유효하지 않으므로 삭제하여
49124
+ // 논리적 범위에 따라 다시 계산하도록 합니다.
49125
+ delete this.scrollbar[dir].savedPosition;
49126
+ }
49077
49127
 
49078
- this.scrollbar[dir].range = newOpt !== null && newOpt !== void 0 && (_newOpt$5 = newOpt[0]) !== null && _newOpt$5 !== void 0 && (_newOpt$5$range = _newOpt$5.range) !== null && _newOpt$5$range !== void 0 && _newOpt$5$range.length ? _toConsumableArray(newOpt === null || newOpt === void 0 ? void 0 : (_newOpt$6 = newOpt[0]) === null || _newOpt$6 === void 0 ? void 0 : _newOpt$6.range) : null;
49079
49128
  this.initScrollbarRange(dir);
49080
49129
  }
49081
49130
 
@@ -49089,11 +49138,20 @@ var plugins_scrollbar_module = {
49089
49138
  var _this$scrollbar$x, _this$scrollbar$x2, _this$scrollbar$y, _this$scrollbar$y2;
49090
49139
 
49091
49140
  if ((_this$scrollbar$x = this.scrollbar.x) !== null && _this$scrollbar$x !== void 0 && _this$scrollbar$x.use && (_this$scrollbar$x2 = this.scrollbar.x) !== null && _this$scrollbar$x2 !== void 0 && _this$scrollbar$x2.isInit) {
49092
- this.setScrollbarPosition('x');
49141
+ var _this$options$axesX3, _this$options$axesX3$, _this$options$axesX3$2;
49142
+
49143
+ // resetPosition 옵션에 따라 preservePosition 결정
49144
+ var preservePosition = !((_this$options$axesX3 = this.options.axesX) !== null && _this$options$axesX3 !== void 0 && (_this$options$axesX3$ = _this$options$axesX3[0]) !== null && _this$options$axesX3$ !== void 0 && (_this$options$axesX3$2 = _this$options$axesX3$.scrollbar) !== null && _this$options$axesX3$2 !== void 0 && _this$options$axesX3$2.resetPosition);
49145
+ this.setScrollbarPosition('x', preservePosition);
49093
49146
  }
49094
49147
 
49095
49148
  if ((_this$scrollbar$y = this.scrollbar.y) !== null && _this$scrollbar$y !== void 0 && _this$scrollbar$y.use && (_this$scrollbar$y2 = this.scrollbar.y) !== null && _this$scrollbar$y2 !== void 0 && _this$scrollbar$y2.isInit) {
49096
- this.setScrollbarPosition('y');
49149
+ var _this$options$axesY3, _this$options$axesY3$, _this$options$axesY3$2;
49150
+
49151
+ // resetPosition 옵션에 따라 preservePosition 결정
49152
+ var _preservePosition = !((_this$options$axesY3 = this.options.axesY) !== null && _this$options$axesY3 !== void 0 && (_this$options$axesY3$ = _this$options$axesY3[0]) !== null && _this$options$axesY3$ !== void 0 && (_this$options$axesY3$2 = _this$options$axesY3$.scrollbar) !== null && _this$options$axesY3$2 !== void 0 && _this$options$axesY3$2.resetPosition);
49153
+
49154
+ this.setScrollbarPosition('y', _preservePosition);
49097
49155
  }
49098
49156
  },
49099
49157
 
@@ -49176,10 +49234,12 @@ var plugins_scrollbar_module = {
49176
49234
  /**
49177
49235
  * set scrollbar position
49178
49236
  * @param dir axis direction ('x' | 'y')
49237
+ * @param preservePosition 기존 위치를 유지할지 여부
49179
49238
  */
49180
49239
  setScrollbarPosition: function setScrollbarPosition(dir) {
49181
49240
  var _this$options$title, _this$options$title2;
49182
49241
 
49242
+ var preservePosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49183
49243
  var scrollbarOpt = this.scrollbar[dir];
49184
49244
 
49185
49245
  if (!scrollbarOpt.use || !scrollbarOpt.range) {
@@ -49200,8 +49260,17 @@ var plugins_scrollbar_module = {
49200
49260
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
49201
49261
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
49202
49262
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
49203
- var trackSize = fullSize - buttonSize * 2;
49204
- var thumbSize = this.getScrollbarThumbSize(dir, trackSize);
49263
+ var trackSize = fullSize - buttonSize * 2; // 현재 위치를 보존해야 하는 경우 기존 위치를 저장
49264
+
49265
+ var savedThumbPosition = null;
49266
+
49267
+ if (preservePosition && scrollbarOpt.savedPosition !== undefined) {
49268
+ savedThumbPosition = scrollbarOpt.savedPosition;
49269
+ }
49270
+
49271
+ var thumbSize = this.getScrollbarThumbSize(dir, trackSize, savedThumbPosition); // 새로 계산된 위치를 저장
49272
+
49273
+ scrollbarOpt.savedPosition = thumbSize.position;
49205
49274
  var scrollbarStyle = 'display: block;';
49206
49275
  var scrollbarTrackStyle;
49207
49276
  var scrollbarThumbStyle;
@@ -49268,8 +49337,9 @@ var plugins_scrollbar_module = {
49268
49337
  * get scrollbar thumb size
49269
49338
  * @param dir axis direction ('x' | 'y')
49270
49339
  * @param trackSize scrollbar track size
49340
+ * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
49271
49341
  */
49272
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
49342
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
49273
49343
  var scrollbarOpt = this.scrollbar[dir];
49274
49344
 
49275
49345
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -49322,7 +49392,12 @@ var plugins_scrollbar_module = {
49322
49392
 
49323
49393
  scrollbarOpt.startValue = startValue;
49324
49394
  scrollbarOpt.steps = steps;
49325
- scrollbarOpt.interval = interval;
49395
+ scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
49396
+
49397
+ if (savedThumbPosition !== null) {
49398
+ thumbPosition = savedThumbPosition;
49399
+ }
49400
+
49326
49401
  return {
49327
49402
  size: thumbSize,
49328
49403
  position: thumbPosition
@@ -49387,7 +49462,9 @@ var plugins_scrollbar_module = {
49387
49462
  }
49388
49463
 
49389
49464
  if (!isOutOfRange) {
49390
- scrollbarOpt.range = [minValue, maxValue];
49465
+ scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
49466
+
49467
+ delete scrollbarOpt.savedPosition;
49391
49468
  this.update({
49392
49469
  updateSeries: false,
49393
49470
  updateSelTip: {
@@ -49402,7 +49479,9 @@ var plugins_scrollbar_module = {
49402
49479
  * create scroll event
49403
49480
  */
49404
49481
  createScrollEvent: function createScrollEvent() {
49405
- var _this = this;
49482
+ var _this = this,
49483
+ _this$scrollbar$x6,
49484
+ _this$scrollbar$y5;
49406
49485
 
49407
49486
  this.onScrollbarClick = function (e) {
49408
49487
  e.preventDefault();
@@ -49494,9 +49573,65 @@ var plugins_scrollbar_module = {
49494
49573
  };
49495
49574
 
49496
49575
  this.onScrollbarWheel = function (e) {
49576
+ var _this$tooltipDOM, _this$tooltipDOM$styl, _this$tooltipDOM2, _this$scrollbar$x3, _this$scrollbar$x5, _this$scrollbar$y4;
49577
+
49578
+ var isTooltipVisible = ((_this$tooltipDOM = _this.tooltipDOM) === null || _this$tooltipDOM === void 0 ? void 0 : (_this$tooltipDOM$styl = _this$tooltipDOM.style) === null || _this$tooltipDOM$styl === void 0 ? void 0 : _this$tooltipDOM$styl.display) === 'block';
49579
+ var tooltipBodyDOM = _this.tooltipBodyDOM || ((_this$tooltipDOM2 = _this.tooltipDOM) === null || _this$tooltipDOM2 === void 0 ? void 0 : _this$tooltipDOM2.querySelector(_this.options.tooltip.htmlScrollTarget));
49580
+
49581
+ if (isTooltipVisible && tooltipBodyDOM) {
49582
+ var scrollTop = tooltipBodyDOM.scrollTop,
49583
+ scrollHeight = tooltipBodyDOM.scrollHeight,
49584
+ clientHeight = tooltipBodyDOM.clientHeight;
49585
+ var isAtTop = scrollTop <= 0;
49586
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight;
49587
+ var isScrollingUp = e.deltaY < 0;
49588
+ var isScrollingDown = e.deltaY > 0;
49589
+
49590
+ if (isAtTop && isScrollingUp || isAtBottom && isScrollingDown) {// 툴팁의 스크롤이 맨 위나 맨 아래에 닿았는데 스크롤 하면 차트 스크롤 허용
49591
+ } else {
49592
+ // 툴팁 내부 스크롤만 수행
49593
+ return;
49594
+ }
49595
+ }
49596
+
49497
49597
  e.preventDefault();
49598
+ var threshold = 1; // 최소 스크롤 임계값
49599
+ // Shift + 휠: 가로 스크롤 (일반 마우스 휠 지원)
49600
+
49601
+ if ((_this$scrollbar$x3 = _this.scrollbar.x) !== null && _this$scrollbar$x3 !== void 0 && _this$scrollbar$x3.use && e.shiftKey && Math.abs(e.deltaY) > threshold) {
49602
+ _this.updateScrollbarRange('x', e.deltaY > 0);
49603
+
49604
+ return;
49605
+ } // 대각선 스크롤 처리: 더 큰 방향을 우선으로 처리
49606
+
49607
+
49608
+ var absX = Math.abs(e.deltaX);
49609
+ var absY = Math.abs(e.deltaY);
49610
+
49611
+ if (absX > threshold && absY > threshold) {
49612
+ var _this$scrollbar$x4, _this$scrollbar$y3;
49613
+
49614
+ // 두 방향 모두 임계값 이상일 때: 더 큰 방향을 우선 처리
49615
+ if (absX > absY && (_this$scrollbar$x4 = _this.scrollbar.x) !== null && _this$scrollbar$x4 !== void 0 && _this$scrollbar$x4.use) {
49616
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49617
+ } else if (absY > absX && (_this$scrollbar$y3 = _this.scrollbar.y) !== null && _this$scrollbar$y3 !== void 0 && _this$scrollbar$y3.use) {
49618
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49619
+ }
49620
+
49621
+ return;
49622
+ } // 가로 스크롤 처리 (deltaX - 트랙패드 좌우 스크롤)
49623
+
49624
+
49625
+ if ((_this$scrollbar$x5 = _this.scrollbar.x) !== null && _this$scrollbar$x5 !== void 0 && _this$scrollbar$x5.use && absX > threshold) {
49626
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49498
49627
 
49499
- _this.updateScrollbarRange('y', e.deltaY < 0);
49628
+ return;
49629
+ } // 세로 스크롤 처리 (deltaY)
49630
+
49631
+
49632
+ if ((_this$scrollbar$y4 = _this.scrollbar.y) !== null && _this$scrollbar$y4 !== void 0 && _this$scrollbar$y4.use && absY > threshold) {
49633
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49634
+ }
49500
49635
  };
49501
49636
 
49502
49637
  if (this.scrollbar.x.use && !this.scrollbar.x.isInit) {
@@ -49507,12 +49642,16 @@ var plugins_scrollbar_module = {
49507
49642
  }
49508
49643
 
49509
49644
  if (this.scrollbar.y.use && !this.scrollbar.y.isInit) {
49510
- var _this$overlayCanvas;
49511
-
49512
49645
  var scrollbarYDOM = this.scrollbar.y.dom;
49513
49646
  scrollbarYDOM.addEventListener('click', this.onScrollbarClick);
49514
49647
  scrollbarYDOM.addEventListener('mousedown', this.onScrollbarDown);
49515
49648
  scrollbarYDOM.addEventListener('mouseleave', this.onScrollbarLeave);
49649
+ } // 가로 또는 세로 스크롤바가 있으면 휠 이벤트 등록
49650
+
49651
+
49652
+ if ((_this$scrollbar$x6 = this.scrollbar.x) !== null && _this$scrollbar$x6 !== void 0 && _this$scrollbar$x6.use || (_this$scrollbar$y5 = this.scrollbar.y) !== null && _this$scrollbar$y5 !== void 0 && _this$scrollbar$y5.use) {
49653
+ var _this$overlayCanvas;
49654
+
49516
49655
  (_this$overlayCanvas = this.overlayCanvas) === null || _this$overlayCanvas === void 0 ? void 0 : _this$overlayCanvas.addEventListener('wheel', this.onScrollbarWheel, {
49517
49656
  passive: false
49518
49657
  });
@@ -49588,7 +49727,9 @@ var plugins_scrollbar_module = {
49588
49727
  return;
49589
49728
  }
49590
49729
 
49591
- this.scrollbar[dir].range = [movedMin, movedMax];
49730
+ this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
49731
+
49732
+ delete this.scrollbar[dir].savedPosition;
49592
49733
  this.update({
49593
49734
  updateSeries: false,
49594
49735
  updateSelTip: {
@@ -49637,15 +49778,17 @@ var plugins_scrollbar_module = {
49637
49778
  * @param dir axis direction ('x' | 'y')
49638
49779
  */
49639
49780
  destroyScrollbar: function destroyScrollbar(dir) {
49640
- var scrollbarXDOM = this.scrollbar[dir].dom;
49781
+ var scrollbarDOM = this.scrollbar[dir].dom;
49782
+
49783
+ if (scrollbarDOM) {
49784
+ var _this$scrollbar$x7, _this$scrollbar$y6;
49641
49785
 
49642
- if (scrollbarXDOM) {
49643
- scrollbarXDOM.remove();
49786
+ scrollbarDOM.remove();
49644
49787
  this.scrollbar[dir] = {
49645
49788
  isInit: false
49646
- };
49789
+ }; // 가로, 세로 스크롤바 모두 없어지면 휠 이벤트 제거
49647
49790
 
49648
- if (dir === 'y') {
49791
+ if (!((_this$scrollbar$x7 = this.scrollbar.x) !== null && _this$scrollbar$x7 !== void 0 && _this$scrollbar$x7.use) && !((_this$scrollbar$y6 = this.scrollbar.y) !== null && _this$scrollbar$y6 !== void 0 && _this$scrollbar$y6.use)) {
49649
49792
  var _this$overlayCanvas2;
49650
49793
 
49651
49794
  (_this$overlayCanvas2 = this.overlayCanvas) === null || _this$overlayCanvas2 === void 0 ? void 0 : _this$overlayCanvas2.removeEventListener('wheel', this.onScrollbarWheel, {
@@ -52413,7 +52556,8 @@ var plugins_tooltip_modules = {
52413
52556
  data: hitInfoItems[sId].data,
52414
52557
  color: hitInfoItems[sId].color,
52415
52558
  name: hitInfoItems[sId].name,
52416
- dataId: hitInfoItems[sId].id
52559
+ dataId: hitInfoItems[sId].id,
52560
+ index: hitInfoItems[sId].index
52417
52561
  });
52418
52562
  });
52419
52563
  var userCustomTooltipBody = helpers_util.htmlToElement(opt === null || opt === void 0 ? void 0 : (_opt$formatter3 = opt.formatter) === null || _opt$formatter3 === void 0 ? void 0 : _opt$formatter3.html(seriesList));
@@ -52463,7 +52607,7 @@ var plugins_tooltip_modules = {
52463
52607
 
52464
52608
  Object.keys(hitInfo.items).forEach(function (sId) {
52465
52609
  var series = _this2.seriesList[sId];
52466
- series.itemHighlight(hitInfo.items[sId], ctx);
52610
+ series.itemHighlight(hitInfo.items[sId], ctx, hitInfo.items[sId].index);
52467
52611
 
52468
52612
  if (helpers_util.isDoughnutHole(series.type)) {
52469
52613
  _this2.drawDoughnutHole(ctx);
@@ -54818,6 +54962,18 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54818
54962
  }, {
54819
54963
  key: "resize",
54820
54964
  value: function resize(promiseRes) {
54965
+ var _this$scrollbar3, _this$scrollbar4;
54966
+
54967
+ // 차트 크기가 변경될 때 저장된 스크롤 픽셀 위치를 초기화하여
54968
+ // 새로운 크기에 맞춰 스크롤바 크기/위치를 재계산하도록 함
54969
+ if ((_this$scrollbar3 = this.scrollbar) !== null && _this$scrollbar3 !== void 0 && _this$scrollbar3.x) {
54970
+ delete this.scrollbar.x.savedPosition;
54971
+ }
54972
+
54973
+ if ((_this$scrollbar4 = this.scrollbar) !== null && _this$scrollbar4 !== void 0 && _this$scrollbar4.y) {
54974
+ delete this.scrollbar.y.savedPosition;
54975
+ }
54976
+
54821
54977
  this.clear();
54822
54978
  this.bufferCtx.restore();
54823
54979
  this.bufferCtx.save();