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.umd.js
CHANGED
|
@@ -371,6 +371,81 @@ if(content.locals) module.exports = content.locals;
|
|
|
371
371
|
var add = __webpack_require__("499e").default
|
|
372
372
|
var update = add("5a9ac64a", content, true, {"sourceMap":false,"shadowMode":false});
|
|
373
373
|
|
|
374
|
+
/***/ }),
|
|
375
|
+
|
|
376
|
+
/***/ "10d1":
|
|
377
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
378
|
+
|
|
379
|
+
"use strict";
|
|
380
|
+
|
|
381
|
+
var global = __webpack_require__("da84");
|
|
382
|
+
var redefineAll = __webpack_require__("e2cc");
|
|
383
|
+
var InternalMetadataModule = __webpack_require__("f183");
|
|
384
|
+
var collection = __webpack_require__("6d61");
|
|
385
|
+
var collectionWeak = __webpack_require__("acac");
|
|
386
|
+
var isObject = __webpack_require__("861d");
|
|
387
|
+
var enforceIternalState = __webpack_require__("69f3").enforce;
|
|
388
|
+
var NATIVE_WEAK_MAP = __webpack_require__("7f9a");
|
|
389
|
+
|
|
390
|
+
var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;
|
|
391
|
+
var isExtensible = Object.isExtensible;
|
|
392
|
+
var InternalWeakMap;
|
|
393
|
+
|
|
394
|
+
var wrapper = function (init) {
|
|
395
|
+
return function WeakMap() {
|
|
396
|
+
return init(this, arguments.length ? arguments[0] : undefined);
|
|
397
|
+
};
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
// `WeakMap` constructor
|
|
401
|
+
// https://tc39.github.io/ecma262/#sec-weakmap-constructor
|
|
402
|
+
var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);
|
|
403
|
+
|
|
404
|
+
// IE11 WeakMap frozen keys fix
|
|
405
|
+
// We can't use feature detection because it crash some old IE builds
|
|
406
|
+
// https://github.com/zloirock/core-js/issues/485
|
|
407
|
+
if (NATIVE_WEAK_MAP && IS_IE11) {
|
|
408
|
+
InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);
|
|
409
|
+
InternalMetadataModule.REQUIRED = true;
|
|
410
|
+
var WeakMapPrototype = $WeakMap.prototype;
|
|
411
|
+
var nativeDelete = WeakMapPrototype['delete'];
|
|
412
|
+
var nativeHas = WeakMapPrototype.has;
|
|
413
|
+
var nativeGet = WeakMapPrototype.get;
|
|
414
|
+
var nativeSet = WeakMapPrototype.set;
|
|
415
|
+
redefineAll(WeakMapPrototype, {
|
|
416
|
+
'delete': function (key) {
|
|
417
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
418
|
+
var state = enforceIternalState(this);
|
|
419
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
420
|
+
return nativeDelete.call(this, key) || state.frozen['delete'](key);
|
|
421
|
+
} return nativeDelete.call(this, key);
|
|
422
|
+
},
|
|
423
|
+
has: function has(key) {
|
|
424
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
425
|
+
var state = enforceIternalState(this);
|
|
426
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
427
|
+
return nativeHas.call(this, key) || state.frozen.has(key);
|
|
428
|
+
} return nativeHas.call(this, key);
|
|
429
|
+
},
|
|
430
|
+
get: function get(key) {
|
|
431
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
432
|
+
var state = enforceIternalState(this);
|
|
433
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
434
|
+
return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);
|
|
435
|
+
} return nativeGet.call(this, key);
|
|
436
|
+
},
|
|
437
|
+
set: function set(key, value) {
|
|
438
|
+
if (isObject(key) && !isExtensible(key)) {
|
|
439
|
+
var state = enforceIternalState(this);
|
|
440
|
+
if (!state.frozen) state.frozen = new InternalWeakMap();
|
|
441
|
+
nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);
|
|
442
|
+
} else nativeSet.call(this, key, value);
|
|
443
|
+
return this;
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
|
|
374
449
|
/***/ }),
|
|
375
450
|
|
|
376
451
|
/***/ "1148":
|
|
@@ -11244,7 +11319,7 @@ $({ target: 'Number', stat: true }, {
|
|
|
11244
11319
|
/***/ "9224":
|
|
11245
11320
|
/***/ (function(module) {
|
|
11246
11321
|
|
|
11247
|
-
module.exports = JSON.parse("{\"a\":\"3.4.
|
|
11322
|
+
module.exports = JSON.parse("{\"a\":\"3.4.157\"}");
|
|
11248
11323
|
|
|
11249
11324
|
/***/ }),
|
|
11250
11325
|
|
|
@@ -13085,6 +13160,135 @@ $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
|
|
|
13085
13160
|
});
|
|
13086
13161
|
|
|
13087
13162
|
|
|
13163
|
+
/***/ }),
|
|
13164
|
+
|
|
13165
|
+
/***/ "acac":
|
|
13166
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
13167
|
+
|
|
13168
|
+
"use strict";
|
|
13169
|
+
|
|
13170
|
+
var redefineAll = __webpack_require__("e2cc");
|
|
13171
|
+
var getWeakData = __webpack_require__("f183").getWeakData;
|
|
13172
|
+
var anObject = __webpack_require__("825a");
|
|
13173
|
+
var isObject = __webpack_require__("861d");
|
|
13174
|
+
var anInstance = __webpack_require__("19aa");
|
|
13175
|
+
var iterate = __webpack_require__("2266");
|
|
13176
|
+
var ArrayIterationModule = __webpack_require__("b727");
|
|
13177
|
+
var $has = __webpack_require__("5135");
|
|
13178
|
+
var InternalStateModule = __webpack_require__("69f3");
|
|
13179
|
+
|
|
13180
|
+
var setInternalState = InternalStateModule.set;
|
|
13181
|
+
var internalStateGetterFor = InternalStateModule.getterFor;
|
|
13182
|
+
var find = ArrayIterationModule.find;
|
|
13183
|
+
var findIndex = ArrayIterationModule.findIndex;
|
|
13184
|
+
var id = 0;
|
|
13185
|
+
|
|
13186
|
+
// fallback for uncaught frozen keys
|
|
13187
|
+
var uncaughtFrozenStore = function (store) {
|
|
13188
|
+
return store.frozen || (store.frozen = new UncaughtFrozenStore());
|
|
13189
|
+
};
|
|
13190
|
+
|
|
13191
|
+
var UncaughtFrozenStore = function () {
|
|
13192
|
+
this.entries = [];
|
|
13193
|
+
};
|
|
13194
|
+
|
|
13195
|
+
var findUncaughtFrozen = function (store, key) {
|
|
13196
|
+
return find(store.entries, function (it) {
|
|
13197
|
+
return it[0] === key;
|
|
13198
|
+
});
|
|
13199
|
+
};
|
|
13200
|
+
|
|
13201
|
+
UncaughtFrozenStore.prototype = {
|
|
13202
|
+
get: function (key) {
|
|
13203
|
+
var entry = findUncaughtFrozen(this, key);
|
|
13204
|
+
if (entry) return entry[1];
|
|
13205
|
+
},
|
|
13206
|
+
has: function (key) {
|
|
13207
|
+
return !!findUncaughtFrozen(this, key);
|
|
13208
|
+
},
|
|
13209
|
+
set: function (key, value) {
|
|
13210
|
+
var entry = findUncaughtFrozen(this, key);
|
|
13211
|
+
if (entry) entry[1] = value;
|
|
13212
|
+
else this.entries.push([key, value]);
|
|
13213
|
+
},
|
|
13214
|
+
'delete': function (key) {
|
|
13215
|
+
var index = findIndex(this.entries, function (it) {
|
|
13216
|
+
return it[0] === key;
|
|
13217
|
+
});
|
|
13218
|
+
if (~index) this.entries.splice(index, 1);
|
|
13219
|
+
return !!~index;
|
|
13220
|
+
}
|
|
13221
|
+
};
|
|
13222
|
+
|
|
13223
|
+
module.exports = {
|
|
13224
|
+
getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
|
|
13225
|
+
var C = wrapper(function (that, iterable) {
|
|
13226
|
+
anInstance(that, C, CONSTRUCTOR_NAME);
|
|
13227
|
+
setInternalState(that, {
|
|
13228
|
+
type: CONSTRUCTOR_NAME,
|
|
13229
|
+
id: id++,
|
|
13230
|
+
frozen: undefined
|
|
13231
|
+
});
|
|
13232
|
+
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
|
13233
|
+
});
|
|
13234
|
+
|
|
13235
|
+
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
|
|
13236
|
+
|
|
13237
|
+
var define = function (that, key, value) {
|
|
13238
|
+
var state = getInternalState(that);
|
|
13239
|
+
var data = getWeakData(anObject(key), true);
|
|
13240
|
+
if (data === true) uncaughtFrozenStore(state).set(key, value);
|
|
13241
|
+
else data[state.id] = value;
|
|
13242
|
+
return that;
|
|
13243
|
+
};
|
|
13244
|
+
|
|
13245
|
+
redefineAll(C.prototype, {
|
|
13246
|
+
// 23.3.3.2 WeakMap.prototype.delete(key)
|
|
13247
|
+
// 23.4.3.3 WeakSet.prototype.delete(value)
|
|
13248
|
+
'delete': function (key) {
|
|
13249
|
+
var state = getInternalState(this);
|
|
13250
|
+
if (!isObject(key)) return false;
|
|
13251
|
+
var data = getWeakData(key);
|
|
13252
|
+
if (data === true) return uncaughtFrozenStore(state)['delete'](key);
|
|
13253
|
+
return data && $has(data, state.id) && delete data[state.id];
|
|
13254
|
+
},
|
|
13255
|
+
// 23.3.3.4 WeakMap.prototype.has(key)
|
|
13256
|
+
// 23.4.3.4 WeakSet.prototype.has(value)
|
|
13257
|
+
has: function has(key) {
|
|
13258
|
+
var state = getInternalState(this);
|
|
13259
|
+
if (!isObject(key)) return false;
|
|
13260
|
+
var data = getWeakData(key);
|
|
13261
|
+
if (data === true) return uncaughtFrozenStore(state).has(key);
|
|
13262
|
+
return data && $has(data, state.id);
|
|
13263
|
+
}
|
|
13264
|
+
});
|
|
13265
|
+
|
|
13266
|
+
redefineAll(C.prototype, IS_MAP ? {
|
|
13267
|
+
// 23.3.3.3 WeakMap.prototype.get(key)
|
|
13268
|
+
get: function get(key) {
|
|
13269
|
+
var state = getInternalState(this);
|
|
13270
|
+
if (isObject(key)) {
|
|
13271
|
+
var data = getWeakData(key);
|
|
13272
|
+
if (data === true) return uncaughtFrozenStore(state).get(key);
|
|
13273
|
+
return data ? data[state.id] : undefined;
|
|
13274
|
+
}
|
|
13275
|
+
},
|
|
13276
|
+
// 23.3.3.5 WeakMap.prototype.set(key, value)
|
|
13277
|
+
set: function set(key, value) {
|
|
13278
|
+
return define(this, key, value);
|
|
13279
|
+
}
|
|
13280
|
+
} : {
|
|
13281
|
+
// 23.4.3.1 WeakSet.prototype.add(value)
|
|
13282
|
+
add: function add(value) {
|
|
13283
|
+
return define(this, value, true);
|
|
13284
|
+
}
|
|
13285
|
+
});
|
|
13286
|
+
|
|
13287
|
+
return C;
|
|
13288
|
+
}
|
|
13289
|
+
};
|
|
13290
|
+
|
|
13291
|
+
|
|
13088
13292
|
/***/ }),
|
|
13089
13293
|
|
|
13090
13294
|
/***/ "ad6d":
|
|
@@ -22283,9 +22487,9 @@ var _Set_Set = _getNative(_root["a" /* default */], 'Set');
|
|
|
22283
22487
|
|
|
22284
22488
|
|
|
22285
22489
|
/* Built-in method references that are verified to be native. */
|
|
22286
|
-
var
|
|
22490
|
+
var _WeakMap_WeakMap = _getNative(_root["a" /* default */], 'WeakMap');
|
|
22287
22491
|
|
|
22288
|
-
/* harmony default export */ var _WeakMap = (
|
|
22492
|
+
/* harmony default export */ var _WeakMap = (_WeakMap_WeakMap);
|
|
22289
22493
|
|
|
22290
22494
|
// CONCATENATED MODULE: ./node_modules/lodash-es/_getTag.js
|
|
22291
22495
|
|
|
@@ -38946,6 +39150,30 @@ var textMeasureCtx = textMeasureCanvas.getContext('2d');
|
|
|
38946
39150
|
}
|
|
38947
39151
|
|
|
38948
39152
|
return "".concat(color, "80");
|
|
39153
|
+
},
|
|
39154
|
+
|
|
39155
|
+
/**
|
|
39156
|
+
* 클릭 좌표(cx, cy)에서 데이터 포인트까지의 거리²를 반환한다.
|
|
39157
|
+
* w/h 가 있으면 박스 외벽까지의 거리(내부면 0), 없으면 포인트까지의 유클리드 거리².
|
|
39158
|
+
* @param {object} data - 데이터 포인트 (xp, yp, w?, h?)
|
|
39159
|
+
* @param {number} cx - 클릭 x 좌표
|
|
39160
|
+
* @param {number} cy - 클릭 y 좌표
|
|
39161
|
+
* @returns {number}
|
|
39162
|
+
*/
|
|
39163
|
+
calcBoxDistance: function calcBoxDistance(data, cx, cy) {
|
|
39164
|
+
if (data.w !== null && data.w !== undefined && data.h !== null && data.h !== undefined) {
|
|
39165
|
+
var sx = data.xp;
|
|
39166
|
+
var sy = data.yp;
|
|
39167
|
+
var xMin = Math.min(sx, sx + data.w);
|
|
39168
|
+
var xMax = Math.max(sx, sx + data.w);
|
|
39169
|
+
var yMin = Math.min(sy, sy + data.h);
|
|
39170
|
+
var yMax = Math.max(sy, sy + data.h);
|
|
39171
|
+
var dx = Math.max(0, xMin - cx, cx - xMax);
|
|
39172
|
+
var dy = Math.max(0, yMin - cy, cy - yMax);
|
|
39173
|
+
return dx * dx + dy * dy;
|
|
39174
|
+
}
|
|
39175
|
+
|
|
39176
|
+
return Math.pow(data.xp - cx, 2) + Math.pow(data.yp - cy, 2);
|
|
38949
39177
|
}
|
|
38950
39178
|
});
|
|
38951
39179
|
// CONCATENATED MODULE: ./src/components/chart/model/model.store.js
|
|
@@ -38972,6 +39200,8 @@ var textMeasureCtx = textMeasureCanvas.getContext('2d');
|
|
|
38972
39200
|
|
|
38973
39201
|
|
|
38974
39202
|
|
|
39203
|
+
|
|
39204
|
+
|
|
38975
39205
|
|
|
38976
39206
|
|
|
38977
39207
|
|
|
@@ -39965,27 +40195,86 @@ var modules = {
|
|
|
39965
40195
|
* 선택 우선순위:
|
|
39966
40196
|
* 1. directHit (bar 박스 내부 클릭) — 가장 가까운 것
|
|
39967
40197
|
* 2. hit (line 포인트 근접 등) — 가장 가까운 것
|
|
39968
|
-
* 3. hit
|
|
39969
|
-
*
|
|
39970
|
-
* 과거에는 "같은 라벨 위에서 값이 가장 큰 시리즈"를 돌려주는 max-value 덮어쓰기 방식이었으나,
|
|
39971
|
-
* bar + line combo 차트에서 작은 bar를 클릭해도 큰 값의 line이 선택되는 버그의 원인이었다.
|
|
39972
|
-
* 이번 수정으로 사용자가 실제로 가리킨 시리즈(hit)가 선택되도록 바뀐다.
|
|
40198
|
+
* 3. hit 없으면 클릭 좌표에 가장 가까운 시리즈로 fallback (distance 기반)
|
|
39973
40199
|
*
|
|
39974
40200
|
* @param {array} offset position x and y
|
|
39975
40201
|
* @param {boolean} useApproximate if it's true. it'll look for closed item on mouse position
|
|
39976
40202
|
* @param {number} dataIndex selected data index
|
|
39977
40203
|
* @param {boolean} useSelectLabelOrItem used to display select label/item at tooltip location
|
|
40204
|
+
* @param {boolean} disableNullLabelSnap true 이면 all-null 라벨도 그대로 반환 (click/dblclick 용)
|
|
39978
40205
|
*
|
|
39979
40206
|
* @returns {object} hit item information
|
|
39980
40207
|
*/
|
|
39981
40208
|
getHitItemByPosition: function getHitItemByPosition(offset) {
|
|
39982
|
-
var
|
|
40209
|
+
var _this8 = this,
|
|
40210
|
+
_ref4;
|
|
39983
40211
|
|
|
39984
40212
|
var useApproximate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
39985
40213
|
var dataIndex = arguments.length > 2 ? arguments[2] : undefined;
|
|
39986
40214
|
var useSelectLabelOrItem = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
40215
|
+
var disableNullLabelSnap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
39987
40216
|
var seriesIDs = Object.keys(this.seriesList);
|
|
39988
|
-
var isHorizontal = !!this.options.horizontal;
|
|
40217
|
+
var isHorizontal = !!this.options.horizontal;
|
|
40218
|
+
|
|
40219
|
+
var _offset = _slicedToArray(offset, 2),
|
|
40220
|
+
cx = _offset[0],
|
|
40221
|
+
cy = _offset[1]; // dataIndex 미지정 시 클릭 좌표에 가장 가까운 valid 라벨 인덱스 결정.
|
|
40222
|
+
// disableNullLabelSnap=true 이면 all-null 라벨도 후보로 인정.
|
|
40223
|
+
|
|
40224
|
+
|
|
40225
|
+
var resolvedDataIndex = dataIndex;
|
|
40226
|
+
|
|
40227
|
+
if (resolvedDataIndex === undefined && !useApproximate) {
|
|
40228
|
+
var refSeriesID = seriesIDs.find(function (sId) {
|
|
40229
|
+
var _s$data;
|
|
40230
|
+
|
|
40231
|
+
var s = _this8.seriesList[sId];
|
|
40232
|
+
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;
|
|
40233
|
+
});
|
|
40234
|
+
|
|
40235
|
+
if (refSeriesID) {
|
|
40236
|
+
var refData = this.seriesList[refSeriesID].data;
|
|
40237
|
+
var clickPos = isHorizontal ? offset[1] : offset[0];
|
|
40238
|
+
var nearestDistance = Infinity;
|
|
40239
|
+
var nearestIndex = -1;
|
|
40240
|
+
|
|
40241
|
+
var _loop = function _loop(i) {
|
|
40242
|
+
var hasValidData = disableNullLabelSnap || seriesIDs.some(function (sId) {
|
|
40243
|
+
var _s$data2, _s$data2$i, _s$data3, _s$data3$i;
|
|
40244
|
+
|
|
40245
|
+
var s = _this8.seriesList[sId];
|
|
40246
|
+
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;
|
|
40247
|
+
});
|
|
40248
|
+
var p = refData[i];
|
|
40249
|
+
|
|
40250
|
+
if (hasValidData && p) {
|
|
40251
|
+
var labelPos;
|
|
40252
|
+
|
|
40253
|
+
if (isHorizontal) {
|
|
40254
|
+
labelPos = p.h ? p.yp + p.h / 2 : p.yp;
|
|
40255
|
+
} else {
|
|
40256
|
+
labelPos = p.w ? p.xp + p.w / 2 : p.xp;
|
|
40257
|
+
}
|
|
40258
|
+
|
|
40259
|
+
if (labelPos !== null && labelPos !== undefined) {
|
|
40260
|
+
var d = Math.abs(clickPos - labelPos);
|
|
40261
|
+
|
|
40262
|
+
if (d < nearestDistance) {
|
|
40263
|
+
nearestDistance = d;
|
|
40264
|
+
nearestIndex = i;
|
|
40265
|
+
}
|
|
40266
|
+
}
|
|
40267
|
+
}
|
|
40268
|
+
};
|
|
40269
|
+
|
|
40270
|
+
for (var i = 0; i < refData.length; i++) {
|
|
40271
|
+
_loop(i);
|
|
40272
|
+
}
|
|
40273
|
+
|
|
40274
|
+
if (nearestIndex !== -1) resolvedDataIndex = nearestIndex;
|
|
40275
|
+
}
|
|
40276
|
+
} // hit 기반 결과 (최우선)
|
|
40277
|
+
|
|
39989
40278
|
|
|
39990
40279
|
var hitType = null;
|
|
39991
40280
|
var hitLabel = null;
|
|
@@ -39994,7 +40283,7 @@ var modules = {
|
|
|
39994
40283
|
var hitSeriesID = '';
|
|
39995
40284
|
var hitDataIndex = null;
|
|
39996
40285
|
var hitDistance = Infinity;
|
|
39997
|
-
var hasDirectHit = false; //
|
|
40286
|
+
var hasDirectHit = false; // hit 없을 때 쓸 fallback — 값이 있는 시리즈 중 클릭 좌표에 가장 가까운 것.
|
|
39998
40287
|
|
|
39999
40288
|
var fallbackType = null;
|
|
40000
40289
|
var fallbackLabel = null;
|
|
@@ -40002,6 +40291,7 @@ var modules = {
|
|
|
40002
40291
|
var fallbackValue = null;
|
|
40003
40292
|
var fallbackSeriesID = '';
|
|
40004
40293
|
var fallbackDataIndex = null;
|
|
40294
|
+
var fallbackDistance = Infinity;
|
|
40005
40295
|
var acc = 0;
|
|
40006
40296
|
var useStack = false;
|
|
40007
40297
|
|
|
@@ -40011,7 +40301,7 @@ var modules = {
|
|
|
40011
40301
|
var findFn = useApproximate ? series.findApproximateData : series.findGraphData;
|
|
40012
40302
|
|
|
40013
40303
|
if (findFn) {
|
|
40014
|
-
var item = findFn.call(series, offset, isHorizontal,
|
|
40304
|
+
var item = findFn.call(series, offset, isHorizontal, resolvedDataIndex, useSelectLabelOrItem);
|
|
40015
40305
|
var data = item.data;
|
|
40016
40306
|
var index = item.index;
|
|
40017
40307
|
|
|
@@ -40036,10 +40326,27 @@ var modules = {
|
|
|
40036
40326
|
useStack = true;
|
|
40037
40327
|
} else {
|
|
40038
40328
|
acc += data.y;
|
|
40039
|
-
} // fallback
|
|
40329
|
+
} // fallback 후보: 값이 있는 시리즈 중 거리가 가장 가까운 쪽.
|
|
40330
|
+
// 값이 null 인 시리즈는 제외.
|
|
40040
40331
|
|
|
40041
40332
|
|
|
40042
|
-
|
|
40333
|
+
var hasMeaningfulValue = g !== null && g !== undefined && !Number.isNaN(g);
|
|
40334
|
+
var hasCoords = data.xp !== null && data.xp !== undefined && data.yp !== null && data.yp !== undefined;
|
|
40335
|
+
|
|
40336
|
+
if (hasMeaningfulValue && hasCoords) {
|
|
40337
|
+
var distance = helpers_util.calcBoxDistance(data, cx, cy);
|
|
40338
|
+
|
|
40339
|
+
if (fallbackSeriesID === '' || distance < fallbackDistance) {
|
|
40340
|
+
fallbackDistance = distance;
|
|
40341
|
+
fallbackType = series.type;
|
|
40342
|
+
fallbackLabel = ldata;
|
|
40343
|
+
fallbackValuePos = lp;
|
|
40344
|
+
fallbackValue = g;
|
|
40345
|
+
fallbackSeriesID = seriesID;
|
|
40346
|
+
fallbackDataIndex = index;
|
|
40347
|
+
}
|
|
40348
|
+
} else if (hasMeaningfulValue && fallbackSeriesID === '') {
|
|
40349
|
+
// 좌표 없는 예외 케이스 — 첫 후보로만 등록
|
|
40043
40350
|
fallbackType = series.type;
|
|
40044
40351
|
fallbackLabel = ldata;
|
|
40045
40352
|
fallbackValuePos = lp;
|
|
@@ -40050,12 +40357,12 @@ var modules = {
|
|
|
40050
40357
|
|
|
40051
40358
|
|
|
40052
40359
|
if (item.hit && data.xp !== undefined && data.yp !== undefined) {
|
|
40053
|
-
var
|
|
40360
|
+
var _distance = Math.pow(data.xp - offset[0], 2) + Math.pow(data.yp - offset[1], 2);
|
|
40054
40361
|
|
|
40055
40362
|
if (item.directHit) {
|
|
40056
40363
|
// 직접 박스 히트는 최우선. 여러 개이면 가장 가까운 것.
|
|
40057
|
-
if (!hasDirectHit ||
|
|
40058
|
-
hitDistance =
|
|
40364
|
+
if (!hasDirectHit || _distance < hitDistance) {
|
|
40365
|
+
hitDistance = _distance;
|
|
40059
40366
|
hitType = series.type;
|
|
40060
40367
|
hitLabel = ldata;
|
|
40061
40368
|
hitValuePos = lp;
|
|
@@ -40068,8 +40375,8 @@ var modules = {
|
|
|
40068
40375
|
} else if (!hasDirectHit) {
|
|
40069
40376
|
// directHit가 없을 때만 일반 hit 거리 비교 참여
|
|
40070
40377
|
// (라인 근접 히트가 박스 직접 히트를 이기지 못하도록)
|
|
40071
|
-
if (
|
|
40072
|
-
hitDistance =
|
|
40378
|
+
if (_distance < hitDistance) {
|
|
40379
|
+
hitDistance = _distance;
|
|
40073
40380
|
hitType = series.type;
|
|
40074
40381
|
hitLabel = ldata;
|
|
40075
40382
|
hitValuePos = lp;
|
|
@@ -40083,6 +40390,25 @@ var modules = {
|
|
|
40083
40390
|
}
|
|
40084
40391
|
}
|
|
40085
40392
|
}
|
|
40393
|
+
} // all-null 라벨인 경우 label/dataIndex 만 채워 반환 (sId='', value=0).
|
|
40394
|
+
|
|
40395
|
+
|
|
40396
|
+
if (disableNullLabelSnap && hitSeriesID === '' && fallbackSeriesID === '' && resolvedDataIndex !== undefined && resolvedDataIndex >= 0) {
|
|
40397
|
+
var _this$seriesList$_ref;
|
|
40398
|
+
|
|
40399
|
+
var _refSeriesID = seriesIDs.find(function (sId) {
|
|
40400
|
+
var _s$data4;
|
|
40401
|
+
|
|
40402
|
+
var s = _this8.seriesList[sId];
|
|
40403
|
+
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;
|
|
40404
|
+
});
|
|
40405
|
+
|
|
40406
|
+
var refPoint = _refSeriesID ? (_this$seriesList$_ref = this.seriesList[_refSeriesID].data) === null || _this$seriesList$_ref === void 0 ? void 0 : _this$seriesList$_ref[resolvedDataIndex] : null;
|
|
40407
|
+
|
|
40408
|
+
if (refPoint) {
|
|
40409
|
+
fallbackLabel = isHorizontal ? refPoint.y : refPoint.x;
|
|
40410
|
+
fallbackDataIndex = resolvedDataIndex;
|
|
40411
|
+
}
|
|
40086
40412
|
}
|
|
40087
40413
|
|
|
40088
40414
|
var hasHit = hitSeriesID !== '';
|
|
@@ -40114,9 +40440,9 @@ var modules = {
|
|
|
40114
40440
|
getLabelInfoByPosition: function getLabelInfoByPosition(offset, targetAxis) {
|
|
40115
40441
|
var _Object$values$sort$, _Object$values$sort$2, _scrollbarOpt, _scale, _scale$labels, _scale3, _scale3$labels;
|
|
40116
40442
|
|
|
40117
|
-
var
|
|
40118
|
-
x =
|
|
40119
|
-
y =
|
|
40443
|
+
var _offset2 = _slicedToArray(offset, 2),
|
|
40444
|
+
x = _offset2[0],
|
|
40445
|
+
y = _offset2[1];
|
|
40120
40446
|
|
|
40121
40447
|
var aPos = {
|
|
40122
40448
|
x1: this.chartRect.x1 + this.labelOffset.left,
|
|
@@ -40226,7 +40552,7 @@ var modules = {
|
|
|
40226
40552
|
* @returns {MouseLabelValue} current mouse target label value
|
|
40227
40553
|
*/
|
|
40228
40554
|
getCurMouseLabelVal: function getCurMouseLabelVal(targetAxis, offset, labelIndex) {
|
|
40229
|
-
var
|
|
40555
|
+
var _this9 = this;
|
|
40230
40556
|
|
|
40231
40557
|
var _this$options2 = this.options,
|
|
40232
40558
|
chartType = _this$options2.type,
|
|
@@ -40243,13 +40569,13 @@ var modules = {
|
|
|
40243
40569
|
case 'bar':
|
|
40244
40570
|
case 'line':
|
|
40245
40571
|
{
|
|
40246
|
-
result = horizontal && !isXAxis || !horizontal && isXAxis ?
|
|
40572
|
+
result = horizontal && !isXAxis || !horizontal && isXAxis ? _this9.data.labels[labelIndex] : '';
|
|
40247
40573
|
break;
|
|
40248
40574
|
}
|
|
40249
40575
|
|
|
40250
40576
|
case 'heatMap':
|
|
40251
40577
|
{
|
|
40252
|
-
result =
|
|
40578
|
+
result = _this9.data.labels[targetAxisDirection][labelIndex];
|
|
40253
40579
|
break;
|
|
40254
40580
|
}
|
|
40255
40581
|
|
|
@@ -40263,19 +40589,19 @@ var modules = {
|
|
|
40263
40589
|
var calLabelValUseMousePos = function calLabelValUseMousePos() {
|
|
40264
40590
|
var result = '';
|
|
40265
40591
|
var aPos = {
|
|
40266
|
-
x1:
|
|
40267
|
-
x2:
|
|
40268
|
-
y1:
|
|
40269
|
-
y2:
|
|
40592
|
+
x1: _this9.chartRect.x1 + _this9.labelOffset.left,
|
|
40593
|
+
x2: _this9.chartRect.x2 - _this9.labelOffset.right,
|
|
40594
|
+
y1: _this9.chartRect.y1 + _this9.labelOffset.top,
|
|
40595
|
+
y2: _this9.chartRect.y2 - _this9.labelOffset.bottom
|
|
40270
40596
|
};
|
|
40271
|
-
var
|
|
40272
|
-
steps =
|
|
40273
|
-
labelValInterval =
|
|
40274
|
-
graphMin =
|
|
40275
|
-
var
|
|
40276
|
-
labelWidth =
|
|
40277
|
-
labelHeight =
|
|
40278
|
-
var axes = isXAxis ?
|
|
40597
|
+
var _this9$axesSteps$targ = _this9.axesSteps[targetAxisDirection][0],
|
|
40598
|
+
steps = _this9$axesSteps$targ.steps,
|
|
40599
|
+
labelValInterval = _this9$axesSteps$targ.interval,
|
|
40600
|
+
graphMin = _this9$axesSteps$targ.graphMin;
|
|
40601
|
+
var _this9$axesRange$targ = _this9.axesRange[targetAxisDirection][0].size,
|
|
40602
|
+
labelWidth = _this9$axesRange$targ.width,
|
|
40603
|
+
labelHeight = _this9$axesRange$targ.height;
|
|
40604
|
+
var axes = isXAxis ? _this9.axesX : _this9.axesY;
|
|
40279
40605
|
var axisStartPoint = aPos[axes[0].units.rectStart];
|
|
40280
40606
|
var axisEndPoint = aPos[axes[0].units.rectEnd];
|
|
40281
40607
|
var curMousePosInAxis = Math.abs(offset[isXAxis ? 0 : 1] - axisStartPoint);
|
|
@@ -40313,7 +40639,7 @@ var modules = {
|
|
|
40313
40639
|
* @returns {object} min/max info for all of data
|
|
40314
40640
|
*/
|
|
40315
40641
|
getStoreMinMax: function getStoreMinMax() {
|
|
40316
|
-
var
|
|
40642
|
+
var _this10 = this;
|
|
40317
40643
|
|
|
40318
40644
|
var keys = Object.keys(this.seriesList);
|
|
40319
40645
|
var isHorizontal = this.options.horizontal;
|
|
@@ -40331,7 +40657,7 @@ var modules = {
|
|
|
40331
40657
|
if (keys.length) {
|
|
40332
40658
|
return keys.reduce(function (acc, key) {
|
|
40333
40659
|
var minmax = acc;
|
|
40334
|
-
var series =
|
|
40660
|
+
var series = _this10.seriesList[key];
|
|
40335
40661
|
var smm = series.minMax;
|
|
40336
40662
|
var axisX = series.xAxisIndex;
|
|
40337
40663
|
var axisY = series.yAxisIndex;
|
|
@@ -46869,6 +47195,9 @@ var scale_logarithmic_LogarithmicScale = /*#__PURE__*/function (_Scale) {
|
|
|
46869
47195
|
}(scale_scale);
|
|
46870
47196
|
|
|
46871
47197
|
/* harmony default export */ var scale_logarithmic = (scale_logarithmic_LogarithmicScale);
|
|
47198
|
+
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.weak-map.js
|
|
47199
|
+
var es_weak_map = __webpack_require__("10d1");
|
|
47200
|
+
|
|
46872
47201
|
// CONCATENATED MODULE: ./src/components/chart/scale/scale.step.js
|
|
46873
47202
|
|
|
46874
47203
|
|
|
@@ -46888,6 +47217,16 @@ var scale_logarithmic_LogarithmicScale = /*#__PURE__*/function (_Scale) {
|
|
|
46888
47217
|
|
|
46889
47218
|
|
|
46890
47219
|
|
|
47220
|
+
|
|
47221
|
+
|
|
47222
|
+
|
|
47223
|
+
|
|
47224
|
+
/**
|
|
47225
|
+
* scrollbar 사용 시 스크롤마다 labels 전체를 재순회하지 않도록 결과를 캐시
|
|
47226
|
+
*/
|
|
47227
|
+
|
|
47228
|
+
var stringMinMaxByLabels = new WeakMap();
|
|
47229
|
+
|
|
46891
47230
|
var scale_step_StepScale = /*#__PURE__*/function (_Scale) {
|
|
46892
47231
|
_inherits(StepScale, _Scale);
|
|
46893
47232
|
|
|
@@ -46903,21 +47242,43 @@ var scale_step_StepScale = /*#__PURE__*/function (_Scale) {
|
|
|
46903
47242
|
return _this;
|
|
46904
47243
|
}
|
|
46905
47244
|
/**
|
|
46906
|
-
*
|
|
46907
|
-
*
|
|
46908
|
-
*
|
|
46909
|
-
*
|
|
46910
|
-
*
|
|
46911
|
-
* @
|
|
47245
|
+
* labels 배열의 문자열 min/max를 반환
|
|
47246
|
+
* - alignToGridLine: 전달받은 minMax 그대로 사용
|
|
47247
|
+
* - scrollbar 사용: WeakMap 캐시를 통해 O(n) → O(1)로 단축
|
|
47248
|
+
* - 일반: 매번 getStringMinMax 계산
|
|
47249
|
+
* @param {object} minMax 축 min/max 정보 (alignToGridLine 시 사용)
|
|
47250
|
+
* @param {object} scrollbarOpt 스크롤바 옵션
|
|
47251
|
+
* @returns {{ min: string, max: string }}
|
|
46912
47252
|
*/
|
|
46913
47253
|
|
|
46914
47254
|
|
|
46915
47255
|
_createClass(StepScale, [{
|
|
47256
|
+
key: "getStepMinMax",
|
|
47257
|
+
value: function getStepMinMax(minMax, scrollbarOpt) {
|
|
47258
|
+
if (this.labelStyle.alignToGridLine) return minMax;
|
|
47259
|
+
if (!(scrollbarOpt !== null && scrollbarOpt !== void 0 && scrollbarOpt.use)) return helpers_util.getStringMinMax(this.labels);
|
|
47260
|
+
|
|
47261
|
+
if (!stringMinMaxByLabels.has(this.labels)) {
|
|
47262
|
+
stringMinMaxByLabels.set(this.labels, helpers_util.getStringMinMax(this.labels));
|
|
47263
|
+
}
|
|
47264
|
+
|
|
47265
|
+
return stringMinMaxByLabels.get(this.labels);
|
|
47266
|
+
}
|
|
47267
|
+
/**
|
|
47268
|
+
* Calculate min/max value, label and size information for step scale
|
|
47269
|
+
* @param {object} minMax min/max information (unused on step scale)
|
|
47270
|
+
* @param {object} scrollbarOpt scroll bar option
|
|
47271
|
+
* @param {object} chartRect chart size information
|
|
47272
|
+
*
|
|
47273
|
+
* @returns {object} min/max value and label
|
|
47274
|
+
*/
|
|
47275
|
+
|
|
47276
|
+
}, {
|
|
46916
47277
|
key: "calculateScaleRange",
|
|
46917
47278
|
value: function calculateScaleRange(minMax, scrollbarOpt, chartRect) {
|
|
46918
47279
|
var _this$labelStyle$maxW, _this$labelStyle;
|
|
46919
47280
|
|
|
46920
|
-
var stepMinMax = this.
|
|
47281
|
+
var stepMinMax = this.getStepMinMax(minMax, scrollbarOpt);
|
|
46921
47282
|
var maxValue = stepMinMax.max;
|
|
46922
47283
|
var minValue = stepMinMax.min;
|
|
46923
47284
|
var minIndex = 0;
|
|
@@ -50382,9 +50743,18 @@ var plugins_scrollbar_module = {
|
|
|
50382
50743
|
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;
|
|
50383
50744
|
|
|
50384
50745
|
if (isUpdateAxesRange) {
|
|
50385
|
-
var _newOpt$5
|
|
50746
|
+
var _newOpt$5;
|
|
50386
50747
|
|
|
50387
|
-
|
|
50748
|
+
var newOptRange = newOpt === null || newOpt === void 0 ? void 0 : (_newOpt$5 = newOpt[0]) === null || _newOpt$5 === void 0 ? void 0 : _newOpt$5.range;
|
|
50749
|
+
var currentRange = this.scrollbar[dir].range;
|
|
50750
|
+
|
|
50751
|
+
if (!isResetPosition && newOptRange !== null && newOptRange !== void 0 && newOptRange.length && currentRange !== null && currentRange !== void 0 && currentRange.length) {
|
|
50752
|
+
// 리사이즈 등으로 range 크기만 변경된 경우, 현재 스크롤 위치(min)를 유지하고 크기만 조정
|
|
50753
|
+
var newSize = newOptRange[1] - newOptRange[0];
|
|
50754
|
+
this.scrollbar[dir].range = [currentRange[0], currentRange[0] + newSize];
|
|
50755
|
+
} else {
|
|
50756
|
+
this.scrollbar[dir].range = newOptRange !== null && newOptRange !== void 0 && newOptRange.length ? _toConsumableArray(newOptRange) : null;
|
|
50757
|
+
}
|
|
50388
50758
|
}
|
|
50389
50759
|
|
|
50390
50760
|
if (isResetPosition || updateData) {
|
|
@@ -51559,6 +51929,7 @@ function inRange_inRange(number, start, end) {
|
|
|
51559
51929
|
|
|
51560
51930
|
|
|
51561
51931
|
|
|
51932
|
+
|
|
51562
51933
|
|
|
51563
51934
|
|
|
51564
51935
|
var plugins_interaction_modules = {
|
|
@@ -51772,10 +52143,12 @@ var plugins_interaction_modules = {
|
|
|
51772
52143
|
}
|
|
51773
52144
|
|
|
51774
52145
|
var setSelectedItemInfo = function setSelectedItemInfo() {
|
|
51775
|
-
var
|
|
52146
|
+
var _hitInfo$hitId;
|
|
52147
|
+
|
|
52148
|
+
var hitInfo = _this.findHitItem(offset, true); // 실제 클릭된 아이템의 정보 추출 (hitId가 있으면 해당 아이템, 없으면 첫 번째 아이템)
|
|
51776
52149
|
|
|
51777
52150
|
|
|
51778
|
-
var hitItemId = hitInfo.hitId
|
|
52151
|
+
var hitItemId = (_hitInfo$hitId = hitInfo.hitId) !== null && _hitInfo$hitId !== void 0 ? _hitInfo$hitId : Object.keys(hitInfo.items)[0];
|
|
51779
52152
|
var hitItem = hitInfo.items[hitItemId];
|
|
51780
52153
|
|
|
51781
52154
|
if (hitItem) {
|
|
@@ -51790,9 +52163,11 @@ var plugins_interaction_modules = {
|
|
|
51790
52163
|
};
|
|
51791
52164
|
|
|
51792
52165
|
var setSelectedLabelInfo = function setSelectedLabelInfo(targetAxis) {
|
|
51793
|
-
var
|
|
52166
|
+
var _hitInfo$hitId2;
|
|
52167
|
+
|
|
52168
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
51794
52169
|
|
|
51795
|
-
var hitItemId = hitInfo.hitId
|
|
52170
|
+
var hitItemId = (_hitInfo$hitId2 = hitInfo.hitId) !== null && _hitInfo$hitId2 !== void 0 ? _hitInfo$hitId2 : Object.keys(hitInfo.items)[0];
|
|
51796
52171
|
var hitItem = hitInfo.items[hitItemId];
|
|
51797
52172
|
|
|
51798
52173
|
var _this$getLabelInfoByP = _this.getLabelInfoByPosition(offset, targetAxis),
|
|
@@ -51815,9 +52190,11 @@ var plugins_interaction_modules = {
|
|
|
51815
52190
|
};
|
|
51816
52191
|
|
|
51817
52192
|
var setSelectedSeriesInfo = function setSelectedSeriesInfo() {
|
|
51818
|
-
var
|
|
52193
|
+
var _hitInfo$hitId3;
|
|
51819
52194
|
|
|
51820
|
-
var
|
|
52195
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
52196
|
+
|
|
52197
|
+
var hitItemId = (_hitInfo$hitId3 = hitInfo.hitId) !== null && _hitInfo$hitId3 !== void 0 ? _hitInfo$hitId3 : Object.keys(hitInfo.items)[0];
|
|
51821
52198
|
var hitItem = hitInfo.items[hitItemId];
|
|
51822
52199
|
|
|
51823
52200
|
if (hitItemId !== null) {
|
|
@@ -51900,7 +52277,7 @@ var plugins_interaction_modules = {
|
|
|
51900
52277
|
var useSelectSeries = (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.use) && (selectSeriesOpt === null || selectSeriesOpt === void 0 ? void 0 : selectSeriesOpt.useClick);
|
|
51901
52278
|
|
|
51902
52279
|
var setSelectedItemInfo = function setSelectedItemInfo() {
|
|
51903
|
-
var hitInfo = _this.getHitItemByPosition(offset, false);
|
|
52280
|
+
var hitInfo = _this.getHitItemByPosition(offset, false, undefined, false, true);
|
|
51904
52281
|
|
|
51905
52282
|
args.label = hitInfo.label;
|
|
51906
52283
|
args.value = hitInfo.value;
|
|
@@ -51940,9 +52317,11 @@ var plugins_interaction_modules = {
|
|
|
51940
52317
|
};
|
|
51941
52318
|
|
|
51942
52319
|
var setSelectedSeriesInfo = function setSelectedSeriesInfo() {
|
|
51943
|
-
var
|
|
52320
|
+
var _hitInfo$hitId4;
|
|
52321
|
+
|
|
52322
|
+
var hitInfo = _this.findHitItem(offset, true);
|
|
51944
52323
|
|
|
51945
|
-
var hitItemId = hitInfo.hitId
|
|
52324
|
+
var hitItemId = (_hitInfo$hitId4 = hitInfo.hitId) !== null && _hitInfo$hitId4 !== void 0 ? _hitInfo$hitId4 : Object.keys(hitInfo.items)[0];
|
|
51946
52325
|
var hitItem = hitInfo.items[hitItemId];
|
|
51947
52326
|
|
|
51948
52327
|
if (hitItemId !== null) {
|
|
@@ -52576,22 +52955,30 @@ var plugins_interaction_modules = {
|
|
|
52576
52955
|
findHitItem: function findHitItem(offset) {
|
|
52577
52956
|
var _this4 = this;
|
|
52578
52957
|
|
|
52958
|
+
var disableNullLabelSnap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
52579
52959
|
var sIds = Object.keys(this.seriesList);
|
|
52580
52960
|
var items = {};
|
|
52581
52961
|
var isHorizontal = !!this.options.horizontal;
|
|
52582
52962
|
var ctx = this.tooltipCtx;
|
|
52963
|
+
|
|
52964
|
+
var _offset = _slicedToArray(offset, 2),
|
|
52965
|
+
cx = _offset[0],
|
|
52966
|
+
cy = _offset[1];
|
|
52967
|
+
|
|
52583
52968
|
var hitId = null;
|
|
52584
52969
|
var maxs = '';
|
|
52585
52970
|
var maxsw = 0;
|
|
52586
52971
|
var maxv = '';
|
|
52587
52972
|
var maxg = null;
|
|
52588
52973
|
var maxSID = null;
|
|
52589
|
-
var minDistance = Infinity; // directHit
|
|
52590
|
-
// 한 번이라도 directHit가 있으면 line의 근접 포인트 히트는 hitId 후보에서 배제된다.
|
|
52974
|
+
var minDistance = Infinity; // directHit 가 하나라도 있으면 일반 hit 는 hitId 후보에서 배제.
|
|
52591
52975
|
|
|
52592
|
-
var hasDirectHit = false; //
|
|
52976
|
+
var hasDirectHit = false; // hit 이 없을 때 거리 기반으로 선택할 fallback (기존 "첫 시리즈 고정" 대체).
|
|
52593
52977
|
|
|
52594
|
-
var
|
|
52978
|
+
var fallbackId = null;
|
|
52979
|
+
var fallbackDistance = Infinity; // 1. 먼저 공통으로 사용할 데이터 인덱스 결정
|
|
52980
|
+
|
|
52981
|
+
var targetDataIndex = this.findClosestDataIndex(offset, sIds, disableNullLabelSnap);
|
|
52595
52982
|
|
|
52596
52983
|
if (targetDataIndex === -1 && !this.isNotUseIndicator()) {
|
|
52597
52984
|
return {
|
|
@@ -52665,17 +53052,13 @@ var plugins_interaction_modules = {
|
|
|
52665
53052
|
if (maxg === null || maxg <= gdata) {
|
|
52666
53053
|
maxg = gdata;
|
|
52667
53054
|
maxSID = sId;
|
|
52668
|
-
} //
|
|
52669
|
-
// directHit(bar 박스 내부)가 하나라도 있으면 그중에서만 선택하고,
|
|
52670
|
-
// 라인의 근접 포인트 히트(item.hit=true, directHit=false)는 hitId 후보에서 배제한다.
|
|
52671
|
-
// bar + line combo 차트에서 작은 bar 클릭 시 큰 값의 line이 잡히던 버그 방지.
|
|
53055
|
+
} // hit 기반 선택: directHit 최우선, 그 외 일반 hit 는 directHit 없을 때만.
|
|
52672
53056
|
|
|
52673
53057
|
|
|
52674
53058
|
if (item.hit && item.data.xp !== undefined && item.data.yp !== undefined) {
|
|
52675
53059
|
var distance = Math.pow(item.data.xp - offset[0], 2) + Math.pow(item.data.yp - offset[1], 2);
|
|
52676
53060
|
|
|
52677
53061
|
if (item.directHit) {
|
|
52678
|
-
// directHit는 최우선. 여러 directHit 중에서는 가장 가까운 것 선택.
|
|
52679
53062
|
if (!hasDirectHit || distance < minDistance) {
|
|
52680
53063
|
minDistance = distance;
|
|
52681
53064
|
hitId = sId;
|
|
@@ -52683,18 +53066,65 @@ var plugins_interaction_modules = {
|
|
|
52683
53066
|
|
|
52684
53067
|
hasDirectHit = true;
|
|
52685
53068
|
} else if (!hasDirectHit && distance < minDistance) {
|
|
52686
|
-
// directHit가 없을 때만 일반 hit 거리 비교
|
|
52687
53069
|
minDistance = distance;
|
|
52688
53070
|
hitId = sId;
|
|
52689
53071
|
}
|
|
53072
|
+
} // fallback 후보: hit 여부와 무관하게 거리가 가장 가까운 시리즈.
|
|
53073
|
+
// 참고: 이 블록은 outer `if (gdata !== null && gdata !== undefined)` 안에 있어서
|
|
53074
|
+
// 값이 null 인 시리즈는 items 수집 단계에서 이미 걸러진 상태. 별도 null 값 가드 불필요.
|
|
53075
|
+
|
|
53076
|
+
|
|
53077
|
+
if (item.data.xp !== undefined && item.data.yp !== undefined && item.data.xp !== null && item.data.yp !== null) {
|
|
53078
|
+
var fbDistance = helpers_util.calcBoxDistance(item.data, cx, cy);
|
|
53079
|
+
|
|
53080
|
+
if (fbDistance < fallbackDistance) {
|
|
53081
|
+
fallbackDistance = fbDistance;
|
|
53082
|
+
fallbackId = sId;
|
|
53083
|
+
}
|
|
52690
53084
|
}
|
|
52691
53085
|
}
|
|
52692
53086
|
}
|
|
52693
53087
|
}
|
|
53088
|
+
} // hit 없으면 거리 기반 fallback, 그것도 없으면 items 첫 키(항상 비어있을 가능성 방어).
|
|
53089
|
+
|
|
53090
|
+
|
|
53091
|
+
if (hitId === null) {
|
|
53092
|
+
hitId = fallbackId !== null ? fallbackId : Object.keys(items)[0];
|
|
53093
|
+
}
|
|
53094
|
+
|
|
53095
|
+
var maxHighlight = maxg !== null ? [maxSID, maxg] : null; // all-null 라벨인 경우 synthetic items[''] 로 label/index 만 채워 전달.
|
|
53096
|
+
|
|
53097
|
+
if (disableNullLabelSnap && Object.keys(items).length === 0 && targetDataIndex !== -1) {
|
|
53098
|
+
var _this$seriesList$refS;
|
|
53099
|
+
|
|
53100
|
+
var refSeriesID = sIds.find(function (sId) {
|
|
53101
|
+
var _s$data;
|
|
53102
|
+
|
|
53103
|
+
var s = _this4.seriesList[sId];
|
|
53104
|
+
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;
|
|
53105
|
+
});
|
|
53106
|
+
var refPoint = refSeriesID ? (_this$seriesList$refS = this.seriesList[refSeriesID].data) === null || _this$seriesList$refS === void 0 ? void 0 : _this$seriesList$refS[targetDataIndex] : null;
|
|
53107
|
+
|
|
53108
|
+
if (refPoint) {
|
|
53109
|
+
items[''] = {
|
|
53110
|
+
id: '',
|
|
53111
|
+
name: '',
|
|
53112
|
+
label: isHorizontal ? refPoint.y : refPoint.x,
|
|
53113
|
+
index: targetDataIndex,
|
|
53114
|
+
axis: {
|
|
53115
|
+
x: 0,
|
|
53116
|
+
y: 0
|
|
53117
|
+
},
|
|
53118
|
+
data: {
|
|
53119
|
+
o: undefined,
|
|
53120
|
+
x: refPoint.x,
|
|
53121
|
+
y: refPoint.y
|
|
53122
|
+
}
|
|
53123
|
+
};
|
|
53124
|
+
hitId = '';
|
|
53125
|
+
}
|
|
52694
53126
|
}
|
|
52695
53127
|
|
|
52696
|
-
hitId = hitId === null ? Object.keys(items)[0] : hitId;
|
|
52697
|
-
var maxHighlight = maxg !== null ? [maxSID, maxg] : null;
|
|
52698
53128
|
return {
|
|
52699
53129
|
items: items,
|
|
52700
53130
|
hitId: hitId,
|
|
@@ -52713,9 +53143,11 @@ var plugins_interaction_modules = {
|
|
|
52713
53143
|
var _this5 = this,
|
|
52714
53144
|
_this$seriesList$refe;
|
|
52715
53145
|
|
|
52716
|
-
var
|
|
52717
|
-
|
|
52718
|
-
|
|
53146
|
+
var disableNullLabelSnap = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
53147
|
+
|
|
53148
|
+
var _offset2 = _slicedToArray(offset, 2),
|
|
53149
|
+
xp = _offset2[0],
|
|
53150
|
+
yp = _offset2[1];
|
|
52719
53151
|
|
|
52720
53152
|
var isHorizontal = !!this.options.horizontal;
|
|
52721
53153
|
var mousePos = isHorizontal ? yp : xp; // 데이터 있는 시리즈를 기준으로 라벨 위치 확인
|
|
@@ -52768,11 +53200,10 @@ var plugins_interaction_modules = {
|
|
|
52768
53200
|
}
|
|
52769
53201
|
|
|
52770
53202
|
var closestDistance = Infinity;
|
|
52771
|
-
var closestIndex = -1; // 각 라벨에서 가장 가까운 것 찾기
|
|
53203
|
+
var closestIndex = -1; // 각 라벨에서 가장 가까운 것 찾기 (disableNullLabelSnap=true 면 all-null 라벨도 후보)
|
|
52772
53204
|
|
|
52773
53205
|
var _loop = function _loop(_i) {
|
|
52774
|
-
|
|
52775
|
-
var hasValidData = sIds.some(function (sId) {
|
|
53206
|
+
var hasValidData = disableNullLabelSnap || sIds.some(function (sId) {
|
|
52776
53207
|
var _series$data2, _series$data2$_i, _series$data3, _series$data3$_i;
|
|
52777
53208
|
|
|
52778
53209
|
var series = _this5.seriesList[sId];
|
|
@@ -53388,9 +53819,9 @@ var plugins_interaction_modules = {
|
|
|
53388
53819
|
* @returns {string}
|
|
53389
53820
|
*/
|
|
53390
53821
|
getCurMouseLocation: function getCurMouseLocation(offset) {
|
|
53391
|
-
var
|
|
53392
|
-
offsetX =
|
|
53393
|
-
offsetY =
|
|
53822
|
+
var _offset3 = _slicedToArray(offset, 2),
|
|
53823
|
+
offsetX = _offset3[0],
|
|
53824
|
+
offsetY = _offset3[1];
|
|
53394
53825
|
|
|
53395
53826
|
var aPos = {
|
|
53396
53827
|
x1: this.chartRect.x1 + this.labelOffset.left,
|