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.
package/dist/evui.umd.js CHANGED
@@ -11244,7 +11244,7 @@ $({ target: 'Number', stat: true }, {
11244
11244
  /***/ "9224":
11245
11245
  /***/ (function(module) {
11246
11246
 
11247
- module.exports = JSON.parse("{\"a\":\"3.4.154\"}");
11247
+ module.exports = JSON.parse("{\"a\":\"3.4.156\"}");
11248
11248
 
11249
11249
  /***/ }),
11250
11250
 
@@ -39911,7 +39911,7 @@ var modules = {
39911
39911
  return null;
39912
39912
  }
39913
39913
 
39914
- itemPosition = [this.getItemByPosition([dataInfo.xp, dataInfo.yp], useApproximate, dataIndex, true)];
39914
+ itemPosition = [this.getHitItemByPosition([dataInfo.xp, dataInfo.yp], useApproximate, dataIndex, true)];
39915
39915
  } else {
39916
39916
  var seriesList = Object.entries(this.seriesList);
39917
39917
  var firShowSeriesID;
@@ -39936,7 +39936,7 @@ var modules = {
39936
39936
  return null;
39937
39937
  }
39938
39938
 
39939
- 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);
39939
+ 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);
39940
39940
  });
39941
39941
  }
39942
39942
 
@@ -39960,30 +39960,50 @@ var modules = {
39960
39960
  },
39961
39961
 
39962
39962
  /**
39963
- * Find graph item by position x and y
39963
+ * Find the hit item at the given position (x, y).
39964
+ *
39965
+ * 선택 우선순위:
39966
+ * 1. directHit (bar 박스 내부 클릭) — 가장 가까운 것
39967
+ * 2. hit (line 포인트 근접 등) — 가장 가까운 것
39968
+ * 3. hit이 전혀 없으면 데이터가 있는 첫 시리즈로 fallback (기존 동작 호환)
39969
+ *
39970
+ * 과거에는 "같은 라벨 위에서 값이 가장 큰 시리즈"를 돌려주는 max-value 덮어쓰기 방식이었으나,
39971
+ * bar + line combo 차트에서 작은 bar를 클릭해도 큰 값의 line이 선택되는 버그의 원인이었다.
39972
+ * 이번 수정으로 사용자가 실제로 가리킨 시리즈(hit)가 선택되도록 바뀐다.
39973
+ *
39964
39974
  * @param {array} offset position x and y
39965
39975
  * @param {boolean} useApproximate if it's true. it'll look for closed item on mouse position
39966
39976
  * @param {number} dataIndex selected data index
39967
39977
  * @param {boolean} useSelectLabelOrItem used to display select label/item at tooltip location
39968
39978
  *
39969
- * @returns {object} clicked item information
39979
+ * @returns {object} hit item information
39970
39980
  */
39971
- getItemByPosition: function getItemByPosition(offset) {
39972
- var _maxValue;
39981
+ getHitItemByPosition: function getHitItemByPosition(offset) {
39982
+ var _ref4;
39973
39983
 
39974
39984
  var useApproximate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
39975
39985
  var dataIndex = arguments.length > 2 ? arguments[2] : undefined;
39976
39986
  var useSelectLabelOrItem = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
39977
39987
  var seriesIDs = Object.keys(this.seriesList);
39978
- var isHorizontal = !!this.options.horizontal;
39979
- var maxType = null;
39980
- var maxLabel = null;
39981
- var maxValuePos = null;
39982
- var maxValue = null;
39983
- var maxSeriesID = '';
39988
+ var isHorizontal = !!this.options.horizontal; // hit 기반 결과 (최우선)
39989
+
39990
+ var hitType = null;
39991
+ var hitLabel = null;
39992
+ var hitValuePos = null;
39993
+ var hitValue = null;
39994
+ var hitSeriesID = '';
39995
+ var hitDataIndex = null;
39996
+ var hitDistance = Infinity;
39997
+ var hasDirectHit = false; // fallback: hit이 전혀 없을 때 사용할 "데이터 있는 첫 시리즈" 정보
39998
+
39999
+ var fallbackType = null;
40000
+ var fallbackLabel = null;
40001
+ var fallbackValuePos = null;
40002
+ var fallbackValue = null;
40003
+ var fallbackSeriesID = '';
40004
+ var fallbackDataIndex = null;
39984
40005
  var acc = 0;
39985
40006
  var useStack = false;
39986
- var maxIndex = null;
39987
40007
 
39988
40008
  for (var ix = 0; ix < seriesIDs.length; ix++) {
39989
40009
  var seriesID = seriesIDs[ix];
@@ -39997,12 +40017,13 @@ var modules = {
39997
40017
 
39998
40018
  if (data) {
39999
40019
  if (helpers_util.isPieType(item.type)) {
40000
- maxLabel = seriesID;
40001
- maxSeriesID = seriesID;
40002
- maxValuePos = (data.ea - data.sa) / 2;
40003
- maxValue = data.o;
40004
- maxIndex = data.index;
40005
- maxType = item.type;
40020
+ // pie 차트는 hit detection 체계가 달라 기존 동작 유지 (단일 pie 시리즈가 일반적)
40021
+ hitType = item.type;
40022
+ hitLabel = seriesID;
40023
+ hitSeriesID = seriesID;
40024
+ hitValuePos = (data.ea - data.sa) / 2;
40025
+ hitValue = data.o;
40026
+ hitDataIndex = data.index;
40006
40027
  } else {
40007
40028
  var ldata = isHorizontal ? data.y : data.x;
40008
40029
  var lp = isHorizontal ? data.yp : data.xp;
@@ -40015,24 +40036,48 @@ var modules = {
40015
40036
  useStack = true;
40016
40037
  } else {
40017
40038
  acc += data.y;
40018
- }
40039
+ } // fallback 기록: 데이터가 있는 첫 시리즈를 저장
40040
+
40041
+
40042
+ if (fallbackSeriesID === '') {
40043
+ fallbackType = series.type;
40044
+ fallbackLabel = ldata;
40045
+ fallbackValuePos = lp;
40046
+ fallbackValue = g;
40047
+ fallbackSeriesID = seriesID;
40048
+ fallbackDataIndex = index;
40049
+ } // hit 기반 선택: item.hit이 true이고 유효한 좌표가 있을 때만 고려
40050
+
40051
+
40052
+ if (item.hit && data.xp !== undefined && data.yp !== undefined) {
40053
+ var distance = Math.pow(data.xp - offset[0], 2) + Math.pow(data.yp - offset[1], 2);
40054
+
40055
+ if (item.directHit) {
40056
+ // 직접 박스 히트는 최우선. 여러 개이면 가장 가까운 것.
40057
+ if (!hasDirectHit || distance < hitDistance) {
40058
+ hitDistance = distance;
40059
+ hitType = series.type;
40060
+ hitLabel = ldata;
40061
+ hitValuePos = lp;
40062
+ hitValue = g;
40063
+ hitSeriesID = seriesID;
40064
+ hitDataIndex = index;
40065
+ }
40019
40066
 
40020
- if (maxType === 'bar' && useStack) {
40021
- if (item.hit) {
40022
- maxValue = g;
40023
- maxSeriesID = seriesID;
40024
- maxIndex = index;
40025
- maxLabel = ldata;
40026
- maxValuePos = lp;
40027
- maxType = series.type;
40067
+ hasDirectHit = true;
40068
+ } else if (!hasDirectHit) {
40069
+ // directHit가 없을 때만 일반 hit 거리 비교 참여
40070
+ // (라인 근접 히트가 박스 직접 히트를 이기지 못하도록)
40071
+ if (distance < hitDistance) {
40072
+ hitDistance = distance;
40073
+ hitType = series.type;
40074
+ hitLabel = ldata;
40075
+ hitValuePos = lp;
40076
+ hitValue = g;
40077
+ hitSeriesID = seriesID;
40078
+ hitDataIndex = index;
40079
+ }
40028
40080
  }
40029
- } else if (maxValue === null || maxValue <= g) {
40030
- maxValue = g;
40031
- maxSeriesID = seriesID;
40032
- maxLabel = ldata;
40033
- maxValuePos = lp;
40034
- maxIndex = index;
40035
- maxType = series.type;
40036
40081
  }
40037
40082
  }
40038
40083
  }
@@ -40040,22 +40085,23 @@ var modules = {
40040
40085
  }
40041
40086
  }
40042
40087
 
40088
+ var hasHit = hitSeriesID !== '';
40043
40089
  return {
40044
- type: maxType,
40045
- label: maxLabel,
40046
- pos: maxValuePos,
40047
- value: (_maxValue = maxValue) !== null && _maxValue !== void 0 ? _maxValue : 0,
40048
- sId: maxSeriesID,
40090
+ type: hasHit ? hitType : fallbackType,
40091
+ label: hasHit ? hitLabel : fallbackLabel,
40092
+ pos: hasHit ? hitValuePos : fallbackValuePos,
40093
+ value: (_ref4 = hasHit ? hitValue : fallbackValue) !== null && _ref4 !== void 0 ? _ref4 : 0,
40094
+ sId: hasHit ? hitSeriesID : fallbackSeriesID,
40049
40095
  acc: acc,
40050
40096
  useStack: useStack,
40051
- maxIndex: maxIndex
40097
+ dataIndex: hasHit ? hitDataIndex : fallbackDataIndex
40052
40098
  };
40053
40099
  },
40054
40100
 
40055
40101
  /**
40056
40102
  * @typedef {Object} LabelInfoResult
40057
40103
  * @property {number} labelIndex - 선택된 라벨의 인덱스
40058
- * @property {object} hitInfo - 해당 위치에서의 히트 정보 (getItemByPosition 반환값)
40104
+ * @property {object} hitInfo - 해당 위치에서의 히트 정보 (getHitItemByPosition 반환값)
40059
40105
  */
40060
40106
 
40061
40107
  /**
@@ -40080,9 +40126,9 @@ var modules = {
40080
40126
  };
40081
40127
  var seriesList = this.data.series;
40082
40128
  var pointSize = (_Object$values$sort$ = (_Object$values$sort$2 = Object.values(seriesList).sort(function (a, b) {
40083
- var _ref4, _b$pointSize;
40129
+ var _ref5, _b$pointSize;
40084
40130
 
40085
- return (_ref4 = (_b$pointSize = b.pointSize) !== null && _b$pointSize !== void 0 ? _b$pointSize : 0 - a.pointSize) !== null && _ref4 !== void 0 ? _ref4 : 0;
40131
+ return (_ref5 = (_b$pointSize = b.pointSize) !== null && _b$pointSize !== void 0 ? _b$pointSize : 0 - a.pointSize) !== null && _ref5 !== void 0 ? _ref5 : 0;
40086
40132
  })[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
40087
40133
 
40088
40134
  var _this$options = this.options,
@@ -40114,10 +40160,10 @@ var modules = {
40114
40160
  _scrollbarOpt2$interv = _scrollbarOpt2.interval,
40115
40161
  interval = _scrollbarOpt2$interv === void 0 ? 1 : _scrollbarOpt2$interv;
40116
40162
 
40117
- var _ref5 = range !== null && range !== void 0 ? range : [0, scale.labels.length],
40118
- _ref6 = _slicedToArray(_ref5, 2),
40119
- min = _ref6[0],
40120
- max = _ref6[1];
40163
+ var _ref6 = range !== null && range !== void 0 ? range : [0, scale.labels.length],
40164
+ _ref7 = _slicedToArray(_ref6, 2),
40165
+ min = _ref7[0],
40166
+ max = _ref7[1];
40121
40167
 
40122
40168
  var labelCount = Math.floor((+max - +min) / interval) + 1;
40123
40169
  var labelGap = (endPoint - startPoint) / labelCount;
@@ -40143,7 +40189,7 @@ var modules = {
40143
40189
 
40144
40190
  labelIndex = scale.labels.length > _index ? _index : -1;
40145
40191
  } else {
40146
- var _hitInfo$maxIndex;
40192
+ var _hitInfo$dataIndex;
40147
40193
 
40148
40194
  var offsetX;
40149
40195
  var dataIndex;
@@ -40158,8 +40204,8 @@ var modules = {
40158
40204
  offsetX = x;
40159
40205
  }
40160
40206
 
40161
- hitInfo = this.getItemByPosition([offsetX, y], selectLabel === null || selectLabel === void 0 ? void 0 : selectLabel.useApproximateValue, dataIndex, true);
40162
- labelIndex = (_hitInfo$maxIndex = hitInfo.maxIndex) !== null && _hitInfo$maxIndex !== void 0 ? _hitInfo$maxIndex : -1;
40207
+ hitInfo = this.getHitItemByPosition([offsetX, y], selectLabel === null || selectLabel === void 0 ? void 0 : selectLabel.useApproximateValue, dataIndex, true);
40208
+ labelIndex = (_hitInfo$dataIndex = hitInfo.dataIndex) !== null && _hitInfo$dataIndex !== void 0 ? _hitInfo$dataIndex : -1;
40163
40209
  }
40164
40210
 
40165
40211
  return {
@@ -42142,7 +42188,7 @@ var element_line_Line = /*#__PURE__*/function () {
42142
42188
  }, {
42143
42189
  key: "findGraphData",
42144
42190
  value: function findGraphData(offset, isHorizontal, dataIndex, useSelectLabelOrItem) {
42145
- var _item$data;
42191
+ var _this$pointSize, _item$data;
42146
42192
 
42147
42193
  var xp = offset[0];
42148
42194
  var yp = offset[1];
@@ -42154,7 +42200,23 @@ var element_line_Line = /*#__PURE__*/function () {
42154
42200
  var gdata = this.data.filter(function (data) {
42155
42201
  return !helpers_util.isNullOrUndefined(data.x);
42156
42202
  });
42157
- var isLinearInterpolation = this.useLinearInterpolation();
42203
+ var isLinearInterpolation = this.useLinearInterpolation(); // line 포인트 "정확 히트" 판정용 반경.
42204
+ // combo 차트에서 line 포인트 중심을 직격한 경우, 같은 좌표의 bar(directHit)보다
42205
+ // line이 우선되도록 item.directHit = true로 표시한다. 그 외(단순 Y축 근접)는 기존처럼 hit만.
42206
+ // 포인트 반지름에 기본 포인트 크기(LINE_OPTION.pointSize)만큼의 클릭 여유 마진을 더하고,
42207
+ // 시각적으로 하이라이트되는 포인트 반경(highlight.maxSize)을 최소 보장값으로 사용한다.
42208
+
42209
+ 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);
42210
+
42211
+ var isLinePointDirectHit = function isLinePointDirectHit(point) {
42212
+ if (!point || point.xp === undefined || point.yp === undefined) {
42213
+ return false;
42214
+ }
42215
+
42216
+ var dx = xp - point.xp;
42217
+ var dy = yp - point.yp;
42218
+ return dx * dx + dy * dy <= directHitRadius * directHitRadius;
42219
+ };
42158
42220
 
42159
42221
  if (gdata !== null && gdata !== void 0 && gdata.length) {
42160
42222
  if (typeof dataIndex === 'number' && this.show) {
@@ -42169,6 +42231,11 @@ var element_line_Line = /*#__PURE__*/function () {
42169
42231
  if (yDist <= directHitThreshold) {
42170
42232
  item.hit = true;
42171
42233
  }
42234
+
42235
+ if (isLinePointDirectHit(point)) {
42236
+ item.hit = true;
42237
+ item.directHit = true;
42238
+ }
42172
42239
  }
42173
42240
  } else if (typeof this.beforeFindItemIndex === 'number' && this.beforeFindItemIndex !== -1 && this.show && useSelectLabelOrItem) {
42174
42241
  item.data = gdata[this.beforeFindItemIndex];
@@ -42317,6 +42384,11 @@ var element_line_Line = /*#__PURE__*/function () {
42317
42384
  if (_yDist <= _directHitThreshold) {
42318
42385
  item.hit = true;
42319
42386
  }
42387
+
42388
+ if (isLinePointDirectHit(_point3)) {
42389
+ item.hit = true;
42390
+ item.directHit = true;
42391
+ }
42320
42392
  }
42321
42393
  }
42322
42394
  }
@@ -43047,17 +43119,16 @@ var element_bar_Bar = /*#__PURE__*/function () {
43047
43119
  this.borderRadius = param.borderRadius;
43048
43120
  this.filteredCount = totalCount;
43049
43121
  var startIndex = truthyNumber(minIndex) ? minIndex : 0;
43050
- var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1; // 스크롤 범위 내에서만 루프 돌림
43122
+ var endIndex = truthyNumber(maxIndex) ? maxIndex : this.data.length - 1;
43123
+ this.visibleStartIndex = startIndex;
43051
43124
 
43052
43125
  for (var i = startIndex; i <= endIndex; i++) {
43053
- var screenIndex = i - startIndex; // 현재 화면상의 위치 인덱스
43054
-
43055
- var item = this.data[i]; // 실제 데이터 인덱스에 해당하는 항목
43126
+ var screenIndex = i - startIndex;
43127
+ var item = this.data[i];
43056
43128
 
43057
43129
  if (item) {
43058
43130
  var _param$selectLabel, _param$selectItem, _param$selectLabel$se, _param$selectLabel2, _param$selectLabel2$s, _param$selectItem$sel, _param$selectItem2;
43059
43131
 
43060
- // 스크롤 offset(minIndex)만큼 보정해서 그리기
43061
43132
  var categoryPoint = isHorizontal ? ysp - cArea * screenIndex - cPad : xsp + cArea * screenIndex + cPad;
43062
43133
 
43063
43134
  if (isHorizontal) {
@@ -43156,11 +43227,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43156
43227
 
43157
43228
  item.h = isHorizontal ? -h : h; // eslint-disable-line
43158
43229
 
43159
- item.index = i; // 실제 데이터 인덱스 (스크롤 offset 포함)
43160
- // 검색(hitInfo) 로직은 this.data[0..filteredCount-1] 범위만 검사하므로,
43161
- // 현재 화면에 그린 항목을 배열 앞쪽으로 매핑해준다.
43162
-
43163
- this.data[screenIndex] = item;
43230
+ item.index = i;
43164
43231
  }
43165
43232
  }
43166
43233
  }
@@ -43246,17 +43313,26 @@ var element_bar_Bar = /*#__PURE__*/function () {
43246
43313
  key: "findGraphData",
43247
43314
  value: function findGraphData(offset, isHorizontal, dataIndex, useIndicatorOnLabel) {
43248
43315
  if (typeof dataIndex === 'number' && this.show && useIndicatorOnLabel) {
43249
- var gdata = this.data;
43316
+ var _this$visibleStartInd, _this$filteredCount;
43317
+
43318
+ var barData = this.data;
43250
43319
  var item = {
43251
43320
  data: null,
43252
43321
  hit: false,
43253
43322
  color: this.color
43254
- };
43323
+ }; // dataIndex를 현재 화면에 보이는 범위로 clamp하여 stale xp/yp 참조 방지
43255
43324
 
43256
- if (gdata[dataIndex]) {
43257
- item.data = gdata[dataIndex];
43258
- item.index = dataIndex;
43259
- item.hit = this.isPointInBar(offset, gdata[dataIndex]);
43325
+ var visStart = (_this$visibleStartInd = this.visibleStartIndex) !== null && _this$visibleStartInd !== void 0 ? _this$visibleStartInd : 0;
43326
+ var visEnd = visStart + ((_this$filteredCount = this.filteredCount) !== null && _this$filteredCount !== void 0 ? _this$filteredCount : barData.length) - 1;
43327
+ var clampedIndex = Math.max(visStart, Math.min(dataIndex, visEnd));
43328
+
43329
+ if (barData[clampedIndex]) {
43330
+ item.data = barData[clampedIndex];
43331
+ item.index = clampedIndex;
43332
+ item.hit = this.isPointInBar(offset, barData[clampedIndex]); // bar 박스 내부 클릭은 "직접 박스 히트"로 표시.
43333
+ // findHitItem에서 line 포인트 근접 히트보다 우선 선택되도록 하기 위함.
43334
+
43335
+ item.directHit = item.hit;
43260
43336
  }
43261
43337
 
43262
43338
  return item;
@@ -43282,7 +43358,7 @@ var element_bar_Bar = /*#__PURE__*/function () {
43282
43358
  }, {
43283
43359
  key: "binarySearchBar",
43284
43360
  value: function binarySearchBar(offset, isHorizontal) {
43285
- var _this$filteredCount;
43361
+ var _this$visibleStartInd2, _this$filteredCount2;
43286
43362
 
43287
43363
  var _offset = _slicedToArray(offset, 2),
43288
43364
  xp = _offset[0],
@@ -43294,9 +43370,10 @@ var element_bar_Bar = /*#__PURE__*/function () {
43294
43370
  color: this.color
43295
43371
  };
43296
43372
  var gdata = this.data;
43297
- var totalCount = (_this$filteredCount = this.filteredCount) !== null && _this$filteredCount !== void 0 ? _this$filteredCount : gdata.length;
43298
- var s = 0;
43299
- var e = totalCount - 1;
43373
+ var startIdx = (_this$visibleStartInd2 = this.visibleStartIndex) !== null && _this$visibleStartInd2 !== void 0 ? _this$visibleStartInd2 : 0;
43374
+ var totalCount = (_this$filteredCount2 = this.filteredCount) !== null && _this$filteredCount2 !== void 0 ? _this$filteredCount2 : gdata.length;
43375
+ var s = startIdx;
43376
+ var e = startIdx + totalCount - 1;
43300
43377
 
43301
43378
  while (s <= e) {
43302
43379
  var m = Math.floor((s + e) / 2);
@@ -43312,7 +43389,9 @@ var element_bar_Bar = /*#__PURE__*/function () {
43312
43389
  if (inRange) {
43313
43390
  item.data = barData;
43314
43391
  item.index = barData.index;
43315
- item.hit = this.isPointInBar(offset, barData);
43392
+ item.hit = this.isPointInBar(offset, barData); // bar 박스 내부 클릭은 "직접 박스 히트"로 표시 (findHitItem 우선순위용).
43393
+
43394
+ item.directHit = item.hit;
43316
43395
  return item;
43317
43396
  }
43318
43397
 
@@ -50203,13 +50282,20 @@ var plugins_scrollbar_module = {
50203
50282
  Object.keys(merged).forEach(function (key) {
50204
50283
  scrollbarOpt[key] = merged[key];
50205
50284
  });
50206
- delete scrollbarOpt.savedPosition;
50285
+
50286
+ if (scrollbarOpt.resetPosition) {
50287
+ var _axisOpt$2, _axisOpt$2$range, _axisOpt$3;
50288
+
50289
+ 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;
50290
+ this.resetScrollbarSavedPositions(dir);
50291
+ }
50207
50292
 
50208
50293
  if (!scrollbarOpt.isInit) {
50209
- var _axisOpt$2, _axisOpt$3, _axisOpt$3$range, _axisOpt$4;
50294
+ var _axisOpt$4, _axisOpt$5, _axisOpt$5$range, _axisOpt$6;
50210
50295
 
50211
- scrollbarOpt.type = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$2 = axisOpt[0]) === null || _axisOpt$2 === void 0 ? void 0 : _axisOpt$2.type;
50212
- 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;
50296
+ scrollbarOpt.type = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$4 = axisOpt[0]) === null || _axisOpt$4 === void 0 ? void 0 : _axisOpt$4.type;
50297
+ 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;
50298
+ this.resetScrollbarSavedPositions(dir);
50213
50299
  this.initScrollbarRange(dir);
50214
50300
  this.createScrollbarLayout(dir);
50215
50301
  this.createScrollbar(dir);
@@ -50272,7 +50358,7 @@ var plugins_scrollbar_module = {
50272
50358
  * @param updateData is update data
50273
50359
  */
50274
50360
  updateScrollbarInfo: function updateScrollbarInfo(dir, updateData) {
50275
- var _newOpt$, _newOpt$$scrollbar, _newOpt$2, _newOpt$0$scrollbar, _newOpt$3, _newOpt$4, _axisOpt$5, _newOpt$0$scrollbar2;
50361
+ var _newOpt$, _newOpt$$scrollbar, _newOpt$2, _newOpt$0$scrollbar, _newOpt$3, _newOpt$4, _axisOpt$7, _newOpt$0$scrollbar2;
50276
50362
 
50277
50363
  var _this$options = this.options,
50278
50364
  axesX = _this$options.axesX,
@@ -50288,23 +50374,21 @@ var plugins_scrollbar_module = {
50288
50374
  }
50289
50375
 
50290
50376
  var axisOpt = dir === 'x' ? this.axesX : this.axesY;
50291
- 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);
50377
+ 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);
50292
50378
 
50293
50379
  if (isUpdateAxesRange || updateData) {
50294
50380
  var _this$options$axesX2, _this$options$axesX2$, _this$options$axesX2$2, _this$options$axesY2, _this$options$axesY2$, _this$options$axesY2$2;
50295
50381
 
50296
50382
  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;
50297
50383
 
50298
- if (isUpdateAxesRange || isResetPosition) {
50384
+ if (isUpdateAxesRange) {
50299
50385
  var _newOpt$5, _newOpt$5$range, _newOpt$6;
50300
50386
 
50301
- 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가 업데이트되면 저장된 스크롤 위치를 초기화
50387
+ 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;
50388
+ }
50302
50389
 
50303
- delete this.scrollbar[dir].savedPosition;
50304
- } else if (updateData) {
50305
- // 데이터가 업데이트되면 저장된 픽셀 위치는 더 이상 유효하지 않으므로 삭제하여
50306
- // 논리적 범위에 따라 다시 계산하도록 합니다.
50307
- delete this.scrollbar[dir].savedPosition;
50390
+ if (isResetPosition || updateData) {
50391
+ this.resetScrollbarSavedPositions(dir);
50308
50392
  }
50309
50393
 
50310
50394
  this.initScrollbarRange(dir);
@@ -50442,17 +50526,32 @@ var plugins_scrollbar_module = {
50442
50526
  var scrollHeight = isXScroll ? scrollbarOpt.height : scrollbarOpt.width;
50443
50527
  var fullSize = isXScroll ? aPos.x2 - aPos.x1 : aPos.y2 - aPos.y1;
50444
50528
  var buttonSize = scrollbarOpt.showButton ? scrollHeight : 0;
50445
- var trackSize = fullSize - buttonSize * 2; // 현재 위치를 보존해야 하는 경우 기존 위치를 저장
50529
+ var trackSize = fullSize - buttonSize * 2;
50530
+ var thumbSize = this.getScrollbarThumbSize(dir, trackSize); // 비율로 저장된 위치가 있으면 새 track 크기에 맞게 복원
50446
50531
 
50447
- var savedThumbPosition = null;
50532
+ if (preservePosition && scrollbarOpt.savedPositionRatio !== undefined) {
50533
+ var maxPosition = Math.max(0, trackSize - thumbSize.size);
50534
+
50535
+ if (scrollbarOpt.savedAtStart) {
50536
+ thumbSize.position = 0;
50537
+ } else if (scrollbarOpt.savedAtEnd) {
50538
+ thumbSize.position = maxPosition;
50539
+ } else {
50540
+ thumbSize.position = Math.min(scrollbarOpt.savedPositionRatio * trackSize, maxPosition);
50541
+ }
50542
+ } // 위치를 비율 및 처음/끝 고정 여부로 저장
50543
+ // currentMaxPosition === 0 (thumbSize >= trackSize) 인 경우 저장하지 않음
50544
+ // → trackSize가 다시 커졌을 때 이전 savedAtEnd/savedAtStart/savedPositionRatio 상태를 유지
50448
50545
 
50449
- if (preservePosition && scrollbarOpt.savedPosition !== undefined) {
50450
- savedThumbPosition = scrollbarOpt.savedPosition;
50451
- }
50452
50546
 
50453
- var thumbSize = this.getScrollbarThumbSize(dir, trackSize, savedThumbPosition); // 새로 계산된 위치를 저장
50547
+ var currentMaxPosition = Math.max(0, trackSize - thumbSize.size);
50548
+
50549
+ if (currentMaxPosition > 0) {
50550
+ scrollbarOpt.savedPositionRatio = thumbSize.position / trackSize;
50551
+ scrollbarOpt.savedAtStart = thumbSize.position <= 0;
50552
+ scrollbarOpt.savedAtEnd = thumbSize.position >= currentMaxPosition;
50553
+ }
50454
50554
 
50455
- scrollbarOpt.savedPosition = thumbSize.position;
50456
50555
  var scrollbarStyle = 'display: block;';
50457
50556
  var scrollbarTrackStyle;
50458
50557
  var scrollbarThumbStyle;
@@ -50519,9 +50618,8 @@ var plugins_scrollbar_module = {
50519
50618
  * get scrollbar thumb size
50520
50619
  * @param dir axis direction ('x' | 'y')
50521
50620
  * @param trackSize scrollbar track size
50522
- * @param savedThumbPosition 기존 위치를 보존해야 하는 경우 저장된 위치
50523
50621
  */
50524
- getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize, savedThumbPosition) {
50622
+ getScrollbarThumbSize: function getScrollbarThumbSize(dir, trackSize) {
50525
50623
  var scrollbarOpt = this.scrollbar[dir];
50526
50624
 
50527
50625
  var _scrollbarOpt$range3 = _slicedToArray(scrollbarOpt.range, 2),
@@ -50552,9 +50650,9 @@ var plugins_scrollbar_module = {
50552
50650
  var _range = +max - +min;
50553
50651
 
50554
50652
  if (axesType === 'time') {
50555
- var _axisOpt$6, _this$labelRange$dir, _this$labelRange$dir$;
50653
+ var _axisOpt$8, _this$labelRange$dir, _this$labelRange$dir$;
50556
50654
 
50557
- interval = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$6 = axisOpt[0]) === null || _axisOpt$6 === void 0 ? void 0 : _axisOpt$6.getInterval({
50655
+ interval = axisOpt === null || axisOpt === void 0 ? void 0 : (_axisOpt$8 = axisOpt[0]) === null || _axisOpt$8 === void 0 ? void 0 : _axisOpt$8.getInterval({
50558
50656
  minValue: minMax.min,
50559
50657
  maxValue: minMax.max,
50560
50658
  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
@@ -50574,12 +50672,7 @@ var plugins_scrollbar_module = {
50574
50672
 
50575
50673
  scrollbarOpt.startValue = startValue;
50576
50674
  scrollbarOpt.steps = steps;
50577
- scrollbarOpt.interval = interval; // 기존 위치를 보존해야 하는 경우 저장된 위치를 사용
50578
-
50579
- if (savedThumbPosition !== null) {
50580
- thumbPosition = savedThumbPosition;
50581
- }
50582
-
50675
+ scrollbarOpt.interval = interval;
50583
50676
  return {
50584
50677
  size: thumbSize,
50585
50678
  position: thumbPosition
@@ -50646,18 +50739,35 @@ var plugins_scrollbar_module = {
50646
50739
  if (!isOutOfRange) {
50647
50740
  scrollbarOpt.range = [minValue, maxValue]; // 사용자가 스크롤할 때는 저장된 위치를 초기화
50648
50741
 
50649
- delete scrollbarOpt.savedPosition;
50742
+ this.resetScrollbarSavedPositions(dir);
50650
50743
  this.update({
50651
50744
  updateSeries: false,
50652
50745
  updateSelTip: {
50653
50746
  update: false,
50654
50747
  keepDomain: false
50655
50748
  },
50656
- lightUpdate: minValue > 1
50749
+ lightUpdate: minValue > 1,
50750
+ updateByScrollbar: true
50657
50751
  });
50658
50752
  }
50659
50753
  },
50660
50754
 
50755
+ /**
50756
+ * reset scrollbar saved positions
50757
+ * @param dir axis direction ('x' | 'y')
50758
+ */
50759
+ resetScrollbarSavedPositions: function resetScrollbarSavedPositions(dir) {
50760
+ var scrollbarOpt = this.scrollbar[dir];
50761
+
50762
+ if (!scrollbarOpt) {
50763
+ return;
50764
+ }
50765
+
50766
+ delete scrollbarOpt.savedPositionRatio;
50767
+ delete scrollbarOpt.savedAtStart;
50768
+ delete scrollbarOpt.savedAtEnd;
50769
+ },
50770
+
50661
50771
  /**
50662
50772
  * create scroll event
50663
50773
  */
@@ -50912,13 +51022,15 @@ var plugins_scrollbar_module = {
50912
51022
 
50913
51023
  this.scrollbar[dir].range = [movedMin, movedMax]; // 사용자가 드래그로 스크롤할 때는 저장된 위치를 초기화
50914
51024
 
50915
- delete this.scrollbar[dir].savedPosition;
51025
+ this.resetScrollbarSavedPositions(dir);
50916
51026
  this.update({
50917
51027
  updateSeries: false,
50918
51028
  updateSelTip: {
50919
51029
  update: false,
50920
51030
  keepDomain: false
50921
- }
51031
+ },
51032
+ lightUpdate: movedMin > 1,
51033
+ updateByScrollbar: true
50922
51034
  });
50923
51035
  },
50924
51036
 
@@ -51788,19 +51900,19 @@ var plugins_interaction_modules = {
51788
51900
  var useSelectSeries = (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.use) && (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.useClick);
51789
51901
 
51790
51902
  var setSelectedItemInfo = function setSelectedItemInfo() {
51791
- var hitInfo = _this.getItemByPosition(offset, false);
51903
+ var hitInfo = _this.getHitItemByPosition(offset, false);
51792
51904
 
51793
51905
  args.label = hitInfo.label;
51794
51906
  args.value = hitInfo.value;
51795
51907
  args.seriesId = hitInfo.sId;
51796
- args.dataIndex = hitInfo.maxIndex;
51908
+ args.dataIndex = hitInfo.dataIndex;
51797
51909
  args.acc = hitInfo.acc;
51798
51910
 
51799
51911
  if (hitInfo !== null && hitInfo !== void 0 && hitInfo.sId) {
51800
51912
  args.selected = {
51801
51913
  eventTarget: 'item',
51802
51914
  seriesId: _this.isDeselectItem(hitInfo) ? null : hitInfo.sId,
51803
- dataIndex: _this.isDeselectItem(hitInfo) ? null : hitInfo.maxIndex
51915
+ dataIndex: _this.isDeselectItem(hitInfo) ? null : hitInfo.dataIndex
51804
51916
  };
51805
51917
  }
51806
51918
  };
@@ -52474,7 +52586,10 @@ var plugins_interaction_modules = {
52474
52586
  var maxv = '';
52475
52587
  var maxg = null;
52476
52588
  var maxSID = null;
52477
- var minDistance = Infinity; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
52589
+ var minDistance = Infinity; // directHit(bar 박스 내부 클릭/hover) 시리즈가 발견되었는지 추적.
52590
+ // 한 번이라도 directHit가 있으면 line의 근접 포인트 히트는 hitId 후보에서 배제된다.
52591
+
52592
+ var hasDirectHit = false; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
52478
52593
 
52479
52594
  var targetDataIndex = this.findClosestDataIndex(offset, sIds);
52480
52595
 
@@ -52550,13 +52665,25 @@ var plugins_interaction_modules = {
52550
52665
  if (maxg === null || maxg <= gdata) {
52551
52666
  maxg = gdata;
52552
52667
  maxSID = sId;
52553
- } // 마우스 위치와의 거리 계산하여 가장 가까운 시리즈 선택
52668
+ } // 마우스 위치와의 거리 계산하여 가장 가까운 시리즈 선택.
52669
+ // directHit(bar 박스 내부)가 하나라도 있으면 그중에서만 선택하고,
52670
+ // 라인의 근접 포인트 히트(item.hit=true, directHit=false)는 hitId 후보에서 배제한다.
52671
+ // bar + line combo 차트에서 작은 bar 클릭 시 큰 값의 line이 잡히던 버그 방지.
52554
52672
 
52555
52673
 
52556
52674
  if (item.hit && item.data.xp !== undefined && item.data.yp !== undefined) {
52557
52675
  var distance = Math.pow(item.data.xp - offset[0], 2) + Math.pow(item.data.yp - offset[1], 2);
52558
52676
 
52559
- if (distance < minDistance) {
52677
+ if (item.directHit) {
52678
+ // directHit는 최우선. 여러 directHit 중에서는 가장 가까운 것 선택.
52679
+ if (!hasDirectHit || distance < minDistance) {
52680
+ minDistance = distance;
52681
+ hitId = sId;
52682
+ }
52683
+
52684
+ hasDirectHit = true;
52685
+ } else if (!hasDirectHit && distance < minDistance) {
52686
+ // directHit가 없을 때만 일반 hit 거리 비교
52560
52687
  minDistance = distance;
52561
52688
  hitId = sId;
52562
52689
  }
@@ -53252,7 +53379,7 @@ var plugins_interaction_modules = {
53252
53379
  isDeselectItem: function isDeselectItem(hitInfo) {
53253
53380
  var _this$defaultSelectIt, _this$defaultSelectIt2;
53254
53381
 
53255
- 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);
53382
+ 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);
53256
53383
  },
53257
53384
 
53258
53385
  /**
@@ -54926,7 +55053,7 @@ var element_tip_modules = {
54926
55053
 
54927
55054
  if (tipType === 'sel') {
54928
55055
  if (hitInfo && hitInfo.label !== null) {
54929
- lastTip.pos = type === 'bar' ? hitInfo.maxIndex : hitInfo.label;
55056
+ lastTip.pos = type === 'bar' ? hitInfo.dataIndex : hitInfo.label;
54930
55057
  ldata = lastTip.pos;
54931
55058
  } else if (lastTip.pos !== null) {
54932
55059
  ldata = lastTip.pos;
@@ -55138,9 +55265,10 @@ var element_tip_modules = {
55138
55265
  interval = scrollbarOpt.interval,
55139
55266
  type = scrollbarOpt.type;
55140
55267
 
55141
- var _range = _slicedToArray(range, 2),
55142
- min = _range[0],
55143
- max = _range[1];
55268
+ var _ref3 = range !== null && range !== void 0 ? range : [],
55269
+ _ref4 = _slicedToArray(_ref3, 2),
55270
+ min = _ref4[0],
55271
+ max = _ref4[1];
55144
55272
 
55145
55273
  if (truthyNumber(min) && truthyNumber(max)) {
55146
55274
  labelCount = Math.floor((+max - +min) / interval) + 1;
@@ -55809,15 +55937,15 @@ var chart_core_EvChart = /*#__PURE__*/function () {
55809
55937
  this.axesRange = this.getAxesRange();
55810
55938
  this.labelOffset = this.getLabelOffset();
55811
55939
  this.labelRange = this.getAxesLabelRange();
55812
- this.axesSteps = this.calculateSteps();
55813
- this.adjustXAndYAxisWidth();
55814
- this.drawAxis(hitInfo);
55815
- this.drawSeries(hitInfo);
55816
55940
 
55817
55941
  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) {
55818
55942
  this.updateScrollbarPosition();
55819
55943
  }
55820
55944
 
55945
+ this.axesSteps = this.calculateSteps();
55946
+ this.adjustXAndYAxisWidth();
55947
+ this.drawAxis(hitInfo);
55948
+ this.drawSeries(hitInfo);
55821
55949
  this.drawTip();
55822
55950
 
55823
55951
  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) {
@@ -56024,10 +56152,10 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56024
56152
  var lastHitInfo = this.lastHitInfo;
56025
56153
  var defaultSelectInfo = this.defaultSelectItemInfo;
56026
56154
 
56027
- if (lastHitInfo !== null && lastHitInfo !== void 0 && lastHitInfo.maxIndex || (lastHitInfo === null || lastHitInfo === void 0 ? void 0 : lastHitInfo.maxIndex) === 0) {
56155
+ if (lastHitInfo !== null && lastHitInfo !== void 0 && lastHitInfo.dataIndex || (lastHitInfo === null || lastHitInfo === void 0 ? void 0 : lastHitInfo.dataIndex) === 0) {
56028
56156
  _selectInfo = {
56029
56157
  seriesID: lastHitInfo.sId,
56030
- dataIndex: lastHitInfo.maxIndex
56158
+ dataIndex: lastHitInfo.dataIndex
56031
56159
  };
56032
56160
  } else if (defaultSelectInfo !== null && defaultSelectInfo !== void 0 && defaultSelectInfo.dataIndex || (defaultSelectInfo === null || defaultSelectInfo === void 0 ? void 0 : defaultSelectInfo.dataIndex) === 0) {
56033
56161
  _selectInfo = _objectSpread2({}, defaultSelectInfo);
@@ -56476,14 +56604,20 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56476
56604
 
56477
56605
  }, {
56478
56606
  key: "updateScrollbar",
56479
- value: function updateScrollbar(updateData) {
56480
- 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;
56607
+ value: function updateScrollbar(updateData, updateByScrollbar) {
56608
+ 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;
56609
+
56610
+ var isForceUpdate = updateByScrollbar || updateData;
56611
+ 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;
56612
+ 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;
56613
+ 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;
56614
+ 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;
56481
56615
 
56482
- 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) {
56616
+ if (xUse !== prevXUse || xUse || isForceUpdate && xUse) {
56483
56617
  this.updateScrollbarInfo('x', updateData);
56484
56618
  }
56485
56619
 
56486
- 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) {
56620
+ if (yUse !== prevYUse || yUse || isForceUpdate && yUse) {
56487
56621
  this.updateScrollbarInfo('y', updateData);
56488
56622
  }
56489
56623
  }
@@ -56509,13 +56643,14 @@ var chart_core_EvChart = /*#__PURE__*/function () {
56509
56643
  updateLegend = updateInfo.updateLegend,
56510
56644
  updateData = updateInfo.updateData,
56511
56645
  updateTooltip = updateInfo.updateTooltip,
56512
- lightUpdate = updateInfo.lightUpdate;
56646
+ lightUpdate = updateInfo.lightUpdate,
56647
+ updateByScrollbar = updateInfo.updateByScrollbar;
56513
56648
 
56514
56649
  if (!this.isInit) {
56515
56650
  return;
56516
56651
  }
56517
56652
 
56518
- this.updateScrollbar(updateData);
56653
+ this.updateScrollbar(updateData, updateByScrollbar);
56519
56654
  this.resetProps();
56520
56655
  this.updateSeries = updateSeries;
56521
56656