evui 3.4.108 → 3.4.109

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.109\"}");
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,119 +42677,128 @@ 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
-
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
42699
 
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
+ });
42784
+ } // 좌표 및 인덱스 정보 세팅 (툴팁/hover용)
42787
42785
 
42788
- item.yp = y; // eslint-disable-line
42789
42786
 
42790
- item.w = w; // eslint-disable-line
42787
+ item.xp = x; // eslint-disable-line
42791
42788
 
42792
- item.h = isHorizontal ? -h : h; // eslint-disable-line
42793
- });
42789
+ item.yp = y; // eslint-disable-line
42790
+
42791
+ item.w = w; // eslint-disable-line
42792
+
42793
+ item.h = isHorizontal ? -h : h; // eslint-disable-line
42794
+
42795
+ item.index = i; // 실제 데이터 인덱스 (스크롤 offset 포함)
42796
+ // 검색(hitInfo) 로직은 this.data[0..filteredCount-1] 범위만 검사하므로,
42797
+ // 현재 화면에 그린 항목을 배열 앞쪽으로 매핑해준다.
42798
+
42799
+ this.data[screenIndex] = item;
42800
+ }
42801
+ }
42794
42802
  }
42795
42803
  /**
42796
42804
  * Draw item highlight
@@ -43120,6 +43128,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43120
43128
  return;
43121
43129
  }
43122
43130
 
43131
+ ctx.save();
43132
+
43123
43133
  if (isBorderRadius && !isStackBar) {
43124
43134
  try {
43125
43135
  this.drawRoundedRect(ctx, positions);
@@ -43129,6 +43139,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43129
43139
  } else {
43130
43140
  ctx.fillRect(x, y, w, h);
43131
43141
  }
43142
+
43143
+ ctx.restore();
43132
43144
  }
43133
43145
  }, {
43134
43146
  key: "drawRoundedRect",
@@ -43144,6 +43156,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43144
43156
  var squarePath = new Path2D();
43145
43157
  squarePath.rect(chartRect.x1 + labelOffset.left, chartRect.y1, chartRect.chartWidth - labelOffset.right, chartRect.chartHeight - labelOffset.bottom);
43146
43158
  ctx.clip(squarePath);
43159
+ ctx.beginPath();
43147
43160
  ctx.moveTo(x, y);
43148
43161
 
43149
43162
  if (isHorizontal) {
@@ -49034,8 +49047,24 @@ var plugins_scrollbar_module = {
49034
49047
  limitMax = +minMax.max;
49035
49048
  }
49036
49049
 
49037
- scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49038
- scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49050
+ var originalWidth = max - min;
49051
+ var availableWidth = limitMax - limitMin;
49052
+
49053
+ if (originalWidth >= availableWidth) {
49054
+ scrollbarOpt.range[0] = limitMin;
49055
+ scrollbarOpt.range[1] = limitMax;
49056
+ } else {
49057
+ scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49058
+ scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49059
+
49060
+ if (scrollbarOpt.range[1] - scrollbarOpt.range[0] < originalWidth) {
49061
+ scrollbarOpt.range[0] = scrollbarOpt.range[1] - originalWidth;
49062
+
49063
+ if (scrollbarOpt.range[0] < limitMin) {
49064
+ scrollbarOpt.range[0] = limitMin;
49065
+ }
49066
+ }
49067
+ }
49039
49068
  }
49040
49069
  }
49041
49070
  },
@@ -49073,9 +49102,22 @@ var plugins_scrollbar_module = {
49073
49102
  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
49103
 
49075
49104
  if (isUpdateAxesRange || updateData) {
49076
- var _newOpt$5, _newOpt$5$range, _newOpt$6;
49105
+ var _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
49106
+
49107
+ 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;
49108
+
49109
+ if (isUpdateAxesRange || isResetPosition) {
49110
+ var _newOpt$5, _newOpt$5$range, _newOpt$6;
49111
+
49112
+ 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가 업데이트되면 저장된 스크롤 위치를 초기화
49113
+
49114
+ delete this.scrollbar[dir].savedPosition;
49115
+ } else if (updateData) {
49116
+ // 데이터가 업데이트되면 저장된 픽셀 위치는 더 이상 유효하지 않으므로 삭제하여
49117
+ // 논리적 범위에 따라 다시 계산하도록 합니다.
49118
+ delete this.scrollbar[dir].savedPosition;
49119
+ }
49077
49120
 
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
49121
  this.initScrollbarRange(dir);
49080
49122
  }
49081
49123
 
@@ -49089,11 +49131,20 @@ var plugins_scrollbar_module = {
49089
49131
  var _this$scrollbar$x, _this$scrollbar$x2, _this$scrollbar$y, _this$scrollbar$y2;
49090
49132
 
49091
49133
  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');
49134
+ var _this$options$axesX3, _this$options$axesX3$, _this$options$axesX3$2;
49135
+
49136
+ // resetPosition 옵션에 따라 preservePosition 결정
49137
+ 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);
49138
+ this.setScrollbarPosition('x', preservePosition);
49093
49139
  }
49094
49140
 
49095
49141
  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');
49142
+ var _this$options$axesY3, _this$options$axesY3$, _this$options$axesY3$2;
49143
+
49144
+ // resetPosition 옵션에 따라 preservePosition 결정
49145
+ 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);
49146
+
49147
+ this.setScrollbarPosition('y', _preservePosition);
49097
49148
  }
49098
49149
  },
49099
49150
 
@@ -49176,10 +49227,12 @@ var plugins_scrollbar_module = {
49176
49227
  /**
49177
49228
  * set scrollbar position
49178
49229
  * @param dir axis direction ('x' | 'y')
49230
+ * @param preservePosition 기존 위치를 유지할지 여부
49179
49231
  */
49180
49232
  setScrollbarPosition: function setScrollbarPosition(dir) {
49181
49233
  var _this$options$title, _this$options$title2;
49182
49234
 
49235
+ var preservePosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49183
49236
  var scrollbarOpt = this.scrollbar[dir];
49184
49237
 
49185
49238
  if (!scrollbarOpt.use || !scrollbarOpt.range) {
@@ -49200,8 +49253,17 @@ var plugins_scrollbar_module = {
49200
49253
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
49201
49254
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
49202
49255
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
49203
- var trackSize = fullSize - buttonSize * 2;
49204
- var thumbSize = this.getScrollbarThumbSize(dir, trackSize);
49256
+ var trackSize = fullSize - buttonSize * 2; // 현재 위치를 보존해야 하는 경우 기존 위치를 저장
49257
+
49258
+ var savedThumbPosition = null;
49259
+
49260
+ if (preservePosition && scrollbarOpt.savedPosition !== undefined) {
49261
+ savedThumbPosition = scrollbarOpt.savedPosition;
49262
+ }
49263
+
49264
+ var thumbSize = this.getScrollbarThumbSize(dir, trackSize, savedThumbPosition); // 새로 계산된 위치를 저장
49265
+
49266
+ scrollbarOpt.savedPosition = thumbSize.position;
49205
49267
  var scrollbarStyle = 'display: block;';
49206
49268
  var scrollbarTrackStyle;
49207
49269
  var scrollbarThumbStyle;
@@ -49268,8 +49330,9 @@ var plugins_scrollbar_module = {
49268
49330
  * get scrollbar thumb size
49269
49331
  * @param dir axis direction ('x' | 'y')
49270
49332
  * @param trackSize scrollbar track size
49333
+ * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
49271
49334
  */
49272
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
49335
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
49273
49336
  var scrollbarOpt = this.scrollbar[dir];
49274
49337
 
49275
49338
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -49322,7 +49385,12 @@ var plugins_scrollbar_module = {
49322
49385
 
49323
49386
  scrollbarOpt.startValue = startValue;
49324
49387
  scrollbarOpt.steps = steps;
49325
- scrollbarOpt.interval = interval;
49388
+ scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
49389
+
49390
+ if (savedThumbPosition !== null) {
49391
+ thumbPosition = savedThumbPosition;
49392
+ }
49393
+
49326
49394
  return {
49327
49395
  size: thumbSize,
49328
49396
  position: thumbPosition
@@ -49387,7 +49455,9 @@ var plugins_scrollbar_module = {
49387
49455
  }
49388
49456
 
49389
49457
  if (!isOutOfRange) {
49390
- scrollbarOpt.range = [minValue, maxValue];
49458
+ scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
49459
+
49460
+ delete scrollbarOpt.savedPosition;
49391
49461
  this.update({
49392
49462
  updateSeries: false,
49393
49463
  updateSelTip: {
@@ -49402,7 +49472,9 @@ var plugins_scrollbar_module = {
49402
49472
  * create scroll event
49403
49473
  */
49404
49474
  createScrollEvent: function createScrollEvent() {
49405
- var _this = this;
49475
+ var _this = this,
49476
+ _this$scrollbar$x6,
49477
+ _this$scrollbar$y5;
49406
49478
 
49407
49479
  this.onScrollbarClick = function (e) {
49408
49480
  e.preventDefault();
@@ -49494,9 +49566,65 @@ var plugins_scrollbar_module = {
49494
49566
  };
49495
49567
 
49496
49568
  this.onScrollbarWheel = function (e) {
49569
+ var _this$tooltipDOM, _this$tooltipDOM$styl, _this$tooltipDOM2, _this$scrollbar$x3, _this$scrollbar$x5, _this$scrollbar$y4;
49570
+
49571
+ 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';
49572
+ var tooltipBodyDOM = _this.tooltipBodyDOM || ((_this$tooltipDOM2 = _this.tooltipDOM) === null || _this$tooltipDOM2 === void 0 ? void 0 : _this$tooltipDOM2.querySelector(_this.options.tooltip.htmlScrollTarget));
49573
+
49574
+ if (isTooltipVisible && tooltipBodyDOM) {
49575
+ var scrollTop = tooltipBodyDOM.scrollTop,
49576
+ scrollHeight = tooltipBodyDOM.scrollHeight,
49577
+ clientHeight = tooltipBodyDOM.clientHeight;
49578
+ var isAtTop = scrollTop <= 0;
49579
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight;
49580
+ var isScrollingUp = e.deltaY < 0;
49581
+ var isScrollingDown = e.deltaY > 0;
49582
+
49583
+ if (isAtTop && isScrollingUp || isAtBottom && isScrollingDown) {// 툴팁의 스크롤이 맨 위나 맨 아래에 닿았는데 스크롤 하면 차트 스크롤 허용
49584
+ } else {
49585
+ // 툴팁 내부 스크롤만 수행
49586
+ return;
49587
+ }
49588
+ }
49589
+
49497
49590
  e.preventDefault();
49591
+ var threshold = 1; // 최소 스크롤 임계값
49592
+ // Shift + 휠: 가로 스크롤 (일반 마우스 휠 지원)
49593
+
49594
+ if ((_this$scrollbar$x3 = _this.scrollbar.x) !== null && _this$scrollbar$x3 !== void 0 && _this$scrollbar$x3.use && e.shiftKey && Math.abs(e.deltaY) > threshold) {
49595
+ _this.updateScrollbarRange('x', e.deltaY > 0);
49596
+
49597
+ return;
49598
+ } // 대각선 스크롤 처리: 더 큰 방향을 우선으로 처리
49599
+
49600
+
49601
+ var absX = Math.abs(e.deltaX);
49602
+ var absY = Math.abs(e.deltaY);
49603
+
49604
+ if (absX > threshold && absY > threshold) {
49605
+ var _this$scrollbar$x4, _this$scrollbar$y3;
49606
+
49607
+ // 두 방향 모두 임계값 이상일 때: 더 큰 방향을 우선 처리
49608
+ if (absX > absY && (_this$scrollbar$x4 = _this.scrollbar.x) !== null && _this$scrollbar$x4 !== void 0 && _this$scrollbar$x4.use) {
49609
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49610
+ } else if (absY > absX && (_this$scrollbar$y3 = _this.scrollbar.y) !== null && _this$scrollbar$y3 !== void 0 && _this$scrollbar$y3.use) {
49611
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49612
+ }
49613
+
49614
+ return;
49615
+ } // 가로 스크롤 처리 (deltaX - 트랙패드 좌우 스크롤)
49616
+
49617
+
49618
+ if ((_this$scrollbar$x5 = _this.scrollbar.x) !== null && _this$scrollbar$x5 !== void 0 && _this$scrollbar$x5.use && absX > threshold) {
49619
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49498
49620
 
49499
- _this.updateScrollbarRange('y', e.deltaY < 0);
49621
+ return;
49622
+ } // 세로 스크롤 처리 (deltaY)
49623
+
49624
+
49625
+ if ((_this$scrollbar$y4 = _this.scrollbar.y) !== null && _this$scrollbar$y4 !== void 0 && _this$scrollbar$y4.use && absY > threshold) {
49626
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49627
+ }
49500
49628
  };
49501
49629
 
49502
49630
  if (this.scrollbar.x.use && !this.scrollbar.x.isInit) {
@@ -49507,12 +49635,16 @@ var plugins_scrollbar_module = {
49507
49635
  }
49508
49636
 
49509
49637
  if (this.scrollbar.y.use && !this.scrollbar.y.isInit) {
49510
- var _this$overlayCanvas;
49511
-
49512
49638
  var scrollbarYDOM = this.scrollbar.y.dom;
49513
49639
  scrollbarYDOM.addEventListener('click', this.onScrollbarClick);
49514
49640
  scrollbarYDOM.addEventListener('mousedown', this.onScrollbarDown);
49515
49641
  scrollbarYDOM.addEventListener('mouseleave', this.onScrollbarLeave);
49642
+ } // 가로 또는 세로 스크롤바가 있으면 휠 이벤트 등록
49643
+
49644
+
49645
+ 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) {
49646
+ var _this$overlayCanvas;
49647
+
49516
49648
  (_this$overlayCanvas = this.overlayCanvas) === null || _this$overlayCanvas === void 0 ? void 0 : _this$overlayCanvas.addEventListener('wheel', this.onScrollbarWheel, {
49517
49649
  passive: false
49518
49650
  });
@@ -49588,7 +49720,9 @@ var plugins_scrollbar_module = {
49588
49720
  return;
49589
49721
  }
49590
49722
 
49591
- this.scrollbar[dir].range = [movedMin, movedMax];
49723
+ this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
49724
+
49725
+ delete this.scrollbar[dir].savedPosition;
49592
49726
  this.update({
49593
49727
  updateSeries: false,
49594
49728
  updateSelTip: {
@@ -49637,15 +49771,17 @@ var plugins_scrollbar_module = {
49637
49771
  * @param dir axis direction ('x' | 'y')
49638
49772
  */
49639
49773
  destroyScrollbar: function destroyScrollbar(dir) {
49640
- var scrollbarXDOM = this.scrollbar[dir].dom;
49774
+ var scrollbarDOM = this.scrollbar[dir].dom;
49775
+
49776
+ if (scrollbarDOM) {
49777
+ var _this$scrollbar$x7, _this$scrollbar$y6;
49641
49778
 
49642
- if (scrollbarXDOM) {
49643
- scrollbarXDOM.remove();
49779
+ scrollbarDOM.remove();
49644
49780
  this.scrollbar[dir] = {
49645
49781
  isInit: false
49646
- };
49782
+ }; // 가로, 세로 스크롤바 모두 없어지면 휠 이벤트 제거
49647
49783
 
49648
- if (dir === 'y') {
49784
+ 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
49785
  var _this$overlayCanvas2;
49650
49786
 
49651
49787
  (_this$overlayCanvas2 = this.overlayCanvas) === null || _this$overlayCanvas2 === void 0 ? void 0 : _this$overlayCanvas2.removeEventListener('wheel', this.onScrollbarWheel, {
@@ -54818,6 +54954,18 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54818
54954
  }, {
54819
54955
  key: "resize",
54820
54956
  value: function resize(promiseRes) {
54957
+ var _this$scrollbar3, _this$scrollbar4;
54958
+
54959
+ // 차트 크기가 변경될 때 저장된 스크롤 픽셀 위치를 초기화하여
54960
+ // 새로운 크기에 맞춰 스크롤바 크기/위치를 재계산하도록 함
54961
+ if ((_this$scrollbar3 = this.scrollbar) !== null && _this$scrollbar3 !== void 0 && _this$scrollbar3.x) {
54962
+ delete this.scrollbar.x.savedPosition;
54963
+ }
54964
+
54965
+ if ((_this$scrollbar4 = this.scrollbar) !== null && _this$scrollbar4 !== void 0 && _this$scrollbar4.y) {
54966
+ delete this.scrollbar.y.savedPosition;
54967
+ }
54968
+
54821
54969
  this.clear();
54822
54970
  this.bufferCtx.restore();
54823
54971
  this.bufferCtx.save();