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.
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.108\"}");
11176
+ module.exports = JSON.parse("{\"a\":\"3.4.109\"}");
11177
11177
 
11178
11178
  /***/ }),
11179
11179
 
@@ -42601,8 +42601,6 @@ var element_bar_Bar = /*#__PURE__*/function () {
42601
42601
  _createClass(Bar, [{
42602
42602
  key: "draw",
42603
42603
  value: function draw(param) {
42604
- var _this2 = this;
42605
-
42606
42604
  if (!this.show) {
42607
42605
  return;
42608
42606
  }
@@ -42632,7 +42630,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
42632
42630
  var _ref2 = [minmaxX.minIndex, minmaxX.maxIndex];
42633
42631
  minIndex = _ref2[0];
42634
42632
  maxIndex = _ref2[1];
42635
- }
42633
+ } // minIndex, maxIndex가 유효하면 실제 그릴 데이터 개수로 보정
42634
+
42636
42635
 
42637
42636
  if (truthyNumber(minIndex) && truthyNumber(maxIndex)) {
42638
42637
  totalCount = maxIndex - minIndex + 1;
@@ -42687,119 +42686,128 @@ var element_bar_Bar = /*#__PURE__*/function () {
42687
42686
  this.labelOffset = labelOffset;
42688
42687
  this.borderRadius = param.borderRadius;
42689
42688
  this.filteredCount = totalCount;
42690
- var categoryPoint = null;
42691
- this.data.forEach(function (dataItem, index) {
42692
- 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; // 스크롤 범위 내에서만 루프 돌림
42693
42691
 
42694
- ctx.beginPath();
42695
- var item = dataItem;
42692
+ for (var i = startIndex; i <= endIndex; i++) {
42693
+ var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
42696
42694
 
42697
- if (truthyNumber(minIndex) && index < minIndex) {
42698
- return;
42699
- } else if (truthyNumber(minIndex) && index > maxIndex) {
42700
- return;
42701
- }
42695
+ var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
42702
42696
 
42703
- if (isHorizontal) {
42704
- categoryPoint = ysp - cArea * (index - (minIndex || 0)) - cPad;
42705
- } else {
42706
- categoryPoint = xsp + cArea * (index - (minIndex || 0)) + cPad;
42707
- }
42697
+ if (item) {
42698
+ var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
42708
42699
 
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
- }
42700
+ // 스크롤 offset(minIndex)만큼 보정해서 그리기
42701
+ var categoryPoint = void 0;
42716
42702
 
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);
42703
+ if (isHorizontal) {
42704
+ categoryPoint = ysp - cArea * screenIndex - cPad;
42721
42705
  } else {
42722
- w = helpers_canvas.calculateX(item.x, minmaxX.graphMin, minmaxX.graphMax, xArea);
42706
+ categoryPoint = xsp + cArea * screenIndex + cPad;
42723
42707
  }
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);
42728
- } else {
42729
- // vertical bar chart
42730
- h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42731
- }
42732
-
42733
- var barColor = item.dataColor || _this2.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
42708
 
42743
- 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
+ }
42744
42716
 
42745
- if (legendHitInfo) {
42746
- isDownplay = (legendHitInfo === null || legendHitInfo === void 0 ? void 0 : legendHitInfo.sId) !== _this2.sId;
42747
- } else if (selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.use && selectLabelOption !== null && selectLabelOption !== void 0 && selectLabelOption.useSeriesOpacity) {
42748
- isDownplay = selectedLabelList.length && !selectedLabelList.includes(index);
42749
- } else if (truthy(selectedItemDataIndex) && selectItemOption !== null && selectItemOption !== void 0 && selectItemOption.useSeriesOpacity) {
42750
- if (_this2.isExistGrp) {
42751
- 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);
42752
42728
  } else {
42753
- isDownplay = selectedItemDataIndex !== index || selectedItemSeriesId !== _this2.sId;
42729
+ // vertical bar chart
42730
+ h = helpers_canvas.calculateY(item.y, minmaxY.graphMin, minmaxY.graphMax, yArea);
42754
42731
  }
42755
- }
42756
42732
 
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);
42768
- }
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
+ }
42769
42756
 
42770
- _this2.drawBar({
42771
- ctx: ctx,
42772
- positions: {
42773
- x: x,
42774
- y: y,
42775
- w: w,
42776
- 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);
42777
42768
  }
42778
- });
42779
42769
 
42780
- if (showValue.use) {
42781
- _this2.drawValueLabels({
42782
- context: ctx,
42783
- data: item,
42770
+ this.drawBar({
42771
+ ctx: ctx,
42784
42772
  positions: {
42785
42773
  x: x,
42786
42774
  y: y,
42787
- h: h,
42788
- w: w
42789
- },
42790
- isHighlight: false,
42791
- textColor: item.dataTextColor
42775
+ w: w,
42776
+ h: h
42777
+ }
42792
42778
  });
42793
- }
42794
42779
 
42795
- 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용)
42796
42794
 
42797
- item.yp = y; // eslint-disable-line
42798
42795
 
42799
- item.w = w; // eslint-disable-line
42796
+ item.xp = x; // eslint-disable-line
42800
42797
 
42801
- item.h = isHorizontal ? -h : h; // eslint-disable-line
42802
- });
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
+ }
42803
42811
  }
42804
42812
  /**
42805
42813
  * Draw item highlight
@@ -43129,6 +43137,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43129
43137
  return;
43130
43138
  }
43131
43139
 
43140
+ ctx.save();
43141
+
43132
43142
  if (isBorderRadius && !isStackBar) {
43133
43143
  try {
43134
43144
  this.drawRoundedRect(ctx, positions);
@@ -43138,6 +43148,8 @@ var element_bar_Bar = /*#__PURE__*/function () {
43138
43148
  } else {
43139
43149
  ctx.fillRect(x, y, w, h);
43140
43150
  }
43151
+
43152
+ ctx.restore();
43141
43153
  }
43142
43154
  }, {
43143
43155
  key: "drawRoundedRect",
@@ -43153,6 +43165,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43153
43165
  var squarePath = new Path2D();
43154
43166
  squarePath.rect(chartRect.x1 + labelOffset.left, chartRect.y1, chartRect.chartWidth - labelOffset.right, chartRect.chartHeight - labelOffset.bottom);
43155
43167
  ctx.clip(squarePath);
43168
+ ctx.beginPath();
43156
43169
  ctx.moveTo(x, y);
43157
43170
 
43158
43171
  if (isHorizontal) {
@@ -49043,8 +49056,24 @@ var plugins_scrollbar_module = {
49043
49056
  limitMax = +minMax.max;
49044
49057
  }
49045
49058
 
49046
- scrollbarOpt.range[0] = +min < limitMin ? limitMin : +min;
49047
- 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
+ }
49048
49077
  }
49049
49078
  }
49050
49079
  },
@@ -49082,9 +49111,22 @@ var plugins_scrollbar_module = {
49082
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);
49083
49112
 
49084
49113
  if (isUpdateAxesRange || updateData) {
49085
- 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
+ }
49086
49129
 
49087
- 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;
49088
49130
  this.initScrollbarRange(dir);
49089
49131
  }
49090
49132
 
@@ -49098,11 +49140,20 @@ var plugins_scrollbar_module = {
49098
49140
  var _this$scrollbar$x, _this$scrollbar$x2, _this$scrollbar$y, _this$scrollbar$y2;
49099
49141
 
49100
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) {
49101
- 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);
49102
49148
  }
49103
49149
 
49104
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) {
49105
- 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);
49106
49157
  }
49107
49158
  },
49108
49159
 
@@ -49185,10 +49236,12 @@ var plugins_scrollbar_module = {
49185
49236
  /**
49186
49237
  * set scrollbar position
49187
49238
  * @param dir axis direction ('x' | 'y')
49239
+ * @param preservePosition 기존 위치를 유지할지 여부
49188
49240
  */
49189
49241
  setScrollbarPosition: function setScrollbarPosition(dir) {
49190
49242
  var _this$options$title, _this$options$title2;
49191
49243
 
49244
+ var preservePosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49192
49245
  var scrollbarOpt = this.scrollbar[dir];
49193
49246
 
49194
49247
  if (!scrollbarOpt.use || !scrollbarOpt.range) {
@@ -49209,8 +49262,17 @@ var plugins_scrollbar_module = {
49209
49262
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
49210
49263
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
49211
49264
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
49212
- var trackSize = fullSize - buttonSize * 2;
49213
- 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;
49214
49276
  var scrollbarStyle = 'display: block;';
49215
49277
  var scrollbarTrackStyle;
49216
49278
  var scrollbarThumbStyle;
@@ -49277,8 +49339,9 @@ var plugins_scrollbar_module = {
49277
49339
  * get scrollbar thumb size
49278
49340
  * @param dir axis direction ('x' | 'y')
49279
49341
  * @param trackSize scrollbar track size
49342
+ * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
49280
49343
  */
49281
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
49344
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
49282
49345
  var scrollbarOpt = this.scrollbar[dir];
49283
49346
 
49284
49347
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -49331,7 +49394,12 @@ var plugins_scrollbar_module = {
49331
49394
 
49332
49395
  scrollbarOpt.startValue = startValue;
49333
49396
  scrollbarOpt.steps = steps;
49334
- scrollbarOpt.interval = interval;
49397
+ scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
49398
+
49399
+ if (savedThumbPosition !== null) {
49400
+ thumbPosition = savedThumbPosition;
49401
+ }
49402
+
49335
49403
  return {
49336
49404
  size: thumbSize,
49337
49405
  position: thumbPosition
@@ -49396,7 +49464,9 @@ var plugins_scrollbar_module = {
49396
49464
  }
49397
49465
 
49398
49466
  if (!isOutOfRange) {
49399
- scrollbarOpt.range = [minValue, maxValue];
49467
+ scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
49468
+
49469
+ delete scrollbarOpt.savedPosition;
49400
49470
  this.update({
49401
49471
  updateSeries: false,
49402
49472
  updateSelTip: {
@@ -49411,7 +49481,9 @@ var plugins_scrollbar_module = {
49411
49481
  * create scroll event
49412
49482
  */
49413
49483
  createScrollEvent: function createScrollEvent() {
49414
- var _this = this;
49484
+ var _this = this,
49485
+ _this$scrollbar$x6,
49486
+ _this$scrollbar$y5;
49415
49487
 
49416
49488
  this.onScrollbarClick = function (e) {
49417
49489
  e.preventDefault();
@@ -49503,9 +49575,65 @@ var plugins_scrollbar_module = {
49503
49575
  };
49504
49576
 
49505
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
+
49506
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);
49507
49629
 
49508
- _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
+ }
49509
49637
  };
49510
49638
 
49511
49639
  if (this.scrollbar.x.use && !this.scrollbar.x.isInit) {
@@ -49516,12 +49644,16 @@ var plugins_scrollbar_module = {
49516
49644
  }
49517
49645
 
49518
49646
  if (this.scrollbar.y.use && !this.scrollbar.y.isInit) {
49519
- var _this$overlayCanvas;
49520
-
49521
49647
  var scrollbarYDOM = this.scrollbar.y.dom;
49522
49648
  scrollbarYDOM.addEventListener('click', this.onScrollbarClick);
49523
49649
  scrollbarYDOM.addEventListener('mousedown', this.onScrollbarDown);
49524
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
+
49525
49657
  (_this$overlayCanvas = this.overlayCanvas) === null || _this$overlayCanvas === void 0 ? void 0 : _this$overlayCanvas.addEventListener('wheel', this.onScrollbarWheel, {
49526
49658
  passive: false
49527
49659
  });
@@ -49597,7 +49729,9 @@ var plugins_scrollbar_module = {
49597
49729
  return;
49598
49730
  }
49599
49731
 
49600
- this.scrollbar[dir].range = [movedMin, movedMax];
49732
+ this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
49733
+
49734
+ delete this.scrollbar[dir].savedPosition;
49601
49735
  this.update({
49602
49736
  updateSeries: false,
49603
49737
  updateSelTip: {
@@ -49646,15 +49780,17 @@ var plugins_scrollbar_module = {
49646
49780
  * @param dir axis direction ('x' | 'y')
49647
49781
  */
49648
49782
  destroyScrollbar: function destroyScrollbar(dir) {
49649
- 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;
49650
49787
 
49651
- if (scrollbarXDOM) {
49652
- scrollbarXDOM.remove();
49788
+ scrollbarDOM.remove();
49653
49789
  this.scrollbar[dir] = {
49654
49790
  isInit: false
49655
- };
49791
+ }; // 가로, 세로 스크롤바 모두 없어지면 휠 이벤트 제거
49656
49792
 
49657
- 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)) {
49658
49794
  var _this$overlayCanvas2;
49659
49795
 
49660
49796
  (_this$overlayCanvas2 = this.overlayCanvas) === null || _this$overlayCanvas2 === void 0 ? void 0 : _this$overlayCanvas2.removeEventListener('wheel', this.onScrollbarWheel, {
@@ -54827,6 +54963,18 @@ var chart_core_EvChart = /*#__PURE__*/function () {
54827
54963
  }, {
54828
54964
  key: "resize",
54829
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
+
54830
54978
  this.clear();
54831
54979
  this.bufferCtx.restore();
54832
54980
  this.bufferCtx.save();