evui 3.4.156 → 3.4.157
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.common.js +509 -78
- package/dist/evui.common.js.map +1 -1
- package/dist/evui.umd.js +509 -78
- package/dist/evui.umd.js.map +1 -1
- package/dist/evui.umd.min.js +1 -1
- package/dist/evui.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chart/helpers/helpers.util.js +23 -0
- package/src/components/chart/model/model.store.js +93 -10
- package/src/components/chart/plugins/plugins.interaction.js +62 -24
- package/src/components/chart/plugins/plugins.scrollbar.js +9 -1
- package/src/components/chart/scale/scale.step.js +26 -2
package/dist/evui.common.js
CHANGED
|
@@ -362,6 +362,81 @@ if(content.locals) module.exports = content.locals;
|
|
|
362
362
|
var add = __webpack_require__("499e").default
|
|
363
363
|
var update = add("5a9ac64a", content, true, {"sourceMap":false,"shadowMode":false});
|
|
364
364
|
|
|
365
|
+
/***/ }),
|
|
366
|
+
|
|
367
|
+
/***/ "10d1":
|
|
368
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
369
|
+
|
|
370
|
+
"use strict";
|
|
371
|
+
|
|
372
|
+
var global = __webpack_require__("da84");
|
|
373
|
+
var redefineAll = __webpack_require__("e2cc");
|
|
374
|
+
var InternalMetadataModule = __webpack_require__("f183");
|
|
375
|
+
var collection = __webpack_require__("6d61");
|
|
376
|
+
var collectionWeak = __webpack_require__("acac");
|
|
377
|
+
var isObject = __webpack_require__("861d");
|
|
378
|
+
var enforceIternalState = __webpack_require__("69f3").enforce;
|
|
379
|
+
var NATIVE_WEAK_MAP = __webpack_require__("7f9a");
|
|
380
|
+
|
|
381
|
+
var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;
|
|
382
|
+
var isExtensible = Object.isExtensible;
|
|
383
|
+
var InternalWeakMap;
|
|
384
|
+
|
|
385
|
+
var wrapper = function (init) {
|
|
386
|
+
return function WeakMap() {
|
|
387
|
+
return init(this, arguments.length ? arguments[0] : undefined);
|
|
388
|
+
};
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
// `WeakMap` constructor
|
|
392
|
+
// https://tc39.github.io/ecma262/#sec-weakmap-constructor
|
|
393
|
+
var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);
|
|
394
|
+
|
|
395
|
+
// IE11 WeakMap frozen keys fix
|
|
396
|
+
// We can't use feature detection because it crash some old IE builds
|
|
397
|
+
// https://github.com/zloirock/core-js/issues/485
|
|
398
|
+
if (NATIVE_WEAK_MAP && IS_IE11) {
|
|
399
|
+
InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);
|
|
400
|
+
InternalMetadataModule.REQUIRED = true;
|
|
401
|
+
var WeakMapPrototype = $WeakMap.prototype;
|
|
402
|
+
var nativeDelete = WeakMapPrototype['delete'];
|
|
403
|
+
var nativeHas = WeakMapPrototype.has;
|
|
404
|
+
var nativeGet = WeakMapPrototype.get;
|
|
405
|
+
var nativeSet = WeakMapPrototype.set;
|
|
406
|
+
redefineAll(WeakMapPrototype, {
|
|
407
|
+
'delete': function (key) {
|
|
408
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
409
|
+
var state = enforceIternalState(this);
|
|
410
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
411
|
+
return nativeDelete.call(this, key) || state.frozen['delete'](key);
|
|
412
|
+
} return nativeDelete.call(this, key);
|
|
413
|
+
},
|
|
414
|
+
has: function has(key) {
|
|
415
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
416
|
+
var state = enforceIternalState(this);
|
|
417
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
418
|
+
return nativeHas.call(this, key) || state.frozen.has(key);
|
|
419
|
+
} return nativeHas.call(this, key);
|
|
420
|
+
},
|
|
421
|
+
get: function get(key) {
|
|
422
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
423
|
+
var state = enforceIternalState(this);
|
|
424
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
425
|
+
return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);
|
|
426
|
+
} return nativeGet.call(this, key);
|
|
427
|
+
},
|
|
428
|
+
set: function set(key, value) {
|
|
429
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
430
|
+
var state = enforceIternalState(this);
|
|
431
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
432
|
+
nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);
|
|
433
|
+
} else nativeSet.call(this, key, value);
|
|
434
|
+
return this;
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
|
|
365
440
|
/***/ }),
|
|
366
441
|
|
|
367
442
|
/***/ "1148":
|
|
@@ -11235,7 +11310,7 @@ $({ target: 'Number', stat: true }, {
|
|
|
11235
11310
|
/***/ "9224":
|
|
11236
11311
|
/***/ (function(module) {
|
|
11237
11312
|
|
|
11238
|
-
module.exports = JSON.parse("{\"a\":\"3.4.
|
|
11313
|
+
module.exports = JSON.parse("{\"a\":\"3.4.157\"}");
|
|
11239
11314
|
|
|
11240
11315
|
/***/ }),
|
|
11241
11316
|
|
|
@@ -13076,6 +13151,135 @@ $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
|
|
|
13076
13151
|
});
|
|
13077
13152
|
|
|
13078
13153
|
|
|
13154
|
+
/***/ }),
|
|
13155
|
+
|
|
13156
|
+
/***/ "acac":
|
|
13157
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
13158
|
+
|
|
13159
|
+
"use strict";
|
|
13160
|
+
|
|
13161
|
+
var redefineAll = __webpack_require__("e2cc");
|
|
13162
|
+
var getWeakData = __webpack_require__("f183").getWeakData;
|
|
13163
|
+
var anObject = __webpack_require__("825a");
|
|
13164
|
+
var isObject = __webpack_require__("861d");
|
|
13165
|
+
var anInstance = __webpack_require__("19aa");
|
|
13166
|
+
var iterate = __webpack_require__("2266");
|
|
13167
|
+
var ArrayIterationModule = __webpack_require__("b727");
|
|
13168
|
+
var $has = __webpack_require__("5135");
|
|
13169
|
+
var InternalStateModule = __webpack_require__("69f3");
|
|
13170
|
+
|
|
13171
|
+
var setInternalState = InternalStateModule.set;
|
|
13172
|
+
var internalStateGetterFor = InternalStateModule.getterFor;
|
|
13173
|
+
var find = ArrayIterationModule.find;
|
|
13174
|
+
var findIndex = ArrayIterationModule.findIndex;
|
|
13175
|
+
var id = 0;
|
|
13176
|
+
|
|
13177
|
+
// fallback for uncaught frozen keys
|
|
13178
|
+
var uncaughtFrozenStore = function (store) {
|
|
13179
|
+
return store.frozen || (store.frozen = new UncaughtFrozenStore());
|
|
13180
|
+
};
|
|
13181
|
+
|
|
13182
|
+
var UncaughtFrozenStore = function () {
|
|
13183
|
+
this.entries = [];
|
|
13184
|
+
};
|
|
13185
|
+
|
|
13186
|
+
var findUncaughtFrozen = function (store, key) {
|
|
13187
|
+
return find(store.entries, function (it) {
|
|
13188
|
+
return it[0] === key;
|
|
13189
|
+
});
|
|
13190
|
+
};
|
|
13191
|
+
|
|
13192
|
+
UncaughtFrozenStore.prototype = {
|
|
13193
|
+
get: function (key) {
|
|
13194
|
+
var entry = findUncaughtFrozen(this, key);
|
|
13195
|
+
if (entry) return entry[1];
|
|
13196
|
+
},
|
|
13197
|
+
has: function (key) {
|
|
13198
|
+
return !!findUncaughtFrozen(this, key);
|
|
13199
|
+
},
|
|
13200
|
+
set: function (key, value) {
|
|
13201
|
+
var entry = findUncaughtFrozen(this, key);
|
|
13202
|
+
if (entry) entry[1] = value;
|
|
13203
|
+
else this.entries.push([key, value]);
|
|
13204
|
+
},
|
|
13205
|
+
'delete': function (key) {
|
|
13206
|
+
var index = findIndex(this.entries, function (it) {
|
|
13207
|
+
return it[0] === key;
|
|
13208
|
+
});
|
|
13209
|
+
if (~index) this.entries.splice(index, 1);
|
|
13210
|
+
return !!~index;
|
|
13211
|
+
}
|
|
13212
|
+
};
|
|
13213
|
+
|
|
13214
|
+
module.exports = {
|
|
13215
|
+
getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
|
|
13216
|
+
var C = wrapper(function (that, iterable) {
|
|
13217
|
+
anInstance(that, C, CONSTRUCTOR_NAME);
|
|
13218
|
+
setInternalState(that, {
|
|
13219
|
+
type: CONSTRUCTOR_NAME,
|
|
13220
|
+
id: id++,
|
|
13221
|
+
frozen: undefined
|
|
13222
|
+
});
|
|
13223
|
+
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
|
13224
|
+
});
|
|
13225
|
+
|
|
13226
|
+
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
|
|
13227
|
+
|
|
13228
|
+
var define = function (that, key, value) {
|
|
13229
|
+
var state = getInternalState(that);
|
|
13230
|
+
var data = getWeakData(anObject(key), true);
|
|
13231
|
+
if (data === true) uncaughtFrozenStore(state).set(key, value);
|
|
13232
|
+
else data[state.id] = value;
|
|
13233
|
+
return that;
|
|
13234
|
+
};
|
|
13235
|
+
|
|
13236
|
+
redefineAll(C.prototype, {
|
|
13237
|
+
// 23.3.3.2 WeakMap.prototype.delete(key)
|
|
13238
|
+
// 23.4.3.3 WeakSet.prototype.delete(value)
|
|
13239
|
+
'delete': function (key) {
|
|
13240
|
+
var state = getInternalState(this);
|
|
13241
|
+
if (!isObject(key)) return false;
|
|
13242
|
+
var data = getWeakData(key);
|
|
13243
|
+
if (data === true) return uncaughtFrozenStore(state)['delete'](key);
|
|
13244
|
+
return data && $has(data, state.id) && delete data[state.id];
|
|
13245
|
+
},
|
|
13246
|
+
// 23.3.3.4 WeakMap.prototype.has(key)
|
|
13247
|
+
// 23.4.3.4 WeakSet.prototype.has(value)
|
|
13248
|
+
has: function has(key) {
|
|
13249
|
+
var state = getInternalState(this);
|
|
13250
|
+
if (!isObject(key)) return false;
|
|
13251
|
+
var data = getWeakData(key);
|
|
13252
|
+
if (data === true) return uncaughtFrozenStore(state).has(key);
|
|
13253
|
+
return data && $has(data, state.id);
|
|
13254
|
+
}
|
|
13255
|
+
});
|
|
13256
|
+
|
|
13257
|
+
redefineAll(C.prototype, IS_MAP ? {
|
|
13258
|
+
// 23.3.3.3 WeakMap.prototype.get(key)
|
|
13259
|
+
get: function get(key) {
|
|
13260
|
+
var state = getInternalState(this);
|
|
13261
|
+
if (isObject(key)) {
|
|
13262
|
+
var data = getWeakData(key);
|
|
13263
|
+
if (data === true) return uncaughtFrozenStore(state).get(key);
|
|
13264
|
+
return data ? data[state.id] : undefined;
|
|
13265
|
+
}
|
|
13266
|
+
},
|
|
13267
|
+
// 23.3.3.5 WeakMap.prototype.set(key, value)
|
|
13268
|
+
set: function set(key, value) {
|
|
13269
|
+
return define(this, key, value);
|
|
13270
|
+
}
|
|
13271
|
+
} : {
|
|
13272
|
+
// 23.4.3.1 WeakSet.prototype.add(value)
|
|
13273
|
+
add: function add(value) {
|
|
13274
|
+
return define(this, value, true);
|
|
13275
|
+
}
|
|
13276
|
+
});
|
|
13277
|
+
|
|
13278
|
+
return C;
|
|
13279
|
+
}
|
|
13280
|
+
};
|
|
13281
|
+
|
|
13282
|
+
|
|
13079
13283
|
/***/ }),
|
|
13080
13284
|
|
|
13081
13285
|
/***/ "ad6d":
|
|
@@ -22274,9 +22478,9 @@ var _Set_Set = _getNative(_root["a" /* default */], 'Set');
|
|
|
22274
22478
|
|
|
22275
22479
|
|
|
22276
22480
|
/* Built-in method references that are verified to be native. */
|
|
22277
|
-
var
|
|
22481
|
+
var _WeakMap_WeakMap = _getNative(_root["a" /* default */], 'WeakMap');
|
|
22278
22482
|
|
|
22279
|
-
/* harmony default export */ var _WeakMap = (
|
|
22483
|
+
/* harmony default export */ var _WeakMap = (_WeakMap_WeakMap);
|
|
22280
22484
|
|
|
22281
22485
|
// CONCATENATED MODULE: ./node_modules/lodash-es/_getTag.js
|
|
22282
22486
|
|
|
@@ -38937,6 +39141,30 @@ var textMeasureCtx = textMeasureCanvas.getContext('2d');
|
|
|
38937
39141
|
}
|
|
38938
39142
|
|
|
38939
39143
|
return "".concat(color, "80");
|
|
39144
|
+
},
|
|
39145
|
+
|
|
39146
|
+
/**
|
|
39147
|
+
* 클릭 좌표(cx, cy)에서 데이터 포인트까지의 거리²를 반환한다.
|
|
39148
|
+
* w/h 가 있으면 박스 외벽까지의 거리(내부면 0), 없으면 포인트까지의 유클리드 거리².
|
|
39149
|
+
* @param {object} data - 데이터 포인트 (xp, yp, w?, h?)
|
|
39150
|
+
* @param {number} cx - 클릭 x 좌표
|
|
39151
|
+
* @param {number} cy - 클릭 y 좌표
|
|
39152
|
+
* @returns {number}
|
|
39153
|
+
*/
|
|
39154
|
+
calcBoxDistance: function calcBoxDistance(data, cx, cy) {
|
|
39155
|
+
if (data.w !== null && data.w !== undefined && data.h !== null && data.h !== undefined) {
|
|
39156
|
+
var sx = data.xp;
|
|
39157
|
+
var sy = data.yp;
|
|
39158
|
+
var xMin = Math.min(sx, sx + data.w);
|
|
39159
|
+
var xMax = Math.max(sx, sx + data.w);
|
|
39160
|
+
var yMin = Math.min(sy, sy + data.h);
|
|
39161
|
+
var yMax = Math.max(sy, sy + data.h);
|
|
39162
|
+
var dx = Math.max(0, xMin - cx, cx - xMax);
|
|
39163
|
+
var dy = Math.max(0, yMin - cy, cy - yMax);
|
|
39164
|
+
return dx * dx + dy * dy;
|
|
39165
|
+
}
|
|
39166
|
+
|
|
39167
|
+
return Math.pow(data.xp - cx, 2) + Math.pow(data.yp - cy, 2);
|
|
38940
39168
|
}
|
|
38941
39169
|
});
|
|
38942
39170
|
// CONCATENATED MODULE: ./src/components/chart/model/model.store.js
|
|
@@ -38963,6 +39191,8 @@ var textMeasureCtx = textMeasureCanvas.getContext('2d');
|
|
|
38963
39191
|
|
|
38964
39192
|
|
|
38965
39193
|
|
|
39194
|
+
|
|
39195
|
+
|
|
38966
39196
|
|
|
38967
39197
|
|
|
38968
39198
|
|
|
@@ -39956,27 +40186,86 @@ var modules = {
|
|
|
39956
40186
|
* 선택 우선순위:
|
|
39957
40187
|
* 1. directHit (bar 박스 내부 클릭) — 가장 가까운 것
|
|
39958
40188
|
* 2. hit (line 포인트 근접 등) — 가장 가까운 것
|
|
39959
|
-
* 3. hit
|
|
39960
|
-
*
|
|
39961
|
-
* 과거에는 "같은 라벨 위에서 값이 가장 큰 시리즈"를 돌려주는 max-value 덮어쓰기 방식이었으나,
|
|
39962
|
-
* bar + line combo 차트에서 작은 bar를 클릭해도 큰 값의 line이 선택되는 버그의 원인이었다.
|
|
39963
|
-
* 이번 수정으로 사용자가 실제로 가리킨 시리즈(hit)가 선택되도록 바뀐다.
|
|
40189
|
+
* 3. hit 없으면 클릭 좌표에 가장 가까운 시리즈로 fallback (distance 기반)
|
|
39964
40190
|
*
|
|
39965
40191
|
* @param {array} offset position x and y
|
|
39966
40192
|
* @param {boolean} useApproximate if it's true. it'll look for closed item on mouse position
|
|
39967
40193
|
* @param {number} dataIndex selected data index
|
|
39968
40194
|
* @param {boolean} useSelectLabelOrItem used to display select label/item at tooltip location
|
|
40195
|
+
* @param {boolean} disableNullLabelSnap true 이면 all-null 라벨도 그대로 반환 (click/dblclick 용)
|
|
39969
40196
|
*
|
|
39970
40197
|
* @returns {object} hit item information
|
|
39971
40198
|
*/
|
|
39972
40199
|
getHitItemByPosition: function getHitItemByPosition(offset) {
|
|
39973
|
-
var
|
|
40200
|
+
var _this8 = this,
|
|
40201
|
+
_ref4;
|
|
39974
40202
|
|
|
39975
40203
|
var useApproximate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
39976
40204
|
var dataIndex = arguments.length > 2 ? arguments[2] : undefined;
|
|
39977
40205
|
var useSelectLabelOrItem = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
40206
|
+
var disableNullLabelSnap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
39978
40207
|
var seriesIDs = Object.keys(this.seriesList);
|
|
39979
|
-
var isHorizontal = !!this.options.horizontal;
|
|
40208
|
+
var isHorizontal = !!this.options.horizontal;
|
|
40209
|
+
|
|
40210
|
+
var _offset = _slicedToArray(offset, 2),
|
|
40211
|
+
cx = _offset[0],
|
|
40212
|
+
cy = _offset[1]; // dataIndex 미지정 시 클릭 좌표에 가장 가까운 valid 라벨 인덱스 결정.
|
|
40213
|
+
// disableNullLabelSnap=true 이면 all-null 라벨도 후보로 인정.
|
|
40214
|
+
|
|
40215
|
+
|
|
40216
|
+
var resolvedDataIndex = dataIndex;
|
|
40217
|
+
|
|
40218
|
+
if (resolvedDataIndex === undefined && !useApproximate) {
|
|
40219
|
+
var refSeriesID = seriesIDs.find(function (sId) {
|
|
40220
|
+
var _s$data;
|
|
40221
|
+
|
|
40222
|
+
var s = _this8.seriesList[sId];
|
|
40223
|
+
return (s === null || s === void 0 ? void 0 : s.show) && (s === null || s === void 0 ? void 0 : (_s$data = s.data) === null || _s$data === void 0 ? void 0 : _s$data.length) > 0;
|
|
40224
|
+
});
|
|
40225
|
+
|
|
40226
|
+
if (refSeriesID) {
|
|
40227
|
+
var refData = this.seriesList[refSeriesID].data;
|
|
40228
|
+
var clickPos = isHorizontal ? offset[1] : offset[0];
|
|
40229
|
+
var nearestDistance = Infinity;
|
|
40230
|
+
var nearestIndex = -1;
|
|
40231
|
+
|
|
40232
|
+
var _loop = function _loop(i) {
|
|
40233
|
+
var hasValidData = disableNullLabelSnap || seriesIDs.some(function (sId) {
|
|
40234
|
+
var _s$data2, _s$data2$i, _s$data3, _s$data3$i;
|
|
40235
|
+
|
|
40236
|
+
var s = _this8.seriesList[sId];
|
|
40237
|
+
return (s === null || s === void 0 ? void 0 : s.show) && ((_s$data2 = s.data) === null || _s$data2 === void 0 ? void 0 : (_s$data2$i = _s$data2[i]) === null || _s$data2$i === void 0 ? void 0 : _s$data2$i.o) !== null && ((_s$data3 = s.data) === null || _s$data3 === void 0 ? void 0 : (_s$data3$i = _s$data3[i]) === null || _s$data3$i === void 0 ? void 0 : _s$data3$i.o) !== undefined;
|
|
40238
|
+
});
|
|
40239
|
+
var p = refData[i];
|
|
40240
|
+
|
|
40241
|
+
if (hasValidData && p) {
|
|
40242
|
+
var labelPos;
|
|
40243
|
+
|
|
40244
|
+
if (isHorizontal) {
|
|
40245
|
+
labelPos = p.h ? p.yp + p.h / 2 : p.yp;
|
|
40246
|
+
} else {
|
|
40247
|
+
labelPos = p.w ? p.xp + p.w / 2 : p.xp;
|
|
40248
|
+
}
|
|
40249
|
+
|
|
40250
|
+
if (labelPos !== null && labelPos !== undefined) {
|
|
40251
|
+
var d = Math.abs(clickPos - labelPos);
|
|
40252
|
+
|
|
40253
|
+
if (d < nearestDistance) {
|
|
40254
|
+
nearestDistance = d;
|
|
40255
|
+
nearestIndex = i;
|
|
40256
|
+
}
|
|
40257
|
+
}
|
|
40258
|
+
}
|
|
40259
|
+
};
|
|
40260
|
+
|
|
40261
|
+
for (var i = 0; i < refData.length; i++) {
|
|
40262
|
+
_loop(i);
|
|
40263
|
+
}
|
|
40264
|
+
|
|
40265
|
+
if (nearestIndex !== -1) resolvedDataIndex = nearestIndex;
|
|
40266
|
+
}
|
|
40267
|
+
} // hit 기반 결과 (최우선)
|
|
40268
|
+
|
|
39980
40269
|
|
|
39981
40270
|
var hitType = null;
|
|
39982
40271
|
var hitLabel = null;
|
|
@@ -39985,7 +40274,7 @@ var modules = {
|
|
|
39985
40274
|
var hitSeriesID = '';
|
|
39986
40275
|
var hitDataIndex = null;
|
|
39987
40276
|
var hitDistance = Infinity;
|
|
39988
|
-
var hasDirectHit = false; //
|
|
40277
|
+
var hasDirectHit = false; // hit 없을 때 쓸 fallback — 값이 있는 시리즈 중 클릭 좌표에 가장 가까운 것.
|
|
39989
40278
|
|
|
39990
40279
|
var fallbackType = null;
|
|
39991
40280
|
var fallbackLabel = null;
|
|
@@ -39993,6 +40282,7 @@ var modules = {
|
|
|
39993
40282
|
var fallbackValue = null;
|
|
39994
40283
|
var fallbackSeriesID = '';
|
|
39995
40284
|
var fallbackDataIndex = null;
|
|
40285
|
+
var fallbackDistance = Infinity;
|
|
39996
40286
|
var acc = 0;
|
|
39997
40287
|
var useStack = false;
|
|
39998
40288
|
|
|
@@ -40002,7 +40292,7 @@ var modules = {
|
|
|
40002
40292
|
var findFn = useApproximate ? series.findApproximateData : series.findGraphData;
|
|
40003
40293
|
|
|
40004
40294
|
if (findFn) {
|
|
40005
|
-
var item = findFn.call(series, offset, isHorizontal,
|
|
40295
|
+
var item = findFn.call(series, offset, isHorizontal, resolvedDataIndex, useSelectLabelOrItem);
|
|
40006
40296
|
var data = item.data;
|
|
40007
40297
|
var index = item.index;
|
|
40008
40298
|
|
|
@@ -40027,10 +40317,27 @@ var modules = {
|
|
|
40027
40317
|
useStack = true;
|
|
40028
40318
|
} else {
|
|
40029
40319
|
acc += data.y;
|
|
40030
|
-
} // fallback
|
|
40320
|
+
} // fallback 후보: 값이 있는 시리즈 중 거리가 가장 가까운 쪽.
|
|
40321
|
+
// 값이 null 인 시리즈는 제외.
|
|
40031
40322
|
|
|
40032
40323
|
|
|
40033
|
-
|
|
40324
|
+
var hasMeaningfulValue = g !== null && g !== undefined && !Number.isNaN(g);
|
|
40325
|
+
var hasCoords = data.xp !== null && data.xp !== undefined && data.yp !== null && data.yp !== undefined;
|
|
40326
|
+
|
|
40327
|
+
if (hasMeaningfulValue && hasCoords) {
|
|
40328
|
+
var distance = helpers_util.calcBoxDistance(data, cx, cy);
|
|
40329
|
+
|
|
40330
|
+
if (fallbackSeriesID === '' || distance < fallbackDistance) {
|
|
40331
|
+
fallbackDistance = distance;
|
|
40332
|
+
fallbackType = series.type;
|
|
40333
|
+
fallbackLabel = ldata;
|
|
40334
|
+
fallbackValuePos = lp;
|
|
40335
|
+
fallbackValue = g;
|
|
40336
|
+
fallbackSeriesID = seriesID;
|
|
40337
|
+
fallbackDataIndex = index;
|
|
40338
|
+
}
|
|
40339
|
+
} else if (hasMeaningfulValue && fallbackSeriesID === '') {
|
|
40340
|
+
// 좌표 없는 예외 케이스 — 첫 후보로만 등록
|
|
40034
40341
|
fallbackType = series.type;
|
|
40035
40342
|
fallbackLabel = ldata;
|
|
40036
40343
|
fallbackValuePos = lp;
|
|
@@ -40041,12 +40348,12 @@ var modules = {
|
|
|
40041
40348
|
|
|
40042
40349
|
|
|
40043
40350
|
if (item.hit && data.xp !== undefined && data.yp !== undefined) {
|
|
40044
|
-
var
|
|
40351
|
+
var _distance = Math.pow(data.xp - offset[0], 2) + Math.pow(data.yp - offset[1], 2);
|
|
40045
40352
|
|
|
40046
40353
|
if (item.directHit) {
|
|
40047
40354
|
// 직접 박스 히트는 최우선. 여러 개이면 가장 가까운 것.
|
|
40048
|
-
if (!hasDirectHit ||
|
|
40049
|
-
hitDistance =
|
|
40355
|
+
if (!hasDirectHit || _distance < hitDistance) {
|
|
40356
|
+
hitDistance = _distance;
|
|
40050
40357
|
hitType = series.type;
|
|
40051
40358
|
hitLabel = ldata;
|
|
40052
40359
|
hitValuePos = lp;
|
|
@@ -40059,8 +40366,8 @@ var modules = {
|
|
|
40059
40366
|
} else if (!hasDirectHit) {
|
|
40060
40367
|
// directHit가 없을 때만 일반 hit 거리 비교 참여
|
|
40061
40368
|
// (라인 근접 히트가 박스 직접 히트를 이기지 못하도록)
|
|
40062
|
-
if (
|
|
40063
|
-
hitDistance =
|
|
40369
|
+
if (_distance < hitDistance) {
|
|
40370
|
+
hitDistance = _distance;
|
|
40064
40371
|
hitType = series.type;
|
|
40065
40372
|
hitLabel = ldata;
|
|
40066
40373
|
hitValuePos = lp;
|
|
@@ -40074,6 +40381,25 @@ var modules = {
|
|
|
40074
40381
|
}
|
|
40075
40382
|
}
|
|
40076
40383
|
}
|
|
40384
|
+
} // all-null 라벨인 경우 label/dataIndex 만 채워 반환 (sId='', value=0).
|
|
40385
|
+
|
|
40386
|
+
|
|
40387
|
+
if (disableNullLabelSnap && hitSeriesID === '' && fallbackSeriesID === '' && resolvedDataIndex !== undefined && resolvedDataIndex >= 0) {
|
|
40388
|
+
var _this$seriesList$_ref;
|
|
40389
|
+
|
|
40390
|
+
var _refSeriesID = seriesIDs.find(function (sId) {
|
|
40391
|
+
var _s$data4;
|
|
40392
|
+
|
|
40393
|
+
var s = _this8.seriesList[sId];
|
|
40394
|
+
return (s === null || s === void 0 ? void 0 : s.show) && (s === null || s === void 0 ? void 0 : (_s$data4 = s.data) === null || _s$data4 === void 0 ? void 0 : _s$data4.length) > 0;
|
|
40395
|
+
});
|
|
40396
|
+
|
|
40397
|
+
var refPoint = _refSeriesID ? (_this$seriesList$_ref = this.seriesList[_refSeriesID].data) === null || _this$seriesList$_ref === void 0 ? void 0 : _this$seriesList$_ref[resolvedDataIndex] : null;
|
|
40398
|
+
|
|
40399
|
+
if (refPoint) {
|
|
40400
|
+
fallbackLabel = isHorizontal ? refPoint.y : refPoint.x;
|
|
40401
|
+
fallbackDataIndex = resolvedDataIndex;
|
|
40402
|
+
}
|
|
40077
40403
|
}
|
|
40078
40404
|
|
|
40079
40405
|
var hasHit = hitSeriesID !== '';
|
|
@@ -40105,9 +40431,9 @@ var modules = {
|
|
|
40105
40431
|
getLabelInfoByPosition: function getLabelInfoByPosition(offset, targetAxis) {
|
|
40106
40432
|
var _Object$values$sort$, _Object$values$sort$2, _scrollbarOpt, _scale, _scale$labels, _scale3, _scale3$labels;
|
|
40107
40433
|
|
|
40108
|
-
var
|
|
40109
|
-
x =
|
|
40110
|
-
y =
|
|
40434
|
+
var _offset2 = _slicedToArray(offset, 2),
|
|
40435
|
+
x = _offset2[0],
|
|
40436
|
+
y = _offset2[1];
|
|
40111
40437
|
|
|
40112
40438
|
var aPos = {
|
|
40113
40439
|
x1: this.chartRect.x1 + this.labelOffset.left,
|
|
@@ -40217,7 +40543,7 @@ var modules = {
|
|
|
40217
40543
|
* @returns {MouseLabelValue} current mouse target label value
|
|
40218
40544
|
*/
|
|
40219
40545
|
getCurMouseLabelVal: function getCurMouseLabelVal(targetAxis, offset, labelIndex) {
|
|
40220
|
-
var
|
|
40546
|
+
var _this9 = this;
|
|
40221
40547
|
|
|
40222
40548
|
var _this$options2 = this.options,
|
|
40223
40549
|
chartType = _this$options2.type,
|
|
@@ -40234,13 +40560,13 @@ var modules = {
|
|
|
40234
40560
|
case 'bar':
|
|
40235
40561
|
case 'line':
|
|
40236
40562
|
{
|
|
40237
|
-
result = horizontal && !isXAxis || !horizontal && isXAxis ?
|
|
40563
|
+
result = horizontal && !isXAxis || !horizontal && isXAxis ? _this9.data.labels[labelIndex] : '';
|
|
40238
40564
|
break;
|
|
40239
40565
|
}
|
|
40240
40566
|
|
|
40241
40567
|
case 'heatMap':
|
|
40242
40568
|
{
|
|
40243
|
-
result =
|
|
40569
|
+
result = _this9.data.labels[targetAxisDirection][labelIndex];
|
|
40244
40570
|
break;
|
|
40245
40571
|
}
|
|
40246
40572
|
|
|
@@ -40254,19 +40580,19 @@ var modules = {
|
|
|
40254
40580
|
var calLabelValUseMousePos = function calLabelValUseMousePos() {
|
|
40255
40581
|
var result = '';
|
|
40256
40582
|
var aPos = {
|
|
40257
|
-
x1:
|
|
40258
|
-
x2:
|
|
40259
|
-
y1:
|
|
40260
|
-
y2:
|
|
40583
|
+
x1: _this9.chartRect.x1 + _this9.labelOffset.left,
|
|
40584
|
+
x2: _this9.chartRect.x2 - _this9.labelOffset.right,
|
|
40585
|
+
y1: _this9.chartRect.y1 + _this9.labelOffset.top,
|
|
40586
|
+
y2: _this9.chartRect.y2 - _this9.labelOffset.bottom
|
|
40261
40587
|
};
|
|
40262
|
-
var
|
|
40263
|
-
steps =
|
|
40264
|
-
labelValInterval =
|
|
40265
|
-
graphMin =
|
|
40266
|
-
var
|
|
40267
|
-
labelWidth =
|
|
40268
|
-
labelHeight =
|
|
40269
|
-
var axes = isXAxis ?
|
|
40588
|
+
var _this9$axesSteps$targ = _this9.axesSteps[targetAxisDirection][0],
|
|
40589
|
+
steps = _this9$axesSteps$targ.steps,
|
|
40590
|
+
labelValInterval = _this9$axesSteps$targ.interval,
|
|
40591
|
+
graphMin = _this9$axesSteps$targ.graphMin;
|
|
40592
|
+
var _this9$axesRange$targ = _this9.axesRange[targetAxisDirection][0].size,
|
|
40593
|
+
labelWidth = _this9$axesRange$targ.width,
|
|
40594
|
+
labelHeight = _this9$axesRange$targ.height;
|
|
40595
|
+
var axes = isXAxis ? _this9.axesX : _this9.axesY;
|
|
40270
40596
|
var axisStartPoint = aPos[axes[0].units.rectStart];
|
|
40271
40597
|
var axisEndPoint = aPos[axes[0].units.rectEnd];
|
|
40272
40598
|
var curMousePosInAxis = Math.abs(offset[isXAxis ? 0 : 1] - axisStartPoint);
|
|
@@ -40304,7 +40630,7 @@ var modules = {
|
|
|
40304
40630
|
* @returns {object} min/max info for all of data
|
|
40305
40631
|
*/
|
|
40306
40632
|
getStoreMinMax: function getStoreMinMax() {
|
|
40307
|
-
var
|
|
40633
|
+
var _this10 = this;
|
|
40308
40634
|
|
|
40309
40635
|
var keys = Object.keys(this.seriesList);
|
|
40310
40636
|
var isHorizontal = this.options.horizontal;
|
|
@@ -40322,7 +40648,7 @@ var modules = {
|
|
|
40322
40648
|
if (keys.length) {
|
|
40323
40649
|
return keys.reduce(function (acc, key) {
|
|
40324
40650
|
var minmax = acc;
|
|
40325
|
-
var series =
|
|
40651
|
+
var series = _this10.seriesList[key];
|
|
40326
40652
|
var smm = series.minMax;
|
|
40327
40653
|
var axisX = series.xAxisIndex;
|
|
40328
40654
|
var axisY = series.yAxisIndex;
|
|
@@ -46860,6 +47186,9 @@ var scale_logarithmic_LogarithmicScale = /*#__PURE__*/function (_Scale) {
|
|
|
46860
47186
|
}(scale_scale);
|
|
46861
47187
|
|
|
46862
47188
|
/* harmony default export */ var scale_logarithmic = (scale_logarithmic_LogarithmicScale);
|
|
47189
|
+
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.weak-map.js
|
|
47190
|
+
var es_weak_map = __webpack_require__("10d1");
|
|
47191
|
+
|
|
46863
47192
|
// CONCATENATED MODULE: ./src/components/chart/scale/scale.step.js
|
|
46864
47193
|
|
|
46865
47194
|
|
|
@@ -46879,6 +47208,16 @@ var scale_logarithmic_LogarithmicScale = /*#__PURE__*/function (_Scale) {
|
|
|
46879
47208
|
|
|
46880
47209
|
|
|
46881
47210
|
|
|
47211
|
+
|
|
47212
|
+
|
|
47213
|
+
|
|
47214
|
+
|
|
47215
|
+
/**
|
|
47216
|
+
* scrollbar 사용 시 스크롤마다 labels 전체를 재순회하지 않도록 결과를 캐시
|
|
47217
|
+
*/
|
|
47218
|
+
|
|
47219
|
+
var stringMinMaxByLabels = new WeakMap();
|
|
47220
|
+
|
|
46882
47221
|
var scale_step_StepScale = /*#__PURE__*/function (_Scale) {
|
|
46883
47222
|
_inherits(StepScale, _Scale);
|
|
46884
47223
|
|
|
@@ -46894,21 +47233,43 @@ var scale_step_StepScale = /*#__PURE__*/function (_Scale) {
|
|
|
46894
47233
|
return _this;
|
|
46895
47234
|
}
|
|
46896
47235
|
/**
|
|
46897
|
-
*
|
|
46898
|
-
*
|
|
46899
|
-
*
|
|
46900
|
-
*
|
|
46901
|
-
*
|
|
46902
|
-
* @
|
|
47236
|
+
* labels 배열의 문자열 min/max를 반환
|
|
47237
|
+
* - alignToGridLine: 전달받은 minMax 그대로 사용
|
|
47238
|
+
* - scrollbar 사용: WeakMap 캐시를 통해 O(n) → O(1)로 단축
|
|
47239
|
+
* - 일반: 매번 getStringMinMax 계산
|
|
47240
|
+
* @param {object} minMax 축 min/max 정보 (alignToGridLine 시 사용)
|
|
47241
|
+
* @param {object} scrollbarOpt 스크롤바 옵션
|
|
47242
|
+
* @returns {{ min: string, max: string }}
|
|
46903
47243
|
*/
|
|
46904
47244
|
|
|
46905
47245
|
|
|
46906
47246
|
_createClass(StepScale, [{
|
|
47247
|
+
key: "getStepMinMax",
|
|
47248
|
+
value: function getStepMinMax(minMax, scrollbarOpt) {
|
|
47249
|
+
if (this.labelStyle.alignToGridLine) return minMax;
|
|
47250
|
+
if (!(scrollbarOpt !== null && scrollbarOpt !== void 0 && scrollbarOpt.use)) return helpers_util.getStringMinMax(this.labels);
|
|
47251
|
+
|
|
47252
|
+
if (!stringMinMaxByLabels.has(this.labels)) {
|
|
47253
|
+
stringMinMaxByLabels.set(this.labels, helpers_util.getStringMinMax(this.labels));
|
|
47254
|
+
}
|
|
47255
|
+
|
|
47256
|
+
return stringMinMaxByLabels.get(this.labels);
|
|
47257
|
+
}
|
|
47258
|
+
/**
|
|
47259
|
+
* Calculate min/max value, label and size information for step scale
|
|
47260
|
+
* @param {object} minMax min/max information (unused on step scale)
|
|
47261
|
+
* @param {object} scrollbarOpt scroll bar option
|
|
47262
|
+
* @param {object} chartRect chart size information
|
|
47263
|
+
*
|
|
47264
|
+
* @returns {object} min/max value and label
|
|
47265
|
+
*/
|
|
47266
|
+
|
|
47267
|
+
}, {
|
|
46907
47268
|
key: "calculateScaleRange",
|
|
46908
47269
|
value: function calculateScaleRange(minMax, scrollbarOpt, chartRect) {
|
|
46909
47270
|
var _this$labelStyle$maxW, _this$labelStyle;
|
|
46910
47271
|
|
|
46911
|
-
var stepMinMax = this.
|
|
47272
|
+
var stepMinMax = this.getStepMinMax(minMax, scrollbarOpt);
|
|
46912
47273
|
var maxValue = stepMinMax.max;
|
|
46913
47274
|
var minValue = stepMinMax.min;
|
|
46914
47275
|
var minIndex = 0;
|
|
@@ -50373,9 +50734,18 @@ var plugins_scrollbar_module = {
|
|
|
50373
50734
|
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;
|
|
50374
50735
|
|
|
50375
50736
|
if (isUpdateAxesRange) {
|
|
50376
|
-
var _newOpt$5
|
|
50737
|
+
var _newOpt$5;
|
|
50377
50738
|
|
|
50378
|
-
|
|
50739
|
+
var newOptRange = newOpt === null || newOpt === void 0 ? void 0 : (_newOpt$5 = newOpt[0]) === null || _newOpt$5 === void 0 ? void 0 : _newOpt$5.range;
|
|
50740
|
+
var currentRange = this.scrollbar[dir].range;
|
|
50741
|
+
|
|
50742
|
+
if (!isResetPosition && newOptRange !== null && newOptRange !== void 0 && newOptRange.length && currentRange !== null && currentRange !== void 0 && currentRange.length) {
|
|
50743
|
+
// 리사이즈 등으로 range 크기만 변경된 경우, 현재 스크롤 위치(min)를 유지하고 크기만 조정
|
|
50744
|
+
var newSize = newOptRange[1] - newOptRange[0];
|
|
50745
|
+
this.scrollbar[dir].range = [currentRange[0], currentRange[0] + newSize];
|
|
50746
|
+
} else {
|
|
50747
|
+
this.scrollbar[dir].range = newOptRange !== null && newOptRange !== void 0 && newOptRange.length ? _toConsumableArray(newOptRange) : null;
|
|
50748
|
+
}
|
|
50379
50749
|
}
|
|
50380
50750
|
|
|
50381
50751
|
if (isResetPosition || updateData) {
|
|
@@ -51550,6 +51920,7 @@ function inRange_inRange(number, start, end) {
|
|
|
51550
51920
|
|
|
51551
51921
|
|
|
51552
51922
|
|
|
51923
|
+
|
|
51553
51924
|
|
|
51554
51925
|
|
|
51555
51926
|
var plugins_interaction_modules = {
|
|
@@ -51763,10 +52134,12 @@ var plugins_interaction_modules = {
|
|
|
51763
52134
|
}
|
|
51764
52135
|
|
|
51765
52136
|
var setSelectedItemInfo = function setSelectedItemInfo() {
|
|
51766
|
-
var
|
|
52137
|
+
var _hitInfo$hitId;
|
|
52138
|
+
|
|
52139
|
+
var hitInfo = _this.findHitItem(offset, true); // 실제 클릭된 아이템의 정보 추출 (hitId가 있으면 해당 아이템, 없으면 첫 번째 아이템)
|
|
51767
52140
|
|
|
51768
52141
|
|
|
51769
|
-
var hitItemId = hitInfo.hitId
|
|
52142
|
+
var hitItemId = (_hitInfo$hitId = hitInfo.hitId) !== null && _hitInfo$hitId !== void 0 ? _hitInfo$hitId : Object.keys(hitInfo.items)[0];
|
|
51770
52143
|
var hitItem = hitInfo.items[hitItemId];
|
|
51771
52144
|
|
|
51772
52145
|
if (hitItem) {
|
|
@@ -51781,9 +52154,11 @@ var plugins_interaction_modules = {
|
|
|
51781
52154
|
};
|
|
51782
52155
|
|
|
51783
52156
|
var setSelectedLabelInfo = function setSelectedLabelInfo(targetAxis) {
|
|
51784
|
-
var
|
|
52157
|
+
var _hitInfo$hitId2;
|
|
52158
|
+
|
|
52159
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
51785
52160
|
|
|
51786
|
-
var hitItemId = hitInfo.hitId
|
|
52161
|
+
var hitItemId = (_hitInfo$hitId2 = hitInfo.hitId) !== null && _hitInfo$hitId2 !== void 0 ? _hitInfo$hitId2 : Object.keys(hitInfo.items)[0];
|
|
51787
52162
|
var hitItem = hitInfo.items[hitItemId];
|
|
51788
52163
|
|
|
51789
52164
|
var _this$getLabelInfoByP = _this.getLabelInfoByPosition(offset, targetAxis),
|
|
@@ -51806,9 +52181,11 @@ var plugins_interaction_modules = {
|
|
|
51806
52181
|
};
|
|
51807
52182
|
|
|
51808
52183
|
var setSelectedSeriesInfo = function setSelectedSeriesInfo() {
|
|
51809
|
-
var
|
|
52184
|
+
var _hitInfo$hitId3;
|
|
51810
52185
|
|
|
51811
|
-
var
|
|
52186
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
52187
|
+
|
|
52188
|
+
var hitItemId = (_hitInfo$hitId3 = hitInfo.hitId) !== null && _hitInfo$hitId3 !== void 0 ? _hitInfo$hitId3 : Object.keys(hitInfo.items)[0];
|
|
51812
52189
|
var hitItem = hitInfo.items[hitItemId];
|
|
51813
52190
|
|
|
51814
52191
|
if (hitItemId !== null) {
|
|
@@ -51891,7 +52268,7 @@ var plugins_interaction_modules = {
|
|
|
51891
52268
|
var useSelectSeries = (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.use) && (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.useClick);
|
|
51892
52269
|
|
|
51893
52270
|
var setSelectedItemInfo = function setSelectedItemInfo() {
|
|
51894
|
-
var hitInfo = _this.getHitItemByPosition(offset, false);
|
|
52271
|
+
var hitInfo = _this.getHitItemByPosition(offset, false, undefined, false, true);
|
|
51895
52272
|
|
|
51896
52273
|
args.label = hitInfo.label;
|
|
51897
52274
|
args.value = hitInfo.value;
|
|
@@ -51931,9 +52308,11 @@ var plugins_interaction_modules = {
|
|
|
51931
52308
|
};
|
|
51932
52309
|
|
|
51933
52310
|
var setSelectedSeriesInfo = function setSelectedSeriesInfo() {
|
|
51934
|
-
var
|
|
52311
|
+
var _hitInfo$hitId4;
|
|
52312
|
+
|
|
52313
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
51935
52314
|
|
|
51936
|
-
var hitItemId = hitInfo.hitId
|
|
52315
|
+
var hitItemId = (_hitInfo$hitId4 = hitInfo.hitId) !== null && _hitInfo$hitId4 !== void 0 ? _hitInfo$hitId4 : Object.keys(hitInfo.items)[0];
|
|
51937
52316
|
var hitItem = hitInfo.items[hitItemId];
|
|
51938
52317
|
|
|
51939
52318
|
if (hitItemId !== null) {
|
|
@@ -52567,22 +52946,30 @@ var plugins_interaction_modules = {
|
|
|
52567
52946
|
findHitItem: function findHitItem(offset) {
|
|
52568
52947
|
var _this4 = this;
|
|
52569
52948
|
|
|
52949
|
+
var disableNullLabelSnap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
52570
52950
|
var sIds = Object.keys(this.seriesList);
|
|
52571
52951
|
var items = {};
|
|
52572
52952
|
var isHorizontal = !!this.options.horizontal;
|
|
52573
52953
|
var ctx = this.tooltipCtx;
|
|
52954
|
+
|
|
52955
|
+
var _offset = _slicedToArray(offset, 2),
|
|
52956
|
+
cx = _offset[0],
|
|
52957
|
+
cy = _offset[1];
|
|
52958
|
+
|
|
52574
52959
|
var hitId = null;
|
|
52575
52960
|
var maxs = '';
|
|
52576
52961
|
var maxsw = 0;
|
|
52577
52962
|
var maxv = '';
|
|
52578
52963
|
var maxg = null;
|
|
52579
52964
|
var maxSID = null;
|
|
52580
|
-
var minDistance = Infinity; // directHit
|
|
52581
|
-
// 한 번이라도 directHit가 있으면 line의 근접 포인트 히트는 hitId 후보에서 배제된다.
|
|
52965
|
+
var minDistance = Infinity; // directHit 가 하나라도 있으면 일반 hit 는 hitId 후보에서 배제.
|
|
52582
52966
|
|
|
52583
|
-
var hasDirectHit = false; //
|
|
52967
|
+
var hasDirectHit = false; // hit 이 없을 때 거리 기반으로 선택할 fallback (기존 "첫 시리즈 고정" 대체).
|
|
52584
52968
|
|
|
52585
|
-
var
|
|
52969
|
+
var fallbackId = null;
|
|
52970
|
+
var fallbackDistance = Infinity; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
|
|
52971
|
+
|
|
52972
|
+
var targetDataIndex = this.findClosestDataIndex(offset, sIds, disableNullLabelSnap);
|
|
52586
52973
|
|
|
52587
52974
|
if (targetDataIndex === -1 && !this.isNotUseIndicator()) {
|
|
52588
52975
|
return {
|
|
@@ -52656,17 +53043,13 @@ var plugins_interaction_modules = {
|
|
|
52656
53043
|
if (maxg === null || maxg <= gdata) {
|
|
52657
53044
|
maxg = gdata;
|
|
52658
53045
|
maxSID = sId;
|
|
52659
|
-
} //
|
|
52660
|
-
// directHit(bar 박스 내부)가 하나라도 있으면 그중에서만 선택하고,
|
|
52661
|
-
// 라인의 근접 포인트 히트(item.hit=true, directHit=false)는 hitId 후보에서 배제한다.
|
|
52662
|
-
// bar + line combo 차트에서 작은 bar 클릭 시 큰 값의 line이 잡히던 버그 방지.
|
|
53046
|
+
} // hit 기반 선택: directHit 최우선, 그 외 일반 hit 는 directHit 없을 때만.
|
|
52663
53047
|
|
|
52664
53048
|
|
|
52665
53049
|
if (item.hit && item.data.xp !== undefined && item.data.yp !== undefined) {
|
|
52666
53050
|
var distance = Math.pow(item.data.xp - offset[0], 2) + Math.pow(item.data.yp - offset[1], 2);
|
|
52667
53051
|
|
|
52668
53052
|
if (item.directHit) {
|
|
52669
|
-
// directHit는 최우선. 여러 directHit 중에서는 가장 가까운 것 선택.
|
|
52670
53053
|
if (!hasDirectHit || distance < minDistance) {
|
|
52671
53054
|
minDistance = distance;
|
|
52672
53055
|
hitId = sId;
|
|
@@ -52674,18 +53057,65 @@ var plugins_interaction_modules = {
|
|
|
52674
53057
|
|
|
52675
53058
|
hasDirectHit = true;
|
|
52676
53059
|
} else if (!hasDirectHit && distance < minDistance) {
|
|
52677
|
-
// directHit가 없을 때만 일반 hit 거리 비교
|
|
52678
53060
|
minDistance = distance;
|
|
52679
53061
|
hitId = sId;
|
|
52680
53062
|
}
|
|
53063
|
+
} // fallback 후보: hit 여부와 무관하게 거리가 가장 가까운 시리즈.
|
|
53064
|
+
// 참고: 이 블록은 outer `if (gdata !== null && gdata !== undefined)` 안에 있어서
|
|
53065
|
+
// 값이 null 인 시리즈는 items 수집 단계에서 이미 걸러진 상태. 별도 null 값 가드 불필요.
|
|
53066
|
+
|
|
53067
|
+
|
|
53068
|
+
if (item.data.xp !== undefined && item.data.yp !== undefined && item.data.xp !== null && item.data.yp !== null) {
|
|
53069
|
+
var fbDistance = helpers_util.calcBoxDistance(item.data, cx, cy);
|
|
53070
|
+
|
|
53071
|
+
if (fbDistance < fallbackDistance) {
|
|
53072
|
+
fallbackDistance = fbDistance;
|
|
53073
|
+
fallbackId = sId;
|
|
53074
|
+
}
|
|
52681
53075
|
}
|
|
52682
53076
|
}
|
|
52683
53077
|
}
|
|
52684
53078
|
}
|
|
53079
|
+
} // hit 없으면 거리 기반 fallback, 그것도 없으면 items 첫 키(항상 비어있을 가능성 방어).
|
|
53080
|
+
|
|
53081
|
+
|
|
53082
|
+
if (hitId === null) {
|
|
53083
|
+
hitId = fallbackId !== null ? fallbackId : Object.keys(items)[0];
|
|
53084
|
+
}
|
|
53085
|
+
|
|
53086
|
+
var maxHighlight = maxg !== null ? [maxSID, maxg] : null; // all-null 라벨인 경우 synthetic items[''] 로 label/index 만 채워 전달.
|
|
53087
|
+
|
|
53088
|
+
if (disableNullLabelSnap && Object.keys(items).length === 0 && targetDataIndex !== -1) {
|
|
53089
|
+
var _this$seriesList$refS;
|
|
53090
|
+
|
|
53091
|
+
var refSeriesID = sIds.find(function (sId) {
|
|
53092
|
+
var _s$data;
|
|
53093
|
+
|
|
53094
|
+
var s = _this4.seriesList[sId];
|
|
53095
|
+
return (s === null || s === void 0 ? void 0 : s.show) && (s === null || s === void 0 ? void 0 : (_s$data = s.data) === null || _s$data === void 0 ? void 0 : _s$data.length) > 0;
|
|
53096
|
+
});
|
|
53097
|
+
var refPoint = refSeriesID ? (_this$seriesList$refS = this.seriesList[refSeriesID].data) === null || _this$seriesList$refS === void 0 ? void 0 : _this$seriesList$refS[targetDataIndex] : null;
|
|
53098
|
+
|
|
53099
|
+
if (refPoint) {
|
|
53100
|
+
items[''] = {
|
|
53101
|
+
id: '',
|
|
53102
|
+
name: '',
|
|
53103
|
+
label: isHorizontal ? refPoint.y : refPoint.x,
|
|
53104
|
+
index: targetDataIndex,
|
|
53105
|
+
axis: {
|
|
53106
|
+
x: 0,
|
|
53107
|
+
y: 0
|
|
53108
|
+
},
|
|
53109
|
+
data: {
|
|
53110
|
+
o: undefined,
|
|
53111
|
+
x: refPoint.x,
|
|
53112
|
+
y: refPoint.y
|
|
53113
|
+
}
|
|
53114
|
+
};
|
|
53115
|
+
hitId = '';
|
|
53116
|
+
}
|
|
52685
53117
|
}
|
|
52686
53118
|
|
|
52687
|
-
hitId = hitId === null ? Object.keys(items)[0] : hitId;
|
|
52688
|
-
var maxHighlight = maxg !== null ? [maxSID, maxg] : null;
|
|
52689
53119
|
return {
|
|
52690
53120
|
items: items,
|
|
52691
53121
|
hitId: hitId,
|
|
@@ -52704,9 +53134,11 @@ var plugins_interaction_modules = {
|
|
|
52704
53134
|
var _this5 = this,
|
|
52705
53135
|
_this$seriesList$refe;
|
|
52706
53136
|
|
|
52707
|
-
var
|
|
52708
|
-
|
|
52709
|
-
|
|
53137
|
+
var disableNullLabelSnap = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
53138
|
+
|
|
53139
|
+
var _offset2 = _slicedToArray(offset, 2),
|
|
53140
|
+
xp = _offset2[0],
|
|
53141
|
+
yp = _offset2[1];
|
|
52710
53142
|
|
|
52711
53143
|
var isHorizontal = !!this.options.horizontal;
|
|
52712
53144
|
var mousePos = isHorizontal ? yp : xp; // 데이터 있는 시리즈를 기준으로 라벨 위치 확인
|
|
@@ -52759,11 +53191,10 @@ var plugins_interaction_modules = {
|
|
|
52759
53191
|
}
|
|
52760
53192
|
|
|
52761
53193
|
var closestDistance = Infinity;
|
|
52762
|
-
var closestIndex = -1; // 각 라벨에서 가장 가까운 것 찾기
|
|
53194
|
+
var closestIndex = -1; // 각 라벨에서 가장 가까운 것 찾기 (disableNullLabelSnap=true 면 all-null 라벨도 후보)
|
|
52763
53195
|
|
|
52764
53196
|
var _loop = function _loop(_i) {
|
|
52765
|
-
|
|
52766
|
-
var hasValidData = sIds.some(function (sId) {
|
|
53197
|
+
var hasValidData = disableNullLabelSnap || sIds.some(function (sId) {
|
|
52767
53198
|
var _series$data2, _series$data2$_i, _series$data3, _series$data3$_i;
|
|
52768
53199
|
|
|
52769
53200
|
var series = _this5.seriesList[sId];
|
|
@@ -53379,9 +53810,9 @@ var plugins_interaction_modules = {
|
|
|
53379
53810
|
* @returns {string}
|
|
53380
53811
|
*/
|
|
53381
53812
|
getCurMouseLocation: function getCurMouseLocation(offset) {
|
|
53382
|
-
var
|
|
53383
|
-
offsetX =
|
|
53384
|
-
offsetY =
|
|
53813
|
+
var _offset3 = _slicedToArray(offset, 2),
|
|
53814
|
+
offsetX = _offset3[0],
|
|
53815
|
+
offsetY = _offset3[1];
|
|
53385
53816
|
|
|
53386
53817
|
var aPos = {
|
|
53387
53818
|
x1: this.chartRect.x1 + this.labelOffset.left,
|