evui 3.4.154 → 3.4.156

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.
@@ -11235,7 +11235,7 @@ $({ target: 'Number', stat: true }, {
11235
11235
  /***/ "9224":
11236
11236
  /***/ (function(module) {
11237
11237
 
11238
- module.exports = JSON.parse("{\"a\":\"3.4.154\"}");
11238
+ module.exports = JSON.parse("{\"a\":\"3.4.156\"}");
11239
11239
 
11240
11240
  /***/ }),
11241
11241
 
@@ -39902,7 +39902,7 @@ var modules = {
39902
39902
  return null;
39903
39903
  }
39904
39904
 
39905
- itemPosition = [this.getItemByPosition([dataInfo.xp, dataInfo.yp], useApproximate, dataIndex, true)];
39905
+ itemPosition = [this.getHitItemByPosition([dataInfo.xp, dataInfo.yp], useApproximate, dataIndex, true)];
39906
39906
  } else {
39907
39907
  var seriesList = Object.entries(this.seriesList);
39908
39908
  var firShowSeriesID;
@@ -39927,7 +39927,7 @@ var modules = {
39927
39927
  return null;
39928
39928
  }
39929
39929
 
39930
- return _this7.getItemByPosition([(_dataInfo$xp = dataInfo === null || dataInfo === void 0 ? void 0 : dataInfo.xp) !== null && _dataInfo$xp !== void 0 ? _dataInfo$xp : 0, (_dataInfo$yp = dataInfo === null || dataInfo === void 0 ? void 0 : dataInfo.yp) !== null && _dataInfo$yp !== void 0 ? _dataInfo$yp : 0], useApproximate, idx, true);
39930
+ return _this7.getHitItemByPosition([(_dataInfo$xp = dataInfo === null || dataInfo === void 0 ? void 0 : dataInfo.xp) !== null && _dataInfo$xp !== void 0 ? _dataInfo$xp : 0, (_dataInfo$yp = dataInfo === null || dataInfo === void 0 ? void 0 : dataInfo.yp) !== null && _dataInfo$yp !== void 0 ? _dataInfo$yp : 0], useApproximate, idx, true);
39931
39931
  });
39932
39932
  }
39933
39933
 
@@ -39951,30 +39951,50 @@ var modules = {
39951
39951
  },
39952
39952
 
39953
39953
  /**
39954
- * Find graph item by position x and y
39954
+ * Find the hit item at the given position (x, y).
39955
+ *
39956
+ * 선택 우선순위:
39957
+ * 1. directHit (bar 박스 내부 클릭) — 가장 가까운 것
39958
+ * 2. hit (line 포인트 근접 등) — 가장 가까운 것
39959
+ * 3. hit이 전혀 없으면 데이터가 있는 첫 시리즈로 fallback (기존 동작 호환)
39960
+ *
39961
+ * 과거에는 "같은 라벨 위에서 값이 가장 큰 시리즈"를 돌려주는 max-value 덮어쓰기 방식이었으나,
39962
+ * bar + line combo 차트에서 작은 bar를 클릭해도 큰 값의 line이 선택되는 버그의 원인이었다.
39963
+ * 이번 수정으로 사용자가 실제로 가리킨 시리즈(hit)가 선택되도록 바뀐다.
39964
+ *
39955
39965
  * @param {array} offset position x and y
39956
39966
  * @param {boolean} useApproximate if it's true. it'll look for closed item on mouse position
39957
39967
  * @param {number} dataIndex selected data index
39958
39968
  * @param {boolean} useSelectLabelOrItem used to display select label/item at tooltip location
39959
39969
  *
39960
- * @returns {object} clicked item information
39970
+ * @returns {object} hit item information
39961
39971
  */
39962
- getItemByPosition: function getItemByPosition(offset) {
39963
- var _maxValue;
39972
+ getHitItemByPosition: function getHitItemByPosition(offset) {
39973
+ var _ref4;
39964
39974
 
39965
39975
  var useApproximate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
39966
39976
  var dataIndex = arguments.length > 2 ? arguments[2] : undefined;
39967
39977
  var useSelectLabelOrItem = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
39968
39978
  var seriesIDs = Object.keys(this.seriesList);
39969
- var isHorizontal = !!this.options.horizontal;
39970
- var maxType = null;
39971
- var maxLabel = null;
39972
- var maxValuePos = null;
39973
- var maxValue = null;
39974
- var maxSeriesID = '';
39979
+ var isHorizontal = !!this.options.horizontal; // hit 기반 결과 (최우선)
39980
+
39981
+ var hitType = null;
39982
+ var hitLabel = null;
39983
+ var hitValuePos = null;
39984
+ var hitValue = null;
39985
+ var hitSeriesID = '';
39986
+ var hitDataIndex = null;
39987
+ var hitDistance = Infinity;
39988
+ var hasDirectHit = false; // fallback: hit이 전혀 없을 때 사용할 "데이터 있는 첫 시리즈" 정보
39989
+
39990
+ var fallbackType = null;
39991
+ var fallbackLabel = null;
39992
+ var fallbackValuePos = null;
39993
+ var fallbackValue = null;
39994
+ var fallbackSeriesID = '';
39995
+ var fallbackDataIndex = null;
39975
39996
  var acc = 0;
39976
39997
  var useStack = false;
39977
- var maxIndex = null;
39978
39998
 
39979
39999
  for (var ix = 0; ix < seriesIDs.length; ix++) {
39980
40000
  var seriesID = seriesIDs[ix];
@@ -39988,12 +40008,13 @@ var modules = {
39988
40008
 
39989
40009
  if (data) {
39990
40010
  if (helpers_util.isPieType(item.type)) {
39991
- maxLabel = seriesID;
39992
- maxSeriesID = seriesID;
39993
- maxValuePos = (data.ea - data.sa) / 2;
39994
- maxValue = data.o;
39995
- maxIndex = data.index;
39996
- maxType = item.type;
40011
+ // pie 차트는 hit detection 체계가 달라 기존 동작 유지 (단일 pie 시리즈가 일반적)
40012
+ hitType = item.type;
40013
+ hitLabel = seriesID;
40014
+ hitSeriesID = seriesID;
40015
+ hitValuePos = (data.ea - data.sa) / 2;
40016
+ hitValue = data.o;
40017
+ hitDataIndex = data.index;
39997
40018
  } else {
39998
40019
  var ldata = isHorizontal ? data.y : data.x;
39999
40020
  var lp = isHorizontal ? data.yp : data.xp;
@@ -40006,24 +40027,48 @@ var modules = {
40006
40027
  useStack = true;
40007
40028
  } else {
40008
40029
  acc += data.y;
40009
- }
40030
+ } // fallback 기록: 데이터가 있는 첫 시리즈를 저장
40031
+
40032
+
40033
+ if (fallbackSeriesID === '') {
40034
+ fallbackType = series.type;
40035
+ fallbackLabel = ldata;
40036
+ fallbackValuePos = lp;
40037
+ fallbackValue = g;
40038
+ fallbackSeriesID = seriesID;
40039
+ fallbackDataIndex = index;
40040
+ } // hit 기반 선택: item.hit이 true이고 유효한 좌표가 있을 때만 고려
40041
+
40042
+
40043
+ if (item.hit && data.xp !== undefined && data.yp !== undefined) {
40044
+ var distance = Math.pow(data.xp - offset[0], 2) + Math.pow(data.yp - offset[1], 2);
40045
+
40046
+ if (item.directHit) {
40047
+ // 직접 박스 히트는 최우선. 여러 개이면 가장 가까운 것.
40048
+ if (!hasDirectHit || distance < hitDistance) {
40049
+ hitDistance = distance;
40050
+ hitType = series.type;
40051
+ hitLabel = ldata;
40052
+ hitValuePos = lp;
40053
+ hitValue = g;
40054
+ hitSeriesID = seriesID;
40055
+ hitDataIndex = index;
40056
+ }
40010
40057
 
40011
- if (maxType === 'bar' && useStack) {
40012
- if (item.hit) {
40013
- maxValue = g;
40014
- maxSeriesID = seriesID;
40015
- maxIndex = index;
40016
- maxLabel = ldata;
40017
- maxValuePos = lp;
40018
- maxType = series.type;
40058
+ hasDirectHit = true;
40059
+ } else if (!hasDirectHit) {
40060
+ // directHit가 없을 때만 일반 hit 거리 비교 참여
40061
+ // (라인 근접 히트가 박스 직접 히트를 이기지 못하도록)
40062
+ if (distance < hitDistance) {
40063
+ hitDistance = distance;
40064
+ hitType = series.type;
40065
+ hitLabel = ldata;
40066
+ hitValuePos = lp;
40067
+ hitValue = g;
40068
+ hitSeriesID = seriesID;
40069
+ hitDataIndex = index;
40070
+ }
40019
40071
  }
40020
- } else if (maxValue === null || maxValue <= g) {
40021
- maxValue = g;
40022
- maxSeriesID = seriesID;
40023
- maxLabel = ldata;
40024
- maxValuePos = lp;
40025
- maxIndex = index;
40026
- maxType = series.type;
40027
40072
  }
40028
40073
  }
40029
40074
  }
@@ -40031,22 +40076,23 @@ var modules = {
40031
40076
  }
40032
40077
  }
40033
40078
 
40079
+ var hasHit = hitSeriesID !== '';
40034
40080
  return {
40035
- type: maxType,
40036
- label: maxLabel,
40037
- pos: maxValuePos,
40038
- value: (_maxValue = maxValue) !== null && _maxValue !== void 0 ? _maxValue : 0,
40039
- sId: maxSeriesID,
40081
+ type: hasHit ? hitType : fallbackType,
40082
+ label: hasHit ? hitLabel : fallbackLabel,
40083
+ pos: hasHit ? hitValuePos : fallbackValuePos,
40084
+ value: (_ref4 = hasHit ? hitValue : fallbackValue) !== null && _ref4 !== void 0 ? _ref4 : 0,
40085
+ sId: hasHit ? hitSeriesID : fallbackSeriesID,
40040
40086
  acc: acc,
40041
40087
  useStack: useStack,
40042
- maxIndex: maxIndex
40088
+ dataIndex: hasHit ? hitDataIndex : fallbackDataIndex
40043
40089
  };
40044
40090
  },
40045
40091
 
40046
40092
  /**
40047
40093
  * @typedef {Object} LabelInfoResult
40048
40094
  * @property {number} labelIndex - 선택된 라벨의 인덱스
40049
- * @property {object} hitInfo - 해당 위치에서의 히트 정보 (getItemByPosition 반환값)
40095
+ * @property {object} hitInfo - 해당 위치에서의 히트 정보 (getHitItemByPosition 반환값)
40050
40096
  */
40051
40097
 
40052
40098
  /**
@@ -40071,9 +40117,9 @@ var modules = {
40071
40117
  };
40072
40118
  var seriesList = this.data.series;
40073
40119
  var pointSize = (_Object$values$sort$ = (_Object$values$sort$2 = Object.values(seriesList).sort(function (a, b) {
40074
- var _ref4, _b$pointSize;
40120
+ var _ref5, _b$pointSize;
40075
40121
 
40076
- return (_ref4 = (_b$pointSize = b.pointSize) !== null && _b$pointSize !== void 0 ? _b$pointSize : 0 - a.pointSize) !== null && _ref4 !== void 0 ? _ref4 : 0;
40122
+ return (_ref5 = (_b$pointSize = b.pointSize) !== null && _b$pointSize !== void 0 ? _b$pointSize : 0 - a.pointSize) !== null && _ref5 !== void 0 ? _ref5 : 0;
40077
40123
  })[0]) === null || _Object$values$sort$2 === void 0 ? void 0 : _Object$values$sort$2.pointSize) !== null && _Object$values$sort$ !== void 0 ? _Object$values$sort$ : 3; // default pointSize 3
40078
40124
 
40079
40125
  var _this$options = this.options,
@@ -40105,10 +40151,10 @@ var modules = {
40105
40151
  _scrollbarOpt2$interv = _scrollbarOpt2.interval,
40106
40152
  interval = _scrollbarOpt2$interv === void 0 ? 1 : _scrollbarOpt2$interv;
40107
40153
 
40108
- var _ref5 = range !== null && range !== void 0 ? range : [0, scale.labels.length],
40109
- _ref6 = _slicedToArray(_ref5, 2),
40110
- min = _ref6[0],
40111
- max = _ref6[1];
40154
+ var _ref6 = range !== null && range !== void 0 ? range : [0, scale.labels.length],
40155
+ _ref7 = _slicedToArray(_ref6, 2),
40156
+ min = _ref7[0],
40157
+ max = _ref7[1];
40112
40158
 
40113
40159
  var labelCount = Math.floor((+max - +min) / interval) + 1;
40114
40160
  var labelGap = (endPoint - startPoint) / labelCount;
@@ -40134,7 +40180,7 @@ var modules = {
40134
40180
 
40135
40181
  labelIndex = scale.labels.length > _index ? _index : -1;
40136
40182
  } else {
40137
- var _hitInfo$maxIndex;
40183
+ var _hitInfo$dataIndex;
40138
40184
 
40139
40185
  var offsetX;
40140
40186
  var dataIndex;
@@ -40149,8 +40195,8 @@ var modules = {
40149
40195
  offsetX = x;
40150
40196
  }
40151
40197
 
40152
- hitInfo = this.getItemByPosition([offsetX, y], selectLabel === null || selectLabel === void 0 ? void 0 : selectLabel.useApproximateValue, dataIndex, true);
40153
- labelIndex = (_hitInfo$maxIndex = hitInfo.maxIndex) !== null && _hitInfo$maxIndex !== void 0 ? _hitInfo$maxIndex : -1;
40198
+ hitInfo = this.getHitItemByPosition([offsetX, y], selectLabel === null || selectLabel === void 0 ? void 0 : selectLabel.useApproximateValue, dataIndex, true);
40199
+ labelIndex = (_hitInfo$dataIndex = hitInfo.dataIndex) !== null && _hitInfo$dataIndex !== void 0 ? _hitInfo$dataIndex : -1;
40154
40200
  }
40155
40201
 
40156
40202
  return {
@@ -42133,7 +42179,7 @@ var element_line_Line = /*#__PURE__*/function () {
42133
42179
  }, {
42134
42180
  key: "findGraphData",
42135
42181
  value: function findGraphData(offset, isHorizontal, dataIndex, useSelectLabelOrItem) {
42136
- var _item$data;
42182
+ var _this$pointSize, _item$data;
42137
42183
 
42138
42184
  var xp = offset[0];
42139
42185
  var yp = offset[1];
@@ -42145,7 +42191,23 @@ var element_line_Line = /*#__PURE__*/function () {
42145
42191
  var gdata = this.data.filter(function (data) {
42146
42192
  return !helpers_util.isNullOrUndefined(data.x);
42147
42193
  });
42148
- var isLinearInterpolation = this.useLinearInterpolation();
42194
+ var isLinearInterpolation = this.useLinearInterpolation(); // line 포인트 "정확 히트" 판정용 반경.
42195
+ // combo 차트에서 line 포인트 중심을 직격한 경우, 같은 좌표의 bar(directHit)보다
42196
+ // line이 우선되도록 item.directHit = true로 표시한다. 그 외(단순 Y축 근접)는 기존처럼 hit만.
42197
+ // 포인트 반지름에 기본 포인트 크기(LINE_OPTION.pointSize)만큼의 클릭 여유 마진을 더하고,
42198
+ // 시각적으로 하이라이트되는 포인트 반경(highlight.maxSize)을 최소 보장값으로 사용한다.
42199
+
42200
+ var directHitRadius = Math.max(((_this$pointSize = this.pointSize) !== null && _this$pointSize !== void 0 ? _this$pointSize : LINE_OPTION.pointSize) + LINE_OPTION.pointSize, LINE_OPTION.highlight.maxSize);
42201
+
42202
+ var isLinePointDirectHit = function isLinePointDirectHit(point) {
42203
+ if (!point || point.xp === undefined || point.yp === undefined) {
42204
+ return false;
42205
+ }
42206
+
42207
+ var dx = xp - point.xp;
42208
+ var dy = yp - point.yp;
42209
+ return dx * dx + dy * dy <= directHitRadius * directHitRadius;
42210
+ };
42149
42211
 
42150
42212
  if (gdata !== null && gdata !== void 0 && gdata.length) {
42151
42213
  if (typeof dataIndex === 'number' && this.show) {
@@ -42160,6 +42222,11 @@ var element_line_Line = /*#__PURE__*/function () {
42160
42222
  if (yDist <= directHitThreshold) {
42161
42223
  item.hit = true;
42162
42224
  }
42225
+
42226
+ if (isLinePointDirectHit(point)) {
42227
+ item.hit = true;
42228
+ item.directHit = true;
42229
+ }
42163
42230
  }
42164
42231
  } else if (typeof this.beforeFindItemIndex === 'number' && this.beforeFindItemIndex !== -1 && this.show && useSelectLabelOrItem) {
42165
42232
  item.data = gdata[this.beforeFindItemIndex];
@@ -42308,6 +42375,11 @@ var element_line_Line = /*#__PURE__*/function () {
42308
42375
  if (_yDist <= _directHitThreshold) {
42309
42376
  item.hit = true;
42310
42377
  }
42378
+
42379
+ if (isLinePointDirectHit(_point3)) {
42380
+ item.hit = true;
42381
+ item.directHit = true;
42382
+ }
42311
42383
  }
42312
42384
  }
42313
42385
  }
@@ -43038,17 +43110,16 @@ var element_bar_Bar = /*#__PURE__*/function () {
43038
43110
  this.borderRadius = param.borderRadius;
43039
43111
  this.filteredCount = totalCount;
43040
43112
  var startIndex = truthyNumber(minIndex) ? minIndex : 0;
43041
- var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1; // 스크롤 범위 내에서만 루프 돌림
43113
+ var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1;
43114
+ this.visibleStartIndex = startIndex;
43042
43115
 
43043
43116
  for (var i = startIndex; i <= endIndex; i++) {
43044
- var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
43045
-
43046
- var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
43117
+ var screenIndex = i - startIndex;
43118
+ var item = this.data[i];
43047
43119
 
43048
43120
  if (item) {
43049
43121
  var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
43050
43122
 
43051
- // 스크롤 offset(minIndex)만큼 보정해서 그리기
43052
43123
  var categoryPoint = isHorizontal ? ysp - cArea * screenIndex - cPad : xsp + cArea * screenIndex + cPad;
43053
43124
 
43054
43125
  if (isHorizontal) {
@@ -43147,11 +43218,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43147
43218
 
43148
43219
  item.h = isHorizontal ? -h : h; // eslint-disable-line
43149
43220
 
43150
- item.index = i; // 실제 데이터 인덱스 (스크롤 offset 포함)
43151
- // 검색(hitInfo) 로직은 this.data[0..filteredCount-1] 범위만 검사하므로,
43152
- // 현재 화면에 그린 항목을 배열 앞쪽으로 매핑해준다.
43153
-
43154
- this.data[screenIndex] = item;
43221
+ item.index = i;
43155
43222
  }
43156
43223
  }
43157
43224
  }
@@ -43237,17 +43304,26 @@ var element_bar_Bar = /*#__PURE__*/function () {
43237
43304
  key: "findGraphData",
43238
43305
  value: function findGraphData(offset, isHorizontal, dataIndex, useIndicatorOnLabel) {
43239
43306
  if (typeof dataIndex === 'number' && this.show && useIndicatorOnLabel) {
43240
- var gdata = this.data;
43307
+ var _this$visibleStartInd, _this$filteredCount;
43308
+
43309
+ var barData = this.data;
43241
43310
  var item = {
43242
43311
  data: null,
43243
43312
  hit: false,
43244
43313
  color: this.color
43245
- };
43314
+ }; // dataIndex를 현재 화면에 보이는 범위로 clamp하여 stale xp/yp 참조 방지
43246
43315
 
43247
- if (gdata[dataIndex]) {
43248
- item.data = gdata[dataIndex];
43249
- item.index = dataIndex;
43250
- item.hit = this.isPointInBar(offset, gdata[dataIndex]);
43316
+ var visStart = (_this$visibleStartInd = this.visibleStartIndex) !== null && _this$visibleStartInd !== void 0 ? _this$visibleStartInd : 0;
43317
+ var visEnd = visStart + ((_this$filteredCount = this.filteredCount) !== null && _this$filteredCount !== void 0 ? _this$filteredCount : barData.length) - 1;
43318
+ var clampedIndex = Math.max(visStart, Math.min(dataIndex, visEnd));
43319
+
43320
+ if (barData[clampedIndex]) {
43321
+ item.data = barData[clampedIndex];
43322
+ item.index = clampedIndex;
43323
+ item.hit = this.isPointInBar(offset, barData[clampedIndex]); // bar 박스 내부 클릭은 "직접 박스 히트"로 표시.
43324
+ // findHitItem에서 line 포인트 근접 히트보다 우선 선택되도록 하기 위함.
43325
+
43326
+ item.directHit = item.hit;
43251
43327
  }
43252
43328
 
43253
43329
  return item;
@@ -43273,7 +43349,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43273
43349
  }, {
43274
43350
  key: "binarySearchBar",
43275
43351
  value: function binarySearchBar(offset, isHorizontal) {
43276
- var _this$filteredCount;
43352
+ var _this$visibleStartInd2, _this$filteredCount2;
43277
43353
 
43278
43354
  var _offset = _slicedToArray(offset, 2),
43279
43355
  xp = _offset[0],
@@ -43285,9 +43361,10 @@ var element_bar_Bar = /*#__PURE__*/function () {
43285
43361
  color: this.color
43286
43362
  };
43287
43363
  var gdata = this.data;
43288
- var totalCount = (_this$filteredCount = this.filteredCount) !== null && _this$filteredCount !== void 0 ? _this$filteredCount : gdata.length;
43289
- var s = 0;
43290
- var e = totalCount - 1;
43364
+ var startIdx = (_this$visibleStartInd2 = this.visibleStartIndex) !== null && _this$visibleStartInd2 !== void 0 ? _this$visibleStartInd2 : 0;
43365
+ var totalCount = (_this$filteredCount2 = this.filteredCount) !== null && _this$filteredCount2 !== void 0 ? _this$filteredCount2 : gdata.length;
43366
+ var s = startIdx;
43367
+ var e = startIdx + totalCount - 1;
43291
43368
 
43292
43369
  while (s <= e) {
43293
43370
  var m = Math.floor((s + e) / 2);
@@ -43303,7 +43380,9 @@ var element_bar_Bar = /*#__PURE__*/function () {
43303
43380
  if (inRange) {
43304
43381
  item.data = barData;
43305
43382
  item.index = barData.index;
43306
- item.hit = this.isPointInBar(offset, barData);
43383
+ item.hit = this.isPointInBar(offset, barData); // bar 박스 내부 클릭은 "직접 박스 히트"로 표시 (findHitItem 우선순위용).
43384
+
43385
+ item.directHit = item.hit;
43307
43386
  return item;
43308
43387
  }
43309
43388
 
@@ -50194,13 +50273,20 @@ var plugins_scrollbar_module = {
50194
50273
  Object.keys(merged).forEach(function (key) {
50195
50274
  scrollbarOpt[key] = merged[key];
50196
50275
  });
50197
- delete scrollbarOpt.savedPosition;
50276
+
50277
+ if (scrollbarOpt.resetPosition) {
50278
+ var _axisOpt$2, _axisOpt$2$range, _axisOpt$3;
50279
+
50280
+ scrollbarOpt.range = axisOpt !== null && axisOpt !== void 0 && (_axisOpt$2 = axisOpt[0]) !== null && _axisOpt$2 !== void 0 && (_axisOpt$2$range = _axisOpt$2.range) !== null && _axisOpt$2$range !== void 0 && _axisOpt$2$range.length ? _toConsumableArray(axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$3 = axisOpt[0]) === null || _axisOpt$3 === void 0 ? void 0 : _axisOpt$3.range) : null;
50281
+ this.resetScrollbarSavedPositions(dir);
50282
+ }
50198
50283
 
50199
50284
  if (!scrollbarOpt.isInit) {
50200
- var _axisOpt$2, _axisOpt$3, _axisOpt$3$range, _axisOpt$4;
50285
+ var _axisOpt$4, _axisOpt$5, _axisOpt$5$range, _axisOpt$6;
50201
50286
 
50202
- scrollbarOpt.type = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$2 = axisOpt[0]) === null || _axisOpt$2 === void 0 ? void 0 : _axisOpt$2.type;
50203
- scrollbarOpt.range = axisOpt !== null && axisOpt !== void 0 && (_axisOpt$3 = axisOpt[0]) !== null && _axisOpt$3 !== void 0 && (_axisOpt$3$range = _axisOpt$3.range) !== null && _axisOpt$3$range !== void 0 && _axisOpt$3$range.length ? _toConsumableArray(axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$4 = axisOpt[0]) === null || _axisOpt$4 === void 0 ? void 0 : _axisOpt$4.range) : null;
50287
+ scrollbarOpt.type = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$4 = axisOpt[0]) === null || _axisOpt$4 === void 0 ? void 0 : _axisOpt$4.type;
50288
+ scrollbarOpt.range = axisOpt !== null && axisOpt !== void 0 && (_axisOpt$5 = axisOpt[0]) !== null && _axisOpt$5 !== void 0 && (_axisOpt$5$range = _axisOpt$5.range) !== null && _axisOpt$5$range !== void 0 && _axisOpt$5$range.length ? _toConsumableArray(axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$6 = axisOpt[0]) === null || _axisOpt$6 === void 0 ? void 0 : _axisOpt$6.range) : null;
50289
+ this.resetScrollbarSavedPositions(dir);
50204
50290
  this.initScrollbarRange(dir);
50205
50291
  this.createScrollbarLayout(dir);
50206
50292
  this.createScrollbar(dir);
@@ -50263,7 +50349,7 @@ var plugins_scrollbar_module = {
50263
50349
  * @param updateData is update data
50264
50350
  */
50265
50351
  updateScrollbarInfo: function updateScrollbarInfo(dir, updateData) {
50266
- var _newOpt$, _newOpt$$scrollbar, _newOpt$2, _newOpt$0$scrollbar, _newOpt$3, _newOpt$4, _axisOpt$5, _newOpt$0$scrollbar2;
50352
+ var _newOpt$, _newOpt$$scrollbar, _newOpt$2, _newOpt$0$scrollbar, _newOpt$3, _newOpt$4, _axisOpt$7, _newOpt$0$scrollbar2;
50267
50353
 
50268
50354
  var _this$options = this.options,
50269
50355
  axesX = _this$options.axesX,
@@ -50279,23 +50365,21 @@ var plugins_scrollbar_module = {
50279
50365
  }
50280
50366
 
50281
50367
  var axisOpt = dir === 'x' ? this.axesX : this.axesY;
50282
- 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);
50368
+ 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$7 = axisOpt[0]) === null || _axisOpt$7 === void 0 ? void 0 : _axisOpt$7.range);
50283
50369
 
50284
50370
  if (isUpdateAxesRange || updateData) {
50285
50371
  var _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
50286
50372
 
50287
50373
  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;
50288
50374
 
50289
- if (isUpdateAxesRange || isResetPosition) {
50375
+ if (isUpdateAxesRange) {
50290
50376
  var _newOpt$5, _newOpt$5$range, _newOpt$6;
50291
50377
 
50292
- 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가 업데이트되면 저장된 스크롤 위치를 초기화
50378
+ 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;
50379
+ }
50293
50380
 
50294
- delete this.scrollbar[dir].savedPosition;
50295
- } else if (updateData) {
50296
- // 데이터가 업데이트되면 저장된 픽셀 위치는 더 이상 유효하지 않으므로 삭제하여
50297
- // 논리적 범위에 따라 다시 계산하도록 합니다.
50298
- delete this.scrollbar[dir].savedPosition;
50381
+ if (isResetPosition || updateData) {
50382
+ this.resetScrollbarSavedPositions(dir);
50299
50383
  }
50300
50384
 
50301
50385
  this.initScrollbarRange(dir);
@@ -50433,17 +50517,32 @@ var plugins_scrollbar_module = {
50433
50517
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
50434
50518
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
50435
50519
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
50436
- var trackSize = fullSize - buttonSize * 2; // 현재 위치를 보존해야 하는 경우 기존 위치를 저장
50520
+ var trackSize = fullSize - buttonSize * 2;
50521
+ var thumbSize = this.getScrollbarThumbSize(dir, trackSize); // 비율로 저장된 위치가 있으면 새 track 크기에 맞게 복원
50437
50522
 
50438
- var savedThumbPosition = null;
50523
+ if (preservePosition && scrollbarOpt.savedPositionRatio !== undefined) {
50524
+ var maxPosition = Math.max(0, trackSize - thumbSize.size);
50525
+
50526
+ if (scrollbarOpt.savedAtStart) {
50527
+ thumbSize.position = 0;
50528
+ } else if (scrollbarOpt.savedAtEnd) {
50529
+ thumbSize.position = maxPosition;
50530
+ } else {
50531
+ thumbSize.position = Math.min(scrollbarOpt.savedPositionRatio * trackSize, maxPosition);
50532
+ }
50533
+ } // 위치를 비율 및 처음/끝 고정 여부로 저장
50534
+ // currentMaxPosition === 0 (thumbSize >= trackSize) 인 경우 저장하지 않음
50535
+ // → trackSize가 다시 커졌을 때 이전 savedAtEnd/savedAtStart/savedPositionRatio 상태를 유지
50439
50536
 
50440
- if (preservePosition && scrollbarOpt.savedPosition !== undefined) {
50441
- savedThumbPosition = scrollbarOpt.savedPosition;
50442
- }
50443
50537
 
50444
- var thumbSize = this.getScrollbarThumbSize(dir, trackSize, savedThumbPosition); // 새로 계산된 위치를 저장
50538
+ var currentMaxPosition = Math.max(0, trackSize - thumbSize.size);
50539
+
50540
+ if (currentMaxPosition > 0) {
50541
+ scrollbarOpt.savedPositionRatio = thumbSize.position / trackSize;
50542
+ scrollbarOpt.savedAtStart = thumbSize.position <= 0;
50543
+ scrollbarOpt.savedAtEnd = thumbSize.position >= currentMaxPosition;
50544
+ }
50445
50545
 
50446
- scrollbarOpt.savedPosition = thumbSize.position;
50447
50546
  var scrollbarStyle = 'display: block;';
50448
50547
  var scrollbarTrackStyle;
50449
50548
  var scrollbarThumbStyle;
@@ -50510,9 +50609,8 @@ var plugins_scrollbar_module = {
50510
50609
  * get scrollbar thumb size
50511
50610
  * @param dir axis direction ('x' | 'y')
50512
50611
  * @param trackSize scrollbar track size
50513
- * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
50514
50612
  */
50515
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
50613
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
50516
50614
  var scrollbarOpt = this.scrollbar[dir];
50517
50615
 
50518
50616
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -50543,9 +50641,9 @@ var plugins_scrollbar_module = {
50543
50641
  var _range = +max - +min;
50544
50642
 
50545
50643
  if (axesType === 'time') {
50546
- var _axisOpt$6, _this$labelRange$dir, _this$labelRange$dir$;
50644
+ var _axisOpt$8, _this$labelRange$dir, _this$labelRange$dir$;
50547
50645
 
50548
- interval = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$6 = axisOpt[0]) === null || _axisOpt$6 === void 0 ? void 0 : _axisOpt$6.getInterval({
50646
+ interval = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$8 = axisOpt[0]) === null || _axisOpt$8 === void 0 ? void 0 : _axisOpt$8.getInterval({
50549
50647
  minValue: minMax.min,
50550
50648
  maxValue: minMax.max,
50551
50649
  maxSteps: (_this$labelRange$dir = this.labelRange[dir]) === null || _this$labelRange$dir === void 0 ? void 0 : (_this$labelRange$dir$ = _this$labelRange$dir[0]) === null || _this$labelRange$dir$ === void 0 ? void 0 : _this$labelRange$dir$.max
@@ -50565,12 +50663,7 @@ var plugins_scrollbar_module = {
50565
50663
 
50566
50664
  scrollbarOpt.startValue = startValue;
50567
50665
  scrollbarOpt.steps = steps;
50568
- scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
50569
-
50570
- if (savedThumbPosition !== null) {
50571
- thumbPosition = savedThumbPosition;
50572
- }
50573
-
50666
+ scrollbarOpt.interval = interval;
50574
50667
  return {
50575
50668
  size: thumbSize,
50576
50669
  position: thumbPosition
@@ -50637,18 +50730,35 @@ var plugins_scrollbar_module = {
50637
50730
  if (!isOutOfRange) {
50638
50731
  scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
50639
50732
 
50640
- delete scrollbarOpt.savedPosition;
50733
+ this.resetScrollbarSavedPositions(dir);
50641
50734
  this.update({
50642
50735
  updateSeries: false,
50643
50736
  updateSelTip: {
50644
50737
  update: false,
50645
50738
  keepDomain: false
50646
50739
  },
50647
- lightUpdate: minValue > 1
50740
+ lightUpdate: minValue > 1,
50741
+ updateByScrollbar: true
50648
50742
  });
50649
50743
  }
50650
50744
  },
50651
50745
 
50746
+ /**
50747
+ * reset scrollbar saved positions
50748
+ * @param dir axis direction ('x' | 'y')
50749
+ */
50750
+ resetScrollbarSavedPositions: function resetScrollbarSavedPositions(dir) {
50751
+ var scrollbarOpt = this.scrollbar[dir];
50752
+
50753
+ if (!scrollbarOpt) {
50754
+ return;
50755
+ }
50756
+
50757
+ delete scrollbarOpt.savedPositionRatio;
50758
+ delete scrollbarOpt.savedAtStart;
50759
+ delete scrollbarOpt.savedAtEnd;
50760
+ },
50761
+
50652
50762
  /**
50653
50763
  * create scroll event
50654
50764
  */
@@ -50903,13 +51013,15 @@ var plugins_scrollbar_module = {
50903
51013
 
50904
51014
  this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
50905
51015
 
50906
- delete this.scrollbar[dir].savedPosition;
51016
+ this.resetScrollbarSavedPositions(dir);
50907
51017
  this.update({
50908
51018
  updateSeries: false,
50909
51019
  updateSelTip: {
50910
51020
  update: false,
50911
51021
  keepDomain: false
50912
- }
51022
+ },
51023
+ lightUpdate: movedMin > 1,
51024
+ updateByScrollbar: true
50913
51025
  });
50914
51026
  },
50915
51027
 
@@ -51779,19 +51891,19 @@ var plugins_interaction_modules = {
51779
51891
  var useSelectSeries = (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.use) && (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.useClick);
51780
51892
 
51781
51893
  var setSelectedItemInfo = function setSelectedItemInfo() {
51782
- var hitInfo = _this.getItemByPosition(offset, false);
51894
+ var hitInfo = _this.getHitItemByPosition(offset, false);
51783
51895
 
51784
51896
  args.label = hitInfo.label;
51785
51897
  args.value = hitInfo.value;
51786
51898
  args.seriesId = hitInfo.sId;
51787
- args.dataIndex = hitInfo.maxIndex;
51899
+ args.dataIndex = hitInfo.dataIndex;
51788
51900
  args.acc = hitInfo.acc;
51789
51901
 
51790
51902
  if (hitInfo !== null && hitInfo !== void 0 && hitInfo.sId) {
51791
51903
  args.selected = {
51792
51904
  eventTarget: 'item',
51793
51905
  seriesId: _this.isDeselectItem(hitInfo) ? null : hitInfo.sId,
51794
- dataIndex: _this.isDeselectItem(hitInfo) ? null : hitInfo.maxIndex
51906
+ dataIndex: _this.isDeselectItem(hitInfo) ? null : hitInfo.dataIndex
51795
51907
  };
51796
51908
  }
51797
51909
  };
@@ -52465,7 +52577,10 @@ var plugins_interaction_modules = {
52465
52577
  var maxv = '';
52466
52578
  var maxg = null;
52467
52579
  var maxSID = null;
52468
- var minDistance = Infinity; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
52580
+ var minDistance = Infinity; // directHit(bar 박스 내부 클릭/hover) 시리즈가 발견되었는지 추적.
52581
+ // 한 번이라도 directHit가 있으면 line의 근접 포인트 히트는 hitId 후보에서 배제된다.
52582
+
52583
+ var hasDirectHit = false; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
52469
52584
 
52470
52585
  var targetDataIndex = this.findClosestDataIndex(offset, sIds);
52471
52586
 
@@ -52541,13 +52656,25 @@ var plugins_interaction_modules = {
52541
52656
  if (maxg === null || maxg <= gdata) {
52542
52657
  maxg = gdata;
52543
52658
  maxSID = sId;
52544
- } // 마우스 위치와의 거리 계산하여 가장 가까운 시리즈 선택
52659
+ } // 마우스 위치와의 거리 계산하여 가장 가까운 시리즈 선택.
52660
+ // directHit(bar 박스 내부)가 하나라도 있으면 그중에서만 선택하고,
52661
+ // 라인의 근접 포인트 히트(item.hit=true, directHit=false)는 hitId 후보에서 배제한다.
52662
+ // bar + line combo 차트에서 작은 bar 클릭 시 큰 값의 line이 잡히던 버그 방지.
52545
52663
 
52546
52664
 
52547
52665
  if (item.hit && item.data.xp !== undefined && item.data.yp !== undefined) {
52548
52666
  var distance = Math.pow(item.data.xp - offset[0], 2) + Math.pow(item.data.yp - offset[1], 2);
52549
52667
 
52550
- if (distance < minDistance) {
52668
+ if (item.directHit) {
52669
+ // directHit는 최우선. 여러 directHit 중에서는 가장 가까운 것 선택.
52670
+ if (!hasDirectHit || distance < minDistance) {
52671
+ minDistance = distance;
52672
+ hitId = sId;
52673
+ }
52674
+
52675
+ hasDirectHit = true;
52676
+ } else if (!hasDirectHit && distance < minDistance) {
52677
+ // directHit가 없을 때만 일반 hit 거리 비교
52551
52678
  minDistance = distance;
52552
52679
  hitId = sId;
52553
52680
  }
@@ -53243,7 +53370,7 @@ var plugins_interaction_modules = {
53243
53370
  isDeselectItem: function isDeselectItem(hitInfo) {
53244
53371
  var _this$defaultSelectIt, _this$defaultSelectIt2;
53245
53372
 
53246
- return this.options.selectItem.useDeselectItem && (hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.maxIndex) === ((_this$defaultSelectIt = this.defaultSelectItemInfo) === null || _this$defaultSelectIt === void 0 ? void 0 : _this$defaultSelectIt.dataIndex) && (hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.sId) === ((_this$defaultSelectIt2 = this.defaultSelectItemInfo) === null || _this$defaultSelectIt2 === void 0 ? void 0 : _this$defaultSelectIt2.seriesID) && !isNaN(hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.maxIndex);
53373
+ return this.options.selectItem.useDeselectItem && (hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.dataIndex) === ((_this$defaultSelectIt = this.defaultSelectItemInfo) === null || _this$defaultSelectIt === void 0 ? void 0 : _this$defaultSelectIt.dataIndex) && (hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.sId) === ((_this$defaultSelectIt2 = this.defaultSelectItemInfo) === null || _this$defaultSelectIt2 === void 0 ? void 0 : _this$defaultSelectIt2.seriesID) && !isNaN(hitInfo === null || hitInfo === void 0 ? void 0 : hitInfo.dataIndex);
53247
53374
  },
53248
53375
 
53249
53376
  /**
@@ -54917,7 +55044,7 @@ var element_tip_modules = {
54917
55044
 
54918
55045
  if (tipType === 'sel') {
54919
55046
  if (hitInfo && hitInfo.label !== null) {
54920
- lastTip.pos = type === 'bar' ? hitInfo.maxIndex : hitInfo.label;
55047
+ lastTip.pos = type === 'bar' ? hitInfo.dataIndex : hitInfo.label;
54921
55048
  ldata = lastTip.pos;
54922
55049
  } else if (lastTip.pos !== null) {
54923
55050
  ldata = lastTip.pos;
@@ -55129,9 +55256,10 @@ var element_tip_modules = {
55129
55256
  interval = scrollbarOpt.interval,
55130
55257
  type = scrollbarOpt.type;
55131
55258
 
55132
- var _range = _slicedToArray(range, 2),
55133
- min = _range[0],
55134
- max = _range[1];
55259
+ var _ref3 = range !== null && range !== void 0 ? range : [],
55260
+ _ref4 = _slicedToArray(_ref3, 2),
55261
+ min = _ref4[0],
55262
+ max = _ref4[1];
55135
55263
 
55136
55264
  if (truthyNumber(min) && truthyNumber(max)) {
55137
55265
  labelCount = Math.floor((+max - +min) / interval) + 1;
@@ -55800,15 +55928,15 @@ var chart_core_EvChart = /*#__PURE__*/function () {
55800
55928
  this.axesRange = this.getAxesRange();
55801
55929
  this.labelOffset = this.getLabelOffset();
55802
55930
  this.labelRange = this.getAxesLabelRange();
55803
- this.axesSteps = this.calculateSteps();
55804
- this.adjustXAndYAxisWidth();
55805
- this.drawAxis(hitInfo);
55806
- this.drawSeries(hitInfo);
55807
55931
 
55808
55932
  if ((_this$scrollbar = this.scrollbar) !== null && _this$scrollbar !== void 0 && (_this$scrollbar$x = _this$scrollbar.x) !== null && _this$scrollbar$x !== void 0 && _this$scrollbar$x.use || (_this$scrollbar2 = this.scrollbar) !== null && _this$scrollbar2 !== void 0 && (_this$scrollbar2$y = _this$scrollbar2.y) !== null && _this$scrollbar2$y !== void 0 && _this$scrollbar2$y.use) {
55809
55933
  this.updateScrollbarPosition();
55810
55934
  }
55811
55935
 
55936
+ this.axesSteps = this.calculateSteps();
55937
+ this.adjustXAndYAxisWidth();
55938
+ this.drawAxis(hitInfo);
55939
+ this.drawSeries(hitInfo);
55812
55940
  this.drawTip();
55813
55941
 
55814
55942
  if (this.bufferCanvas && ((_this$bufferCanvas = this.bufferCanvas) === null || _this$bufferCanvas === void 0 ? void 0 : _this$bufferCanvas.width) > 1 && ((_this$bufferCanvas2 = this.bufferCanvas) === null || _this$bufferCanvas2 === void 0 ? void 0 : _this$bufferCanvas2.height) > 1) {
@@ -56015,10 +56143,10 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56015
56143
  var lastHitInfo = this.lastHitInfo;
56016
56144
  var defaultSelectInfo = this.defaultSelectItemInfo;
56017
56145
 
56018
- if (lastHitInfo !== null && lastHitInfo !== void 0 && lastHitInfo.maxIndex || (lastHitInfo === null || lastHitInfo === void 0 ? void 0 : lastHitInfo.maxIndex) === 0) {
56146
+ if (lastHitInfo !== null && lastHitInfo !== void 0 && lastHitInfo.dataIndex || (lastHitInfo === null || lastHitInfo === void 0 ? void 0 : lastHitInfo.dataIndex) === 0) {
56019
56147
  _selectInfo = {
56020
56148
  seriesID: lastHitInfo.sId,
56021
- dataIndex: lastHitInfo.maxIndex
56149
+ dataIndex: lastHitInfo.dataIndex
56022
56150
  };
56023
56151
  } else if (defaultSelectInfo !== null && defaultSelectInfo !== void 0 && defaultSelectInfo.dataIndex || (defaultSelectInfo === null || defaultSelectInfo === void 0 ? void 0 : defaultSelectInfo.dataIndex) === 0) {
56024
56152
  _selectInfo = _objectSpread2({}, defaultSelectInfo);
@@ -56467,14 +56595,20 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56467
56595
 
56468
56596
  }, {
56469
56597
  key: "updateScrollbar",
56470
- value: function updateScrollbar(updateData) {
56471
- var _this$scrollbar3, _this$scrollbar3$x, _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$scrollbar4, _this$scrollbar4$y, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
56598
+ value: function updateScrollbar(updateData, updateByScrollbar) {
56599
+ var _this$options$axesX$2, _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2, _this$scrollbar$x$use, _this$scrollbar3, _this$scrollbar3$x, _this$scrollbar$y$use, _this$scrollbar4, _this$scrollbar4$y;
56600
+
56601
+ var isForceUpdate = updateByScrollbar || updateData;
56602
+ var xUse = (_this$options$axesX$2 = (_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.use) !== null && _this$options$axesX$2 !== void 0 ? _this$options$axesX$2 : false;
56603
+ var yUse = (_this$options$axesY$2 = (_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.use) !== null && _this$options$axesY$2 !== void 0 ? _this$options$axesY$2 : false;
56604
+ var prevXUse = (_this$scrollbar$x$use = (_this$scrollbar3 = this.scrollbar) === null || _this$scrollbar3 === void 0 ? void 0 : (_this$scrollbar3$x = _this$scrollbar3.x) === null || _this$scrollbar3$x === void 0 ? void 0 : _this$scrollbar3$x.use) !== null && _this$scrollbar$x$use !== void 0 ? _this$scrollbar$x$use : false;
56605
+ var prevYUse = (_this$scrollbar$y$use = (_this$scrollbar4 = this.scrollbar) === null || _this$scrollbar4 === void 0 ? void 0 : (_this$scrollbar4$y = _this$scrollbar4.y) === null || _this$scrollbar4$y === void 0 ? void 0 : _this$scrollbar4$y.use) !== null && _this$scrollbar$y$use !== void 0 ? _this$scrollbar$y$use : false;
56472
56606
 
56473
- if ((_this$scrollbar3 = this.scrollbar) !== null && _this$scrollbar3 !== void 0 && (_this$scrollbar3$x = _this$scrollbar3.x) !== null && _this$scrollbar3$x !== void 0 && _this$scrollbar3$x.isInit || (_this$options$axesX2 = this.options.axesX) !== null && _this$options$axesX2 !== void 0 && (_this$options$axesX2$ = _this$options$axesX2[0]) !== null && _this$options$axesX2$ !== void 0 && (_this$options$axesX2$2 = _this$options$axesX2$.scrollbar) !== null && _this$options$axesX2$2 !== void 0 && _this$options$axesX2$2.use) {
56607
+ if (xUse !== prevXUse || xUse || isForceUpdate && xUse) {
56474
56608
  this.updateScrollbarInfo('x', updateData);
56475
56609
  }
56476
56610
 
56477
- if ((_this$scrollbar4 = this.scrollbar) !== null && _this$scrollbar4 !== void 0 && (_this$scrollbar4$y = _this$scrollbar4.y) !== null && _this$scrollbar4$y !== void 0 && _this$scrollbar4$y.isInit || (_this$options$axesY2 = this.options.axesY) !== null && _this$options$axesY2 !== void 0 && (_this$options$axesY2$ = _this$options$axesY2[0]) !== null && _this$options$axesY2$ !== void 0 && (_this$options$axesY2$2 = _this$options$axesY2$.scrollbar) !== null && _this$options$axesY2$2 !== void 0 && _this$options$axesY2$2.use) {
56611
+ if (yUse !== prevYUse || yUse || isForceUpdate && yUse) {
56478
56612
  this.updateScrollbarInfo('y', updateData);
56479
56613
  }
56480
56614
  }
@@ -56500,13 +56634,14 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56500
56634
  updateLegend = updateInfo.updateLegend,
56501
56635
  updateData = updateInfo.updateData,
56502
56636
  updateTooltip = updateInfo.updateTooltip,
56503
- lightUpdate = updateInfo.lightUpdate;
56637
+ lightUpdate = updateInfo.lightUpdate,
56638
+ updateByScrollbar = updateInfo.updateByScrollbar;
56504
56639
 
56505
56640
  if (!this.isInit) {
56506
56641
  return;
56507
56642
  }
56508
56643
 
56509
- this.updateScrollbar(updateData);
56644
+ this.updateScrollbar(updateData, updateByScrollbar);
56510
56645
  this.resetProps();
56511
56646
  this.updateSeries = updateSeries;
56512
56647