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.
package/dist/evui.umd.js CHANGED
@@ -11173,7 +11173,7 @@ module.exports = exports;
11173
11173
  /***/ "9224":
11174
11174
  /***/ (function(module) {
11175
11175
 
11176
- module.exports = JSON.parse("{\"a\":\"3.4.107\"}");
11176
+ module.exports = JSON.parse("{\"a\":\"3.4.109\"}");
11177
11177
 
11178
11178
  /***/ }),
11179
11179
 
@@ -38860,6 +38860,8 @@ var modules = {
38860
38860
  };
38861
38861
 
38862
38862
  for (var x = 0; x < keys.length; x++) {
38863
+ var _this$dataSet$key$dat, _this$dataSet$key$dat2, _this$dataSet$key$dat3;
38864
+
38863
38865
  var key = keys[x];
38864
38866
  var data = datas[key];
38865
38867
  var storeLength = data === null || data === void 0 ? void 0 : data.length;
@@ -38878,9 +38880,6 @@ var modules = {
38878
38880
  }
38879
38881
 
38880
38882
  this.dataSet[key].length = this.options.realTimeScatter.range || 300;
38881
- this.dataSet[key].toTime = Math.floor(Date.now() / 1000) * 1000;
38882
- this.dataSet[key].fromTime = this.dataSet[key].toTime - this.dataSet[key].length * 1000;
38883
- this.dataSet[key].endIndex = this.dataSet[key].length - 1;
38884
38883
 
38885
38884
  for (var i = 0; i < storeLength; i++) {
38886
38885
  var item = data[i];
@@ -38891,6 +38890,10 @@ var modules = {
38891
38890
  }
38892
38891
 
38893
38892
  lastTime = Math.floor(lastTime / 1000) * 1000;
38893
+ 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();
38894
+ this.dataSet[key].toTime = lastTime || (dataGroupLastTime ? Math.floor(dataGroupLastTime / 1000) * 1000 : 0);
38895
+ this.dataSet[key].fromTime = this.dataSet[key].toTime - this.dataSet[key].length * 1000;
38896
+ this.dataSet[key].endIndex = this.dataSet[key].length - 1;
38894
38897
 
38895
38898
  if ((this.dataSet[key].toTime - lastTime) / 1000 > this.dataSet[key].length && key === '') {
38896
38899
  return;
@@ -42598,8 +42601,6 @@ var element_bar_Bar = /*#__PURE__*/function () {
42598
42601
  _createClass(Bar, [{
42599
42602
  key: "draw",
42600
42603
  value: function draw(param) {
42601
- var _this2 = this;
42602
-
42603
42604
  if (!this.show) {
42604
42605
  return;
42605
42606
  }
@@ -42629,7 +42630,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42629
42630
  var _ref2 = [minmaxX.minIndex, minmaxX.maxIndex];
42630
42631
  minIndex = _ref2[0];
42631
42632
  maxIndex = _ref2[1];
42632
- }
42633
+ } // minIndex, maxIndex가 유효하면 실제 그릴 데이터 개수로 보정
42634
+
42633
42635
 
42634
42636
  if (truthyNumber(minIndex) && truthyNumber(maxIndex)) {
42635
42637
  totalCount = maxIndex - minIndex + 1;
@@ -42684,119 +42686,128 @@ var element_bar_Bar = /*#__PURE__*/function () {
42684
42686
  this.labelOffset = labelOffset;
42685
42687
  this.borderRadius = param.borderRadius;
42686
42688
  this.filteredCount = totalCount;
42687
- var categoryPoint = null;
42688
- this.data.forEach(function (dataItem, index) {
42689
- var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42689
+ var startIndex = truthyNumber(minIndex) ? minIndex : 0;
42690
+ var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1; // 스크롤 범위 내에서만 루프 돌림
42690
42691
 
42691
- ctx.beginPath();
42692
- var item = dataItem;
42692
+ for (var i = startIndex; i <= endIndex; i++) {
42693
+ var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
42693
42694
 
42694
- if (truthyNumber(minIndex) && index < minIndex) {
42695
- return;
42696
- } else if (truthyNumber(minIndex) && index > maxIndex) {
42697
- return;
42698
- }
42695
+ var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
42699
42696
 
42700
- if (isHorizontal) {
42701
- categoryPoint = ysp - cArea * (index - (minIndex || 0)) - cPad;
42702
- } else {
42703
- categoryPoint = xsp + cArea * (index - (minIndex || 0)) + cPad;
42704
- }
42697
+ if (item) {
42698
+ var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42705
42699
 
42706
- if (isHorizontal) {
42707
- x = xsp;
42708
- y = Math.round(categoryPoint - (bArea * barSeriesX - (h + bPad)));
42709
- } else {
42710
- x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42711
- y = ysp;
42712
- }
42700
+ // 스크롤 offset(minIndex)만큼 보정해서 그리기
42701
+ var categoryPoint = void 0;
42713
42702
 
42714
- if (isHorizontal) {
42715
- if (item.b) {
42716
- w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42717
- x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42703
+ if (isHorizontal) {
42704
+ categoryPoint = ysp - cArea * screenIndex - cPad;
42718
42705
  } else {
42719
- w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42706
+ categoryPoint = xsp + cArea * screenIndex + cPad;
42720
42707
  }
42721
- } else if (item.b) {
42722
- // vertical stack bar chart
42723
- h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42724
- y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42725
- } else {
42726
- // vertical bar chart
42727
- h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42728
- }
42729
42708
 
42730
- var barColor = item.dataColor || _this2.color;
42731
- var legendHitInfo = param === null || param === void 0 ? void 0 : param.legendHitInfo;
42732
- var selectLabelOption = param === null || param === void 0 ? void 0 : (_param$selectLabel = param.selectLabel) === null || _param$selectLabel === void 0 ? void 0 : _param$selectLabel.option;
42733
- var selectItemOption = param === null || param === void 0 ? void 0 : (_param$selectItem = param.selectItem) === null || _param$selectItem === void 0 ? void 0 : _param$selectItem.option;
42734
- 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 : [];
42735
-
42736
- 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 : {},
42737
- selectedItemDataIndex = _ref3.dataIndex,
42738
- selectedItemSeriesId = _ref3.seriesID;
42739
-
42740
- var isDownplay = false;
42709
+ if (isHorizontal) {
42710
+ x = xsp;
42711
+ y = Math.round(categoryPoint - (bArea * barSeriesX - (h + bPad)));
42712
+ } else {
42713
+ x = Math.round(categoryPoint + (bArea * barSeriesX - (w + bPad)));
42714
+ y = ysp;
42715
+ }
42741
42716
 
42742
- if (legendHitInfo) {
42743
- isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== _this2.sId;
42744
- } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42745
- isDownplay = selectedLabelList.length && !selectedLabelList.includes(index);
42746
- } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42747
- if (_this2.isExistGrp) {
42748
- isDownplay = selectedItemDataIndex !== index;
42717
+ if (isHorizontal) {
42718
+ if (item.b) {
42719
+ w = helpers_canvas.calculateX(item.x - item.b, minmaxX.graphMin, minmaxX.graphMax, xArea);
42720
+ x = helpers_canvas.calculateX(item.b, minmaxX.graphMin, minmaxX.graphMax, xArea, xsp);
42721
+ } else {
42722
+ w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42723
+ }
42724
+ } else if (item.b) {
42725
+ // vertical stack bar chart
42726
+ h = helpers_canvas.calculateY(item.y - item.b, minmaxY.graphMin, minmaxY.graphMax, yArea);
42727
+ y = helpers_canvas.calculateY(item.b, minmaxY.graphMin, minmaxY.graphMax, yArea, ysp);
42749
42728
  } else {
42750
- isDownplay = selectedItemDataIndex !== index || selectedItemSeriesId !== _this2.sId;
42729
+ // vertical bar chart
42730
+ h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42751
42731
  }
42752
- }
42753
42732
 
42754
- if (typeof barColor !== 'string') {
42755
- ctx.fillStyle = helpers_canvas.createGradient(ctx, isHorizontal, {
42756
- x: x,
42757
- y: y,
42758
- w: w,
42759
- h: h
42760
- }, barColor, isDownplay);
42761
- } else {
42762
- var noneDownplayOpacity = barColor.includes('rgba') ? helpers_util.getOpacity(barColor) : 1;
42763
- var opacity = isDownplay ? 0.1 : noneDownplayOpacity;
42764
- ctx.fillStyle = helpers_util.colorStringToRgba(barColor, opacity);
42765
- }
42733
+ var barColor = item.dataColor || this.color;
42734
+ var legendHitInfo = param === null || param === void 0 ? void 0 : param.legendHitInfo;
42735
+ var selectLabelOption = param === null || param === void 0 ? void 0 : (_param$selectLabel = param.selectLabel) === null || _param$selectLabel === void 0 ? void 0 : _param$selectLabel.option;
42736
+ var selectItemOption = param === null || param === void 0 ? void 0 : (_param$selectItem = param.selectItem) === null || _param$selectItem === void 0 ? void 0 : _param$selectItem.option;
42737
+ 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 : [];
42738
+
42739
+ 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 : {},
42740
+ selectedItemDataIndex = _ref3.dataIndex,
42741
+ selectedItemSeriesId = _ref3.seriesID;
42742
+
42743
+ var isDownplay = false;
42744
+
42745
+ if (legendHitInfo) {
42746
+ isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== this.sId;
42747
+ } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42748
+ isDownplay = selectedLabelList.length && !selectedLabelList.includes(i);
42749
+ } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42750
+ if (this.isExistGrp) {
42751
+ isDownplay = selectedItemDataIndex !== i;
42752
+ } else {
42753
+ isDownplay = selectedItemDataIndex !== i || selectedItemSeriesId !== this.sId;
42754
+ }
42755
+ }
42766
42756
 
42767
- _this2.drawBar({
42768
- ctx: ctx,
42769
- positions: {
42770
- x: x,
42771
- y: y,
42772
- w: w,
42773
- h: h
42757
+ if (typeof barColor !== 'string') {
42758
+ ctx.fillStyle = helpers_canvas.createGradient(ctx, isHorizontal, {
42759
+ x: x,
42760
+ y: y,
42761
+ w: w,
42762
+ h: h
42763
+ }, barColor, isDownplay);
42764
+ } else {
42765
+ var noneDownplayOpacity = barColor.includes('rgba') ? helpers_util.getOpacity(barColor) : 1;
42766
+ var opacity = isDownplay ? 0.1 : noneDownplayOpacity;
42767
+ ctx.fillStyle = helpers_util.colorStringToRgba(barColor, opacity);
42774
42768
  }
42775
- });
42776
42769
 
42777
- if (showValue.use) {
42778
- _this2.drawValueLabels({
42779
- context: ctx,
42780
- data: item,
42770
+ this.drawBar({
42771
+ ctx: ctx,
42781
42772
  positions: {
42782
42773
  x: x,
42783
42774
  y: y,
42784
- h: h,
42785
- w: w
42786
- },
42787
- isHighlight: false,
42788
- textColor: item.dataTextColor
42775
+ w: w,
42776
+ h: h
42777
+ }
42789
42778
  });
42790
- }
42791
42779
 
42792
- item.xp = x; // eslint-disable-line
42780
+ if (showValue.use) {
42781
+ this.drawValueLabels({
42782
+ context: ctx,
42783
+ data: item,
42784
+ positions: {
42785
+ x: x,
42786
+ y: y,
42787
+ h: h,
42788
+ w: w
42789
+ },
42790
+ isHighlight: false,
42791
+ textColor: item.dataTextColor
42792
+ });
42793
+ } // 좌표 및 인덱스 정보 세팅 (툴팁/hover용)
42793
42794
 
42794
- item.yp = y; // eslint-disable-line
42795
42795
 
42796
- item.w = w; // eslint-disable-line
42796
+ item.xp = x; // eslint-disable-line
42797
42797
 
42798
- item.h = isHorizontal ? -h : h; // eslint-disable-line
42799
- });
42798
+ item.yp = y; // eslint-disable-line
42799
+
42800
+ item.w = w; // eslint-disable-line
42801
+
42802
+ item.h = isHorizontal ? -h : h; // eslint-disable-line
42803
+
42804
+ item.index = i; // 실제 데이터 인덱스 (스크롤 offset 포함)
42805
+ // 검색(hitInfo) 로직은 this.data[0..filteredCount-1] 범위만 검사하므로,
42806
+ // 현재 화면에 그린 항목을 배열 앞쪽으로 매핑해준다.
42807
+
42808
+ this.data[screenIndex] = item;
42809
+ }
42810
+ }
42800
42811
  }
42801
42812
  /**
42802
42813
  * Draw item highlight
@@ -43126,6 +43137,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43126
43137
  return;
43127
43138
  }
43128
43139
 
43140
+ ctx.save();
43141
+
43129
43142
  if (isBorderRadius && !isStackBar) {
43130
43143
  try {
43131
43144
  this.drawRoundedRect(ctx, positions);
@@ -43135,6 +43148,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43135
43148
  } else {
43136
43149
  ctx.fillRect(x, y, w, h);
43137
43150
  }
43151
+
43152
+ ctx.restore();
43138
43153
  }
43139
43154
  }, {
43140
43155
  key: "drawRoundedRect",
@@ -43150,6 +43165,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43150
43165
  var squarePath = new Path2D();
43151
43166
  squarePath.rect(chartRect.x1 + labelOffset.left, chartRect.y1, chartRect.chartWidth - labelOffset.right, chartRect.chartHeight - labelOffset.bottom);
43152
43167
  ctx.clip(squarePath);
43168
+ ctx.beginPath();
43153
43169
  ctx.moveTo(x, y);
43154
43170
 
43155
43171
  if (isHorizontal) {
@@ -49040,8 +49056,24 @@ var plugins_scrollbar_module = {
49040
49056
  limitMax = +minMax.max;
49041
49057
  }
49042
49058
 
49043
- scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49044
- scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49059
+ var originalWidth = max - min;
49060
+ var availableWidth = limitMax - limitMin;
49061
+
49062
+ if (originalWidth >= availableWidth) {
49063
+ scrollbarOpt.range[0] = limitMin;
49064
+ scrollbarOpt.range[1] = limitMax;
49065
+ } else {
49066
+ scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49067
+ scrollbarOpt.range[1] = +max > limitMax ? limitMax : +max;
49068
+
49069
+ if (scrollbarOpt.range[1] - scrollbarOpt.range[0] < originalWidth) {
49070
+ scrollbarOpt.range[0] = scrollbarOpt.range[1] - originalWidth;
49071
+
49072
+ if (scrollbarOpt.range[0] < limitMin) {
49073
+ scrollbarOpt.range[0] = limitMin;
49074
+ }
49075
+ }
49076
+ }
49045
49077
  }
49046
49078
  }
49047
49079
  },
@@ -49079,9 +49111,22 @@ var plugins_scrollbar_module = {
49079
49111
  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);
49080
49112
 
49081
49113
  if (isUpdateAxesRange || updateData) {
49082
- var _newOpt$5, _newOpt$5$range, _newOpt$6;
49114
+ var _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
49115
+
49116
+ 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;
49117
+
49118
+ if (isUpdateAxesRange || isResetPosition) {
49119
+ var _newOpt$5, _newOpt$5$range, _newOpt$6;
49120
+
49121
+ 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가 업데이트되면 저장된 스크롤 위치를 초기화
49122
+
49123
+ delete this.scrollbar[dir].savedPosition;
49124
+ } else if (updateData) {
49125
+ // 데이터가 업데이트되면 저장된 픽셀 위치는 더 이상 유효하지 않으므로 삭제하여
49126
+ // 논리적 범위에 따라 다시 계산하도록 합니다.
49127
+ delete this.scrollbar[dir].savedPosition;
49128
+ }
49083
49129
 
49084
- 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;
49085
49130
  this.initScrollbarRange(dir);
49086
49131
  }
49087
49132
 
@@ -49095,11 +49140,20 @@ var plugins_scrollbar_module = {
49095
49140
  var _this$scrollbar$x, _this$scrollbar$x2, _this$scrollbar$y, _this$scrollbar$y2;
49096
49141
 
49097
49142
  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) {
49098
- this.setScrollbarPosition('x');
49143
+ var _this$options$axesX3, _this$options$axesX3$, _this$options$axesX3$2;
49144
+
49145
+ // resetPosition 옵션에 따라 preservePosition 결정
49146
+ 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);
49147
+ this.setScrollbarPosition('x', preservePosition);
49099
49148
  }
49100
49149
 
49101
49150
  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) {
49102
- this.setScrollbarPosition('y');
49151
+ var _this$options$axesY3, _this$options$axesY3$, _this$options$axesY3$2;
49152
+
49153
+ // resetPosition 옵션에 따라 preservePosition 결정
49154
+ 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);
49155
+
49156
+ this.setScrollbarPosition('y', _preservePosition);
49103
49157
  }
49104
49158
  },
49105
49159
 
@@ -49182,10 +49236,12 @@ var plugins_scrollbar_module = {
49182
49236
  /**
49183
49237
  * set scrollbar position
49184
49238
  * @param dir axis direction ('x' | 'y')
49239
+ * @param preservePosition 기존 위치를 유지할지 여부
49185
49240
  */
49186
49241
  setScrollbarPosition: function setScrollbarPosition(dir) {
49187
49242
  var _this$options$title, _this$options$title2;
49188
49243
 
49244
+ var preservePosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49189
49245
  var scrollbarOpt = this.scrollbar[dir];
49190
49246
 
49191
49247
  if (!scrollbarOpt.use || !scrollbarOpt.range) {
@@ -49206,8 +49262,17 @@ var plugins_scrollbar_module = {
49206
49262
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
49207
49263
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
49208
49264
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
49209
- var trackSize = fullSize - buttonSize * 2;
49210
- var thumbSize = this.getScrollbarThumbSize(dir, trackSize);
49265
+ var trackSize = fullSize - buttonSize * 2; // 현재 위치를 보존해야 하는 경우 기존 위치를 저장
49266
+
49267
+ var savedThumbPosition = null;
49268
+
49269
+ if (preservePosition && scrollbarOpt.savedPosition !== undefined) {
49270
+ savedThumbPosition = scrollbarOpt.savedPosition;
49271
+ }
49272
+
49273
+ var thumbSize = this.getScrollbarThumbSize(dir, trackSize, savedThumbPosition); // 새로 계산된 위치를 저장
49274
+
49275
+ scrollbarOpt.savedPosition = thumbSize.position;
49211
49276
  var scrollbarStyle = 'display: block;';
49212
49277
  var scrollbarTrackStyle;
49213
49278
  var scrollbarThumbStyle;
@@ -49274,8 +49339,9 @@ var plugins_scrollbar_module = {
49274
49339
  * get scrollbar thumb size
49275
49340
  * @param dir axis direction ('x' | 'y')
49276
49341
  * @param trackSize scrollbar track size
49342
+ * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
49277
49343
  */
49278
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
49344
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
49279
49345
  var scrollbarOpt = this.scrollbar[dir];
49280
49346
 
49281
49347
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -49328,7 +49394,12 @@ var plugins_scrollbar_module = {
49328
49394
 
49329
49395
  scrollbarOpt.startValue = startValue;
49330
49396
  scrollbarOpt.steps = steps;
49331
- scrollbarOpt.interval = interval;
49397
+ scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
49398
+
49399
+ if (savedThumbPosition !== null) {
49400
+ thumbPosition = savedThumbPosition;
49401
+ }
49402
+
49332
49403
  return {
49333
49404
  size: thumbSize,
49334
49405
  position: thumbPosition
@@ -49393,7 +49464,9 @@ var plugins_scrollbar_module = {
49393
49464
  }
49394
49465
 
49395
49466
  if (!isOutOfRange) {
49396
- scrollbarOpt.range = [minValue, maxValue];
49467
+ scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
49468
+
49469
+ delete scrollbarOpt.savedPosition;
49397
49470
  this.update({
49398
49471
  updateSeries: false,
49399
49472
  updateSelTip: {
@@ -49408,7 +49481,9 @@ var plugins_scrollbar_module = {
49408
49481
  * create scroll event
49409
49482
  */
49410
49483
  createScrollEvent: function createScrollEvent() {
49411
- var _this = this;
49484
+ var _this = this,
49485
+ _this$scrollbar$x6,
49486
+ _this$scrollbar$y5;
49412
49487
 
49413
49488
  this.onScrollbarClick = function (e) {
49414
49489
  e.preventDefault();
@@ -49500,9 +49575,65 @@ var plugins_scrollbar_module = {
49500
49575
  };
49501
49576
 
49502
49577
  this.onScrollbarWheel = function (e) {
49578
+ var _this$tooltipDOM, _this$tooltipDOM$styl, _this$tooltipDOM2, _this$scrollbar$x3, _this$scrollbar$x5, _this$scrollbar$y4;
49579
+
49580
+ 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';
49581
+ var tooltipBodyDOM = _this.tooltipBodyDOM || ((_this$tooltipDOM2 = _this.tooltipDOM) === null || _this$tooltipDOM2 === void 0 ? void 0 : _this$tooltipDOM2.querySelector(_this.options.tooltip.htmlScrollTarget));
49582
+
49583
+ if (isTooltipVisible && tooltipBodyDOM) {
49584
+ var scrollTop = tooltipBodyDOM.scrollTop,
49585
+ scrollHeight = tooltipBodyDOM.scrollHeight,
49586
+ clientHeight = tooltipBodyDOM.clientHeight;
49587
+ var isAtTop = scrollTop <= 0;
49588
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight;
49589
+ var isScrollingUp = e.deltaY < 0;
49590
+ var isScrollingDown = e.deltaY > 0;
49591
+
49592
+ if (isAtTop && isScrollingUp || isAtBottom && isScrollingDown) {// 툴팁의 스크롤이 맨 위나 맨 아래에 닿았는데 스크롤 하면 차트 스크롤 허용
49593
+ } else {
49594
+ // 툴팁 내부 스크롤만 수행
49595
+ return;
49596
+ }
49597
+ }
49598
+
49503
49599
  e.preventDefault();
49600
+ var threshold = 1; // 최소 스크롤 임계값
49601
+ // Shift + 휠: 가로 스크롤 (일반 마우스 휠 지원)
49602
+
49603
+ if ((_this$scrollbar$x3 = _this.scrollbar.x) !== null && _this$scrollbar$x3 !== void 0 && _this$scrollbar$x3.use && e.shiftKey && Math.abs(e.deltaY) > threshold) {
49604
+ _this.updateScrollbarRange('x', e.deltaY > 0);
49605
+
49606
+ return;
49607
+ } // 대각선 스크롤 처리: 더 큰 방향을 우선으로 처리
49608
+
49609
+
49610
+ var absX = Math.abs(e.deltaX);
49611
+ var absY = Math.abs(e.deltaY);
49612
+
49613
+ if (absX > threshold && absY > threshold) {
49614
+ var _this$scrollbar$x4, _this$scrollbar$y3;
49615
+
49616
+ // 두 방향 모두 임계값 이상일 때: 더 큰 방향을 우선 처리
49617
+ if (absX > absY && (_this$scrollbar$x4 = _this.scrollbar.x) !== null && _this$scrollbar$x4 !== void 0 && _this$scrollbar$x4.use) {
49618
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49619
+ } else if (absY > absX && (_this$scrollbar$y3 = _this.scrollbar.y) !== null && _this$scrollbar$y3 !== void 0 && _this$scrollbar$y3.use) {
49620
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49621
+ }
49622
+
49623
+ return;
49624
+ } // 가로 스크롤 처리 (deltaX - 트랙패드 좌우 스크롤)
49625
+
49626
+
49627
+ if ((_this$scrollbar$x5 = _this.scrollbar.x) !== null && _this$scrollbar$x5 !== void 0 && _this$scrollbar$x5.use && absX > threshold) {
49628
+ _this.updateScrollbarRange('x', e.deltaX > 0);
49504
49629
 
49505
- _this.updateScrollbarRange('y', e.deltaY < 0);
49630
+ return;
49631
+ } // 세로 스크롤 처리 (deltaY)
49632
+
49633
+
49634
+ if ((_this$scrollbar$y4 = _this.scrollbar.y) !== null && _this$scrollbar$y4 !== void 0 && _this$scrollbar$y4.use && absY > threshold) {
49635
+ _this.updateScrollbarRange('y', e.deltaY < 0);
49636
+ }
49506
49637
  };
49507
49638
 
49508
49639
  if (this.scrollbar.x.use && !this.scrollbar.x.isInit) {
@@ -49513,12 +49644,16 @@ var plugins_scrollbar_module = {
49513
49644
  }
49514
49645
 
49515
49646
  if (this.scrollbar.y.use && !this.scrollbar.y.isInit) {
49516
- var _this$overlayCanvas;
49517
-
49518
49647
  var scrollbarYDOM = this.scrollbar.y.dom;
49519
49648
  scrollbarYDOM.addEventListener('click', this.onScrollbarClick);
49520
49649
  scrollbarYDOM.addEventListener('mousedown', this.onScrollbarDown);
49521
49650
  scrollbarYDOM.addEventListener('mouseleave', this.onScrollbarLeave);
49651
+ } // 가로 또는 세로 스크롤바가 있으면 휠 이벤트 등록
49652
+
49653
+
49654
+ 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) {
49655
+ var _this$overlayCanvas;
49656
+
49522
49657
  (_this$overlayCanvas = this.overlayCanvas) === null || _this$overlayCanvas === void 0 ? void 0 : _this$overlayCanvas.addEventListener('wheel', this.onScrollbarWheel, {
49523
49658
  passive: false
49524
49659
  });
@@ -49594,7 +49729,9 @@ var plugins_scrollbar_module = {
49594
49729
  return;
49595
49730
  }
49596
49731
 
49597
- this.scrollbar[dir].range = [movedMin, movedMax];
49732
+ this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
49733
+
49734
+ delete this.scrollbar[dir].savedPosition;
49598
49735
  this.update({
49599
49736
  updateSeries: false,
49600
49737
  updateSelTip: {
@@ -49643,15 +49780,17 @@ var plugins_scrollbar_module = {
49643
49780
  * @param dir axis direction ('x' | 'y')
49644
49781
  */
49645
49782
  destroyScrollbar: function destroyScrollbar(dir) {
49646
- var scrollbarXDOM = this.scrollbar[dir].dom;
49783
+ var scrollbarDOM = this.scrollbar[dir].dom;
49784
+
49785
+ if (scrollbarDOM) {
49786
+ var _this$scrollbar$x7, _this$scrollbar$y6;
49647
49787
 
49648
- if (scrollbarXDOM) {
49649
- scrollbarXDOM.remove();
49788
+ scrollbarDOM.remove();
49650
49789
  this.scrollbar[dir] = {
49651
49790
  isInit: false
49652
- };
49791
+ }; // 가로, 세로 스크롤바 모두 없어지면 휠 이벤트 제거
49653
49792
 
49654
- if (dir === 'y') {
49793
+ 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)) {
49655
49794
  var _this$overlayCanvas2;
49656
49795
 
49657
49796
  (_this$overlayCanvas2 = this.overlayCanvas) === null || _this$overlayCanvas2 === void 0 ? void 0 : _this$overlayCanvas2.removeEventListener('wheel', this.onScrollbarWheel, {
@@ -54824,6 +54963,18 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54824
54963
  }, {
54825
54964
  key: "resize",
54826
54965
  value: function resize(promiseRes) {
54966
+ var _this$scrollbar3, _this$scrollbar4;
54967
+
54968
+ // 차트 크기가 변경될 때 저장된 스크롤 픽셀 위치를 초기화하여
54969
+ // 새로운 크기에 맞춰 스크롤바 크기/위치를 재계산하도록 함
54970
+ if ((_this$scrollbar3 = this.scrollbar) !== null && _this$scrollbar3 !== void 0 && _this$scrollbar3.x) {
54971
+ delete this.scrollbar.x.savedPosition;
54972
+ }
54973
+
54974
+ if ((_this$scrollbar4 = this.scrollbar) !== null && _this$scrollbar4 !== void 0 && _this$scrollbar4.y) {
54975
+ delete this.scrollbar.y.savedPosition;
54976
+ }
54977
+
54827
54978
  this.clear();
54828
54979
  this.bufferCtx.restore();
54829
54980
  this.bufferCtx.save();