evui 3.4.107 → 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.107\"}");
11167
+ module.exports = JSON.parse("{\"a\":\"3.4.109\"}");
11168
11168
 
11169
11169
  /***/ }),
11170
11170
 
@@ -38851,6 +38851,8 @@ var modules = {
38851
38851
  };
38852
38852
 
38853
38853
  for (var x = 0; x < keys.length; x++) {
38854
+ var _this$dataSet$key$dat, _this$dataSet$key$dat2, _this$dataSet$key$dat3;
38855
+
38854
38856
  var key = keys[x];
38855
38857
  var data = datas[key];
38856
38858
  var storeLength = data === null || data === void 0 ? void 0 : data.length;
@@ -38869,9 +38871,6 @@ var modules = {
38869
38871
  }
38870
38872
 
38871
38873
  this.dataSet[key].length = this.options.realTimeScatter.range || 300;
38872
- this.dataSet[key].toTime = Math.floor(Date.now() / 1000) * 1000;
38873
- this.dataSet[key].fromTime = this.dataSet[key].toTime - this.dataSet[key].length * 1000;
38874
- this.dataSet[key].endIndex = this.dataSet[key].length - 1;
38875
38874
 
38876
38875
  for (var i = 0; i < storeLength; i++) {
38877
38876
  var item = data[i];
@@ -38882,6 +38881,10 @@ var modules = {
38882
38881
  }
38883
38882
 
38884
38883
  lastTime = Math.floor(lastTime / 1000) * 1000;
38884
+ var dataGroupLastTime = ((_this$dataSet$key$dat = this.dataSet[key].dataGroup.at(-1)) === null || _this$dataSet$key$dat === void 0 ? void 0 : (_this$dataSet$key$dat2 = _this$dataSet$key$dat.data) === null || _this$dataSet$key$dat2 === void 0 ? void 0 : (_this$dataSet$key$dat3 = _this$dataSet$key$dat2.at(-1)) === null || _this$dataSet$key$dat3 === void 0 ? void 0 : _this$dataSet$key$dat3.x) || Date.now();
38885
+ this.dataSet[key].toTime = lastTime || (dataGroupLastTime ? Math.floor(dataGroupLastTime / 1000) * 1000 : 0);
38886
+ this.dataSet[key].fromTime = this.dataSet[key].toTime - this.dataSet[key].length * 1000;
38887
+ this.dataSet[key].endIndex = this.dataSet[key].length - 1;
38885
38888
 
38886
38889
  if ((this.dataSet[key].toTime - lastTime) / 1000 > this.dataSet[key].length && key === '') {
38887
38890
  return;
@@ -42589,8 +42592,6 @@ var element_bar_Bar = /*#__PURE__*/function () {
42589
42592
  _createClass(Bar, [{
42590
42593
  key: "draw",
42591
42594
  value: function draw(param) {
42592
- var _this2 = this;
42593
-
42594
42595
  if (!this.show) {
42595
42596
  return;
42596
42597
  }
@@ -42620,7 +42621,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42620
42621
  var _ref2 = [minmaxX.minIndex, minmaxX.maxIndex];
42621
42622
  minIndex = _ref2[0];
42622
42623
  maxIndex = _ref2[1];
42623
- }
42624
+ } // minIndex, maxIndex가 유효하면 실제 그릴 데이터 개수로 보정
42625
+
42624
42626
 
42625
42627
  if (truthyNumber(minIndex) && truthyNumber(maxIndex)) {
42626
42628
  totalCount = maxIndex - minIndex + 1;
@@ -42675,119 +42677,128 @@ var element_bar_Bar = /*#__PURE__*/function () {
42675
42677
  this.labelOffset = labelOffset;
42676
42678
  this.borderRadius = param.borderRadius;
42677
42679
  this.filteredCount = totalCount;
42678
- var categoryPoint = null;
42679
- this.data.forEach(function (dataItem, index) {
42680
- 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; // 스크롤 범위 내에서만 루프 돌림
42681
42682
 
42682
- ctx.beginPath();
42683
- var item = dataItem;
42683
+ for (var i = startIndex; i <= endIndex; i++) {
42684
+ var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
42684
42685
 
42685
- if (truthyNumber(minIndex) && index < minIndex) {
42686
- return;
42687
- } else if (truthyNumber(minIndex) && index > maxIndex) {
42688
- return;
42689
- }
42686
+ var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
42690
42687
 
42691
- if (isHorizontal) {
42692
- categoryPoint = ysp - cArea * (index - (minIndex || 0)) - cPad;
42693
- } else {
42694
- categoryPoint = xsp + cArea * (index - (minIndex || 0)) + cPad;
42695
- }
42688
+ if (item) {
42689
+ var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42696
42690
 
42697
- if (isHorizontal) {
42698
- x = xsp;
42699
- y = Math.round(categoryPoint - (bArea * barSeriesX - (h + bPad)));
42700
- } else {
42701
- x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42702
- y = ysp;
42703
- }
42691
+ // 스크롤 offset(minIndex)만큼 보정해서 그리기
42692
+ var categoryPoint = void 0;
42704
42693
 
42705
- if (isHorizontal) {
42706
- if (item.b) {
42707
- w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42708
- x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42694
+ if (isHorizontal) {
42695
+ categoryPoint = ysp - cArea * screenIndex - cPad;
42709
42696
  } else {
42710
- w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42697
+ categoryPoint = xsp + cArea * screenIndex + cPad;
42711
42698
  }
42712
- } else if (item.b) {
42713
- // vertical stack bar chart
42714
- h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42715
- y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42716
- } else {
42717
- // vertical bar chart
42718
- h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42719
- }
42720
42699
 
42721
- var barColor = item.dataColor || _this2.color;
42722
- var legendHitInfo = param === null || param === void 0 ? void 0 : param.legendHitInfo;
42723
- var selectLabelOption = param === null || param === void 0 ? void 0 : (_param$selectLabel = param.selectLabel) === null || _param$selectLabel === void 0 ? void 0 : _param$selectLabel.option;
42724
- var selectItemOption = param === null || param === void 0 ? void 0 : (_param$selectItem = param.selectItem) === null || _param$selectItem === void 0 ? void 0 : _param$selectItem.option;
42725
- 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 : [];
42726
-
42727
- 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 : {},
42728
- selectedItemDataIndex = _ref3.dataIndex,
42729
- selectedItemSeriesId = _ref3.seriesID;
42730
-
42731
- 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
+ }
42732
42707
 
42733
- if (legendHitInfo) {
42734
- isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== _this2.sId;
42735
- } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42736
- isDownplay = selectedLabelList.length && !selectedLabelList.includes(index);
42737
- } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42738
- if (_this2.isExistGrp) {
42739
- 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);
42740
42719
  } else {
42741
- isDownplay = selectedItemDataIndex !== index || selectedItemSeriesId !== _this2.sId;
42720
+ // vertical bar chart
42721
+ h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42742
42722
  }
42743
- }
42744
42723
 
42745
- if (typeof barColor !== 'string') {
42746
- ctx.fillStyle = helpers_canvas.createGradient(ctx, isHorizontal, {
42747
- x: x,
42748
- y: y,
42749
- w: w,
42750
- h: h
42751
- }, barColor, isDownplay);
42752
- } else {
42753
- var noneDownplayOpacity = barColor.includes('rgba') ? helpers_util.getOpacity(barColor) : 1;
42754
- var opacity = isDownplay ? 0.1 : noneDownplayOpacity;
42755
- ctx.fillStyle = helpers_util.colorStringToRgba(barColor, opacity);
42756
- }
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
+ }
42757
42747
 
42758
- _this2.drawBar({
42759
- ctx: ctx,
42760
- positions: {
42761
- x: x,
42762
- y: y,
42763
- w: w,
42764
- 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);
42765
42759
  }
42766
- });
42767
42760
 
42768
- if (showValue.use) {
42769
- _this2.drawValueLabels({
42770
- context: ctx,
42771
- data: item,
42761
+ this.drawBar({
42762
+ ctx: ctx,
42772
42763
  positions: {
42773
42764
  x: x,
42774
42765
  y: y,
42775
- h: h,
42776
- w: w
42777
- },
42778
- isHighlight: false,
42779
- textColor: item.dataTextColor
42766
+ w: w,
42767
+ h: h
42768
+ }
42780
42769
  });
42781
- }
42782
42770
 
42783
- 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용)
42784
42785
 
42785
- item.yp = y; // eslint-disable-line
42786
42786
 
42787
- item.w = w; // eslint-disable-line
42787
+ item.xp = x; // eslint-disable-line
42788
42788
 
42789
- item.h = isHorizontal ? -h : h; // eslint-disable-line
42790
- });
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
+ }
42791
42802
  }
42792
42803
  /**
42793
42804
  * Draw item highlight
@@ -43117,6 +43128,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43117
43128
  return;
43118
43129
  }
43119
43130
 
43131
+ ctx.save();
43132
+
43120
43133
  if (isBorderRadius && !isStackBar) {
43121
43134
  try {
43122
43135
  this.drawRoundedRect(ctx, positions);
@@ -43126,6 +43139,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43126
43139
  } else {
43127
43140
  ctx.fillRect(x, y, w, h);
43128
43141
  }
43142
+
43143
+ ctx.restore();
43129
43144
  }
43130
43145
  }, {
43131
43146
  key: "drawRoundedRect",
@@ -43141,6 +43156,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43141
43156
  var squarePath = new Path2D();
43142
43157
  squarePath.rect(chartRect.x1 + labelOffset.left, chartRect.y1, chartRect.chartWidth - labelOffset.right, chartRect.chartHeight - labelOffset.bottom);
43143
43158
  ctx.clip(squarePath);
43159
+ ctx.beginPath();
43144
43160
  ctx.moveTo(x, y);
43145
43161
 
43146
43162
  if (isHorizontal) {
@@ -49031,8 +49047,24 @@ var plugins_scrollbar_module = {
49031
49047
  limitMax = +minMax.max;
49032
49048
  }
49033
49049
 
49034
- scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49035
- 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
+ }
49036
49068
  }
49037
49069
  }
49038
49070
  },
@@ -49070,9 +49102,22 @@ var plugins_scrollbar_module = {
49070
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);
49071
49103
 
49072
49104
  if (isUpdateAxesRange || updateData) {
49073
- 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
+ }
49074
49120
 
49075
- 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;
49076
49121
  this.initScrollbarRange(dir);
49077
49122
  }
49078
49123
 
@@ -49086,11 +49131,20 @@ var plugins_scrollbar_module = {
49086
49131
  var _this$scrollbar$x, _this$scrollbar$x2, _this$scrollbar$y, _this$scrollbar$y2;
49087
49132
 
49088
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) {
49089
- 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);
49090
49139
  }
49091
49140
 
49092
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) {
49093
- 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);
49094
49148
  }
49095
49149
  },
49096
49150
 
@@ -49173,10 +49227,12 @@ var plugins_scrollbar_module = {
49173
49227
  /**
49174
49228
  * set scrollbar position
49175
49229
  * @param dir axis direction ('x' | 'y')
49230
+ * @param preservePosition 기존 위치를 유지할지 여부
49176
49231
  */
49177
49232
  setScrollbarPosition: function setScrollbarPosition(dir) {
49178
49233
  var _this$options$title, _this$options$title2;
49179
49234
 
49235
+ var preservePosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49180
49236
  var scrollbarOpt = this.scrollbar[dir];
49181
49237
 
49182
49238
  if (!scrollbarOpt.use || !scrollbarOpt.range) {
@@ -49197,8 +49253,17 @@ var plugins_scrollbar_module = {
49197
49253
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
49198
49254
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
49199
49255
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
49200
- var trackSize = fullSize - buttonSize * 2;
49201
- 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;
49202
49267
  var scrollbarStyle = 'display: block;';
49203
49268
  var scrollbarTrackStyle;
49204
49269
  var scrollbarThumbStyle;
@@ -49265,8 +49330,9 @@ var plugins_scrollbar_module = {
49265
49330
  * get scrollbar thumb size
49266
49331
  * @param dir axis direction ('x' | 'y')
49267
49332
  * @param trackSize scrollbar track size
49333
+ * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
49268
49334
  */
49269
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
49335
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
49270
49336
  var scrollbarOpt = this.scrollbar[dir];
49271
49337
 
49272
49338
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -49319,7 +49385,12 @@ var plugins_scrollbar_module = {
49319
49385
 
49320
49386
  scrollbarOpt.startValue = startValue;
49321
49387
  scrollbarOpt.steps = steps;
49322
- scrollbarOpt.interval = interval;
49388
+ scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
49389
+
49390
+ if (savedThumbPosition !== null) {
49391
+ thumbPosition = savedThumbPosition;
49392
+ }
49393
+
49323
49394
  return {
49324
49395
  size: thumbSize,
49325
49396
  position: thumbPosition
@@ -49384,7 +49455,9 @@ var plugins_scrollbar_module = {
49384
49455
  }
49385
49456
 
49386
49457
  if (!isOutOfRange) {
49387
- scrollbarOpt.range = [minValue, maxValue];
49458
+ scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
49459
+
49460
+ delete scrollbarOpt.savedPosition;
49388
49461
  this.update({
49389
49462
  updateSeries: false,
49390
49463
  updateSelTip: {
@@ -49399,7 +49472,9 @@ var plugins_scrollbar_module = {
49399
49472
  * create scroll event
49400
49473
  */
49401
49474
  createScrollEvent: function createScrollEvent() {
49402
- var _this = this;
49475
+ var _this = this,
49476
+ _this$scrollbar$x6,
49477
+ _this$scrollbar$y5;
49403
49478
 
49404
49479
  this.onScrollbarClick = function (e) {
49405
49480
  e.preventDefault();
@@ -49491,9 +49566,65 @@ var plugins_scrollbar_module = {
49491
49566
  };
49492
49567
 
49493
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
+
49494
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);
49495
49620
 
49496
- _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
+ }
49497
49628
  };
49498
49629
 
49499
49630
  if (this.scrollbar.x.use && !this.scrollbar.x.isInit) {
@@ -49504,12 +49635,16 @@ var plugins_scrollbar_module = {
49504
49635
  }
49505
49636
 
49506
49637
  if (this.scrollbar.y.use && !this.scrollbar.y.isInit) {
49507
- var _this$overlayCanvas;
49508
-
49509
49638
  var scrollbarYDOM = this.scrollbar.y.dom;
49510
49639
  scrollbarYDOM.addEventListener('click', this.onScrollbarClick);
49511
49640
  scrollbarYDOM.addEventListener('mousedown', this.onScrollbarDown);
49512
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
+
49513
49648
  (_this$overlayCanvas = this.overlayCanvas) === null || _this$overlayCanvas === void 0 ? void 0 : _this$overlayCanvas.addEventListener('wheel', this.onScrollbarWheel, {
49514
49649
  passive: false
49515
49650
  });
@@ -49585,7 +49720,9 @@ var plugins_scrollbar_module = {
49585
49720
  return;
49586
49721
  }
49587
49722
 
49588
- this.scrollbar[dir].range = [movedMin, movedMax];
49723
+ this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
49724
+
49725
+ delete this.scrollbar[dir].savedPosition;
49589
49726
  this.update({
49590
49727
  updateSeries: false,
49591
49728
  updateSelTip: {
@@ -49634,15 +49771,17 @@ var plugins_scrollbar_module = {
49634
49771
  * @param dir axis direction ('x' | 'y')
49635
49772
  */
49636
49773
  destroyScrollbar: function destroyScrollbar(dir) {
49637
- 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;
49638
49778
 
49639
- if (scrollbarXDOM) {
49640
- scrollbarXDOM.remove();
49779
+ scrollbarDOM.remove();
49641
49780
  this.scrollbar[dir] = {
49642
49781
  isInit: false
49643
- };
49782
+ }; // 가로, 세로 스크롤바 모두 없어지면 휠 이벤트 제거
49644
49783
 
49645
- 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)) {
49646
49785
  var _this$overlayCanvas2;
49647
49786
 
49648
49787
  (_this$overlayCanvas2 = this.overlayCanvas) === null || _this$overlayCanvas2 === void 0 ? void 0 : _this$overlayCanvas2.removeEventListener('wheel', this.onScrollbarWheel, {
@@ -54815,6 +54954,18 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54815
54954
  }, {
54816
54955
  key: "resize",
54817
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
+
54818
54969
  this.clear();
54819
54970
  this.bufferCtx.restore();
54820
54971
  this.bufferCtx.save();