.
hoverLayerThreshold: 3e3,
// See: module:echarts/scale/Time
useUTC: false
};
var VISUAL_DIMENSIONS = createHashMap(["tooltip", "label", "itemName", "itemId", "itemGroupId", "itemChildGroupId", "seriesName"]);
var SOURCE_FORMAT_ORIGINAL = "original";
var SOURCE_FORMAT_ARRAY_ROWS = "arrayRows";
var SOURCE_FORMAT_OBJECT_ROWS = "objectRows";
var SOURCE_FORMAT_KEYED_COLUMNS = "keyedColumns";
var SOURCE_FORMAT_TYPED_ARRAY = "typedArray";
var SOURCE_FORMAT_UNKNOWN = "unknown";
var SERIES_LAYOUT_BY_COLUMN = "column";
var SERIES_LAYOUT_BY_ROW = "row";
var BE_ORDINAL = {
Must: 1,
Might: 2,
Not: 3
// Other cases
};
var innerGlobalModel = makeInner();
function resetSourceDefaulter(ecModel) {
innerGlobalModel(ecModel).datasetMap = createHashMap();
}
function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {
var encode = {};
var datasetModel = querySeriesUpstreamDatasetModel(seriesModel);
if (!datasetModel || !coordDimensions) {
return encode;
}
var encodeItemName = [];
var encodeSeriesName = [];
var ecModel = seriesModel.ecModel;
var datasetMap = innerGlobalModel(ecModel).datasetMap;
var key = datasetModel.uid + "_" + source.seriesLayoutBy;
var baseCategoryDimIndex;
var categoryWayValueDimStart;
coordDimensions = coordDimensions.slice();
each$f(coordDimensions, function(coordDimInfoLoose, coordDimIdx) {
var coordDimInfo = isObject$3(coordDimInfoLoose) ? coordDimInfoLoose : coordDimensions[coordDimIdx] = {
name: coordDimInfoLoose
};
if (coordDimInfo.type === "ordinal" && baseCategoryDimIndex == null) {
baseCategoryDimIndex = coordDimIdx;
categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimInfo);
}
encode[coordDimInfo.name] = [];
});
var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {
categoryWayDim: categoryWayValueDimStart,
valueWayDim: 0
});
each$f(coordDimensions, function(coordDimInfo, coordDimIdx) {
var coordDimName = coordDimInfo.name;
var count2 = getDataDimCountOnCoordDim(coordDimInfo);
if (baseCategoryDimIndex == null) {
var start = datasetRecord.valueWayDim;
pushDim(encode[coordDimName], start, count2);
pushDim(encodeSeriesName, start, count2);
datasetRecord.valueWayDim += count2;
} else if (baseCategoryDimIndex === coordDimIdx) {
pushDim(encode[coordDimName], 0, count2);
pushDim(encodeItemName, 0, count2);
} else {
var start = datasetRecord.categoryWayDim;
pushDim(encode[coordDimName], start, count2);
pushDim(encodeSeriesName, start, count2);
datasetRecord.categoryWayDim += count2;
}
});
function pushDim(dimIdxArr, idxFrom, idxCount) {
for (var i = 0; i < idxCount; i++) {
dimIdxArr.push(idxFrom + i);
}
}
function getDataDimCountOnCoordDim(coordDimInfo) {
var dimsDef = coordDimInfo.dimsDef;
return dimsDef ? dimsDef.length : 1;
}
encodeItemName.length && (encode.itemName = encodeItemName);
encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
return encode;
}
function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {
var encode = {};
var datasetModel = querySeriesUpstreamDatasetModel(seriesModel);
if (!datasetModel) {
return encode;
}
var sourceFormat = source.sourceFormat;
var dimensionsDefine = source.dimensionsDefine;
var potentialNameDimIndex;
if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
each$f(dimensionsDefine, function(dim, idx) {
if ((isObject$3(dim) ? dim.name : dim) === "name") {
potentialNameDimIndex = idx;
}
});
}
var idxResult = (function() {
var idxRes0 = {};
var idxRes1 = {};
var guessRecords = [];
for (var i = 0, len2 = Math.min(5, dimCount); i < len2; i++) {
var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i);
guessRecords.push(guessResult);
var isPureNumber = guessResult === BE_ORDINAL.Not;
if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {
idxRes0.v = i;
}
if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) {
idxRes0.n = i;
}
if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {
return idxRes0;
}
if (!isPureNumber) {
if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {
idxRes1.v = i;
}
if (idxRes1.n == null || idxRes1.n === idxRes1.v) {
idxRes1.n = i;
}
}
}
function fulfilled(idxResult2) {
return idxResult2.v != null && idxResult2.n != null;
}
return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;
})();
if (idxResult) {
encode.value = [idxResult.v];
var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n;
encode.itemName = [nameDimIndex];
encode.seriesName = [nameDimIndex];
}
return encode;
}
function querySeriesUpstreamDatasetModel(seriesModel) {
var thisData = seriesModel.get("data", true);
if (!thisData) {
return queryReferringComponents(seriesModel.ecModel, "dataset", {
index: seriesModel.get("datasetIndex", true),
id: seriesModel.get("datasetId", true)
}, SINGLE_REFERRING).models[0];
}
}
function queryDatasetUpstreamDatasetModels(datasetModel) {
if (!datasetModel.get("transform", true) && !datasetModel.get("fromTransformResult", true)) {
return [];
}
return queryReferringComponents(datasetModel.ecModel, "dataset", {
index: datasetModel.get("fromDatasetIndex", true),
id: datasetModel.get("fromDatasetId", true)
}, SINGLE_REFERRING).models;
}
function guessOrdinal(source, dimIndex) {
return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex);
}
function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) {
var result;
var maxLoop = 5;
if (isTypedArray(data)) {
return BE_ORDINAL.Not;
}
var dimName;
var dimType;
if (dimensionsDefine) {
var dimDefItem = dimensionsDefine[dimIndex];
if (isObject$3(dimDefItem)) {
dimName = dimDefItem.name;
dimType = dimDefItem.type;
} else if (isString(dimDefItem)) {
dimName = dimDefItem;
}
}
if (dimType != null) {
return dimType === "ordinal" ? BE_ORDINAL.Must : BE_ORDINAL.Not;
}
if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
var dataArrayRows = data;
if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
var sample = dataArrayRows[dimIndex];
for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {
if ((result = detectValue(sample[startIndex + i])) != null) {
return result;
}
}
} else {
for (var i = 0; i < dataArrayRows.length && i < maxLoop; i++) {
var row = dataArrayRows[startIndex + i];
if (row && (result = detectValue(row[dimIndex])) != null) {
return result;
}
}
}
} else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
var dataObjectRows = data;
if (!dimName) {
return BE_ORDINAL.Not;
}
for (var i = 0; i < dataObjectRows.length && i < maxLoop; i++) {
var item = dataObjectRows[i];
if (item && (result = detectValue(item[dimName])) != null) {
return result;
}
}
} else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
var dataKeyedColumns = data;
if (!dimName) {
return BE_ORDINAL.Not;
}
var sample = dataKeyedColumns[dimName];
if (!sample || isTypedArray(sample)) {
return BE_ORDINAL.Not;
}
for (var i = 0; i < sample.length && i < maxLoop; i++) {
if ((result = detectValue(sample[i])) != null) {
return result;
}
}
} else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
var dataOriginal = data;
for (var i = 0; i < dataOriginal.length && i < maxLoop; i++) {
var item = dataOriginal[i];
var val = getDataItemValue(item);
if (!isArray$1(val)) {
return BE_ORDINAL.Not;
}
if ((result = detectValue(val[dimIndex])) != null) {
return result;
}
}
}
function detectValue(val2) {
var beStr = isString(val2);
if (val2 != null && Number.isFinite(Number(val2)) && val2 !== "") {
return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;
} else if (beStr && val2 !== "-") {
return BE_ORDINAL.Must;
}
}
return BE_ORDINAL.Not;
}
var internalOptionCreatorMap = createHashMap();
function registerInternalOptionCreator(mainType, creator) {
assert(internalOptionCreatorMap.get(mainType) == null && creator);
internalOptionCreatorMap.set(mainType, creator);
}
function concatInternalOptions(ecModel, mainType, newCmptOptionList) {
var internalOptionCreator = internalOptionCreatorMap.get(mainType);
if (!internalOptionCreator) {
return newCmptOptionList;
}
var internalOptions = internalOptionCreator(ecModel);
if (!internalOptions) {
return newCmptOptionList;
}
return newCmptOptionList.concat(internalOptions);
}
var innerColor = makeInner();
var innerDecal = makeInner();
var PaletteMixin = (
/** @class */
(function() {
function PaletteMixin2() {
}
PaletteMixin2.prototype.getColorFromPalette = function(name, scope, requestNum) {
var defaultPalette = normalizeToArray(this.get("color", true));
var layeredPalette = this.get("colorLayer", true);
return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum);
};
PaletteMixin2.prototype.clearColorPalette = function() {
clearPalette(this, innerColor);
};
return PaletteMixin2;
})()
);
function getDecalFromPalette(ecModel, name, scope, requestNum) {
var defaultDecals = normalizeToArray(ecModel.get(["aria", "decal", "decals"]));
return getFromPalette(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum);
}
function getNearestPalette(palettes, requestColorNum) {
var paletteNum = palettes.length;
for (var i = 0; i < paletteNum; i++) {
if (palettes[i].length > requestColorNum) {
return palettes[i];
}
}
return palettes[paletteNum - 1];
}
function getFromPalette(that, inner2, defaultPalette, layeredPalette, name, scope, requestNum) {
scope = scope || that;
var scopeFields = inner2(scope);
var paletteIdx = scopeFields.paletteIdx || 0;
var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {};
if (paletteNameMap.hasOwnProperty(name)) {
return paletteNameMap[name];
}
var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum);
palette = palette || defaultPalette;
if (!palette || !palette.length) {
return;
}
var pickedPaletteItem = palette[paletteIdx];
if (name) {
paletteNameMap[name] = pickedPaletteItem;
}
scopeFields.paletteIdx = (paletteIdx + 1) % palette.length;
return pickedPaletteItem;
}
function clearPalette(that, inner2) {
inner2(that).paletteIdx = 0;
inner2(that).paletteNameMap = {};
}
var reCreateSeriesIndices;
var assertSeriesInitialized;
var initBase;
var OPTION_INNER_KEY = "\0_ec_inner";
var OPTION_INNER_VALUE = 1;
var GlobalModel = (
/** @class */
(function(_super) {
__extends(GlobalModel2, _super);
function GlobalModel2() {
return _super !== null && _super.apply(this, arguments) || this;
}
GlobalModel2.prototype.init = function(option, parentModel, ecModel, theme2, locale, optionManager) {
theme2 = theme2 || {};
this.option = null;
this._theme = new Model(theme2);
this._locale = new Model(locale);
this._optionManager = optionManager;
};
GlobalModel2.prototype.setOption = function(option, opts, optionPreprocessorFuncs2) {
var innerOpt = normalizeSetOptionInput(opts);
this._optionManager.setOption(option, optionPreprocessorFuncs2, innerOpt);
this._resetOption(null, innerOpt);
};
GlobalModel2.prototype.resetOption = function(type, opt) {
return this._resetOption(type, normalizeSetOptionInput(opt));
};
GlobalModel2.prototype._resetOption = function(type, opt) {
var optionChanged = false;
var optionManager = this._optionManager;
if (!type || type === "recreate") {
var baseOption = optionManager.mountOption(type === "recreate");
if (!this.option || type === "recreate") {
initBase(this, baseOption);
} else {
this.restoreData();
this._mergeOption(baseOption, opt);
}
optionChanged = true;
}
if (type === "timeline" || type === "media") {
this.restoreData();
}
if (!type || type === "recreate" || type === "timeline") {
var timelineOption = optionManager.getTimelineOption(this);
if (timelineOption) {
optionChanged = true;
this._mergeOption(timelineOption, opt);
}
}
if (!type || type === "recreate" || type === "media") {
var mediaOptions = optionManager.getMediaOption(this);
if (mediaOptions.length) {
each$f(mediaOptions, function(mediaOption) {
optionChanged = true;
this._mergeOption(mediaOption, opt);
}, this);
}
}
return optionChanged;
};
GlobalModel2.prototype.mergeOption = function(option) {
this._mergeOption(option, null);
};
GlobalModel2.prototype._mergeOption = function(newOption, opt) {
var option = this.option;
var componentsMap = this._componentsMap;
var componentsCount = this._componentsCount;
var newCmptTypes = [];
var newCmptTypeMap = createHashMap();
var replaceMergeMainTypeMap = opt && opt.replaceMergeMainTypeMap;
resetSourceDefaulter(this);
each$f(newOption, function(componentOption, mainType) {
if (componentOption == null) {
return;
}
if (!ComponentModel.hasClass(mainType)) {
option[mainType] = option[mainType] == null ? clone$1(componentOption) : merge(option[mainType], componentOption, true);
} else if (mainType) {
newCmptTypes.push(mainType);
newCmptTypeMap.set(mainType, true);
}
});
if (replaceMergeMainTypeMap) {
replaceMergeMainTypeMap.each(function(val, mainTypeInReplaceMerge) {
if (ComponentModel.hasClass(mainTypeInReplaceMerge) && !newCmptTypeMap.get(mainTypeInReplaceMerge)) {
newCmptTypes.push(mainTypeInReplaceMerge);
newCmptTypeMap.set(mainTypeInReplaceMerge, true);
}
});
}
ComponentModel.topologicalTravel(newCmptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this);
function visitComponent(mainType) {
var newCmptOptionList = concatInternalOptions(this, mainType, normalizeToArray(newOption[mainType]));
var oldCmptList = componentsMap.get(mainType);
var mergeMode = (
// `!oldCmptList` means init. See the comment in `mappingToExists`
!oldCmptList ? "replaceAll" : replaceMergeMainTypeMap && replaceMergeMainTypeMap.get(mainType) ? "replaceMerge" : "normalMerge"
);
var mappingResult = mappingToExists(oldCmptList, newCmptOptionList, mergeMode);
setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel);
option[mainType] = null;
componentsMap.set(mainType, null);
componentsCount.set(mainType, 0);
var optionsByMainType = [];
var cmptsByMainType = [];
var cmptsCountByMainType = 0;
var tooltipExists;
each$f(mappingResult, function(resultItem, index) {
var componentModel = resultItem.existing;
var newCmptOption = resultItem.newOption;
if (!newCmptOption) {
if (componentModel) {
componentModel.mergeOption({}, this);
componentModel.optionUpdated({}, false);
}
} else {
var isSeriesType = mainType === "series";
var ComponentModelClass = ComponentModel.getClass(
mainType,
resultItem.keyInfo.subType,
!isSeriesType
// Give a more detailed warn later if series don't exists
);
if (!ComponentModelClass) {
return;
}
if (mainType === "tooltip") {
if (tooltipExists) {
return;
}
tooltipExists = true;
}
if (componentModel && componentModel.constructor === ComponentModelClass) {
componentModel.name = resultItem.keyInfo.name;
componentModel.mergeOption(newCmptOption, this);
componentModel.optionUpdated(newCmptOption, false);
} else {
var extraOpt = extend({
componentIndex: index
}, resultItem.keyInfo);
componentModel = new ComponentModelClass(newCmptOption, this, this, extraOpt);
extend(componentModel, extraOpt);
if (resultItem.brandNew) {
componentModel.__requireNewView = true;
}
componentModel.init(newCmptOption, this, this);
componentModel.optionUpdated(null, true);
}
}
if (componentModel) {
optionsByMainType.push(componentModel.option);
cmptsByMainType.push(componentModel);
cmptsCountByMainType++;
} else {
optionsByMainType.push(void 0);
cmptsByMainType.push(void 0);
}
}, this);
option[mainType] = optionsByMainType;
componentsMap.set(mainType, cmptsByMainType);
componentsCount.set(mainType, cmptsCountByMainType);
if (mainType === "series") {
reCreateSeriesIndices(this);
}
}
if (!this._seriesIndices) {
reCreateSeriesIndices(this);
}
};
GlobalModel2.prototype.getOption = function() {
var option = clone$1(this.option);
each$f(option, function(optInMainType, mainType) {
if (ComponentModel.hasClass(mainType)) {
var opts = normalizeToArray(optInMainType);
var realLen = opts.length;
var metNonInner = false;
for (var i = realLen - 1; i >= 0; i--) {
if (opts[i] && !isComponentIdInternal(opts[i])) {
metNonInner = true;
} else {
opts[i] = null;
!metNonInner && realLen--;
}
}
opts.length = realLen;
option[mainType] = opts;
}
});
delete option[OPTION_INNER_KEY];
return option;
};
GlobalModel2.prototype.getTheme = function() {
return this._theme;
};
GlobalModel2.prototype.getLocaleModel = function() {
return this._locale;
};
GlobalModel2.prototype.setUpdatePayload = function(payload) {
this._payload = payload;
};
GlobalModel2.prototype.getUpdatePayload = function() {
return this._payload;
};
GlobalModel2.prototype.getComponent = function(mainType, idx) {
var list = this._componentsMap.get(mainType);
if (list) {
var cmpt = list[idx || 0];
if (cmpt) {
return cmpt;
} else if (idx == null) {
for (var i = 0; i < list.length; i++) {
if (list[i]) {
return list[i];
}
}
}
}
};
GlobalModel2.prototype.queryComponents = function(condition) {
var mainType = condition.mainType;
if (!mainType) {
return [];
}
var index = condition.index;
var id = condition.id;
var name = condition.name;
var cmpts = this._componentsMap.get(mainType);
if (!cmpts || !cmpts.length) {
return [];
}
var result;
if (index != null) {
result = [];
each$f(normalizeToArray(index), function(idx) {
cmpts[idx] && result.push(cmpts[idx]);
});
} else if (id != null) {
result = queryByIdOrName("id", id, cmpts);
} else if (name != null) {
result = queryByIdOrName("name", name, cmpts);
} else {
result = filter(cmpts, function(cmpt) {
return !!cmpt;
});
}
return filterBySubType(result, condition);
};
GlobalModel2.prototype.findComponents = function(condition) {
var query = condition.query;
var mainType = condition.mainType;
var queryCond = getQueryCond(query);
var result = queryCond ? this.queryComponents(queryCond) : filter(this._componentsMap.get(mainType), function(cmpt) {
return !!cmpt;
});
return doFilter(filterBySubType(result, condition));
function getQueryCond(q) {
var indexAttr = mainType + "Index";
var idAttr = mainType + "Id";
var nameAttr = mainType + "Name";
return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? {
mainType,
// subType will be filtered finally.
index: q[indexAttr],
id: q[idAttr],
name: q[nameAttr]
} : null;
}
function doFilter(res) {
return condition.filter ? filter(res, condition.filter) : res;
}
};
GlobalModel2.prototype.eachComponent = function(mainType, cb, context) {
var componentsMap = this._componentsMap;
if (isFunction(mainType)) {
var ctxForAll_1 = cb;
var cbForAll_1 = mainType;
componentsMap.each(function(cmpts2, componentType) {
for (var i2 = 0; cmpts2 && i2 < cmpts2.length; i2++) {
var cmpt2 = cmpts2[i2];
cmpt2 && cbForAll_1.call(ctxForAll_1, componentType, cmpt2, cmpt2.componentIndex);
}
});
} else {
var cmpts = isString(mainType) ? componentsMap.get(mainType) : isObject$3(mainType) ? this.findComponents(mainType) : null;
for (var i = 0; cmpts && i < cmpts.length; i++) {
var cmpt = cmpts[i];
cmpt && cb.call(context, cmpt, cmpt.componentIndex);
}
}
};
GlobalModel2.prototype.getSeriesByName = function(name) {
var nameStr = convertOptionIdName(name, null);
return filter(this._componentsMap.get("series"), function(oneSeries) {
return !!oneSeries && nameStr != null && oneSeries.name === nameStr;
});
};
GlobalModel2.prototype.getSeriesByIndex = function(seriesIndex) {
return this._componentsMap.get("series")[seriesIndex];
};
GlobalModel2.prototype.getSeriesByType = function(subType) {
return filter(this._componentsMap.get("series"), function(oneSeries) {
return !!oneSeries && oneSeries.subType === subType;
});
};
GlobalModel2.prototype.getSeries = function() {
return filter(this._componentsMap.get("series"), function(oneSeries) {
return !!oneSeries;
});
};
GlobalModel2.prototype.getSeriesCount = function() {
return this._componentsCount.get("series");
};
GlobalModel2.prototype.eachSeries = function(cb, context) {
assertSeriesInitialized(this);
each$f(this._seriesIndices, function(rawSeriesIndex) {
var series = this._componentsMap.get("series")[rawSeriesIndex];
cb.call(context, series, rawSeriesIndex);
}, this);
};
GlobalModel2.prototype.eachRawSeries = function(cb, context) {
each$f(this._componentsMap.get("series"), function(series) {
series && cb.call(context, series, series.componentIndex);
});
};
GlobalModel2.prototype.eachSeriesByType = function(subType, cb, context) {
assertSeriesInitialized(this);
each$f(this._seriesIndices, function(rawSeriesIndex) {
var series = this._componentsMap.get("series")[rawSeriesIndex];
if (series.subType === subType) {
cb.call(context, series, rawSeriesIndex);
}
}, this);
};
GlobalModel2.prototype.eachRawSeriesByType = function(subType, cb, context) {
return each$f(this.getSeriesByType(subType), cb, context);
};
GlobalModel2.prototype.isSeriesFiltered = function(seriesModel) {
assertSeriesInitialized(this);
return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;
};
GlobalModel2.prototype.getCurrentSeriesIndices = function() {
return (this._seriesIndices || []).slice();
};
GlobalModel2.prototype.filterSeries = function(cb, context) {
assertSeriesInitialized(this);
var newSeriesIndices = [];
each$f(this._seriesIndices, function(seriesRawIdx) {
var series = this._componentsMap.get("series")[seriesRawIdx];
cb.call(context, series, seriesRawIdx) && newSeriesIndices.push(seriesRawIdx);
}, this);
this._seriesIndices = newSeriesIndices;
this._seriesIndicesMap = createHashMap(newSeriesIndices);
};
GlobalModel2.prototype.restoreData = function(payload) {
reCreateSeriesIndices(this);
var componentsMap = this._componentsMap;
var componentTypes = [];
componentsMap.each(function(components, componentType) {
if (ComponentModel.hasClass(componentType)) {
componentTypes.push(componentType);
}
});
ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function(componentType) {
each$f(componentsMap.get(componentType), function(component) {
if (component && (componentType !== "series" || !isNotTargetSeries(component, payload))) {
component.restoreData();
}
});
});
};
GlobalModel2.internalField = (function() {
reCreateSeriesIndices = function(ecModel) {
var seriesIndices = ecModel._seriesIndices = [];
each$f(ecModel._componentsMap.get("series"), function(series) {
series && seriesIndices.push(series.componentIndex);
});
ecModel._seriesIndicesMap = createHashMap(seriesIndices);
};
assertSeriesInitialized = function(ecModel) {
};
initBase = function(ecModel, baseOption) {
ecModel.option = {};
ecModel.option[OPTION_INNER_KEY] = OPTION_INNER_VALUE;
ecModel._componentsMap = createHashMap({
series: []
});
ecModel._componentsCount = createHashMap();
var airaOption = baseOption.aria;
if (isObject$3(airaOption) && airaOption.enabled == null) {
airaOption.enabled = true;
}
mergeTheme(baseOption, ecModel._theme.option);
merge(baseOption, globalDefault, false);
ecModel._mergeOption(baseOption, null);
};
})();
return GlobalModel2;
})(Model)
);
function isNotTargetSeries(seriesModel, payload) {
if (payload) {
var index = payload.seriesIndex;
var id = payload.seriesId;
var name_1 = payload.seriesName;
return index != null && seriesModel.componentIndex !== index || id != null && seriesModel.id !== id || name_1 != null && seriesModel.name !== name_1;
}
}
function mergeTheme(option, theme2) {
var notMergeColorLayer = option.color && !option.colorLayer;
each$f(theme2, function(themeItem, name) {
if (name === "colorLayer" && notMergeColorLayer) {
return;
}
if (!ComponentModel.hasClass(name)) {
if (typeof themeItem === "object") {
option[name] = !option[name] ? clone$1(themeItem) : merge(option[name], themeItem, false);
} else {
if (option[name] == null) {
option[name] = themeItem;
}
}
}
});
}
function queryByIdOrName(attr, idOrName, cmpts) {
if (isArray$1(idOrName)) {
var keyMap_1 = createHashMap();
each$f(idOrName, function(idOrNameItem) {
if (idOrNameItem != null) {
var idName = convertOptionIdName(idOrNameItem, null);
idName != null && keyMap_1.set(idOrNameItem, true);
}
});
return filter(cmpts, function(cmpt) {
return cmpt && keyMap_1.get(cmpt[attr]);
});
} else {
var idName_1 = convertOptionIdName(idOrName, null);
return filter(cmpts, function(cmpt) {
return cmpt && idName_1 != null && cmpt[attr] === idName_1;
});
}
}
function filterBySubType(components, condition) {
return condition.hasOwnProperty("subType") ? filter(components, function(cmpt) {
return cmpt && cmpt.subType === condition.subType;
}) : components;
}
function normalizeSetOptionInput(opts) {
var replaceMergeMainTypeMap = createHashMap();
opts && each$f(normalizeToArray(opts.replaceMerge), function(mainType) {
replaceMergeMainTypeMap.set(mainType, true);
});
return {
replaceMergeMainTypeMap
};
}
mixin(GlobalModel, PaletteMixin);
var availableMethods = [
"getDom",
"getZr",
"getWidth",
"getHeight",
"getDevicePixelRatio",
"dispatchAction",
"isSSR",
"isDisposed",
"on",
"off",
"getDataURL",
"getConnectedDataURL",
// 'getModel',
"getOption",
// 'getViewOfComponentModel',
// 'getViewOfSeriesModel',
"getId",
"updateLabelLayout"
];
var ExtensionAPI = (
/** @class */
/* @__PURE__ */ (function() {
function ExtensionAPI2(ecInstance) {
each$f(availableMethods, function(methodName) {
this[methodName] = bind$1(ecInstance[methodName], ecInstance);
}, this);
}
return ExtensionAPI2;
})()
);
var coordinateSystemCreators = {};
var CoordinateSystemManager = (
/** @class */
(function() {
function CoordinateSystemManager2() {
this._coordinateSystems = [];
}
CoordinateSystemManager2.prototype.create = function(ecModel, api) {
var coordinateSystems = [];
each$f(coordinateSystemCreators, function(creator, type) {
var list = creator.create(ecModel, api);
coordinateSystems = coordinateSystems.concat(list || []);
});
this._coordinateSystems = coordinateSystems;
};
CoordinateSystemManager2.prototype.update = function(ecModel, api) {
each$f(this._coordinateSystems, function(coordSys) {
coordSys.update && coordSys.update(ecModel, api);
});
};
CoordinateSystemManager2.prototype.getCoordinateSystems = function() {
return this._coordinateSystems.slice();
};
CoordinateSystemManager2.register = function(type, creator) {
coordinateSystemCreators[type] = creator;
};
CoordinateSystemManager2.get = function(type) {
return coordinateSystemCreators[type];
};
return CoordinateSystemManager2;
})()
);
var QUERY_REG = /^(min|max)?(.+)$/;
var OptionManager = (
/** @class */
(function() {
function OptionManager2(api) {
this._timelineOptions = [];
this._mediaList = [];
this._currentMediaIndices = [];
this._api = api;
}
OptionManager2.prototype.setOption = function(rawOption, optionPreprocessorFuncs2, opt) {
if (rawOption) {
each$f(normalizeToArray(rawOption.series), function(series) {
series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);
});
each$f(normalizeToArray(rawOption.dataset), function(dataset) {
dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source);
});
}
rawOption = clone$1(rawOption);
var optionBackup = this._optionBackup;
var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs2, !optionBackup);
this._newBaseOption = newParsedOption.baseOption;
if (optionBackup) {
if (newParsedOption.timelineOptions.length) {
optionBackup.timelineOptions = newParsedOption.timelineOptions;
}
if (newParsedOption.mediaList.length) {
optionBackup.mediaList = newParsedOption.mediaList;
}
if (newParsedOption.mediaDefault) {
optionBackup.mediaDefault = newParsedOption.mediaDefault;
}
} else {
this._optionBackup = newParsedOption;
}
};
OptionManager2.prototype.mountOption = function(isRecreate) {
var optionBackup = this._optionBackup;
this._timelineOptions = optionBackup.timelineOptions;
this._mediaList = optionBackup.mediaList;
this._mediaDefault = optionBackup.mediaDefault;
this._currentMediaIndices = [];
return clone$1(isRecreate ? optionBackup.baseOption : this._newBaseOption);
};
OptionManager2.prototype.getTimelineOption = function(ecModel) {
var option;
var timelineOptions = this._timelineOptions;
if (timelineOptions.length) {
var timelineModel = ecModel.getComponent("timeline");
if (timelineModel) {
option = clone$1(
// FIXME:TS as TimelineModel or quivlant interface
timelineOptions[timelineModel.getCurrentIndex()]
);
}
}
return option;
};
OptionManager2.prototype.getMediaOption = function(ecModel) {
var ecWidth = this._api.getWidth();
var ecHeight = this._api.getHeight();
var mediaList = this._mediaList;
var mediaDefault = this._mediaDefault;
var indices = [];
var result = [];
if (!mediaList.length && !mediaDefault) {
return result;
}
for (var i = 0, len2 = mediaList.length; i < len2; i++) {
if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {
indices.push(i);
}
}
if (!indices.length && mediaDefault) {
indices = [-1];
}
if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {
result = map$1(indices, function(index) {
return clone$1(index === -1 ? mediaDefault.option : mediaList[index].option);
});
}
this._currentMediaIndices = indices;
return result;
};
return OptionManager2;
})()
);
function parseRawOption(rawOption, optionPreprocessorFuncs2, isNew) {
var mediaList = [];
var mediaDefault;
var baseOption;
var declaredBaseOption = rawOption.baseOption;
var timelineOnRoot = rawOption.timeline;
var timelineOptionsOnRoot = rawOption.options;
var mediaOnRoot = rawOption.media;
var hasMedia = !!rawOption.media;
var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline);
if (declaredBaseOption) {
baseOption = declaredBaseOption;
if (!baseOption.timeline) {
baseOption.timeline = timelineOnRoot;
}
} else {
if (hasTimeline || hasMedia) {
rawOption.options = rawOption.media = null;
}
baseOption = rawOption;
}
if (hasMedia) {
if (isArray$1(mediaOnRoot)) {
each$f(mediaOnRoot, function(singleMedia) {
if (singleMedia && singleMedia.option) {
if (singleMedia.query) {
mediaList.push(singleMedia);
} else if (!mediaDefault) {
mediaDefault = singleMedia;
}
}
});
}
}
doPreprocess(baseOption);
each$f(timelineOptionsOnRoot, function(option) {
return doPreprocess(option);
});
each$f(mediaList, function(media) {
return doPreprocess(media.option);
});
function doPreprocess(option) {
each$f(optionPreprocessorFuncs2, function(preProcess) {
preProcess(option, isNew);
});
}
return {
baseOption,
timelineOptions: timelineOptionsOnRoot || [],
mediaDefault,
mediaList
};
}
function applyMediaQuery(query, ecWidth, ecHeight) {
var realMap = {
width: ecWidth,
height: ecHeight,
aspectratio: ecWidth / ecHeight
// lower case for convenience.
};
var applicable = true;
each$f(query, function(value, attr) {
var matched = attr.match(QUERY_REG);
if (!matched || !matched[1] || !matched[2]) {
return;
}
var operator = matched[1];
var realAttr = matched[2].toLowerCase();
if (!compare(realMap[realAttr], value, operator)) {
applicable = false;
}
});
return applicable;
}
function compare(real, expect, operator) {
if (operator === "min") {
return real >= expect;
} else if (operator === "max") {
return real <= expect;
} else {
return real === expect;
}
}
function indicesEquals(indices1, indices2) {
return indices1.join(",") === indices2.join(",");
}
var each$d = each$f;
var isObject$2 = isObject$3;
var POSSIBLE_STYLES = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"];
function compatEC2ItemStyle(opt) {
var itemStyleOpt = opt && opt.itemStyle;
if (!itemStyleOpt) {
return;
}
for (var i = 0, len2 = POSSIBLE_STYLES.length; i < len2; i++) {
var styleName = POSSIBLE_STYLES[i];
var normalItemStyleOpt = itemStyleOpt.normal;
var emphasisItemStyleOpt = itemStyleOpt.emphasis;
if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {
opt[styleName] = opt[styleName] || {};
if (!opt[styleName].normal) {
opt[styleName].normal = normalItemStyleOpt[styleName];
} else {
merge(opt[styleName].normal, normalItemStyleOpt[styleName]);
}
normalItemStyleOpt[styleName] = null;
}
if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {
opt[styleName] = opt[styleName] || {};
if (!opt[styleName].emphasis) {
opt[styleName].emphasis = emphasisItemStyleOpt[styleName];
} else {
merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);
}
emphasisItemStyleOpt[styleName] = null;
}
}
}
function convertNormalEmphasis(opt, optType, useExtend) {
if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {
var normalOpt = opt[optType].normal;
var emphasisOpt = opt[optType].emphasis;
if (normalOpt) {
if (useExtend) {
opt[optType].normal = opt[optType].emphasis = null;
defaults(opt[optType], normalOpt);
} else {
opt[optType] = normalOpt;
}
}
if (emphasisOpt) {
opt.emphasis = opt.emphasis || {};
opt.emphasis[optType] = emphasisOpt;
if (emphasisOpt.focus) {
opt.emphasis.focus = emphasisOpt.focus;
}
if (emphasisOpt.blurScope) {
opt.emphasis.blurScope = emphasisOpt.blurScope;
}
}
}
}
function removeEC3NormalStatus(opt) {
convertNormalEmphasis(opt, "itemStyle");
convertNormalEmphasis(opt, "lineStyle");
convertNormalEmphasis(opt, "areaStyle");
convertNormalEmphasis(opt, "label");
convertNormalEmphasis(opt, "labelLine");
convertNormalEmphasis(opt, "upperLabel");
convertNormalEmphasis(opt, "edgeLabel");
}
function compatTextStyle(opt, propName) {
var labelOptSingle = isObject$2(opt) && opt[propName];
var textStyle = isObject$2(labelOptSingle) && labelOptSingle.textStyle;
if (textStyle) {
for (var i = 0, len2 = TEXT_STYLE_OPTIONS.length; i < len2; i++) {
var textPropName = TEXT_STYLE_OPTIONS[i];
if (textStyle.hasOwnProperty(textPropName)) {
labelOptSingle[textPropName] = textStyle[textPropName];
}
}
}
}
function compatEC3CommonStyles(opt) {
if (opt) {
removeEC3NormalStatus(opt);
compatTextStyle(opt, "label");
opt.emphasis && compatTextStyle(opt.emphasis, "label");
}
}
function processSeries(seriesOpt) {
if (!isObject$2(seriesOpt)) {
return;
}
compatEC2ItemStyle(seriesOpt);
removeEC3NormalStatus(seriesOpt);
compatTextStyle(seriesOpt, "label");
compatTextStyle(seriesOpt, "upperLabel");
compatTextStyle(seriesOpt, "edgeLabel");
if (seriesOpt.emphasis) {
compatTextStyle(seriesOpt.emphasis, "label");
compatTextStyle(seriesOpt.emphasis, "upperLabel");
compatTextStyle(seriesOpt.emphasis, "edgeLabel");
}
var markPoint = seriesOpt.markPoint;
if (markPoint) {
compatEC2ItemStyle(markPoint);
compatEC3CommonStyles(markPoint);
}
var markLine = seriesOpt.markLine;
if (markLine) {
compatEC2ItemStyle(markLine);
compatEC3CommonStyles(markLine);
}
var markArea = seriesOpt.markArea;
if (markArea) {
compatEC3CommonStyles(markArea);
}
var data = seriesOpt.data;
if (seriesOpt.type === "graph") {
data = data || seriesOpt.nodes;
var edgeData = seriesOpt.links || seriesOpt.edges;
if (edgeData && !isTypedArray(edgeData)) {
for (var i = 0; i < edgeData.length; i++) {
compatEC3CommonStyles(edgeData[i]);
}
}
each$f(seriesOpt.categories, function(opt) {
removeEC3NormalStatus(opt);
});
}
if (data && !isTypedArray(data)) {
for (var i = 0; i < data.length; i++) {
compatEC3CommonStyles(data[i]);
}
}
markPoint = seriesOpt.markPoint;
if (markPoint && markPoint.data) {
var mpData = markPoint.data;
for (var i = 0; i < mpData.length; i++) {
compatEC3CommonStyles(mpData[i]);
}
}
markLine = seriesOpt.markLine;
if (markLine && markLine.data) {
var mlData = markLine.data;
for (var i = 0; i < mlData.length; i++) {
if (isArray$1(mlData[i])) {
compatEC3CommonStyles(mlData[i][0]);
compatEC3CommonStyles(mlData[i][1]);
} else {
compatEC3CommonStyles(mlData[i]);
}
}
}
if (seriesOpt.type === "gauge") {
compatTextStyle(seriesOpt, "axisLabel");
compatTextStyle(seriesOpt, "title");
compatTextStyle(seriesOpt, "detail");
} else if (seriesOpt.type === "treemap") {
convertNormalEmphasis(seriesOpt.breadcrumb, "itemStyle");
each$f(seriesOpt.levels, function(opt) {
removeEC3NormalStatus(opt);
});
} else if (seriesOpt.type === "tree") {
removeEC3NormalStatus(seriesOpt.leaves);
}
}
function toArr(o) {
return isArray$1(o) ? o : o ? [o] : [];
}
function toObj(o) {
return (isArray$1(o) ? o[0] : o) || {};
}
function globalCompatStyle(option, isTheme) {
each$d(toArr(option.series), function(seriesOpt) {
isObject$2(seriesOpt) && processSeries(seriesOpt);
});
var axes = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"];
isTheme && axes.push("valueAxis", "categoryAxis", "logAxis", "timeAxis");
each$d(axes, function(axisName) {
each$d(toArr(option[axisName]), function(axisOpt) {
if (axisOpt) {
compatTextStyle(axisOpt, "axisLabel");
compatTextStyle(axisOpt.axisPointer, "label");
}
});
});
each$d(toArr(option.parallel), function(parallelOpt) {
var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;
compatTextStyle(parallelAxisDefault, "axisLabel");
compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, "label");
});
each$d(toArr(option.calendar), function(calendarOpt) {
convertNormalEmphasis(calendarOpt, "itemStyle");
compatTextStyle(calendarOpt, "dayLabel");
compatTextStyle(calendarOpt, "monthLabel");
compatTextStyle(calendarOpt, "yearLabel");
});
each$d(toArr(option.radar), function(radarOpt) {
compatTextStyle(radarOpt, "name");
if (radarOpt.name && radarOpt.axisName == null) {
radarOpt.axisName = radarOpt.name;
delete radarOpt.name;
}
if (radarOpt.nameGap != null && radarOpt.axisNameGap == null) {
radarOpt.axisNameGap = radarOpt.nameGap;
delete radarOpt.nameGap;
}
});
each$d(toArr(option.geo), function(geoOpt) {
if (isObject$2(geoOpt)) {
compatEC3CommonStyles(geoOpt);
each$d(toArr(geoOpt.regions), function(regionObj) {
compatEC3CommonStyles(regionObj);
});
}
});
each$d(toArr(option.timeline), function(timelineOpt) {
compatEC3CommonStyles(timelineOpt);
convertNormalEmphasis(timelineOpt, "label");
convertNormalEmphasis(timelineOpt, "itemStyle");
convertNormalEmphasis(timelineOpt, "controlStyle", true);
var data = timelineOpt.data;
isArray$1(data) && each$f(data, function(item) {
if (isObject$3(item)) {
convertNormalEmphasis(item, "label");
convertNormalEmphasis(item, "itemStyle");
}
});
});
each$d(toArr(option.toolbox), function(toolboxOpt) {
convertNormalEmphasis(toolboxOpt, "iconStyle");
each$d(toolboxOpt.feature, function(featureOpt) {
convertNormalEmphasis(featureOpt, "iconStyle");
});
});
compatTextStyle(toObj(option.axisPointer), "label");
compatTextStyle(toObj(option.tooltip).axisPointer, "label");
}
function get(opt, path) {
var pathArr = path.split(",");
var obj = opt;
for (var i = 0; i < pathArr.length; i++) {
obj = obj && obj[pathArr[i]];
if (obj == null) {
break;
}
}
return obj;
}
function set(opt, path, val, overwrite) {
var pathArr = path.split(",");
var obj = opt;
var key;
var i = 0;
for (; i < pathArr.length - 1; i++) {
key = pathArr[i];
if (obj[key] == null) {
obj[key] = {};
}
obj = obj[key];
}
if (obj[pathArr[i]] == null) {
obj[pathArr[i]] = val;
}
}
function compatLayoutProperties(option) {
option && each$f(LAYOUT_PROPERTIES, function(prop) {
if (prop[0] in option && !(prop[1] in option)) {
option[prop[1]] = option[prop[0]];
}
});
}
var LAYOUT_PROPERTIES = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"]];
var COMPATITABLE_COMPONENTS = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"];
var BAR_ITEM_STYLE_MAP = [["borderRadius", "barBorderRadius"], ["borderColor", "barBorderColor"], ["borderWidth", "barBorderWidth"]];
function compatBarItemStyle(option) {
var itemStyle = option && option.itemStyle;
if (itemStyle) {
for (var i = 0; i < BAR_ITEM_STYLE_MAP.length; i++) {
var oldName = BAR_ITEM_STYLE_MAP[i][1];
var newName = BAR_ITEM_STYLE_MAP[i][0];
if (itemStyle[oldName] != null) {
itemStyle[newName] = itemStyle[oldName];
}
}
}
}
function compatPieLabel(option) {
if (!option) {
return;
}
if (option.alignTo === "edge" && option.margin != null && option.edgeDistance == null) {
option.edgeDistance = option.margin;
}
}
function compatSunburstState(option) {
if (!option) {
return;
}
if (option.downplay && !option.blur) {
option.blur = option.downplay;
}
}
function compatGraphFocus(option) {
if (!option) {
return;
}
if (option.focusNodeAdjacency != null) {
option.emphasis = option.emphasis || {};
if (option.emphasis.focus == null) {
option.emphasis.focus = "adjacency";
}
}
}
function traverseTree(data, cb) {
if (data) {
for (var i = 0; i < data.length; i++) {
cb(data[i]);
data[i] && traverseTree(data[i].children, cb);
}
}
}
function globalBackwardCompat(option, isTheme) {
globalCompatStyle(option, isTheme);
option.series = normalizeToArray(option.series);
each$f(option.series, function(seriesOpt) {
if (!isObject$3(seriesOpt)) {
return;
}
var seriesType2 = seriesOpt.type;
if (seriesType2 === "line") {
if (seriesOpt.clipOverflow != null) {
seriesOpt.clip = seriesOpt.clipOverflow;
}
} else if (seriesType2 === "pie" || seriesType2 === "gauge") {
if (seriesOpt.clockWise != null) {
seriesOpt.clockwise = seriesOpt.clockWise;
}
compatPieLabel(seriesOpt.label);
var data = seriesOpt.data;
if (data && !isTypedArray(data)) {
for (var i = 0; i < data.length; i++) {
compatPieLabel(data[i]);
}
}
if (seriesOpt.hoverOffset != null) {
seriesOpt.emphasis = seriesOpt.emphasis || {};
if (seriesOpt.emphasis.scaleSize = null) {
seriesOpt.emphasis.scaleSize = seriesOpt.hoverOffset;
}
}
} else if (seriesType2 === "gauge") {
var pointerColor = get(seriesOpt, "pointer.color");
pointerColor != null && set(seriesOpt, "itemStyle.color", pointerColor);
} else if (seriesType2 === "bar") {
compatBarItemStyle(seriesOpt);
compatBarItemStyle(seriesOpt.backgroundStyle);
compatBarItemStyle(seriesOpt.emphasis);
var data = seriesOpt.data;
if (data && !isTypedArray(data)) {
for (var i = 0; i < data.length; i++) {
if (typeof data[i] === "object") {
compatBarItemStyle(data[i]);
compatBarItemStyle(data[i] && data[i].emphasis);
}
}
}
} else if (seriesType2 === "sunburst") {
var highlightPolicy = seriesOpt.highlightPolicy;
if (highlightPolicy) {
seriesOpt.emphasis = seriesOpt.emphasis || {};
if (!seriesOpt.emphasis.focus) {
seriesOpt.emphasis.focus = highlightPolicy;
}
}
compatSunburstState(seriesOpt);
traverseTree(seriesOpt.data, compatSunburstState);
} else if (seriesType2 === "graph" || seriesType2 === "sankey") {
compatGraphFocus(seriesOpt);
} else if (seriesType2 === "map") {
if (seriesOpt.mapType && !seriesOpt.map) {
seriesOpt.map = seriesOpt.mapType;
}
if (seriesOpt.mapLocation) {
defaults(seriesOpt, seriesOpt.mapLocation);
}
}
if (seriesOpt.hoverAnimation != null) {
seriesOpt.emphasis = seriesOpt.emphasis || {};
if (seriesOpt.emphasis && seriesOpt.emphasis.scale == null) {
seriesOpt.emphasis.scale = seriesOpt.hoverAnimation;
}
}
compatLayoutProperties(seriesOpt);
});
if (option.dataRange) {
option.visualMap = option.dataRange;
}
each$f(COMPATITABLE_COMPONENTS, function(componentName) {
var options = option[componentName];
if (options) {
if (!isArray$1(options)) {
options = [options];
}
each$f(options, function(option2) {
compatLayoutProperties(option2);
});
}
});
}
function dataStack(ecModel) {
var stackInfoMap = createHashMap();
ecModel.eachSeries(function(seriesModel) {
var stack = seriesModel.get("stack");
if (stack) {
var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);
var data = seriesModel.getData();
var stackInfo = {
// Used for calculate axis extent automatically.
// TODO: Type getCalculationInfo return more specific type?
stackResultDimension: data.getCalculationInfo("stackResultDimension"),
stackedOverDimension: data.getCalculationInfo("stackedOverDimension"),
stackedDimension: data.getCalculationInfo("stackedDimension"),
stackedByDimension: data.getCalculationInfo("stackedByDimension"),
isStackedByIndex: data.getCalculationInfo("isStackedByIndex"),
data,
seriesModel
};
if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) {
return;
}
stackInfoList.length && data.setCalculationInfo("stackedOnSeries", stackInfoList[stackInfoList.length - 1].seriesModel);
stackInfoList.push(stackInfo);
}
});
stackInfoMap.each(calculateStack);
}
function calculateStack(stackInfoList) {
each$f(stackInfoList, function(targetStackInfo, idxInStack) {
var resultVal = [];
var resultNaN = [NaN, NaN];
var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];
var targetData = targetStackInfo.data;
var isStackedByIndex = targetStackInfo.isStackedByIndex;
var stackStrategy = targetStackInfo.seriesModel.get("stackStrategy") || "samesign";
targetData.modify(dims, function(v0, v12, dataIndex) {
var sum2 = targetData.get(targetStackInfo.stackedDimension, dataIndex);
if (isNaN(sum2)) {
return resultNaN;
}
var byValue;
var stackedDataRawIndex;
if (isStackedByIndex) {
stackedDataRawIndex = targetData.getRawIndex(dataIndex);
} else {
byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);
}
var stackedOver = NaN;
for (var j = idxInStack - 1; j >= 0; j--) {
var stackInfo = stackInfoList[j];
if (!isStackedByIndex) {
stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);
}
if (stackedDataRawIndex >= 0) {
var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex);
if (stackStrategy === "all" || stackStrategy === "positive" && val > 0 || stackStrategy === "negative" && val < 0 || stackStrategy === "samesign" && sum2 >= 0 && val > 0 || stackStrategy === "samesign" && sum2 <= 0 && val < 0) {
sum2 = addSafe(sum2, val);
stackedOver = val;
break;
}
}
}
resultVal[0] = sum2;
resultVal[1] = stackedOver;
return resultVal;
});
});
}
var SourceImpl = (
/** @class */
/* @__PURE__ */ (function() {
function SourceImpl2(fields) {
this.data = fields.data || (fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []);
this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;
this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;
this.startIndex = fields.startIndex || 0;
this.dimensionsDetectedCount = fields.dimensionsDetectedCount;
this.metaRawOption = fields.metaRawOption;
var dimensionsDefine = this.dimensionsDefine = fields.dimensionsDefine;
if (dimensionsDefine) {
for (var i = 0; i < dimensionsDefine.length; i++) {
var dim = dimensionsDefine[i];
if (dim.type == null) {
if (guessOrdinal(this, i) === BE_ORDINAL.Must) {
dim.type = "ordinal";
}
}
}
}
}
return SourceImpl2;
})()
);
function isSourceInstance(val) {
return val instanceof SourceImpl;
}
function createSource(sourceData, thisMetaRawOption, sourceFormat) {
sourceFormat = sourceFormat || detectSourceFormat(sourceData);
var seriesLayoutBy = thisMetaRawOption.seriesLayoutBy;
var determined = determineSourceDimensions(sourceData, sourceFormat, seriesLayoutBy, thisMetaRawOption.sourceHeader, thisMetaRawOption.dimensions);
var source = new SourceImpl({
data: sourceData,
sourceFormat,
seriesLayoutBy,
dimensionsDefine: determined.dimensionsDefine,
startIndex: determined.startIndex,
dimensionsDetectedCount: determined.dimensionsDetectedCount,
metaRawOption: clone$1(thisMetaRawOption)
});
return source;
}
function createSourceFromSeriesDataOption(data) {
return new SourceImpl({
data,
sourceFormat: isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL
});
}
function cloneSourceShallow(source) {
return new SourceImpl({
data: source.data,
sourceFormat: source.sourceFormat,
seriesLayoutBy: source.seriesLayoutBy,
dimensionsDefine: clone$1(source.dimensionsDefine),
startIndex: source.startIndex,
dimensionsDetectedCount: source.dimensionsDetectedCount
});
}
function detectSourceFormat(data) {
var sourceFormat = SOURCE_FORMAT_UNKNOWN;
if (isTypedArray(data)) {
sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;
} else if (isArray$1(data)) {
if (data.length === 0) {
sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;
}
for (var i = 0, len2 = data.length; i < len2; i++) {
var item = data[i];
if (item == null) {
continue;
} else if (isArray$1(item) || isTypedArray(item)) {
sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;
break;
} else if (isObject$3(item)) {
sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;
break;
}
}
} else if (isObject$3(data)) {
for (var key in data) {
if (hasOwn(data, key) && isArrayLike(data[key])) {
sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;
break;
}
}
}
return sourceFormat;
}
function determineSourceDimensions(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {
var dimensionsDetectedCount;
var startIndex;
if (!data) {
return {
dimensionsDefine: normalizeDimensionsOption(dimensionsDefine),
startIndex,
dimensionsDetectedCount
};
}
if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
var dataArrayRows = data;
if (sourceHeader === "auto" || sourceHeader == null) {
arrayRowsTravelFirst(function(val) {
if (val != null && val !== "-") {
if (isString(val)) {
startIndex == null && (startIndex = 1);
} else {
startIndex = 0;
}
}
}, seriesLayoutBy, dataArrayRows, 10);
} else {
startIndex = isNumber(sourceHeader) ? sourceHeader : sourceHeader ? 1 : 0;
}
if (!dimensionsDefine && startIndex === 1) {
dimensionsDefine = [];
arrayRowsTravelFirst(function(val, index) {
dimensionsDefine[index] = val != null ? val + "" : "";
}, seriesLayoutBy, dataArrayRows, Infinity);
}
dimensionsDetectedCount = dimensionsDefine ? dimensionsDefine.length : seriesLayoutBy === SERIES_LAYOUT_BY_ROW ? dataArrayRows.length : dataArrayRows[0] ? dataArrayRows[0].length : null;
} else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
if (!dimensionsDefine) {
dimensionsDefine = objectRowsCollectDimensions(data);
}
} else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
if (!dimensionsDefine) {
dimensionsDefine = [];
each$f(data, function(colArr, key) {
dimensionsDefine.push(key);
});
}
} else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
var value0 = getDataItemValue(data[0]);
dimensionsDetectedCount = isArray$1(value0) && value0.length || 1;
} else ;
return {
startIndex,
dimensionsDefine: normalizeDimensionsOption(dimensionsDefine),
dimensionsDetectedCount
};
}
function objectRowsCollectDimensions(data) {
var firstIndex = 0;
var obj;
while (firstIndex < data.length && !(obj = data[firstIndex++])) {
}
if (obj) {
return keys(obj);
}
}
function normalizeDimensionsOption(dimensionsDefine) {
if (!dimensionsDefine) {
return;
}
var nameMap = createHashMap();
return map$1(dimensionsDefine, function(rawItem, index) {
rawItem = isObject$3(rawItem) ? rawItem : {
name: rawItem
};
var item = {
name: rawItem.name,
displayName: rawItem.displayName,
type: rawItem.type
};
if (item.name == null) {
return item;
}
item.name += "";
if (item.displayName == null) {
item.displayName = item.name;
}
var exist = nameMap.get(item.name);
if (!exist) {
nameMap.set(item.name, {
count: 1
});
} else {
item.name += "-" + exist.count++;
}
return item;
});
}
function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {
if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
for (var i = 0; i < data.length && i < maxLoop; i++) {
cb(data[i] ? data[i][0] : null, i);
}
} else {
var value0 = data[0] || [];
for (var i = 0; i < value0.length && i < maxLoop; i++) {
cb(value0[i], i);
}
}
}
function shouldRetrieveDataByName(source) {
var sourceFormat = source.sourceFormat;
return sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS;
}
var _a, _b, _c;
var providerMethods;
var mountMethods;
var DefaultDataProvider = (
/** @class */
(function() {
function DefaultDataProvider2(sourceParam, dimSize) {
var source = !isSourceInstance(sourceParam) ? createSourceFromSeriesDataOption(sourceParam) : sourceParam;
this._source = source;
var data = this._data = source.data;
if (source.sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
this._offset = 0;
this._dimSize = dimSize;
this._data = data;
}
mountMethods(this, data, source);
}
DefaultDataProvider2.prototype.getSource = function() {
return this._source;
};
DefaultDataProvider2.prototype.count = function() {
return 0;
};
DefaultDataProvider2.prototype.getItem = function(idx, out) {
return;
};
DefaultDataProvider2.prototype.appendData = function(newData) {
};
DefaultDataProvider2.prototype.clean = function() {
};
DefaultDataProvider2.protoInitialize = (function() {
var proto2 = DefaultDataProvider2.prototype;
proto2.pure = false;
proto2.persistent = true;
})();
DefaultDataProvider2.internalField = (function() {
var _a2;
mountMethods = function(provider, data, source) {
var sourceFormat = source.sourceFormat;
var seriesLayoutBy = source.seriesLayoutBy;
var startIndex = source.startIndex;
var dimsDef = source.dimensionsDefine;
var methods = providerMethods[getMethodMapKey(sourceFormat, seriesLayoutBy)];
extend(provider, methods);
if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
provider.getItem = getItemForTypedArray;
provider.count = countForTypedArray;
provider.fillStorage = fillStorageForTypedArray;
} else {
var rawItemGetter = getRawSourceItemGetter(sourceFormat, seriesLayoutBy);
provider.getItem = bind$1(rawItemGetter, null, data, startIndex, dimsDef);
var rawCounter = getRawSourceDataCounter(sourceFormat, seriesLayoutBy);
provider.count = bind$1(rawCounter, null, data, startIndex, dimsDef);
}
};
var getItemForTypedArray = function(idx, out) {
idx = idx - this._offset;
out = out || [];
var data = this._data;
var dimSize = this._dimSize;
var offset = dimSize * idx;
for (var i = 0; i < dimSize; i++) {
out[i] = data[offset + i];
}
return out;
};
var fillStorageForTypedArray = function(start, end, storage2, extent) {
var data = this._data;
var dimSize = this._dimSize;
for (var dim = 0; dim < dimSize; dim++) {
var dimExtent = extent[dim];
var min2 = dimExtent[0] == null ? Infinity : dimExtent[0];
var max2 = dimExtent[1] == null ? -Infinity : dimExtent[1];
var count2 = end - start;
var arr = storage2[dim];
for (var i = 0; i < count2; i++) {
var val = data[i * dimSize + dim];
arr[start + i] = val;
val < min2 && (min2 = val);
val > max2 && (max2 = val);
}
dimExtent[0] = min2;
dimExtent[1] = max2;
}
};
var countForTypedArray = function() {
return this._data ? this._data.length / this._dimSize : 0;
};
providerMethods = (_a2 = {}, _a2[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = {
pure: true,
appendData: appendDataSimply
}, _a2[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_ROW] = {
pure: true,
appendData: function() {
throw new Error('Do not support appendData when set seriesLayoutBy: "row".');
}
}, _a2[SOURCE_FORMAT_OBJECT_ROWS] = {
pure: true,
appendData: appendDataSimply
}, _a2[SOURCE_FORMAT_KEYED_COLUMNS] = {
pure: true,
appendData: function(newData) {
var data = this._data;
each$f(newData, function(newCol, key) {
var oldCol = data[key] || (data[key] = []);
for (var i = 0; i < (newCol || []).length; i++) {
oldCol.push(newCol[i]);
}
});
}
}, _a2[SOURCE_FORMAT_ORIGINAL] = {
appendData: appendDataSimply
}, _a2[SOURCE_FORMAT_TYPED_ARRAY] = {
persistent: false,
pure: true,
appendData: function(newData) {
this._data = newData;
},
// Clean self if data is already used.
clean: function() {
this._offset += this.count();
this._data = null;
}
}, _a2);
function appendDataSimply(newData) {
for (var i = 0; i < newData.length; i++) {
this._data.push(newData[i]);
}
}
})();
return DefaultDataProvider2;
})()
);
var getItemSimply = function(rawData, startIndex, dimsDef, idx) {
return rawData[idx];
};
var rawSourceItemGetterMap = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = function(rawData, startIndex, dimsDef, idx) {
return rawData[idx + startIndex];
}, _a[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_ROW] = function(rawData, startIndex, dimsDef, idx, out) {
idx += startIndex;
var item = out || [];
var data = rawData;
for (var i = 0; i < data.length; i++) {
var row = data[i];
item[i] = row ? row[idx] : null;
}
return item;
}, _a[SOURCE_FORMAT_OBJECT_ROWS] = getItemSimply, _a[SOURCE_FORMAT_KEYED_COLUMNS] = function(rawData, startIndex, dimsDef, idx, out) {
var item = out || [];
for (var i = 0; i < dimsDef.length; i++) {
var dimName = dimsDef[i].name;
var col = rawData[dimName];
item[i] = col ? col[idx] : null;
}
return item;
}, _a[SOURCE_FORMAT_ORIGINAL] = getItemSimply, _a);
function getRawSourceItemGetter(sourceFormat, seriesLayoutBy) {
var method = rawSourceItemGetterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)];
return method;
}
var countSimply = function(rawData, startIndex, dimsDef) {
return rawData.length;
};
var rawSourceDataCounterMap = (_b = {}, _b[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = function(rawData, startIndex, dimsDef) {
return Math.max(0, rawData.length - startIndex);
}, _b[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_ROW] = function(rawData, startIndex, dimsDef) {
var row = rawData[0];
return row ? Math.max(0, row.length - startIndex) : 0;
}, _b[SOURCE_FORMAT_OBJECT_ROWS] = countSimply, _b[SOURCE_FORMAT_KEYED_COLUMNS] = function(rawData, startIndex, dimsDef) {
var dimName = dimsDef[0].name;
var col = rawData[dimName];
return col ? col.length : 0;
}, _b[SOURCE_FORMAT_ORIGINAL] = countSimply, _b);
function getRawSourceDataCounter(sourceFormat, seriesLayoutBy) {
var method = rawSourceDataCounterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)];
return method;
}
var getRawValueSimply = function(dataItem, dimIndex, property) {
return dataItem[dimIndex];
};
var rawSourceValueGetterMap = (_c = {}, _c[SOURCE_FORMAT_ARRAY_ROWS] = getRawValueSimply, _c[SOURCE_FORMAT_OBJECT_ROWS] = function(dataItem, dimIndex, property) {
return dataItem[property];
}, _c[SOURCE_FORMAT_KEYED_COLUMNS] = getRawValueSimply, _c[SOURCE_FORMAT_ORIGINAL] = function(dataItem, dimIndex, property) {
var value = getDataItemValue(dataItem);
return !(value instanceof Array) ? value : value[dimIndex];
}, _c[SOURCE_FORMAT_TYPED_ARRAY] = getRawValueSimply, _c);
function getRawSourceValueGetter(sourceFormat) {
var method = rawSourceValueGetterMap[sourceFormat];
return method;
}
function getMethodMapKey(sourceFormat, seriesLayoutBy) {
return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS ? sourceFormat + "_" + seriesLayoutBy : sourceFormat;
}
function retrieveRawValue(data, dataIndex, dim) {
if (!data) {
return;
}
var dataItem = data.getRawDataItem(dataIndex);
if (dataItem == null) {
return;
}
var store = data.getStore();
var sourceFormat = store.getSource().sourceFormat;
if (dim != null) {
var dimIndex = data.getDimensionIndex(dim);
var property = store.getDimensionProperty(dimIndex);
return getRawSourceValueGetter(sourceFormat)(dataItem, dimIndex, property);
} else {
var result = dataItem;
if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
result = getDataItemValue(dataItem);
}
return result;
}
}
var DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
var DataFormatMixin = (
/** @class */
(function() {
function DataFormatMixin2() {
}
DataFormatMixin2.prototype.getDataParams = function(dataIndex, dataType) {
var data = this.getData(dataType);
var rawValue = this.getRawValue(dataIndex, dataType);
var rawDataIndex = data.getRawIndex(dataIndex);
var name = data.getName(dataIndex);
var itemOpt = data.getRawDataItem(dataIndex);
var style = data.getItemVisual(dataIndex, "style");
var color = style && style[data.getItemVisual(dataIndex, "drawType") || "fill"];
var borderColor = style && style.stroke;
var mainType = this.mainType;
var isSeries2 = mainType === "series";
var userOutput = data.userOutput && data.userOutput.get();
return {
componentType: mainType,
componentSubType: this.subType,
componentIndex: this.componentIndex,
seriesType: isSeries2 ? this.subType : null,
seriesIndex: this.seriesIndex,
seriesId: isSeries2 ? this.id : null,
seriesName: isSeries2 ? this.name : null,
name,
dataIndex: rawDataIndex,
data: itemOpt,
dataType,
value: rawValue,
color,
borderColor,
dimensionNames: userOutput ? userOutput.fullDimensions : null,
encode: userOutput ? userOutput.encode : null,
// Param name list for mapping `a`, `b`, `c`, `d`, `e`
$vars: ["seriesName", "name", "value"]
};
};
DataFormatMixin2.prototype.getFormattedLabel = function(dataIndex, status, dataType, labelDimIndex, formatter, extendParams) {
status = status || "normal";
var data = this.getData(dataType);
var params = this.getDataParams(dataIndex, dataType);
if (extendParams) {
params.value = extendParams.interpolatedValue;
}
if (labelDimIndex != null && isArray$1(params.value)) {
params.value = params.value[labelDimIndex];
}
if (!formatter) {
var itemModel = data.getItemModel(dataIndex);
formatter = itemModel.get(status === "normal" ? ["label", "formatter"] : [status, "label", "formatter"]);
}
if (isFunction(formatter)) {
params.status = status;
params.dimensionIndex = labelDimIndex;
return formatter(params);
} else if (isString(formatter)) {
var str = formatTpl(formatter, params);
return str.replace(DIMENSION_LABEL_REG, function(origin, dimStr) {
var len2 = dimStr.length;
var dimLoose = dimStr;
if (dimLoose.charAt(0) === "[" && dimLoose.charAt(len2 - 1) === "]") {
dimLoose = +dimLoose.slice(1, len2 - 1);
}
var val = retrieveRawValue(data, dataIndex, dimLoose);
if (extendParams && isArray$1(extendParams.interpolatedValue)) {
var dimIndex = data.getDimensionIndex(dimLoose);
if (dimIndex >= 0) {
val = extendParams.interpolatedValue[dimIndex];
}
}
return val != null ? val + "" : "";
});
}
};
DataFormatMixin2.prototype.getRawValue = function(idx, dataType) {
return retrieveRawValue(this.getData(dataType), idx);
};
DataFormatMixin2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
return;
};
return DataFormatMixin2;
})()
);
function normalizeTooltipFormatResult(result) {
var markupText;
var markupFragment;
if (isObject$3(result)) {
if (result.type) {
markupFragment = result;
}
} else {
markupText = result;
}
return {
text: markupText,
// markers: markers || markersExisting,
frag: markupFragment
};
}
function createTask(define) {
return new Task(define);
}
var Task = (
/** @class */
(function() {
function Task2(define) {
define = define || {};
this._reset = define.reset;
this._plan = define.plan;
this._count = define.count;
this._onDirty = define.onDirty;
this._dirty = true;
}
Task2.prototype.perform = function(performArgs) {
var upTask = this._upstream;
var skip = performArgs && performArgs.skip;
if (this._dirty && upTask) {
var context = this.context;
context.data = context.outputData = upTask.context.outputData;
}
if (this.__pipeline) {
this.__pipeline.currentTask = this;
}
var planResult;
if (this._plan && !skip) {
planResult = this._plan(this.context);
}
var lastModBy = normalizeModBy(this._modBy);
var lastModDataCount = this._modDataCount || 0;
var modBy = normalizeModBy(performArgs && performArgs.modBy);
var modDataCount = performArgs && performArgs.modDataCount || 0;
if (lastModBy !== modBy || lastModDataCount !== modDataCount) {
planResult = "reset";
}
function normalizeModBy(val) {
!(val >= 1) && (val = 1);
return val;
}
var forceFirstProgress;
if (this._dirty || planResult === "reset") {
this._dirty = false;
forceFirstProgress = this._doReset(skip);
}
this._modBy = modBy;
this._modDataCount = modDataCount;
var step = performArgs && performArgs.step;
if (upTask) {
this._dueEnd = upTask._outputDueEnd;
} else {
this._dueEnd = this._count ? this._count(this.context) : Infinity;
}
if (this._progress) {
var start = this._dueIndex;
var end = Math.min(step != null ? this._dueIndex + step : Infinity, this._dueEnd);
if (!skip && (forceFirstProgress || start < end)) {
var progress = this._progress;
if (isArray$1(progress)) {
for (var i = 0; i < progress.length; i++) {
this._doProgress(progress[i], start, end, modBy, modDataCount);
}
} else {
this._doProgress(progress, start, end, modBy, modDataCount);
}
}
this._dueIndex = end;
var outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : end;
this._outputDueEnd = outputDueEnd;
} else {
this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : this._dueEnd;
}
return this.unfinished();
};
Task2.prototype.dirty = function() {
this._dirty = true;
this._onDirty && this._onDirty(this.context);
};
Task2.prototype._doProgress = function(progress, start, end, modBy, modDataCount) {
iterator.reset(start, end, modBy, modDataCount);
this._callingProgress = progress;
this._callingProgress({
start,
end,
count: end - start,
next: iterator.next
}, this.context);
};
Task2.prototype._doReset = function(skip) {
this._dueIndex = this._outputDueEnd = this._dueEnd = 0;
this._settedOutputEnd = null;
var progress;
var forceFirstProgress;
if (!skip && this._reset) {
progress = this._reset(this.context);
if (progress && progress.progress) {
forceFirstProgress = progress.forceFirstProgress;
progress = progress.progress;
}
if (isArray$1(progress) && !progress.length) {
progress = null;
}
}
this._progress = progress;
this._modBy = this._modDataCount = null;
var downstream = this._downstream;
downstream && downstream.dirty();
return forceFirstProgress;
};
Task2.prototype.unfinished = function() {
return this._progress && this._dueIndex < this._dueEnd;
};
Task2.prototype.pipe = function(downTask) {
if (this._downstream !== downTask || this._dirty) {
this._downstream = downTask;
downTask._upstream = this;
downTask.dirty();
}
};
Task2.prototype.dispose = function() {
if (this._disposed) {
return;
}
this._upstream && (this._upstream._downstream = null);
this._downstream && (this._downstream._upstream = null);
this._dirty = false;
this._disposed = true;
};
Task2.prototype.getUpstream = function() {
return this._upstream;
};
Task2.prototype.getDownstream = function() {
return this._downstream;
};
Task2.prototype.setOutputEnd = function(end) {
this._outputDueEnd = this._settedOutputEnd = end;
};
return Task2;
})()
);
var iterator = /* @__PURE__ */ (function() {
var end;
var current;
var modBy;
var modDataCount;
var winCount;
var it = {
reset: function(s, e, sStep, sCount) {
current = s;
end = e;
modBy = sStep;
modDataCount = sCount;
winCount = Math.ceil(modDataCount / modBy);
it.next = modBy > 1 && modDataCount > 0 ? modNext : sequentialNext;
}
};
return it;
function sequentialNext() {
return current < end ? current++ : null;
}
function modNext() {
var dataIndex = current % winCount * modBy + Math.ceil(current / winCount);
var result = current >= end ? null : dataIndex < modDataCount ? dataIndex : current;
current++;
return result;
}
})();
function parseDataValue(value, opt) {
var dimType = opt && opt.type;
if (dimType === "ordinal") {
return value;
}
if (dimType === "time" && !isNumber(value) && value != null && value !== "-") {
value = +parseDate(value);
}
return value == null || value === "" ? NaN : Number(value);
}
var valueParserMap = createHashMap({
"number": function(val) {
return parseFloat(val);
},
"time": function(val) {
return +parseDate(val);
},
"trim": function(val) {
return isString(val) ? trim$1(val) : val;
}
});
function getRawValueParser(type) {
return valueParserMap.get(type);
}
var ORDER_COMPARISON_OP_MAP = {
lt: function(lval, rval) {
return lval < rval;
},
lte: function(lval, rval) {
return lval <= rval;
},
gt: function(lval, rval) {
return lval > rval;
},
gte: function(lval, rval) {
return lval >= rval;
}
};
var FilterOrderComparator = (
/** @class */
(function() {
function FilterOrderComparator2(op, rval) {
if (!isNumber(rval)) {
var errMsg = "";
throwError(errMsg);
}
this._opFn = ORDER_COMPARISON_OP_MAP[op];
this._rvalFloat = numericToNumber(rval);
}
FilterOrderComparator2.prototype.evaluate = function(lval) {
return isNumber(lval) ? this._opFn(lval, this._rvalFloat) : this._opFn(numericToNumber(lval), this._rvalFloat);
};
return FilterOrderComparator2;
})()
);
var SortOrderComparator = (
/** @class */
(function() {
function SortOrderComparator2(order, incomparable) {
var isDesc = order === "desc";
this._resultLT = isDesc ? 1 : -1;
if (incomparable == null) {
incomparable = isDesc ? "min" : "max";
}
this._incomparable = incomparable === "min" ? -Infinity : Infinity;
}
SortOrderComparator2.prototype.evaluate = function(lval, rval) {
var lvalFloat = isNumber(lval) ? lval : numericToNumber(lval);
var rvalFloat = isNumber(rval) ? rval : numericToNumber(rval);
var lvalNotNumeric = isNaN(lvalFloat);
var rvalNotNumeric = isNaN(rvalFloat);
if (lvalNotNumeric) {
lvalFloat = this._incomparable;
}
if (rvalNotNumeric) {
rvalFloat = this._incomparable;
}
if (lvalNotNumeric && rvalNotNumeric) {
var lvalIsStr = isString(lval);
var rvalIsStr = isString(rval);
if (lvalIsStr) {
lvalFloat = rvalIsStr ? lval : 0;
}
if (rvalIsStr) {
rvalFloat = lvalIsStr ? rval : 0;
}
}
return lvalFloat < rvalFloat ? this._resultLT : lvalFloat > rvalFloat ? -this._resultLT : 0;
};
return SortOrderComparator2;
})()
);
var FilterEqualityComparator = (
/** @class */
(function() {
function FilterEqualityComparator2(isEq, rval) {
this._rval = rval;
this._isEQ = isEq;
this._rvalTypeof = typeof rval;
this._rvalFloat = numericToNumber(rval);
}
FilterEqualityComparator2.prototype.evaluate = function(lval) {
var eqResult = lval === this._rval;
if (!eqResult) {
var lvalTypeof = typeof lval;
if (lvalTypeof !== this._rvalTypeof && (lvalTypeof === "number" || this._rvalTypeof === "number")) {
eqResult = numericToNumber(lval) === this._rvalFloat;
}
}
return this._isEQ ? eqResult : !eqResult;
};
return FilterEqualityComparator2;
})()
);
function createFilterComparator(op, rval) {
return op === "eq" || op === "ne" ? new FilterEqualityComparator(op === "eq", rval) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, rval) : null;
}
var ExternalSource = (
/** @class */
(function() {
function ExternalSource2() {
}
ExternalSource2.prototype.getRawData = function() {
throw new Error("not supported");
};
ExternalSource2.prototype.getRawDataItem = function(dataIndex) {
throw new Error("not supported");
};
ExternalSource2.prototype.cloneRawData = function() {
return;
};
ExternalSource2.prototype.getDimensionInfo = function(dim) {
return;
};
ExternalSource2.prototype.cloneAllDimensionInfo = function() {
return;
};
ExternalSource2.prototype.count = function() {
return;
};
ExternalSource2.prototype.retrieveValue = function(dataIndex, dimIndex) {
return;
};
ExternalSource2.prototype.retrieveValueFromItem = function(dataItem, dimIndex) {
return;
};
ExternalSource2.prototype.convertValue = function(rawVal, dimInfo) {
return parseDataValue(rawVal, dimInfo);
};
return ExternalSource2;
})()
);
function createExternalSource(internalSource, externalTransform) {
var extSource = new ExternalSource();
var data = internalSource.data;
var sourceFormat = extSource.sourceFormat = internalSource.sourceFormat;
var sourceHeaderCount = internalSource.startIndex;
var errMsg = "";
if (internalSource.seriesLayoutBy !== SERIES_LAYOUT_BY_COLUMN) {
throwError(errMsg);
}
var dimensions = [];
var dimsByName = {};
var dimsDef = internalSource.dimensionsDefine;
if (dimsDef) {
each$f(dimsDef, function(dimDef, idx) {
var name = dimDef.name;
var dimDefExt = {
index: idx,
name,
displayName: dimDef.displayName
};
dimensions.push(dimDefExt);
if (name != null) {
var errMsg_1 = "";
if (hasOwn(dimsByName, name)) {
throwError(errMsg_1);
}
dimsByName[name] = dimDefExt;
}
});
} else {
for (var i = 0; i < internalSource.dimensionsDetectedCount || 0; i++) {
dimensions.push({
index: i
});
}
}
var rawItemGetter = getRawSourceItemGetter(sourceFormat, SERIES_LAYOUT_BY_COLUMN);
if (externalTransform.__isBuiltIn) {
extSource.getRawDataItem = function(dataIndex) {
return rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex);
};
extSource.getRawData = bind$1(getRawData, null, internalSource);
}
extSource.cloneRawData = bind$1(cloneRawData, null, internalSource);
var rawCounter = getRawSourceDataCounter(sourceFormat, SERIES_LAYOUT_BY_COLUMN);
extSource.count = bind$1(rawCounter, null, data, sourceHeaderCount, dimensions);
var rawValueGetter = getRawSourceValueGetter(sourceFormat);
extSource.retrieveValue = function(dataIndex, dimIndex) {
var rawItem = rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex);
return retrieveValueFromItem(rawItem, dimIndex);
};
var retrieveValueFromItem = extSource.retrieveValueFromItem = function(dataItem, dimIndex) {
if (dataItem == null) {
return;
}
var dimDef = dimensions[dimIndex];
if (dimDef) {
return rawValueGetter(dataItem, dimIndex, dimDef.name);
}
};
extSource.getDimensionInfo = bind$1(getDimensionInfo, null, dimensions, dimsByName);
extSource.cloneAllDimensionInfo = bind$1(cloneAllDimensionInfo, null, dimensions);
return extSource;
}
function getRawData(upstream) {
var sourceFormat = upstream.sourceFormat;
if (!isSupportedSourceFormat(sourceFormat)) {
var errMsg = "";
throwError(errMsg);
}
return upstream.data;
}
function cloneRawData(upstream) {
var sourceFormat = upstream.sourceFormat;
var data = upstream.data;
if (!isSupportedSourceFormat(sourceFormat)) {
var errMsg = "";
throwError(errMsg);
}
if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
var result = [];
for (var i = 0, len2 = data.length; i < len2; i++) {
result.push(data[i].slice());
}
return result;
} else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
var result = [];
for (var i = 0, len2 = data.length; i < len2; i++) {
result.push(extend({}, data[i]));
}
return result;
}
}
function getDimensionInfo(dimensions, dimsByName, dim) {
if (dim == null) {
return;
}
if (isNumber(dim) || !isNaN(dim) && !hasOwn(dimsByName, dim)) {
return dimensions[dim];
} else if (hasOwn(dimsByName, dim)) {
return dimsByName[dim];
}
}
function cloneAllDimensionInfo(dimensions) {
return clone$1(dimensions);
}
var externalTransformMap = createHashMap();
function registerExternalTransform(externalTransform) {
externalTransform = clone$1(externalTransform);
var type = externalTransform.type;
var errMsg = "";
if (!type) {
throwError(errMsg);
}
var typeParsed = type.split(":");
if (typeParsed.length !== 2) {
throwError(errMsg);
}
var isBuiltIn = false;
if (typeParsed[0] === "echarts") {
type = typeParsed[1];
isBuiltIn = true;
}
externalTransform.__isBuiltIn = isBuiltIn;
externalTransformMap.set(type, externalTransform);
}
function applyDataTransform(rawTransOption, sourceList, infoForPrint) {
var pipedTransOption = normalizeToArray(rawTransOption);
var pipeLen = pipedTransOption.length;
var errMsg = "";
if (!pipeLen) {
throwError(errMsg);
}
for (var i = 0, len2 = pipeLen; i < len2; i++) {
var transOption = pipedTransOption[i];
sourceList = applySingleDataTransform(transOption, sourceList);
if (i !== len2 - 1) {
sourceList.length = Math.max(sourceList.length, 1);
}
}
return sourceList;
}
function applySingleDataTransform(transOption, upSourceList, infoForPrint, pipeIndex) {
var errMsg = "";
if (!upSourceList.length) {
throwError(errMsg);
}
if (!isObject$3(transOption)) {
throwError(errMsg);
}
var transType = transOption.type;
var externalTransform = externalTransformMap.get(transType);
if (!externalTransform) {
throwError(errMsg);
}
var extUpSourceList = map$1(upSourceList, function(upSource) {
return createExternalSource(upSource, externalTransform);
});
var resultList = normalizeToArray(externalTransform.transform({
upstream: extUpSourceList[0],
upstreamList: extUpSourceList,
config: clone$1(transOption.config)
}));
return map$1(resultList, function(result, resultIndex) {
var errMsg2 = "";
if (!isObject$3(result)) {
throwError(errMsg2);
}
if (!result.data) {
throwError(errMsg2);
}
var sourceFormat = detectSourceFormat(result.data);
if (!isSupportedSourceFormat(sourceFormat)) {
throwError(errMsg2);
}
var resultMetaRawOption;
var firstUpSource = upSourceList[0];
if (firstUpSource && resultIndex === 0 && !result.dimensions) {
var startIndex = firstUpSource.startIndex;
if (startIndex) {
result.data = firstUpSource.data.slice(0, startIndex).concat(result.data);
}
resultMetaRawOption = {
seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,
sourceHeader: startIndex,
dimensions: firstUpSource.metaRawOption.dimensions
};
} else {
resultMetaRawOption = {
seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,
sourceHeader: 0,
dimensions: result.dimensions
};
}
return createSource(result.data, resultMetaRawOption, null);
});
}
function isSupportedSourceFormat(sourceFormat) {
return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS || sourceFormat === SOURCE_FORMAT_OBJECT_ROWS;
}
var UNDEFINED = "undefined";
var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;
var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;
var CtorInt32Array$1 = typeof Int32Array === UNDEFINED ? Array : Int32Array;
var CtorFloat64Array = typeof Float64Array === UNDEFINED ? Array : Float64Array;
var dataCtors = {
"float": CtorFloat64Array,
"int": CtorInt32Array$1,
// Ordinal data type can be string or int
"ordinal": Array,
"number": Array,
"time": CtorFloat64Array
};
var defaultDimValueGetters;
function getIndicesCtor(rawCount) {
return rawCount > 65535 ? CtorUint32Array : CtorUint16Array;
}
function getInitialExtent() {
return [Infinity, -Infinity];
}
function cloneChunk(originalChunk) {
var Ctor = originalChunk.constructor;
return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);
}
function prepareStore(store, dimIdx, dimType, end, append) {
var DataCtor = dataCtors[dimType || "float"];
if (append) {
var oldStore = store[dimIdx];
var oldLen = oldStore && oldStore.length;
if (!(oldLen === end)) {
var newStore = new DataCtor(end);
for (var j = 0; j < oldLen; j++) {
newStore[j] = oldStore[j];
}
store[dimIdx] = newStore;
}
} else {
store[dimIdx] = new DataCtor(end);
}
}
var DataStore = (
/** @class */
(function() {
function DataStore2() {
this._chunks = [];
this._rawExtent = [];
this._extent = [];
this._count = 0;
this._rawCount = 0;
this._calcDimNameToIdx = createHashMap();
}
DataStore2.prototype.initData = function(provider, inputDimensions, dimValueGetter) {
this._provider = provider;
this._chunks = [];
this._indices = null;
this.getRawIndex = this._getRawIdxIdentity;
var source = provider.getSource();
var defaultGetter = this.defaultDimValueGetter = defaultDimValueGetters[source.sourceFormat];
this._dimValueGetter = dimValueGetter || defaultGetter;
this._rawExtent = [];
shouldRetrieveDataByName(source);
this._dimensions = map$1(inputDimensions, function(dim) {
return {
// Only pick these two props. Not leak other properties like orderMeta.
type: dim.type,
property: dim.property
};
});
this._initDataFromProvider(0, provider.count());
};
DataStore2.prototype.getProvider = function() {
return this._provider;
};
DataStore2.prototype.getSource = function() {
return this._provider.getSource();
};
DataStore2.prototype.ensureCalculationDimension = function(dimName, type) {
var calcDimNameToIdx = this._calcDimNameToIdx;
var dimensions = this._dimensions;
var calcDimIdx = calcDimNameToIdx.get(dimName);
if (calcDimIdx != null) {
if (dimensions[calcDimIdx].type === type) {
return calcDimIdx;
}
} else {
calcDimIdx = dimensions.length;
}
dimensions[calcDimIdx] = {
type
};
calcDimNameToIdx.set(dimName, calcDimIdx);
this._chunks[calcDimIdx] = new dataCtors[type || "float"](this._rawCount);
this._rawExtent[calcDimIdx] = getInitialExtent();
return calcDimIdx;
};
DataStore2.prototype.collectOrdinalMeta = function(dimIdx, ordinalMeta) {
var chunk = this._chunks[dimIdx];
var dim = this._dimensions[dimIdx];
var rawExtents = this._rawExtent;
var offset = dim.ordinalOffset || 0;
var len2 = chunk.length;
if (offset === 0) {
rawExtents[dimIdx] = getInitialExtent();
}
var dimRawExtent = rawExtents[dimIdx];
for (var i = offset; i < len2; i++) {
var val = chunk[i] = ordinalMeta.parseAndCollect(chunk[i]);
if (!isNaN(val)) {
dimRawExtent[0] = Math.min(val, dimRawExtent[0]);
dimRawExtent[1] = Math.max(val, dimRawExtent[1]);
}
}
dim.ordinalMeta = ordinalMeta;
dim.ordinalOffset = len2;
dim.type = "ordinal";
};
DataStore2.prototype.getOrdinalMeta = function(dimIdx) {
var dimInfo = this._dimensions[dimIdx];
var ordinalMeta = dimInfo.ordinalMeta;
return ordinalMeta;
};
DataStore2.prototype.getDimensionProperty = function(dimIndex) {
var item = this._dimensions[dimIndex];
return item && item.property;
};
DataStore2.prototype.appendData = function(data) {
var provider = this._provider;
var start = this.count();
provider.appendData(data);
var end = provider.count();
if (!provider.persistent) {
end += start;
}
if (start < end) {
this._initDataFromProvider(start, end, true);
}
return [start, end];
};
DataStore2.prototype.appendValues = function(values, minFillLen) {
var chunks = this._chunks;
var dimensions = this._dimensions;
var dimLen = dimensions.length;
var rawExtent = this._rawExtent;
var start = this.count();
var end = start + Math.max(values.length, minFillLen || 0);
for (var i = 0; i < dimLen; i++) {
var dim = dimensions[i];
prepareStore(chunks, i, dim.type, end, true);
}
var emptyDataItem = [];
for (var idx = start; idx < end; idx++) {
var sourceIdx = idx - start;
for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) {
var dim = dimensions[dimIdx];
var val = defaultDimValueGetters.arrayRows.call(this, values[sourceIdx] || emptyDataItem, dim.property, sourceIdx, dimIdx);
chunks[dimIdx][idx] = val;
var dimRawExtent = rawExtent[dimIdx];
val < dimRawExtent[0] && (dimRawExtent[0] = val);
val > dimRawExtent[1] && (dimRawExtent[1] = val);
}
}
this._rawCount = this._count = end;
return {
start,
end
};
};
DataStore2.prototype._initDataFromProvider = function(start, end, append) {
var provider = this._provider;
var chunks = this._chunks;
var dimensions = this._dimensions;
var dimLen = dimensions.length;
var rawExtent = this._rawExtent;
var dimNames = map$1(dimensions, function(dim2) {
return dim2.property;
});
for (var i = 0; i < dimLen; i++) {
var dim = dimensions[i];
if (!rawExtent[i]) {
rawExtent[i] = getInitialExtent();
}
prepareStore(chunks, i, dim.type, end, append);
}
if (provider.fillStorage) {
provider.fillStorage(start, end, chunks, rawExtent);
} else {
var dataItem = [];
for (var idx = start; idx < end; idx++) {
dataItem = provider.getItem(idx, dataItem);
for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) {
var dimStorage = chunks[dimIdx];
var val = this._dimValueGetter(dataItem, dimNames[dimIdx], idx, dimIdx);
dimStorage[idx] = val;
var dimRawExtent = rawExtent[dimIdx];
val < dimRawExtent[0] && (dimRawExtent[0] = val);
val > dimRawExtent[1] && (dimRawExtent[1] = val);
}
}
}
if (!provider.persistent && provider.clean) {
provider.clean();
}
this._rawCount = this._count = end;
this._extent = [];
};
DataStore2.prototype.count = function() {
return this._count;
};
DataStore2.prototype.get = function(dim, idx) {
if (!(idx >= 0 && idx < this._count)) {
return NaN;
}
var dimStore = this._chunks[dim];
return dimStore ? dimStore[this.getRawIndex(idx)] : NaN;
};
DataStore2.prototype.getValues = function(dimensions, idx) {
var values = [];
var dimArr = [];
if (idx == null) {
idx = dimensions;
dimensions = [];
for (var i = 0; i < this._dimensions.length; i++) {
dimArr.push(i);
}
} else {
dimArr = dimensions;
}
for (var i = 0, len2 = dimArr.length; i < len2; i++) {
values.push(this.get(dimArr[i], idx));
}
return values;
};
DataStore2.prototype.getByRawIndex = function(dim, rawIdx) {
if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {
return NaN;
}
var dimStore = this._chunks[dim];
return dimStore ? dimStore[rawIdx] : NaN;
};
DataStore2.prototype.getSum = function(dim) {
var dimData = this._chunks[dim];
var sum2 = 0;
if (dimData) {
for (var i = 0, len2 = this.count(); i < len2; i++) {
var value = this.get(dim, i);
if (!isNaN(value)) {
sum2 += value;
}
}
}
return sum2;
};
DataStore2.prototype.getMedian = function(dim) {
var dimDataArray = [];
this.each([dim], function(val) {
if (!isNaN(val)) {
dimDataArray.push(val);
}
});
var sortedDimDataArray = dimDataArray.sort(function(a, b) {
return a - b;
});
var len2 = this.count();
return len2 === 0 ? 0 : len2 % 2 === 1 ? sortedDimDataArray[(len2 - 1) / 2] : (sortedDimDataArray[len2 / 2] + sortedDimDataArray[len2 / 2 - 1]) / 2;
};
DataStore2.prototype.indexOfRawIndex = function(rawIndex) {
if (rawIndex >= this._rawCount || rawIndex < 0) {
return -1;
}
if (!this._indices) {
return rawIndex;
}
var indices = this._indices;
var rawDataIndex = indices[rawIndex];
if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {
return rawIndex;
}
var left = 0;
var right = this._count - 1;
while (left <= right) {
var mid = (left + right) / 2 | 0;
if (indices[mid] < rawIndex) {
left = mid + 1;
} else if (indices[mid] > rawIndex) {
right = mid - 1;
} else {
return mid;
}
}
return -1;
};
DataStore2.prototype.indicesOfNearest = function(dim, value, maxDistance) {
var chunks = this._chunks;
var dimData = chunks[dim];
var nearestIndices = [];
if (!dimData) {
return nearestIndices;
}
if (maxDistance == null) {
maxDistance = Infinity;
}
var minDist = Infinity;
var minDiff = -1;
var nearestIndicesLen = 0;
for (var i = 0, len2 = this.count(); i < len2; i++) {
var dataIndex = this.getRawIndex(i);
var diff = value - dimData[dataIndex];
var dist2 = Math.abs(diff);
if (dist2 <= maxDistance) {
if (dist2 < minDist || dist2 === minDist && diff >= 0 && minDiff < 0) {
minDist = dist2;
minDiff = diff;
nearestIndicesLen = 0;
}
if (diff === minDiff) {
nearestIndices[nearestIndicesLen++] = i;
}
}
}
nearestIndices.length = nearestIndicesLen;
return nearestIndices;
};
DataStore2.prototype.getIndices = function() {
var newIndices;
var indices = this._indices;
if (indices) {
var Ctor = indices.constructor;
var thisCount = this._count;
if (Ctor === Array) {
newIndices = new Ctor(thisCount);
for (var i = 0; i < thisCount; i++) {
newIndices[i] = indices[i];
}
} else {
newIndices = new Ctor(indices.buffer, 0, thisCount);
}
} else {
var Ctor = getIndicesCtor(this._rawCount);
newIndices = new Ctor(this.count());
for (var i = 0; i < newIndices.length; i++) {
newIndices[i] = i;
}
}
return newIndices;
};
DataStore2.prototype.filter = function(dims, cb) {
if (!this._count) {
return this;
}
var newStore = this.clone();
var count2 = newStore.count();
var Ctor = getIndicesCtor(newStore._rawCount);
var newIndices = new Ctor(count2);
var value = [];
var dimSize = dims.length;
var offset = 0;
var dim0 = dims[0];
var chunks = newStore._chunks;
for (var i = 0; i < count2; i++) {
var keep = void 0;
var rawIdx = newStore.getRawIndex(i);
if (dimSize === 0) {
keep = cb(i);
} else if (dimSize === 1) {
var val = chunks[dim0][rawIdx];
keep = cb(val, i);
} else {
var k = 0;
for (; k < dimSize; k++) {
value[k] = chunks[dims[k]][rawIdx];
}
value[k] = i;
keep = cb.apply(null, value);
}
if (keep) {
newIndices[offset++] = rawIdx;
}
}
if (offset < count2) {
newStore._indices = newIndices;
}
newStore._count = offset;
newStore._extent = [];
newStore._updateGetRawIdx();
return newStore;
};
DataStore2.prototype.selectRange = function(range) {
var newStore = this.clone();
var len2 = newStore._count;
if (!len2) {
return this;
}
var dims = keys(range);
var dimSize = dims.length;
if (!dimSize) {
return this;
}
var originalCount = newStore.count();
var Ctor = getIndicesCtor(newStore._rawCount);
var newIndices = new Ctor(originalCount);
var offset = 0;
var dim0 = dims[0];
var min2 = range[dim0][0];
var max2 = range[dim0][1];
var storeArr = newStore._chunks;
var quickFinished = false;
if (!newStore._indices) {
var idx = 0;
if (dimSize === 1) {
var dimStorage = storeArr[dims[0]];
for (var i = 0; i < len2; i++) {
var val = dimStorage[i];
if (val >= min2 && val <= max2 || isNaN(val)) {
newIndices[offset++] = idx;
}
idx++;
}
quickFinished = true;
} else if (dimSize === 2) {
var dimStorage = storeArr[dims[0]];
var dimStorage2 = storeArr[dims[1]];
var min22 = range[dims[1]][0];
var max22 = range[dims[1]][1];
for (var i = 0; i < len2; i++) {
var val = dimStorage[i];
var val2 = dimStorage2[i];
if ((val >= min2 && val <= max2 || isNaN(val)) && (val2 >= min22 && val2 <= max22 || isNaN(val2))) {
newIndices[offset++] = idx;
}
idx++;
}
quickFinished = true;
}
}
if (!quickFinished) {
if (dimSize === 1) {
for (var i = 0; i < originalCount; i++) {
var rawIndex = newStore.getRawIndex(i);
var val = storeArr[dims[0]][rawIndex];
if (val >= min2 && val <= max2 || isNaN(val)) {
newIndices[offset++] = rawIndex;
}
}
} else {
for (var i = 0; i < originalCount; i++) {
var keep = true;
var rawIndex = newStore.getRawIndex(i);
for (var k = 0; k < dimSize; k++) {
var dimk = dims[k];
var val = storeArr[dimk][rawIndex];
if (val < range[dimk][0] || val > range[dimk][1]) {
keep = false;
}
}
if (keep) {
newIndices[offset++] = newStore.getRawIndex(i);
}
}
}
}
if (offset < originalCount) {
newStore._indices = newIndices;
}
newStore._count = offset;
newStore._extent = [];
newStore._updateGetRawIdx();
return newStore;
};
DataStore2.prototype.map = function(dims, cb) {
var target = this.clone(dims);
this._updateDims(target, dims, cb);
return target;
};
DataStore2.prototype.modify = function(dims, cb) {
this._updateDims(this, dims, cb);
};
DataStore2.prototype._updateDims = function(target, dims, cb) {
var targetChunks = target._chunks;
var tmpRetValue = [];
var dimSize = dims.length;
var dataCount = target.count();
var values = [];
var rawExtent = target._rawExtent;
for (var i = 0; i < dims.length; i++) {
rawExtent[dims[i]] = getInitialExtent();
}
for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {
var rawIndex = target.getRawIndex(dataIndex);
for (var k = 0; k < dimSize; k++) {
values[k] = targetChunks[dims[k]][rawIndex];
}
values[dimSize] = dataIndex;
var retValue = cb && cb.apply(null, values);
if (retValue != null) {
if (typeof retValue !== "object") {
tmpRetValue[0] = retValue;
retValue = tmpRetValue;
}
for (var i = 0; i < retValue.length; i++) {
var dim = dims[i];
var val = retValue[i];
var rawExtentOnDim = rawExtent[dim];
var dimStore = targetChunks[dim];
if (dimStore) {
dimStore[rawIndex] = val;
}
if (val < rawExtentOnDim[0]) {
rawExtentOnDim[0] = val;
}
if (val > rawExtentOnDim[1]) {
rawExtentOnDim[1] = val;
}
}
}
}
};
DataStore2.prototype.lttbDownSample = function(valueDimension, rate) {
var target = this.clone([valueDimension], true);
var targetStorage = target._chunks;
var dimStore = targetStorage[valueDimension];
var len2 = this.count();
var sampledIndex = 0;
var frameSize = Math.floor(1 / rate);
var currentRawIndex = this.getRawIndex(0);
var maxArea;
var area;
var nextRawIndex;
var newIndices = new (getIndicesCtor(this._rawCount))(Math.min((Math.ceil(len2 / frameSize) + 2) * 2, len2));
newIndices[sampledIndex++] = currentRawIndex;
for (var i = 1; i < len2 - 1; i += frameSize) {
var nextFrameStart = Math.min(i + frameSize, len2 - 1);
var nextFrameEnd = Math.min(i + frameSize * 2, len2);
var avgX = (nextFrameEnd + nextFrameStart) / 2;
var avgY = 0;
for (var idx = nextFrameStart; idx < nextFrameEnd; idx++) {
var rawIndex = this.getRawIndex(idx);
var y = dimStore[rawIndex];
if (isNaN(y)) {
continue;
}
avgY += y;
}
avgY /= nextFrameEnd - nextFrameStart;
var frameStart = i;
var frameEnd = Math.min(i + frameSize, len2);
var pointAX = i - 1;
var pointAY = dimStore[currentRawIndex];
maxArea = -1;
nextRawIndex = frameStart;
var firstNaNIndex = -1;
var countNaN = 0;
for (var idx = frameStart; idx < frameEnd; idx++) {
var rawIndex = this.getRawIndex(idx);
var y = dimStore[rawIndex];
if (isNaN(y)) {
countNaN++;
if (firstNaNIndex < 0) {
firstNaNIndex = rawIndex;
}
continue;
}
area = Math.abs((pointAX - avgX) * (y - pointAY) - (pointAX - idx) * (avgY - pointAY));
if (area > maxArea) {
maxArea = area;
nextRawIndex = rawIndex;
}
}
if (countNaN > 0 && countNaN < frameEnd - frameStart) {
newIndices[sampledIndex++] = Math.min(firstNaNIndex, nextRawIndex);
nextRawIndex = Math.max(firstNaNIndex, nextRawIndex);
}
newIndices[sampledIndex++] = nextRawIndex;
currentRawIndex = nextRawIndex;
}
newIndices[sampledIndex++] = this.getRawIndex(len2 - 1);
target._count = sampledIndex;
target._indices = newIndices;
target.getRawIndex = this._getRawIdx;
return target;
};
DataStore2.prototype.minmaxDownSample = function(valueDimension, rate) {
var target = this.clone([valueDimension], true);
var targetStorage = target._chunks;
var frameSize = Math.floor(1 / rate);
var dimStore = targetStorage[valueDimension];
var len2 = this.count();
var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len2 / frameSize) * 2);
var offset = 0;
for (var i = 0; i < len2; i += frameSize) {
var minIndex = i;
var minValue = dimStore[this.getRawIndex(minIndex)];
var maxIndex = i;
var maxValue = dimStore[this.getRawIndex(maxIndex)];
var thisFrameSize = frameSize;
if (i + frameSize > len2) {
thisFrameSize = len2 - i;
}
for (var k = 0; k < thisFrameSize; k++) {
var rawIndex = this.getRawIndex(i + k);
var value = dimStore[rawIndex];
if (value < minValue) {
minValue = value;
minIndex = i + k;
}
if (value > maxValue) {
maxValue = value;
maxIndex = i + k;
}
}
var rawMinIndex = this.getRawIndex(minIndex);
var rawMaxIndex = this.getRawIndex(maxIndex);
if (minIndex < maxIndex) {
newIndices[offset++] = rawMinIndex;
newIndices[offset++] = rawMaxIndex;
} else {
newIndices[offset++] = rawMaxIndex;
newIndices[offset++] = rawMinIndex;
}
}
target._count = offset;
target._indices = newIndices;
target._updateGetRawIdx();
return target;
};
DataStore2.prototype.downSample = function(dimension, rate, sampleValue, sampleIndex) {
var target = this.clone([dimension], true);
var targetStorage = target._chunks;
var frameValues = [];
var frameSize = Math.floor(1 / rate);
var dimStore = targetStorage[dimension];
var len2 = this.count();
var rawExtentOnDim = target._rawExtent[dimension] = getInitialExtent();
var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len2 / frameSize));
var offset = 0;
for (var i = 0; i < len2; i += frameSize) {
if (frameSize > len2 - i) {
frameSize = len2 - i;
frameValues.length = frameSize;
}
for (var k = 0; k < frameSize; k++) {
var dataIdx = this.getRawIndex(i + k);
frameValues[k] = dimStore[dataIdx];
}
var value = sampleValue(frameValues);
var sampleFrameIdx = this.getRawIndex(Math.min(i + sampleIndex(frameValues, value) || 0, len2 - 1));
dimStore[sampleFrameIdx] = value;
if (value < rawExtentOnDim[0]) {
rawExtentOnDim[0] = value;
}
if (value > rawExtentOnDim[1]) {
rawExtentOnDim[1] = value;
}
newIndices[offset++] = sampleFrameIdx;
}
target._count = offset;
target._indices = newIndices;
target._updateGetRawIdx();
return target;
};
DataStore2.prototype.each = function(dims, cb) {
if (!this._count) {
return;
}
var dimSize = dims.length;
var chunks = this._chunks;
for (var i = 0, len2 = this.count(); i < len2; i++) {
var rawIdx = this.getRawIndex(i);
switch (dimSize) {
case 0:
cb(i);
break;
case 1:
cb(chunks[dims[0]][rawIdx], i);
break;
case 2:
cb(chunks[dims[0]][rawIdx], chunks[dims[1]][rawIdx], i);
break;
default:
var k = 0;
var value = [];
for (; k < dimSize; k++) {
value[k] = chunks[dims[k]][rawIdx];
}
value[k] = i;
cb.apply(null, value);
}
}
};
DataStore2.prototype.getDataExtent = function(dim) {
var dimData = this._chunks[dim];
var initialExtent = getInitialExtent();
if (!dimData) {
return initialExtent;
}
var currEnd = this.count();
var useRaw = !this._indices;
var dimExtent;
if (useRaw) {
return this._rawExtent[dim].slice();
}
dimExtent = this._extent[dim];
if (dimExtent) {
return dimExtent.slice();
}
dimExtent = initialExtent;
var min2 = dimExtent[0];
var max2 = dimExtent[1];
for (var i = 0; i < currEnd; i++) {
var rawIdx = this.getRawIndex(i);
var value = dimData[rawIdx];
value < min2 && (min2 = value);
value > max2 && (max2 = value);
}
dimExtent = [min2, max2];
this._extent[dim] = dimExtent;
return dimExtent;
};
DataStore2.prototype.getRawDataItem = function(idx) {
var rawIdx = this.getRawIndex(idx);
if (!this._provider.persistent) {
var val = [];
var chunks = this._chunks;
for (var i = 0; i < chunks.length; i++) {
val.push(chunks[i][rawIdx]);
}
return val;
} else {
return this._provider.getItem(rawIdx);
}
};
DataStore2.prototype.clone = function(clonedDims, ignoreIndices) {
var target = new DataStore2();
var chunks = this._chunks;
var clonedDimsMap = clonedDims && reduce(clonedDims, function(obj, dimIdx) {
obj[dimIdx] = true;
return obj;
}, {});
if (clonedDimsMap) {
for (var i = 0; i < chunks.length; i++) {
target._chunks[i] = !clonedDimsMap[i] ? chunks[i] : cloneChunk(chunks[i]);
}
} else {
target._chunks = chunks;
}
this._copyCommonProps(target);
if (!ignoreIndices) {
target._indices = this._cloneIndices();
}
target._updateGetRawIdx();
return target;
};
DataStore2.prototype._copyCommonProps = function(target) {
target._count = this._count;
target._rawCount = this._rawCount;
target._provider = this._provider;
target._dimensions = this._dimensions;
target._extent = clone$1(this._extent);
target._rawExtent = clone$1(this._rawExtent);
};
DataStore2.prototype._cloneIndices = function() {
if (this._indices) {
var Ctor = this._indices.constructor;
var indices = void 0;
if (Ctor === Array) {
var thisCount = this._indices.length;
indices = new Ctor(thisCount);
for (var i = 0; i < thisCount; i++) {
indices[i] = this._indices[i];
}
} else {
indices = new Ctor(this._indices);
}
return indices;
}
return null;
};
DataStore2.prototype._getRawIdxIdentity = function(idx) {
return idx;
};
DataStore2.prototype._getRawIdx = function(idx) {
if (idx < this._count && idx >= 0) {
return this._indices[idx];
}
return -1;
};
DataStore2.prototype._updateGetRawIdx = function() {
this.getRawIndex = this._indices ? this._getRawIdx : this._getRawIdxIdentity;
};
DataStore2.internalField = (function() {
function getDimValueSimply(dataItem, property, dataIndex, dimIndex) {
return parseDataValue(dataItem[dimIndex], this._dimensions[dimIndex]);
}
defaultDimValueGetters = {
arrayRows: getDimValueSimply,
objectRows: function(dataItem, property, dataIndex, dimIndex) {
return parseDataValue(dataItem[property], this._dimensions[dimIndex]);
},
keyedColumns: getDimValueSimply,
original: function(dataItem, property, dataIndex, dimIndex) {
var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);
return parseDataValue(value instanceof Array ? value[dimIndex] : value, this._dimensions[dimIndex]);
},
typedArray: function(dataItem, property, dataIndex, dimIndex) {
return dataItem[dimIndex];
}
};
})();
return DataStore2;
})()
);
var SourceManager = (
/** @class */
(function() {
function SourceManager2(sourceHost) {
this._sourceList = [];
this._storeList = [];
this._upstreamSignList = [];
this._versionSignBase = 0;
this._dirty = true;
this._sourceHost = sourceHost;
}
SourceManager2.prototype.dirty = function() {
this._setLocalSource([], []);
this._storeList = [];
this._dirty = true;
};
SourceManager2.prototype._setLocalSource = function(sourceList, upstreamSignList) {
this._sourceList = sourceList;
this._upstreamSignList = upstreamSignList;
this._versionSignBase++;
if (this._versionSignBase > 9e10) {
this._versionSignBase = 0;
}
};
SourceManager2.prototype._getVersionSign = function() {
return this._sourceHost.uid + "_" + this._versionSignBase;
};
SourceManager2.prototype.prepareSource = function() {
if (this._isDirty()) {
this._createSource();
this._dirty = false;
}
};
SourceManager2.prototype._createSource = function() {
this._setLocalSource([], []);
var sourceHost = this._sourceHost;
var upSourceMgrList = this._getUpstreamSourceManagers();
var hasUpstream = !!upSourceMgrList.length;
var resultSourceList;
var upstreamSignList;
if (isSeries(sourceHost)) {
var seriesModel = sourceHost;
var data = void 0;
var sourceFormat = void 0;
var upSource = void 0;
if (hasUpstream) {
var upSourceMgr = upSourceMgrList[0];
upSourceMgr.prepareSource();
upSource = upSourceMgr.getSource();
data = upSource.data;
sourceFormat = upSource.sourceFormat;
upstreamSignList = [upSourceMgr._getVersionSign()];
} else {
data = seriesModel.get("data", true);
sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;
upstreamSignList = [];
}
var newMetaRawOption = this._getSourceMetaRawOption() || {};
var upMetaRawOption = upSource && upSource.metaRawOption || {};
var seriesLayoutBy = retrieve2(newMetaRawOption.seriesLayoutBy, upMetaRawOption.seriesLayoutBy) || null;
var sourceHeader = retrieve2(newMetaRawOption.sourceHeader, upMetaRawOption.sourceHeader);
var dimensions = retrieve2(newMetaRawOption.dimensions, upMetaRawOption.dimensions);
var needsCreateSource = seriesLayoutBy !== upMetaRawOption.seriesLayoutBy || !!sourceHeader !== !!upMetaRawOption.sourceHeader || dimensions;
resultSourceList = needsCreateSource ? [createSource(data, {
seriesLayoutBy,
sourceHeader,
dimensions
}, sourceFormat)] : [];
} else {
var datasetModel = sourceHost;
if (hasUpstream) {
var result = this._applyTransform(upSourceMgrList);
resultSourceList = result.sourceList;
upstreamSignList = result.upstreamSignList;
} else {
var sourceData = datasetModel.get("source", true);
resultSourceList = [createSource(sourceData, this._getSourceMetaRawOption(), null)];
upstreamSignList = [];
}
}
this._setLocalSource(resultSourceList, upstreamSignList);
};
SourceManager2.prototype._applyTransform = function(upMgrList) {
var datasetModel = this._sourceHost;
var transformOption = datasetModel.get("transform", true);
var fromTransformResult = datasetModel.get("fromTransformResult", true);
if (fromTransformResult != null) {
var errMsg = "";
if (upMgrList.length !== 1) {
doThrow(errMsg);
}
}
var sourceList;
var upSourceList = [];
var upstreamSignList = [];
each$f(upMgrList, function(upMgr) {
upMgr.prepareSource();
var upSource = upMgr.getSource(fromTransformResult || 0);
var errMsg2 = "";
if (fromTransformResult != null && !upSource) {
doThrow(errMsg2);
}
upSourceList.push(upSource);
upstreamSignList.push(upMgr._getVersionSign());
});
if (transformOption) {
sourceList = applyDataTransform(transformOption, upSourceList, {
datasetIndex: datasetModel.componentIndex
});
} else if (fromTransformResult != null) {
sourceList = [cloneSourceShallow(upSourceList[0])];
}
return {
sourceList,
upstreamSignList
};
};
SourceManager2.prototype._isDirty = function() {
if (this._dirty) {
return true;
}
var upSourceMgrList = this._getUpstreamSourceManagers();
for (var i = 0; i < upSourceMgrList.length; i++) {
var upSrcMgr = upSourceMgrList[i];
if (
// Consider the case that there is ancestor diry, call it recursively.
// The performance is probably not an issue because usually the chain is not long.
upSrcMgr._isDirty() || this._upstreamSignList[i] !== upSrcMgr._getVersionSign()
) {
return true;
}
}
};
SourceManager2.prototype.getSource = function(sourceIndex) {
sourceIndex = sourceIndex || 0;
var source = this._sourceList[sourceIndex];
if (!source) {
var upSourceMgrList = this._getUpstreamSourceManagers();
return upSourceMgrList[0] && upSourceMgrList[0].getSource(sourceIndex);
}
return source;
};
SourceManager2.prototype.getSharedDataStore = function(seriesDimRequest) {
var schema = seriesDimRequest.makeStoreSchema();
return this._innerGetDataStore(schema.dimensions, seriesDimRequest.source, schema.hash);
};
SourceManager2.prototype._innerGetDataStore = function(storeDims, seriesSource, sourceReadKey) {
var sourceIndex = 0;
var storeList = this._storeList;
var cachedStoreMap = storeList[sourceIndex];
if (!cachedStoreMap) {
cachedStoreMap = storeList[sourceIndex] = {};
}
var cachedStore = cachedStoreMap[sourceReadKey];
if (!cachedStore) {
var upSourceMgr = this._getUpstreamSourceManagers()[0];
if (isSeries(this._sourceHost) && upSourceMgr) {
cachedStore = upSourceMgr._innerGetDataStore(storeDims, seriesSource, sourceReadKey);
} else {
cachedStore = new DataStore();
cachedStore.initData(new DefaultDataProvider(seriesSource, storeDims.length), storeDims);
}
cachedStoreMap[sourceReadKey] = cachedStore;
}
return cachedStore;
};
SourceManager2.prototype._getUpstreamSourceManagers = function() {
var sourceHost = this._sourceHost;
if (isSeries(sourceHost)) {
var datasetModel = querySeriesUpstreamDatasetModel(sourceHost);
return !datasetModel ? [] : [datasetModel.getSourceManager()];
} else {
return map$1(queryDatasetUpstreamDatasetModels(sourceHost), function(datasetModel2) {
return datasetModel2.getSourceManager();
});
}
};
SourceManager2.prototype._getSourceMetaRawOption = function() {
var sourceHost = this._sourceHost;
var seriesLayoutBy;
var sourceHeader;
var dimensions;
if (isSeries(sourceHost)) {
seriesLayoutBy = sourceHost.get("seriesLayoutBy", true);
sourceHeader = sourceHost.get("sourceHeader", true);
dimensions = sourceHost.get("dimensions", true);
} else if (!this._getUpstreamSourceManagers().length) {
var model = sourceHost;
seriesLayoutBy = model.get("seriesLayoutBy", true);
sourceHeader = model.get("sourceHeader", true);
dimensions = model.get("dimensions", true);
}
return {
seriesLayoutBy,
sourceHeader,
dimensions
};
};
return SourceManager2;
})()
);
function disableTransformOptionMerge(datasetModel) {
var transformOption = datasetModel.option.transform;
transformOption && setAsPrimitive(datasetModel.option.transform);
}
function isSeries(sourceHost) {
return sourceHost.mainType === "series";
}
function doThrow(errMsg) {
throw new Error(errMsg);
}
var TOOLTIP_LINE_HEIGHT_CSS = "line-height:1";
function getTooltipLineHeight(textStyle) {
var lineHeight = textStyle.lineHeight;
if (lineHeight == null) {
return TOOLTIP_LINE_HEIGHT_CSS;
} else {
return "line-height:" + encodeHTML(lineHeight + "") + "px";
}
}
function getTooltipTextStyle(textStyle, renderMode) {
var nameFontColor = textStyle.color || "#6e7079";
var nameFontSize = textStyle.fontSize || 12;
var nameFontWeight = textStyle.fontWeight || "400";
var valueFontColor = textStyle.color || "#464646";
var valueFontSize = textStyle.fontSize || 14;
var valueFontWeight = textStyle.fontWeight || "900";
if (renderMode === "html") {
return {
// eslint-disable-next-line max-len
nameStyle: "font-size:" + encodeHTML(nameFontSize + "") + "px;color:" + encodeHTML(nameFontColor) + ";font-weight:" + encodeHTML(nameFontWeight + ""),
// eslint-disable-next-line max-len
valueStyle: "font-size:" + encodeHTML(valueFontSize + "") + "px;color:" + encodeHTML(valueFontColor) + ";font-weight:" + encodeHTML(valueFontWeight + "")
};
} else {
return {
nameStyle: {
fontSize: nameFontSize,
fill: nameFontColor,
fontWeight: nameFontWeight
},
valueStyle: {
fontSize: valueFontSize,
fill: valueFontColor,
fontWeight: valueFontWeight
}
};
}
}
var HTML_GAPS = [0, 10, 20, 30];
var RICH_TEXT_GAPS = ["", "\n", "\n\n", "\n\n\n"];
function createTooltipMarkup(type, option) {
option.type = type;
return option;
}
function isSectionFragment(frag) {
return frag.type === "section";
}
function getBuilder(frag) {
return isSectionFragment(frag) ? buildSection : buildNameValue;
}
function getBlockGapLevel(frag) {
if (isSectionFragment(frag)) {
var gapLevel_1 = 0;
var subBlockLen = frag.blocks.length;
var hasInnerGap_1 = subBlockLen > 1 || subBlockLen > 0 && !frag.noHeader;
each$f(frag.blocks, function(subBlock) {
var subGapLevel = getBlockGapLevel(subBlock);
if (subGapLevel >= gapLevel_1) {
gapLevel_1 = subGapLevel + +(hasInnerGap_1 && // 0 always can not be readable gap level.
(!subGapLevel || isSectionFragment(subBlock) && !subBlock.noHeader));
}
});
return gapLevel_1;
}
return 0;
}
function buildSection(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) {
var noHeader = fragment.noHeader;
var gaps = getGap(getBlockGapLevel(fragment));
var subMarkupTextList = [];
var subBlocks = fragment.blocks || [];
assert(!subBlocks || isArray$1(subBlocks));
subBlocks = subBlocks || [];
var orderMode = ctx.orderMode;
if (fragment.sortBlocks && orderMode) {
subBlocks = subBlocks.slice();
var orderMap = {
valueAsc: "asc",
valueDesc: "desc"
};
if (hasOwn(orderMap, orderMode)) {
var comparator_1 = new SortOrderComparator(orderMap[orderMode], null);
subBlocks.sort(function(a, b) {
return comparator_1.evaluate(a.sortParam, b.sortParam);
});
} else if (orderMode === "seriesDesc") {
subBlocks.reverse();
}
}
each$f(subBlocks, function(subBlock, idx) {
var valueFormatter = fragment.valueFormatter;
var subMarkupText2 = getBuilder(subBlock)(
// Inherit valueFormatter
valueFormatter ? extend(extend({}, ctx), {
valueFormatter
}) : ctx,
subBlock,
idx > 0 ? gaps.html : 0,
toolTipTextStyle
);
subMarkupText2 != null && subMarkupTextList.push(subMarkupText2);
});
var subMarkupText = ctx.renderMode === "richText" ? subMarkupTextList.join(gaps.richText) : wrapBlockHTML(toolTipTextStyle, subMarkupTextList.join(""), noHeader ? topMarginForOuterGap : gaps.html);
if (noHeader) {
return subMarkupText;
}
var displayableHeader = makeValueReadable(fragment.header, "ordinal", ctx.useUTC);
var nameStyle = getTooltipTextStyle(toolTipTextStyle, ctx.renderMode).nameStyle;
var tooltipLineHeight = getTooltipLineHeight(toolTipTextStyle);
if (ctx.renderMode === "richText") {
return wrapInlineNameRichText(ctx, displayableHeader, nameStyle) + gaps.richText + subMarkupText;
} else {
return wrapBlockHTML(toolTipTextStyle, '' + encodeHTML(displayableHeader) + "
" + subMarkupText, topMarginForOuterGap);
}
}
function buildNameValue(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) {
var renderMode = ctx.renderMode;
var noName = fragment.noName;
var noValue = fragment.noValue;
var noMarker = !fragment.markerType;
var name = fragment.name;
var useUTC = ctx.useUTC;
var valueFormatter = fragment.valueFormatter || ctx.valueFormatter || function(value) {
value = isArray$1(value) ? value : [value];
return map$1(value, function(val, idx) {
return makeValueReadable(val, isArray$1(valueTypeOption) ? valueTypeOption[idx] : valueTypeOption, useUTC);
});
};
if (noName && noValue) {
return;
}
var markerStr = noMarker ? "" : ctx.markupStyleCreator.makeTooltipMarker(fragment.markerType, fragment.markerColor || "#333", renderMode);
var readableName = noName ? "" : makeValueReadable(name, "ordinal", useUTC);
var valueTypeOption = fragment.valueType;
var readableValueList = noValue ? [] : valueFormatter(fragment.value, fragment.dataIndex);
var valueAlignRight = !noMarker || !noName;
var valueCloseToMarker = !noMarker && noName;
var _a2 = getTooltipTextStyle(toolTipTextStyle, renderMode), nameStyle = _a2.nameStyle, valueStyle = _a2.valueStyle;
return renderMode === "richText" ? (noMarker ? "" : markerStr) + (noName ? "" : wrapInlineNameRichText(ctx, readableName, nameStyle)) + (noValue ? "" : wrapInlineValueRichText(ctx, readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)) : wrapBlockHTML(toolTipTextStyle, (noMarker ? "" : markerStr) + (noName ? "" : wrapInlineNameHTML(readableName, !noMarker, nameStyle)) + (noValue ? "" : wrapInlineValueHTML(readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)), topMarginForOuterGap);
}
function buildTooltipMarkup(fragment, markupStyleCreator, renderMode, orderMode, useUTC, toolTipTextStyle) {
if (!fragment) {
return;
}
var builder = getBuilder(fragment);
var ctx = {
useUTC,
renderMode,
orderMode,
markupStyleCreator,
valueFormatter: fragment.valueFormatter
};
return builder(ctx, fragment, 0, toolTipTextStyle);
}
function getGap(gapLevel) {
return {
html: HTML_GAPS[gapLevel],
richText: RICH_TEXT_GAPS[gapLevel]
};
}
function wrapBlockHTML(textStyle, encodedContent, topGap) {
var clearfix = '';
var marginCSS = "margin: " + topGap + "px 0 0";
var tooltipLineHeight = getTooltipLineHeight(textStyle);
return '' + encodedContent + clearfix + "
";
}
function wrapInlineNameHTML(name, leftHasMarker, style) {
var marginCss = leftHasMarker ? "margin-left:2px" : "";
return '' + encodeHTML(name) + "";
}
function wrapInlineValueHTML(valueList, alignRight, valueCloseToMarker, style) {
var paddingStr = valueCloseToMarker ? "10px" : "20px";
var alignCSS = alignRight ? "float:right;margin-left:" + paddingStr : "";
valueList = isArray$1(valueList) ? valueList : [valueList];
return '' + map$1(valueList, function(value) {
return encodeHTML(value);
}).join(" ") + "";
}
function wrapInlineNameRichText(ctx, name, style) {
return ctx.markupStyleCreator.wrapRichTextStyle(name, style);
}
function wrapInlineValueRichText(ctx, values, alignRight, valueCloseToMarker, style) {
var styles = [style];
var paddingLeft = valueCloseToMarker ? 10 : 20;
alignRight && styles.push({
padding: [0, 0, 0, paddingLeft],
align: "right"
});
return ctx.markupStyleCreator.wrapRichTextStyle(isArray$1(values) ? values.join(" ") : values, styles);
}
function retrieveVisualColorForTooltipMarker(series, dataIndex) {
var style = series.getData().getItemVisual(dataIndex, "style");
var color = style[series.visualDrawType];
return convertToColorString(color);
}
function getPaddingFromTooltipModel(model, renderMode) {
var padding = model.get("padding");
return padding != null ? padding : renderMode === "richText" ? [8, 10] : 10;
}
var TooltipMarkupStyleCreator = (
/** @class */
(function() {
function TooltipMarkupStyleCreator2() {
this.richTextStyles = {};
this._nextStyleNameId = getRandomIdBase();
}
TooltipMarkupStyleCreator2.prototype._generateStyleName = function() {
return "__EC_aUTo_" + this._nextStyleNameId++;
};
TooltipMarkupStyleCreator2.prototype.makeTooltipMarker = function(markerType, colorStr, renderMode) {
var markerId = renderMode === "richText" ? this._generateStyleName() : null;
var marker = getTooltipMarker({
color: colorStr,
type: markerType,
renderMode,
markerId
});
if (isString(marker)) {
return marker;
} else {
this.richTextStyles[markerId] = marker.style;
return marker.content;
}
};
TooltipMarkupStyleCreator2.prototype.wrapRichTextStyle = function(text, styles) {
var finalStl = {};
if (isArray$1(styles)) {
each$f(styles, function(stl) {
return extend(finalStl, stl);
});
} else {
extend(finalStl, styles);
}
var styleName = this._generateStyleName();
this.richTextStyles[styleName] = finalStl;
return "{" + styleName + "|" + text + "}";
};
return TooltipMarkupStyleCreator2;
})()
);
function defaultSeriesFormatTooltip(opt) {
var series = opt.series;
var dataIndex = opt.dataIndex;
var multipleSeries = opt.multipleSeries;
var data = series.getData();
var tooltipDims = data.mapDimensionsAll("defaultedTooltip");
var tooltipDimLen = tooltipDims.length;
var value = series.getRawValue(dataIndex);
var isValueArr = isArray$1(value);
var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex);
var inlineValue;
var inlineValueType;
var subBlocks;
var sortParam;
if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) {
var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor);
inlineValue = formatArrResult.inlineValues;
inlineValueType = formatArrResult.inlineValueTypes;
subBlocks = formatArrResult.blocks;
sortParam = formatArrResult.inlineValues[0];
} else if (tooltipDimLen) {
var dimInfo = data.getDimensionInfo(tooltipDims[0]);
sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]);
inlineValueType = dimInfo.type;
} else {
sortParam = inlineValue = isValueArr ? value[0] : value;
}
var seriesNameSpecified = isNameSpecified(series);
var seriesName = seriesNameSpecified && series.name || "";
var itemName = data.getName(dataIndex);
var inlineName = multipleSeries ? seriesName : itemName;
return createTooltipMarkup("section", {
header: seriesName,
// When series name is not specified, do not show a header line with only '-'.
// This case always happens in tooltip.trigger: 'item'.
noHeader: multipleSeries || !seriesNameSpecified,
sortParam,
blocks: [createTooltipMarkup("nameValue", {
markerType: "item",
markerColor,
// Do not mix display seriesName and itemName in one tooltip,
// which might confuses users.
name: inlineName,
// name dimension might be auto assigned, where the name might
// be not readable. So we check trim here.
noName: !trim$1(inlineName),
value: inlineValue,
valueType: inlineValueType,
dataIndex
})].concat(subBlocks || [])
});
}
function formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) {
var data = series.getData();
var isValueMultipleLine = reduce(value, function(isValueMultipleLine2, val, idx) {
var dimItem = data.getDimensionInfo(idx);
return isValueMultipleLine2 = isValueMultipleLine2 || dimItem && dimItem.tooltip !== false && dimItem.displayName != null;
}, false);
var inlineValues = [];
var inlineValueTypes = [];
var blocks = [];
tooltipDims.length ? each$f(tooltipDims, function(dim) {
setEachItem(retrieveRawValue(data, dataIndex, dim), dim);
}) : each$f(value, setEachItem);
function setEachItem(val, dim) {
var dimInfo = data.getDimensionInfo(dim);
if (!dimInfo || dimInfo.otherDims.tooltip === false) {
return;
}
if (isValueMultipleLine) {
blocks.push(createTooltipMarkup("nameValue", {
markerType: "subItem",
markerColor: colorStr,
name: dimInfo.displayName,
value: val,
valueType: dimInfo.type
}));
} else {
inlineValues.push(val);
inlineValueTypes.push(dimInfo.type);
}
}
return {
inlineValues,
inlineValueTypes,
blocks
};
}
var inner$k = makeInner();
function getSelectionKey(data, dataIndex) {
return data.getName(dataIndex) || data.getId(dataIndex);
}
var SERIES_UNIVERSAL_TRANSITION_PROP = "__universalTransitionEnabled";
var SeriesModel = (
/** @class */
(function(_super) {
__extends(SeriesModel2, _super);
function SeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._selectedDataIndicesMap = {};
return _this;
}
SeriesModel2.prototype.init = function(option, parentModel, ecModel) {
this.seriesIndex = this.componentIndex;
this.dataTask = createTask({
count: dataTaskCount,
reset: dataTaskReset
});
this.dataTask.context = {
model: this
};
this.mergeDefaultAndTheme(option, ecModel);
var sourceManager = inner$k(this).sourceManager = new SourceManager(this);
sourceManager.prepareSource();
var data = this.getInitialData(option, ecModel);
wrapData(data, this);
this.dataTask.context.data = data;
inner$k(this).dataBeforeProcessed = data;
autoSeriesName(this);
this._initSelectedMapFromData(data);
};
SeriesModel2.prototype.mergeDefaultAndTheme = function(option, ecModel) {
var layoutMode = fetchLayoutMode(this);
var inputPositionParams = layoutMode ? getLayoutParams(option) : {};
var themeSubType = this.subType;
if (ComponentModel.hasClass(themeSubType)) {
themeSubType += "Series";
}
merge(option, ecModel.getTheme().get(this.subType));
merge(option, this.getDefaultOption());
defaultEmphasis(option, "label", ["show"]);
this.fillDataTextStyle(option.data);
if (layoutMode) {
mergeLayoutParam(option, inputPositionParams, layoutMode);
}
};
SeriesModel2.prototype.mergeOption = function(newSeriesOption, ecModel) {
newSeriesOption = merge(this.option, newSeriesOption, true);
this.fillDataTextStyle(newSeriesOption.data);
var layoutMode = fetchLayoutMode(this);
if (layoutMode) {
mergeLayoutParam(this.option, newSeriesOption, layoutMode);
}
var sourceManager = inner$k(this).sourceManager;
sourceManager.dirty();
sourceManager.prepareSource();
var data = this.getInitialData(newSeriesOption, ecModel);
wrapData(data, this);
this.dataTask.dirty();
this.dataTask.context.data = data;
inner$k(this).dataBeforeProcessed = data;
autoSeriesName(this);
this._initSelectedMapFromData(data);
};
SeriesModel2.prototype.fillDataTextStyle = function(data) {
if (data && !isTypedArray(data)) {
var props = ["show"];
for (var i = 0; i < data.length; i++) {
if (data[i] && data[i].label) {
defaultEmphasis(data[i], "label", props);
}
}
}
};
SeriesModel2.prototype.getInitialData = function(option, ecModel) {
return;
};
SeriesModel2.prototype.appendData = function(params) {
var data = this.getRawData();
data.appendData(params.data);
};
SeriesModel2.prototype.getData = function(dataType) {
var task = getCurrentTask(this);
if (task) {
var data = task.context.data;
return dataType == null || !data.getLinkedData ? data : data.getLinkedData(dataType);
} else {
return inner$k(this).data;
}
};
SeriesModel2.prototype.getAllData = function() {
var mainData = this.getData();
return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{
data: mainData
}];
};
SeriesModel2.prototype.setData = function(data) {
var task = getCurrentTask(this);
if (task) {
var context = task.context;
context.outputData = data;
if (task !== this.dataTask) {
context.data = data;
}
}
inner$k(this).data = data;
};
SeriesModel2.prototype.getEncode = function() {
var encode = this.get("encode", true);
if (encode) {
return createHashMap(encode);
}
};
SeriesModel2.prototype.getSourceManager = function() {
return inner$k(this).sourceManager;
};
SeriesModel2.prototype.getSource = function() {
return this.getSourceManager().getSource();
};
SeriesModel2.prototype.getRawData = function() {
return inner$k(this).dataBeforeProcessed;
};
SeriesModel2.prototype.getColorBy = function() {
var colorBy = this.get("colorBy");
return colorBy || "series";
};
SeriesModel2.prototype.isColorBySeries = function() {
return this.getColorBy() === "series";
};
SeriesModel2.prototype.getBaseAxis = function() {
var coordSys = this.coordinateSystem;
return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();
};
SeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
return defaultSeriesFormatTooltip({
series: this,
dataIndex,
multipleSeries
});
};
SeriesModel2.prototype.isAnimationEnabled = function() {
var ecModel = this.ecModel;
if (env.node && !(ecModel && ecModel.ssr)) {
return false;
}
var animationEnabled = this.getShallow("animation");
if (animationEnabled) {
if (this.getData().count() > this.getShallow("animationThreshold")) {
animationEnabled = false;
}
}
return !!animationEnabled;
};
SeriesModel2.prototype.restoreData = function() {
this.dataTask.dirty();
};
SeriesModel2.prototype.getColorFromPalette = function(name, scope, requestColorNum) {
var ecModel = this.ecModel;
var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum);
if (!color) {
color = ecModel.getColorFromPalette(name, scope, requestColorNum);
}
return color;
};
SeriesModel2.prototype.coordDimToDataDim = function(coordDim) {
return this.getRawData().mapDimensionsAll(coordDim);
};
SeriesModel2.prototype.getProgressive = function() {
return this.get("progressive");
};
SeriesModel2.prototype.getProgressiveThreshold = function() {
return this.get("progressiveThreshold");
};
SeriesModel2.prototype.select = function(innerDataIndices, dataType) {
this._innerSelect(this.getData(dataType), innerDataIndices);
};
SeriesModel2.prototype.unselect = function(innerDataIndices, dataType) {
var selectedMap = this.option.selectedMap;
if (!selectedMap) {
return;
}
var selectedMode = this.option.selectedMode;
var data = this.getData(dataType);
if (selectedMode === "series" || selectedMap === "all") {
this.option.selectedMap = {};
this._selectedDataIndicesMap = {};
return;
}
for (var i = 0; i < innerDataIndices.length; i++) {
var dataIndex = innerDataIndices[i];
var nameOrId = getSelectionKey(data, dataIndex);
selectedMap[nameOrId] = false;
this._selectedDataIndicesMap[nameOrId] = -1;
}
};
SeriesModel2.prototype.toggleSelect = function(innerDataIndices, dataType) {
var tmpArr2 = [];
for (var i = 0; i < innerDataIndices.length; i++) {
tmpArr2[0] = innerDataIndices[i];
this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr2, dataType) : this.select(tmpArr2, dataType);
}
};
SeriesModel2.prototype.getSelectedDataIndices = function() {
if (this.option.selectedMap === "all") {
return [].slice.call(this.getData().getIndices());
}
var selectedDataIndicesMap = this._selectedDataIndicesMap;
var nameOrIds = keys(selectedDataIndicesMap);
var dataIndices = [];
for (var i = 0; i < nameOrIds.length; i++) {
var dataIndex = selectedDataIndicesMap[nameOrIds[i]];
if (dataIndex >= 0) {
dataIndices.push(dataIndex);
}
}
return dataIndices;
};
SeriesModel2.prototype.isSelected = function(dataIndex, dataType) {
var selectedMap = this.option.selectedMap;
if (!selectedMap) {
return false;
}
var data = this.getData(dataType);
return (selectedMap === "all" || selectedMap[getSelectionKey(data, dataIndex)]) && !data.getItemModel(dataIndex).get(["select", "disabled"]);
};
SeriesModel2.prototype.isUniversalTransitionEnabled = function() {
if (this[SERIES_UNIVERSAL_TRANSITION_PROP]) {
return true;
}
var universalTransitionOpt = this.option.universalTransition;
if (!universalTransitionOpt) {
return false;
}
if (universalTransitionOpt === true) {
return true;
}
return universalTransitionOpt && universalTransitionOpt.enabled;
};
SeriesModel2.prototype._innerSelect = function(data, innerDataIndices) {
var _a2, _b2;
var option = this.option;
var selectedMode = option.selectedMode;
var len2 = innerDataIndices.length;
if (!selectedMode || !len2) {
return;
}
if (selectedMode === "series") {
option.selectedMap = "all";
} else if (selectedMode === "multiple") {
if (!isObject$3(option.selectedMap)) {
option.selectedMap = {};
}
var selectedMap = option.selectedMap;
for (var i = 0; i < len2; i++) {
var dataIndex = innerDataIndices[i];
var nameOrId = getSelectionKey(data, dataIndex);
selectedMap[nameOrId] = true;
this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex);
}
} else if (selectedMode === "single" || selectedMode === true) {
var lastDataIndex = innerDataIndices[len2 - 1];
var nameOrId = getSelectionKey(data, lastDataIndex);
option.selectedMap = (_a2 = {}, _a2[nameOrId] = true, _a2);
this._selectedDataIndicesMap = (_b2 = {}, _b2[nameOrId] = data.getRawIndex(lastDataIndex), _b2);
}
};
SeriesModel2.prototype._initSelectedMapFromData = function(data) {
if (this.option.selectedMap) {
return;
}
var dataIndices = [];
if (data.hasItemOption) {
data.each(function(idx) {
var rawItem = data.getRawDataItem(idx);
if (rawItem && rawItem.selected) {
dataIndices.push(idx);
}
});
}
if (dataIndices.length > 0) {
this._innerSelect(data, dataIndices);
}
};
SeriesModel2.registerClass = function(clz) {
return ComponentModel.registerClass(clz);
};
SeriesModel2.protoInitialize = (function() {
var proto2 = SeriesModel2.prototype;
proto2.type = "series.__base__";
proto2.seriesIndex = 0;
proto2.ignoreStyleOnData = false;
proto2.hasSymbolVisual = false;
proto2.defaultSymbol = "circle";
proto2.visualStyleAccessPath = "itemStyle";
proto2.visualDrawType = "fill";
})();
return SeriesModel2;
})(ComponentModel)
);
mixin(SeriesModel, DataFormatMixin);
mixin(SeriesModel, PaletteMixin);
mountExtend(SeriesModel, ComponentModel);
function autoSeriesName(seriesModel) {
var name = seriesModel.name;
if (!isNameSpecified(seriesModel)) {
seriesModel.name = getSeriesAutoName(seriesModel) || name;
}
}
function getSeriesAutoName(seriesModel) {
var data = seriesModel.getRawData();
var dataDims = data.mapDimensionsAll("seriesName");
var nameArr = [];
each$f(dataDims, function(dataDim) {
var dimInfo = data.getDimensionInfo(dataDim);
dimInfo.displayName && nameArr.push(dimInfo.displayName);
});
return nameArr.join(" ");
}
function dataTaskCount(context) {
return context.model.getRawData().count();
}
function dataTaskReset(context) {
var seriesModel = context.model;
seriesModel.setData(seriesModel.getRawData().cloneShallow());
return dataTaskProgress;
}
function dataTaskProgress(param, context) {
if (context.outputData && param.end > context.outputData.count()) {
context.model.getRawData().cloneShallow(context.outputData);
}
}
function wrapData(data, seriesModel) {
each$f(concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function(methodName) {
data.wrapMethod(methodName, curry$1(onDataChange, seriesModel));
});
}
function onDataChange(seriesModel, newList) {
var task = getCurrentTask(seriesModel);
if (task) {
task.setOutputEnd((newList || this).count());
}
return newList;
}
function getCurrentTask(seriesModel) {
var scheduler = (seriesModel.ecModel || {}).scheduler;
var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);
if (pipeline) {
var task = pipeline.currentTask;
if (task) {
var agentStubMap = task.agentStubMap;
if (agentStubMap) {
task = agentStubMap.get(seriesModel.uid);
}
}
return task;
}
}
var ComponentView = (
/** @class */
(function() {
function ComponentView2() {
this.group = new Group$3();
this.uid = getUID("viewComponent");
}
ComponentView2.prototype.init = function(ecModel, api) {
};
ComponentView2.prototype.render = function(model, ecModel, api, payload) {
};
ComponentView2.prototype.dispose = function(ecModel, api) {
};
ComponentView2.prototype.updateView = function(model, ecModel, api, payload) {
};
ComponentView2.prototype.updateLayout = function(model, ecModel, api, payload) {
};
ComponentView2.prototype.updateVisual = function(model, ecModel, api, payload) {
};
ComponentView2.prototype.toggleBlurSeries = function(seriesModels, isBlur, ecModel) {
};
ComponentView2.prototype.eachRendered = function(cb) {
var group = this.group;
if (group) {
group.traverse(cb);
}
};
return ComponentView2;
})()
);
enableClassExtend(ComponentView);
enableClassManagement(ComponentView);
function createRenderPlanner() {
var inner2 = makeInner();
return function(seriesModel) {
var fields = inner2(seriesModel);
var pipelineContext = seriesModel.pipelineContext;
var originalLarge = !!fields.large;
var originalProgressive = !!fields.progressiveRender;
var large = fields.large = !!(pipelineContext && pipelineContext.large);
var progressive = fields.progressiveRender = !!(pipelineContext && pipelineContext.progressiveRender);
return !!(originalLarge !== large || originalProgressive !== progressive) && "reset";
};
}
var inner$j = makeInner();
var renderPlanner = createRenderPlanner();
var ChartView = (
/** @class */
(function() {
function ChartView2() {
this.group = new Group$3();
this.uid = getUID("viewChart");
this.renderTask = createTask({
plan: renderTaskPlan,
reset: renderTaskReset
});
this.renderTask.context = {
view: this
};
}
ChartView2.prototype.init = function(ecModel, api) {
};
ChartView2.prototype.render = function(seriesModel, ecModel, api, payload) {
};
ChartView2.prototype.highlight = function(seriesModel, ecModel, api, payload) {
var data = seriesModel.getData(payload && payload.dataType);
if (!data) {
return;
}
toggleHighlight(data, payload, "emphasis");
};
ChartView2.prototype.downplay = function(seriesModel, ecModel, api, payload) {
var data = seriesModel.getData(payload && payload.dataType);
if (!data) {
return;
}
toggleHighlight(data, payload, "normal");
};
ChartView2.prototype.remove = function(ecModel, api) {
this.group.removeAll();
};
ChartView2.prototype.dispose = function(ecModel, api) {
};
ChartView2.prototype.updateView = function(seriesModel, ecModel, api, payload) {
this.render(seriesModel, ecModel, api, payload);
};
ChartView2.prototype.updateLayout = function(seriesModel, ecModel, api, payload) {
this.render(seriesModel, ecModel, api, payload);
};
ChartView2.prototype.updateVisual = function(seriesModel, ecModel, api, payload) {
this.render(seriesModel, ecModel, api, payload);
};
ChartView2.prototype.eachRendered = function(cb) {
traverseElements(this.group, cb);
};
ChartView2.markUpdateMethod = function(payload, methodName) {
inner$j(payload).updateMethod = methodName;
};
ChartView2.protoInitialize = (function() {
var proto2 = ChartView2.prototype;
proto2.type = "chart";
})();
return ChartView2;
})()
);
function elSetState(el, state, highlightDigit) {
if (el && isHighDownDispatcher(el)) {
(state === "emphasis" ? enterEmphasis : leaveEmphasis)(el, highlightDigit);
}
}
function toggleHighlight(data, payload, state) {
var dataIndex = queryDataIndex(data, payload);
var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null;
if (dataIndex != null) {
each$f(normalizeToArray(dataIndex), function(dataIdx) {
elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);
});
} else {
data.eachItemGraphicEl(function(el) {
elSetState(el, state, highlightDigit);
});
}
}
enableClassExtend(ChartView);
enableClassManagement(ChartView);
function renderTaskPlan(context) {
return renderPlanner(context.model);
}
function renderTaskReset(context) {
var seriesModel = context.model;
var ecModel = context.ecModel;
var api = context.api;
var payload = context.payload;
var progressiveRender = seriesModel.pipelineContext.progressiveRender;
var view = context.view;
var updateMethod = payload && inner$j(payload).updateMethod;
var methodName = progressiveRender ? "incrementalPrepareRender" : updateMethod && view[updateMethod] ? updateMethod : "render";
if (methodName !== "render") {
view[methodName](seriesModel, ecModel, api, payload);
}
return progressMethodMap[methodName];
}
var progressMethodMap = {
incrementalPrepareRender: {
progress: function(params, context) {
context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload);
}
},
render: {
// Put view.render in `progress` to support appendData. But in this case
// view.render should not be called in reset, otherwise it will be called
// twise. Use `forceFirstProgress` to make sure that view.render is called
// in any cases.
forceFirstProgress: true,
progress: function(params, context) {
context.view.render(context.model, context.ecModel, context.api, context.payload);
}
}
};
var ORIGIN_METHOD = "\0__throttleOriginMethod";
var RATE = "\0__throttleRate";
var THROTTLE_TYPE = "\0__throttleType";
function throttle(fn, delay, debounce) {
var currCall;
var lastCall = 0;
var lastExec = 0;
var timer = null;
var diff;
var scope;
var args;
var debounceNextCall;
delay = delay || 0;
function exec() {
lastExec = (/* @__PURE__ */ new Date()).getTime();
timer = null;
fn.apply(scope, args || []);
}
var cb = function() {
var cbArgs = [];
for (var _i = 0; _i < arguments.length; _i++) {
cbArgs[_i] = arguments[_i];
}
currCall = (/* @__PURE__ */ new Date()).getTime();
scope = this;
args = cbArgs;
var thisDelay = debounceNextCall || delay;
var thisDebounce = debounceNextCall || debounce;
debounceNextCall = null;
diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;
clearTimeout(timer);
if (thisDebounce) {
timer = setTimeout(exec, thisDelay);
} else {
if (diff >= 0) {
exec();
} else {
timer = setTimeout(exec, -diff);
}
}
lastCall = currCall;
};
cb.clear = function() {
if (timer) {
clearTimeout(timer);
timer = null;
}
};
cb.debounceNextCall = function(debounceDelay) {
debounceNextCall = debounceDelay;
};
return cb;
}
function createOrUpdate(obj, fnAttr, rate, throttleType) {
var fn = obj[fnAttr];
if (!fn) {
return;
}
var originFn = fn[ORIGIN_METHOD] || fn;
var lastThrottleType = fn[THROTTLE_TYPE];
var lastRate = fn[RATE];
if (lastRate !== rate || lastThrottleType !== throttleType) {
if (rate == null || !throttleType) {
return obj[fnAttr] = originFn;
}
fn = obj[fnAttr] = throttle(originFn, rate, throttleType === "debounce");
fn[ORIGIN_METHOD] = originFn;
fn[THROTTLE_TYPE] = throttleType;
fn[RATE] = rate;
}
return fn;
}
function clear$1(obj, fnAttr) {
var fn = obj[fnAttr];
if (fn && fn[ORIGIN_METHOD]) {
fn.clear && fn.clear();
obj[fnAttr] = fn[ORIGIN_METHOD];
}
}
var inner$i = makeInner();
var defaultStyleMappers = {
itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true),
lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true)
};
var defaultColorKey = {
lineStyle: "stroke",
itemStyle: "fill"
};
function getStyleMapper(seriesModel, stylePath) {
var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath];
if (!styleMapper) {
console.warn("Unknown style type '" + stylePath + "'.");
return defaultStyleMappers.itemStyle;
}
return styleMapper;
}
function getDefaultColorKey(seriesModel, stylePath) {
var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath];
if (!colorKey) {
console.warn("Unknown style type '" + stylePath + "'.");
return "fill";
}
return colorKey;
}
var seriesStyleTask = {
createOnAllSeries: true,
performRawSeries: true,
reset: function(seriesModel, ecModel) {
var data = seriesModel.getData();
var stylePath = seriesModel.visualStyleAccessPath || "itemStyle";
var styleModel = seriesModel.getModel(stylePath);
var getStyle = getStyleMapper(seriesModel, stylePath);
var globalStyle = getStyle(styleModel);
var decalOption = styleModel.getShallow("decal");
if (decalOption) {
data.setVisual("decal", decalOption);
decalOption.dirty = true;
}
var colorKey = getDefaultColorKey(seriesModel, stylePath);
var color = globalStyle[colorKey];
var colorCallback = isFunction(color) ? color : null;
var hasAutoColor = globalStyle.fill === "auto" || globalStyle.stroke === "auto";
if (!globalStyle[colorKey] || colorCallback || hasAutoColor) {
var colorPalette2 = seriesModel.getColorFromPalette(
// TODO series count changed.
seriesModel.name,
null,
ecModel.getSeriesCount()
);
if (!globalStyle[colorKey]) {
globalStyle[colorKey] = colorPalette2;
data.setVisual("colorFromPalette", true);
}
globalStyle.fill = globalStyle.fill === "auto" || isFunction(globalStyle.fill) ? colorPalette2 : globalStyle.fill;
globalStyle.stroke = globalStyle.stroke === "auto" || isFunction(globalStyle.stroke) ? colorPalette2 : globalStyle.stroke;
}
data.setVisual("style", globalStyle);
data.setVisual("drawType", colorKey);
if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) {
data.setVisual("colorFromPalette", false);
return {
dataEach: function(data2, idx) {
var dataParams = seriesModel.getDataParams(idx);
var itemStyle = extend({}, globalStyle);
itemStyle[colorKey] = colorCallback(dataParams);
data2.setItemVisual(idx, "style", itemStyle);
}
};
}
}
};
var sharedModel = new Model();
var dataStyleTask = {
createOnAllSeries: true,
performRawSeries: true,
reset: function(seriesModel, ecModel) {
if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var data = seriesModel.getData();
var stylePath = seriesModel.visualStyleAccessPath || "itemStyle";
var getStyle = getStyleMapper(seriesModel, stylePath);
var colorKey = data.getVisual("drawType");
return {
dataEach: data.hasItemOption ? function(data2, idx) {
var rawItem = data2.getRawDataItem(idx);
if (rawItem && rawItem[stylePath]) {
sharedModel.option = rawItem[stylePath];
var style = getStyle(sharedModel);
var existsStyle = data2.ensureUniqueItemVisual(idx, "style");
extend(existsStyle, style);
if (sharedModel.option.decal) {
data2.setItemVisual(idx, "decal", sharedModel.option.decal);
sharedModel.option.decal.dirty = true;
}
if (colorKey in style) {
data2.setItemVisual(idx, "colorFromPalette", false);
}
}
} : null
};
}
};
var dataColorPaletteTask = {
performRawSeries: true,
overallReset: function(ecModel) {
var paletteScopeGroupByType = createHashMap();
ecModel.eachSeries(function(seriesModel) {
var colorBy = seriesModel.getColorBy();
if (seriesModel.isColorBySeries()) {
return;
}
var key = seriesModel.type + "-" + colorBy;
var colorScope = paletteScopeGroupByType.get(key);
if (!colorScope) {
colorScope = {};
paletteScopeGroupByType.set(key, colorScope);
}
inner$i(seriesModel).scope = colorScope;
});
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var dataAll = seriesModel.getRawData();
var idxMap = {};
var data = seriesModel.getData();
var colorScope = inner$i(seriesModel).scope;
var stylePath = seriesModel.visualStyleAccessPath || "itemStyle";
var colorKey = getDefaultColorKey(seriesModel, stylePath);
data.each(function(idx) {
var rawIdx = data.getRawIndex(idx);
idxMap[rawIdx] = idx;
});
dataAll.each(function(rawIdx) {
var idx = idxMap[rawIdx];
var fromPalette = data.getItemVisual(idx, "colorFromPalette");
if (fromPalette) {
var itemStyle = data.ensureUniqueItemVisual(idx, "style");
var name_1 = dataAll.getName(rawIdx) || rawIdx + "";
var dataCount = dataAll.count();
itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount);
}
});
});
}
};
var PI$4 = Math.PI;
function defaultLoading(api, opts) {
opts = opts || {};
defaults(opts, {
text: "loading",
textColor: "#000",
fontSize: 12,
fontWeight: "normal",
fontStyle: "normal",
fontFamily: "sans-serif",
maskColor: "rgba(255, 255, 255, 0.8)",
showSpinner: true,
color: "#5470c6",
spinnerRadius: 10,
lineWidth: 5,
zlevel: 0
});
var group = new Group$3();
var mask = new Rect$2({
style: {
fill: opts.maskColor
},
zlevel: opts.zlevel,
z: 1e4
});
group.add(mask);
var textContent = new ZRText({
style: {
text: opts.text,
fill: opts.textColor,
fontSize: opts.fontSize,
fontWeight: opts.fontWeight,
fontStyle: opts.fontStyle,
fontFamily: opts.fontFamily
},
zlevel: opts.zlevel,
z: 10001
});
var labelRect = new Rect$2({
style: {
fill: "none"
},
textContent,
textConfig: {
position: "right",
distance: 10
},
zlevel: opts.zlevel,
z: 10001
});
group.add(labelRect);
var arc;
if (opts.showSpinner) {
arc = new Arc({
shape: {
startAngle: -PI$4 / 2,
endAngle: -PI$4 / 2 + 0.1,
r: opts.spinnerRadius
},
style: {
stroke: opts.color,
lineCap: "round",
lineWidth: opts.lineWidth
},
zlevel: opts.zlevel,
z: 10001
});
arc.animateShape(true).when(1e3, {
endAngle: PI$4 * 3 / 2
}).start("circularInOut");
arc.animateShape(true).when(1e3, {
startAngle: PI$4 * 3 / 2
}).delay(300).start("circularInOut");
group.add(arc);
}
group.resize = function() {
var textWidth = textContent.getBoundingRect().width;
var r = opts.showSpinner ? opts.spinnerRadius : 0;
var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 - (opts.showSpinner && textWidth ? 0 : 5 + textWidth / 2) + (opts.showSpinner ? 0 : textWidth / 2) + (textWidth ? 0 : r);
var cy = api.getHeight() / 2;
opts.showSpinner && arc.setShape({
cx,
cy
});
labelRect.setShape({
x: cx - r,
y: cy - r,
width: r * 2,
height: r * 2
});
mask.setShape({
x: 0,
y: 0,
width: api.getWidth(),
height: api.getHeight()
});
};
group.resize();
return group;
}
var Scheduler = (
/** @class */
(function() {
function Scheduler2(ecInstance, api, dataProcessorHandlers, visualHandlers) {
this._stageTaskMap = createHashMap();
this.ecInstance = ecInstance;
this.api = api;
dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice();
visualHandlers = this._visualHandlers = visualHandlers.slice();
this._allHandlers = dataProcessorHandlers.concat(visualHandlers);
}
Scheduler2.prototype.restoreData = function(ecModel, payload) {
ecModel.restoreData(payload);
this._stageTaskMap.each(function(taskRecord) {
var overallTask = taskRecord.overallTask;
overallTask && overallTask.dirty();
});
};
Scheduler2.prototype.getPerformArgs = function(task, isBlock) {
if (!task.__pipeline) {
return;
}
var pipeline = this._pipelineMap.get(task.__pipeline.id);
var pCtx = pipeline.context;
var incremental = !isBlock && pipeline.progressiveEnabled && (!pCtx || pCtx.progressiveRender) && task.__idxInPipeline > pipeline.blockIndex;
var step = incremental ? pipeline.step : null;
var modDataCount = pCtx && pCtx.modDataCount;
var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null;
return {
step,
modBy,
modDataCount
};
};
Scheduler2.prototype.getPipeline = function(pipelineId) {
return this._pipelineMap.get(pipelineId);
};
Scheduler2.prototype.updateStreamModes = function(seriesModel, view) {
var pipeline = this._pipelineMap.get(seriesModel.uid);
var data = seriesModel.getData();
var dataLen = data.count();
var progressiveRender = pipeline.progressiveEnabled && view.incrementalPrepareRender && dataLen >= pipeline.threshold;
var large = seriesModel.get("large") && dataLen >= seriesModel.get("largeThreshold");
var modDataCount = seriesModel.get("progressiveChunkMode") === "mod" ? dataLen : null;
seriesModel.pipelineContext = pipeline.context = {
progressiveRender,
modDataCount,
large
};
};
Scheduler2.prototype.restorePipelines = function(ecModel) {
var scheduler = this;
var pipelineMap = scheduler._pipelineMap = createHashMap();
ecModel.eachSeries(function(seriesModel) {
var progressive = seriesModel.getProgressive();
var pipelineId = seriesModel.uid;
pipelineMap.set(pipelineId, {
id: pipelineId,
head: null,
tail: null,
threshold: seriesModel.getProgressiveThreshold(),
progressiveEnabled: progressive && !(seriesModel.preventIncremental && seriesModel.preventIncremental()),
blockIndex: -1,
step: Math.round(progressive || 700),
count: 0
});
scheduler._pipe(seriesModel, seriesModel.dataTask);
});
};
Scheduler2.prototype.prepareStageTasks = function() {
var stageTaskMap = this._stageTaskMap;
var ecModel = this.api.getModel();
var api = this.api;
each$f(this._allHandlers, function(handler) {
var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, {});
var errMsg = "";
assert(!(handler.reset && handler.overallReset), errMsg);
handler.reset && this._createSeriesStageTask(handler, record, ecModel, api);
handler.overallReset && this._createOverallStageTask(handler, record, ecModel, api);
}, this);
};
Scheduler2.prototype.prepareView = function(view, model, ecModel, api) {
var renderTask = view.renderTask;
var context = renderTask.context;
context.model = model;
context.ecModel = ecModel;
context.api = api;
renderTask.__block = !view.incrementalPrepareRender;
this._pipe(model, renderTask);
};
Scheduler2.prototype.performDataProcessorTasks = function(ecModel, payload) {
this._performStageTasks(this._dataProcessorHandlers, ecModel, payload, {
block: true
});
};
Scheduler2.prototype.performVisualTasks = function(ecModel, payload, opt) {
this._performStageTasks(this._visualHandlers, ecModel, payload, opt);
};
Scheduler2.prototype._performStageTasks = function(stageHandlers, ecModel, payload, opt) {
opt = opt || {};
var unfinished = false;
var scheduler = this;
each$f(stageHandlers, function(stageHandler, idx) {
if (opt.visualType && opt.visualType !== stageHandler.visualType) {
return;
}
var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid);
var seriesTaskMap = stageHandlerRecord.seriesTaskMap;
var overallTask = stageHandlerRecord.overallTask;
if (overallTask) {
var overallNeedDirty_1;
var agentStubMap = overallTask.agentStubMap;
agentStubMap.each(function(stub) {
if (needSetDirty(opt, stub)) {
stub.dirty();
overallNeedDirty_1 = true;
}
});
overallNeedDirty_1 && overallTask.dirty();
scheduler.updatePayload(overallTask, payload);
var performArgs_1 = scheduler.getPerformArgs(overallTask, opt.block);
agentStubMap.each(function(stub) {
stub.perform(performArgs_1);
});
if (overallTask.perform(performArgs_1)) {
unfinished = true;
}
} else if (seriesTaskMap) {
seriesTaskMap.each(function(task, pipelineId) {
if (needSetDirty(opt, task)) {
task.dirty();
}
var performArgs = scheduler.getPerformArgs(task, opt.block);
performArgs.skip = !stageHandler.performRawSeries && ecModel.isSeriesFiltered(task.context.model);
scheduler.updatePayload(task, payload);
if (task.perform(performArgs)) {
unfinished = true;
}
});
}
});
function needSetDirty(opt2, task) {
return opt2.setDirty && (!opt2.dirtyMap || opt2.dirtyMap.get(task.__pipeline.id));
}
this.unfinished = unfinished || this.unfinished;
};
Scheduler2.prototype.performSeriesTasks = function(ecModel) {
var unfinished;
ecModel.eachSeries(function(seriesModel) {
unfinished = seriesModel.dataTask.perform() || unfinished;
});
this.unfinished = unfinished || this.unfinished;
};
Scheduler2.prototype.plan = function() {
this._pipelineMap.each(function(pipeline) {
var task = pipeline.tail;
do {
if (task.__block) {
pipeline.blockIndex = task.__idxInPipeline;
break;
}
task = task.getUpstream();
} while (task);
});
};
Scheduler2.prototype.updatePayload = function(task, payload) {
payload !== "remain" && (task.context.payload = payload);
};
Scheduler2.prototype._createSeriesStageTask = function(stageHandler, stageHandlerRecord, ecModel, api) {
var scheduler = this;
var oldSeriesTaskMap = stageHandlerRecord.seriesTaskMap;
var newSeriesTaskMap = stageHandlerRecord.seriesTaskMap = createHashMap();
var seriesType2 = stageHandler.seriesType;
var getTargetSeries = stageHandler.getTargetSeries;
if (stageHandler.createOnAllSeries) {
ecModel.eachRawSeries(create2);
} else if (seriesType2) {
ecModel.eachRawSeriesByType(seriesType2, create2);
} else if (getTargetSeries) {
getTargetSeries(ecModel, api).each(create2);
}
function create2(seriesModel) {
var pipelineId = seriesModel.uid;
var task = newSeriesTaskMap.set(pipelineId, oldSeriesTaskMap && oldSeriesTaskMap.get(pipelineId) || createTask({
plan: seriesTaskPlan,
reset: seriesTaskReset,
count: seriesTaskCount
}));
task.context = {
model: seriesModel,
ecModel,
api,
// PENDING: `useClearVisual` not used?
useClearVisual: stageHandler.isVisual && !stageHandler.isLayout,
plan: stageHandler.plan,
reset: stageHandler.reset,
scheduler
};
scheduler._pipe(seriesModel, task);
}
};
Scheduler2.prototype._createOverallStageTask = function(stageHandler, stageHandlerRecord, ecModel, api) {
var scheduler = this;
var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask || createTask({
reset: overallTaskReset
});
overallTask.context = {
ecModel,
api,
overallReset: stageHandler.overallReset,
scheduler
};
var oldAgentStubMap = overallTask.agentStubMap;
var newAgentStubMap = overallTask.agentStubMap = createHashMap();
var seriesType2 = stageHandler.seriesType;
var getTargetSeries = stageHandler.getTargetSeries;
var overallProgress = true;
var shouldOverallTaskDirty = false;
var errMsg = "";
assert(!stageHandler.createOnAllSeries, errMsg);
if (seriesType2) {
ecModel.eachRawSeriesByType(seriesType2, createStub);
} else if (getTargetSeries) {
getTargetSeries(ecModel, api).each(createStub);
} else {
overallProgress = false;
each$f(ecModel.getSeries(), createStub);
}
function createStub(seriesModel) {
var pipelineId = seriesModel.uid;
var stub = newAgentStubMap.set(pipelineId, oldAgentStubMap && oldAgentStubMap.get(pipelineId) || // When the result of `getTargetSeries` changed, the overallTask
// should be set as dirty and re-performed.
(shouldOverallTaskDirty = true, createTask({
reset: stubReset,
onDirty: stubOnDirty
})));
stub.context = {
model: seriesModel,
overallProgress
// FIXME:TS never used, so comment it
// modifyOutputEnd: modifyOutputEnd
};
stub.agent = overallTask;
stub.__block = overallProgress;
scheduler._pipe(seriesModel, stub);
}
if (shouldOverallTaskDirty) {
overallTask.dirty();
}
};
Scheduler2.prototype._pipe = function(seriesModel, task) {
var pipelineId = seriesModel.uid;
var pipeline = this._pipelineMap.get(pipelineId);
!pipeline.head && (pipeline.head = task);
pipeline.tail && pipeline.tail.pipe(task);
pipeline.tail = task;
task.__idxInPipeline = pipeline.count++;
task.__pipeline = pipeline;
};
Scheduler2.wrapStageHandler = function(stageHandler, visualType) {
if (isFunction(stageHandler)) {
stageHandler = {
overallReset: stageHandler,
seriesType: detectSeriseType(stageHandler)
};
}
stageHandler.uid = getUID("stageHandler");
visualType && (stageHandler.visualType = visualType);
return stageHandler;
};
return Scheduler2;
})()
);
function overallTaskReset(context) {
context.overallReset(context.ecModel, context.api, context.payload);
}
function stubReset(context) {
return context.overallProgress && stubProgress;
}
function stubProgress() {
this.agent.dirty();
this.getDownstream().dirty();
}
function stubOnDirty() {
this.agent && this.agent.dirty();
}
function seriesTaskPlan(context) {
return context.plan ? context.plan(context.model, context.ecModel, context.api, context.payload) : null;
}
function seriesTaskReset(context) {
if (context.useClearVisual) {
context.data.clearAllVisual();
}
var resetDefines = context.resetDefines = normalizeToArray(context.reset(context.model, context.ecModel, context.api, context.payload));
return resetDefines.length > 1 ? map$1(resetDefines, function(v, idx) {
return makeSeriesTaskProgress(idx);
}) : singleSeriesTaskProgress;
}
var singleSeriesTaskProgress = makeSeriesTaskProgress(0);
function makeSeriesTaskProgress(resetDefineIdx) {
return function(params, context) {
var data = context.data;
var resetDefine = context.resetDefines[resetDefineIdx];
if (resetDefine && resetDefine.dataEach) {
for (var i = params.start; i < params.end; i++) {
resetDefine.dataEach(data, i);
}
} else if (resetDefine && resetDefine.progress) {
resetDefine.progress(params, data);
}
};
}
function seriesTaskCount(context) {
return context.data.count();
}
function detectSeriseType(legacyFunc) {
seriesType = null;
try {
legacyFunc(ecModelMock, apiMock);
} catch (e) {
}
return seriesType;
}
var ecModelMock = {};
var apiMock = {};
var seriesType;
mockMethods(ecModelMock, GlobalModel);
mockMethods(apiMock, ExtensionAPI);
ecModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function(type) {
seriesType = type;
};
ecModelMock.eachComponent = function(cond) {
if (cond.mainType === "series" && cond.subType) {
seriesType = cond.subType;
}
};
function mockMethods(target, Clz) {
for (var name_1 in Clz.prototype) {
target[name_1] = noop;
}
}
var colorAll = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"];
const lightTheme = {
color: colorAll,
colorLayer: [["#37A2DA", "#ffd85c", "#fd7b5f"], ["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"], ["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], colorAll]
};
var contrastColor = "#B9B8CE";
var backgroundColor = "#100C2A";
var axisCommon = function() {
return {
axisLine: {
lineStyle: {
color: contrastColor
}
},
splitLine: {
lineStyle: {
color: "#484753"
}
},
splitArea: {
areaStyle: {
color: ["rgba(255,255,255,0.02)", "rgba(255,255,255,0.05)"]
}
},
minorSplitLine: {
lineStyle: {
color: "#20203B"
}
}
};
};
var colorPalette = ["#4992ff", "#7cffb2", "#fddd60", "#ff6e76", "#58d9f9", "#05c091", "#ff8a45", "#8d48e3", "#dd79ff"];
var theme = {
darkMode: true,
color: colorPalette,
backgroundColor,
axisPointer: {
lineStyle: {
color: "#817f91"
},
crossStyle: {
color: "#817f91"
},
label: {
// TODO Contrast of label backgorundColor
color: "#fff"
}
},
legend: {
textStyle: {
color: contrastColor
},
pageTextStyle: {
color: contrastColor
}
},
textStyle: {
color: contrastColor
},
title: {
textStyle: {
color: "#EEF1FA"
},
subtextStyle: {
color: "#B9B8CE"
}
},
toolbox: {
iconStyle: {
borderColor: contrastColor
}
},
dataZoom: {
borderColor: "#71708A",
textStyle: {
color: contrastColor
},
brushStyle: {
color: "rgba(135,163,206,0.3)"
},
handleStyle: {
color: "#353450",
borderColor: "#C5CBE3"
},
moveHandleStyle: {
color: "#B0B6C3",
opacity: 0.3
},
fillerColor: "rgba(135,163,206,0.2)",
emphasis: {
handleStyle: {
borderColor: "#91B7F2",
color: "#4D587D"
},
moveHandleStyle: {
color: "#636D9A",
opacity: 0.7
}
},
dataBackground: {
lineStyle: {
color: "#71708A",
width: 1
},
areaStyle: {
color: "#71708A"
}
},
selectedDataBackground: {
lineStyle: {
color: "#87A3CE"
},
areaStyle: {
color: "#87A3CE"
}
}
},
visualMap: {
textStyle: {
color: contrastColor
}
},
timeline: {
lineStyle: {
color: contrastColor
},
label: {
color: contrastColor
},
controlStyle: {
color: contrastColor,
borderColor: contrastColor
}
},
calendar: {
itemStyle: {
color: backgroundColor
},
dayLabel: {
color: contrastColor
},
monthLabel: {
color: contrastColor
},
yearLabel: {
color: contrastColor
}
},
timeAxis: axisCommon(),
logAxis: axisCommon(),
valueAxis: axisCommon(),
categoryAxis: axisCommon(),
line: {
symbol: "circle"
},
graph: {
color: colorPalette
},
gauge: {
title: {
color: contrastColor
},
axisLine: {
lineStyle: {
color: [[1, "rgba(207,212,219,0.2)"]]
}
},
axisLabel: {
color: contrastColor
},
detail: {
color: "#EEF1FA"
}
},
candlestick: {
itemStyle: {
color: "#f64e56",
color0: "#54ea92",
borderColor: "#f64e56",
borderColor0: "#54ea92"
// borderColor: '#ca2824',
// borderColor0: '#09a443'
}
}
};
theme.categoryAxis.splitLine.show = false;
var ECEventProcessor = (
/** @class */
(function() {
function ECEventProcessor2() {
}
ECEventProcessor2.prototype.normalizeQuery = function(query) {
var cptQuery = {};
var dataQuery = {};
var otherQuery = {};
if (isString(query)) {
var condCptType = parseClassType(query);
cptQuery.mainType = condCptType.main || null;
cptQuery.subType = condCptType.sub || null;
} else {
var suffixes_1 = ["Index", "Name", "Id"];
var dataKeys_1 = {
name: 1,
dataIndex: 1,
dataType: 1
};
each$f(query, function(val, key) {
var reserved = false;
for (var i = 0; i < suffixes_1.length; i++) {
var propSuffix = suffixes_1[i];
var suffixPos = key.lastIndexOf(propSuffix);
if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {
var mainType = key.slice(0, suffixPos);
if (mainType !== "data") {
cptQuery.mainType = mainType;
cptQuery[propSuffix.toLowerCase()] = val;
reserved = true;
}
}
}
if (dataKeys_1.hasOwnProperty(key)) {
dataQuery[key] = val;
reserved = true;
}
if (!reserved) {
otherQuery[key] = val;
}
});
}
return {
cptQuery,
dataQuery,
otherQuery
};
};
ECEventProcessor2.prototype.filter = function(eventType, query) {
var eventInfo = this.eventInfo;
if (!eventInfo) {
return true;
}
var targetEl = eventInfo.targetEl;
var packedEvent = eventInfo.packedEvent;
var model = eventInfo.model;
var view = eventInfo.view;
if (!model || !view) {
return true;
}
var cptQuery = query.cptQuery;
var dataQuery = query.dataQuery;
return check(cptQuery, model, "mainType") && check(cptQuery, model, "subType") && check(cptQuery, model, "index", "componentIndex") && check(cptQuery, model, "name") && check(cptQuery, model, "id") && check(dataQuery, packedEvent, "name") && check(dataQuery, packedEvent, "dataIndex") && check(dataQuery, packedEvent, "dataType") && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent));
function check(query2, host, prop, propOnHost) {
return query2[prop] == null || host[propOnHost || prop] === query2[prop];
}
};
ECEventProcessor2.prototype.afterTrigger = function() {
this.eventInfo = null;
};
return ECEventProcessor2;
})()
);
var SYMBOL_PROPS_WITH_CB = ["symbol", "symbolSize", "symbolRotate", "symbolOffset"];
var SYMBOL_PROPS = SYMBOL_PROPS_WITH_CB.concat(["symbolKeepAspect"]);
var seriesSymbolTask = {
createOnAllSeries: true,
// For legend.
performRawSeries: true,
reset: function(seriesModel, ecModel) {
var data = seriesModel.getData();
if (seriesModel.legendIcon) {
data.setVisual("legendIcon", seriesModel.legendIcon);
}
if (!seriesModel.hasSymbolVisual) {
return;
}
var symbolOptions = {};
var symbolOptionsCb = {};
var hasCallback = false;
for (var i = 0; i < SYMBOL_PROPS_WITH_CB.length; i++) {
var symbolPropName = SYMBOL_PROPS_WITH_CB[i];
var val = seriesModel.get(symbolPropName);
if (isFunction(val)) {
hasCallback = true;
symbolOptionsCb[symbolPropName] = val;
} else {
symbolOptions[symbolPropName] = val;
}
}
symbolOptions.symbol = symbolOptions.symbol || seriesModel.defaultSymbol;
data.setVisual(extend({
legendIcon: seriesModel.legendIcon || symbolOptions.symbol,
symbolKeepAspect: seriesModel.get("symbolKeepAspect")
}, symbolOptions));
if (ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var symbolPropsCb = keys(symbolOptionsCb);
function dataEach(data2, idx) {
var rawValue = seriesModel.getRawValue(idx);
var params = seriesModel.getDataParams(idx);
for (var i2 = 0; i2 < symbolPropsCb.length; i2++) {
var symbolPropName2 = symbolPropsCb[i2];
data2.setItemVisual(idx, symbolPropName2, symbolOptionsCb[symbolPropName2](rawValue, params));
}
}
return {
dataEach: hasCallback ? dataEach : null
};
}
};
var dataSymbolTask = {
createOnAllSeries: true,
// For legend.
performRawSeries: true,
reset: function(seriesModel, ecModel) {
if (!seriesModel.hasSymbolVisual) {
return;
}
if (ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var data = seriesModel.getData();
function dataEach(data2, idx) {
var itemModel = data2.getItemModel(idx);
for (var i = 0; i < SYMBOL_PROPS.length; i++) {
var symbolPropName = SYMBOL_PROPS[i];
var val = itemModel.getShallow(symbolPropName, true);
if (val != null) {
data2.setItemVisual(idx, symbolPropName, val);
}
}
}
return {
dataEach: data.hasItemOption ? dataEach : null
};
}
};
function getItemVisualFromData(data, dataIndex, key) {
switch (key) {
case "color":
var style = data.getItemVisual(dataIndex, "style");
return style[data.getVisual("drawType")];
case "opacity":
return data.getItemVisual(dataIndex, "style").opacity;
case "symbol":
case "symbolSize":
case "liftZ":
return data.getItemVisual(dataIndex, key);
}
}
function getVisualFromData(data, key) {
switch (key) {
case "color":
var style = data.getVisual("style");
return style[data.getVisual("drawType")];
case "opacity":
return data.getVisual("style").opacity;
case "symbol":
case "symbolSize":
case "liftZ":
return data.getVisual(key);
}
}
function setItemVisualFromData(data, dataIndex, key, value) {
switch (key) {
case "color":
var style = data.ensureUniqueItemVisual(dataIndex, "style");
style[data.getVisual("drawType")] = value;
data.setItemVisual(dataIndex, "colorFromPalette", false);
break;
case "opacity":
data.ensureUniqueItemVisual(dataIndex, "style").opacity = value;
break;
case "symbol":
case "symbolSize":
case "liftZ":
data.setItemVisual(dataIndex, key, value);
break;
}
}
function createLegacyDataSelectAction(seriesType2, ecRegisterAction) {
function getSeriesIndices(ecModel, payload) {
var seriesIndices = [];
ecModel.eachComponent({
mainType: "series",
subType: seriesType2,
query: payload
}, function(seriesModel) {
seriesIndices.push(seriesModel.seriesIndex);
});
return seriesIndices;
}
each$f([[seriesType2 + "ToggleSelect", "toggleSelect"], [seriesType2 + "Select", "select"], [seriesType2 + "UnSelect", "unselect"]], function(eventsMap) {
ecRegisterAction(eventsMap[0], function(payload, ecModel, api) {
payload = extend({}, payload);
api.dispatchAction(extend(payload, {
type: eventsMap[1],
seriesIndex: getSeriesIndices(ecModel, payload)
}));
});
});
}
function handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) {
var legacyEventName = type + eventPostfix;
if (!ecIns.isSilent(legacyEventName)) {
ecModel.eachComponent({
mainType: "series",
subType: "pie"
}, function(seriesModel) {
var seriesIndex = seriesModel.seriesIndex;
var selectedMap = seriesModel.option.selectedMap;
var selected = payload.selected;
for (var i = 0; i < selected.length; i++) {
if (selected[i].seriesIndex === seriesIndex) {
var data = seriesModel.getData();
var dataIndex = queryDataIndex(data, payload.fromActionPayload);
ecIns.trigger(legacyEventName, {
type: legacyEventName,
seriesId: seriesModel.id,
name: isArray$1(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex),
selected: isString(selectedMap) ? selectedMap : extend({}, selectedMap)
});
}
}
});
}
}
function handleLegacySelectEvents(messageCenter, ecIns, api) {
messageCenter.on("selectchanged", function(params) {
var ecModel = api.getModel();
if (params.isFromClick) {
handleSeriesLegacySelectEvents("map", "selectchanged", ecIns, ecModel, params);
handleSeriesLegacySelectEvents("pie", "selectchanged", ecIns, ecModel, params);
} else if (params.fromAction === "select") {
handleSeriesLegacySelectEvents("map", "selected", ecIns, ecModel, params);
handleSeriesLegacySelectEvents("pie", "selected", ecIns, ecModel, params);
} else if (params.fromAction === "unselect") {
handleSeriesLegacySelectEvents("map", "unselected", ecIns, ecModel, params);
handleSeriesLegacySelectEvents("pie", "unselected", ecIns, ecModel, params);
}
});
}
function findEventDispatcher(target, det, returnFirstMatch) {
var found;
while (target) {
if (det(target)) {
found = target;
if (returnFirstMatch) {
break;
}
}
target = target.__hostTarget || target.parent;
}
return found;
}
var Triangle = Path.extend({
type: "triangle",
shape: {
cx: 0,
cy: 0,
width: 0,
height: 0
},
buildPath: function(path, shape) {
var cx = shape.cx;
var cy = shape.cy;
var width = shape.width / 2;
var height = shape.height / 2;
path.moveTo(cx, cy - height);
path.lineTo(cx + width, cy + height);
path.lineTo(cx - width, cy + height);
path.closePath();
}
});
var Diamond = Path.extend({
type: "diamond",
shape: {
cx: 0,
cy: 0,
width: 0,
height: 0
},
buildPath: function(path, shape) {
var cx = shape.cx;
var cy = shape.cy;
var width = shape.width / 2;
var height = shape.height / 2;
path.moveTo(cx, cy - height);
path.lineTo(cx + width, cy);
path.lineTo(cx, cy + height);
path.lineTo(cx - width, cy);
path.closePath();
}
});
var Pin = Path.extend({
type: "pin",
shape: {
// x, y on the cusp
x: 0,
y: 0,
width: 0,
height: 0
},
buildPath: function(path, shape) {
var x = shape.x;
var y = shape.y;
var w = shape.width / 5 * 3;
var h = Math.max(w, shape.height);
var r = w / 2;
var dy = r * r / (h - r);
var cy = y - h + r + dy;
var angle = Math.asin(dy / r);
var dx = Math.cos(angle) * r;
var tanX = Math.sin(angle);
var tanY = Math.cos(angle);
var cpLen = r * 0.6;
var cpLen2 = r * 0.7;
path.moveTo(x - dx, cy + dy);
path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle);
path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y);
path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy);
path.closePath();
}
});
var Arrow = Path.extend({
type: "arrow",
shape: {
x: 0,
y: 0,
width: 0,
height: 0
},
buildPath: function(ctx, shape) {
var height = shape.height;
var width = shape.width;
var x = shape.x;
var y = shape.y;
var dx = width / 3 * 2;
ctx.moveTo(x, y);
ctx.lineTo(x + dx, y + height);
ctx.lineTo(x, y + height / 4 * 3);
ctx.lineTo(x - dx, y + height);
ctx.lineTo(x, y);
ctx.closePath();
}
});
var symbolCtors = {
line: Line$1,
rect: Rect$2,
roundRect: Rect$2,
square: Rect$2,
circle: Circle,
diamond: Diamond,
pin: Pin,
arrow: Arrow,
triangle: Triangle
};
var symbolShapeMakers = {
line: function(x, y, w, h, shape) {
shape.x1 = x;
shape.y1 = y + h / 2;
shape.x2 = x + w;
shape.y2 = y + h / 2;
},
rect: function(x, y, w, h, shape) {
shape.x = x;
shape.y = y;
shape.width = w;
shape.height = h;
},
roundRect: function(x, y, w, h, shape) {
shape.x = x;
shape.y = y;
shape.width = w;
shape.height = h;
shape.r = Math.min(w, h) / 4;
},
square: function(x, y, w, h, shape) {
var size = Math.min(w, h);
shape.x = x;
shape.y = y;
shape.width = size;
shape.height = size;
},
circle: function(x, y, w, h, shape) {
shape.cx = x + w / 2;
shape.cy = y + h / 2;
shape.r = Math.min(w, h) / 2;
},
diamond: function(x, y, w, h, shape) {
shape.cx = x + w / 2;
shape.cy = y + h / 2;
shape.width = w;
shape.height = h;
},
pin: function(x, y, w, h, shape) {
shape.x = x + w / 2;
shape.y = y + h / 2;
shape.width = w;
shape.height = h;
},
arrow: function(x, y, w, h, shape) {
shape.x = x + w / 2;
shape.y = y + h / 2;
shape.width = w;
shape.height = h;
},
triangle: function(x, y, w, h, shape) {
shape.cx = x + w / 2;
shape.cy = y + h / 2;
shape.width = w;
shape.height = h;
}
};
var symbolBuildProxies = {};
each$f(symbolCtors, function(Ctor, name) {
symbolBuildProxies[name] = new Ctor();
});
var SymbolClz = Path.extend({
type: "symbol",
shape: {
symbolType: "",
x: 0,
y: 0,
width: 0,
height: 0
},
calculateTextPosition: function(out, config, rect) {
var res = calculateTextPosition(out, config, rect);
var shape = this.shape;
if (shape && shape.symbolType === "pin" && config.position === "inside") {
res.y = rect.y + rect.height * 0.4;
}
return res;
},
buildPath: function(ctx, shape, inBundle) {
var symbolType = shape.symbolType;
if (symbolType !== "none") {
var proxySymbol = symbolBuildProxies[symbolType];
if (!proxySymbol) {
symbolType = "rect";
proxySymbol = symbolBuildProxies[symbolType];
}
symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape);
proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);
}
}
});
function symbolPathSetColor(color, innerColor2) {
if (this.type !== "image") {
var symbolStyle = this.style;
if (this.__isEmptyBrush) {
symbolStyle.stroke = color;
symbolStyle.fill = innerColor2 || "#fff";
symbolStyle.lineWidth = 2;
} else if (this.shape.symbolType === "line") {
symbolStyle.stroke = color;
} else {
symbolStyle.fill = color;
}
this.markRedraw();
}
}
function createSymbol$1(symbolType, x, y, w, h, color, keepAspect) {
var isEmpty = symbolType.indexOf("empty") === 0;
if (isEmpty) {
symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);
}
var symbolPath;
if (symbolType.indexOf("image://") === 0) {
symbolPath = makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? "center" : "cover");
} else if (symbolType.indexOf("path://") === 0) {
symbolPath = makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? "center" : "cover");
} else {
symbolPath = new SymbolClz({
shape: {
symbolType,
x,
y,
width: w,
height: h
}
});
}
symbolPath.__isEmptyBrush = isEmpty;
symbolPath.setColor = symbolPathSetColor;
if (color) {
symbolPath.setColor(color);
}
return symbolPath;
}
function normalizeSymbolSize(symbolSize) {
if (!isArray$1(symbolSize)) {
symbolSize = [+symbolSize, +symbolSize];
}
return [symbolSize[0] || 0, symbolSize[1] || 0];
}
function normalizeSymbolOffset(symbolOffset, symbolSize) {
if (symbolOffset == null) {
return;
}
if (!isArray$1(symbolOffset)) {
symbolOffset = [symbolOffset, symbolOffset];
}
return [parsePercent(symbolOffset[0], symbolSize[0]) || 0, parsePercent(retrieve2(symbolOffset[1], symbolOffset[0]), symbolSize[1]) || 0];
}
var decalMap = new WeakMap();
var decalCache = new LRU(100);
var decalKeys = ["symbol", "symbolSize", "symbolKeepAspect", "color", "backgroundColor", "dashArrayX", "dashArrayY", "maxTileWidth", "maxTileHeight"];
function createOrUpdatePatternFromDecal(decalObject, api) {
if (decalObject === "none") {
return null;
}
var dpr = api.getDevicePixelRatio();
var zr = api.getZr();
var isSVG = zr.painter.type === "svg";
if (decalObject.dirty) {
decalMap["delete"](decalObject);
}
var oldPattern = decalMap.get(decalObject);
if (oldPattern) {
return oldPattern;
}
var decalOpt = defaults(decalObject, {
symbol: "rect",
symbolSize: 1,
symbolKeepAspect: true,
color: "rgba(0, 0, 0, 0.2)",
backgroundColor: null,
dashArrayX: 5,
dashArrayY: 5,
rotation: 0,
maxTileWidth: 512,
maxTileHeight: 512
});
if (decalOpt.backgroundColor === "none") {
decalOpt.backgroundColor = null;
}
var pattern = {
repeat: "repeat"
};
setPatternnSource(pattern);
pattern.rotation = decalOpt.rotation;
pattern.scaleX = pattern.scaleY = isSVG ? 1 : 1 / dpr;
decalMap.set(decalObject, pattern);
decalObject.dirty = false;
return pattern;
function setPatternnSource(pattern2) {
var keys2 = [dpr];
var isValidKey = true;
for (var i = 0; i < decalKeys.length; ++i) {
var value = decalOpt[decalKeys[i]];
if (value != null && !isArray$1(value) && !isString(value) && !isNumber(value) && typeof value !== "boolean") {
isValidKey = false;
break;
}
keys2.push(value);
}
var cacheKey;
if (isValidKey) {
cacheKey = keys2.join(",") + (isSVG ? "-svg" : "");
var cache = decalCache.get(cacheKey);
if (cache) {
isSVG ? pattern2.svgElement = cache : pattern2.image = cache;
}
}
var dashArrayX = normalizeDashArrayX(decalOpt.dashArrayX);
var dashArrayY = normalizeDashArrayY(decalOpt.dashArrayY);
var symbolArray = normalizeSymbolArray(decalOpt.symbol);
var lineBlockLengthsX = getLineBlockLengthX(dashArrayX);
var lineBlockLengthY = getLineBlockLengthY(dashArrayY);
var canvas = !isSVG && platformApi.createCanvas();
var svgRoot = isSVG && {
tag: "g",
attrs: {},
key: "dcl",
children: []
};
var pSize = getPatternSize();
var ctx;
if (canvas) {
canvas.width = pSize.width * dpr;
canvas.height = pSize.height * dpr;
ctx = canvas.getContext("2d");
}
brushDecal();
if (isValidKey) {
decalCache.put(cacheKey, canvas || svgRoot);
}
pattern2.image = canvas;
pattern2.svgElement = svgRoot;
pattern2.svgWidth = pSize.width;
pattern2.svgHeight = pSize.height;
function getPatternSize() {
var width = 1;
for (var i2 = 0, xlen = lineBlockLengthsX.length; i2 < xlen; ++i2) {
width = getLeastCommonMultiple(width, lineBlockLengthsX[i2]);
}
var symbolRepeats = 1;
for (var i2 = 0, xlen = symbolArray.length; i2 < xlen; ++i2) {
symbolRepeats = getLeastCommonMultiple(symbolRepeats, symbolArray[i2].length);
}
width *= symbolRepeats;
var height = lineBlockLengthY * lineBlockLengthsX.length * symbolArray.length;
return {
width: Math.max(1, Math.min(width, decalOpt.maxTileWidth)),
height: Math.max(1, Math.min(height, decalOpt.maxTileHeight))
};
}
function brushDecal() {
if (ctx) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
if (decalOpt.backgroundColor) {
ctx.fillStyle = decalOpt.backgroundColor;
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
}
var ySum = 0;
for (var i2 = 0; i2 < dashArrayY.length; ++i2) {
ySum += dashArrayY[i2];
}
if (ySum <= 0) {
return;
}
var y = -lineBlockLengthY;
var yId = 0;
var yIdTotal = 0;
var xId0 = 0;
while (y < pSize.height) {
if (yId % 2 === 0) {
var symbolYId = yIdTotal / 2 % symbolArray.length;
var x = 0;
var xId1 = 0;
var xId1Total = 0;
while (x < pSize.width * 2) {
var xSum = 0;
for (var i2 = 0; i2 < dashArrayX[xId0].length; ++i2) {
xSum += dashArrayX[xId0][i2];
}
if (xSum <= 0) {
break;
}
if (xId1 % 2 === 0) {
var size = (1 - decalOpt.symbolSize) * 0.5;
var left = x + dashArrayX[xId0][xId1] * size;
var top_1 = y + dashArrayY[yId] * size;
var width = dashArrayX[xId0][xId1] * decalOpt.symbolSize;
var height = dashArrayY[yId] * decalOpt.symbolSize;
var symbolXId = xId1Total / 2 % symbolArray[symbolYId].length;
brushSymbol(left, top_1, width, height, symbolArray[symbolYId][symbolXId]);
}
x += dashArrayX[xId0][xId1];
++xId1Total;
++xId1;
if (xId1 === dashArrayX[xId0].length) {
xId1 = 0;
}
}
++xId0;
if (xId0 === dashArrayX.length) {
xId0 = 0;
}
}
y += dashArrayY[yId];
++yIdTotal;
++yId;
if (yId === dashArrayY.length) {
yId = 0;
}
}
function brushSymbol(x2, y2, width2, height2, symbolType) {
var scale2 = isSVG ? 1 : dpr;
var symbol = createSymbol$1(symbolType, x2 * scale2, y2 * scale2, width2 * scale2, height2 * scale2, decalOpt.color, decalOpt.symbolKeepAspect);
if (isSVG) {
var symbolVNode = zr.painter.renderOneToVNode(symbol);
if (symbolVNode) {
svgRoot.children.push(symbolVNode);
}
} else {
brushSingle(ctx, symbol);
}
}
}
}
}
function normalizeSymbolArray(symbol) {
if (!symbol || symbol.length === 0) {
return [["rect"]];
}
if (isString(symbol)) {
return [[symbol]];
}
var isAllString = true;
for (var i = 0; i < symbol.length; ++i) {
if (!isString(symbol[i])) {
isAllString = false;
break;
}
}
if (isAllString) {
return normalizeSymbolArray([symbol]);
}
var result = [];
for (var i = 0; i < symbol.length; ++i) {
if (isString(symbol[i])) {
result.push([symbol[i]]);
} else {
result.push(symbol[i]);
}
}
return result;
}
function normalizeDashArrayX(dash) {
if (!dash || dash.length === 0) {
return [[0, 0]];
}
if (isNumber(dash)) {
var dashValue = Math.ceil(dash);
return [[dashValue, dashValue]];
}
var isAllNumber = true;
for (var i = 0; i < dash.length; ++i) {
if (!isNumber(dash[i])) {
isAllNumber = false;
break;
}
}
if (isAllNumber) {
return normalizeDashArrayX([dash]);
}
var result = [];
for (var i = 0; i < dash.length; ++i) {
if (isNumber(dash[i])) {
var dashValue = Math.ceil(dash[i]);
result.push([dashValue, dashValue]);
} else {
var dashValue = map$1(dash[i], function(n) {
return Math.ceil(n);
});
if (dashValue.length % 2 === 1) {
result.push(dashValue.concat(dashValue));
} else {
result.push(dashValue);
}
}
}
return result;
}
function normalizeDashArrayY(dash) {
if (!dash || typeof dash === "object" && dash.length === 0) {
return [0, 0];
}
if (isNumber(dash)) {
var dashValue_1 = Math.ceil(dash);
return [dashValue_1, dashValue_1];
}
var dashValue = map$1(dash, function(n) {
return Math.ceil(n);
});
return dash.length % 2 ? dashValue.concat(dashValue) : dashValue;
}
function getLineBlockLengthX(dash) {
return map$1(dash, function(line) {
return getLineBlockLengthY(line);
});
}
function getLineBlockLengthY(dash) {
var blockLength = 0;
for (var i = 0; i < dash.length; ++i) {
blockLength += dash[i];
}
if (dash.length % 2 === 1) {
return blockLength * 2;
}
return blockLength;
}
function decalVisual(ecModel, api) {
ecModel.eachRawSeries(function(seriesModel) {
if (ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var data = seriesModel.getData();
if (data.hasItemVisual()) {
data.each(function(idx) {
var decal2 = data.getItemVisual(idx, "decal");
if (decal2) {
var itemStyle = data.ensureUniqueItemVisual(idx, "style");
itemStyle.decal = createOrUpdatePatternFromDecal(decal2, api);
}
});
}
var decal = data.getVisual("decal");
if (decal) {
var style = data.getVisual("style");
style.decal = createOrUpdatePatternFromDecal(decal, api);
}
});
}
var lifecycle = new Eventful();
var implsStore = {};
function registerImpl(name, impl) {
implsStore[name] = impl;
}
function getImpl(name) {
return implsStore[name];
}
var TEST_FRAME_REMAIN_TIME = 1;
var PRIORITY_PROCESSOR_SERIES_FILTER = 800;
var PRIORITY_PROCESSOR_DATASTACK = 900;
var PRIORITY_PROCESSOR_FILTER = 1e3;
var PRIORITY_PROCESSOR_DEFAULT = 2e3;
var PRIORITY_PROCESSOR_STATISTIC = 5e3;
var PRIORITY_VISUAL_LAYOUT = 1e3;
var PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100;
var PRIORITY_VISUAL_GLOBAL = 2e3;
var PRIORITY_VISUAL_CHART = 3e3;
var PRIORITY_VISUAL_COMPONENT = 4e3;
var PRIORITY_VISUAL_CHART_DATA_CUSTOM = 4500;
var PRIORITY_VISUAL_POST_CHART_LAYOUT = 4600;
var PRIORITY_VISUAL_BRUSH = 5e3;
var PRIORITY_VISUAL_ARIA = 6e3;
var PRIORITY_VISUAL_DECAL = 7e3;
var PRIORITY = {
PROCESSOR: {
FILTER: PRIORITY_PROCESSOR_FILTER,
SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER,
STATISTIC: PRIORITY_PROCESSOR_STATISTIC
},
VISUAL: {
LAYOUT: PRIORITY_VISUAL_LAYOUT,
PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT,
GLOBAL: PRIORITY_VISUAL_GLOBAL,
CHART: PRIORITY_VISUAL_CHART,
POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT,
COMPONENT: PRIORITY_VISUAL_COMPONENT,
BRUSH: PRIORITY_VISUAL_BRUSH,
CHART_ITEM: PRIORITY_VISUAL_CHART_DATA_CUSTOM,
ARIA: PRIORITY_VISUAL_ARIA,
DECAL: PRIORITY_VISUAL_DECAL
}
};
var IN_MAIN_PROCESS_KEY = "__flagInMainProcess";
var PENDING_UPDATE = "__pendingUpdate";
var STATUS_NEEDS_UPDATE_KEY = "__needsUpdateStatus";
var ACTION_REG = /^[a-zA-Z0-9_]+$/;
var CONNECT_STATUS_KEY = "__connectUpdateStatus";
var CONNECT_STATUS_PENDING = 0;
var CONNECT_STATUS_UPDATING = 1;
var CONNECT_STATUS_UPDATED = 2;
function createRegisterEventWithLowercaseECharts(method) {
return function() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (this.isDisposed()) {
disposedWarning(this.id);
return;
}
return toLowercaseNameAndCallEventful(this, method, args);
};
}
function createRegisterEventWithLowercaseMessageCenter(method) {
return function() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return toLowercaseNameAndCallEventful(this, method, args);
};
}
function toLowercaseNameAndCallEventful(host, method, args) {
args[0] = args[0] && args[0].toLowerCase();
return Eventful.prototype[method].apply(host, args);
}
var MessageCenter = (
/** @class */
(function(_super) {
__extends(MessageCenter2, _super);
function MessageCenter2() {
return _super !== null && _super.apply(this, arguments) || this;
}
return MessageCenter2;
})(Eventful)
);
var messageCenterProto = MessageCenter.prototype;
messageCenterProto.on = createRegisterEventWithLowercaseMessageCenter("on");
messageCenterProto.off = createRegisterEventWithLowercaseMessageCenter("off");
var prepare;
var prepareView;
var updateDirectly;
var updateMethods;
var doConvertPixel;
var updateStreamModes;
var doDispatchAction;
var flushPendingActions;
var triggerUpdatedEvent;
var bindRenderedEvent;
var bindMouseEvent;
var render;
var renderComponents;
var renderSeries;
var createExtensionAPI;
var enableConnect;
var markStatusToUpdate;
var applyChangedStates;
var ECharts = (
/** @class */
(function(_super) {
__extends(ECharts2, _super);
function ECharts2(dom, theme2, opts) {
var _this = _super.call(this, new ECEventProcessor()) || this;
_this._chartsViews = [];
_this._chartsMap = {};
_this._componentsViews = [];
_this._componentsMap = {};
_this._pendingActions = [];
opts = opts || {};
if (isString(theme2)) {
theme2 = themeStorage[theme2];
}
_this._dom = dom;
var defaultRenderer = "canvas";
var defaultCoarsePointer = "auto";
var defaultUseDirtyRect = false;
if (opts.ssr) {
registerSSRDataGetter(function(el) {
var ecData = getECData(el);
var dataIndex = ecData.dataIndex;
if (dataIndex == null) {
return;
}
var hashMap = createHashMap();
hashMap.set("series_index", ecData.seriesIndex);
hashMap.set("data_index", dataIndex);
ecData.ssrType && hashMap.set("ssr_type", ecData.ssrType);
return hashMap;
});
}
var zr = _this._zr = init$2(dom, {
renderer: opts.renderer || defaultRenderer,
devicePixelRatio: opts.devicePixelRatio,
width: opts.width,
height: opts.height,
ssr: opts.ssr,
useDirtyRect: retrieve2(opts.useDirtyRect, defaultUseDirtyRect),
useCoarsePointer: retrieve2(opts.useCoarsePointer, defaultCoarsePointer),
pointerSize: opts.pointerSize
});
_this._ssr = opts.ssr;
_this._throttledZrFlush = throttle(bind$1(zr.flush, zr), 17);
theme2 = clone$1(theme2);
theme2 && globalBackwardCompat(theme2, true);
_this._theme = theme2;
_this._locale = createLocaleObject(opts.locale || SYSTEM_LANG);
_this._coordSysMgr = new CoordinateSystemManager();
var api = _this._api = createExtensionAPI(_this);
function prioritySortFunc(a, b) {
return a.__prio - b.__prio;
}
sort$2(visualFuncs, prioritySortFunc);
sort$2(dataProcessorFuncs, prioritySortFunc);
_this._scheduler = new Scheduler(_this, api, dataProcessorFuncs, visualFuncs);
_this._messageCenter = new MessageCenter();
_this._initEvents();
_this.resize = bind$1(_this.resize, _this);
zr.animation.on("frame", _this._onframe, _this);
bindRenderedEvent(zr, _this);
bindMouseEvent(zr, _this);
setAsPrimitive(_this);
return _this;
}
ECharts2.prototype._onframe = function() {
if (this._disposed) {
return;
}
applyChangedStates(this);
var scheduler = this._scheduler;
if (this[PENDING_UPDATE]) {
var silent = this[PENDING_UPDATE].silent;
this[IN_MAIN_PROCESS_KEY] = true;
try {
prepare(this);
updateMethods.update.call(this, null, this[PENDING_UPDATE].updateParams);
} catch (e) {
this[IN_MAIN_PROCESS_KEY] = false;
this[PENDING_UPDATE] = null;
throw e;
}
this._zr.flush();
this[IN_MAIN_PROCESS_KEY] = false;
this[PENDING_UPDATE] = null;
flushPendingActions.call(this, silent);
triggerUpdatedEvent.call(this, silent);
} else if (scheduler.unfinished) {
var remainTime = TEST_FRAME_REMAIN_TIME;
var ecModel = this._model;
var api = this._api;
scheduler.unfinished = false;
do {
var startTime = +/* @__PURE__ */ new Date();
scheduler.performSeriesTasks(ecModel);
scheduler.performDataProcessorTasks(ecModel);
updateStreamModes(this, ecModel);
scheduler.performVisualTasks(ecModel);
renderSeries(this, this._model, api, "remain", {});
remainTime -= +/* @__PURE__ */ new Date() - startTime;
} while (remainTime > 0 && scheduler.unfinished);
if (!scheduler.unfinished) {
this._zr.flush();
}
}
};
ECharts2.prototype.getDom = function() {
return this._dom;
};
ECharts2.prototype.getId = function() {
return this.id;
};
ECharts2.prototype.getZr = function() {
return this._zr;
};
ECharts2.prototype.isSSR = function() {
return this._ssr;
};
ECharts2.prototype.setOption = function(option, notMerge, lazyUpdate) {
if (this[IN_MAIN_PROCESS_KEY]) {
return;
}
if (this._disposed) {
disposedWarning(this.id);
return;
}
var silent;
var replaceMerge;
var transitionOpt;
if (isObject$3(notMerge)) {
lazyUpdate = notMerge.lazyUpdate;
silent = notMerge.silent;
replaceMerge = notMerge.replaceMerge;
transitionOpt = notMerge.transition;
notMerge = notMerge.notMerge;
}
this[IN_MAIN_PROCESS_KEY] = true;
if (!this._model || notMerge) {
var optionManager = new OptionManager(this._api);
var theme2 = this._theme;
var ecModel = this._model = new GlobalModel();
ecModel.scheduler = this._scheduler;
ecModel.ssr = this._ssr;
ecModel.init(null, null, null, theme2, this._locale, optionManager);
}
this._model.setOption(option, {
replaceMerge
}, optionPreprocessorFuncs);
var updateParams = {
seriesTransition: transitionOpt,
optionChanged: true
};
if (lazyUpdate) {
this[PENDING_UPDATE] = {
silent,
updateParams
};
this[IN_MAIN_PROCESS_KEY] = false;
this.getZr().wakeUp();
} else {
try {
prepare(this);
updateMethods.update.call(this, null, updateParams);
} catch (e) {
this[PENDING_UPDATE] = null;
this[IN_MAIN_PROCESS_KEY] = false;
throw e;
}
if (!this._ssr) {
this._zr.flush();
}
this[PENDING_UPDATE] = null;
this[IN_MAIN_PROCESS_KEY] = false;
flushPendingActions.call(this, silent);
triggerUpdatedEvent.call(this, silent);
}
};
ECharts2.prototype.setTheme = function() {
};
ECharts2.prototype.getModel = function() {
return this._model;
};
ECharts2.prototype.getOption = function() {
return this._model && this._model.getOption();
};
ECharts2.prototype.getWidth = function() {
return this._zr.getWidth();
};
ECharts2.prototype.getHeight = function() {
return this._zr.getHeight();
};
ECharts2.prototype.getDevicePixelRatio = function() {
return this._zr.painter.dpr || env.hasGlobalWindow && window.devicePixelRatio || 1;
};
ECharts2.prototype.getRenderedCanvas = function(opts) {
return this.renderToCanvas(opts);
};
ECharts2.prototype.renderToCanvas = function(opts) {
opts = opts || {};
var painter = this._zr.painter;
return painter.getRenderedCanvas({
backgroundColor: opts.backgroundColor || this._model.get("backgroundColor"),
pixelRatio: opts.pixelRatio || this.getDevicePixelRatio()
});
};
ECharts2.prototype.renderToSVGString = function(opts) {
opts = opts || {};
var painter = this._zr.painter;
return painter.renderToString({
useViewBox: opts.useViewBox
});
};
ECharts2.prototype.getSvgDataURL = function() {
if (!env.svgSupported) {
return;
}
var zr = this._zr;
var list = zr.storage.getDisplayList();
each$f(list, function(el) {
el.stopAnimation(null, true);
});
return zr.painter.toDataURL();
};
ECharts2.prototype.getDataURL = function(opts) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
opts = opts || {};
var excludeComponents = opts.excludeComponents;
var ecModel = this._model;
var excludesComponentViews = [];
var self = this;
each$f(excludeComponents, function(componentType) {
ecModel.eachComponent({
mainType: componentType
}, function(component) {
var view = self._componentsMap[component.__viewId];
if (!view.group.ignore) {
excludesComponentViews.push(view);
view.group.ignore = true;
}
});
});
var url = this._zr.painter.getType() === "svg" ? this.getSvgDataURL() : this.renderToCanvas(opts).toDataURL("image/" + (opts && opts.type || "png"));
each$f(excludesComponentViews, function(view) {
view.group.ignore = false;
});
return url;
};
ECharts2.prototype.getConnectedDataURL = function(opts) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
var isSvg = opts.type === "svg";
var groupId = this.group;
var mathMin2 = Math.min;
var mathMax2 = Math.max;
var MAX_NUMBER = Infinity;
if (connectedGroups[groupId]) {
var left_1 = MAX_NUMBER;
var top_1 = MAX_NUMBER;
var right_1 = -MAX_NUMBER;
var bottom_1 = -MAX_NUMBER;
var canvasList_1 = [];
var dpr_1 = opts && opts.pixelRatio || this.getDevicePixelRatio();
each$f(instances, function(chart, id) {
if (chart.group === groupId) {
var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.renderToCanvas(clone$1(opts));
var boundingRect = chart.getDom().getBoundingClientRect();
left_1 = mathMin2(boundingRect.left, left_1);
top_1 = mathMin2(boundingRect.top, top_1);
right_1 = mathMax2(boundingRect.right, right_1);
bottom_1 = mathMax2(boundingRect.bottom, bottom_1);
canvasList_1.push({
dom: canvas,
left: boundingRect.left,
top: boundingRect.top
});
}
});
left_1 *= dpr_1;
top_1 *= dpr_1;
right_1 *= dpr_1;
bottom_1 *= dpr_1;
var width = right_1 - left_1;
var height = bottom_1 - top_1;
var targetCanvas = platformApi.createCanvas();
var zr_1 = init$2(targetCanvas, {
renderer: isSvg ? "svg" : "canvas"
});
zr_1.resize({
width,
height
});
if (isSvg) {
var content_1 = "";
each$f(canvasList_1, function(item) {
var x = item.left - left_1;
var y = item.top - top_1;
content_1 += '' + item.dom + "";
});
zr_1.painter.getSvgRoot().innerHTML = content_1;
if (opts.connectedBackgroundColor) {
zr_1.painter.setBackgroundColor(opts.connectedBackgroundColor);
}
zr_1.refreshImmediately();
return zr_1.painter.toDataURL();
} else {
if (opts.connectedBackgroundColor) {
zr_1.add(new Rect$2({
shape: {
x: 0,
y: 0,
width,
height
},
style: {
fill: opts.connectedBackgroundColor
}
}));
}
each$f(canvasList_1, function(item) {
var img = new ZRImage({
style: {
x: item.left * dpr_1 - left_1,
y: item.top * dpr_1 - top_1,
image: item.dom
}
});
zr_1.add(img);
});
zr_1.refreshImmediately();
return targetCanvas.toDataURL("image/" + (opts && opts.type || "png"));
}
} else {
return this.getDataURL(opts);
}
};
ECharts2.prototype.convertToPixel = function(finder, value) {
return doConvertPixel(this, "convertToPixel", finder, value);
};
ECharts2.prototype.convertFromPixel = function(finder, value) {
return doConvertPixel(this, "convertFromPixel", finder, value);
};
ECharts2.prototype.containPixel = function(finder, value) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
var ecModel = this._model;
var result;
var findResult = parseFinder$1(ecModel, finder);
each$f(findResult, function(models, key) {
key.indexOf("Models") >= 0 && each$f(models, function(model) {
var coordSys = model.coordinateSystem;
if (coordSys && coordSys.containPoint) {
result = result || !!coordSys.containPoint(value);
} else if (key === "seriesModels") {
var view = this._chartsMap[model.__viewId];
if (view && view.containPoint) {
result = result || view.containPoint(value, model);
}
} else ;
}, this);
}, this);
return !!result;
};
ECharts2.prototype.getVisual = function(finder, visualType) {
var ecModel = this._model;
var parsedFinder = parseFinder$1(ecModel, finder, {
defaultMainType: "series"
});
var seriesModel = parsedFinder.seriesModel;
var data = seriesModel.getData();
var dataIndexInside = parsedFinder.hasOwnProperty("dataIndexInside") ? parsedFinder.dataIndexInside : parsedFinder.hasOwnProperty("dataIndex") ? data.indexOfRawIndex(parsedFinder.dataIndex) : null;
return dataIndexInside != null ? getItemVisualFromData(data, dataIndexInside, visualType) : getVisualFromData(data, visualType);
};
ECharts2.prototype.getViewOfComponentModel = function(componentModel) {
return this._componentsMap[componentModel.__viewId];
};
ECharts2.prototype.getViewOfSeriesModel = function(seriesModel) {
return this._chartsMap[seriesModel.__viewId];
};
ECharts2.prototype._initEvents = function() {
var _this = this;
each$f(MOUSE_EVENT_NAMES, function(eveName) {
var handler = function(e) {
var ecModel = _this.getModel();
var el = e.target;
var params;
var isGlobalOut = eveName === "globalout";
if (isGlobalOut) {
params = {};
} else {
el && findEventDispatcher(el, function(parent) {
var ecData = getECData(parent);
if (ecData && ecData.dataIndex != null) {
var dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex);
params = dataModel && dataModel.getDataParams(ecData.dataIndex, ecData.dataType, el) || {};
return true;
} else if (ecData.eventData) {
params = extend({}, ecData.eventData);
return true;
}
}, true);
}
if (params) {
var componentType = params.componentType;
var componentIndex = params.componentIndex;
if (componentType === "markLine" || componentType === "markPoint" || componentType === "markArea") {
componentType = "series";
componentIndex = params.seriesIndex;
}
var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex);
var view = model && _this[model.mainType === "series" ? "_chartsMap" : "_componentsMap"][model.__viewId];
params.event = e;
params.type = eveName;
_this._$eventProcessor.eventInfo = {
targetEl: el,
packedEvent: params,
model,
view
};
_this.trigger(eveName, params);
}
};
handler.zrEventfulCallAtLast = true;
_this._zr.on(eveName, handler, _this);
});
each$f(eventActionMap, function(actionType, eventType) {
_this._messageCenter.on(eventType, function(event) {
this.trigger(eventType, event);
}, _this);
});
each$f(["selectchanged"], function(eventType) {
_this._messageCenter.on(eventType, function(event) {
this.trigger(eventType, event);
}, _this);
});
handleLegacySelectEvents(this._messageCenter, this, this._api);
};
ECharts2.prototype.isDisposed = function() {
return this._disposed;
};
ECharts2.prototype.clear = function() {
if (this._disposed) {
disposedWarning(this.id);
return;
}
this.setOption({
series: []
}, true);
};
ECharts2.prototype.dispose = function() {
if (this._disposed) {
disposedWarning(this.id);
return;
}
this._disposed = true;
var dom = this.getDom();
if (dom) {
setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, "");
}
var chart = this;
var api = chart._api;
var ecModel = chart._model;
each$f(chart._componentsViews, function(component) {
component.dispose(ecModel, api);
});
each$f(chart._chartsViews, function(chart2) {
chart2.dispose(ecModel, api);
});
chart._zr.dispose();
chart._dom = chart._model = chart._chartsMap = chart._componentsMap = chart._chartsViews = chart._componentsViews = chart._scheduler = chart._api = chart._zr = chart._throttledZrFlush = chart._theme = chart._coordSysMgr = chart._messageCenter = null;
delete instances[chart.id];
};
ECharts2.prototype.resize = function(opts) {
if (this[IN_MAIN_PROCESS_KEY]) {
return;
}
if (this._disposed) {
disposedWarning(this.id);
return;
}
this._zr.resize(opts);
var ecModel = this._model;
this._loadingFX && this._loadingFX.resize();
if (!ecModel) {
return;
}
var needPrepare = ecModel.resetOption("media");
var silent = opts && opts.silent;
if (this[PENDING_UPDATE]) {
if (silent == null) {
silent = this[PENDING_UPDATE].silent;
}
needPrepare = true;
this[PENDING_UPDATE] = null;
}
this[IN_MAIN_PROCESS_KEY] = true;
try {
needPrepare && prepare(this);
updateMethods.update.call(this, {
type: "resize",
animation: extend({
// Disable animation
duration: 0
}, opts && opts.animation)
});
} catch (e) {
this[IN_MAIN_PROCESS_KEY] = false;
throw e;
}
this[IN_MAIN_PROCESS_KEY] = false;
flushPendingActions.call(this, silent);
triggerUpdatedEvent.call(this, silent);
};
ECharts2.prototype.showLoading = function(name, cfg) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
if (isObject$3(name)) {
cfg = name;
name = "";
}
name = name || "default";
this.hideLoading();
if (!loadingEffects[name]) {
return;
}
var el = loadingEffects[name](this._api, cfg);
var zr = this._zr;
this._loadingFX = el;
zr.add(el);
};
ECharts2.prototype.hideLoading = function() {
if (this._disposed) {
disposedWarning(this.id);
return;
}
this._loadingFX && this._zr.remove(this._loadingFX);
this._loadingFX = null;
};
ECharts2.prototype.makeActionFromEvent = function(eventObj) {
var payload = extend({}, eventObj);
payload.type = eventActionMap[eventObj.type];
return payload;
};
ECharts2.prototype.dispatchAction = function(payload, opt) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
if (!isObject$3(opt)) {
opt = {
silent: !!opt
};
}
if (!actions[payload.type]) {
return;
}
if (!this._model) {
return;
}
if (this[IN_MAIN_PROCESS_KEY]) {
this._pendingActions.push(payload);
return;
}
var silent = opt.silent;
doDispatchAction.call(this, payload, silent);
var flush = opt.flush;
if (flush) {
this._zr.flush();
} else if (flush !== false && env.browser.weChat) {
this._throttledZrFlush();
}
flushPendingActions.call(this, silent);
triggerUpdatedEvent.call(this, silent);
};
ECharts2.prototype.updateLabelLayout = function() {
lifecycle.trigger("series:layoutlabels", this._model, this._api, {
// Not adding series labels.
// TODO
updatedSeries: []
});
};
ECharts2.prototype.appendData = function(params) {
if (this._disposed) {
disposedWarning(this.id);
return;
}
var seriesIndex = params.seriesIndex;
var ecModel = this.getModel();
var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
seriesModel.appendData(params);
this._scheduler.unfinished = true;
this.getZr().wakeUp();
};
ECharts2.internalField = (function() {
prepare = function(ecIns) {
var scheduler = ecIns._scheduler;
scheduler.restorePipelines(ecIns._model);
scheduler.prepareStageTasks();
prepareView(ecIns, true);
prepareView(ecIns, false);
scheduler.plan();
};
prepareView = function(ecIns, isComponent) {
var ecModel = ecIns._model;
var scheduler = ecIns._scheduler;
var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;
var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;
var zr = ecIns._zr;
var api = ecIns._api;
for (var i = 0; i < viewList.length; i++) {
viewList[i].__alive = false;
}
isComponent ? ecModel.eachComponent(function(componentType, model) {
componentType !== "series" && doPrepare(model);
}) : ecModel.eachSeries(doPrepare);
function doPrepare(model) {
var requireNewView = model.__requireNewView;
model.__requireNewView = false;
var viewId = "_ec_" + model.id + "_" + model.type;
var view2 = !requireNewView && viewMap[viewId];
if (!view2) {
var classType = parseClassType(model.type);
var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : (
// FIXME:TS
// (ChartView as ChartViewConstructor).getClass('series', classType.sub)
// For backward compat, still support a chart type declared as only subType
// like "liquidfill", but recommend "series.liquidfill"
// But need a base class to make a type series.
ChartView.getClass(classType.sub)
);
view2 = new Clazz();
view2.init(ecModel, api);
viewMap[viewId] = view2;
viewList.push(view2);
zr.add(view2.group);
}
model.__viewId = view2.__id = viewId;
view2.__alive = true;
view2.__model = model;
view2.group.__ecComponentInfo = {
mainType: model.mainType,
index: model.componentIndex
};
!isComponent && scheduler.prepareView(view2, model, ecModel, api);
}
for (var i = 0; i < viewList.length; ) {
var view = viewList[i];
if (!view.__alive) {
!isComponent && view.renderTask.dispose();
zr.remove(view.group);
view.dispose(ecModel, api);
viewList.splice(i, 1);
if (viewMap[view.__id] === view) {
delete viewMap[view.__id];
}
view.__id = view.group.__ecComponentInfo = null;
} else {
i++;
}
}
};
updateDirectly = function(ecIns, method, payload, mainType, subType) {
var ecModel = ecIns._model;
ecModel.setUpdatePayload(payload);
if (!mainType) {
each$f([].concat(ecIns._componentsViews).concat(ecIns._chartsViews), callView);
return;
}
var query = {};
query[mainType + "Id"] = payload[mainType + "Id"];
query[mainType + "Index"] = payload[mainType + "Index"];
query[mainType + "Name"] = payload[mainType + "Name"];
var condition = {
mainType,
query
};
subType && (condition.subType = subType);
var excludeSeriesId = payload.excludeSeriesId;
var excludeSeriesIdMap;
if (excludeSeriesId != null) {
excludeSeriesIdMap = createHashMap();
each$f(normalizeToArray(excludeSeriesId), function(id) {
var modelId = convertOptionIdName(id, null);
if (modelId != null) {
excludeSeriesIdMap.set(modelId, true);
}
});
}
ecModel && ecModel.eachComponent(condition, function(model) {
var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null;
if (isExcluded) {
return;
}
if (isHighDownPayload(payload)) {
if (model instanceof SeriesModel) {
if (payload.type === HIGHLIGHT_ACTION_TYPE && !payload.notBlur && !model.get(["emphasis", "disabled"])) {
blurSeriesFromHighlightPayload(model, payload, ecIns._api);
}
} else {
var _a2 = findComponentHighDownDispatchers(model.mainType, model.componentIndex, payload.name, ecIns._api), focusSelf = _a2.focusSelf, dispatchers = _a2.dispatchers;
if (payload.type === HIGHLIGHT_ACTION_TYPE && focusSelf && !payload.notBlur) {
blurComponent(model.mainType, model.componentIndex, ecIns._api);
}
if (dispatchers) {
each$f(dispatchers, function(dispatcher) {
payload.type === HIGHLIGHT_ACTION_TYPE ? enterEmphasis(dispatcher) : leaveEmphasis(dispatcher);
});
}
}
} else if (isSelectChangePayload(payload)) {
if (model instanceof SeriesModel) {
toggleSelectionFromPayload(model, payload, ecIns._api);
updateSeriesElementSelection(model);
markStatusToUpdate(ecIns);
}
}
}, ecIns);
ecModel && ecModel.eachComponent(condition, function(model) {
var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null;
if (isExcluded) {
return;
}
callView(ecIns[mainType === "series" ? "_chartsMap" : "_componentsMap"][model.__viewId]);
}, ecIns);
function callView(view) {
view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload);
}
};
updateMethods = {
prepareAndUpdate: function(payload) {
prepare(this);
updateMethods.update.call(this, payload, {
// Needs to mark option changed if newOption is given.
// It's from MagicType.
// TODO If use a separate flag optionChanged in payload?
optionChanged: payload.newOption != null
});
},
update: function(payload, updateParams) {
var ecModel = this._model;
var api = this._api;
var zr = this._zr;
var coordSysMgr = this._coordSysMgr;
var scheduler = this._scheduler;
if (!ecModel) {
return;
}
ecModel.setUpdatePayload(payload);
scheduler.restoreData(ecModel, payload);
scheduler.performSeriesTasks(ecModel);
coordSysMgr.create(ecModel, api);
scheduler.performDataProcessorTasks(ecModel, payload);
updateStreamModes(this, ecModel);
coordSysMgr.update(ecModel, api);
clearColorPalette(ecModel);
scheduler.performVisualTasks(ecModel, payload);
render(this, ecModel, api, payload, updateParams);
var backgroundColor2 = ecModel.get("backgroundColor") || "transparent";
var darkMode = ecModel.get("darkMode");
zr.setBackgroundColor(backgroundColor2);
if (darkMode != null && darkMode !== "auto") {
zr.setDarkMode(darkMode);
}
lifecycle.trigger("afterupdate", ecModel, api);
},
updateTransform: function(payload) {
var _this = this;
var ecModel = this._model;
var api = this._api;
if (!ecModel) {
return;
}
ecModel.setUpdatePayload(payload);
var componentDirtyList = [];
ecModel.eachComponent(function(componentType, componentModel) {
if (componentType === "series") {
return;
}
var componentView = _this.getViewOfComponentModel(componentModel);
if (componentView && componentView.__alive) {
if (componentView.updateTransform) {
var result = componentView.updateTransform(componentModel, ecModel, api, payload);
result && result.update && componentDirtyList.push(componentView);
} else {
componentDirtyList.push(componentView);
}
}
});
var seriesDirtyMap = createHashMap();
ecModel.eachSeries(function(seriesModel) {
var chartView = _this._chartsMap[seriesModel.__viewId];
if (chartView.updateTransform) {
var result = chartView.updateTransform(seriesModel, ecModel, api, payload);
result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);
} else {
seriesDirtyMap.set(seriesModel.uid, 1);
}
});
clearColorPalette(ecModel);
this._scheduler.performVisualTasks(ecModel, payload, {
setDirty: true,
dirtyMap: seriesDirtyMap
});
renderSeries(this, ecModel, api, payload, {}, seriesDirtyMap);
lifecycle.trigger("afterupdate", ecModel, api);
},
updateView: function(payload) {
var ecModel = this._model;
if (!ecModel) {
return;
}
ecModel.setUpdatePayload(payload);
ChartView.markUpdateMethod(payload, "updateView");
clearColorPalette(ecModel);
this._scheduler.performVisualTasks(ecModel, payload, {
setDirty: true
});
render(this, ecModel, this._api, payload, {});
lifecycle.trigger("afterupdate", ecModel, this._api);
},
updateVisual: function(payload) {
var _this = this;
var ecModel = this._model;
if (!ecModel) {
return;
}
ecModel.setUpdatePayload(payload);
ecModel.eachSeries(function(seriesModel) {
seriesModel.getData().clearAllVisual();
});
ChartView.markUpdateMethod(payload, "updateVisual");
clearColorPalette(ecModel);
this._scheduler.performVisualTasks(ecModel, payload, {
visualType: "visual",
setDirty: true
});
ecModel.eachComponent(function(componentType, componentModel) {
if (componentType !== "series") {
var componentView = _this.getViewOfComponentModel(componentModel);
componentView && componentView.__alive && componentView.updateVisual(componentModel, ecModel, _this._api, payload);
}
});
ecModel.eachSeries(function(seriesModel) {
var chartView = _this._chartsMap[seriesModel.__viewId];
chartView.updateVisual(seriesModel, ecModel, _this._api, payload);
});
lifecycle.trigger("afterupdate", ecModel, this._api);
},
updateLayout: function(payload) {
updateMethods.update.call(this, payload);
}
};
doConvertPixel = function(ecIns, methodName, finder, value) {
if (ecIns._disposed) {
disposedWarning(ecIns.id);
return;
}
var ecModel = ecIns._model;
var coordSysList = ecIns._coordSysMgr.getCoordinateSystems();
var result;
var parsedFinder = parseFinder$1(ecModel, finder);
for (var i = 0; i < coordSysList.length; i++) {
var coordSys = coordSysList[i];
if (coordSys[methodName] && (result = coordSys[methodName](ecModel, parsedFinder, value)) != null) {
return result;
}
}
};
updateStreamModes = function(ecIns, ecModel) {
var chartsMap = ecIns._chartsMap;
var scheduler = ecIns._scheduler;
ecModel.eachSeries(function(seriesModel) {
scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);
});
};
doDispatchAction = function(payload, silent) {
var _this = this;
var ecModel = this.getModel();
var payloadType = payload.type;
var escapeConnect = payload.escapeConnect;
var actionWrap = actions[payloadType];
var actionInfo2 = actionWrap.actionInfo;
var cptTypeTmp = (actionInfo2.update || "update").split(":");
var updateMethod = cptTypeTmp.pop();
var cptType = cptTypeTmp[0] != null && parseClassType(cptTypeTmp[0]);
this[IN_MAIN_PROCESS_KEY] = true;
var payloads = [payload];
var batched = false;
if (payload.batch) {
batched = true;
payloads = map$1(payload.batch, function(item) {
item = defaults(extend({}, item), payload);
item.batch = null;
return item;
});
}
var eventObjBatch = [];
var eventObj;
var isSelectChange = isSelectChangePayload(payload);
var isHighDown = isHighDownPayload(payload);
if (isHighDown) {
allLeaveBlur(this._api);
}
each$f(payloads, function(batchItem) {
eventObj = actionWrap.action(batchItem, _this._model, _this._api);
eventObj = eventObj || extend({}, batchItem);
eventObj.type = actionInfo2.event || eventObj.type;
eventObjBatch.push(eventObj);
if (isHighDown) {
var _a2 = preParseFinder(payload), queryOptionMap = _a2.queryOptionMap, mainTypeSpecified = _a2.mainTypeSpecified;
var componentMainType = mainTypeSpecified ? queryOptionMap.keys()[0] : "series";
updateDirectly(_this, updateMethod, batchItem, componentMainType);
markStatusToUpdate(_this);
} else if (isSelectChange) {
updateDirectly(_this, updateMethod, batchItem, "series");
markStatusToUpdate(_this);
} else if (cptType) {
updateDirectly(_this, updateMethod, batchItem, cptType.main, cptType.sub);
}
});
if (updateMethod !== "none" && !isHighDown && !isSelectChange && !cptType) {
try {
if (this[PENDING_UPDATE]) {
prepare(this);
updateMethods.update.call(this, payload);
this[PENDING_UPDATE] = null;
} else {
updateMethods[updateMethod].call(this, payload);
}
} catch (e) {
this[IN_MAIN_PROCESS_KEY] = false;
throw e;
}
}
if (batched) {
eventObj = {
type: actionInfo2.event || payloadType,
escapeConnect,
batch: eventObjBatch
};
} else {
eventObj = eventObjBatch[0];
}
this[IN_MAIN_PROCESS_KEY] = false;
if (!silent) {
var messageCenter = this._messageCenter;
messageCenter.trigger(eventObj.type, eventObj);
if (isSelectChange) {
var newObj = {
type: "selectchanged",
escapeConnect,
selected: getAllSelectedIndices(ecModel),
isFromClick: payload.isFromClick || false,
fromAction: payload.type,
fromActionPayload: payload
};
messageCenter.trigger(newObj.type, newObj);
}
}
};
flushPendingActions = function(silent) {
var pendingActions = this._pendingActions;
while (pendingActions.length) {
var payload = pendingActions.shift();
doDispatchAction.call(this, payload, silent);
}
};
triggerUpdatedEvent = function(silent) {
!silent && this.trigger("updated");
};
bindRenderedEvent = function(zr, ecIns) {
zr.on("rendered", function(params) {
ecIns.trigger("rendered", params);
if (
// Although zr is dirty if initial animation is not finished
// and this checking is called on frame, we also check
// animation finished for robustness.
zr.animation.isFinished() && !ecIns[PENDING_UPDATE] && !ecIns._scheduler.unfinished && !ecIns._pendingActions.length
) {
ecIns.trigger("finished");
}
});
};
bindMouseEvent = function(zr, ecIns) {
zr.on("mouseover", function(e) {
var el = e.target;
var dispatcher = findEventDispatcher(el, isHighDownDispatcher);
if (dispatcher) {
handleGlobalMouseOverForHighDown(dispatcher, e, ecIns._api);
markStatusToUpdate(ecIns);
}
}).on("mouseout", function(e) {
var el = e.target;
var dispatcher = findEventDispatcher(el, isHighDownDispatcher);
if (dispatcher) {
handleGlobalMouseOutForHighDown(dispatcher, e, ecIns._api);
markStatusToUpdate(ecIns);
}
}).on("click", function(e) {
var el = e.target;
var dispatcher = findEventDispatcher(el, function(target) {
return getECData(target).dataIndex != null;
}, true);
if (dispatcher) {
var actionType = dispatcher.selected ? "unselect" : "select";
var ecData = getECData(dispatcher);
ecIns._api.dispatchAction({
type: actionType,
dataType: ecData.dataType,
dataIndexInside: ecData.dataIndex,
seriesIndex: ecData.seriesIndex,
isFromClick: true
});
}
});
};
function clearColorPalette(ecModel) {
ecModel.clearColorPalette();
ecModel.eachSeries(function(seriesModel) {
seriesModel.clearColorPalette();
});
}
function allocateZlevels(ecModel) {
var componentZLevels = [];
var seriesZLevels = [];
var hasSeparateZLevel = false;
ecModel.eachComponent(function(componentType, componentModel) {
var zlevel = componentModel.get("zlevel") || 0;
var z = componentModel.get("z") || 0;
var zlevelKey = componentModel.getZLevelKey();
hasSeparateZLevel = hasSeparateZLevel || !!zlevelKey;
(componentType === "series" ? seriesZLevels : componentZLevels).push({
zlevel,
z,
idx: componentModel.componentIndex,
type: componentType,
key: zlevelKey
});
});
if (hasSeparateZLevel) {
var zLevels = componentZLevels.concat(seriesZLevels);
var lastSeriesZLevel_1;
var lastSeriesKey_1;
sort$2(zLevels, function(a, b) {
if (a.zlevel === b.zlevel) {
return a.z - b.z;
}
return a.zlevel - b.zlevel;
});
each$f(zLevels, function(item) {
var componentModel = ecModel.getComponent(item.type, item.idx);
var zlevel = item.zlevel;
var key = item.key;
if (lastSeriesZLevel_1 != null) {
zlevel = Math.max(lastSeriesZLevel_1, zlevel);
}
if (key) {
if (zlevel === lastSeriesZLevel_1 && key !== lastSeriesKey_1) {
zlevel++;
}
lastSeriesKey_1 = key;
} else if (lastSeriesKey_1) {
if (zlevel === lastSeriesZLevel_1) {
zlevel++;
}
lastSeriesKey_1 = "";
}
lastSeriesZLevel_1 = zlevel;
componentModel.setZLevel(zlevel);
});
}
}
render = function(ecIns, ecModel, api, payload, updateParams) {
allocateZlevels(ecModel);
renderComponents(ecIns, ecModel, api, payload, updateParams);
each$f(ecIns._chartsViews, function(chart) {
chart.__alive = false;
});
renderSeries(ecIns, ecModel, api, payload, updateParams);
each$f(ecIns._chartsViews, function(chart) {
if (!chart.__alive) {
chart.remove(ecModel, api);
}
});
};
renderComponents = function(ecIns, ecModel, api, payload, updateParams, dirtyList) {
each$f(dirtyList || ecIns._componentsViews, function(componentView) {
var componentModel = componentView.__model;
clearStates(componentModel, componentView);
componentView.render(componentModel, ecModel, api, payload);
updateZ2(componentModel, componentView);
updateStates(componentModel, componentView);
});
};
renderSeries = function(ecIns, ecModel, api, payload, updateParams, dirtyMap) {
var scheduler = ecIns._scheduler;
updateParams = extend(updateParams || {}, {
updatedSeries: ecModel.getSeries()
});
lifecycle.trigger("series:beforeupdate", ecModel, api, updateParams);
var unfinished = false;
ecModel.eachSeries(function(seriesModel) {
var chartView = ecIns._chartsMap[seriesModel.__viewId];
chartView.__alive = true;
var renderTask = chartView.renderTask;
scheduler.updatePayload(renderTask, payload);
clearStates(seriesModel, chartView);
if (dirtyMap && dirtyMap.get(seriesModel.uid)) {
renderTask.dirty();
}
if (renderTask.perform(scheduler.getPerformArgs(renderTask))) {
unfinished = true;
}
chartView.group.silent = !!seriesModel.get("silent");
updateBlend(seriesModel, chartView);
updateSeriesElementSelection(seriesModel);
});
scheduler.unfinished = unfinished || scheduler.unfinished;
lifecycle.trigger("series:layoutlabels", ecModel, api, updateParams);
lifecycle.trigger("series:transition", ecModel, api, updateParams);
ecModel.eachSeries(function(seriesModel) {
var chartView = ecIns._chartsMap[seriesModel.__viewId];
updateZ2(seriesModel, chartView);
updateStates(seriesModel, chartView);
});
updateHoverLayerStatus(ecIns, ecModel);
lifecycle.trigger("series:afterupdate", ecModel, api, updateParams);
};
markStatusToUpdate = function(ecIns) {
ecIns[STATUS_NEEDS_UPDATE_KEY] = true;
ecIns.getZr().wakeUp();
};
applyChangedStates = function(ecIns) {
if (!ecIns[STATUS_NEEDS_UPDATE_KEY]) {
return;
}
ecIns.getZr().storage.traverse(function(el) {
if (isElementRemoved(el)) {
return;
}
applyElementStates(el);
});
ecIns[STATUS_NEEDS_UPDATE_KEY] = false;
};
function applyElementStates(el) {
var newStates = [];
var oldStates = el.currentStates;
for (var i = 0; i < oldStates.length; i++) {
var stateName = oldStates[i];
if (!(stateName === "emphasis" || stateName === "blur" || stateName === "select")) {
newStates.push(stateName);
}
}
if (el.selected && el.states.select) {
newStates.push("select");
}
if (el.hoverState === HOVER_STATE_EMPHASIS && el.states.emphasis) {
newStates.push("emphasis");
} else if (el.hoverState === HOVER_STATE_BLUR && el.states.blur) {
newStates.push("blur");
}
el.useStates(newStates);
}
function updateHoverLayerStatus(ecIns, ecModel) {
var zr = ecIns._zr;
var storage2 = zr.storage;
var elCount = 0;
storage2.traverse(function(el) {
if (!el.isGroup) {
elCount++;
}
});
if (elCount > ecModel.get("hoverLayerThreshold") && !env.node && !env.worker) {
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.preventUsingHoverLayer) {
return;
}
var chartView = ecIns._chartsMap[seriesModel.__viewId];
if (chartView.__alive) {
chartView.eachRendered(function(el) {
if (el.states.emphasis) {
el.states.emphasis.hoverLayer = true;
}
});
}
});
}
}
function updateBlend(seriesModel, chartView) {
var blendMode = seriesModel.get("blendMode") || null;
chartView.eachRendered(function(el) {
if (!el.isGroup) {
el.style.blend = blendMode;
}
});
}
function updateZ2(model, view) {
if (model.preventAutoZ) {
return;
}
var z = model.get("z") || 0;
var zlevel = model.get("zlevel") || 0;
view.eachRendered(function(el) {
doUpdateZ(el, z, zlevel, -Infinity);
return true;
});
}
function doUpdateZ(el, z, zlevel, maxZ2) {
var label = el.getTextContent();
var labelLine = el.getTextGuideLine();
var isGroup = el.isGroup;
if (isGroup) {
var children = el.childrenRef();
for (var i = 0; i < children.length; i++) {
maxZ2 = Math.max(doUpdateZ(children[i], z, zlevel, maxZ2), maxZ2);
}
} else {
el.z = z;
el.zlevel = zlevel;
maxZ2 = Math.max(el.z2, maxZ2);
}
if (label) {
label.z = z;
label.zlevel = zlevel;
isFinite(maxZ2) && (label.z2 = maxZ2 + 2);
}
if (labelLine) {
var textGuideLineConfig = el.textGuideLineConfig;
labelLine.z = z;
labelLine.zlevel = zlevel;
isFinite(maxZ2) && (labelLine.z2 = maxZ2 + (textGuideLineConfig && textGuideLineConfig.showAbove ? 1 : -1));
}
return maxZ2;
}
function clearStates(model, view) {
view.eachRendered(function(el) {
if (isElementRemoved(el)) {
return;
}
var textContent = el.getTextContent();
var textGuide = el.getTextGuideLine();
if (el.stateTransition) {
el.stateTransition = null;
}
if (textContent && textContent.stateTransition) {
textContent.stateTransition = null;
}
if (textGuide && textGuide.stateTransition) {
textGuide.stateTransition = null;
}
if (el.hasState()) {
el.prevStates = el.currentStates;
el.clearStates();
} else if (el.prevStates) {
el.prevStates = null;
}
});
}
function updateStates(model, view) {
var stateAnimationModel = model.getModel("stateAnimation");
var enableAnimation = model.isAnimationEnabled();
var duration = stateAnimationModel.get("duration");
var stateTransition = duration > 0 ? {
duration,
delay: stateAnimationModel.get("delay"),
easing: stateAnimationModel.get("easing")
// additive: stateAnimationModel.get('additive')
} : null;
view.eachRendered(function(el) {
if (el.states && el.states.emphasis) {
if (isElementRemoved(el)) {
return;
}
if (el instanceof Path) {
savePathStates(el);
}
if (el.__dirty) {
var prevStates = el.prevStates;
if (prevStates) {
el.useStates(prevStates);
}
}
if (enableAnimation) {
el.stateTransition = stateTransition;
var textContent = el.getTextContent();
var textGuide = el.getTextGuideLine();
if (textContent) {
textContent.stateTransition = stateTransition;
}
if (textGuide) {
textGuide.stateTransition = stateTransition;
}
}
if (el.__dirty) {
applyElementStates(el);
}
}
});
}
createExtensionAPI = function(ecIns) {
return new /** @class */
((function(_super2) {
__extends(class_1, _super2);
function class_1() {
return _super2 !== null && _super2.apply(this, arguments) || this;
}
class_1.prototype.getCoordinateSystems = function() {
return ecIns._coordSysMgr.getCoordinateSystems();
};
class_1.prototype.getComponentByElement = function(el) {
while (el) {
var modelInfo = el.__ecComponentInfo;
if (modelInfo != null) {
return ecIns._model.getComponent(modelInfo.mainType, modelInfo.index);
}
el = el.parent;
}
};
class_1.prototype.enterEmphasis = function(el, highlightDigit) {
enterEmphasis(el, highlightDigit);
markStatusToUpdate(ecIns);
};
class_1.prototype.leaveEmphasis = function(el, highlightDigit) {
leaveEmphasis(el, highlightDigit);
markStatusToUpdate(ecIns);
};
class_1.prototype.enterBlur = function(el) {
enterBlur(el);
markStatusToUpdate(ecIns);
};
class_1.prototype.leaveBlur = function(el) {
leaveBlur(el);
markStatusToUpdate(ecIns);
};
class_1.prototype.enterSelect = function(el) {
enterSelect(el);
markStatusToUpdate(ecIns);
};
class_1.prototype.leaveSelect = function(el) {
leaveSelect(el);
markStatusToUpdate(ecIns);
};
class_1.prototype.getModel = function() {
return ecIns.getModel();
};
class_1.prototype.getViewOfComponentModel = function(componentModel) {
return ecIns.getViewOfComponentModel(componentModel);
};
class_1.prototype.getViewOfSeriesModel = function(seriesModel) {
return ecIns.getViewOfSeriesModel(seriesModel);
};
return class_1;
})(ExtensionAPI))(ecIns);
};
enableConnect = function(chart) {
function updateConnectedChartsStatus(charts, status) {
for (var i = 0; i < charts.length; i++) {
var otherChart = charts[i];
otherChart[CONNECT_STATUS_KEY] = status;
}
}
each$f(eventActionMap, function(actionType, eventType) {
chart._messageCenter.on(eventType, function(event) {
if (connectedGroups[chart.group] && chart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_PENDING) {
if (event && event.escapeConnect) {
return;
}
var action_1 = chart.makeActionFromEvent(event);
var otherCharts_1 = [];
each$f(instances, function(otherChart) {
if (otherChart !== chart && otherChart.group === chart.group) {
otherCharts_1.push(otherChart);
}
});
updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_PENDING);
each$f(otherCharts_1, function(otherChart) {
if (otherChart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_UPDATING) {
otherChart.dispatchAction(action_1);
}
});
updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_UPDATED);
}
});
});
};
})();
return ECharts2;
})(Eventful)
);
var echartsProto = ECharts.prototype;
echartsProto.on = createRegisterEventWithLowercaseECharts("on");
echartsProto.off = createRegisterEventWithLowercaseECharts("off");
echartsProto.one = function(eventName, cb, ctx) {
var self = this;
function wrapped() {
var args2 = [];
for (var _i = 0; _i < arguments.length; _i++) {
args2[_i] = arguments[_i];
}
cb && cb.apply && cb.apply(this, args2);
self.off(eventName, wrapped);
}
this.on.call(this, eventName, wrapped, ctx);
};
var MOUSE_EVENT_NAMES = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"];
function disposedWarning(id) {
}
var actions = {};
var eventActionMap = {};
var dataProcessorFuncs = [];
var optionPreprocessorFuncs = [];
var visualFuncs = [];
var themeStorage = {};
var loadingEffects = {};
var instances = {};
var connectedGroups = {};
var idBase = +/* @__PURE__ */ new Date() - 0;
var DOM_ATTRIBUTE_KEY = "_echarts_instance_";
function init$1(dom, theme2, opts) {
{
var existInstance = getInstanceByDom(dom);
if (existInstance) {
return existInstance;
}
}
var chart = new ECharts(dom, theme2, opts);
chart.id = "ec_" + idBase++;
instances[chart.id] = chart;
setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);
enableConnect(chart);
lifecycle.trigger("afterinit", chart);
return chart;
}
function getInstanceByDom(dom) {
return instances[getAttribute(dom, DOM_ATTRIBUTE_KEY)];
}
function registerTheme(name, theme2) {
themeStorage[name] = theme2;
}
function registerPreprocessor(preprocessorFunc) {
if (indexOf(optionPreprocessorFuncs, preprocessorFunc) < 0) {
optionPreprocessorFuncs.push(preprocessorFunc);
}
}
function registerProcessor(priority, processor) {
normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_DEFAULT);
}
function registerPostInit(postInitFunc) {
registerUpdateLifecycle("afterinit", postInitFunc);
}
function registerPostUpdate(postUpdateFunc) {
registerUpdateLifecycle("afterupdate", postUpdateFunc);
}
function registerUpdateLifecycle(name, cb) {
lifecycle.on(name, cb);
}
function registerAction(actionInfo2, eventName, action) {
if (isFunction(eventName)) {
action = eventName;
eventName = "";
}
var actionType = isObject$3(actionInfo2) ? actionInfo2.type : [actionInfo2, actionInfo2 = {
event: eventName
}][0];
actionInfo2.event = (actionInfo2.event || actionType).toLowerCase();
eventName = actionInfo2.event;
if (eventActionMap[eventName]) {
return;
}
assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));
if (!actions[actionType]) {
actions[actionType] = {
action,
actionInfo: actionInfo2
};
}
eventActionMap[eventName] = actionType;
}
function registerCoordinateSystem(type, coordSysCreator) {
CoordinateSystemManager.register(type, coordSysCreator);
}
function registerLayout(priority, layoutTask) {
normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, "layout");
}
function registerVisual(priority, visualTask) {
normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, "visual");
}
var registeredTasks = [];
function normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {
if (isFunction(priority) || isObject$3(priority)) {
fn = priority;
priority = defaultPriority;
}
if (indexOf(registeredTasks, fn) >= 0) {
return;
}
registeredTasks.push(fn);
var stageHandler = Scheduler.wrapStageHandler(fn, visualType);
stageHandler.__prio = priority;
stageHandler.__raw = fn;
targetList.push(stageHandler);
}
function registerLoading(name, loadingFx) {
loadingEffects[name] = loadingFx;
}
function registerMap$1(mapName, geoJson, specialAreas) {
var registerMap2 = getImpl("registerMap");
registerMap2 && registerMap2(mapName, geoJson, specialAreas);
}
var registerTransform = registerExternalTransform;
registerVisual(PRIORITY_VISUAL_GLOBAL, seriesStyleTask);
registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataStyleTask);
registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataColorPaletteTask);
registerVisual(PRIORITY_VISUAL_GLOBAL, seriesSymbolTask);
registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataSymbolTask);
registerVisual(PRIORITY_VISUAL_DECAL, decalVisual);
registerPreprocessor(globalBackwardCompat);
registerProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStack);
registerLoading("default", defaultLoading);
registerAction({
type: HIGHLIGHT_ACTION_TYPE,
event: HIGHLIGHT_ACTION_TYPE,
update: HIGHLIGHT_ACTION_TYPE
}, noop);
registerAction({
type: DOWNPLAY_ACTION_TYPE,
event: DOWNPLAY_ACTION_TYPE,
update: DOWNPLAY_ACTION_TYPE
}, noop);
registerAction({
type: SELECT_ACTION_TYPE,
event: SELECT_ACTION_TYPE,
update: SELECT_ACTION_TYPE
}, noop);
registerAction({
type: UNSELECT_ACTION_TYPE,
event: UNSELECT_ACTION_TYPE,
update: UNSELECT_ACTION_TYPE
}, noop);
registerAction({
type: TOGGLE_SELECT_ACTION_TYPE,
event: TOGGLE_SELECT_ACTION_TYPE,
update: TOGGLE_SELECT_ACTION_TYPE
}, noop);
registerTheme("light", lightTheme);
registerTheme("dark", theme);
function dataIndexMapValueLength(valNumOrArrLengthMoreThan2) {
return valNumOrArrLengthMoreThan2 == null ? 0 : valNumOrArrLengthMoreThan2.length || 1;
}
function defaultKeyGetter(item) {
return item;
}
var DataDiffer = (
/** @class */
(function() {
function DataDiffer2(oldArr, newArr, oldKeyGetter, newKeyGetter, context, diffMode) {
this._old = oldArr;
this._new = newArr;
this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;
this._newKeyGetter = newKeyGetter || defaultKeyGetter;
this.context = context;
this._diffModeMultiple = diffMode === "multiple";
}
DataDiffer2.prototype.add = function(func) {
this._add = func;
return this;
};
DataDiffer2.prototype.update = function(func) {
this._update = func;
return this;
};
DataDiffer2.prototype.updateManyToOne = function(func) {
this._updateManyToOne = func;
return this;
};
DataDiffer2.prototype.updateOneToMany = function(func) {
this._updateOneToMany = func;
return this;
};
DataDiffer2.prototype.updateManyToMany = function(func) {
this._updateManyToMany = func;
return this;
};
DataDiffer2.prototype.remove = function(func) {
this._remove = func;
return this;
};
DataDiffer2.prototype.execute = function() {
this[this._diffModeMultiple ? "_executeMultiple" : "_executeOneToOne"]();
};
DataDiffer2.prototype._executeOneToOne = function() {
var oldArr = this._old;
var newArr = this._new;
var newDataIndexMap = {};
var oldDataKeyArr = new Array(oldArr.length);
var newDataKeyArr = new Array(newArr.length);
this._initIndexMap(oldArr, null, oldDataKeyArr, "_oldKeyGetter");
this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, "_newKeyGetter");
for (var i = 0; i < oldArr.length; i++) {
var oldKey = oldDataKeyArr[i];
var newIdxMapVal = newDataIndexMap[oldKey];
var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal);
if (newIdxMapValLen > 1) {
var newIdx = newIdxMapVal.shift();
if (newIdxMapVal.length === 1) {
newDataIndexMap[oldKey] = newIdxMapVal[0];
}
this._update && this._update(newIdx, i);
} else if (newIdxMapValLen === 1) {
newDataIndexMap[oldKey] = null;
this._update && this._update(newIdxMapVal, i);
} else {
this._remove && this._remove(i);
}
}
this._performRestAdd(newDataKeyArr, newDataIndexMap);
};
DataDiffer2.prototype._executeMultiple = function() {
var oldArr = this._old;
var newArr = this._new;
var oldDataIndexMap = {};
var newDataIndexMap = {};
var oldDataKeyArr = [];
var newDataKeyArr = [];
this._initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, "_oldKeyGetter");
this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, "_newKeyGetter");
for (var i = 0; i < oldDataKeyArr.length; i++) {
var oldKey = oldDataKeyArr[i];
var oldIdxMapVal = oldDataIndexMap[oldKey];
var newIdxMapVal = newDataIndexMap[oldKey];
var oldIdxMapValLen = dataIndexMapValueLength(oldIdxMapVal);
var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal);
if (oldIdxMapValLen > 1 && newIdxMapValLen === 1) {
this._updateManyToOne && this._updateManyToOne(newIdxMapVal, oldIdxMapVal);
newDataIndexMap[oldKey] = null;
} else if (oldIdxMapValLen === 1 && newIdxMapValLen > 1) {
this._updateOneToMany && this._updateOneToMany(newIdxMapVal, oldIdxMapVal);
newDataIndexMap[oldKey] = null;
} else if (oldIdxMapValLen === 1 && newIdxMapValLen === 1) {
this._update && this._update(newIdxMapVal, oldIdxMapVal);
newDataIndexMap[oldKey] = null;
} else if (oldIdxMapValLen > 1 && newIdxMapValLen > 1) {
this._updateManyToMany && this._updateManyToMany(newIdxMapVal, oldIdxMapVal);
newDataIndexMap[oldKey] = null;
} else if (oldIdxMapValLen > 1) {
for (var i_1 = 0; i_1 < oldIdxMapValLen; i_1++) {
this._remove && this._remove(oldIdxMapVal[i_1]);
}
} else {
this._remove && this._remove(oldIdxMapVal);
}
}
this._performRestAdd(newDataKeyArr, newDataIndexMap);
};
DataDiffer2.prototype._performRestAdd = function(newDataKeyArr, newDataIndexMap) {
for (var i = 0; i < newDataKeyArr.length; i++) {
var newKey = newDataKeyArr[i];
var newIdxMapVal = newDataIndexMap[newKey];
var idxMapValLen = dataIndexMapValueLength(newIdxMapVal);
if (idxMapValLen > 1) {
for (var j = 0; j < idxMapValLen; j++) {
this._add && this._add(newIdxMapVal[j]);
}
} else if (idxMapValLen === 1) {
this._add && this._add(newIdxMapVal);
}
newDataIndexMap[newKey] = null;
}
};
DataDiffer2.prototype._initIndexMap = function(arr, map2, keyArr, keyGetterName) {
var cbModeMultiple = this._diffModeMultiple;
for (var i = 0; i < arr.length; i++) {
var key = "_ec_" + this[keyGetterName](arr[i], i);
if (!cbModeMultiple) {
keyArr[i] = key;
}
if (!map2) {
continue;
}
var idxMapVal = map2[key];
var idxMapValLen = dataIndexMapValueLength(idxMapVal);
if (idxMapValLen === 0) {
map2[key] = i;
if (cbModeMultiple) {
keyArr.push(key);
}
} else if (idxMapValLen === 1) {
map2[key] = [idxMapVal, i];
} else {
idxMapVal.push(i);
}
}
};
return DataDiffer2;
})()
);
var DimensionUserOuput = (
/** @class */
(function() {
function DimensionUserOuput2(encode, dimRequest) {
this._encode = encode;
this._schema = dimRequest;
}
DimensionUserOuput2.prototype.get = function() {
return {
// Do not generate full dimension name until fist used.
fullDimensions: this._getFullDimensionNames(),
encode: this._encode
};
};
DimensionUserOuput2.prototype._getFullDimensionNames = function() {
if (!this._cachedDimNames) {
this._cachedDimNames = this._schema ? this._schema.makeOutputDimensionNames() : [];
}
return this._cachedDimNames;
};
return DimensionUserOuput2;
})()
);
function summarizeDimensions(data, schema) {
var summary = {};
var encode = summary.encode = {};
var notExtraCoordDimMap = createHashMap();
var defaultedLabel = [];
var defaultedTooltip = [];
var userOutputEncode = {};
each$f(data.dimensions, function(dimName) {
var dimItem = data.getDimensionInfo(dimName);
var coordDim = dimItem.coordDim;
if (coordDim) {
var coordDimIndex = dimItem.coordDimIndex;
getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;
if (!dimItem.isExtraCoord) {
notExtraCoordDimMap.set(coordDim, 1);
if (mayLabelDimType(dimItem.type)) {
defaultedLabel[0] = dimName;
}
getOrCreateEncodeArr(userOutputEncode, coordDim)[coordDimIndex] = data.getDimensionIndex(dimItem.name);
}
if (dimItem.defaultTooltip) {
defaultedTooltip.push(dimName);
}
}
VISUAL_DIMENSIONS.each(function(v, otherDim) {
var encodeArr = getOrCreateEncodeArr(encode, otherDim);
var dimIndex = dimItem.otherDims[otherDim];
if (dimIndex != null && dimIndex !== false) {
encodeArr[dimIndex] = dimItem.name;
}
});
});
var dataDimsOnCoord = [];
var encodeFirstDimNotExtra = {};
notExtraCoordDimMap.each(function(v, coordDim) {
var dimArr = encode[coordDim];
encodeFirstDimNotExtra[coordDim] = dimArr[0];
dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);
});
summary.dataDimsOnCoord = dataDimsOnCoord;
summary.dataDimIndicesOnCoord = map$1(dataDimsOnCoord, function(dimName) {
return data.getDimensionInfo(dimName).storeDimIndex;
});
summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;
var encodeLabel = encode.label;
if (encodeLabel && encodeLabel.length) {
defaultedLabel = encodeLabel.slice();
}
var encodeTooltip = encode.tooltip;
if (encodeTooltip && encodeTooltip.length) {
defaultedTooltip = encodeTooltip.slice();
} else if (!defaultedTooltip.length) {
defaultedTooltip = defaultedLabel.slice();
}
encode.defaultedLabel = defaultedLabel;
encode.defaultedTooltip = defaultedTooltip;
summary.userOutput = new DimensionUserOuput(userOutputEncode, schema);
return summary;
}
function getOrCreateEncodeArr(encode, dim) {
if (!encode.hasOwnProperty(dim)) {
encode[dim] = [];
}
return encode[dim];
}
function getDimensionTypeByAxis(axisType) {
return axisType === "category" ? "ordinal" : axisType === "time" ? "time" : "float";
}
function mayLabelDimType(dimType) {
return !(dimType === "ordinal" || dimType === "time");
}
var SeriesDimensionDefine = (
/** @class */
/* @__PURE__ */ (function() {
function SeriesDimensionDefine2(opt) {
this.otherDims = {};
if (opt != null) {
extend(this, opt);
}
}
return SeriesDimensionDefine2;
})()
);
var inner$h = makeInner();
var dimTypeShort = {
float: "f",
int: "i",
ordinal: "o",
number: "n",
time: "t"
};
var SeriesDataSchema = (
/** @class */
(function() {
function SeriesDataSchema2(opt) {
this.dimensions = opt.dimensions;
this._dimOmitted = opt.dimensionOmitted;
this.source = opt.source;
this._fullDimCount = opt.fullDimensionCount;
this._updateDimOmitted(opt.dimensionOmitted);
}
SeriesDataSchema2.prototype.isDimensionOmitted = function() {
return this._dimOmitted;
};
SeriesDataSchema2.prototype._updateDimOmitted = function(dimensionOmitted) {
this._dimOmitted = dimensionOmitted;
if (!dimensionOmitted) {
return;
}
if (!this._dimNameMap) {
this._dimNameMap = ensureSourceDimNameMap(this.source);
}
};
SeriesDataSchema2.prototype.getSourceDimensionIndex = function(dimName) {
return retrieve2(this._dimNameMap.get(dimName), -1);
};
SeriesDataSchema2.prototype.getSourceDimension = function(dimIndex) {
var dimensionsDefine = this.source.dimensionsDefine;
if (dimensionsDefine) {
return dimensionsDefine[dimIndex];
}
};
SeriesDataSchema2.prototype.makeStoreSchema = function() {
var dimCount = this._fullDimCount;
var willRetrieveDataByName = shouldRetrieveDataByName(this.source);
var makeHashStrict = !shouldOmitUnusedDimensions(dimCount);
var dimHash = "";
var dims = [];
for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < dimCount; fullDimIdx++) {
var property = void 0;
var type = void 0;
var ordinalMeta = void 0;
var seriesDimDef = this.dimensions[seriesDimIdx];
if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) {
property = willRetrieveDataByName ? seriesDimDef.name : null;
type = seriesDimDef.type;
ordinalMeta = seriesDimDef.ordinalMeta;
seriesDimIdx++;
} else {
var sourceDimDef = this.getSourceDimension(fullDimIdx);
if (sourceDimDef) {
property = willRetrieveDataByName ? sourceDimDef.name : null;
type = sourceDimDef.type;
}
}
dims.push({
property,
type,
ordinalMeta
});
if (willRetrieveDataByName && property != null && (!seriesDimDef || !seriesDimDef.isCalculationCoord)) {
dimHash += makeHashStrict ? property.replace(/\`/g, "`1").replace(/\$/g, "`2") : property;
}
dimHash += "$";
dimHash += dimTypeShort[type] || "f";
if (ordinalMeta) {
dimHash += ordinalMeta.uid;
}
dimHash += "$";
}
var source = this.source;
var hash = [source.seriesLayoutBy, source.startIndex, dimHash].join("$$");
return {
dimensions: dims,
hash
};
};
SeriesDataSchema2.prototype.makeOutputDimensionNames = function() {
var result = [];
for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < this._fullDimCount; fullDimIdx++) {
var name_1 = void 0;
var seriesDimDef = this.dimensions[seriesDimIdx];
if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) {
if (!seriesDimDef.isCalculationCoord) {
name_1 = seriesDimDef.name;
}
seriesDimIdx++;
} else {
var sourceDimDef = this.getSourceDimension(fullDimIdx);
if (sourceDimDef) {
name_1 = sourceDimDef.name;
}
}
result.push(name_1);
}
return result;
};
SeriesDataSchema2.prototype.appendCalculationDimension = function(dimDef) {
this.dimensions.push(dimDef);
dimDef.isCalculationCoord = true;
this._fullDimCount++;
this._updateDimOmitted(true);
};
return SeriesDataSchema2;
})()
);
function isSeriesDataSchema(schema) {
return schema instanceof SeriesDataSchema;
}
function createDimNameMap(dimsDef) {
var dataDimNameMap = createHashMap();
for (var i = 0; i < (dimsDef || []).length; i++) {
var dimDefItemRaw = dimsDef[i];
var userDimName = isObject$3(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw;
if (userDimName != null && dataDimNameMap.get(userDimName) == null) {
dataDimNameMap.set(userDimName, i);
}
}
return dataDimNameMap;
}
function ensureSourceDimNameMap(source) {
var innerSource = inner$h(source);
return innerSource.dimNameMap || (innerSource.dimNameMap = createDimNameMap(source.dimensionsDefine));
}
function shouldOmitUnusedDimensions(dimCount) {
return dimCount > 30;
}
var isObject$1 = isObject$3;
var map = map$1;
var CtorInt32Array = typeof Int32Array === "undefined" ? Array : Int32Array;
var ID_PREFIX = "e\0\0";
var INDEX_NOT_FOUND = -1;
var TRANSFERABLE_PROPERTIES = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_dimSummary", "userOutput", "_rawData", "_dimValueGetter", "_nameDimIdx", "_idDimIdx", "_nameRepeatCount"];
var CLONE_PROPERTIES = ["_approximateExtent"];
var prepareInvertedIndex;
var getId;
var getIdNameFromStore;
var normalizeDimensions;
var transferProperties;
var cloneListForMapAndSample;
var makeIdFromName;
var SeriesData = (
/** @class */
(function() {
function SeriesData2(dimensionsInput, hostModel) {
this.type = "list";
this._dimOmitted = false;
this._nameList = [];
this._idList = [];
this._visual = {};
this._layout = {};
this._itemVisuals = [];
this._itemLayouts = [];
this._graphicEls = [];
this._approximateExtent = {};
this._calculationInfo = {};
this.hasItemOption = false;
this.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "minmaxDownSample", "lttbDownSample", "map"];
this.CHANGABLE_METHODS = ["filterSelf", "selectRange"];
this.DOWNSAMPLE_METHODS = ["downSample", "minmaxDownSample", "lttbDownSample"];
var dimensions;
var assignStoreDimIdx = false;
if (isSeriesDataSchema(dimensionsInput)) {
dimensions = dimensionsInput.dimensions;
this._dimOmitted = dimensionsInput.isDimensionOmitted();
this._schema = dimensionsInput;
} else {
assignStoreDimIdx = true;
dimensions = dimensionsInput;
}
dimensions = dimensions || ["x", "y"];
var dimensionInfos = {};
var dimensionNames = [];
var invertedIndicesMap = {};
var needsHasOwn = false;
var emptyObj = {};
for (var i = 0; i < dimensions.length; i++) {
var dimInfoInput = dimensions[i];
var dimensionInfo = isString(dimInfoInput) ? new SeriesDimensionDefine({
name: dimInfoInput
}) : !(dimInfoInput instanceof SeriesDimensionDefine) ? new SeriesDimensionDefine(dimInfoInput) : dimInfoInput;
var dimensionName = dimensionInfo.name;
dimensionInfo.type = dimensionInfo.type || "float";
if (!dimensionInfo.coordDim) {
dimensionInfo.coordDim = dimensionName;
dimensionInfo.coordDimIndex = 0;
}
var otherDims = dimensionInfo.otherDims = dimensionInfo.otherDims || {};
dimensionNames.push(dimensionName);
dimensionInfos[dimensionName] = dimensionInfo;
if (emptyObj[dimensionName] != null) {
needsHasOwn = true;
}
if (dimensionInfo.createInvertedIndices) {
invertedIndicesMap[dimensionName] = [];
}
if (otherDims.itemName === 0) {
this._nameDimIdx = i;
}
if (otherDims.itemId === 0) {
this._idDimIdx = i;
}
if (assignStoreDimIdx) {
dimensionInfo.storeDimIndex = i;
}
}
this.dimensions = dimensionNames;
this._dimInfos = dimensionInfos;
this._initGetDimensionInfo(needsHasOwn);
this.hostModel = hostModel;
this._invertedIndicesMap = invertedIndicesMap;
if (this._dimOmitted) {
var dimIdxToName_1 = this._dimIdxToName = createHashMap();
each$f(dimensionNames, function(dimName) {
dimIdxToName_1.set(dimensionInfos[dimName].storeDimIndex, dimName);
});
}
}
SeriesData2.prototype.getDimension = function(dim) {
var dimIdx = this._recognizeDimIndex(dim);
if (dimIdx == null) {
return dim;
}
dimIdx = dim;
if (!this._dimOmitted) {
return this.dimensions[dimIdx];
}
var dimName = this._dimIdxToName.get(dimIdx);
if (dimName != null) {
return dimName;
}
var sourceDimDef = this._schema.getSourceDimension(dimIdx);
if (sourceDimDef) {
return sourceDimDef.name;
}
};
SeriesData2.prototype.getDimensionIndex = function(dim) {
var dimIdx = this._recognizeDimIndex(dim);
if (dimIdx != null) {
return dimIdx;
}
if (dim == null) {
return -1;
}
var dimInfo = this._getDimInfo(dim);
return dimInfo ? dimInfo.storeDimIndex : this._dimOmitted ? this._schema.getSourceDimensionIndex(dim) : -1;
};
SeriesData2.prototype._recognizeDimIndex = function(dim) {
if (isNumber(dim) || dim != null && !isNaN(dim) && !this._getDimInfo(dim) && (!this._dimOmitted || this._schema.getSourceDimensionIndex(dim) < 0)) {
return +dim;
}
};
SeriesData2.prototype._getStoreDimIndex = function(dim) {
var dimIdx = this.getDimensionIndex(dim);
return dimIdx;
};
SeriesData2.prototype.getDimensionInfo = function(dim) {
return this._getDimInfo(this.getDimension(dim));
};
SeriesData2.prototype._initGetDimensionInfo = function(needsHasOwn) {
var dimensionInfos = this._dimInfos;
this._getDimInfo = needsHasOwn ? function(dimName) {
return dimensionInfos.hasOwnProperty(dimName) ? dimensionInfos[dimName] : void 0;
} : function(dimName) {
return dimensionInfos[dimName];
};
};
SeriesData2.prototype.getDimensionsOnCoord = function() {
return this._dimSummary.dataDimsOnCoord.slice();
};
SeriesData2.prototype.mapDimension = function(coordDim, idx) {
var dimensionsSummary = this._dimSummary;
if (idx == null) {
return dimensionsSummary.encodeFirstDimNotExtra[coordDim];
}
var dims = dimensionsSummary.encode[coordDim];
return dims ? dims[idx] : null;
};
SeriesData2.prototype.mapDimensionsAll = function(coordDim) {
var dimensionsSummary = this._dimSummary;
var dims = dimensionsSummary.encode[coordDim];
return (dims || []).slice();
};
SeriesData2.prototype.getStore = function() {
return this._store;
};
SeriesData2.prototype.initData = function(data, nameList, dimValueGetter) {
var _this = this;
var store;
if (data instanceof DataStore) {
store = data;
}
if (!store) {
var dimensions = this.dimensions;
var provider = isSourceInstance(data) || isArrayLike(data) ? new DefaultDataProvider(data, dimensions.length) : data;
store = new DataStore();
var dimensionInfos = map(dimensions, function(dimName) {
return {
type: _this._dimInfos[dimName].type,
property: dimName
};
});
store.initData(provider, dimensionInfos, dimValueGetter);
}
this._store = store;
this._nameList = (nameList || []).slice();
this._idList = [];
this._nameRepeatCount = {};
this._doInit(0, store.count());
this._dimSummary = summarizeDimensions(this, this._schema);
this.userOutput = this._dimSummary.userOutput;
};
SeriesData2.prototype.appendData = function(data) {
var range = this._store.appendData(data);
this._doInit(range[0], range[1]);
};
SeriesData2.prototype.appendValues = function(values, names) {
var _a2 = this._store.appendValues(values, names && names.length), start = _a2.start, end = _a2.end;
var shouldMakeIdFromName = this._shouldMakeIdFromName();
this._updateOrdinalMeta();
if (names) {
for (var idx = start; idx < end; idx++) {
var sourceIdx = idx - start;
this._nameList[idx] = names[sourceIdx];
if (shouldMakeIdFromName) {
makeIdFromName(this, idx);
}
}
}
};
SeriesData2.prototype._updateOrdinalMeta = function() {
var store = this._store;
var dimensions = this.dimensions;
for (var i = 0; i < dimensions.length; i++) {
var dimInfo = this._dimInfos[dimensions[i]];
if (dimInfo.ordinalMeta) {
store.collectOrdinalMeta(dimInfo.storeDimIndex, dimInfo.ordinalMeta);
}
}
};
SeriesData2.prototype._shouldMakeIdFromName = function() {
var provider = this._store.getProvider();
return this._idDimIdx == null && provider.getSource().sourceFormat !== SOURCE_FORMAT_TYPED_ARRAY && !provider.fillStorage;
};
SeriesData2.prototype._doInit = function(start, end) {
if (start >= end) {
return;
}
var store = this._store;
var provider = store.getProvider();
this._updateOrdinalMeta();
var nameList = this._nameList;
var idList = this._idList;
var sourceFormat = provider.getSource().sourceFormat;
var isFormatOriginal = sourceFormat === SOURCE_FORMAT_ORIGINAL;
if (isFormatOriginal && !provider.pure) {
var sharedDataItem = [];
for (var idx = start; idx < end; idx++) {
var dataItem = provider.getItem(idx, sharedDataItem);
if (!this.hasItemOption && isDataItemOption(dataItem)) {
this.hasItemOption = true;
}
if (dataItem) {
var itemName = dataItem.name;
if (nameList[idx] == null && itemName != null) {
nameList[idx] = convertOptionIdName(itemName, null);
}
var itemId = dataItem.id;
if (idList[idx] == null && itemId != null) {
idList[idx] = convertOptionIdName(itemId, null);
}
}
}
}
if (this._shouldMakeIdFromName()) {
for (var idx = start; idx < end; idx++) {
makeIdFromName(this, idx);
}
}
prepareInvertedIndex(this);
};
SeriesData2.prototype.getApproximateExtent = function(dim) {
return this._approximateExtent[dim] || this._store.getDataExtent(this._getStoreDimIndex(dim));
};
SeriesData2.prototype.setApproximateExtent = function(extent, dim) {
dim = this.getDimension(dim);
this._approximateExtent[dim] = extent.slice();
};
SeriesData2.prototype.getCalculationInfo = function(key) {
return this._calculationInfo[key];
};
SeriesData2.prototype.setCalculationInfo = function(key, value) {
isObject$1(key) ? extend(this._calculationInfo, key) : this._calculationInfo[key] = value;
};
SeriesData2.prototype.getName = function(idx) {
var rawIndex = this.getRawIndex(idx);
var name = this._nameList[rawIndex];
if (name == null && this._nameDimIdx != null) {
name = getIdNameFromStore(this, this._nameDimIdx, rawIndex);
}
if (name == null) {
name = "";
}
return name;
};
SeriesData2.prototype._getCategory = function(dimIdx, idx) {
var ordinal = this._store.get(dimIdx, idx);
var ordinalMeta = this._store.getOrdinalMeta(dimIdx);
if (ordinalMeta) {
return ordinalMeta.categories[ordinal];
}
return ordinal;
};
SeriesData2.prototype.getId = function(idx) {
return getId(this, this.getRawIndex(idx));
};
SeriesData2.prototype.count = function() {
return this._store.count();
};
SeriesData2.prototype.get = function(dim, idx) {
var store = this._store;
var dimInfo = this._dimInfos[dim];
if (dimInfo) {
return store.get(dimInfo.storeDimIndex, idx);
}
};
SeriesData2.prototype.getByRawIndex = function(dim, rawIdx) {
var store = this._store;
var dimInfo = this._dimInfos[dim];
if (dimInfo) {
return store.getByRawIndex(dimInfo.storeDimIndex, rawIdx);
}
};
SeriesData2.prototype.getIndices = function() {
return this._store.getIndices();
};
SeriesData2.prototype.getDataExtent = function(dim) {
return this._store.getDataExtent(this._getStoreDimIndex(dim));
};
SeriesData2.prototype.getSum = function(dim) {
return this._store.getSum(this._getStoreDimIndex(dim));
};
SeriesData2.prototype.getMedian = function(dim) {
return this._store.getMedian(this._getStoreDimIndex(dim));
};
SeriesData2.prototype.getValues = function(dimensions, idx) {
var _this = this;
var store = this._store;
return isArray$1(dimensions) ? store.getValues(map(dimensions, function(dim) {
return _this._getStoreDimIndex(dim);
}), idx) : store.getValues(dimensions);
};
SeriesData2.prototype.hasValue = function(idx) {
var dataDimIndicesOnCoord = this._dimSummary.dataDimIndicesOnCoord;
for (var i = 0, len2 = dataDimIndicesOnCoord.length; i < len2; i++) {
if (isNaN(this._store.get(dataDimIndicesOnCoord[i], idx))) {
return false;
}
}
return true;
};
SeriesData2.prototype.indexOfName = function(name) {
for (var i = 0, len2 = this._store.count(); i < len2; i++) {
if (this.getName(i) === name) {
return i;
}
}
return -1;
};
SeriesData2.prototype.getRawIndex = function(idx) {
return this._store.getRawIndex(idx);
};
SeriesData2.prototype.indexOfRawIndex = function(rawIndex) {
return this._store.indexOfRawIndex(rawIndex);
};
SeriesData2.prototype.rawIndexOf = function(dim, value) {
var invertedIndices = dim && this._invertedIndicesMap[dim];
var rawIndex = invertedIndices && invertedIndices[value];
if (rawIndex == null || isNaN(rawIndex)) {
return INDEX_NOT_FOUND;
}
return rawIndex;
};
SeriesData2.prototype.indicesOfNearest = function(dim, value, maxDistance) {
return this._store.indicesOfNearest(this._getStoreDimIndex(dim), value, maxDistance);
};
SeriesData2.prototype.each = function(dims, cb, ctx) {
if (isFunction(dims)) {
ctx = cb;
cb = dims;
dims = [];
}
var fCtx = ctx || this;
var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);
this._store.each(dimIndices, fCtx ? bind$1(cb, fCtx) : cb);
};
SeriesData2.prototype.filterSelf = function(dims, cb, ctx) {
if (isFunction(dims)) {
ctx = cb;
cb = dims;
dims = [];
}
var fCtx = ctx || this;
var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);
this._store = this._store.filter(dimIndices, fCtx ? bind$1(cb, fCtx) : cb);
return this;
};
SeriesData2.prototype.selectRange = function(range) {
var _this = this;
var innerRange = {};
var dims = keys(range);
each$f(dims, function(dim) {
var dimIdx = _this._getStoreDimIndex(dim);
innerRange[dimIdx] = range[dim];
});
this._store = this._store.selectRange(innerRange);
return this;
};
SeriesData2.prototype.mapArray = function(dims, cb, ctx) {
if (isFunction(dims)) {
ctx = cb;
cb = dims;
dims = [];
}
ctx = ctx || this;
var result = [];
this.each(dims, function() {
result.push(cb && cb.apply(this, arguments));
}, ctx);
return result;
};
SeriesData2.prototype.map = function(dims, cb, ctx, ctxCompat) {
var fCtx = ctx || ctxCompat || this;
var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);
var list = cloneListForMapAndSample(this);
list._store = this._store.map(dimIndices, fCtx ? bind$1(cb, fCtx) : cb);
return list;
};
SeriesData2.prototype.modify = function(dims, cb, ctx, ctxCompat) {
var fCtx = ctx || ctxCompat || this;
var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);
this._store.modify(dimIndices, fCtx ? bind$1(cb, fCtx) : cb);
};
SeriesData2.prototype.downSample = function(dimension, rate, sampleValue, sampleIndex) {
var list = cloneListForMapAndSample(this);
list._store = this._store.downSample(this._getStoreDimIndex(dimension), rate, sampleValue, sampleIndex);
return list;
};
SeriesData2.prototype.minmaxDownSample = function(valueDimension, rate) {
var list = cloneListForMapAndSample(this);
list._store = this._store.minmaxDownSample(this._getStoreDimIndex(valueDimension), rate);
return list;
};
SeriesData2.prototype.lttbDownSample = function(valueDimension, rate) {
var list = cloneListForMapAndSample(this);
list._store = this._store.lttbDownSample(this._getStoreDimIndex(valueDimension), rate);
return list;
};
SeriesData2.prototype.getRawDataItem = function(idx) {
return this._store.getRawDataItem(idx);
};
SeriesData2.prototype.getItemModel = function(idx) {
var hostModel = this.hostModel;
var dataItem = this.getRawDataItem(idx);
return new Model(dataItem, hostModel, hostModel && hostModel.ecModel);
};
SeriesData2.prototype.diff = function(otherList) {
var thisList = this;
return new DataDiffer(otherList ? otherList.getStore().getIndices() : [], this.getStore().getIndices(), function(idx) {
return getId(otherList, idx);
}, function(idx) {
return getId(thisList, idx);
});
};
SeriesData2.prototype.getVisual = function(key) {
var visual = this._visual;
return visual && visual[key];
};
SeriesData2.prototype.setVisual = function(kvObj, val) {
this._visual = this._visual || {};
if (isObject$1(kvObj)) {
extend(this._visual, kvObj);
} else {
this._visual[kvObj] = val;
}
};
SeriesData2.prototype.getItemVisual = function(idx, key) {
var itemVisual = this._itemVisuals[idx];
var val = itemVisual && itemVisual[key];
if (val == null) {
return this.getVisual(key);
}
return val;
};
SeriesData2.prototype.hasItemVisual = function() {
return this._itemVisuals.length > 0;
};
SeriesData2.prototype.ensureUniqueItemVisual = function(idx, key) {
var itemVisuals = this._itemVisuals;
var itemVisual = itemVisuals[idx];
if (!itemVisual) {
itemVisual = itemVisuals[idx] = {};
}
var val = itemVisual[key];
if (val == null) {
val = this.getVisual(key);
if (isArray$1(val)) {
val = val.slice();
} else if (isObject$1(val)) {
val = extend({}, val);
}
itemVisual[key] = val;
}
return val;
};
SeriesData2.prototype.setItemVisual = function(idx, key, value) {
var itemVisual = this._itemVisuals[idx] || {};
this._itemVisuals[idx] = itemVisual;
if (isObject$1(key)) {
extend(itemVisual, key);
} else {
itemVisual[key] = value;
}
};
SeriesData2.prototype.clearAllVisual = function() {
this._visual = {};
this._itemVisuals = [];
};
SeriesData2.prototype.setLayout = function(key, val) {
isObject$1(key) ? extend(this._layout, key) : this._layout[key] = val;
};
SeriesData2.prototype.getLayout = function(key) {
return this._layout[key];
};
SeriesData2.prototype.getItemLayout = function(idx) {
return this._itemLayouts[idx];
};
SeriesData2.prototype.setItemLayout = function(idx, layout2, merge2) {
this._itemLayouts[idx] = merge2 ? extend(this._itemLayouts[idx] || {}, layout2) : layout2;
};
SeriesData2.prototype.clearItemLayouts = function() {
this._itemLayouts.length = 0;
};
SeriesData2.prototype.setItemGraphicEl = function(idx, el) {
var seriesIndex = this.hostModel && this.hostModel.seriesIndex;
setCommonECData(seriesIndex, this.dataType, idx, el);
this._graphicEls[idx] = el;
};
SeriesData2.prototype.getItemGraphicEl = function(idx) {
return this._graphicEls[idx];
};
SeriesData2.prototype.eachItemGraphicEl = function(cb, context) {
each$f(this._graphicEls, function(el, idx) {
if (el) {
cb && cb.call(context, el, idx);
}
});
};
SeriesData2.prototype.cloneShallow = function(list) {
if (!list) {
list = new SeriesData2(this._schema ? this._schema : map(this.dimensions, this._getDimInfo, this), this.hostModel);
}
transferProperties(list, this);
list._store = this._store;
return list;
};
SeriesData2.prototype.wrapMethod = function(methodName, injectFunction) {
var originalMethod = this[methodName];
if (!isFunction(originalMethod)) {
return;
}
this.__wrappedMethods = this.__wrappedMethods || [];
this.__wrappedMethods.push(methodName);
this[methodName] = function() {
var res = originalMethod.apply(this, arguments);
return injectFunction.apply(this, [res].concat(slice(arguments)));
};
};
SeriesData2.internalField = (function() {
prepareInvertedIndex = function(data) {
var invertedIndicesMap = data._invertedIndicesMap;
each$f(invertedIndicesMap, function(invertedIndices, dim) {
var dimInfo = data._dimInfos[dim];
var ordinalMeta = dimInfo.ordinalMeta;
var store = data._store;
if (ordinalMeta) {
invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(ordinalMeta.categories.length);
for (var i = 0; i < invertedIndices.length; i++) {
invertedIndices[i] = INDEX_NOT_FOUND;
}
for (var i = 0; i < store.count(); i++) {
invertedIndices[store.get(dimInfo.storeDimIndex, i)] = i;
}
}
});
};
getIdNameFromStore = function(data, dimIdx, idx) {
return convertOptionIdName(data._getCategory(dimIdx, idx), null);
};
getId = function(data, rawIndex) {
var id = data._idList[rawIndex];
if (id == null && data._idDimIdx != null) {
id = getIdNameFromStore(data, data._idDimIdx, rawIndex);
}
if (id == null) {
id = ID_PREFIX + rawIndex;
}
return id;
};
normalizeDimensions = function(dimensions) {
if (!isArray$1(dimensions)) {
dimensions = dimensions != null ? [dimensions] : [];
}
return dimensions;
};
cloneListForMapAndSample = function(original) {
var list = new SeriesData2(original._schema ? original._schema : map(original.dimensions, original._getDimInfo, original), original.hostModel);
transferProperties(list, original);
return list;
};
transferProperties = function(target, source) {
each$f(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function(propName) {
if (source.hasOwnProperty(propName)) {
target[propName] = source[propName];
}
});
target.__wrappedMethods = source.__wrappedMethods;
each$f(CLONE_PROPERTIES, function(propName) {
target[propName] = clone$1(source[propName]);
});
target._calculationInfo = extend({}, source._calculationInfo);
};
makeIdFromName = function(data, idx) {
var nameList = data._nameList;
var idList = data._idList;
var nameDimIdx = data._nameDimIdx;
var idDimIdx = data._idDimIdx;
var name = nameList[idx];
var id = idList[idx];
if (name == null && nameDimIdx != null) {
nameList[idx] = name = getIdNameFromStore(data, nameDimIdx, idx);
}
if (id == null && idDimIdx != null) {
idList[idx] = id = getIdNameFromStore(data, idDimIdx, idx);
}
if (id == null && name != null) {
var nameRepeatCount = data._nameRepeatCount;
var nmCnt = nameRepeatCount[name] = (nameRepeatCount[name] || 0) + 1;
id = name;
if (nmCnt > 1) {
id += "__ec__" + nmCnt;
}
idList[idx] = id;
}
};
})();
return SeriesData2;
})()
);
function prepareSeriesDataSchema(source, opt) {
if (!isSourceInstance(source)) {
source = createSourceFromSeriesDataOption(source);
}
opt = opt || {};
var sysDims = opt.coordDimensions || [];
var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || [];
var coordDimNameMap = createHashMap();
var resultList = [];
var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount);
var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount);
var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine;
var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef);
var encodeDef = opt.encodeDefine;
if (!encodeDef && opt.encodeDefaulter) {
encodeDef = opt.encodeDefaulter(source, dimCount);
}
var encodeDefMap = createHashMap(encodeDef);
var indicesMap = new CtorInt32Array$1(dimCount);
for (var i = 0; i < indicesMap.length; i++) {
indicesMap[i] = -1;
}
function getResultItem(dimIdx) {
var idx = indicesMap[dimIdx];
if (idx < 0) {
var dimDefItemRaw = dimsDef[dimIdx];
var dimDefItem = isObject$3(dimDefItemRaw) ? dimDefItemRaw : {
name: dimDefItemRaw
};
var resultItem2 = new SeriesDimensionDefine();
var userDimName = dimDefItem.name;
if (userDimName != null && dataDimNameMap.get(userDimName) != null) {
resultItem2.name = resultItem2.displayName = userDimName;
}
dimDefItem.type != null && (resultItem2.type = dimDefItem.type);
dimDefItem.displayName != null && (resultItem2.displayName = dimDefItem.displayName);
var newIdx = resultList.length;
indicesMap[dimIdx] = newIdx;
resultItem2.storeDimIndex = dimIdx;
resultList.push(resultItem2);
return resultItem2;
}
return resultList[idx];
}
if (!omitUnusedDimensions) {
for (var i = 0; i < dimCount; i++) {
getResultItem(i);
}
}
encodeDefMap.each(function(dataDimsRaw, coordDim2) {
var dataDims = normalizeToArray(dataDimsRaw).slice();
if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {
encodeDefMap.set(coordDim2, false);
return;
}
var validDataDims = encodeDefMap.set(coordDim2, []);
each$f(dataDims, function(resultDimIdxOrName, idx) {
var resultDimIdx2 = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName;
if (resultDimIdx2 != null && resultDimIdx2 < dimCount) {
validDataDims[idx] = resultDimIdx2;
applyDim(getResultItem(resultDimIdx2), coordDim2, idx);
}
});
});
var availDimIdx = 0;
each$f(sysDims, function(sysDimItemRaw) {
var coordDim2;
var sysDimItemDimsDef;
var sysDimItemOtherDims;
var sysDimItem;
if (isString(sysDimItemRaw)) {
coordDim2 = sysDimItemRaw;
sysDimItem = {};
} else {
sysDimItem = sysDimItemRaw;
coordDim2 = sysDimItem.name;
var ordinalMeta = sysDimItem.ordinalMeta;
sysDimItem.ordinalMeta = null;
sysDimItem = extend({}, sysDimItem);
sysDimItem.ordinalMeta = ordinalMeta;
sysDimItemDimsDef = sysDimItem.dimsDef;
sysDimItemOtherDims = sysDimItem.otherDims;
sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null;
}
var dataDims = encodeDefMap.get(coordDim2);
if (dataDims === false) {
return;
}
dataDims = normalizeToArray(dataDims);
if (!dataDims.length) {
for (var i2 = 0; i2 < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i2++) {
while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) {
availDimIdx++;
}
availDimIdx < dimCount && dataDims.push(availDimIdx++);
}
}
each$f(dataDims, function(resultDimIdx2, coordDimIndex) {
var resultItem2 = getResultItem(resultDimIdx2);
if (isUsingSourceDimensionsDef && sysDimItem.type != null) {
resultItem2.type = sysDimItem.type;
}
applyDim(defaults(resultItem2, sysDimItem), coordDim2, coordDimIndex);
if (resultItem2.name == null && sysDimItemDimsDef) {
var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];
!isObject$3(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {
name: sysDimItemDimsDefItem
});
resultItem2.name = resultItem2.displayName = sysDimItemDimsDefItem.name;
resultItem2.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;
}
sysDimItemOtherDims && defaults(resultItem2.otherDims, sysDimItemOtherDims);
});
});
function applyDim(resultItem2, coordDim2, coordDimIndex) {
if (VISUAL_DIMENSIONS.get(coordDim2) != null) {
resultItem2.otherDims[coordDim2] = coordDimIndex;
} else {
resultItem2.coordDim = coordDim2;
resultItem2.coordDimIndex = coordDimIndex;
coordDimNameMap.set(coordDim2, true);
}
}
var generateCoord = opt.generateCoord;
var generateCoordCount = opt.generateCoordCount;
var fromZero = generateCoordCount != null;
generateCoordCount = generateCoord ? generateCoordCount || 1 : 0;
var extra = generateCoord || "value";
function ifNoNameFillWithCoordName(resultItem2) {
if (resultItem2.name == null) {
resultItem2.name = resultItem2.coordDim;
}
}
if (!omitUnusedDimensions) {
for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {
var resultItem = getResultItem(resultDimIdx);
var coordDim = resultItem.coordDim;
if (coordDim == null) {
resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero);
resultItem.coordDimIndex = 0;
if (!generateCoord || generateCoordCount <= 0) {
resultItem.isExtraCoord = true;
}
generateCoordCount--;
}
ifNoNameFillWithCoordName(resultItem);
if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) {
resultItem.type = "ordinal";
}
}
} else {
each$f(resultList, function(resultItem2) {
ifNoNameFillWithCoordName(resultItem2);
});
resultList.sort(function(item0, item1) {
return item0.storeDimIndex - item1.storeDimIndex;
});
}
removeDuplication(resultList);
return new SeriesDataSchema({
source,
dimensions: resultList,
fullDimensionCount: dimCount,
dimensionOmitted: omitUnusedDimensions
});
}
function removeDuplication(result) {
var duplicationMap = createHashMap();
for (var i = 0; i < result.length; i++) {
var dim = result[i];
var dimOriginalName = dim.name;
var count2 = duplicationMap.get(dimOriginalName) || 0;
if (count2 > 0) {
dim.name = dimOriginalName + (count2 - 1);
}
count2++;
duplicationMap.set(dimOriginalName, count2);
}
}
function getDimCount(source, sysDims, dimsDef, optDimCount) {
var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0);
each$f(sysDims, function(sysDimItem) {
var sysDimItemDimsDef;
if (isObject$3(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) {
dimCount = Math.max(dimCount, sysDimItemDimsDef.length);
}
});
return dimCount;
}
function genCoordDimName(name, map2, fromZero) {
if (fromZero || map2.hasKey(name)) {
var i = 0;
while (map2.hasKey(name + i)) {
i++;
}
name += i;
}
map2.set(name, true);
return name;
}
var CoordSysInfo = (
/** @class */
/* @__PURE__ */ (function() {
function CoordSysInfo2(coordSysName) {
this.coordSysDims = [];
this.axisMap = createHashMap();
this.categoryAxisMap = createHashMap();
this.coordSysName = coordSysName;
}
return CoordSysInfo2;
})()
);
function getCoordSysInfoBySeries(seriesModel) {
var coordSysName = seriesModel.get("coordinateSystem");
var result = new CoordSysInfo(coordSysName);
var fetch = fetchers[coordSysName];
if (fetch) {
fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);
return result;
}
}
var fetchers = {
cartesian2d: function(seriesModel, result, axisMap, categoryAxisMap) {
var xAxisModel = seriesModel.getReferringComponents("xAxis", SINGLE_REFERRING).models[0];
var yAxisModel = seriesModel.getReferringComponents("yAxis", SINGLE_REFERRING).models[0];
result.coordSysDims = ["x", "y"];
axisMap.set("x", xAxisModel);
axisMap.set("y", yAxisModel);
if (isCategory(xAxisModel)) {
categoryAxisMap.set("x", xAxisModel);
result.firstCategoryDimIndex = 0;
}
if (isCategory(yAxisModel)) {
categoryAxisMap.set("y", yAxisModel);
result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
}
},
singleAxis: function(seriesModel, result, axisMap, categoryAxisMap) {
var singleAxisModel = seriesModel.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0];
result.coordSysDims = ["single"];
axisMap.set("single", singleAxisModel);
if (isCategory(singleAxisModel)) {
categoryAxisMap.set("single", singleAxisModel);
result.firstCategoryDimIndex = 0;
}
},
polar: function(seriesModel, result, axisMap, categoryAxisMap) {
var polarModel = seriesModel.getReferringComponents("polar", SINGLE_REFERRING).models[0];
var radiusAxisModel = polarModel.findAxisModel("radiusAxis");
var angleAxisModel = polarModel.findAxisModel("angleAxis");
result.coordSysDims = ["radius", "angle"];
axisMap.set("radius", radiusAxisModel);
axisMap.set("angle", angleAxisModel);
if (isCategory(radiusAxisModel)) {
categoryAxisMap.set("radius", radiusAxisModel);
result.firstCategoryDimIndex = 0;
}
if (isCategory(angleAxisModel)) {
categoryAxisMap.set("angle", angleAxisModel);
result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
}
},
geo: function(seriesModel, result, axisMap, categoryAxisMap) {
result.coordSysDims = ["lng", "lat"];
},
parallel: function(seriesModel, result, axisMap, categoryAxisMap) {
var ecModel = seriesModel.ecModel;
var parallelModel = ecModel.getComponent("parallel", seriesModel.get("parallelIndex"));
var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();
each$f(parallelModel.parallelAxisIndex, function(axisIndex, index) {
var axisModel = ecModel.getComponent("parallelAxis", axisIndex);
var axisDim = coordSysDims[index];
axisMap.set(axisDim, axisModel);
if (isCategory(axisModel)) {
categoryAxisMap.set(axisDim, axisModel);
if (result.firstCategoryDimIndex == null) {
result.firstCategoryDimIndex = index;
}
}
});
}
};
function isCategory(axisModel) {
return axisModel.get("type") === "category";
}
function enableDataStack(seriesModel, dimensionsInput, opt) {
opt = opt || {};
var byIndex = opt.byIndex;
var stackedCoordDimension = opt.stackedCoordDimension;
var dimensionDefineList;
var schema;
var store;
if (isLegacyDimensionsInput(dimensionsInput)) {
dimensionDefineList = dimensionsInput;
} else {
schema = dimensionsInput.schema;
dimensionDefineList = schema.dimensions;
store = dimensionsInput.store;
}
var mayStack = !!(seriesModel && seriesModel.get("stack"));
var stackedByDimInfo;
var stackedDimInfo;
var stackResultDimension;
var stackedOverDimension;
each$f(dimensionDefineList, function(dimensionInfo, index) {
if (isString(dimensionInfo)) {
dimensionDefineList[index] = dimensionInfo = {
name: dimensionInfo
};
}
if (mayStack && !dimensionInfo.isExtraCoord) {
if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {
stackedByDimInfo = dimensionInfo;
}
if (!stackedDimInfo && dimensionInfo.type !== "ordinal" && dimensionInfo.type !== "time" && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) {
stackedDimInfo = dimensionInfo;
}
}
});
if (stackedDimInfo && !byIndex && !stackedByDimInfo) {
byIndex = true;
}
if (stackedDimInfo) {
stackResultDimension = "__\0ecstackresult_" + seriesModel.id;
stackedOverDimension = "__\0ecstackedover_" + seriesModel.id;
if (stackedByDimInfo) {
stackedByDimInfo.createInvertedIndices = true;
}
var stackedDimCoordDim_1 = stackedDimInfo.coordDim;
var stackedDimType = stackedDimInfo.type;
var stackedDimCoordIndex_1 = 0;
each$f(dimensionDefineList, function(dimensionInfo) {
if (dimensionInfo.coordDim === stackedDimCoordDim_1) {
stackedDimCoordIndex_1++;
}
});
var stackedOverDimensionDefine = {
name: stackResultDimension,
coordDim: stackedDimCoordDim_1,
coordDimIndex: stackedDimCoordIndex_1,
type: stackedDimType,
isExtraCoord: true,
isCalculationCoord: true,
storeDimIndex: dimensionDefineList.length
};
var stackResultDimensionDefine = {
name: stackedOverDimension,
// This dimension contains stack base (generally, 0), so do not set it as
// `stackedDimCoordDim` to avoid extent calculation, consider log scale.
coordDim: stackedOverDimension,
coordDimIndex: stackedDimCoordIndex_1 + 1,
type: stackedDimType,
isExtraCoord: true,
isCalculationCoord: true,
storeDimIndex: dimensionDefineList.length + 1
};
if (schema) {
if (store) {
stackedOverDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackedOverDimension, stackedDimType);
stackResultDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackResultDimension, stackedDimType);
}
schema.appendCalculationDimension(stackedOverDimensionDefine);
schema.appendCalculationDimension(stackResultDimensionDefine);
} else {
dimensionDefineList.push(stackedOverDimensionDefine);
dimensionDefineList.push(stackResultDimensionDefine);
}
}
return {
stackedDimension: stackedDimInfo && stackedDimInfo.name,
stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,
isStackedByIndex: byIndex,
stackedOverDimension,
stackResultDimension
};
}
function isLegacyDimensionsInput(dimensionsInput) {
return !isSeriesDataSchema(dimensionsInput.schema);
}
function isDimensionStacked(data, stackedDim) {
return !!stackedDim && stackedDim === data.getCalculationInfo("stackedDimension");
}
function getStackedDimension(data, targetDim) {
return isDimensionStacked(data, targetDim) ? data.getCalculationInfo("stackResultDimension") : targetDim;
}
function getCoordSysDimDefs(seriesModel, coordSysInfo) {
var coordSysName = seriesModel.get("coordinateSystem");
var registeredCoordSys = CoordinateSystemManager.get(coordSysName);
var coordSysDimDefs;
if (coordSysInfo && coordSysInfo.coordSysDims) {
coordSysDimDefs = map$1(coordSysInfo.coordSysDims, function(dim) {
var dimInfo = {
name: dim
};
var axisModel = coordSysInfo.axisMap.get(dim);
if (axisModel) {
var axisType = axisModel.get("type");
dimInfo.type = getDimensionTypeByAxis(axisType);
}
return dimInfo;
});
}
if (!coordSysDimDefs) {
coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ["x", "y"];
}
return coordSysDimDefs;
}
function injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) {
var firstCategoryDimIndex;
var hasNameEncode;
coordSysInfo && each$f(dimInfoList, function(dimInfo, dimIndex) {
var coordDim = dimInfo.coordDim;
var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);
if (categoryAxisModel) {
if (firstCategoryDimIndex == null) {
firstCategoryDimIndex = dimIndex;
}
dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();
if (createInvertedIndices) {
dimInfo.createInvertedIndices = true;
}
}
if (dimInfo.otherDims.itemName != null) {
hasNameEncode = true;
}
});
if (!hasNameEncode && firstCategoryDimIndex != null) {
dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;
}
return firstCategoryDimIndex;
}
function createSeriesData(sourceRaw, seriesModel, opt) {
opt = opt || {};
var sourceManager = seriesModel.getSourceManager();
var source;
var isOriginalSource = false;
if (sourceRaw) {
isOriginalSource = true;
source = createSourceFromSeriesDataOption(sourceRaw);
} else {
source = sourceManager.getSource();
isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL;
}
var coordSysInfo = getCoordSysInfoBySeries(seriesModel);
var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo);
var useEncodeDefaulter = opt.useEncodeDefaulter;
var encodeDefaulter = isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? curry$1(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null;
var createDimensionOptions = {
coordDimensions: coordSysDimDefs,
generateCoord: opt.generateCoord,
encodeDefine: seriesModel.getEncode(),
encodeDefaulter,
canOmitUnusedDimensions: !isOriginalSource
};
var schema = prepareSeriesDataSchema(source, createDimensionOptions);
var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo);
var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null;
var stackCalculationInfo = enableDataStack(seriesModel, {
schema,
store
});
var data = new SeriesData(schema, seriesModel);
data.setCalculationInfo(stackCalculationInfo);
var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function(itemOpt, dimName, dataIndex, dimIndex) {
return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);
} : null;
data.hasItemOption = false;
data.initData(
// Try to reuse the data store in sourceManager if using dataset.
isOriginalSource ? source : store,
null,
dimValueGetter
);
return data;
}
function isNeedCompleteOrdinalData(source) {
if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {
var sampleItem = firstDataNotNull(source.data || []);
return !isArray$1(getDataItemValue(sampleItem));
}
}
function firstDataNotNull(arr) {
var i = 0;
while (i < arr.length && arr[i] == null) {
i++;
}
return arr[i];
}
var Scale = (
/** @class */
(function() {
function Scale2(setting) {
this._setting = setting || {};
this._extent = [Infinity, -Infinity];
}
Scale2.prototype.getSetting = function(name) {
return this._setting[name];
};
Scale2.prototype.unionExtent = function(other) {
var extent = this._extent;
other[0] < extent[0] && (extent[0] = other[0]);
other[1] > extent[1] && (extent[1] = other[1]);
};
Scale2.prototype.unionExtentFromData = function(data, dim) {
this.unionExtent(data.getApproximateExtent(dim));
};
Scale2.prototype.getExtent = function() {
return this._extent.slice();
};
Scale2.prototype.setExtent = function(start, end) {
var thisExtent = this._extent;
if (!isNaN(start)) {
thisExtent[0] = start;
}
if (!isNaN(end)) {
thisExtent[1] = end;
}
};
Scale2.prototype.isInExtentRange = function(value) {
return this._extent[0] <= value && this._extent[1] >= value;
};
Scale2.prototype.isBlank = function() {
return this._isBlank;
};
Scale2.prototype.setBlank = function(isBlank) {
this._isBlank = isBlank;
};
return Scale2;
})()
);
enableClassManagement(Scale);
var uidBase = 0;
var OrdinalMeta = (
/** @class */
(function() {
function OrdinalMeta2(opt) {
this.categories = opt.categories || [];
this._needCollect = opt.needCollect;
this._deduplication = opt.deduplication;
this.uid = ++uidBase;
}
OrdinalMeta2.createByAxisModel = function(axisModel) {
var option = axisModel.option;
var data = option.data;
var categories = data && map$1(data, getName);
return new OrdinalMeta2({
categories,
needCollect: !categories,
// deduplication is default in axis.
deduplication: option.dedplication !== false
});
};
OrdinalMeta2.prototype.getOrdinal = function(category) {
return this._getOrCreateMap().get(category);
};
OrdinalMeta2.prototype.parseAndCollect = function(category) {
var index;
var needCollect = this._needCollect;
if (!isString(category) && !needCollect) {
return category;
}
if (needCollect && !this._deduplication) {
index = this.categories.length;
this.categories[index] = category;
return index;
}
var map2 = this._getOrCreateMap();
index = map2.get(category);
if (index == null) {
if (needCollect) {
index = this.categories.length;
this.categories[index] = category;
map2.set(category, index);
} else {
index = NaN;
}
}
return index;
};
OrdinalMeta2.prototype._getOrCreateMap = function() {
return this._map || (this._map = createHashMap(this.categories));
};
return OrdinalMeta2;
})()
);
function getName(obj) {
if (isObject$3(obj) && obj.value != null) {
return obj.value;
} else {
return obj + "";
}
}
function isIntervalOrLogScale(scale2) {
return scale2.type === "interval" || scale2.type === "log";
}
function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {
var result = {};
var span = extent[1] - extent[0];
var interval = result.interval = nice(span / splitNumber);
if (minInterval != null && interval < minInterval) {
interval = result.interval = minInterval;
}
if (maxInterval != null && interval > maxInterval) {
interval = result.interval = maxInterval;
}
var precision = result.intervalPrecision = getIntervalPrecision(interval);
var niceTickExtent = result.niceTickExtent = [round$1(Math.ceil(extent[0] / interval) * interval, precision), round$1(Math.floor(extent[1] / interval) * interval, precision)];
fixExtent(niceTickExtent, extent);
return result;
}
function increaseInterval(interval) {
var exp10 = Math.pow(10, quantityExponent(interval));
var f = interval / exp10;
if (!f) {
f = 1;
} else if (f === 2) {
f = 3;
} else if (f === 3) {
f = 5;
} else {
f *= 2;
}
return round$1(f * exp10);
}
function getIntervalPrecision(interval) {
return getPrecision(interval) + 2;
}
function clamp(niceTickExtent, idx, extent) {
niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);
}
function fixExtent(niceTickExtent, extent) {
!isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);
!isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);
clamp(niceTickExtent, 0, extent);
clamp(niceTickExtent, 1, extent);
if (niceTickExtent[0] > niceTickExtent[1]) {
niceTickExtent[0] = niceTickExtent[1];
}
}
function contain(val, extent) {
return val >= extent[0] && val <= extent[1];
}
function normalize$2(val, extent) {
if (extent[1] === extent[0]) {
return 0.5;
}
return (val - extent[0]) / (extent[1] - extent[0]);
}
function scale(val, extent) {
return val * (extent[1] - extent[0]) + extent[0];
}
var OrdinalScale = (
/** @class */
(function(_super) {
__extends(OrdinalScale2, _super);
function OrdinalScale2(setting) {
var _this = _super.call(this, setting) || this;
_this.type = "ordinal";
var ordinalMeta = _this.getSetting("ordinalMeta");
if (!ordinalMeta) {
ordinalMeta = new OrdinalMeta({});
}
if (isArray$1(ordinalMeta)) {
ordinalMeta = new OrdinalMeta({
categories: map$1(ordinalMeta, function(item) {
return isObject$3(item) ? item.value : item;
})
});
}
_this._ordinalMeta = ordinalMeta;
_this._extent = _this.getSetting("extent") || [0, ordinalMeta.categories.length - 1];
return _this;
}
OrdinalScale2.prototype.parse = function(val) {
if (val == null) {
return NaN;
}
return isString(val) ? this._ordinalMeta.getOrdinal(val) : Math.round(val);
};
OrdinalScale2.prototype.contain = function(rank) {
rank = this.parse(rank);
return contain(rank, this._extent) && this._ordinalMeta.categories[rank] != null;
};
OrdinalScale2.prototype.normalize = function(val) {
val = this._getTickNumber(this.parse(val));
return normalize$2(val, this._extent);
};
OrdinalScale2.prototype.scale = function(val) {
val = Math.round(scale(val, this._extent));
return this.getRawOrdinalNumber(val);
};
OrdinalScale2.prototype.getTicks = function() {
var ticks = [];
var extent = this._extent;
var rank = extent[0];
while (rank <= extent[1]) {
ticks.push({
value: rank
});
rank++;
}
return ticks;
};
OrdinalScale2.prototype.getMinorTicks = function(splitNumber) {
return;
};
OrdinalScale2.prototype.setSortInfo = function(info) {
if (info == null) {
this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null;
return;
}
var infoOrdinalNumbers = info.ordinalNumbers;
var ordinalsByTick = this._ordinalNumbersByTick = [];
var ticksByOrdinal = this._ticksByOrdinalNumber = [];
var tickNum = 0;
var allCategoryLen = this._ordinalMeta.categories.length;
for (var len2 = Math.min(allCategoryLen, infoOrdinalNumbers.length); tickNum < len2; ++tickNum) {
var ordinalNumber = infoOrdinalNumbers[tickNum];
ordinalsByTick[tickNum] = ordinalNumber;
ticksByOrdinal[ordinalNumber] = tickNum;
}
var unusedOrdinal = 0;
for (; tickNum < allCategoryLen; ++tickNum) {
while (ticksByOrdinal[unusedOrdinal] != null) {
unusedOrdinal++;
}
ordinalsByTick.push(unusedOrdinal);
ticksByOrdinal[unusedOrdinal] = tickNum;
}
};
OrdinalScale2.prototype._getTickNumber = function(ordinal) {
var ticksByOrdinalNumber = this._ticksByOrdinalNumber;
return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal;
};
OrdinalScale2.prototype.getRawOrdinalNumber = function(tickNumber) {
var ordinalNumbersByTick = this._ordinalNumbersByTick;
return ordinalNumbersByTick && tickNumber >= 0 && tickNumber < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickNumber] : tickNumber;
};
OrdinalScale2.prototype.getLabel = function(tick) {
if (!this.isBlank()) {
var ordinalNumber = this.getRawOrdinalNumber(tick.value);
var cateogry = this._ordinalMeta.categories[ordinalNumber];
return cateogry == null ? "" : cateogry + "";
}
};
OrdinalScale2.prototype.count = function() {
return this._extent[1] - this._extent[0] + 1;
};
OrdinalScale2.prototype.unionExtentFromData = function(data, dim) {
this.unionExtent(data.getApproximateExtent(dim));
};
OrdinalScale2.prototype.isInExtentRange = function(value) {
value = this._getTickNumber(value);
return this._extent[0] <= value && this._extent[1] >= value;
};
OrdinalScale2.prototype.getOrdinalMeta = function() {
return this._ordinalMeta;
};
OrdinalScale2.prototype.calcNiceTicks = function() {
};
OrdinalScale2.prototype.calcNiceExtent = function() {
};
OrdinalScale2.type = "ordinal";
return OrdinalScale2;
})(Scale)
);
Scale.registerClass(OrdinalScale);
var roundNumber = round$1;
var IntervalScale = (
/** @class */
(function(_super) {
__extends(IntervalScale2, _super);
function IntervalScale2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "interval";
_this._interval = 0;
_this._intervalPrecision = 2;
return _this;
}
IntervalScale2.prototype.parse = function(val) {
return val;
};
IntervalScale2.prototype.contain = function(val) {
return contain(val, this._extent);
};
IntervalScale2.prototype.normalize = function(val) {
return normalize$2(val, this._extent);
};
IntervalScale2.prototype.scale = function(val) {
return scale(val, this._extent);
};
IntervalScale2.prototype.setExtent = function(start, end) {
var thisExtent = this._extent;
if (!isNaN(start)) {
thisExtent[0] = parseFloat(start);
}
if (!isNaN(end)) {
thisExtent[1] = parseFloat(end);
}
};
IntervalScale2.prototype.unionExtent = function(other) {
var extent = this._extent;
other[0] < extent[0] && (extent[0] = other[0]);
other[1] > extent[1] && (extent[1] = other[1]);
this.setExtent(extent[0], extent[1]);
};
IntervalScale2.prototype.getInterval = function() {
return this._interval;
};
IntervalScale2.prototype.setInterval = function(interval) {
this._interval = interval;
this._niceExtent = this._extent.slice();
this._intervalPrecision = getIntervalPrecision(interval);
};
IntervalScale2.prototype.getTicks = function(expandToNicedExtent) {
var interval = this._interval;
var extent = this._extent;
var niceTickExtent = this._niceExtent;
var intervalPrecision = this._intervalPrecision;
var ticks = [];
if (!interval) {
return ticks;
}
var safeLimit = 1e4;
if (extent[0] < niceTickExtent[0]) {
if (expandToNicedExtent) {
ticks.push({
value: roundNumber(niceTickExtent[0] - interval, intervalPrecision)
});
} else {
ticks.push({
value: extent[0]
});
}
}
var tick = niceTickExtent[0];
while (tick <= niceTickExtent[1]) {
ticks.push({
value: tick
});
tick = roundNumber(tick + interval, intervalPrecision);
if (tick === ticks[ticks.length - 1].value) {
break;
}
if (ticks.length > safeLimit) {
return [];
}
}
var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceTickExtent[1];
if (extent[1] > lastNiceTick) {
if (expandToNicedExtent) {
ticks.push({
value: roundNumber(lastNiceTick + interval, intervalPrecision)
});
} else {
ticks.push({
value: extent[1]
});
}
}
return ticks;
};
IntervalScale2.prototype.getMinorTicks = function(splitNumber) {
var ticks = this.getTicks(true);
var minorTicks = [];
var extent = this.getExtent();
for (var i = 1; i < ticks.length; i++) {
var nextTick = ticks[i];
var prevTick = ticks[i - 1];
var count2 = 0;
var minorTicksGroup = [];
var interval = nextTick.value - prevTick.value;
var minorInterval = interval / splitNumber;
while (count2 < splitNumber - 1) {
var minorTick = roundNumber(prevTick.value + (count2 + 1) * minorInterval);
if (minorTick > extent[0] && minorTick < extent[1]) {
minorTicksGroup.push(minorTick);
}
count2++;
}
minorTicks.push(minorTicksGroup);
}
return minorTicks;
};
IntervalScale2.prototype.getLabel = function(data, opt) {
if (data == null) {
return "";
}
var precision = opt && opt.precision;
if (precision == null) {
precision = getPrecision(data.value) || 0;
} else if (precision === "auto") {
precision = this._intervalPrecision;
}
var dataNum = roundNumber(data.value, precision, true);
return addCommas(dataNum);
};
IntervalScale2.prototype.calcNiceTicks = function(splitNumber, minInterval, maxInterval) {
splitNumber = splitNumber || 5;
var extent = this._extent;
var span = extent[1] - extent[0];
if (!isFinite(span)) {
return;
}
if (span < 0) {
span = -span;
extent.reverse();
}
var result = intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval);
this._intervalPrecision = result.intervalPrecision;
this._interval = result.interval;
this._niceExtent = result.niceTickExtent;
};
IntervalScale2.prototype.calcNiceExtent = function(opt) {
var extent = this._extent;
if (extent[0] === extent[1]) {
if (extent[0] !== 0) {
var expandSize = Math.abs(extent[0]);
if (!opt.fixMax) {
extent[1] += expandSize / 2;
extent[0] -= expandSize / 2;
} else {
extent[0] -= expandSize / 2;
}
} else {
extent[1] = 1;
}
}
var span = extent[1] - extent[0];
if (!isFinite(span)) {
extent[0] = 0;
extent[1] = 1;
}
this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);
var interval = this._interval;
if (!opt.fixMin) {
extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);
}
if (!opt.fixMax) {
extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);
}
};
IntervalScale2.prototype.setNiceExtent = function(min2, max2) {
this._niceExtent = [min2, max2];
};
IntervalScale2.type = "interval";
return IntervalScale2;
})(Scale)
);
Scale.registerClass(IntervalScale);
var supportFloat32Array = typeof Float32Array !== "undefined";
var Float32ArrayCtor = !supportFloat32Array ? Array : Float32Array;
function createFloat32Array(arg) {
if (isArray$1(arg)) {
return supportFloat32Array ? new Float32Array(arg) : arg;
}
return new Float32ArrayCtor(arg);
}
var STACK_PREFIX = "__ec_stack_";
function getSeriesStackId$1(seriesModel) {
return seriesModel.get("stack") || STACK_PREFIX + seriesModel.seriesIndex;
}
function getAxisKey$1(axis) {
return axis.dim + axis.index;
}
function getLayoutOnAxis(opt) {
var params = [];
var baseAxis = opt.axis;
var axisKey = "axis0";
if (baseAxis.type !== "category") {
return;
}
var bandWidth = baseAxis.getBandWidth();
for (var i = 0; i < opt.count || 0; i++) {
params.push(defaults({
bandWidth,
axisKey,
stackId: STACK_PREFIX + i
}, opt));
}
var widthAndOffsets = doCalBarWidthAndOffset(params);
var result = [];
for (var i = 0; i < opt.count; i++) {
var item = widthAndOffsets[axisKey][STACK_PREFIX + i];
item.offsetCenter = item.offset + item.width / 2;
result.push(item);
}
return result;
}
function prepareLayoutBarSeries(seriesType2, ecModel) {
var seriesModels = [];
ecModel.eachSeriesByType(seriesType2, function(seriesModel) {
if (isOnCartesian(seriesModel)) {
seriesModels.push(seriesModel);
}
});
return seriesModels;
}
function getValueAxesMinGaps(barSeries) {
var axisValues = {};
each$f(barSeries, function(seriesModel) {
var cartesian = seriesModel.coordinateSystem;
var baseAxis = cartesian.getBaseAxis();
if (baseAxis.type !== "time" && baseAxis.type !== "value") {
return;
}
var data = seriesModel.getData();
var key2 = baseAxis.dim + "_" + baseAxis.index;
var dimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim));
var store = data.getStore();
for (var i = 0, cnt = store.count(); i < cnt; ++i) {
var value = store.get(dimIdx, i);
if (!axisValues[key2]) {
axisValues[key2] = [value];
} else {
axisValues[key2].push(value);
}
}
});
var axisMinGaps = {};
for (var key in axisValues) {
if (axisValues.hasOwnProperty(key)) {
var valuesInAxis = axisValues[key];
if (valuesInAxis) {
valuesInAxis.sort(function(a, b) {
return a - b;
});
var min2 = null;
for (var j = 1; j < valuesInAxis.length; ++j) {
var delta = valuesInAxis[j] - valuesInAxis[j - 1];
if (delta > 0) {
min2 = min2 === null ? delta : Math.min(min2, delta);
}
}
axisMinGaps[key] = min2;
}
}
}
return axisMinGaps;
}
function makeColumnLayout(barSeries) {
var axisMinGaps = getValueAxesMinGaps(barSeries);
var seriesInfoList = [];
each$f(barSeries, function(seriesModel) {
var cartesian = seriesModel.coordinateSystem;
var baseAxis = cartesian.getBaseAxis();
var axisExtent = baseAxis.getExtent();
var bandWidth;
if (baseAxis.type === "category") {
bandWidth = baseAxis.getBandWidth();
} else if (baseAxis.type === "value" || baseAxis.type === "time") {
var key = baseAxis.dim + "_" + baseAxis.index;
var minGap = axisMinGaps[key];
var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);
var scale2 = baseAxis.scale.getExtent();
var scaleSpan = Math.abs(scale2[1] - scale2[0]);
bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan;
} else {
var data = seriesModel.getData();
bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();
}
var barWidth = parsePercent(seriesModel.get("barWidth"), bandWidth);
var barMaxWidth = parsePercent(seriesModel.get("barMaxWidth"), bandWidth);
var barMinWidth = parsePercent(
// barMinWidth by default is 0.5 / 1 in cartesian. Because in value axis,
// the auto-calculated bar width might be less than 0.5 / 1.
seriesModel.get("barMinWidth") || (isInLargeMode(seriesModel) ? 0.5 : 1),
bandWidth
);
var barGap = seriesModel.get("barGap");
var barCategoryGap = seriesModel.get("barCategoryGap");
seriesInfoList.push({
bandWidth,
barWidth,
barMaxWidth,
barMinWidth,
barGap,
barCategoryGap,
axisKey: getAxisKey$1(baseAxis),
stackId: getSeriesStackId$1(seriesModel)
});
});
return doCalBarWidthAndOffset(seriesInfoList);
}
function doCalBarWidthAndOffset(seriesInfoList) {
var columnsMap = {};
each$f(seriesInfoList, function(seriesInfo, idx) {
var axisKey = seriesInfo.axisKey;
var bandWidth = seriesInfo.bandWidth;
var columnsOnAxis = columnsMap[axisKey] || {
bandWidth,
remainedWidth: bandWidth,
autoWidthCount: 0,
categoryGap: null,
gap: "20%",
stacks: {}
};
var stacks = columnsOnAxis.stacks;
columnsMap[axisKey] = columnsOnAxis;
var stackId = seriesInfo.stackId;
if (!stacks[stackId]) {
columnsOnAxis.autoWidthCount++;
}
stacks[stackId] = stacks[stackId] || {
width: 0,
maxWidth: 0
};
var barWidth = seriesInfo.barWidth;
if (barWidth && !stacks[stackId].width) {
stacks[stackId].width = barWidth;
barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
columnsOnAxis.remainedWidth -= barWidth;
}
var barMaxWidth = seriesInfo.barMaxWidth;
barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
var barMinWidth = seriesInfo.barMinWidth;
barMinWidth && (stacks[stackId].minWidth = barMinWidth);
var barGap = seriesInfo.barGap;
barGap != null && (columnsOnAxis.gap = barGap);
var barCategoryGap = seriesInfo.barCategoryGap;
barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);
});
var result = {};
each$f(columnsMap, function(columnsOnAxis, coordSysName) {
result[coordSysName] = {};
var stacks = columnsOnAxis.stacks;
var bandWidth = columnsOnAxis.bandWidth;
var categoryGapPercent = columnsOnAxis.categoryGap;
if (categoryGapPercent == null) {
var columnCount = keys(stacks).length;
categoryGapPercent = Math.max(35 - columnCount * 4, 15) + "%";
}
var categoryGap = parsePercent(categoryGapPercent, bandWidth);
var barGapPercent = parsePercent(columnsOnAxis.gap, 1);
var remainedWidth = columnsOnAxis.remainedWidth;
var autoWidthCount = columnsOnAxis.autoWidthCount;
var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
autoWidth = Math.max(autoWidth, 0);
each$f(stacks, function(column) {
var maxWidth = column.maxWidth;
var minWidth = column.minWidth;
if (!column.width) {
var finalWidth = autoWidth;
if (maxWidth && maxWidth < finalWidth) {
finalWidth = Math.min(maxWidth, remainedWidth);
}
if (minWidth && minWidth > finalWidth) {
finalWidth = minWidth;
}
if (finalWidth !== autoWidth) {
column.width = finalWidth;
remainedWidth -= finalWidth + barGapPercent * finalWidth;
autoWidthCount--;
}
} else {
var finalWidth = column.width;
if (maxWidth) {
finalWidth = Math.min(finalWidth, maxWidth);
}
if (minWidth) {
finalWidth = Math.max(finalWidth, minWidth);
}
column.width = finalWidth;
remainedWidth -= finalWidth + barGapPercent * finalWidth;
autoWidthCount--;
}
});
autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
autoWidth = Math.max(autoWidth, 0);
var widthSum = 0;
var lastColumn;
each$f(stacks, function(column, idx) {
if (!column.width) {
column.width = autoWidth;
}
lastColumn = column;
widthSum += column.width * (1 + barGapPercent);
});
if (lastColumn) {
widthSum -= lastColumn.width * barGapPercent;
}
var offset = -widthSum / 2;
each$f(stacks, function(column, stackId) {
result[coordSysName][stackId] = result[coordSysName][stackId] || {
bandWidth,
offset,
width: column.width
};
offset += column.width * (1 + barGapPercent);
});
});
return result;
}
function retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {
if (barWidthAndOffset && axis) {
var result = barWidthAndOffset[getAxisKey$1(axis)];
return result;
}
}
function layout$3(seriesType2, ecModel) {
var seriesModels = prepareLayoutBarSeries(seriesType2, ecModel);
var barWidthAndOffset = makeColumnLayout(seriesModels);
each$f(seriesModels, function(seriesModel) {
var data = seriesModel.getData();
var cartesian = seriesModel.coordinateSystem;
var baseAxis = cartesian.getBaseAxis();
var stackId = getSeriesStackId$1(seriesModel);
var columnLayoutInfo = barWidthAndOffset[getAxisKey$1(baseAxis)][stackId];
var columnOffset = columnLayoutInfo.offset;
var columnWidth = columnLayoutInfo.width;
data.setLayout({
bandWidth: columnLayoutInfo.bandWidth,
offset: columnOffset,
size: columnWidth
});
});
}
function createProgressiveLayout(seriesType2) {
return {
seriesType: seriesType2,
plan: createRenderPlanner(),
reset: function(seriesModel) {
if (!isOnCartesian(seriesModel)) {
return;
}
var data = seriesModel.getData();
var cartesian = seriesModel.coordinateSystem;
var baseAxis = cartesian.getBaseAxis();
var valueAxis2 = cartesian.getOtherAxis(baseAxis);
var valueDimIdx = data.getDimensionIndex(data.mapDimension(valueAxis2.dim));
var baseDimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim));
var drawBackground = seriesModel.get("showBackground", true);
var valueDim = data.mapDimension(valueAxis2.dim);
var stackResultDim = data.getCalculationInfo("stackResultDimension");
var stacked = isDimensionStacked(data, valueDim) && !!data.getCalculationInfo("stackedOnSeries");
var isValueAxisH = valueAxis2.isHorizontal();
var valueAxisStart = getValueAxisStart(baseAxis, valueAxis2);
var isLarge = isInLargeMode(seriesModel);
var barMinHeight = seriesModel.get("barMinHeight") || 0;
var stackedDimIdx = stackResultDim && data.getDimensionIndex(stackResultDim);
var columnWidth = data.getLayout("size");
var columnOffset = data.getLayout("offset");
return {
progress: function(params, data2) {
var count2 = params.count;
var largePoints = isLarge && createFloat32Array(count2 * 3);
var largeBackgroundPoints = isLarge && drawBackground && createFloat32Array(count2 * 3);
var largeDataIndices = isLarge && createFloat32Array(count2);
var coordLayout = cartesian.master.getRect();
var bgSize = isValueAxisH ? coordLayout.width : coordLayout.height;
var dataIndex;
var store = data2.getStore();
var idxOffset = 0;
while ((dataIndex = params.next()) != null) {
var value = store.get(stacked ? stackedDimIdx : valueDimIdx, dataIndex);
var baseValue = store.get(baseDimIdx, dataIndex);
var baseCoord = valueAxisStart;
var stackStartValue = void 0;
if (stacked) {
stackStartValue = +value - store.get(valueDimIdx, dataIndex);
}
var x = void 0;
var y = void 0;
var width = void 0;
var height = void 0;
if (isValueAxisH) {
var coord = cartesian.dataToPoint([value, baseValue]);
if (stacked) {
var startCoord = cartesian.dataToPoint([stackStartValue, baseValue]);
baseCoord = startCoord[0];
}
x = baseCoord;
y = coord[1] + columnOffset;
width = coord[0] - baseCoord;
height = columnWidth;
if (Math.abs(width) < barMinHeight) {
width = (width < 0 ? -1 : 1) * barMinHeight;
}
} else {
var coord = cartesian.dataToPoint([baseValue, value]);
if (stacked) {
var startCoord = cartesian.dataToPoint([baseValue, stackStartValue]);
baseCoord = startCoord[1];
}
x = coord[0] + columnOffset;
y = baseCoord;
width = columnWidth;
height = coord[1] - baseCoord;
if (Math.abs(height) < barMinHeight) {
height = (height <= 0 ? -1 : 1) * barMinHeight;
}
}
if (!isLarge) {
data2.setItemLayout(dataIndex, {
x,
y,
width,
height
});
} else {
largePoints[idxOffset] = x;
largePoints[idxOffset + 1] = y;
largePoints[idxOffset + 2] = isValueAxisH ? width : height;
if (largeBackgroundPoints) {
largeBackgroundPoints[idxOffset] = isValueAxisH ? coordLayout.x : x;
largeBackgroundPoints[idxOffset + 1] = isValueAxisH ? y : coordLayout.y;
largeBackgroundPoints[idxOffset + 2] = bgSize;
}
largeDataIndices[dataIndex] = dataIndex;
}
idxOffset += 3;
}
if (isLarge) {
data2.setLayout({
largePoints,
largeDataIndices,
largeBackgroundPoints,
valueAxisHorizontal: isValueAxisH
});
}
}
};
}
};
}
function isOnCartesian(seriesModel) {
return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === "cartesian2d";
}
function isInLargeMode(seriesModel) {
return seriesModel.pipelineContext && seriesModel.pipelineContext.large;
}
function getValueAxisStart(baseAxis, valueAxis2) {
var startValue = valueAxis2.model.get("startValue");
if (!startValue) {
startValue = 0;
}
return valueAxis2.toGlobalCoord(valueAxis2.dataToCoord(valueAxis2.type === "log" ? startValue > 0 ? startValue : 1 : startValue));
}
var bisect = function(a, x, lo, hi) {
while (lo < hi) {
var mid = lo + hi >>> 1;
if (a[mid][1] < x) {
lo = mid + 1;
} else {
hi = mid;
}
}
return lo;
};
var TimeScale = (
/** @class */
(function(_super) {
__extends(TimeScale2, _super);
function TimeScale2(settings) {
var _this = _super.call(this, settings) || this;
_this.type = "time";
return _this;
}
TimeScale2.prototype.getLabel = function(tick) {
var useUTC = this.getSetting("useUTC");
return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting("locale"));
};
TimeScale2.prototype.getFormattedLabel = function(tick, idx, labelFormatter) {
var isUTC = this.getSetting("useUTC");
var lang = this.getSetting("locale");
return leveledFormat(tick, idx, labelFormatter, lang, isUTC);
};
TimeScale2.prototype.getTicks = function() {
var interval = this._interval;
var extent = this._extent;
var ticks = [];
if (!interval) {
return ticks;
}
ticks.push({
value: extent[0],
level: 0
});
var useUTC = this.getSetting("useUTC");
var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent);
ticks = ticks.concat(innerTicks);
ticks.push({
value: extent[1],
level: 0
});
return ticks;
};
TimeScale2.prototype.calcNiceExtent = function(opt) {
var extent = this._extent;
if (extent[0] === extent[1]) {
extent[0] -= ONE_DAY;
extent[1] += ONE_DAY;
}
if (extent[1] === -Infinity && extent[0] === Infinity) {
var d = /* @__PURE__ */ new Date();
extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());
extent[0] = extent[1] - ONE_DAY;
}
this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);
};
TimeScale2.prototype.calcNiceTicks = function(approxTickNum, minInterval, maxInterval) {
approxTickNum = approxTickNum || 10;
var extent = this._extent;
var span = extent[1] - extent[0];
this._approxInterval = span / approxTickNum;
if (minInterval != null && this._approxInterval < minInterval) {
this._approxInterval = minInterval;
}
if (maxInterval != null && this._approxInterval > maxInterval) {
this._approxInterval = maxInterval;
}
var scaleIntervalsLen = scaleIntervals.length;
var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1);
this._interval = scaleIntervals[idx][1];
this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0];
};
TimeScale2.prototype.parse = function(val) {
return isNumber(val) ? val : +parseDate(val);
};
TimeScale2.prototype.contain = function(val) {
return contain(this.parse(val), this._extent);
};
TimeScale2.prototype.normalize = function(val) {
return normalize$2(this.parse(val), this._extent);
};
TimeScale2.prototype.scale = function(val) {
return scale(val, this._extent);
};
TimeScale2.type = "time";
return TimeScale2;
})(IntervalScale)
);
var scaleIntervals = [
// Format interval
["second", ONE_SECOND],
["minute", ONE_MINUTE],
["hour", ONE_HOUR],
["quarter-day", ONE_HOUR * 6],
["half-day", ONE_HOUR * 12],
["day", ONE_DAY * 1.2],
["half-week", ONE_DAY * 3.5],
["week", ONE_DAY * 7],
["month", ONE_DAY * 31],
["quarter", ONE_DAY * 95],
["half-year", ONE_YEAR / 2],
["year", ONE_YEAR]
// 1Y
];
function isUnitValueSame(unit, valueA, valueB, isUTC) {
var dateA = parseDate(valueA);
var dateB = parseDate(valueB);
var isSame = function(unit2) {
return getUnitValue(dateA, unit2, isUTC) === getUnitValue(dateB, unit2, isUTC);
};
var isSameYear = function() {
return isSame("year");
};
var isSameMonth = function() {
return isSameYear() && isSame("month");
};
var isSameDay = function() {
return isSameMonth() && isSame("day");
};
var isSameHour = function() {
return isSameDay() && isSame("hour");
};
var isSameMinute = function() {
return isSameHour() && isSame("minute");
};
var isSameSecond = function() {
return isSameMinute() && isSame("second");
};
var isSameMilliSecond = function() {
return isSameSecond() && isSame("millisecond");
};
switch (unit) {
case "year":
return isSameYear();
case "month":
return isSameMonth();
case "day":
return isSameDay();
case "hour":
return isSameHour();
case "minute":
return isSameMinute();
case "second":
return isSameSecond();
case "millisecond":
return isSameMilliSecond();
}
}
function getDateInterval(approxInterval, daysInMonth) {
approxInterval /= ONE_DAY;
return approxInterval > 16 ? 16 : approxInterval > 7.5 ? 7 : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1;
}
function getMonthInterval(approxInterval) {
var APPROX_ONE_MONTH = 30 * ONE_DAY;
approxInterval /= APPROX_ONE_MONTH;
return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1;
}
function getHourInterval(approxInterval) {
approxInterval /= ONE_HOUR;
return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1;
}
function getMinutesAndSecondsInterval(approxInterval, isMinutes) {
approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND;
return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1;
}
function getMillisecondsInterval(approxInterval) {
return nice(approxInterval);
}
function getFirstTimestampOfUnit(date, unitName, isUTC) {
var outDate = new Date(date);
switch (getPrimaryTimeUnit(unitName)) {
case "year":
case "month":
outDate[monthSetterName(isUTC)](0);
case "day":
outDate[dateSetterName(isUTC)](1);
case "hour":
outDate[hoursSetterName(isUTC)](0);
case "minute":
outDate[minutesSetterName(isUTC)](0);
case "second":
outDate[secondsSetterName(isUTC)](0);
outDate[millisecondsSetterName(isUTC)](0);
}
return outDate.getTime();
}
function getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) {
var safeLimit = 1e4;
var unitNames = timeUnits;
var iter = 0;
function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) {
var date = new Date(minTimestamp);
var dateTime = minTimestamp;
var d = date[getMethodName]();
while (dateTime < maxTimestamp && dateTime <= extent[1]) {
out.push({
value: dateTime
});
d += interval;
date[setMethodName](d);
dateTime = date.getTime();
}
out.push({
value: dateTime,
notAdd: true
});
}
function addLevelTicks(unitName, lastLevelTicks, levelTicks2) {
var newAddedTicks = [];
var isFirstLevel = !lastLevelTicks.length;
if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) {
return;
}
if (isFirstLevel) {
lastLevelTicks = [{
// TODO Optimize. Not include so may ticks.
value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC)
}, {
value: extent[1]
}];
}
for (var i2 = 0; i2 < lastLevelTicks.length - 1; i2++) {
var startTick = lastLevelTicks[i2].value;
var endTick = lastLevelTicks[i2 + 1].value;
if (startTick === endTick) {
continue;
}
var interval = void 0;
var getterName = void 0;
var setterName = void 0;
var isDate = false;
switch (unitName) {
case "year":
interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365));
getterName = fullYearGetterName(isUTC);
setterName = fullYearSetterName(isUTC);
break;
case "half-year":
case "quarter":
case "month":
interval = getMonthInterval(approxInterval);
getterName = monthGetterName(isUTC);
setterName = monthSetterName(isUTC);
break;
case "week":
// PENDING If week is added. Ignore day.
case "half-week":
case "day":
interval = getDateInterval(approxInterval);
getterName = dateGetterName(isUTC);
setterName = dateSetterName(isUTC);
isDate = true;
break;
case "half-day":
case "quarter-day":
case "hour":
interval = getHourInterval(approxInterval);
getterName = hoursGetterName(isUTC);
setterName = hoursSetterName(isUTC);
break;
case "minute":
interval = getMinutesAndSecondsInterval(approxInterval, true);
getterName = minutesGetterName(isUTC);
setterName = minutesSetterName(isUTC);
break;
case "second":
interval = getMinutesAndSecondsInterval(approxInterval, false);
getterName = secondsGetterName(isUTC);
setterName = secondsSetterName(isUTC);
break;
case "millisecond":
interval = getMillisecondsInterval(approxInterval);
getterName = millisecondsGetterName(isUTC);
setterName = millisecondsSetterName(isUTC);
break;
}
addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks);
if (unitName === "year" && levelTicks2.length > 1 && i2 === 0) {
levelTicks2.unshift({
value: levelTicks2[0].value - interval
});
}
}
for (var i2 = 0; i2 < newAddedTicks.length; i2++) {
levelTicks2.push(newAddedTicks[i2]);
}
return newAddedTicks;
}
var levelsTicks = [];
var currentLevelTicks = [];
var tickCount = 0;
var lastLevelTickCount = 0;
for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) {
var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]);
if (!isPrimaryTimeUnit(unitNames[i])) {
continue;
}
addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks);
var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null;
if (primaryTimeUnit !== nextPrimaryTimeUnit) {
if (currentLevelTicks.length) {
lastLevelTickCount = tickCount;
currentLevelTicks.sort(function(a, b) {
return a.value - b.value;
});
var levelTicksRemoveDuplicated = [];
for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) {
var tickValue = currentLevelTicks[i_1].value;
if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) {
levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]);
if (tickValue >= extent[0] && tickValue <= extent[1]) {
tickCount++;
}
}
}
var targetTickNum = (extent[1] - extent[0]) / approxInterval;
if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) {
break;
}
levelsTicks.push(levelTicksRemoveDuplicated);
if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) {
break;
}
}
currentLevelTicks = [];
}
}
var levelsTicksInExtent = filter(map$1(levelsTicks, function(levelTicks2) {
return filter(levelTicks2, function(tick) {
return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd;
});
}), function(levelTicks2) {
return levelTicks2.length > 0;
});
var ticks = [];
var maxLevel = levelsTicksInExtent.length - 1;
for (var i = 0; i < levelsTicksInExtent.length; ++i) {
var levelTicks = levelsTicksInExtent[i];
for (var k = 0; k < levelTicks.length; ++k) {
ticks.push({
value: levelTicks[k].value,
level: maxLevel - i
});
}
}
ticks.sort(function(a, b) {
return a.value - b.value;
});
var result = [];
for (var i = 0; i < ticks.length; ++i) {
if (i === 0 || ticks[i].value !== ticks[i - 1].value) {
result.push(ticks[i]);
}
}
return result;
}
Scale.registerClass(TimeScale);
var scaleProto = Scale.prototype;
var intervalScaleProto = IntervalScale.prototype;
var roundingErrorFix = round$1;
var mathFloor$1 = Math.floor;
var mathCeil$1 = Math.ceil;
var mathPow$1 = Math.pow;
var mathLog$1 = Math.log;
var LogScale = (
/** @class */
(function(_super) {
__extends(LogScale2, _super);
function LogScale2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "log";
_this.base = 10;
_this._originalScale = new IntervalScale();
_this._interval = 0;
return _this;
}
LogScale2.prototype.getTicks = function(expandToNicedExtent) {
var originalScale = this._originalScale;
var extent = this._extent;
var originalExtent = originalScale.getExtent();
var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent);
return map$1(ticks, function(tick) {
var val = tick.value;
var powVal = round$1(mathPow$1(this.base, val));
powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;
powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;
return {
value: powVal
};
}, this);
};
LogScale2.prototype.setExtent = function(start, end) {
var base2 = mathLog$1(this.base);
start = mathLog$1(Math.max(0, start)) / base2;
end = mathLog$1(Math.max(0, end)) / base2;
intervalScaleProto.setExtent.call(this, start, end);
};
LogScale2.prototype.getExtent = function() {
var base2 = this.base;
var extent = scaleProto.getExtent.call(this);
extent[0] = mathPow$1(base2, extent[0]);
extent[1] = mathPow$1(base2, extent[1]);
var originalScale = this._originalScale;
var originalExtent = originalScale.getExtent();
this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));
this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));
return extent;
};
LogScale2.prototype.unionExtent = function(extent) {
this._originalScale.unionExtent(extent);
var base2 = this.base;
extent[0] = mathLog$1(extent[0]) / mathLog$1(base2);
extent[1] = mathLog$1(extent[1]) / mathLog$1(base2);
scaleProto.unionExtent.call(this, extent);
};
LogScale2.prototype.unionExtentFromData = function(data, dim) {
this.unionExtent(data.getApproximateExtent(dim));
};
LogScale2.prototype.calcNiceTicks = function(approxTickNum) {
approxTickNum = approxTickNum || 10;
var extent = this._extent;
var span = extent[1] - extent[0];
if (span === Infinity || span <= 0) {
return;
}
var interval = quantity(span);
var err = approxTickNum / span * interval;
if (err <= 0.5) {
interval *= 10;
}
while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {
interval *= 10;
}
var niceExtent = [round$1(mathCeil$1(extent[0] / interval) * interval), round$1(mathFloor$1(extent[1] / interval) * interval)];
this._interval = interval;
this._niceExtent = niceExtent;
};
LogScale2.prototype.calcNiceExtent = function(opt) {
intervalScaleProto.calcNiceExtent.call(this, opt);
this._fixMin = opt.fixMin;
this._fixMax = opt.fixMax;
};
LogScale2.prototype.parse = function(val) {
return val;
};
LogScale2.prototype.contain = function(val) {
val = mathLog$1(val) / mathLog$1(this.base);
return contain(val, this._extent);
};
LogScale2.prototype.normalize = function(val) {
val = mathLog$1(val) / mathLog$1(this.base);
return normalize$2(val, this._extent);
};
LogScale2.prototype.scale = function(val) {
val = scale(val, this._extent);
return mathPow$1(this.base, val);
};
LogScale2.type = "log";
return LogScale2;
})(Scale)
);
var proto = LogScale.prototype;
proto.getMinorTicks = intervalScaleProto.getMinorTicks;
proto.getLabel = intervalScaleProto.getLabel;
function fixRoundingError(val, originalVal) {
return roundingErrorFix(val, getPrecision(originalVal));
}
Scale.registerClass(LogScale);
var ScaleRawExtentInfo = (
/** @class */
(function() {
function ScaleRawExtentInfo2(scale2, model, originalExtent) {
this._prepareParams(scale2, model, originalExtent);
}
ScaleRawExtentInfo2.prototype._prepareParams = function(scale2, model, dataExtent) {
if (dataExtent[1] < dataExtent[0]) {
dataExtent = [NaN, NaN];
}
this._dataMin = dataExtent[0];
this._dataMax = dataExtent[1];
var isOrdinal = this._isOrdinal = scale2.type === "ordinal";
this._needCrossZero = scale2.type === "interval" && model.getNeedCrossZero && model.getNeedCrossZero();
var axisMinValue = model.get("min", true);
if (axisMinValue == null) {
axisMinValue = model.get("startValue", true);
}
var modelMinRaw = this._modelMinRaw = axisMinValue;
if (isFunction(modelMinRaw)) {
this._modelMinNum = parseAxisModelMinMax(scale2, modelMinRaw({
min: dataExtent[0],
max: dataExtent[1]
}));
} else if (modelMinRaw !== "dataMin") {
this._modelMinNum = parseAxisModelMinMax(scale2, modelMinRaw);
}
var modelMaxRaw = this._modelMaxRaw = model.get("max", true);
if (isFunction(modelMaxRaw)) {
this._modelMaxNum = parseAxisModelMinMax(scale2, modelMaxRaw({
min: dataExtent[0],
max: dataExtent[1]
}));
} else if (modelMaxRaw !== "dataMax") {
this._modelMaxNum = parseAxisModelMinMax(scale2, modelMaxRaw);
}
if (isOrdinal) {
this._axisDataLen = model.getCategories().length;
} else {
var boundaryGap = model.get("boundaryGap");
var boundaryGapArr = isArray$1(boundaryGap) ? boundaryGap : [boundaryGap || 0, boundaryGap || 0];
if (typeof boundaryGapArr[0] === "boolean" || typeof boundaryGapArr[1] === "boolean") {
this._boundaryGapInner = [0, 0];
} else {
this._boundaryGapInner = [parsePercent$1(boundaryGapArr[0], 1), parsePercent$1(boundaryGapArr[1], 1)];
}
}
};
ScaleRawExtentInfo2.prototype.calculate = function() {
var isOrdinal = this._isOrdinal;
var dataMin = this._dataMin;
var dataMax = this._dataMax;
var axisDataLen = this._axisDataLen;
var boundaryGapInner = this._boundaryGapInner;
var span = !isOrdinal ? dataMax - dataMin || Math.abs(dataMin) : null;
var min2 = this._modelMinRaw === "dataMin" ? dataMin : this._modelMinNum;
var max2 = this._modelMaxRaw === "dataMax" ? dataMax : this._modelMaxNum;
var minFixed = min2 != null;
var maxFixed = max2 != null;
if (min2 == null) {
min2 = isOrdinal ? axisDataLen ? 0 : NaN : dataMin - boundaryGapInner[0] * span;
}
if (max2 == null) {
max2 = isOrdinal ? axisDataLen ? axisDataLen - 1 : NaN : dataMax + boundaryGapInner[1] * span;
}
(min2 == null || !isFinite(min2)) && (min2 = NaN);
(max2 == null || !isFinite(max2)) && (max2 = NaN);
var isBlank = eqNaN(min2) || eqNaN(max2) || isOrdinal && !axisDataLen;
if (this._needCrossZero) {
if (min2 > 0 && max2 > 0 && !minFixed) {
min2 = 0;
}
if (min2 < 0 && max2 < 0 && !maxFixed) {
max2 = 0;
}
}
var determinedMin = this._determinedMin;
var determinedMax = this._determinedMax;
if (determinedMin != null) {
min2 = determinedMin;
minFixed = true;
}
if (determinedMax != null) {
max2 = determinedMax;
maxFixed = true;
}
return {
min: min2,
max: max2,
minFixed,
maxFixed,
isBlank
};
};
ScaleRawExtentInfo2.prototype.modifyDataMinMax = function(minMaxName, val) {
this[DATA_MIN_MAX_ATTR[minMaxName]] = val;
};
ScaleRawExtentInfo2.prototype.setDeterminedMinMax = function(minMaxName, val) {
var attr = DETERMINED_MIN_MAX_ATTR[minMaxName];
this[attr] = val;
};
ScaleRawExtentInfo2.prototype.freeze = function() {
this.frozen = true;
};
return ScaleRawExtentInfo2;
})()
);
var DETERMINED_MIN_MAX_ATTR = {
min: "_determinedMin",
max: "_determinedMax"
};
var DATA_MIN_MAX_ATTR = {
min: "_dataMin",
max: "_dataMax"
};
function ensureScaleRawExtentInfo(scale2, model, originalExtent) {
var rawExtentInfo = scale2.rawExtentInfo;
if (rawExtentInfo) {
return rawExtentInfo;
}
rawExtentInfo = new ScaleRawExtentInfo(scale2, model, originalExtent);
scale2.rawExtentInfo = rawExtentInfo;
return rawExtentInfo;
}
function parseAxisModelMinMax(scale2, minMax) {
return minMax == null ? null : eqNaN(minMax) ? NaN : scale2.parse(minMax);
}
function getScaleExtent(scale2, model) {
var scaleType = scale2.type;
var rawExtentResult = ensureScaleRawExtentInfo(scale2, model, scale2.getExtent()).calculate();
scale2.setBlank(rawExtentResult.isBlank);
var min2 = rawExtentResult.min;
var max2 = rawExtentResult.max;
var ecModel = model.ecModel;
if (ecModel && scaleType === "time") {
var barSeriesModels = prepareLayoutBarSeries("bar", ecModel);
var isBaseAxisAndHasBarSeries_1 = false;
each$f(barSeriesModels, function(seriesModel) {
isBaseAxisAndHasBarSeries_1 = isBaseAxisAndHasBarSeries_1 || seriesModel.getBaseAxis() === model.axis;
});
if (isBaseAxisAndHasBarSeries_1) {
var barWidthAndOffset = makeColumnLayout(barSeriesModels);
var adjustedScale = adjustScaleForOverflow(min2, max2, model, barWidthAndOffset);
min2 = adjustedScale.min;
max2 = adjustedScale.max;
}
}
return {
extent: [min2, max2],
// "fix" means "fixed", the value should not be
// changed in the subsequent steps.
fixMin: rawExtentResult.minFixed,
fixMax: rawExtentResult.maxFixed
};
}
function adjustScaleForOverflow(min2, max2, model, barWidthAndOffset) {
var axisExtent = model.axis.getExtent();
var axisLength = Math.abs(axisExtent[1] - axisExtent[0]);
var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);
if (barsOnCurrentAxis === void 0) {
return {
min: min2,
max: max2
};
}
var minOverflow = Infinity;
each$f(barsOnCurrentAxis, function(item) {
minOverflow = Math.min(item.offset, minOverflow);
});
var maxOverflow = -Infinity;
each$f(barsOnCurrentAxis, function(item) {
maxOverflow = Math.max(item.offset + item.width, maxOverflow);
});
minOverflow = Math.abs(minOverflow);
maxOverflow = Math.abs(maxOverflow);
var totalOverFlow = minOverflow + maxOverflow;
var oldRange = max2 - min2;
var oldRangePercentOfNew = 1 - (minOverflow + maxOverflow) / axisLength;
var overflowBuffer = oldRange / oldRangePercentOfNew - oldRange;
max2 += overflowBuffer * (maxOverflow / totalOverFlow);
min2 -= overflowBuffer * (minOverflow / totalOverFlow);
return {
min: min2,
max: max2
};
}
function niceScaleExtent(scale2, inModel) {
var model = inModel;
var extentInfo = getScaleExtent(scale2, model);
var extent = extentInfo.extent;
var splitNumber = model.get("splitNumber");
if (scale2 instanceof LogScale) {
scale2.base = model.get("logBase");
}
var scaleType = scale2.type;
var interval = model.get("interval");
var isIntervalOrTime = scaleType === "interval" || scaleType === "time";
scale2.setExtent(extent[0], extent[1]);
scale2.calcNiceExtent({
splitNumber,
fixMin: extentInfo.fixMin,
fixMax: extentInfo.fixMax,
minInterval: isIntervalOrTime ? model.get("minInterval") : null,
maxInterval: isIntervalOrTime ? model.get("maxInterval") : null
});
if (interval != null) {
scale2.setInterval && scale2.setInterval(interval);
}
}
function createScaleByModel$1(model, axisType) {
axisType = axisType || model.get("type");
if (axisType) {
switch (axisType) {
// Buildin scale
case "category":
return new OrdinalScale({
ordinalMeta: model.getOrdinalMeta ? model.getOrdinalMeta() : model.getCategories(),
extent: [Infinity, -Infinity]
});
case "time":
return new TimeScale({
locale: model.ecModel.getLocaleModel(),
useUTC: model.ecModel.get("useUTC")
});
default:
return new (Scale.getClass(axisType) || IntervalScale)();
}
}
}
function ifAxisCrossZero(axis) {
var dataExtent = axis.scale.getExtent();
var min2 = dataExtent[0];
var max2 = dataExtent[1];
return !(min2 > 0 && max2 > 0 || min2 < 0 && max2 < 0);
}
function makeLabelFormatter(axis) {
var labelFormatter = axis.getLabelModel().get("formatter");
var categoryTickStart = axis.type === "category" ? axis.scale.getExtent()[0] : null;
if (axis.scale.type === "time") {
return /* @__PURE__ */ (function(tpl) {
return function(tick, idx) {
return axis.scale.getFormattedLabel(tick, idx, tpl);
};
})(labelFormatter);
} else if (isString(labelFormatter)) {
return /* @__PURE__ */ (function(tpl) {
return function(tick) {
var label = axis.scale.getLabel(tick);
var text = tpl.replace("{value}", label != null ? label : "");
return text;
};
})(labelFormatter);
} else if (isFunction(labelFormatter)) {
return /* @__PURE__ */ (function(cb) {
return function(tick, idx) {
if (categoryTickStart != null) {
idx = tick.value - categoryTickStart;
}
return cb(getAxisRawValue(axis, tick), idx, tick.level != null ? {
level: tick.level
} : null);
};
})(labelFormatter);
} else {
return function(tick) {
return axis.scale.getLabel(tick);
};
}
}
function getAxisRawValue(axis, tick) {
return axis.type === "category" ? axis.scale.getLabel(tick) : tick.value;
}
function estimateLabelUnionRect(axis) {
var axisModel = axis.model;
var scale2 = axis.scale;
if (!axisModel.get(["axisLabel", "show"]) || scale2.isBlank()) {
return;
}
var realNumberScaleTicks;
var tickCount;
var categoryScaleExtent = scale2.getExtent();
if (scale2 instanceof OrdinalScale) {
tickCount = scale2.count();
} else {
realNumberScaleTicks = scale2.getTicks();
tickCount = realNumberScaleTicks.length;
}
var axisLabelModel = axis.getLabelModel();
var labelFormatter = makeLabelFormatter(axis);
var rect;
var step = 1;
if (tickCount > 40) {
step = Math.ceil(tickCount / 40);
}
for (var i = 0; i < tickCount; i += step) {
var tick = realNumberScaleTicks ? realNumberScaleTicks[i] : {
value: categoryScaleExtent[0] + i
};
var label = labelFormatter(tick, i);
var unrotatedSingleRect = axisLabelModel.getTextRect(label);
var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get("rotate") || 0);
rect ? rect.union(singleRect) : rect = singleRect;
}
return rect;
}
function rotateTextRect(textRect, rotate2) {
var rotateRadians = rotate2 * Math.PI / 180;
var beforeWidth = textRect.width;
var beforeHeight = textRect.height;
var afterWidth = beforeWidth * Math.abs(Math.cos(rotateRadians)) + Math.abs(beforeHeight * Math.sin(rotateRadians));
var afterHeight = beforeWidth * Math.abs(Math.sin(rotateRadians)) + Math.abs(beforeHeight * Math.cos(rotateRadians));
var rotatedRect = new BoundingRect(textRect.x, textRect.y, afterWidth, afterHeight);
return rotatedRect;
}
function getOptionCategoryInterval(model) {
var interval = model.get("interval");
return interval == null ? "auto" : interval;
}
function shouldShowAllLabels(axis) {
return axis.type === "category" && getOptionCategoryInterval(axis.getLabelModel()) === 0;
}
function getDataDimensionsOnAxis(data, axisDim) {
var dataDimMap = {};
each$f(data.mapDimensionsAll(axisDim), function(dataDim) {
dataDimMap[getStackedDimension(data, dataDim)] = true;
});
return keys(dataDimMap);
}
function unionAxisExtentFromData(dataExtent, data, axisDim) {
if (data) {
each$f(getDataDimensionsOnAxis(data, axisDim), function(dim) {
var seriesExtent = data.getApproximateExtent(dim);
seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);
seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);
});
}
}
var AxisModelCommonMixin = (
/** @class */
(function() {
function AxisModelCommonMixin2() {
}
AxisModelCommonMixin2.prototype.getNeedCrossZero = function() {
var option = this.option;
return !option.scale;
};
AxisModelCommonMixin2.prototype.getCoordSysModel = function() {
return;
};
return AxisModelCommonMixin2;
})()
);
var extensions = [];
var extensionRegisters = {
registerPreprocessor,
registerProcessor,
registerPostInit,
registerPostUpdate,
registerUpdateLifecycle,
registerAction,
registerCoordinateSystem,
registerLayout,
registerVisual,
registerTransform,
registerLoading,
registerMap: registerMap$1,
registerImpl,
PRIORITY,
ComponentModel,
ComponentView,
SeriesModel,
ChartView,
// TODO Use ComponentModel and SeriesModel instead of Constructor
registerComponentModel: function(ComponentModelClass) {
ComponentModel.registerClass(ComponentModelClass);
},
registerComponentView: function(ComponentViewClass) {
ComponentView.registerClass(ComponentViewClass);
},
registerSeriesModel: function(SeriesModelClass) {
SeriesModel.registerClass(SeriesModelClass);
},
registerChartView: function(ChartViewClass) {
ChartView.registerClass(ChartViewClass);
},
registerSubTypeDefaulter: function(componentType, defaulter) {
ComponentModel.registerSubTypeDefaulter(componentType, defaulter);
},
registerPainter: function(painterType, PainterCtor) {
registerPainter(painterType, PainterCtor);
}
};
function use(ext) {
if (isArray$1(ext)) {
each$f(ext, function(singleExt) {
use(singleExt);
});
return;
}
if (indexOf(extensions, ext) >= 0) {
return;
}
extensions.push(ext);
if (isFunction(ext)) {
ext = {
install: ext
};
}
ext.install(extensionRegisters);
}
var TMP_TRANSFORM = [];
function transformPoints(points2, transform2) {
for (var p = 0; p < points2.length; p++) {
applyTransform$1(points2[p], points2[p], transform2);
}
}
function updateBBoxFromPoints(points2, min$1, max$1, projection) {
for (var i = 0; i < points2.length; i++) {
var p = points2[i];
if (projection) {
p = projection.project(p);
}
if (p && isFinite(p[0]) && isFinite(p[1])) {
min(min$1, min$1, p);
max(max$1, max$1, p);
}
}
}
function centroid(points2) {
var signedArea = 0;
var cx = 0;
var cy = 0;
var len2 = points2.length;
var x0 = points2[len2 - 1][0];
var y0 = points2[len2 - 1][1];
for (var i = 0; i < len2; i++) {
var x1 = points2[i][0];
var y1 = points2[i][1];
var a = x0 * y1 - x1 * y0;
signedArea += a;
cx += (x0 + x1) * a;
cy += (y0 + y1) * a;
x0 = x1;
y0 = y1;
}
return signedArea ? [cx / signedArea / 3, cy / signedArea / 3, signedArea] : [points2[0][0] || 0, points2[0][1] || 0];
}
var Region = (
/** @class */
(function() {
function Region2(name) {
this.name = name;
}
Region2.prototype.setCenter = function(center2) {
this._center = center2;
};
Region2.prototype.getCenter = function() {
var center2 = this._center;
if (!center2) {
center2 = this._center = this.calcCenter();
}
return center2;
};
return Region2;
})()
);
var GeoJSONPolygonGeometry = (
/** @class */
/* @__PURE__ */ (function() {
function GeoJSONPolygonGeometry2(exterior, interiors) {
this.type = "polygon";
this.exterior = exterior;
this.interiors = interiors;
}
return GeoJSONPolygonGeometry2;
})()
);
var GeoJSONLineStringGeometry = (
/** @class */
/* @__PURE__ */ (function() {
function GeoJSONLineStringGeometry2(points2) {
this.type = "linestring";
this.points = points2;
}
return GeoJSONLineStringGeometry2;
})()
);
var GeoJSONRegion = (
/** @class */
(function(_super) {
__extends(GeoJSONRegion2, _super);
function GeoJSONRegion2(name, geometries, cp) {
var _this = _super.call(this, name) || this;
_this.type = "geoJSON";
_this.geometries = geometries;
_this._center = cp && [cp[0], cp[1]];
return _this;
}
GeoJSONRegion2.prototype.calcCenter = function() {
var geometries = this.geometries;
var largestGeo;
var largestGeoSize = 0;
for (var i = 0; i < geometries.length; i++) {
var geo = geometries[i];
var exterior = geo.exterior;
var size = exterior && exterior.length;
if (size > largestGeoSize) {
largestGeo = geo;
largestGeoSize = size;
}
}
if (largestGeo) {
return centroid(largestGeo.exterior);
}
var rect = this.getBoundingRect();
return [rect.x + rect.width / 2, rect.y + rect.height / 2];
};
GeoJSONRegion2.prototype.getBoundingRect = function(projection) {
var rect = this._rect;
if (rect && !projection) {
return rect;
}
var min2 = [Infinity, Infinity];
var max2 = [-Infinity, -Infinity];
var geometries = this.geometries;
each$f(geometries, function(geo) {
if (geo.type === "polygon") {
updateBBoxFromPoints(geo.exterior, min2, max2, projection);
} else {
each$f(geo.points, function(points2) {
updateBBoxFromPoints(points2, min2, max2, projection);
});
}
});
if (!(isFinite(min2[0]) && isFinite(min2[1]) && isFinite(max2[0]) && isFinite(max2[1]))) {
min2[0] = min2[1] = max2[0] = max2[1] = 0;
}
rect = new BoundingRect(min2[0], min2[1], max2[0] - min2[0], max2[1] - min2[1]);
if (!projection) {
this._rect = rect;
}
return rect;
};
GeoJSONRegion2.prototype.contain = function(coord) {
var rect = this.getBoundingRect();
var geometries = this.geometries;
if (!rect.contain(coord[0], coord[1])) {
return false;
}
loopGeo: for (var i = 0, len2 = geometries.length; i < len2; i++) {
var geo = geometries[i];
if (geo.type !== "polygon") {
continue;
}
var exterior = geo.exterior;
var interiors = geo.interiors;
if (contain$1(exterior, coord[0], coord[1])) {
for (var k = 0; k < (interiors ? interiors.length : 0); k++) {
if (contain$1(interiors[k], coord[0], coord[1])) {
continue loopGeo;
}
}
return true;
}
}
return false;
};
GeoJSONRegion2.prototype.transformTo = function(x, y, width, height) {
var rect = this.getBoundingRect();
var aspect = rect.width / rect.height;
if (!width) {
width = aspect * height;
} else if (!height) {
height = width / aspect;
}
var target = new BoundingRect(x, y, width, height);
var transform2 = rect.calculateTransform(target);
var geometries = this.geometries;
for (var i = 0; i < geometries.length; i++) {
var geo = geometries[i];
if (geo.type === "polygon") {
transformPoints(geo.exterior, transform2);
each$f(geo.interiors, function(interior) {
transformPoints(interior, transform2);
});
} else {
each$f(geo.points, function(points2) {
transformPoints(points2, transform2);
});
}
}
rect = this._rect;
rect.copy(target);
this._center = [rect.x + rect.width / 2, rect.y + rect.height / 2];
};
GeoJSONRegion2.prototype.cloneShallow = function(name) {
name == null && (name = this.name);
var newRegion = new GeoJSONRegion2(name, this.geometries, this._center);
newRegion._rect = this._rect;
newRegion.transformTo = null;
return newRegion;
};
return GeoJSONRegion2;
})(Region)
);
var GeoSVGRegion = (
/** @class */
(function(_super) {
__extends(GeoSVGRegion2, _super);
function GeoSVGRegion2(name, elOnlyForCalculate) {
var _this = _super.call(this, name) || this;
_this.type = "geoSVG";
_this._elOnlyForCalculate = elOnlyForCalculate;
return _this;
}
GeoSVGRegion2.prototype.calcCenter = function() {
var el = this._elOnlyForCalculate;
var rect = el.getBoundingRect();
var center2 = [rect.x + rect.width / 2, rect.y + rect.height / 2];
var mat = identity(TMP_TRANSFORM);
var target = el;
while (target && !target.isGeoSVGGraphicRoot) {
mul(mat, target.getLocalTransform(), mat);
target = target.parent;
}
invert(mat, mat);
applyTransform$1(center2, center2, mat);
return center2;
};
return GeoSVGRegion2;
})(Region)
);
function decode(json) {
if (!json.UTF8Encoding) {
return json;
}
var jsonCompressed = json;
var encodeScale = jsonCompressed.UTF8Scale;
if (encodeScale == null) {
encodeScale = 1024;
}
var features2 = jsonCompressed.features;
each$f(features2, function(feature) {
var geometry = feature.geometry;
var encodeOffsets = geometry.encodeOffsets;
var coordinates = geometry.coordinates;
if (!encodeOffsets) {
return;
}
switch (geometry.type) {
case "LineString":
geometry.coordinates = decodeRing(coordinates, encodeOffsets, encodeScale);
break;
case "Polygon":
decodeRings(coordinates, encodeOffsets, encodeScale);
break;
case "MultiLineString":
decodeRings(coordinates, encodeOffsets, encodeScale);
break;
case "MultiPolygon":
each$f(coordinates, function(rings, idx) {
return decodeRings(rings, encodeOffsets[idx], encodeScale);
});
}
});
jsonCompressed.UTF8Encoding = false;
return jsonCompressed;
}
function decodeRings(rings, encodeOffsets, encodeScale) {
for (var c = 0; c < rings.length; c++) {
rings[c] = decodeRing(rings[c], encodeOffsets[c], encodeScale);
}
}
function decodeRing(coordinate, encodeOffsets, encodeScale) {
var result = [];
var prevX = encodeOffsets[0];
var prevY = encodeOffsets[1];
for (var i = 0; i < coordinate.length; i += 2) {
var x = coordinate.charCodeAt(i) - 64;
var y = coordinate.charCodeAt(i + 1) - 64;
x = x >> 1 ^ -(x & 1);
y = y >> 1 ^ -(y & 1);
x += prevX;
y += prevY;
prevX = x;
prevY = y;
result.push([x / encodeScale, y / encodeScale]);
}
return result;
}
function parseGeoJSON(geoJson, nameProperty) {
geoJson = decode(geoJson);
return map$1(filter(geoJson.features, function(featureObj) {
return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0;
}), function(featureObj) {
var properties = featureObj.properties;
var geo = featureObj.geometry;
var geometries = [];
switch (geo.type) {
case "Polygon":
var coordinates = geo.coordinates;
geometries.push(new GeoJSONPolygonGeometry(coordinates[0], coordinates.slice(1)));
break;
case "MultiPolygon":
each$f(geo.coordinates, function(item) {
if (item[0]) {
geometries.push(new GeoJSONPolygonGeometry(item[0], item.slice(1)));
}
});
break;
case "LineString":
geometries.push(new GeoJSONLineStringGeometry([geo.coordinates]));
break;
case "MultiLineString":
geometries.push(new GeoJSONLineStringGeometry(geo.coordinates));
}
var region = new GeoJSONRegion(properties[nameProperty || "name"], geometries, properties.cp);
region.properties = properties;
return region;
});
}
var inner$g = makeInner();
function tickValuesToNumbers(axis, values) {
var nums = map$1(values, function(val) {
return axis.scale.parse(val);
});
if (axis.type === "time" && nums.length > 0) {
nums.sort();
nums.unshift(nums[0]);
nums.push(nums[nums.length - 1]);
}
return nums;
}
function createAxisLabels(axis) {
var custom = axis.getLabelModel().get("customValues");
if (custom) {
var labelFormatter_1 = makeLabelFormatter(axis);
var extent_1 = axis.scale.getExtent();
var tickNumbers = tickValuesToNumbers(axis, custom);
var ticks = filter(tickNumbers, function(val) {
return val >= extent_1[0] && val <= extent_1[1];
});
return {
labels: map$1(ticks, function(numval) {
var tick = {
value: numval
};
return {
formattedLabel: labelFormatter_1(tick),
rawLabel: axis.scale.getLabel(tick),
tickValue: numval
};
})
};
}
return axis.type === "category" ? makeCategoryLabels(axis) : makeRealNumberLabels(axis);
}
function createAxisTicks(axis, tickModel) {
var custom = axis.getTickModel().get("customValues");
if (custom) {
var extent_2 = axis.scale.getExtent();
var tickNumbers = tickValuesToNumbers(axis, custom);
return {
ticks: filter(tickNumbers, function(val) {
return val >= extent_2[0] && val <= extent_2[1];
})
};
}
return axis.type === "category" ? makeCategoryTicks(axis, tickModel) : {
ticks: map$1(axis.scale.getTicks(), function(tick) {
return tick.value;
})
};
}
function makeCategoryLabels(axis) {
var labelModel = axis.getLabelModel();
var result = makeCategoryLabelsActually(axis, labelModel);
return !labelModel.get("show") || axis.scale.isBlank() ? {
labels: [],
labelCategoryInterval: result.labelCategoryInterval
} : result;
}
function makeCategoryLabelsActually(axis, labelModel) {
var labelsCache = getListCache(axis, "labels");
var optionLabelInterval = getOptionCategoryInterval(labelModel);
var result = listCacheGet(labelsCache, optionLabelInterval);
if (result) {
return result;
}
var labels;
var numericLabelInterval;
if (isFunction(optionLabelInterval)) {
labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);
} else {
numericLabelInterval = optionLabelInterval === "auto" ? makeAutoCategoryInterval(axis) : optionLabelInterval;
labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);
}
return listCacheSet(labelsCache, optionLabelInterval, {
labels,
labelCategoryInterval: numericLabelInterval
});
}
function makeCategoryTicks(axis, tickModel) {
var ticksCache = getListCache(axis, "ticks");
var optionTickInterval = getOptionCategoryInterval(tickModel);
var result = listCacheGet(ticksCache, optionTickInterval);
if (result) {
return result;
}
var ticks;
var tickCategoryInterval;
if (!tickModel.get("show") || axis.scale.isBlank()) {
ticks = [];
}
if (isFunction(optionTickInterval)) {
ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);
} else if (optionTickInterval === "auto") {
var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());
tickCategoryInterval = labelsResult.labelCategoryInterval;
ticks = map$1(labelsResult.labels, function(labelItem) {
return labelItem.tickValue;
});
} else {
tickCategoryInterval = optionTickInterval;
ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);
}
return listCacheSet(ticksCache, optionTickInterval, {
ticks,
tickCategoryInterval
});
}
function makeRealNumberLabels(axis) {
var ticks = axis.scale.getTicks();
var labelFormatter = makeLabelFormatter(axis);
return {
labels: map$1(ticks, function(tick, idx) {
return {
level: tick.level,
formattedLabel: labelFormatter(tick, idx),
rawLabel: axis.scale.getLabel(tick),
tickValue: tick.value
};
})
};
}
function getListCache(axis, prop) {
return inner$g(axis)[prop] || (inner$g(axis)[prop] = []);
}
function listCacheGet(cache, key) {
for (var i = 0; i < cache.length; i++) {
if (cache[i].key === key) {
return cache[i].value;
}
}
}
function listCacheSet(cache, key, value) {
cache.push({
key,
value
});
return value;
}
function makeAutoCategoryInterval(axis) {
var result = inner$g(axis).autoInterval;
return result != null ? result : inner$g(axis).autoInterval = axis.calculateCategoryInterval();
}
function calculateCategoryInterval(axis) {
var params = fetchAutoCategoryIntervalCalculationParams(axis);
var labelFormatter = makeLabelFormatter(axis);
var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;
var ordinalScale = axis.scale;
var ordinalExtent = ordinalScale.getExtent();
var tickCount = ordinalScale.count();
if (ordinalExtent[1] - ordinalExtent[0] < 1) {
return 0;
}
var step = 1;
if (tickCount > 40) {
step = Math.max(1, Math.floor(tickCount / 40));
}
var tickValue = ordinalExtent[0];
var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
var unitW = Math.abs(unitSpan * Math.cos(rotation));
var unitH = Math.abs(unitSpan * Math.sin(rotation));
var maxW = 0;
var maxH = 0;
for (; tickValue <= ordinalExtent[1]; tickValue += step) {
var width = 0;
var height = 0;
var rect = getBoundingRect(labelFormatter({
value: tickValue
}), params.font, "center", "top");
width = rect.width * 1.3;
height = rect.height * 1.3;
maxW = Math.max(maxW, width, 7);
maxH = Math.max(maxH, height, 7);
}
var dw = maxW / unitW;
var dh = maxH / unitH;
isNaN(dw) && (dw = Infinity);
isNaN(dh) && (dh = Infinity);
var interval = Math.max(0, Math.floor(Math.min(dw, dh)));
var cache = inner$g(axis.model);
var axisExtent = axis.getExtent();
var lastAutoInterval = cache.lastAutoInterval;
var lastTickCount = cache.lastTickCount;
if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 && lastAutoInterval > interval && cache.axisExtent0 === axisExtent[0] && cache.axisExtent1 === axisExtent[1]) {
interval = lastAutoInterval;
} else {
cache.lastTickCount = tickCount;
cache.lastAutoInterval = interval;
cache.axisExtent0 = axisExtent[0];
cache.axisExtent1 = axisExtent[1];
}
return interval;
}
function fetchAutoCategoryIntervalCalculationParams(axis) {
var labelModel = axis.getLabelModel();
return {
axisRotate: axis.getRotate ? axis.getRotate() : axis.isHorizontal && !axis.isHorizontal() ? 90 : 0,
labelRotate: labelModel.get("rotate") || 0,
font: labelModel.getFont()
};
}
function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {
var labelFormatter = makeLabelFormatter(axis);
var ordinalScale = axis.scale;
var ordinalExtent = ordinalScale.getExtent();
var labelModel = axis.getLabelModel();
var result = [];
var step = Math.max((categoryInterval || 0) + 1, 1);
var startTick = ordinalExtent[0];
var tickCount = ordinalScale.count();
if (startTick !== 0 && step > 1 && tickCount / step > 2) {
startTick = Math.round(Math.ceil(startTick / step) * step);
}
var showAllLabel = shouldShowAllLabels(axis);
var includeMinLabel = labelModel.get("showMinLabel") || showAllLabel;
var includeMaxLabel = labelModel.get("showMaxLabel") || showAllLabel;
if (includeMinLabel && startTick !== ordinalExtent[0]) {
addItem(ordinalExtent[0]);
}
var tickValue = startTick;
for (; tickValue <= ordinalExtent[1]; tickValue += step) {
addItem(tickValue);
}
if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) {
addItem(ordinalExtent[1]);
}
function addItem(tickValue2) {
var tickObj = {
value: tickValue2
};
result.push(onlyTick ? tickValue2 : {
formattedLabel: labelFormatter(tickObj),
rawLabel: ordinalScale.getLabel(tickObj),
tickValue: tickValue2
});
}
return result;
}
function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {
var ordinalScale = axis.scale;
var labelFormatter = makeLabelFormatter(axis);
var result = [];
each$f(ordinalScale.getTicks(), function(tick) {
var rawLabel = ordinalScale.getLabel(tick);
var tickValue = tick.value;
if (categoryInterval(tick.value, rawLabel)) {
result.push(onlyTick ? tickValue : {
formattedLabel: labelFormatter(tick),
rawLabel,
tickValue
});
}
});
return result;
}
var NORMALIZED_EXTENT = [0, 1];
var Axis = (
/** @class */
(function() {
function Axis2(dim, scale2, extent) {
this.onBand = false;
this.inverse = false;
this.dim = dim;
this.scale = scale2;
this._extent = extent || [0, 0];
}
Axis2.prototype.contain = function(coord) {
var extent = this._extent;
var min2 = Math.min(extent[0], extent[1]);
var max2 = Math.max(extent[0], extent[1]);
return coord >= min2 && coord <= max2;
};
Axis2.prototype.containData = function(data) {
return this.scale.contain(data);
};
Axis2.prototype.getExtent = function() {
return this._extent.slice();
};
Axis2.prototype.getPixelPrecision = function(dataExtent) {
return getPixelPrecision(dataExtent || this.scale.getExtent(), this._extent);
};
Axis2.prototype.setExtent = function(start, end) {
var extent = this._extent;
extent[0] = start;
extent[1] = end;
};
Axis2.prototype.dataToCoord = function(data, clamp2) {
var extent = this._extent;
var scale2 = this.scale;
data = scale2.normalize(data);
if (this.onBand && scale2.type === "ordinal") {
extent = extent.slice();
fixExtentWithBands(extent, scale2.count());
}
return linearMap$2(data, NORMALIZED_EXTENT, extent, clamp2);
};
Axis2.prototype.coordToData = function(coord, clamp2) {
var extent = this._extent;
var scale2 = this.scale;
if (this.onBand && scale2.type === "ordinal") {
extent = extent.slice();
fixExtentWithBands(extent, scale2.count());
}
var t = linearMap$2(coord, extent, NORMALIZED_EXTENT, clamp2);
return this.scale.scale(t);
};
Axis2.prototype.pointToData = function(point, clamp2) {
return;
};
Axis2.prototype.getTicksCoords = function(opt) {
opt = opt || {};
var tickModel = opt.tickModel || this.getTickModel();
var result = createAxisTicks(this, tickModel);
var ticks = result.ticks;
var ticksCoords = map$1(ticks, function(tickVal) {
return {
coord: this.dataToCoord(this.scale.type === "ordinal" ? this.scale.getRawOrdinalNumber(tickVal) : tickVal),
tickValue: tickVal
};
}, this);
var alignWithLabel = tickModel.get("alignWithLabel");
fixOnBandTicksCoords(this, ticksCoords, alignWithLabel, opt.clamp);
return ticksCoords;
};
Axis2.prototype.getMinorTicksCoords = function() {
if (this.scale.type === "ordinal") {
return [];
}
var minorTickModel = this.model.getModel("minorTick");
var splitNumber = minorTickModel.get("splitNumber");
if (!(splitNumber > 0 && splitNumber < 100)) {
splitNumber = 5;
}
var minorTicks = this.scale.getMinorTicks(splitNumber);
var minorTicksCoords = map$1(minorTicks, function(minorTicksGroup) {
return map$1(minorTicksGroup, function(minorTick) {
return {
coord: this.dataToCoord(minorTick),
tickValue: minorTick
};
}, this);
}, this);
return minorTicksCoords;
};
Axis2.prototype.getViewLabels = function() {
return createAxisLabels(this).labels;
};
Axis2.prototype.getLabelModel = function() {
return this.model.getModel("axisLabel");
};
Axis2.prototype.getTickModel = function() {
return this.model.getModel("axisTick");
};
Axis2.prototype.getBandWidth = function() {
var axisExtent = this._extent;
var dataExtent = this.scale.getExtent();
var len2 = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);
len2 === 0 && (len2 = 1);
var size = Math.abs(axisExtent[1] - axisExtent[0]);
return Math.abs(size) / len2;
};
Axis2.prototype.calculateCategoryInterval = function() {
return calculateCategoryInterval(this);
};
return Axis2;
})()
);
function fixExtentWithBands(extent, nTick) {
var size = extent[1] - extent[0];
var len2 = nTick;
var margin = size / len2 / 2;
extent[0] += margin;
extent[1] -= margin;
}
function fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp2) {
var ticksLen = ticksCoords.length;
if (!axis.onBand || alignWithLabel || !ticksLen) {
return;
}
var axisExtent = axis.getExtent();
var last;
var diffSize;
if (ticksLen === 1) {
ticksCoords[0].coord = axisExtent[0];
last = ticksCoords[1] = {
coord: axisExtent[1],
tickValue: ticksCoords[0].tickValue
};
} else {
var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;
var shift_1 = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;
each$f(ticksCoords, function(ticksItem) {
ticksItem.coord -= shift_1 / 2;
});
var dataExtent = axis.scale.getExtent();
diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue;
last = {
coord: ticksCoords[ticksLen - 1].coord + shift_1 * diffSize,
tickValue: dataExtent[1] + 1
};
ticksCoords.push(last);
}
var inverse = axisExtent[0] > axisExtent[1];
if (littleThan2(ticksCoords[0].coord, axisExtent[0])) {
clamp2 ? ticksCoords[0].coord = axisExtent[0] : ticksCoords.shift();
}
if (clamp2 && littleThan2(axisExtent[0], ticksCoords[0].coord)) {
ticksCoords.unshift({
coord: axisExtent[0]
});
}
if (littleThan2(axisExtent[1], last.coord)) {
clamp2 ? last.coord = axisExtent[1] : ticksCoords.pop();
}
if (clamp2 && littleThan2(last.coord, axisExtent[1])) {
ticksCoords.push({
coord: axisExtent[1]
});
}
function littleThan2(a, b) {
a = round$1(a);
b = round$1(b);
return inverse ? a > b : a < b;
}
}
var PI2$1 = Math.PI * 2;
var CMD = PathProxy.CMD;
var DEFAULT_SEARCH_SPACE = ["top", "right", "bottom", "left"];
function getCandidateAnchor(pos, distance, rect, outPt, outDir) {
var width = rect.width;
var height = rect.height;
switch (pos) {
case "top":
outPt.set(rect.x + width / 2, rect.y - distance);
outDir.set(0, -1);
break;
case "bottom":
outPt.set(rect.x + width / 2, rect.y + height + distance);
outDir.set(0, 1);
break;
case "left":
outPt.set(rect.x - distance, rect.y + height / 2);
outDir.set(-1, 0);
break;
case "right":
outPt.set(rect.x + width + distance, rect.y + height / 2);
outDir.set(1, 0);
break;
}
}
function projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {
x -= cx;
y -= cy;
var d = Math.sqrt(x * x + y * y);
x /= d;
y /= d;
var ox = x * r + cx;
var oy = y * r + cy;
if (Math.abs(startAngle - endAngle) % PI2$1 < 1e-4) {
out[0] = ox;
out[1] = oy;
return d - r;
}
if (anticlockwise) {
var tmp = startAngle;
startAngle = normalizeRadian(endAngle);
endAngle = normalizeRadian(tmp);
} else {
startAngle = normalizeRadian(startAngle);
endAngle = normalizeRadian(endAngle);
}
if (startAngle > endAngle) {
endAngle += PI2$1;
}
var angle = Math.atan2(y, x);
if (angle < 0) {
angle += PI2$1;
}
if (angle >= startAngle && angle <= endAngle || angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle) {
out[0] = ox;
out[1] = oy;
return d - r;
}
var x1 = r * Math.cos(startAngle) + cx;
var y1 = r * Math.sin(startAngle) + cy;
var x2 = r * Math.cos(endAngle) + cx;
var y2 = r * Math.sin(endAngle) + cy;
var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);
var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);
if (d1 < d2) {
out[0] = x1;
out[1] = y1;
return Math.sqrt(d1);
} else {
out[0] = x2;
out[1] = y2;
return Math.sqrt(d2);
}
}
function projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {
var dx = x - x1;
var dy = y - y1;
var dx1 = x2 - x1;
var dy1 = y2 - y1;
var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);
dx1 /= lineLen;
dy1 /= lineLen;
var projectedLen = dx * dx1 + dy * dy1;
var t = projectedLen / lineLen;
if (limitToEnds) {
t = Math.min(Math.max(t, 0), 1);
}
t *= lineLen;
var ox = out[0] = x1 + t * dx1;
var oy = out[1] = y1 + t * dy1;
return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));
}
function projectPointToRect(x1, y1, width, height, x, y, out) {
if (width < 0) {
x1 = x1 + width;
width = -width;
}
if (height < 0) {
y1 = y1 + height;
height = -height;
}
var x2 = x1 + width;
var y2 = y1 + height;
var ox = out[0] = Math.min(Math.max(x, x1), x2);
var oy = out[1] = Math.min(Math.max(y, y1), y2);
return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));
}
var tmpPt = [];
function nearestPointOnRect(pt, rect, out) {
var dist2 = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);
out.set(tmpPt[0], tmpPt[1]);
return dist2;
}
function nearestPointOnPath(pt, path, out) {
var xi = 0;
var yi = 0;
var x0 = 0;
var y0 = 0;
var x1;
var y1;
var minDist = Infinity;
var data = path.data;
var x = pt.x;
var y = pt.y;
for (var i = 0; i < data.length; ) {
var cmd = data[i++];
if (i === 1) {
xi = data[i];
yi = data[i + 1];
x0 = xi;
y0 = yi;
}
var d = minDist;
switch (cmd) {
case CMD.M:
x0 = data[i++];
y0 = data[i++];
xi = x0;
yi = y0;
break;
case CMD.L:
d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);
xi = data[i++];
yi = data[i++];
break;
case CMD.C:
d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);
xi = data[i++];
yi = data[i++];
break;
case CMD.Q:
d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);
xi = data[i++];
yi = data[i++];
break;
case CMD.A:
var cx = data[i++];
var cy = data[i++];
var rx = data[i++];
var ry = data[i++];
var theta = data[i++];
var dTheta = data[i++];
i += 1;
var anticlockwise = !!(1 - data[i++]);
x1 = Math.cos(theta) * rx + cx;
y1 = Math.sin(theta) * ry + cy;
if (i <= 1) {
x0 = x1;
y0 = y1;
}
var _x = (x - cx) * ry / rx + cx;
d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);
xi = Math.cos(theta + dTheta) * rx + cx;
yi = Math.sin(theta + dTheta) * ry + cy;
break;
case CMD.R:
x0 = xi = data[i++];
y0 = yi = data[i++];
var width = data[i++];
var height = data[i++];
d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);
break;
case CMD.Z:
d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);
xi = x0;
yi = y0;
break;
}
if (d < minDist) {
minDist = d;
out.set(tmpPt[0], tmpPt[1]);
}
}
return minDist;
}
var pt0 = new Point();
var pt1 = new Point();
var pt2 = new Point();
var dir = new Point();
var dir2 = new Point();
function updateLabelLinePoints(target, labelLineModel) {
if (!target) {
return;
}
var labelLine = target.getTextGuideLine();
var label = target.getTextContent();
if (!(label && labelLine)) {
return;
}
var labelGuideConfig = target.textGuideLineConfig || {};
var points2 = [[0, 0], [0, 0], [0, 0]];
var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;
var labelRect = label.getBoundingRect().clone();
labelRect.applyTransform(label.getComputedTransform());
var minDist = Infinity;
var anchorPoint = labelGuideConfig.anchor;
var targetTransform = target.getComputedTransform();
var targetInversedTransform = targetTransform && invert([], targetTransform);
var len2 = labelLineModel.get("length2") || 0;
if (anchorPoint) {
pt2.copy(anchorPoint);
}
for (var i = 0; i < searchSpace.length; i++) {
var candidate = searchSpace[i];
getCandidateAnchor(candidate, 0, labelRect, pt0, dir);
Point.scaleAndAdd(pt1, pt0, dir, len2);
pt1.transform(targetInversedTransform);
var boundingRect = target.getBoundingRect();
var dist2 = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2);
if (dist2 < minDist) {
minDist = dist2;
pt1.transform(targetTransform);
pt2.transform(targetTransform);
pt2.toArray(points2[0]);
pt1.toArray(points2[1]);
pt0.toArray(points2[2]);
}
}
limitTurnAngle(points2, labelLineModel.get("minTurnAngle"));
labelLine.setShape({
points: points2
});
}
var tmpArr = [];
var tmpProjPoint = new Point();
function limitTurnAngle(linePoints, minTurnAngle) {
if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {
return;
}
minTurnAngle = minTurnAngle / 180 * Math.PI;
pt0.fromArray(linePoints[0]);
pt1.fromArray(linePoints[1]);
pt2.fromArray(linePoints[2]);
Point.sub(dir, pt0, pt1);
Point.sub(dir2, pt2, pt1);
var len1 = dir.len();
var len2 = dir2.len();
if (len1 < 1e-3 || len2 < 1e-3) {
return;
}
dir.scale(1 / len1);
dir2.scale(1 / len2);
var angleCos = dir.dot(dir2);
var minTurnAngleCos = Math.cos(minTurnAngle);
if (minTurnAngleCos < angleCos) {
var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);
tmpProjPoint.fromArray(tmpArr);
tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle));
var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);
if (isNaN(t)) {
return;
}
if (t < 0) {
Point.copy(tmpProjPoint, pt1);
} else if (t > 1) {
Point.copy(tmpProjPoint, pt2);
}
tmpProjPoint.toArray(linePoints[1]);
}
}
function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {
if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {
return;
}
maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;
pt0.fromArray(linePoints[0]);
pt1.fromArray(linePoints[1]);
pt2.fromArray(linePoints[2]);
Point.sub(dir, pt1, pt0);
Point.sub(dir2, pt2, pt1);
var len1 = dir.len();
var len2 = dir2.len();
if (len1 < 1e-3 || len2 < 1e-3) {
return;
}
dir.scale(1 / len1);
dir2.scale(1 / len2);
var angleCos = dir.dot(surfaceNormal);
var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);
if (angleCos < maxSurfaceAngleCos) {
var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);
tmpProjPoint.fromArray(tmpArr);
var HALF_PI = Math.PI / 2;
var angle2 = Math.acos(dir2.dot(surfaceNormal));
var newAngle = HALF_PI + angle2 - maxSurfaceAngle;
if (newAngle >= HALF_PI) {
Point.copy(tmpProjPoint, pt2);
} else {
tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle));
var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);
if (isNaN(t)) {
return;
}
if (t < 0) {
Point.copy(tmpProjPoint, pt1);
} else if (t > 1) {
Point.copy(tmpProjPoint, pt2);
}
}
tmpProjPoint.toArray(linePoints[1]);
}
}
function setLabelLineState(labelLine, ignore, stateName, stateModel) {
var isNormal = stateName === "normal";
var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName);
stateObj.ignore = ignore;
var smooth = stateModel.get("smooth");
if (smooth && smooth === true) {
smooth = 0.3;
}
stateObj.shape = stateObj.shape || {};
if (smooth > 0) {
stateObj.shape.smooth = smooth;
}
var styleObj = stateModel.getModel("lineStyle").getLineStyle();
isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;
}
function buildLabelLinePath(path, shape) {
var smooth = shape.smooth;
var points2 = shape.points;
if (!points2) {
return;
}
path.moveTo(points2[0][0], points2[0][1]);
if (smooth > 0 && points2.length >= 3) {
var len1 = dist(points2[0], points2[1]);
var len2 = dist(points2[1], points2[2]);
if (!len1 || !len2) {
path.lineTo(points2[1][0], points2[1][1]);
path.lineTo(points2[2][0], points2[2][1]);
return;
}
var moveLen = Math.min(len1, len2) * smooth;
var midPoint0 = lerp([], points2[1], points2[0], moveLen / len1);
var midPoint2 = lerp([], points2[1], points2[2], moveLen / len2);
var midPoint1 = lerp([], midPoint0, midPoint2, 0.5);
path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);
path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points2[2][0], points2[2][1]);
} else {
for (var i = 1; i < points2.length; i++) {
path.lineTo(points2[i][0], points2[i][1]);
}
}
}
function setLabelLineStyle(targetEl, statesModels, defaultStyle) {
var labelLine = targetEl.getTextGuideLine();
var label = targetEl.getTextContent();
if (!label) {
if (labelLine) {
targetEl.removeTextGuideLine();
}
return;
}
var normalModel = statesModels.normal;
var showNormal = normalModel.get("show");
var labelIgnoreNormal = label.ignore;
for (var i = 0; i < DISPLAY_STATES.length; i++) {
var stateName = DISPLAY_STATES[i];
var stateModel = statesModels[stateName];
var isNormal = stateName === "normal";
if (stateModel) {
var stateShow = stateModel.get("show");
var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);
if (isLabelIgnored || !retrieve2(stateShow, showNormal)) {
var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];
if (stateObj) {
stateObj.ignore = true;
}
if (!!labelLine) {
setLabelLineState(labelLine, true, stateName, stateModel);
}
continue;
}
if (!labelLine) {
labelLine = new Polyline$1();
targetEl.setTextGuideLine(labelLine);
if (!isNormal && (labelIgnoreNormal || !showNormal)) {
setLabelLineState(labelLine, true, "normal", statesModels.normal);
}
if (targetEl.stateProxy) {
labelLine.stateProxy = targetEl.stateProxy;
}
}
setLabelLineState(labelLine, false, stateName, stateModel);
}
}
if (labelLine) {
defaults(labelLine.style, defaultStyle);
labelLine.style.fill = null;
var showAbove = normalModel.get("showAbove");
var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};
labelLineConfig.showAbove = showAbove || false;
labelLine.buildPath = buildLabelLinePath;
}
}
function getLabelLineStatesModels(itemModel, labelLineName) {
labelLineName = labelLineName || "labelLine";
var statesModels = {
normal: itemModel.getModel(labelLineName)
};
for (var i = 0; i < SPECIAL_STATES.length; i++) {
var stateName = SPECIAL_STATES[i];
statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);
}
return statesModels;
}
function prepareLayoutList(input) {
var list = [];
for (var i = 0; i < input.length; i++) {
var rawItem = input[i];
if (rawItem.defaultAttr.ignore) {
continue;
}
var label = rawItem.label;
var transform2 = label.getComputedTransform();
var localRect = label.getBoundingRect();
var isAxisAligned = !transform2 || transform2[1] < 1e-5 && transform2[2] < 1e-5;
var minMargin = label.style.margin || 0;
var globalRect = localRect.clone();
globalRect.applyTransform(transform2);
globalRect.x -= minMargin / 2;
globalRect.y -= minMargin / 2;
globalRect.width += minMargin;
globalRect.height += minMargin;
var obb = isAxisAligned ? new OrientedBoundingRect(localRect, transform2) : null;
list.push({
label,
labelLine: rawItem.labelLine,
rect: globalRect,
localRect,
obb,
priority: rawItem.priority,
defaultAttr: rawItem.defaultAttr,
layoutOption: rawItem.computedLayoutOption,
axisAligned: isAxisAligned,
transform: transform2
});
}
return list;
}
function shiftLayout(list, xyDim, sizeDim, minBound, maxBound, balanceShift) {
var len2 = list.length;
if (len2 < 2) {
return;
}
list.sort(function(a, b) {
return a.rect[xyDim] - b.rect[xyDim];
});
var lastPos = 0;
var delta;
var adjusted = false;
for (var i = 0; i < len2; i++) {
var item = list[i];
var rect = item.rect;
delta = rect[xyDim] - lastPos;
if (delta < 0) {
rect[xyDim] -= delta;
item.label[xyDim] -= delta;
adjusted = true;
}
lastPos = rect[xyDim] + rect[sizeDim];
}
var first = list[0];
var last = list[len2 - 1];
var minGap;
var maxGap;
updateMinMaxGap();
minGap < 0 && squeezeGaps(-minGap, 0.8);
maxGap < 0 && squeezeGaps(maxGap, 0.8);
updateMinMaxGap();
takeBoundsGap(minGap, maxGap, 1);
takeBoundsGap(maxGap, minGap, -1);
updateMinMaxGap();
if (minGap < 0) {
squeezeWhenBailout(-minGap);
}
if (maxGap < 0) {
squeezeWhenBailout(maxGap);
}
function updateMinMaxGap() {
minGap = first.rect[xyDim] - minBound;
maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim];
}
function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) {
if (gapThisBound < 0) {
var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound);
if (moveFromMaxGap > 0) {
shiftList(moveFromMaxGap * moveDir, 0, len2);
var remained = moveFromMaxGap + gapThisBound;
if (remained < 0) {
squeezeGaps(-remained * moveDir, 1);
}
} else {
squeezeGaps(-gapThisBound * moveDir, 1);
}
}
}
function shiftList(delta2, start, end) {
if (delta2 !== 0) {
adjusted = true;
}
for (var i2 = start; i2 < end; i2++) {
var item2 = list[i2];
var rect2 = item2.rect;
rect2[xyDim] += delta2;
item2.label[xyDim] += delta2;
}
}
function squeezeGaps(delta2, maxSqeezePercent) {
var gaps = [];
var totalGaps = 0;
for (var i2 = 1; i2 < len2; i2++) {
var prevItemRect = list[i2 - 1].rect;
var gap = Math.max(list[i2].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0);
gaps.push(gap);
totalGaps += gap;
}
if (!totalGaps) {
return;
}
var squeezePercent = Math.min(Math.abs(delta2) / totalGaps, maxSqeezePercent);
if (delta2 > 0) {
for (var i2 = 0; i2 < len2 - 1; i2++) {
var movement = gaps[i2] * squeezePercent;
shiftList(movement, 0, i2 + 1);
}
} else {
for (var i2 = len2 - 1; i2 > 0; i2--) {
var movement = gaps[i2 - 1] * squeezePercent;
shiftList(-movement, i2, len2);
}
}
}
function squeezeWhenBailout(delta2) {
var dir3 = delta2 < 0 ? -1 : 1;
delta2 = Math.abs(delta2);
var moveForEachLabel = Math.ceil(delta2 / (len2 - 1));
for (var i2 = 0; i2 < len2 - 1; i2++) {
if (dir3 > 0) {
shiftList(moveForEachLabel, 0, i2 + 1);
} else {
shiftList(-moveForEachLabel, len2 - i2 - 1, len2);
}
delta2 -= moveForEachLabel;
if (delta2 <= 0) {
return;
}
}
}
return adjusted;
}
function shiftLayoutOnX(list, leftBound, rightBound, balanceShift) {
return shiftLayout(list, "x", "width", leftBound, rightBound);
}
function shiftLayoutOnY(list, topBound, bottomBound, balanceShift) {
return shiftLayout(list, "y", "height", topBound, bottomBound);
}
function hideOverlap(labelList) {
var displayedLabels = [];
labelList.sort(function(a, b) {
return b.priority - a.priority;
});
var globalRect = new BoundingRect(0, 0, 0, 0);
function hideEl(el) {
if (!el.ignore) {
var emphasisState = el.ensureState("emphasis");
if (emphasisState.ignore == null) {
emphasisState.ignore = false;
}
}
el.ignore = true;
}
for (var i = 0; i < labelList.length; i++) {
var labelItem = labelList[i];
var isAxisAligned = labelItem.axisAligned;
var localRect = labelItem.localRect;
var transform2 = labelItem.transform;
var label = labelItem.label;
var labelLine = labelItem.labelLine;
globalRect.copy(labelItem.rect);
globalRect.width -= 0.1;
globalRect.height -= 0.1;
globalRect.x += 0.05;
globalRect.y += 0.05;
var obb = labelItem.obb;
var overlapped = false;
for (var j = 0; j < displayedLabels.length; j++) {
var existsTextCfg = displayedLabels[j];
if (!globalRect.intersect(existsTextCfg.rect)) {
continue;
}
if (isAxisAligned && existsTextCfg.axisAligned) {
overlapped = true;
break;
}
if (!existsTextCfg.obb) {
existsTextCfg.obb = new OrientedBoundingRect(existsTextCfg.localRect, existsTextCfg.transform);
}
if (!obb) {
obb = new OrientedBoundingRect(localRect, transform2);
}
if (obb.intersect(existsTextCfg.obb)) {
overlapped = true;
break;
}
}
if (overlapped) {
hideEl(label);
labelLine && hideEl(labelLine);
} else {
label.attr("ignore", labelItem.defaultAttr.ignore);
labelLine && labelLine.attr("ignore", labelItem.defaultAttr.labelGuideIgnore);
displayedLabels.push(labelItem);
}
}
}
function cloneArr(points2) {
if (points2) {
var newPoints = [];
for (var i = 0; i < points2.length; i++) {
newPoints.push(points2[i].slice());
}
return newPoints;
}
}
function prepareLayoutCallbackParams(labelItem, hostEl) {
var label = labelItem.label;
var labelLine = hostEl && hostEl.getTextGuideLine();
return {
dataIndex: labelItem.dataIndex,
dataType: labelItem.dataType,
seriesIndex: labelItem.seriesModel.seriesIndex,
text: labelItem.label.style.text,
rect: labelItem.hostRect,
labelRect: labelItem.rect,
// x: labelAttr.x,
// y: labelAttr.y,
align: label.style.align,
verticalAlign: label.style.verticalAlign,
labelLinePoints: cloneArr(labelLine && labelLine.shape.points)
};
}
var LABEL_OPTION_TO_STYLE_KEYS = ["align", "verticalAlign", "width", "height", "fontSize"];
var dummyTransformable = new Transformable();
var labelLayoutInnerStore = makeInner();
var labelLineAnimationStore = makeInner();
function extendWithKeys(target, source, keys2) {
for (var i = 0; i < keys2.length; i++) {
var key = keys2[i];
if (source[key] != null) {
target[key] = source[key];
}
}
}
var LABEL_LAYOUT_PROPS = ["x", "y", "rotation"];
var LabelManager = (
/** @class */
(function() {
function LabelManager2() {
this._labelList = [];
this._chartViewList = [];
}
LabelManager2.prototype.clearLabels = function() {
this._labelList = [];
this._chartViewList = [];
};
LabelManager2.prototype._addLabel = function(dataIndex, dataType, seriesModel, label, layoutOption) {
var labelStyle = label.style;
var hostEl = label.__hostTarget;
var textConfig = hostEl.textConfig || {};
var labelTransform = label.getComputedTransform();
var labelRect = label.getBoundingRect().plain();
BoundingRect.applyTransform(labelRect, labelRect, labelTransform);
if (labelTransform) {
dummyTransformable.setLocalTransform(labelTransform);
} else {
dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;
dummyTransformable.scaleX = dummyTransformable.scaleY = 1;
}
dummyTransformable.rotation = normalizeRadian(dummyTransformable.rotation);
var host = label.__hostTarget;
var hostRect;
if (host) {
hostRect = host.getBoundingRect().plain();
var transform2 = host.getComputedTransform();
BoundingRect.applyTransform(hostRect, hostRect, transform2);
}
var labelGuide = hostRect && host.getTextGuideLine();
this._labelList.push({
label,
labelLine: labelGuide,
seriesModel,
dataIndex,
dataType,
layoutOption,
computedLayoutOption: null,
rect: labelRect,
hostRect,
// Label with lower priority will be hidden when overlapped
// Use rect size as default priority
priority: hostRect ? hostRect.width * hostRect.height : 0,
// Save default label attributes.
// For restore if developers want get back to default value in callback.
defaultAttr: {
ignore: label.ignore,
labelGuideIgnore: labelGuide && labelGuide.ignore,
x: dummyTransformable.x,
y: dummyTransformable.y,
scaleX: dummyTransformable.scaleX,
scaleY: dummyTransformable.scaleY,
rotation: dummyTransformable.rotation,
style: {
x: labelStyle.x,
y: labelStyle.y,
align: labelStyle.align,
verticalAlign: labelStyle.verticalAlign,
width: labelStyle.width,
height: labelStyle.height,
fontSize: labelStyle.fontSize
},
cursor: label.cursor,
attachedPos: textConfig.position,
attachedRot: textConfig.rotation
}
});
};
LabelManager2.prototype.addLabelsOfSeries = function(chartView) {
var _this = this;
this._chartViewList.push(chartView);
var seriesModel = chartView.__model;
var layoutOption = seriesModel.get("labelLayout");
if (!(isFunction(layoutOption) || keys(layoutOption).length)) {
return;
}
chartView.group.traverse(function(child) {
if (child.ignore) {
return true;
}
var textEl = child.getTextContent();
var ecData = getECData(child);
if (textEl && !textEl.disableLabelLayout) {
_this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);
}
});
};
LabelManager2.prototype.updateLayoutConfig = function(api) {
var width = api.getWidth();
var height = api.getHeight();
function createDragHandler(el, labelLineModel) {
return function() {
updateLabelLinePoints(el, labelLineModel);
};
}
for (var i = 0; i < this._labelList.length; i++) {
var labelItem = this._labelList[i];
var label = labelItem.label;
var hostEl = label.__hostTarget;
var defaultLabelAttr = labelItem.defaultAttr;
var layoutOption = void 0;
if (isFunction(labelItem.layoutOption)) {
layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));
} else {
layoutOption = labelItem.layoutOption;
}
layoutOption = layoutOption || {};
labelItem.computedLayoutOption = layoutOption;
var degreeToRadian = Math.PI / 180;
if (hostEl) {
hostEl.setTextConfig({
// Force to set local false.
local: false,
// Ignore position and rotation config on the host el if x or y is changed.
position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,
// Ignore rotation config on the host el if rotation is changed.
rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,
offset: [layoutOption.dx || 0, layoutOption.dy || 0]
});
}
var needsUpdateLabelLine = false;
if (layoutOption.x != null) {
label.x = parsePercent(layoutOption.x, width);
label.setStyle("x", 0);
needsUpdateLabelLine = true;
} else {
label.x = defaultLabelAttr.x;
label.setStyle("x", defaultLabelAttr.style.x);
}
if (layoutOption.y != null) {
label.y = parsePercent(layoutOption.y, height);
label.setStyle("y", 0);
needsUpdateLabelLine = true;
} else {
label.y = defaultLabelAttr.y;
label.setStyle("y", defaultLabelAttr.style.y);
}
if (layoutOption.labelLinePoints) {
var guideLine = hostEl.getTextGuideLine();
if (guideLine) {
guideLine.setShape({
points: layoutOption.labelLinePoints
});
needsUpdateLabelLine = false;
}
}
var labelLayoutStore = labelLayoutInnerStore(label);
labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;
label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;
label.scaleX = defaultLabelAttr.scaleX;
label.scaleY = defaultLabelAttr.scaleY;
for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {
var key = LABEL_OPTION_TO_STYLE_KEYS[k];
label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);
}
if (layoutOption.draggable) {
label.draggable = true;
label.cursor = "move";
if (hostEl) {
var hostModel = labelItem.seriesModel;
if (labelItem.dataIndex != null) {
var data = labelItem.seriesModel.getData(labelItem.dataType);
hostModel = data.getItemModel(labelItem.dataIndex);
}
label.on("drag", createDragHandler(hostEl, hostModel.getModel("labelLine")));
}
} else {
label.off("drag");
label.cursor = defaultLabelAttr.cursor;
}
}
};
LabelManager2.prototype.layout = function(api) {
var width = api.getWidth();
var height = api.getHeight();
var labelList = prepareLayoutList(this._labelList);
var labelsNeedsAdjustOnX = filter(labelList, function(item) {
return item.layoutOption.moveOverlap === "shiftX";
});
var labelsNeedsAdjustOnY = filter(labelList, function(item) {
return item.layoutOption.moveOverlap === "shiftY";
});
shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);
shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);
var labelsNeedsHideOverlap = filter(labelList, function(item) {
return item.layoutOption.hideOverlap;
});
hideOverlap(labelsNeedsHideOverlap);
};
LabelManager2.prototype.processLabelsOverall = function() {
var _this = this;
each$f(this._chartViewList, function(chartView) {
var seriesModel = chartView.__model;
var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;
var animationEnabled = seriesModel.isAnimationEnabled();
chartView.group.traverse(function(child) {
if (child.ignore && !child.forceLabelAnimation) {
return true;
}
var needsUpdateLabelLine = !ignoreLabelLineUpdate;
var label = child.getTextContent();
if (!needsUpdateLabelLine && label) {
needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;
}
if (needsUpdateLabelLine) {
_this._updateLabelLine(child, seriesModel);
}
if (animationEnabled) {
_this._animateLabels(child, seriesModel);
}
});
});
};
LabelManager2.prototype._updateLabelLine = function(el, seriesModel) {
var textEl = el.getTextContent();
var ecData = getECData(el);
var dataIndex = ecData.dataIndex;
if (textEl && dataIndex != null) {
var data = seriesModel.getData(ecData.dataType);
var itemModel = data.getItemModel(dataIndex);
var defaultStyle = {};
var visualStyle = data.getItemVisual(dataIndex, "style");
if (visualStyle) {
var visualType = data.getVisual("drawType");
defaultStyle.stroke = visualStyle[visualType];
}
var labelLineModel = itemModel.getModel("labelLine");
setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);
updateLabelLinePoints(el, labelLineModel);
}
};
LabelManager2.prototype._animateLabels = function(el, seriesModel) {
var textEl = el.getTextContent();
var guideLine = el.getTextGuideLine();
if (textEl && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) {
var layoutStore = labelLayoutInnerStore(textEl);
var oldLayout = layoutStore.oldLayout;
var ecData = getECData(el);
var dataIndex = ecData.dataIndex;
var newProps = {
x: textEl.x,
y: textEl.y,
rotation: textEl.rotation
};
var data = seriesModel.getData(ecData.dataType);
if (!oldLayout) {
textEl.attr(newProps);
if (!labelInner(textEl).valueAnimation) {
var oldOpacity = retrieve2(textEl.style.opacity, 1);
textEl.style.opacity = 0;
initProps(textEl, {
style: {
opacity: oldOpacity
}
}, seriesModel, dataIndex);
}
} else {
textEl.attr(oldLayout);
var prevStates = el.prevStates;
if (prevStates) {
if (indexOf(prevStates, "select") >= 0) {
textEl.attr(layoutStore.oldLayoutSelect);
}
if (indexOf(prevStates, "emphasis") >= 0) {
textEl.attr(layoutStore.oldLayoutEmphasis);
}
}
updateProps$1(textEl, newProps, seriesModel, dataIndex);
}
layoutStore.oldLayout = newProps;
if (textEl.states.select) {
var layoutSelect = layoutStore.oldLayoutSelect = {};
extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);
extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);
}
if (textEl.states.emphasis) {
var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};
extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);
extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);
}
animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);
}
if (guideLine && !guideLine.ignore && !guideLine.invisible) {
var layoutStore = labelLineAnimationStore(guideLine);
var oldLayout = layoutStore.oldLayout;
var newLayout = {
points: guideLine.shape.points
};
if (!oldLayout) {
guideLine.setShape(newLayout);
guideLine.style.strokePercent = 0;
initProps(guideLine, {
style: {
strokePercent: 1
}
}, seriesModel);
} else {
guideLine.attr({
shape: oldLayout
});
updateProps$1(guideLine, {
shape: newLayout
}, seriesModel);
}
layoutStore.oldLayout = newLayout;
}
};
return LabelManager2;
})()
);
var getLabelManager = makeInner();
function installLabelLayout(registers) {
registers.registerUpdateLifecycle("series:beforeupdate", function(ecModel, api, params) {
var labelManager = getLabelManager(api).labelManager;
if (!labelManager) {
labelManager = getLabelManager(api).labelManager = new LabelManager();
}
labelManager.clearLabels();
});
registers.registerUpdateLifecycle("series:layoutlabels", function(ecModel, api, params) {
var labelManager = getLabelManager(api).labelManager;
params.updatedSeries.forEach(function(series) {
labelManager.addLabelsOfSeries(api.getViewOfSeriesModel(series));
});
labelManager.updateLayoutConfig(api);
labelManager.layout(api);
labelManager.processLabelsOverall();
});
}
var LineSeriesModel = (
/** @class */
(function(_super) {
__extends(LineSeriesModel2, _super);
function LineSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = LineSeriesModel2.type;
_this.hasSymbolVisual = true;
return _this;
}
LineSeriesModel2.prototype.getInitialData = function(option) {
return createSeriesData(null, this, {
useEncodeDefaulter: true
});
};
LineSeriesModel2.prototype.getLegendIcon = function(opt) {
var group = new Group$3();
var line = createSymbol$1("line", 0, opt.itemHeight / 2, opt.itemWidth, 0, opt.lineStyle.stroke, false);
group.add(line);
line.setStyle(opt.lineStyle);
var visualType = this.getData().getVisual("symbol");
var visualRotate = this.getData().getVisual("symbolRotate");
var symbolType = visualType === "none" ? "circle" : visualType;
var size = opt.itemHeight * 0.8;
var symbol = createSymbol$1(symbolType, (opt.itemWidth - size) / 2, (opt.itemHeight - size) / 2, size, size, opt.itemStyle.fill);
group.add(symbol);
symbol.setStyle(opt.itemStyle);
var symbolRotate = opt.iconRotate === "inherit" ? visualRotate : opt.iconRotate || 0;
symbol.rotation = symbolRotate * Math.PI / 180;
symbol.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]);
if (symbolType.indexOf("empty") > -1) {
symbol.style.stroke = symbol.style.fill;
symbol.style.fill = "#fff";
symbol.style.lineWidth = 2;
}
return group;
};
LineSeriesModel2.type = "series.line";
LineSeriesModel2.dependencies = ["grid", "polar"];
LineSeriesModel2.defaultOption = {
// zlevel: 0,
z: 3,
coordinateSystem: "cartesian2d",
legendHoverLink: true,
clip: true,
label: {
position: "top"
},
// itemStyle: {
// },
endLabel: {
show: false,
valueAnimation: true,
distance: 8
},
lineStyle: {
width: 2,
type: "solid"
},
emphasis: {
scale: true
},
// areaStyle: {
// origin of areaStyle. Valid values:
// `'auto'/null/undefined`: from axisLine to data
// `'start'`: from min to data
// `'end'`: from data to max
// origin: 'auto'
// },
// false, 'start', 'end', 'middle'
step: false,
// Disabled if step is true
smooth: false,
smoothMonotone: null,
symbol: "emptyCircle",
symbolSize: 4,
symbolRotate: null,
showSymbol: true,
// `false`: follow the label interval strategy.
// `true`: show all symbols.
// `'auto'`: If possible, show all symbols, otherwise
// follow the label interval strategy.
showAllSymbol: "auto",
// Whether to connect break point.
connectNulls: false,
// Sampling for large data. Can be: 'average', 'max', 'min', 'sum', 'lttb'.
sampling: "none",
animationEasing: "linear",
// Disable progressive
progressive: 0,
hoverLayerThreshold: Infinity,
universalTransition: {
divideShape: "clone"
},
triggerLineEvent: false
};
return LineSeriesModel2;
})(SeriesModel)
);
function getDefaultLabel(data, dataIndex) {
var labelDims = data.mapDimensionsAll("defaultedLabel");
var len2 = labelDims.length;
if (len2 === 1) {
var rawVal = retrieveRawValue(data, dataIndex, labelDims[0]);
return rawVal != null ? rawVal + "" : null;
} else if (len2) {
var vals = [];
for (var i = 0; i < labelDims.length; i++) {
vals.push(retrieveRawValue(data, dataIndex, labelDims[i]));
}
return vals.join(" ");
}
}
function getDefaultInterpolatedLabel(data, interpolatedValue) {
var labelDims = data.mapDimensionsAll("defaultedLabel");
if (!isArray$1(interpolatedValue)) {
return interpolatedValue + "";
}
var vals = [];
for (var i = 0; i < labelDims.length; i++) {
var dimIndex = data.getDimensionIndex(labelDims[i]);
if (dimIndex >= 0) {
vals.push(interpolatedValue[dimIndex]);
}
}
return vals.join(" ");
}
var Symbol$1 = (
/** @class */
(function(_super) {
__extends(Symbol2, _super);
function Symbol2(data, idx, seriesScope, opts) {
var _this = _super.call(this) || this;
_this.updateData(data, idx, seriesScope, opts);
return _this;
}
Symbol2.prototype._createSymbol = function(symbolType, data, idx, symbolSize, keepAspect) {
this.removeAll();
var symbolPath = createSymbol$1(symbolType, -1, -1, 2, 2, null, keepAspect);
symbolPath.attr({
z2: 100,
culling: true,
scaleX: symbolSize[0] / 2,
scaleY: symbolSize[1] / 2
});
symbolPath.drift = driftSymbol;
this._symbolType = symbolType;
this.add(symbolPath);
};
Symbol2.prototype.stopSymbolAnimation = function(toLastFrame) {
this.childAt(0).stopAnimation(null, toLastFrame);
};
Symbol2.prototype.getSymbolType = function() {
return this._symbolType;
};
Symbol2.prototype.getSymbolPath = function() {
return this.childAt(0);
};
Symbol2.prototype.highlight = function() {
enterEmphasis(this.childAt(0));
};
Symbol2.prototype.downplay = function() {
leaveEmphasis(this.childAt(0));
};
Symbol2.prototype.setZ = function(zlevel, z) {
var symbolPath = this.childAt(0);
symbolPath.zlevel = zlevel;
symbolPath.z = z;
};
Symbol2.prototype.setDraggable = function(draggable, hasCursorOption) {
var symbolPath = this.childAt(0);
symbolPath.draggable = draggable;
symbolPath.cursor = !hasCursorOption && draggable ? "move" : symbolPath.cursor;
};
Symbol2.prototype.updateData = function(data, idx, seriesScope, opts) {
this.silent = false;
var symbolType = data.getItemVisual(idx, "symbol") || "circle";
var seriesModel = data.hostModel;
var symbolSize = Symbol2.getSymbolSize(data, idx);
var isInit = symbolType !== this._symbolType;
var disableAnimation = opts && opts.disableAnimation;
if (isInit) {
var keepAspect = data.getItemVisual(idx, "symbolKeepAspect");
this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);
} else {
var symbolPath = this.childAt(0);
symbolPath.silent = false;
var target = {
scaleX: symbolSize[0] / 2,
scaleY: symbolSize[1] / 2
};
disableAnimation ? symbolPath.attr(target) : updateProps$1(symbolPath, target, seriesModel, idx);
saveOldStyle(symbolPath);
}
this._updateCommon(data, idx, symbolSize, seriesScope, opts);
if (isInit) {
var symbolPath = this.childAt(0);
if (!disableAnimation) {
var target = {
scaleX: this._sizeX,
scaleY: this._sizeY,
style: {
// Always fadeIn. Because it has fadeOut animation when symbol is removed..
opacity: symbolPath.style.opacity
}
};
symbolPath.scaleX = symbolPath.scaleY = 0;
symbolPath.style.opacity = 0;
initProps(symbolPath, target, seriesModel, idx);
}
}
if (disableAnimation) {
this.childAt(0).stopAnimation("leave");
}
};
Symbol2.prototype._updateCommon = function(data, idx, symbolSize, seriesScope, opts) {
var symbolPath = this.childAt(0);
var seriesModel = data.hostModel;
var emphasisItemStyle;
var blurItemStyle;
var selectItemStyle;
var focus;
var blurScope;
var emphasisDisabled;
var labelStatesModels;
var hoverScale;
var cursorStyle;
if (seriesScope) {
emphasisItemStyle = seriesScope.emphasisItemStyle;
blurItemStyle = seriesScope.blurItemStyle;
selectItemStyle = seriesScope.selectItemStyle;
focus = seriesScope.focus;
blurScope = seriesScope.blurScope;
labelStatesModels = seriesScope.labelStatesModels;
hoverScale = seriesScope.hoverScale;
cursorStyle = seriesScope.cursorStyle;
emphasisDisabled = seriesScope.emphasisDisabled;
}
if (!seriesScope || data.hasItemOption) {
var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx);
var emphasisModel = itemModel.getModel("emphasis");
emphasisItemStyle = emphasisModel.getModel("itemStyle").getItemStyle();
selectItemStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle();
blurItemStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle();
focus = emphasisModel.get("focus");
blurScope = emphasisModel.get("blurScope");
emphasisDisabled = emphasisModel.get("disabled");
labelStatesModels = getLabelStatesModels(itemModel);
hoverScale = emphasisModel.getShallow("scale");
cursorStyle = itemModel.getShallow("cursor");
}
var symbolRotate = data.getItemVisual(idx, "symbolRotate");
symbolPath.attr("rotation", (symbolRotate || 0) * Math.PI / 180 || 0);
var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, "symbolOffset"), symbolSize);
if (symbolOffset) {
symbolPath.x = symbolOffset[0];
symbolPath.y = symbolOffset[1];
}
cursorStyle && symbolPath.attr("cursor", cursorStyle);
var symbolStyle = data.getItemVisual(idx, "style");
var visualColor = symbolStyle.fill;
if (symbolPath instanceof ZRImage) {
var pathStyle = symbolPath.style;
symbolPath.useStyle(extend({
// TODO other properties like x, y ?
image: pathStyle.image,
x: pathStyle.x,
y: pathStyle.y,
width: pathStyle.width,
height: pathStyle.height
}, symbolStyle));
} else {
if (symbolPath.__isEmptyBrush) {
symbolPath.useStyle(extend({}, symbolStyle));
} else {
symbolPath.useStyle(symbolStyle);
}
symbolPath.style.decal = null;
symbolPath.setColor(visualColor, opts && opts.symbolInnerColor);
symbolPath.style.strokeNoScale = true;
}
var liftZ = data.getItemVisual(idx, "liftZ");
var z2Origin = this._z2;
if (liftZ != null) {
if (z2Origin == null) {
this._z2 = symbolPath.z2;
symbolPath.z2 += liftZ;
}
} else if (z2Origin != null) {
symbolPath.z2 = z2Origin;
this._z2 = null;
}
var useNameLabel = opts && opts.useNameLabel;
setLabelStyle(symbolPath, labelStatesModels, {
labelFetcher: seriesModel,
labelDataIndex: idx,
defaultText: getLabelDefaultText,
inheritColor: visualColor,
defaultOpacity: symbolStyle.opacity
});
function getLabelDefaultText(idx2) {
return useNameLabel ? data.getName(idx2) : getDefaultLabel(data, idx2);
}
this._sizeX = symbolSize[0] / 2;
this._sizeY = symbolSize[1] / 2;
var emphasisState = symbolPath.ensureState("emphasis");
emphasisState.style = emphasisItemStyle;
symbolPath.ensureState("select").style = selectItemStyle;
symbolPath.ensureState("blur").style = blurItemStyle;
var scaleRatio = hoverScale == null || hoverScale === true ? Math.max(1.1, 3 / this._sizeY) : isFinite(hoverScale) && hoverScale > 0 ? +hoverScale : 1;
emphasisState.scaleX = this._sizeX * scaleRatio;
emphasisState.scaleY = this._sizeY * scaleRatio;
this.setSymbolScale(1);
toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);
};
Symbol2.prototype.setSymbolScale = function(scale2) {
this.scaleX = this.scaleY = scale2;
};
Symbol2.prototype.fadeOut = function(cb, seriesModel, opt) {
var symbolPath = this.childAt(0);
var dataIndex = getECData(this).dataIndex;
var animationOpt = opt && opt.animation;
this.silent = symbolPath.silent = true;
if (opt && opt.fadeLabel) {
var textContent = symbolPath.getTextContent();
if (textContent) {
removeElement(textContent, {
style: {
opacity: 0
}
}, seriesModel, {
dataIndex,
removeOpt: animationOpt,
cb: function() {
symbolPath.removeTextContent();
}
});
}
} else {
symbolPath.removeTextContent();
}
removeElement(symbolPath, {
style: {
opacity: 0
},
scaleX: 0,
scaleY: 0
}, seriesModel, {
dataIndex,
cb,
removeOpt: animationOpt
});
};
Symbol2.getSymbolSize = function(data, idx) {
return normalizeSymbolSize(data.getItemVisual(idx, "symbolSize"));
};
return Symbol2;
})(Group$3)
);
function driftSymbol(dx, dy) {
this.parent.drift(dx, dy);
}
function symbolNeedsDraw$1(data, point, idx, opt) {
return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx)) && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, "symbol") !== "none";
}
function normalizeUpdateOpt(opt) {
if (opt != null && !isObject$3(opt)) {
opt = {
isIgnore: opt
};
}
return opt || {};
}
function makeSeriesScope$2(data) {
var seriesModel = data.hostModel;
var emphasisModel = seriesModel.getModel("emphasis");
return {
emphasisItemStyle: emphasisModel.getModel("itemStyle").getItemStyle(),
blurItemStyle: seriesModel.getModel(["blur", "itemStyle"]).getItemStyle(),
selectItemStyle: seriesModel.getModel(["select", "itemStyle"]).getItemStyle(),
focus: emphasisModel.get("focus"),
blurScope: emphasisModel.get("blurScope"),
emphasisDisabled: emphasisModel.get("disabled"),
hoverScale: emphasisModel.get("scale"),
labelStatesModels: getLabelStatesModels(seriesModel),
cursorStyle: seriesModel.get("cursor")
};
}
var SymbolDraw = (
/** @class */
(function() {
function SymbolDraw2(SymbolCtor) {
this.group = new Group$3();
this._SymbolCtor = SymbolCtor || Symbol$1;
}
SymbolDraw2.prototype.updateData = function(data, opt) {
this._progressiveEls = null;
opt = normalizeUpdateOpt(opt);
var group = this.group;
var seriesModel = data.hostModel;
var oldData = this._data;
var SymbolCtor = this._SymbolCtor;
var disableAnimation = opt.disableAnimation;
var seriesScope = makeSeriesScope$2(data);
var symbolUpdateOpt = {
disableAnimation
};
var getSymbolPoint = opt.getSymbolPoint || function(idx) {
return data.getItemLayout(idx);
};
if (!oldData) {
group.removeAll();
}
data.diff(oldData).add(function(newIdx) {
var point = getSymbolPoint(newIdx);
if (symbolNeedsDraw$1(data, point, newIdx, opt)) {
var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);
symbolEl.setPosition(point);
data.setItemGraphicEl(newIdx, symbolEl);
group.add(symbolEl);
}
}).update(function(newIdx, oldIdx) {
var symbolEl = oldData.getItemGraphicEl(oldIdx);
var point = getSymbolPoint(newIdx);
if (!symbolNeedsDraw$1(data, point, newIdx, opt)) {
group.remove(symbolEl);
return;
}
var newSymbolType = data.getItemVisual(newIdx, "symbol") || "circle";
var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType();
if (!symbolEl || oldSymbolType && oldSymbolType !== newSymbolType) {
group.remove(symbolEl);
symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);
symbolEl.setPosition(point);
} else {
symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt);
var target = {
x: point[0],
y: point[1]
};
disableAnimation ? symbolEl.attr(target) : updateProps$1(symbolEl, target, seriesModel);
}
group.add(symbolEl);
data.setItemGraphicEl(newIdx, symbolEl);
}).remove(function(oldIdx) {
var el = oldData.getItemGraphicEl(oldIdx);
el && el.fadeOut(function() {
group.remove(el);
}, seriesModel);
}).execute();
this._getSymbolPoint = getSymbolPoint;
this._data = data;
};
SymbolDraw2.prototype.updateLayout = function() {
var _this = this;
var data = this._data;
if (data) {
data.eachItemGraphicEl(function(el, idx) {
var point = _this._getSymbolPoint(idx);
el.setPosition(point);
el.markRedraw();
});
}
};
SymbolDraw2.prototype.incrementalPrepareUpdate = function(data) {
this._seriesScope = makeSeriesScope$2(data);
this._data = null;
this.group.removeAll();
};
SymbolDraw2.prototype.incrementalUpdate = function(taskParams, data, opt) {
this._progressiveEls = [];
opt = normalizeUpdateOpt(opt);
function updateIncrementalAndHover(el2) {
if (!el2.isGroup) {
el2.incremental = true;
el2.ensureState("emphasis").hoverLayer = true;
}
}
for (var idx = taskParams.start; idx < taskParams.end; idx++) {
var point = data.getItemLayout(idx);
if (symbolNeedsDraw$1(data, point, idx, opt)) {
var el = new this._SymbolCtor(data, idx, this._seriesScope);
el.traverse(updateIncrementalAndHover);
el.setPosition(point);
this.group.add(el);
data.setItemGraphicEl(idx, el);
this._progressiveEls.push(el);
}
}
};
SymbolDraw2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
SymbolDraw2.prototype.remove = function(enableAnimation) {
var group = this.group;
var data = this._data;
if (data && enableAnimation) {
data.eachItemGraphicEl(function(el) {
el.fadeOut(function() {
group.remove(el);
}, data.hostModel);
});
} else {
group.removeAll();
}
};
return SymbolDraw2;
})()
);
function prepareDataCoordInfo(coordSys, data, valueOrigin) {
var baseAxis = coordSys.getBaseAxis();
var valueAxis2 = coordSys.getOtherAxis(baseAxis);
var valueStart = getValueStart(valueAxis2, valueOrigin);
var baseAxisDim = baseAxis.dim;
var valueAxisDim = valueAxis2.dim;
var valueDim = data.mapDimension(valueAxisDim);
var baseDim = data.mapDimension(baseAxisDim);
var baseDataOffset = valueAxisDim === "x" || valueAxisDim === "radius" ? 1 : 0;
var dims = map$1(coordSys.dimensions, function(coordDim) {
return data.mapDimension(coordDim);
});
var stacked = false;
var stackResultDim = data.getCalculationInfo("stackResultDimension");
if (isDimensionStacked(
data,
dims[0]
/* , dims[1] */
)) {
stacked = true;
dims[0] = stackResultDim;
}
if (isDimensionStacked(
data,
dims[1]
/* , dims[0] */
)) {
stacked = true;
dims[1] = stackResultDim;
}
return {
dataDimsForPoint: dims,
valueStart,
valueAxisDim,
baseAxisDim,
stacked: !!stacked,
valueDim,
baseDim,
baseDataOffset,
stackedOverDimension: data.getCalculationInfo("stackedOverDimension")
};
}
function getValueStart(valueAxis2, valueOrigin) {
var valueStart = 0;
var extent = valueAxis2.scale.getExtent();
if (valueOrigin === "start") {
valueStart = extent[0];
} else if (valueOrigin === "end") {
valueStart = extent[1];
} else if (isNumber(valueOrigin) && !isNaN(valueOrigin)) {
valueStart = valueOrigin;
} else {
if (extent[0] > 0) {
valueStart = extent[0];
} else if (extent[1] < 0) {
valueStart = extent[1];
}
}
return valueStart;
}
function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {
var value = NaN;
if (dataCoordInfo.stacked) {
value = data.get(data.getCalculationInfo("stackedOverDimension"), idx);
}
if (isNaN(value)) {
value = dataCoordInfo.valueStart;
}
var baseDataOffset = dataCoordInfo.baseDataOffset;
var stackedData = [];
stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);
stackedData[1 - baseDataOffset] = value;
return coordSys.dataToPoint(stackedData);
}
function diffData(oldData, newData) {
var diffResult = [];
newData.diff(oldData).add(function(idx) {
diffResult.push({
cmd: "+",
idx
});
}).update(function(newIdx, oldIdx) {
diffResult.push({
cmd: "=",
idx: oldIdx,
idx1: newIdx
});
}).remove(function(idx) {
diffResult.push({
cmd: "-",
idx
});
}).execute();
return diffResult;
}
function lineAnimationDiff(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {
var diff = diffData(oldData, newData);
var currPoints = [];
var nextPoints = [];
var currStackedPoints = [];
var nextStackedPoints = [];
var status = [];
var sortedIndices = [];
var rawIndices = [];
var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);
var oldPoints = oldData.getLayout("points") || [];
var newPoints = newData.getLayout("points") || [];
for (var i = 0; i < diff.length; i++) {
var diffItem = diff[i];
var pointAdded = true;
var oldIdx2 = void 0;
var newIdx2 = void 0;
switch (diffItem.cmd) {
case "=":
oldIdx2 = diffItem.idx * 2;
newIdx2 = diffItem.idx1 * 2;
var currentX = oldPoints[oldIdx2];
var currentY = oldPoints[oldIdx2 + 1];
var nextX = newPoints[newIdx2];
var nextY = newPoints[newIdx2 + 1];
if (isNaN(currentX) || isNaN(currentY)) {
currentX = nextX;
currentY = nextY;
}
currPoints.push(currentX, currentY);
nextPoints.push(nextX, nextY);
currStackedPoints.push(oldStackedOnPoints[oldIdx2], oldStackedOnPoints[oldIdx2 + 1]);
nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);
rawIndices.push(newData.getRawIndex(diffItem.idx1));
break;
case "+":
var newIdx = diffItem.idx;
var newDataDimsForPoint = newDataOldCoordInfo.dataDimsForPoint;
var oldPt = oldCoordSys.dataToPoint([newData.get(newDataDimsForPoint[0], newIdx), newData.get(newDataDimsForPoint[1], newIdx)]);
newIdx2 = newIdx * 2;
currPoints.push(oldPt[0], oldPt[1]);
nextPoints.push(newPoints[newIdx2], newPoints[newIdx2 + 1]);
var stackedOnPoint = getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, newIdx);
currStackedPoints.push(stackedOnPoint[0], stackedOnPoint[1]);
nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);
rawIndices.push(newData.getRawIndex(newIdx));
break;
case "-":
pointAdded = false;
}
if (pointAdded) {
status.push(diffItem);
sortedIndices.push(sortedIndices.length);
}
}
sortedIndices.sort(function(a, b) {
return rawIndices[a] - rawIndices[b];
});
var len2 = currPoints.length;
var sortedCurrPoints = createFloat32Array(len2);
var sortedNextPoints = createFloat32Array(len2);
var sortedCurrStackedPoints = createFloat32Array(len2);
var sortedNextStackedPoints = createFloat32Array(len2);
var sortedStatus = [];
for (var i = 0; i < sortedIndices.length; i++) {
var idx = sortedIndices[i];
var i2 = i * 2;
var idx2 = idx * 2;
sortedCurrPoints[i2] = currPoints[idx2];
sortedCurrPoints[i2 + 1] = currPoints[idx2 + 1];
sortedNextPoints[i2] = nextPoints[idx2];
sortedNextPoints[i2 + 1] = nextPoints[idx2 + 1];
sortedCurrStackedPoints[i2] = currStackedPoints[idx2];
sortedCurrStackedPoints[i2 + 1] = currStackedPoints[idx2 + 1];
sortedNextStackedPoints[i2] = nextStackedPoints[idx2];
sortedNextStackedPoints[i2 + 1] = nextStackedPoints[idx2 + 1];
sortedStatus[i] = status[idx];
}
return {
current: sortedCurrPoints,
next: sortedNextPoints,
stackedOnCurrent: sortedCurrStackedPoints,
stackedOnNext: sortedNextStackedPoints,
status: sortedStatus
};
}
var mathMin$5 = Math.min;
var mathMax$5 = Math.max;
function isPointNull$1(x, y) {
return isNaN(x) || isNaN(y);
}
function drawSegment(ctx, points2, start, segLen, allLen, dir3, smooth, smoothMonotone, connectNulls) {
var prevX;
var prevY;
var cpx0;
var cpy0;
var cpx1;
var cpy1;
var idx = start;
var k = 0;
for (; k < segLen; k++) {
var x = points2[idx * 2];
var y = points2[idx * 2 + 1];
if (idx >= allLen || idx < 0) {
break;
}
if (isPointNull$1(x, y)) {
if (connectNulls) {
idx += dir3;
continue;
}
break;
}
if (idx === start) {
ctx[dir3 > 0 ? "moveTo" : "lineTo"](x, y);
cpx0 = x;
cpy0 = y;
} else {
var dx = x - prevX;
var dy = y - prevY;
if (dx * dx + dy * dy < 0.5) {
idx += dir3;
continue;
}
if (smooth > 0) {
var nextIdx = idx + dir3;
var nextX = points2[nextIdx * 2];
var nextY = points2[nextIdx * 2 + 1];
while (nextX === x && nextY === y && k < segLen) {
k++;
nextIdx += dir3;
idx += dir3;
nextX = points2[nextIdx * 2];
nextY = points2[nextIdx * 2 + 1];
x = points2[idx * 2];
y = points2[idx * 2 + 1];
dx = x - prevX;
dy = y - prevY;
}
var tmpK = k + 1;
if (connectNulls) {
while (isPointNull$1(nextX, nextY) && tmpK < segLen) {
tmpK++;
nextIdx += dir3;
nextX = points2[nextIdx * 2];
nextY = points2[nextIdx * 2 + 1];
}
}
var ratioNextSeg = 0.5;
var vx = 0;
var vy = 0;
var nextCpx0 = void 0;
var nextCpy0 = void 0;
if (tmpK >= segLen || isPointNull$1(nextX, nextY)) {
cpx1 = x;
cpy1 = y;
} else {
vx = nextX - prevX;
vy = nextY - prevY;
var dx0 = x - prevX;
var dx1 = nextX - x;
var dy0 = y - prevY;
var dy1 = nextY - y;
var lenPrevSeg = void 0;
var lenNextSeg = void 0;
if (smoothMonotone === "x") {
lenPrevSeg = Math.abs(dx0);
lenNextSeg = Math.abs(dx1);
var dir_1 = vx > 0 ? 1 : -1;
cpx1 = x - dir_1 * lenPrevSeg * smooth;
cpy1 = y;
nextCpx0 = x + dir_1 * lenNextSeg * smooth;
nextCpy0 = y;
} else if (smoothMonotone === "y") {
lenPrevSeg = Math.abs(dy0);
lenNextSeg = Math.abs(dy1);
var dir_2 = vy > 0 ? 1 : -1;
cpx1 = x;
cpy1 = y - dir_2 * lenPrevSeg * smooth;
nextCpx0 = x;
nextCpy0 = y + dir_2 * lenNextSeg * smooth;
} else {
lenPrevSeg = Math.sqrt(dx0 * dx0 + dy0 * dy0);
lenNextSeg = Math.sqrt(dx1 * dx1 + dy1 * dy1);
ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);
cpx1 = x - vx * smooth * (1 - ratioNextSeg);
cpy1 = y - vy * smooth * (1 - ratioNextSeg);
nextCpx0 = x + vx * smooth * ratioNextSeg;
nextCpy0 = y + vy * smooth * ratioNextSeg;
nextCpx0 = mathMin$5(nextCpx0, mathMax$5(nextX, x));
nextCpy0 = mathMin$5(nextCpy0, mathMax$5(nextY, y));
nextCpx0 = mathMax$5(nextCpx0, mathMin$5(nextX, x));
nextCpy0 = mathMax$5(nextCpy0, mathMin$5(nextY, y));
vx = nextCpx0 - x;
vy = nextCpy0 - y;
cpx1 = x - vx * lenPrevSeg / lenNextSeg;
cpy1 = y - vy * lenPrevSeg / lenNextSeg;
cpx1 = mathMin$5(cpx1, mathMax$5(prevX, x));
cpy1 = mathMin$5(cpy1, mathMax$5(prevY, y));
cpx1 = mathMax$5(cpx1, mathMin$5(prevX, x));
cpy1 = mathMax$5(cpy1, mathMin$5(prevY, y));
vx = x - cpx1;
vy = y - cpy1;
nextCpx0 = x + vx * lenNextSeg / lenPrevSeg;
nextCpy0 = y + vy * lenNextSeg / lenPrevSeg;
}
}
ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, x, y);
cpx0 = nextCpx0;
cpy0 = nextCpy0;
} else {
ctx.lineTo(x, y);
}
}
prevX = x;
prevY = y;
idx += dir3;
}
return k;
}
var ECPolylineShape = (
/** @class */
/* @__PURE__ */ (function() {
function ECPolylineShape2() {
this.smooth = 0;
this.smoothConstraint = true;
}
return ECPolylineShape2;
})()
);
var ECPolyline = (
/** @class */
(function(_super) {
__extends(ECPolyline2, _super);
function ECPolyline2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "ec-polyline";
return _this;
}
ECPolyline2.prototype.getDefaultStyle = function() {
return {
stroke: "#000",
fill: null
};
};
ECPolyline2.prototype.getDefaultShape = function() {
return new ECPolylineShape();
};
ECPolyline2.prototype.buildPath = function(ctx, shape) {
var points2 = shape.points;
var i = 0;
var len2 = points2.length / 2;
if (shape.connectNulls) {
for (; len2 > 0; len2--) {
if (!isPointNull$1(points2[len2 * 2 - 2], points2[len2 * 2 - 1])) {
break;
}
}
for (; i < len2; i++) {
if (!isPointNull$1(points2[i * 2], points2[i * 2 + 1])) {
break;
}
}
}
while (i < len2) {
i += drawSegment(ctx, points2, i, len2, len2, 1, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;
}
};
ECPolyline2.prototype.getPointOn = function(xOrY, dim) {
if (!this.path) {
this.createPathProxy();
this.buildPath(this.path, this.shape);
}
var path = this.path;
var data = path.data;
var CMD2 = PathProxy.CMD;
var x0;
var y0;
var isDimX = dim === "x";
var roots = [];
for (var i = 0; i < data.length; ) {
var cmd = data[i++];
var x = void 0;
var y = void 0;
var x2 = void 0;
var y2 = void 0;
var x3 = void 0;
var y3 = void 0;
var t = void 0;
switch (cmd) {
case CMD2.M:
x0 = data[i++];
y0 = data[i++];
break;
case CMD2.L:
x = data[i++];
y = data[i++];
t = isDimX ? (xOrY - x0) / (x - x0) : (xOrY - y0) / (y - y0);
if (t <= 1 && t >= 0) {
var val = isDimX ? (y - y0) * t + y0 : (x - x0) * t + x0;
return isDimX ? [xOrY, val] : [val, xOrY];
}
x0 = x;
y0 = y;
break;
case CMD2.C:
x = data[i++];
y = data[i++];
x2 = data[i++];
y2 = data[i++];
x3 = data[i++];
y3 = data[i++];
var nRoot = isDimX ? cubicRootAt(x0, x, x2, x3, xOrY, roots) : cubicRootAt(y0, y, y2, y3, xOrY, roots);
if (nRoot > 0) {
for (var i_1 = 0; i_1 < nRoot; i_1++) {
var t_1 = roots[i_1];
if (t_1 <= 1 && t_1 >= 0) {
var val = isDimX ? cubicAt(y0, y, y2, y3, t_1) : cubicAt(x0, x, x2, x3, t_1);
return isDimX ? [xOrY, val] : [val, xOrY];
}
}
}
x0 = x3;
y0 = y3;
break;
}
}
};
return ECPolyline2;
})(Path)
);
var ECPolygonShape = (
/** @class */
(function(_super) {
__extends(ECPolygonShape2, _super);
function ECPolygonShape2() {
return _super !== null && _super.apply(this, arguments) || this;
}
return ECPolygonShape2;
})(ECPolylineShape)
);
var ECPolygon = (
/** @class */
(function(_super) {
__extends(ECPolygon2, _super);
function ECPolygon2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "ec-polygon";
return _this;
}
ECPolygon2.prototype.getDefaultShape = function() {
return new ECPolygonShape();
};
ECPolygon2.prototype.buildPath = function(ctx, shape) {
var points2 = shape.points;
var stackedOnPoints = shape.stackedOnPoints;
var i = 0;
var len2 = points2.length / 2;
var smoothMonotone = shape.smoothMonotone;
if (shape.connectNulls) {
for (; len2 > 0; len2--) {
if (!isPointNull$1(points2[len2 * 2 - 2], points2[len2 * 2 - 1])) {
break;
}
}
for (; i < len2; i++) {
if (!isPointNull$1(points2[i * 2], points2[i * 2 + 1])) {
break;
}
}
}
while (i < len2) {
var k = drawSegment(ctx, points2, i, len2, len2, 1, shape.smooth, smoothMonotone, shape.connectNulls);
drawSegment(ctx, stackedOnPoints, i + k - 1, k, len2, -1, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);
i += k + 1;
ctx.closePath();
}
};
return ECPolygon2;
})(Path)
);
function createGridClipPath(cartesian, hasAnimation, seriesModel, done, during) {
var rect = cartesian.getArea();
var x = rect.x;
var y = rect.y;
var width = rect.width;
var height = rect.height;
var lineWidth = seriesModel.get(["lineStyle", "width"]) || 0;
x -= lineWidth / 2;
y -= lineWidth / 2;
width += lineWidth;
height += lineWidth;
width = Math.ceil(width);
if (x !== Math.floor(x)) {
x = Math.floor(x);
width++;
}
var clipPath = new Rect$2({
shape: {
x,
y,
width,
height
}
});
if (hasAnimation) {
var baseAxis = cartesian.getBaseAxis();
var isHorizontal = baseAxis.isHorizontal();
var isAxisInversed = baseAxis.inverse;
if (isHorizontal) {
if (isAxisInversed) {
clipPath.shape.x += width;
}
clipPath.shape.width = 0;
} else {
if (!isAxisInversed) {
clipPath.shape.y += height;
}
clipPath.shape.height = 0;
}
var duringCb = isFunction(during) ? function(percent) {
during(percent, clipPath);
} : null;
initProps(clipPath, {
shape: {
width,
height,
x,
y
}
}, seriesModel, null, done, duringCb);
}
return clipPath;
}
function createPolarClipPath(polar, hasAnimation, seriesModel) {
var sectorArea = polar.getArea();
var r0 = round$1(sectorArea.r0, 1);
var r = round$1(sectorArea.r, 1);
var clipPath = new Sector({
shape: {
cx: round$1(polar.cx, 1),
cy: round$1(polar.cy, 1),
r0,
r,
startAngle: sectorArea.startAngle,
endAngle: sectorArea.endAngle,
clockwise: sectorArea.clockwise
}
});
if (hasAnimation) {
var isRadial = polar.getBaseAxis().dim === "angle";
if (isRadial) {
clipPath.shape.endAngle = sectorArea.startAngle;
} else {
clipPath.shape.r = r0;
}
initProps(clipPath, {
shape: {
endAngle: sectorArea.endAngle,
r
}
}, seriesModel);
}
return clipPath;
}
function createClipPath(coordSys, hasAnimation, seriesModel, done, during) {
if (!coordSys) {
return null;
} else if (coordSys.type === "polar") {
return createPolarClipPath(coordSys, hasAnimation, seriesModel);
} else if (coordSys.type === "cartesian2d") {
return createGridClipPath(coordSys, hasAnimation, seriesModel, done, during);
}
return null;
}
function isCoordinateSystemType(coordSys, type) {
return coordSys.type === type;
}
function isPointsSame(points1, points2) {
if (points1.length !== points2.length) {
return;
}
for (var i = 0; i < points1.length; i++) {
if (points1[i] !== points2[i]) {
return;
}
}
return true;
}
function bboxFromPoints(points2) {
var minX = Infinity;
var minY = Infinity;
var maxX = -Infinity;
var maxY = -Infinity;
for (var i = 0; i < points2.length; ) {
var x = points2[i++];
var y = points2[i++];
if (!isNaN(x)) {
minX = Math.min(x, minX);
maxX = Math.max(x, maxX);
}
if (!isNaN(y)) {
minY = Math.min(y, minY);
maxY = Math.max(y, maxY);
}
}
return [[minX, minY], [maxX, maxY]];
}
function getBoundingDiff(points1, points2) {
var _a2 = bboxFromPoints(points1), min1 = _a2[0], max1 = _a2[1];
var _b2 = bboxFromPoints(points2), min2 = _b2[0], max2 = _b2[1];
return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));
}
function getSmooth(smooth) {
return isNumber(smooth) ? smooth : smooth ? 0.5 : 0;
}
function getStackedOnPoints(coordSys, data, dataCoordInfo) {
if (!dataCoordInfo.valueDim) {
return [];
}
var len2 = data.count();
var points2 = createFloat32Array(len2 * 2);
for (var idx = 0; idx < len2; idx++) {
var pt = getStackedOnPoint(dataCoordInfo, coordSys, data, idx);
points2[idx * 2] = pt[0];
points2[idx * 2 + 1] = pt[1];
}
return points2;
}
function turnPointsIntoStep(points2, basePoints, coordSys, stepTurnAt, connectNulls) {
var baseAxis = coordSys.getBaseAxis();
var baseIndex = baseAxis.dim === "x" || baseAxis.dim === "radius" ? 0 : 1;
var stepPoints = [];
var i = 0;
var stepPt = [];
var pt = [];
var nextPt = [];
var filteredPoints = [];
if (connectNulls) {
for (i = 0; i < points2.length; i += 2) {
var reference = basePoints || points2;
if (!isNaN(reference[i]) && !isNaN(reference[i + 1])) {
filteredPoints.push(points2[i], points2[i + 1]);
}
}
points2 = filteredPoints;
}
for (i = 0; i < points2.length - 2; i += 2) {
nextPt[0] = points2[i + 2];
nextPt[1] = points2[i + 3];
pt[0] = points2[i];
pt[1] = points2[i + 1];
stepPoints.push(pt[0], pt[1]);
switch (stepTurnAt) {
case "end":
stepPt[baseIndex] = nextPt[baseIndex];
stepPt[1 - baseIndex] = pt[1 - baseIndex];
stepPoints.push(stepPt[0], stepPt[1]);
break;
case "middle":
var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;
var stepPt2 = [];
stepPt[baseIndex] = stepPt2[baseIndex] = middle;
stepPt[1 - baseIndex] = pt[1 - baseIndex];
stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];
stepPoints.push(stepPt[0], stepPt[1]);
stepPoints.push(stepPt2[0], stepPt2[1]);
break;
default:
stepPt[baseIndex] = pt[baseIndex];
stepPt[1 - baseIndex] = nextPt[1 - baseIndex];
stepPoints.push(stepPt[0], stepPt[1]);
}
}
stepPoints.push(points2[i++], points2[i++]);
return stepPoints;
}
function clipColorStops(colorStops, maxSize) {
var newColorStops = [];
var len2 = colorStops.length;
var prevOutOfRangeColorStop;
var prevInRangeColorStop;
function lerpStop(stop0, stop1, clippedCoord) {
var coord0 = stop0.coord;
var p = (clippedCoord - coord0) / (stop1.coord - coord0);
var color = lerp$1(p, [stop0.color, stop1.color]);
return {
coord: clippedCoord,
color
};
}
for (var i = 0; i < len2; i++) {
var stop_1 = colorStops[i];
var coord = stop_1.coord;
if (coord < 0) {
prevOutOfRangeColorStop = stop_1;
} else if (coord > maxSize) {
if (prevInRangeColorStop) {
newColorStops.push(lerpStop(prevInRangeColorStop, stop_1, maxSize));
} else if (prevOutOfRangeColorStop) {
newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0), lerpStop(prevOutOfRangeColorStop, stop_1, maxSize));
}
break;
} else {
if (prevOutOfRangeColorStop) {
newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0));
prevOutOfRangeColorStop = null;
}
newColorStops.push(stop_1);
prevInRangeColorStop = stop_1;
}
}
return newColorStops;
}
function getVisualGradient(data, coordSys, api) {
var visualMetaList = data.getVisual("visualMeta");
if (!visualMetaList || !visualMetaList.length || !data.count()) {
return;
}
if (coordSys.type !== "cartesian2d") {
return;
}
var coordDim;
var visualMeta;
for (var i = visualMetaList.length - 1; i >= 0; i--) {
var dimInfo = data.getDimensionInfo(visualMetaList[i].dimension);
coordDim = dimInfo && dimInfo.coordDim;
if (coordDim === "x" || coordDim === "y") {
visualMeta = visualMetaList[i];
break;
}
}
if (!visualMeta) {
return;
}
var axis = coordSys.getAxis(coordDim);
var colorStops = map$1(visualMeta.stops, function(stop2) {
return {
coord: axis.toGlobalCoord(axis.dataToCoord(stop2.value)),
color: stop2.color
};
});
var stopLen = colorStops.length;
var outerColors = visualMeta.outerColors.slice();
if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {
colorStops.reverse();
outerColors.reverse();
}
var colorStopsInRange = clipColorStops(colorStops, coordDim === "x" ? api.getWidth() : api.getHeight());
var inRangeStopLen = colorStopsInRange.length;
if (!inRangeStopLen && stopLen) {
return colorStops[0].coord < 0 ? outerColors[1] ? outerColors[1] : colorStops[stopLen - 1].color : outerColors[0] ? outerColors[0] : colorStops[0].color;
}
var tinyExtent = 10;
var minCoord = colorStopsInRange[0].coord - tinyExtent;
var maxCoord = colorStopsInRange[inRangeStopLen - 1].coord + tinyExtent;
var coordSpan = maxCoord - minCoord;
if (coordSpan < 1e-3) {
return "transparent";
}
each$f(colorStopsInRange, function(stop2) {
stop2.offset = (stop2.coord - minCoord) / coordSpan;
});
colorStopsInRange.push({
// NOTE: inRangeStopLen may still be 0 if stoplen is zero.
offset: inRangeStopLen ? colorStopsInRange[inRangeStopLen - 1].offset : 0.5,
color: outerColors[1] || "transparent"
});
colorStopsInRange.unshift({
offset: inRangeStopLen ? colorStopsInRange[0].offset : 0.5,
color: outerColors[0] || "transparent"
});
var gradient = new LinearGradient(0, 0, 0, 0, colorStopsInRange, true);
gradient[coordDim] = minCoord;
gradient[coordDim + "2"] = maxCoord;
return gradient;
}
function getIsIgnoreFunc(seriesModel, data, coordSys) {
var showAllSymbol = seriesModel.get("showAllSymbol");
var isAuto = showAllSymbol === "auto";
if (showAllSymbol && !isAuto) {
return;
}
var categoryAxis2 = coordSys.getAxesByScale("ordinal")[0];
if (!categoryAxis2) {
return;
}
if (isAuto && canShowAllSymbolForCategory(categoryAxis2, data)) {
return;
}
var categoryDataDim = data.mapDimension(categoryAxis2.dim);
var labelMap = {};
each$f(categoryAxis2.getViewLabels(), function(labelItem) {
var ordinalNumber = categoryAxis2.scale.getRawOrdinalNumber(labelItem.tickValue);
labelMap[ordinalNumber] = 1;
});
return function(dataIndex) {
return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));
};
}
function canShowAllSymbolForCategory(categoryAxis2, data) {
var axisExtent = categoryAxis2.getExtent();
var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis2.scale.count();
isNaN(availSize) && (availSize = 0);
var dataLen = data.count();
var step = Math.max(1, Math.round(dataLen / 5));
for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {
if (Symbol$1.getSymbolSize(
data,
dataIndex
// Only for cartesian, where `isHorizontal` exists.
)[categoryAxis2.isHorizontal() ? 1 : 0] * 1.5 > availSize) {
return false;
}
}
return true;
}
function isPointNull(x, y) {
return isNaN(x) || isNaN(y);
}
function getLastIndexNotNull(points2) {
var len2 = points2.length / 2;
for (; len2 > 0; len2--) {
if (!isPointNull(points2[len2 * 2 - 2], points2[len2 * 2 - 1])) {
break;
}
}
return len2 - 1;
}
function getPointAtIndex(points2, idx) {
return [points2[idx * 2], points2[idx * 2 + 1]];
}
function getIndexRange(points2, xOrY, dim) {
var len2 = points2.length / 2;
var dimIdx = dim === "x" ? 0 : 1;
var a;
var b;
var prevIndex = 0;
var nextIndex = -1;
for (var i = 0; i < len2; i++) {
b = points2[i * 2 + dimIdx];
if (isNaN(b) || isNaN(points2[i * 2 + 1 - dimIdx])) {
continue;
}
if (i === 0) {
a = b;
continue;
}
if (a <= xOrY && b >= xOrY || a >= xOrY && b <= xOrY) {
nextIndex = i;
break;
}
prevIndex = i;
a = b;
}
return {
range: [prevIndex, nextIndex],
t: (xOrY - a) / (b - a)
};
}
function anyStateShowEndLabel(seriesModel) {
if (seriesModel.get(["endLabel", "show"])) {
return true;
}
for (var i = 0; i < SPECIAL_STATES.length; i++) {
if (seriesModel.get([SPECIAL_STATES[i], "endLabel", "show"])) {
return true;
}
}
return false;
}
function createLineClipPath(lineView, coordSys, hasAnimation, seriesModel) {
if (isCoordinateSystemType(coordSys, "cartesian2d")) {
var endLabelModel_1 = seriesModel.getModel("endLabel");
var valueAnimation_1 = endLabelModel_1.get("valueAnimation");
var data_1 = seriesModel.getData();
var labelAnimationRecord_1 = {
lastFrameIndex: 0
};
var during = anyStateShowEndLabel(seriesModel) ? function(percent, clipRect) {
lineView._endLabelOnDuring(percent, clipRect, data_1, labelAnimationRecord_1, valueAnimation_1, endLabelModel_1, coordSys);
} : null;
var isHorizontal = coordSys.getBaseAxis().isHorizontal();
var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, function() {
var endLabel = lineView._endLabel;
if (endLabel && hasAnimation) {
if (labelAnimationRecord_1.originalX != null) {
endLabel.attr({
x: labelAnimationRecord_1.originalX,
y: labelAnimationRecord_1.originalY
});
}
}
}, during);
if (!seriesModel.get("clip", true)) {
var rectShape = clipPath.shape;
var expandSize = Math.max(rectShape.width, rectShape.height);
if (isHorizontal) {
rectShape.y -= expandSize;
rectShape.height += expandSize * 2;
} else {
rectShape.x -= expandSize;
rectShape.width += expandSize * 2;
}
}
if (during) {
during(1, clipPath);
}
return clipPath;
} else {
return createPolarClipPath(coordSys, hasAnimation, seriesModel);
}
}
function getEndLabelStateSpecified(endLabelModel, coordSys) {
var baseAxis = coordSys.getBaseAxis();
var isHorizontal = baseAxis.isHorizontal();
var isBaseInversed = baseAxis.inverse;
var align = isHorizontal ? isBaseInversed ? "right" : "left" : "center";
var verticalAlign = isHorizontal ? "middle" : isBaseInversed ? "top" : "bottom";
return {
normal: {
align: endLabelModel.get("align") || align,
verticalAlign: endLabelModel.get("verticalAlign") || verticalAlign
}
};
}
var LineView = (
/** @class */
(function(_super) {
__extends(LineView2, _super);
function LineView2() {
return _super !== null && _super.apply(this, arguments) || this;
}
LineView2.prototype.init = function() {
var lineGroup = new Group$3();
var symbolDraw = new SymbolDraw();
this.group.add(symbolDraw.group);
this._symbolDraw = symbolDraw;
this._lineGroup = lineGroup;
this._changePolyState = bind$1(this._changePolyState, this);
};
LineView2.prototype.render = function(seriesModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
var group = this.group;
var data = seriesModel.getData();
var lineStyleModel = seriesModel.getModel("lineStyle");
var areaStyleModel = seriesModel.getModel("areaStyle");
var points2 = data.getLayout("points") || [];
var isCoordSysPolar = coordSys.type === "polar";
var prevCoordSys = this._coordSys;
var symbolDraw = this._symbolDraw;
var polyline = this._polyline;
var polygon = this._polygon;
var lineGroup = this._lineGroup;
var hasAnimation = !ecModel.ssr && seriesModel.get("animation");
var isAreaChart = !areaStyleModel.isEmpty();
var valueOrigin = areaStyleModel.get("origin");
var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);
var stackedOnPoints = isAreaChart && getStackedOnPoints(coordSys, data, dataCoordInfo);
var showSymbol = seriesModel.get("showSymbol");
var connectNulls = seriesModel.get("connectNulls");
var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys);
var oldData = this._data;
oldData && oldData.eachItemGraphicEl(function(el, idx) {
if (el.__temp) {
group.remove(el);
oldData.setItemGraphicEl(idx, null);
}
});
if (!showSymbol) {
symbolDraw.remove();
}
group.add(lineGroup);
var step = !isCoordSysPolar ? seriesModel.get("step") : false;
var clipShapeForSymbol;
if (coordSys && coordSys.getArea && seriesModel.get("clip", true)) {
clipShapeForSymbol = coordSys.getArea();
if (clipShapeForSymbol.width != null) {
clipShapeForSymbol.x -= 0.1;
clipShapeForSymbol.y -= 0.1;
clipShapeForSymbol.width += 0.2;
clipShapeForSymbol.height += 0.2;
} else if (clipShapeForSymbol.r0) {
clipShapeForSymbol.r0 -= 0.5;
clipShapeForSymbol.r += 0.5;
}
}
this._clipShapeForSymbol = clipShapeForSymbol;
var visualColor = getVisualGradient(data, coordSys, api) || data.getVisual("style")[data.getVisual("drawType")];
if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {
showSymbol && symbolDraw.updateData(data, {
isIgnore: isIgnoreFunc,
clipShape: clipShapeForSymbol,
disableAnimation: true,
getSymbolPoint: function(idx) {
return [points2[idx * 2], points2[idx * 2 + 1]];
}
});
hasAnimation && this._initSymbolLabelAnimation(data, coordSys, clipShapeForSymbol);
if (step) {
if (stackedOnPoints) {
stackedOnPoints = turnPointsIntoStep(stackedOnPoints, points2, coordSys, step, connectNulls);
}
points2 = turnPointsIntoStep(points2, null, coordSys, step, connectNulls);
}
polyline = this._newPolyline(points2);
if (isAreaChart) {
polygon = this._newPolygon(points2, stackedOnPoints);
} else if (polygon) {
lineGroup.remove(polygon);
polygon = this._polygon = null;
}
if (!isCoordSysPolar) {
this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));
}
lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel));
} else {
if (isAreaChart && !polygon) {
polygon = this._newPolygon(points2, stackedOnPoints);
} else if (polygon && !isAreaChart) {
lineGroup.remove(polygon);
polygon = this._polygon = null;
}
if (!isCoordSysPolar) {
this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));
}
var oldClipPath = lineGroup.getClipPath();
if (oldClipPath) {
var newClipPath = createLineClipPath(this, coordSys, false, seriesModel);
initProps(oldClipPath, {
shape: newClipPath.shape
}, seriesModel);
} else {
lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel));
}
showSymbol && symbolDraw.updateData(data, {
isIgnore: isIgnoreFunc,
clipShape: clipShapeForSymbol,
disableAnimation: true,
getSymbolPoint: function(idx) {
return [points2[idx * 2], points2[idx * 2 + 1]];
}
});
if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points2)) {
if (hasAnimation) {
this._doUpdateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls);
} else {
if (step) {
if (stackedOnPoints) {
stackedOnPoints = turnPointsIntoStep(stackedOnPoints, points2, coordSys, step, connectNulls);
}
points2 = turnPointsIntoStep(points2, null, coordSys, step, connectNulls);
}
polyline.setShape({
points: points2
});
polygon && polygon.setShape({
points: points2,
stackedOnPoints
});
}
}
}
var emphasisModel = seriesModel.getModel("emphasis");
var focus = emphasisModel.get("focus");
var blurScope = emphasisModel.get("blurScope");
var emphasisDisabled = emphasisModel.get("disabled");
polyline.useStyle(defaults(
// Use color in lineStyle first
lineStyleModel.getLineStyle(),
{
fill: "none",
stroke: visualColor,
lineJoin: "bevel"
}
));
setStatesStylesFromModel(polyline, seriesModel, "lineStyle");
if (polyline.style.lineWidth > 0 && seriesModel.get(["emphasis", "lineStyle", "width"]) === "bolder") {
var emphasisLineStyle = polyline.getState("emphasis").style;
emphasisLineStyle.lineWidth = +polyline.style.lineWidth + 1;
}
getECData(polyline).seriesIndex = seriesModel.seriesIndex;
toggleHoverEmphasis(polyline, focus, blurScope, emphasisDisabled);
var smooth = getSmooth(seriesModel.get("smooth"));
var smoothMonotone = seriesModel.get("smoothMonotone");
polyline.setShape({
smooth,
smoothMonotone,
connectNulls
});
if (polygon) {
var stackedOnSeries = data.getCalculationInfo("stackedOnSeries");
var stackedOnSmooth = 0;
polygon.useStyle(defaults(areaStyleModel.getAreaStyle(), {
fill: visualColor,
opacity: 0.7,
lineJoin: "bevel",
decal: data.getVisual("style").decal
}));
if (stackedOnSeries) {
stackedOnSmooth = getSmooth(stackedOnSeries.get("smooth"));
}
polygon.setShape({
smooth,
stackedOnSmooth,
smoothMonotone,
connectNulls
});
setStatesStylesFromModel(polygon, seriesModel, "areaStyle");
getECData(polygon).seriesIndex = seriesModel.seriesIndex;
toggleHoverEmphasis(polygon, focus, blurScope, emphasisDisabled);
}
var changePolyState = this._changePolyState;
data.eachItemGraphicEl(function(el) {
el && (el.onHoverStateChange = changePolyState);
});
this._polyline.onHoverStateChange = changePolyState;
this._data = data;
this._coordSys = coordSys;
this._stackedOnPoints = stackedOnPoints;
this._points = points2;
this._step = step;
this._valueOrigin = valueOrigin;
if (seriesModel.get("triggerLineEvent")) {
this.packEventData(seriesModel, polyline);
polygon && this.packEventData(seriesModel, polygon);
}
};
LineView2.prototype.packEventData = function(seriesModel, el) {
getECData(el).eventData = {
componentType: "series",
componentSubType: "line",
componentIndex: seriesModel.componentIndex,
seriesIndex: seriesModel.seriesIndex,
seriesName: seriesModel.name,
seriesType: "line"
};
};
LineView2.prototype.highlight = function(seriesModel, ecModel, api, payload) {
var data = seriesModel.getData();
var dataIndex = queryDataIndex(data, payload);
this._changePolyState("emphasis");
if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {
var points2 = data.getLayout("points");
var symbol = data.getItemGraphicEl(dataIndex);
if (!symbol) {
var x = points2[dataIndex * 2];
var y = points2[dataIndex * 2 + 1];
if (isNaN(x) || isNaN(y)) {
return;
}
if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(x, y)) {
return;
}
var zlevel = seriesModel.get("zlevel") || 0;
var z = seriesModel.get("z") || 0;
symbol = new Symbol$1(data, dataIndex);
symbol.x = x;
symbol.y = y;
symbol.setZ(zlevel, z);
var symbolLabel = symbol.getSymbolPath().getTextContent();
if (symbolLabel) {
symbolLabel.zlevel = zlevel;
symbolLabel.z = z;
symbolLabel.z2 = this._polyline.z2 + 1;
}
symbol.__temp = true;
data.setItemGraphicEl(dataIndex, symbol);
symbol.stopSymbolAnimation(true);
this.group.add(symbol);
}
symbol.highlight();
} else {
ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);
}
};
LineView2.prototype.downplay = function(seriesModel, ecModel, api, payload) {
var data = seriesModel.getData();
var dataIndex = queryDataIndex(data, payload);
this._changePolyState("normal");
if (dataIndex != null && dataIndex >= 0) {
var symbol = data.getItemGraphicEl(dataIndex);
if (symbol) {
if (symbol.__temp) {
data.setItemGraphicEl(dataIndex, null);
this.group.remove(symbol);
} else {
symbol.downplay();
}
}
} else {
ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);
}
};
LineView2.prototype._changePolyState = function(toState) {
var polygon = this._polygon;
setStatesFlag(this._polyline, toState);
polygon && setStatesFlag(polygon, toState);
};
LineView2.prototype._newPolyline = function(points2) {
var polyline = this._polyline;
if (polyline) {
this._lineGroup.remove(polyline);
}
polyline = new ECPolyline({
shape: {
points: points2
},
segmentIgnoreThreshold: 2,
z2: 10
});
this._lineGroup.add(polyline);
this._polyline = polyline;
return polyline;
};
LineView2.prototype._newPolygon = function(points2, stackedOnPoints) {
var polygon = this._polygon;
if (polygon) {
this._lineGroup.remove(polygon);
}
polygon = new ECPolygon({
shape: {
points: points2,
stackedOnPoints
},
segmentIgnoreThreshold: 2
});
this._lineGroup.add(polygon);
this._polygon = polygon;
return polygon;
};
LineView2.prototype._initSymbolLabelAnimation = function(data, coordSys, clipShape) {
var isHorizontalOrRadial;
var isCoordSysPolar;
var baseAxis = coordSys.getBaseAxis();
var isAxisInverse = baseAxis.inverse;
if (coordSys.type === "cartesian2d") {
isHorizontalOrRadial = baseAxis.isHorizontal();
isCoordSysPolar = false;
} else if (coordSys.type === "polar") {
isHorizontalOrRadial = baseAxis.dim === "angle";
isCoordSysPolar = true;
}
var seriesModel = data.hostModel;
var seriesDuration = seriesModel.get("animationDuration");
if (isFunction(seriesDuration)) {
seriesDuration = seriesDuration(null);
}
var seriesDelay = seriesModel.get("animationDelay") || 0;
var seriesDelayValue = isFunction(seriesDelay) ? seriesDelay(null) : seriesDelay;
data.eachItemGraphicEl(function(symbol, idx) {
var el = symbol;
if (el) {
var point = [symbol.x, symbol.y];
var start = void 0;
var end = void 0;
var current = void 0;
if (clipShape) {
if (isCoordSysPolar) {
var polarClip = clipShape;
var coord = coordSys.pointToCoord(point);
if (isHorizontalOrRadial) {
start = polarClip.startAngle;
end = polarClip.endAngle;
current = -coord[1] / 180 * Math.PI;
} else {
start = polarClip.r0;
end = polarClip.r;
current = coord[0];
}
} else {
var gridClip = clipShape;
if (isHorizontalOrRadial) {
start = gridClip.x;
end = gridClip.x + gridClip.width;
current = symbol.x;
} else {
start = gridClip.y + gridClip.height;
end = gridClip.y;
current = symbol.y;
}
}
}
var ratio = end === start ? 0 : (current - start) / (end - start);
if (isAxisInverse) {
ratio = 1 - ratio;
}
var delay = isFunction(seriesDelay) ? seriesDelay(idx) : seriesDuration * ratio + seriesDelayValue;
var symbolPath = el.getSymbolPath();
var text = symbolPath.getTextContent();
el.attr({
scaleX: 0,
scaleY: 0
});
el.animateTo({
scaleX: 1,
scaleY: 1
}, {
duration: 200,
setToFinal: true,
delay
});
if (text) {
text.animateFrom({
style: {
opacity: 0
}
}, {
duration: 300,
delay
});
}
symbolPath.disableLabelAnimation = true;
}
});
};
LineView2.prototype._initOrUpdateEndLabel = function(seriesModel, coordSys, inheritColor) {
var endLabelModel = seriesModel.getModel("endLabel");
if (anyStateShowEndLabel(seriesModel)) {
var data_2 = seriesModel.getData();
var polyline = this._polyline;
var points2 = data_2.getLayout("points");
if (!points2) {
polyline.removeTextContent();
this._endLabel = null;
return;
}
var endLabel = this._endLabel;
if (!endLabel) {
endLabel = this._endLabel = new ZRText({
z2: 200
// should be higher than item symbol
});
endLabel.ignoreClip = true;
polyline.setTextContent(this._endLabel);
polyline.disableLabelAnimation = true;
}
var dataIndex = getLastIndexNotNull(points2);
if (dataIndex >= 0) {
setLabelStyle(polyline, getLabelStatesModels(seriesModel, "endLabel"), {
inheritColor,
labelFetcher: seriesModel,
labelDataIndex: dataIndex,
defaultText: function(dataIndex2, opt, interpolatedValue) {
return interpolatedValue != null ? getDefaultInterpolatedLabel(data_2, interpolatedValue) : getDefaultLabel(data_2, dataIndex2);
},
enableTextSetter: true
}, getEndLabelStateSpecified(endLabelModel, coordSys));
polyline.textConfig.position = null;
}
} else if (this._endLabel) {
this._polyline.removeTextContent();
this._endLabel = null;
}
};
LineView2.prototype._endLabelOnDuring = function(percent, clipRect, data, animationRecord, valueAnimation, endLabelModel, coordSys) {
var endLabel = this._endLabel;
var polyline = this._polyline;
if (endLabel) {
if (percent < 1 && animationRecord.originalX == null) {
animationRecord.originalX = endLabel.x;
animationRecord.originalY = endLabel.y;
}
var points2 = data.getLayout("points");
var seriesModel = data.hostModel;
var connectNulls = seriesModel.get("connectNulls");
var precision = endLabelModel.get("precision");
var distance = endLabelModel.get("distance") || 0;
var baseAxis = coordSys.getBaseAxis();
var isHorizontal = baseAxis.isHorizontal();
var isBaseInversed = baseAxis.inverse;
var clipShape = clipRect.shape;
var xOrY = isBaseInversed ? isHorizontal ? clipShape.x : clipShape.y + clipShape.height : isHorizontal ? clipShape.x + clipShape.width : clipShape.y;
var distanceX = (isHorizontal ? distance : 0) * (isBaseInversed ? -1 : 1);
var distanceY = (isHorizontal ? 0 : -distance) * (isBaseInversed ? -1 : 1);
var dim = isHorizontal ? "x" : "y";
var dataIndexRange = getIndexRange(points2, xOrY, dim);
var indices = dataIndexRange.range;
var diff = indices[1] - indices[0];
var value = void 0;
if (diff >= 1) {
if (diff > 1 && !connectNulls) {
var pt = getPointAtIndex(points2, indices[0]);
endLabel.attr({
x: pt[0] + distanceX,
y: pt[1] + distanceY
});
valueAnimation && (value = seriesModel.getRawValue(indices[0]));
} else {
var pt = polyline.getPointOn(xOrY, dim);
pt && endLabel.attr({
x: pt[0] + distanceX,
y: pt[1] + distanceY
});
var startValue = seriesModel.getRawValue(indices[0]);
var endValue = seriesModel.getRawValue(indices[1]);
valueAnimation && (value = interpolateRawValues(data, precision, startValue, endValue, dataIndexRange.t));
}
animationRecord.lastFrameIndex = indices[0];
} else {
var idx = percent === 1 || animationRecord.lastFrameIndex > 0 ? indices[0] : 0;
var pt = getPointAtIndex(points2, idx);
valueAnimation && (value = seriesModel.getRawValue(idx));
endLabel.attr({
x: pt[0] + distanceX,
y: pt[1] + distanceY
});
}
if (valueAnimation) {
var inner2 = labelInner(endLabel);
if (typeof inner2.setLabelText === "function") {
inner2.setLabelText(value);
}
}
}
};
LineView2.prototype._doUpdateAnimation = function(data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls) {
var polyline = this._polyline;
var polygon = this._polygon;
var seriesModel = data.hostModel;
var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin);
var current = diff.current;
var stackedOnCurrent = diff.stackedOnCurrent;
var next = diff.next;
var stackedOnNext = diff.stackedOnNext;
if (step) {
stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, diff.current, coordSys, step, connectNulls);
current = turnPointsIntoStep(diff.current, null, coordSys, step, connectNulls);
stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, diff.next, coordSys, step, connectNulls);
next = turnPointsIntoStep(diff.next, null, coordSys, step, connectNulls);
}
if (getBoundingDiff(current, next) > 3e3 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3e3) {
polyline.stopAnimation();
polyline.setShape({
points: next
});
if (polygon) {
polygon.stopAnimation();
polygon.setShape({
points: next,
stackedOnPoints: stackedOnNext
});
}
return;
}
polyline.shape.__points = diff.current;
polyline.shape.points = current;
var target = {
shape: {
points: next
}
};
if (diff.current !== current) {
target.shape.__points = diff.next;
}
polyline.stopAnimation();
updateProps$1(polyline, target, seriesModel);
if (polygon) {
polygon.setShape({
// Reuse the points with polyline.
points: current,
stackedOnPoints: stackedOnCurrent
});
polygon.stopAnimation();
updateProps$1(polygon, {
shape: {
stackedOnPoints: stackedOnNext
}
}, seriesModel);
if (polyline.shape.points !== polygon.shape.points) {
polygon.shape.points = polyline.shape.points;
}
}
var updatedDataInfo = [];
var diffStatus = diff.status;
for (var i = 0; i < diffStatus.length; i++) {
var cmd = diffStatus[i].cmd;
if (cmd === "=") {
var el = data.getItemGraphicEl(diffStatus[i].idx1);
if (el) {
updatedDataInfo.push({
el,
ptIdx: i
// Index of points
});
}
}
}
if (polyline.animators && polyline.animators.length) {
polyline.animators[0].during(function() {
polygon && polygon.dirtyShape();
var points2 = polyline.shape.__points;
for (var i2 = 0; i2 < updatedDataInfo.length; i2++) {
var el2 = updatedDataInfo[i2].el;
var offset = updatedDataInfo[i2].ptIdx * 2;
el2.x = points2[offset];
el2.y = points2[offset + 1];
el2.markRedraw();
}
});
}
};
LineView2.prototype.remove = function(ecModel) {
var group = this.group;
var oldData = this._data;
this._lineGroup.removeAll();
this._symbolDraw.remove(true);
oldData && oldData.eachItemGraphicEl(function(el, idx) {
if (el.__temp) {
group.remove(el);
oldData.setItemGraphicEl(idx, null);
}
});
this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._endLabel = this._data = null;
};
LineView2.type = "line";
return LineView2;
})(ChartView)
);
function pointsLayout(seriesType2, forceStoreInTypedArray) {
return {
seriesType: seriesType2,
plan: createRenderPlanner(),
reset: function(seriesModel) {
var data = seriesModel.getData();
var coordSys = seriesModel.coordinateSystem;
var pipelineContext = seriesModel.pipelineContext;
var useTypedArray = forceStoreInTypedArray || pipelineContext.large;
if (!coordSys) {
return;
}
var dims = map$1(coordSys.dimensions, function(dim) {
return data.mapDimension(dim);
}).slice(0, 2);
var dimLen = dims.length;
var stackResultDim = data.getCalculationInfo("stackResultDimension");
if (isDimensionStacked(data, dims[0])) {
dims[0] = stackResultDim;
}
if (isDimensionStacked(data, dims[1])) {
dims[1] = stackResultDim;
}
var store = data.getStore();
var dimIdx0 = data.getDimensionIndex(dims[0]);
var dimIdx1 = data.getDimensionIndex(dims[1]);
return dimLen && {
progress: function(params, data2) {
var segCount = params.end - params.start;
var points2 = useTypedArray && createFloat32Array(segCount * dimLen);
var tmpIn = [];
var tmpOut = [];
for (var i = params.start, offset = 0; i < params.end; i++) {
var point = void 0;
if (dimLen === 1) {
var x = store.get(dimIdx0, i);
point = coordSys.dataToPoint(x, null, tmpOut);
} else {
tmpIn[0] = store.get(dimIdx0, i);
tmpIn[1] = store.get(dimIdx1, i);
point = coordSys.dataToPoint(tmpIn, null, tmpOut);
}
if (useTypedArray) {
points2[offset++] = point[0];
points2[offset++] = point[1];
} else {
data2.setItemLayout(i, point.slice());
}
}
useTypedArray && data2.setLayout("points", points2);
}
};
}
};
}
var samplers = {
average: function(frame) {
var sum2 = 0;
var count2 = 0;
for (var i = 0; i < frame.length; i++) {
if (!isNaN(frame[i])) {
sum2 += frame[i];
count2++;
}
}
return count2 === 0 ? NaN : sum2 / count2;
},
sum: function(frame) {
var sum2 = 0;
for (var i = 0; i < frame.length; i++) {
sum2 += frame[i] || 0;
}
return sum2;
},
max: function(frame) {
var max2 = -Infinity;
for (var i = 0; i < frame.length; i++) {
frame[i] > max2 && (max2 = frame[i]);
}
return isFinite(max2) ? max2 : NaN;
},
min: function(frame) {
var min2 = Infinity;
for (var i = 0; i < frame.length; i++) {
frame[i] < min2 && (min2 = frame[i]);
}
return isFinite(min2) ? min2 : NaN;
},
// TODO
// Median
nearest: function(frame) {
return frame[0];
}
};
var indexSampler = function(frame) {
return Math.round(frame.length / 2);
};
function dataSample(seriesType2) {
return {
seriesType: seriesType2,
// FIXME:TS never used, so comment it
// modifyOutputEnd: true,
reset: function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var sampling = seriesModel.get("sampling");
var coordSys = seriesModel.coordinateSystem;
var count2 = data.count();
if (count2 > 10 && coordSys.type === "cartesian2d" && sampling) {
var baseAxis = coordSys.getBaseAxis();
var valueAxis2 = coordSys.getOtherAxis(baseAxis);
var extent = baseAxis.getExtent();
var dpr = api.getDevicePixelRatio();
var size = Math.abs(extent[1] - extent[0]) * (dpr || 1);
var rate = Math.round(count2 / size);
if (isFinite(rate) && rate > 1) {
if (sampling === "lttb") {
seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis2.dim), 1 / rate));
} else if (sampling === "minmax") {
seriesModel.setData(data.minmaxDownSample(data.mapDimension(valueAxis2.dim), 1 / rate));
}
var sampler = void 0;
if (isString(sampling)) {
sampler = samplers[sampling];
} else if (isFunction(sampling)) {
sampler = sampling;
}
if (sampler) {
seriesModel.setData(data.downSample(data.mapDimension(valueAxis2.dim), 1 / rate, sampler, indexSampler));
}
}
}
}
};
}
function install$S(registers) {
registers.registerChartView(LineView);
registers.registerSeriesModel(LineSeriesModel);
registers.registerLayout(pointsLayout("line", true));
registers.registerVisual({
seriesType: "line",
reset: function(seriesModel) {
var data = seriesModel.getData();
var lineStyle = seriesModel.getModel("lineStyle").getLineStyle();
if (lineStyle && !lineStyle.stroke) {
lineStyle.stroke = data.getVisual("style").fill;
}
data.setVisual("legendLineStyle", lineStyle);
}
});
registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample("line"));
}
var BaseBarSeriesModel = (
/** @class */
(function(_super) {
__extends(BaseBarSeriesModel2, _super);
function BaseBarSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BaseBarSeriesModel2.type;
return _this;
}
BaseBarSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this, {
useEncodeDefaulter: true
});
};
BaseBarSeriesModel2.prototype.getMarkerPosition = function(value, dims, startingAtTick) {
var coordSys = this.coordinateSystem;
if (coordSys && coordSys.clampData) {
var clampData_1 = coordSys.clampData(value);
var pt_1 = coordSys.dataToPoint(clampData_1);
if (startingAtTick) {
each$f(coordSys.getAxes(), function(axis, idx) {
if (axis.type === "category" && dims != null) {
var tickCoords = axis.getTicksCoords();
var alignTicksWithLabel = axis.getTickModel().get("alignWithLabel");
var targetTickId = clampData_1[idx];
var isEnd = dims[idx] === "x1" || dims[idx] === "y1";
if (isEnd && !alignTicksWithLabel) {
targetTickId += 1;
}
if (tickCoords.length < 2) {
return;
} else if (tickCoords.length === 2) {
pt_1[idx] = axis.toGlobalCoord(axis.getExtent()[isEnd ? 1 : 0]);
return;
}
var leftCoord = void 0;
var coord = void 0;
var stepTickValue = 1;
for (var i = 0; i < tickCoords.length; i++) {
var tickCoord = tickCoords[i].coord;
var tickValue = i === tickCoords.length - 1 ? tickCoords[i - 1].tickValue + stepTickValue : tickCoords[i].tickValue;
if (tickValue === targetTickId) {
coord = tickCoord;
break;
} else if (tickValue < targetTickId) {
leftCoord = tickCoord;
} else if (leftCoord != null && tickValue > targetTickId) {
coord = (tickCoord + leftCoord) / 2;
break;
}
if (i === 1) {
stepTickValue = tickValue - tickCoords[0].tickValue;
}
}
if (coord == null) {
if (!leftCoord) {
coord = tickCoords[0].coord;
} else if (leftCoord) {
coord = tickCoords[tickCoords.length - 1].coord;
}
}
pt_1[idx] = axis.toGlobalCoord(coord);
}
});
} else {
var data = this.getData();
var offset = data.getLayout("offset");
var size = data.getLayout("size");
var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;
pt_1[offsetIndex] += offset + size / 2;
}
return pt_1;
}
return [NaN, NaN];
};
BaseBarSeriesModel2.type = "series.__base_bar__";
BaseBarSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "cartesian2d",
legendHoverLink: true,
// stack: null
// Cartesian coordinate system
// xAxisIndex: 0,
// yAxisIndex: 0,
barMinHeight: 0,
barMinAngle: 0,
// cursor: null,
large: false,
largeThreshold: 400,
progressive: 3e3,
progressiveChunkMode: "mod"
};
return BaseBarSeriesModel2;
})(SeriesModel)
);
SeriesModel.registerClass(BaseBarSeriesModel);
var BarSeriesModel = (
/** @class */
(function(_super) {
__extends(BarSeriesModel2, _super);
function BarSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BarSeriesModel2.type;
return _this;
}
BarSeriesModel2.prototype.getInitialData = function() {
return createSeriesData(null, this, {
useEncodeDefaulter: true,
createInvertedIndices: !!this.get("realtimeSort", true) || null
});
};
BarSeriesModel2.prototype.getProgressive = function() {
return this.get("large") ? this.get("progressive") : false;
};
BarSeriesModel2.prototype.getProgressiveThreshold = function() {
var progressiveThreshold = this.get("progressiveThreshold");
var largeThreshold = this.get("largeThreshold");
if (largeThreshold > progressiveThreshold) {
progressiveThreshold = largeThreshold;
}
return progressiveThreshold;
};
BarSeriesModel2.prototype.brushSelector = function(dataIndex, data, selectors) {
return selectors.rect(data.getItemLayout(dataIndex));
};
BarSeriesModel2.type = "series.bar";
BarSeriesModel2.dependencies = ["grid", "polar"];
BarSeriesModel2.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {
// If clipped
// Only available on cartesian2d
clip: true,
roundCap: false,
showBackground: false,
backgroundStyle: {
color: "rgba(180, 180, 180, 0.2)",
borderColor: null,
borderWidth: 0,
borderType: "solid",
borderRadius: 0,
shadowBlur: 0,
shadowColor: null,
shadowOffsetX: 0,
shadowOffsetY: 0,
opacity: 1
},
select: {
itemStyle: {
borderColor: "#212121"
}
},
realtimeSort: false
});
return BarSeriesModel2;
})(BaseBarSeriesModel)
);
var SausageShape = (
/** @class */
/* @__PURE__ */ (function() {
function SausageShape2() {
this.cx = 0;
this.cy = 0;
this.r0 = 0;
this.r = 0;
this.startAngle = 0;
this.endAngle = Math.PI * 2;
this.clockwise = true;
}
return SausageShape2;
})()
);
var SausagePath = (
/** @class */
(function(_super) {
__extends(SausagePath2, _super);
function SausagePath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "sausage";
return _this;
}
SausagePath2.prototype.getDefaultShape = function() {
return new SausageShape();
};
SausagePath2.prototype.buildPath = function(ctx, shape) {
var cx = shape.cx;
var cy = shape.cy;
var r0 = Math.max(shape.r0 || 0, 0);
var r = Math.max(shape.r, 0);
var dr = (r - r0) * 0.5;
var rCenter = r0 + dr;
var startAngle = shape.startAngle;
var endAngle = shape.endAngle;
var clockwise = shape.clockwise;
var PI22 = Math.PI * 2;
var lessThanCircle = clockwise ? endAngle - startAngle < PI22 : startAngle - endAngle < PI22;
if (!lessThanCircle) {
startAngle = endAngle - (clockwise ? PI22 : -PI22);
}
var unitStartX = Math.cos(startAngle);
var unitStartY = Math.sin(startAngle);
var unitEndX = Math.cos(endAngle);
var unitEndY = Math.sin(endAngle);
if (lessThanCircle) {
ctx.moveTo(unitStartX * r0 + cx, unitStartY * r0 + cy);
ctx.arc(unitStartX * rCenter + cx, unitStartY * rCenter + cy, dr, -Math.PI + startAngle, startAngle, !clockwise);
} else {
ctx.moveTo(unitStartX * r + cx, unitStartY * r + cy);
}
ctx.arc(cx, cy, r, startAngle, endAngle, !clockwise);
ctx.arc(unitEndX * rCenter + cx, unitEndY * rCenter + cy, dr, endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise);
if (r0 !== 0) {
ctx.arc(cx, cy, r0, endAngle, startAngle, clockwise);
}
};
return SausagePath2;
})(Path)
);
function createSectorCalculateTextPosition(positionMapping, opts) {
opts = opts || {};
var isRoundCap = opts.isRoundCap;
return function(out, opts2, boundingRect) {
var textPosition = opts2.position;
if (!textPosition || textPosition instanceof Array) {
return calculateTextPosition(out, opts2, boundingRect);
}
var mappedSectorPosition = positionMapping(textPosition);
var distance = opts2.distance != null ? opts2.distance : 5;
var sector = this.shape;
var cx = sector.cx;
var cy = sector.cy;
var r = sector.r;
var r0 = sector.r0;
var middleR = (r + r0) / 2;
var startAngle = sector.startAngle;
var endAngle = sector.endAngle;
var middleAngle = (startAngle + endAngle) / 2;
var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0;
var mathCos = Math.cos;
var mathSin = Math.sin;
var x = cx + r * mathCos(startAngle);
var y = cy + r * mathSin(startAngle);
var textAlign = "left";
var textVerticalAlign = "top";
switch (mappedSectorPosition) {
case "startArc":
x = cx + (r0 - distance) * mathCos(middleAngle);
y = cy + (r0 - distance) * mathSin(middleAngle);
textAlign = "center";
textVerticalAlign = "top";
break;
case "insideStartArc":
x = cx + (r0 + distance) * mathCos(middleAngle);
y = cy + (r0 + distance) * mathSin(middleAngle);
textAlign = "center";
textVerticalAlign = "bottom";
break;
case "startAngle":
x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false);
y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false);
textAlign = "right";
textVerticalAlign = "middle";
break;
case "insideStartAngle":
x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false);
y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false);
textAlign = "left";
textVerticalAlign = "middle";
break;
case "middle":
x = cx + middleR * mathCos(middleAngle);
y = cy + middleR * mathSin(middleAngle);
textAlign = "center";
textVerticalAlign = "middle";
break;
case "endArc":
x = cx + (r + distance) * mathCos(middleAngle);
y = cy + (r + distance) * mathSin(middleAngle);
textAlign = "center";
textVerticalAlign = "bottom";
break;
case "insideEndArc":
x = cx + (r - distance) * mathCos(middleAngle);
y = cy + (r - distance) * mathSin(middleAngle);
textAlign = "center";
textVerticalAlign = "top";
break;
case "endAngle":
x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true);
y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true);
textAlign = "left";
textVerticalAlign = "middle";
break;
case "insideEndAngle":
x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true);
y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true);
textAlign = "right";
textVerticalAlign = "middle";
break;
default:
return calculateTextPosition(out, opts2, boundingRect);
}
out = out || {};
out.x = x;
out.y = y;
out.align = textAlign;
out.verticalAlign = textVerticalAlign;
return out;
};
}
function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) {
if (isNumber(rotateType)) {
sector.setTextConfig({
rotation: rotateType
});
return;
} else if (isArray$1(textPosition)) {
sector.setTextConfig({
rotation: 0
});
return;
}
var shape = sector.shape;
var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle;
var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle;
var middleAngle = (startAngle + endAngle) / 2;
var anchorAngle;
var mappedSectorPosition = positionMapping(textPosition);
switch (mappedSectorPosition) {
case "startArc":
case "insideStartArc":
case "middle":
case "insideEndArc":
case "endArc":
anchorAngle = middleAngle;
break;
case "startAngle":
case "insideStartAngle":
anchorAngle = startAngle;
break;
case "endAngle":
case "insideEndAngle":
anchorAngle = endAngle;
break;
default:
sector.setTextConfig({
rotation: 0
});
return;
}
var rotate2 = Math.PI * 1.5 - anchorAngle;
if (mappedSectorPosition === "middle" && rotate2 > Math.PI / 2 && rotate2 < Math.PI * 1.5) {
rotate2 -= Math.PI;
}
sector.setTextConfig({
rotation: rotate2
});
}
function adjustAngleDistanceX(angle, distance, isEnd) {
return distance * Math.sin(angle) * (isEnd ? -1 : 1);
}
function adjustAngleDistanceY(angle, distance, isEnd) {
return distance * Math.cos(angle) * (isEnd ? 1 : -1);
}
function getSectorCornerRadius(model, shape, zeroIfNull) {
var cornerRadius = model.get("borderRadius");
if (cornerRadius == null) {
return zeroIfNull ? {
cornerRadius: 0
} : null;
}
if (!isArray$1(cornerRadius)) {
cornerRadius = [cornerRadius, cornerRadius, cornerRadius, cornerRadius];
}
var dr = Math.abs(shape.r || 0 - shape.r0 || 0);
return {
cornerRadius: map$1(cornerRadius, function(cr) {
return parsePercent$1(cr, dr);
})
};
}
var mathMax$4 = Math.max;
var mathMin$4 = Math.min;
function getClipArea(coord, data) {
var coordSysClipArea = coord.getArea && coord.getArea();
if (isCoordinateSystemType(coord, "cartesian2d")) {
var baseAxis = coord.getBaseAxis();
if (baseAxis.type !== "category" || !baseAxis.onBand) {
var expandWidth = data.getLayout("bandWidth");
if (baseAxis.isHorizontal()) {
coordSysClipArea.x -= expandWidth;
coordSysClipArea.width += expandWidth * 2;
} else {
coordSysClipArea.y -= expandWidth;
coordSysClipArea.height += expandWidth * 2;
}
}
}
return coordSysClipArea;
}
var BarView = (
/** @class */
(function(_super) {
__extends(BarView2, _super);
function BarView2() {
var _this = _super.call(this) || this;
_this.type = BarView2.type;
_this._isFirstFrame = true;
return _this;
}
BarView2.prototype.render = function(seriesModel, ecModel, api, payload) {
this._model = seriesModel;
this._removeOnRenderedListener(api);
this._updateDrawMode(seriesModel);
var coordinateSystemType = seriesModel.get("coordinateSystem");
if (coordinateSystemType === "cartesian2d" || coordinateSystemType === "polar") {
this._progressiveEls = null;
this._isLargeDraw ? this._renderLarge(seriesModel, ecModel, api) : this._renderNormal(seriesModel, ecModel, api, payload);
}
};
BarView2.prototype.incrementalPrepareRender = function(seriesModel) {
this._clear();
this._updateDrawMode(seriesModel);
this._updateLargeClip(seriesModel);
};
BarView2.prototype.incrementalRender = function(params, seriesModel) {
this._progressiveEls = [];
this._incrementalRenderLarge(params, seriesModel);
};
BarView2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
BarView2.prototype._updateDrawMode = function(seriesModel) {
var isLargeDraw = seriesModel.pipelineContext.large;
if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
this._isLargeDraw = isLargeDraw;
this._clear();
}
};
BarView2.prototype._renderNormal = function(seriesModel, ecModel, api, payload) {
var group = this.group;
var data = seriesModel.getData();
var oldData = this._data;
var coord = seriesModel.coordinateSystem;
var baseAxis = coord.getBaseAxis();
var isHorizontalOrRadial;
if (coord.type === "cartesian2d") {
isHorizontalOrRadial = baseAxis.isHorizontal();
} else if (coord.type === "polar") {
isHorizontalOrRadial = baseAxis.dim === "angle";
}
var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;
var realtimeSortCfg = shouldRealtimeSort(seriesModel, coord);
if (realtimeSortCfg) {
this._enableRealtimeSort(realtimeSortCfg, data, api);
}
var needsClip = seriesModel.get("clip", true) || realtimeSortCfg;
var coordSysClipArea = getClipArea(coord, data);
group.removeClipPath();
var roundCap = seriesModel.get("roundCap", true);
var drawBackground = seriesModel.get("showBackground", true);
var backgroundModel = seriesModel.getModel("backgroundStyle");
var barBorderRadius = backgroundModel.get("borderRadius") || 0;
var bgEls = [];
var oldBgEls = this._backgroundEls;
var isInitSort = payload && payload.isInitSort;
var isChangeOrder = payload && payload.type === "changeAxisOrder";
function createBackground(dataIndex) {
var bgLayout = getLayout[coord.type](data, dataIndex);
var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout);
bgEl.useStyle(backgroundModel.getItemStyle());
if (coord.type === "cartesian2d") {
bgEl.setShape("r", barBorderRadius);
} else {
bgEl.setShape("cornerRadius", barBorderRadius);
}
bgEls[dataIndex] = bgEl;
return bgEl;
}
data.diff(oldData).add(function(dataIndex) {
var itemModel = data.getItemModel(dataIndex);
var layout2 = getLayout[coord.type](data, dataIndex, itemModel);
if (drawBackground) {
createBackground(dataIndex);
}
if (!data.hasValue(dataIndex) || !isValidLayout[coord.type](layout2)) {
return;
}
var isClipped = false;
if (needsClip) {
isClipped = clip[coord.type](coordSysClipArea, layout2);
}
var el = elementCreator[coord.type](seriesModel, data, dataIndex, layout2, isHorizontalOrRadial, animationModel, baseAxis.model, false, roundCap);
if (realtimeSortCfg) {
el.forceLabelAnimation = true;
}
updateStyle(el, data, dataIndex, itemModel, layout2, seriesModel, isHorizontalOrRadial, coord.type === "polar");
if (isInitSort) {
el.attr({
shape: layout2
});
} else if (realtimeSortCfg) {
updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout2, dataIndex, isHorizontalOrRadial, false, false);
} else {
initProps(el, {
shape: layout2
}, seriesModel, dataIndex);
}
data.setItemGraphicEl(dataIndex, el);
group.add(el);
el.ignore = isClipped;
}).update(function(newIndex, oldIndex) {
var itemModel = data.getItemModel(newIndex);
var layout2 = getLayout[coord.type](data, newIndex, itemModel);
if (drawBackground) {
var bgEl = void 0;
if (oldBgEls.length === 0) {
bgEl = createBackground(oldIndex);
} else {
bgEl = oldBgEls[oldIndex];
bgEl.useStyle(backgroundModel.getItemStyle());
if (coord.type === "cartesian2d") {
bgEl.setShape("r", barBorderRadius);
} else {
bgEl.setShape("cornerRadius", barBorderRadius);
}
bgEls[newIndex] = bgEl;
}
var bgLayout = getLayout[coord.type](data, newIndex);
var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord);
updateProps$1(bgEl, {
shape
}, animationModel, newIndex);
}
var el = oldData.getItemGraphicEl(oldIndex);
if (!data.hasValue(newIndex) || !isValidLayout[coord.type](layout2)) {
group.remove(el);
return;
}
var isClipped = false;
if (needsClip) {
isClipped = clip[coord.type](coordSysClipArea, layout2);
if (isClipped) {
group.remove(el);
}
}
if (!el) {
el = elementCreator[coord.type](seriesModel, data, newIndex, layout2, isHorizontalOrRadial, animationModel, baseAxis.model, !!el, roundCap);
} else {
saveOldStyle(el);
}
if (realtimeSortCfg) {
el.forceLabelAnimation = true;
}
if (isChangeOrder) {
var textEl = el.getTextContent();
if (textEl) {
var labelInnerStore = labelInner(textEl);
if (labelInnerStore.prevValue != null) {
labelInnerStore.prevValue = labelInnerStore.value;
}
}
} else {
updateStyle(el, data, newIndex, itemModel, layout2, seriesModel, isHorizontalOrRadial, coord.type === "polar");
}
if (isInitSort) {
el.attr({
shape: layout2
});
} else if (realtimeSortCfg) {
updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout2, newIndex, isHorizontalOrRadial, true, isChangeOrder);
} else {
updateProps$1(el, {
shape: layout2
}, seriesModel, newIndex, null);
}
data.setItemGraphicEl(newIndex, el);
el.ignore = isClipped;
group.add(el);
}).remove(function(dataIndex) {
var el = oldData.getItemGraphicEl(dataIndex);
el && removeElementWithFadeOut(el, seriesModel, dataIndex);
}).execute();
var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group$3());
bgGroup.removeAll();
for (var i = 0; i < bgEls.length; ++i) {
bgGroup.add(bgEls[i]);
}
group.add(bgGroup);
this._backgroundEls = bgEls;
this._data = data;
};
BarView2.prototype._renderLarge = function(seriesModel, ecModel, api) {
this._clear();
createLarge$1(seriesModel, this.group);
this._updateLargeClip(seriesModel);
};
BarView2.prototype._incrementalRenderLarge = function(params, seriesModel) {
this._removeBackground();
createLarge$1(seriesModel, this.group, this._progressiveEls, true);
};
BarView2.prototype._updateLargeClip = function(seriesModel) {
var clipPath = seriesModel.get("clip", true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel);
var group = this.group;
if (clipPath) {
group.setClipPath(clipPath);
} else {
group.removeClipPath();
}
};
BarView2.prototype._enableRealtimeSort = function(realtimeSortCfg, data, api) {
var _this = this;
if (!data.count()) {
return;
}
var baseAxis = realtimeSortCfg.baseAxis;
if (this._isFirstFrame) {
this._dispatchInitSort(data, realtimeSortCfg, api);
this._isFirstFrame = false;
} else {
var orderMapping_1 = function(idx) {
var el = data.getItemGraphicEl(idx);
var shape = el && el.shape;
return shape && // The result should be consistent with the initial sort by data value.
// Do not support the case that both positive and negative exist.
Math.abs(baseAxis.isHorizontal() ? shape.height : shape.width) || 0;
};
this._onRendered = function() {
_this._updateSortWithinSameData(data, orderMapping_1, baseAxis, api);
};
api.getZr().on("rendered", this._onRendered);
}
};
BarView2.prototype._dataSort = function(data, baseAxis, orderMapping) {
var info = [];
data.each(data.mapDimension(baseAxis.dim), function(ordinalNumber, dataIdx) {
var mappedValue = orderMapping(dataIdx);
mappedValue = mappedValue == null ? NaN : mappedValue;
info.push({
dataIndex: dataIdx,
mappedValue,
ordinalNumber
});
});
info.sort(function(a, b) {
return b.mappedValue - a.mappedValue;
});
return {
ordinalNumbers: map$1(info, function(item) {
return item.ordinalNumber;
})
};
};
BarView2.prototype._isOrderChangedWithinSameData = function(data, orderMapping, baseAxis) {
var scale2 = baseAxis.scale;
var ordinalDataDim = data.mapDimension(baseAxis.dim);
var lastValue = Number.MAX_VALUE;
for (var tickNum = 0, len2 = scale2.getOrdinalMeta().categories.length; tickNum < len2; ++tickNum) {
var rawIdx = data.rawIndexOf(ordinalDataDim, scale2.getRawOrdinalNumber(tickNum));
var value = rawIdx < 0 ? Number.MIN_VALUE : orderMapping(data.indexOfRawIndex(rawIdx));
if (value > lastValue) {
return true;
}
lastValue = value;
}
return false;
};
BarView2.prototype._isOrderDifferentInView = function(orderInfo, baseAxis) {
var scale2 = baseAxis.scale;
var extent = scale2.getExtent();
var tickNum = Math.max(0, extent[0]);
var tickMax = Math.min(extent[1], scale2.getOrdinalMeta().categories.length - 1);
for (; tickNum <= tickMax; ++tickNum) {
if (orderInfo.ordinalNumbers[tickNum] !== scale2.getRawOrdinalNumber(tickNum)) {
return true;
}
}
};
BarView2.prototype._updateSortWithinSameData = function(data, orderMapping, baseAxis, api) {
if (!this._isOrderChangedWithinSameData(data, orderMapping, baseAxis)) {
return;
}
var sortInfo = this._dataSort(data, baseAxis, orderMapping);
if (this._isOrderDifferentInView(sortInfo, baseAxis)) {
this._removeOnRenderedListener(api);
api.dispatchAction({
type: "changeAxisOrder",
componentType: baseAxis.dim + "Axis",
axisId: baseAxis.index,
sortInfo
});
}
};
BarView2.prototype._dispatchInitSort = function(data, realtimeSortCfg, api) {
var baseAxis = realtimeSortCfg.baseAxis;
var sortResult = this._dataSort(data, baseAxis, function(dataIdx) {
return data.get(data.mapDimension(realtimeSortCfg.otherAxis.dim), dataIdx);
});
api.dispatchAction({
type: "changeAxisOrder",
componentType: baseAxis.dim + "Axis",
isInitSort: true,
axisId: baseAxis.index,
sortInfo: sortResult
});
};
BarView2.prototype.remove = function(ecModel, api) {
this._clear(this._model);
this._removeOnRenderedListener(api);
};
BarView2.prototype.dispose = function(ecModel, api) {
this._removeOnRenderedListener(api);
};
BarView2.prototype._removeOnRenderedListener = function(api) {
if (this._onRendered) {
api.getZr().off("rendered", this._onRendered);
this._onRendered = null;
}
};
BarView2.prototype._clear = function(model) {
var group = this.group;
var data = this._data;
if (model && model.isAnimationEnabled() && data && !this._isLargeDraw) {
this._removeBackground();
this._backgroundEls = [];
data.eachItemGraphicEl(function(el) {
removeElementWithFadeOut(el, model, getECData(el).dataIndex);
});
} else {
group.removeAll();
}
this._data = null;
this._isFirstFrame = true;
};
BarView2.prototype._removeBackground = function() {
this.group.remove(this._backgroundGroup);
this._backgroundGroup = null;
};
BarView2.type = "bar";
return BarView2;
})(ChartView)
);
var clip = {
cartesian2d: function(coordSysBoundingRect, layout2) {
var signWidth = layout2.width < 0 ? -1 : 1;
var signHeight = layout2.height < 0 ? -1 : 1;
if (signWidth < 0) {
layout2.x += layout2.width;
layout2.width = -layout2.width;
}
if (signHeight < 0) {
layout2.y += layout2.height;
layout2.height = -layout2.height;
}
var coordSysX2 = coordSysBoundingRect.x + coordSysBoundingRect.width;
var coordSysY2 = coordSysBoundingRect.y + coordSysBoundingRect.height;
var x = mathMax$4(layout2.x, coordSysBoundingRect.x);
var x2 = mathMin$4(layout2.x + layout2.width, coordSysX2);
var y = mathMax$4(layout2.y, coordSysBoundingRect.y);
var y2 = mathMin$4(layout2.y + layout2.height, coordSysY2);
var xClipped = x2 < x;
var yClipped = y2 < y;
layout2.x = xClipped && x > coordSysX2 ? x2 : x;
layout2.y = yClipped && y > coordSysY2 ? y2 : y;
layout2.width = xClipped ? 0 : x2 - x;
layout2.height = yClipped ? 0 : y2 - y;
if (signWidth < 0) {
layout2.x += layout2.width;
layout2.width = -layout2.width;
}
if (signHeight < 0) {
layout2.y += layout2.height;
layout2.height = -layout2.height;
}
return xClipped || yClipped;
},
polar: function(coordSysClipArea, layout2) {
var signR = layout2.r0 <= layout2.r ? 1 : -1;
if (signR < 0) {
var tmp = layout2.r;
layout2.r = layout2.r0;
layout2.r0 = tmp;
}
var r = mathMin$4(layout2.r, coordSysClipArea.r);
var r0 = mathMax$4(layout2.r0, coordSysClipArea.r0);
layout2.r = r;
layout2.r0 = r0;
var clipped = r - r0 < 0;
if (signR < 0) {
var tmp = layout2.r;
layout2.r = layout2.r0;
layout2.r0 = tmp;
}
return clipped;
}
};
var elementCreator = {
cartesian2d: function(seriesModel, data, newIndex, layout2, isHorizontal, animationModel, axisModel, isUpdate, roundCap) {
var rect = new Rect$2({
shape: extend({}, layout2),
z2: 1
});
rect.__dataIndex = newIndex;
rect.name = "item";
if (animationModel) {
var rectShape = rect.shape;
var animateProperty = isHorizontal ? "height" : "width";
rectShape[animateProperty] = 0;
}
return rect;
},
polar: function(seriesModel, data, newIndex, layout2, isRadial, animationModel, axisModel, isUpdate, roundCap) {
var ShapeClass = !isRadial && roundCap ? SausagePath : Sector;
var sector = new ShapeClass({
shape: layout2,
z2: 1
});
sector.name = "item";
var positionMap = createPolarPositionMapping(isRadial);
sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap, {
isRoundCap: ShapeClass === SausagePath
});
if (animationModel) {
var sectorShape = sector.shape;
var animateProperty = isRadial ? "r" : "endAngle";
var animateTarget = {};
sectorShape[animateProperty] = isRadial ? layout2.r0 : layout2.startAngle;
animateTarget[animateProperty] = layout2[animateProperty];
(isUpdate ? updateProps$1 : initProps)(sector, {
shape: animateTarget
// __value: typeof dataValue === 'string' ? parseInt(dataValue, 10) : dataValue
}, animationModel);
}
return sector;
}
};
function shouldRealtimeSort(seriesModel, coordSys) {
var realtimeSortOption = seriesModel.get("realtimeSort", true);
var baseAxis = coordSys.getBaseAxis();
if (realtimeSortOption && baseAxis.type === "category" && coordSys.type === "cartesian2d") {
return {
baseAxis,
otherAxis: coordSys.getOtherAxis(baseAxis)
};
}
}
function updateRealtimeAnimation(realtimeSortCfg, seriesAnimationModel, el, layout2, newIndex, isHorizontal, isUpdate, isChangeOrder) {
var seriesTarget;
var axisTarget;
if (isHorizontal) {
axisTarget = {
x: layout2.x,
width: layout2.width
};
seriesTarget = {
y: layout2.y,
height: layout2.height
};
} else {
axisTarget = {
y: layout2.y,
height: layout2.height
};
seriesTarget = {
x: layout2.x,
width: layout2.width
};
}
if (!isChangeOrder) {
(isUpdate ? updateProps$1 : initProps)(el, {
shape: seriesTarget
}, seriesAnimationModel, newIndex, null);
}
var axisAnimationModel = seriesAnimationModel ? realtimeSortCfg.baseAxis.model : null;
(isUpdate ? updateProps$1 : initProps)(el, {
shape: axisTarget
}, axisAnimationModel, newIndex);
}
function checkPropertiesNotValid(obj, props) {
for (var i = 0; i < props.length; i++) {
if (!isFinite(obj[props[i]])) {
return true;
}
}
return false;
}
var rectPropties = ["x", "y", "width", "height"];
var polarPropties = ["cx", "cy", "r", "startAngle", "endAngle"];
var isValidLayout = {
cartesian2d: function(layout2) {
return !checkPropertiesNotValid(layout2, rectPropties);
},
polar: function(layout2) {
return !checkPropertiesNotValid(layout2, polarPropties);
}
};
var getLayout = {
// itemModel is only used to get borderWidth, which is not needed
// when calculating bar background layout.
cartesian2d: function(data, dataIndex, itemModel) {
var layout2 = data.getItemLayout(dataIndex);
var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout2) : 0;
var signX = layout2.width > 0 ? 1 : -1;
var signY = layout2.height > 0 ? 1 : -1;
return {
x: layout2.x + signX * fixedLineWidth / 2,
y: layout2.y + signY * fixedLineWidth / 2,
width: layout2.width - signX * fixedLineWidth,
height: layout2.height - signY * fixedLineWidth
};
},
polar: function(data, dataIndex, itemModel) {
var layout2 = data.getItemLayout(dataIndex);
return {
cx: layout2.cx,
cy: layout2.cy,
r0: layout2.r0,
r: layout2.r,
startAngle: layout2.startAngle,
endAngle: layout2.endAngle,
clockwise: layout2.clockwise
};
}
};
function isZeroOnPolar(layout2) {
return layout2.startAngle != null && layout2.endAngle != null && layout2.startAngle === layout2.endAngle;
}
function createPolarPositionMapping(isRadial) {
return /* @__PURE__ */ (function(isRadial2) {
var arcOrAngle = isRadial2 ? "Arc" : "Angle";
return function(position2) {
switch (position2) {
case "start":
case "insideStart":
case "end":
case "insideEnd":
return position2 + arcOrAngle;
default:
return position2;
}
};
})(isRadial);
}
function updateStyle(el, data, dataIndex, itemModel, layout2, seriesModel, isHorizontalOrRadial, isPolar) {
var style = data.getItemVisual(dataIndex, "style");
if (!isPolar) {
var borderRadius = itemModel.get(["itemStyle", "borderRadius"]) || 0;
el.setShape("r", borderRadius);
} else if (!seriesModel.get("roundCap")) {
var sectorShape = el.shape;
var cornerRadius = getSectorCornerRadius(itemModel.getModel("itemStyle"), sectorShape, true);
extend(sectorShape, cornerRadius);
el.setShape(sectorShape);
}
el.useStyle(style);
var cursorStyle = itemModel.getShallow("cursor");
cursorStyle && el.attr("cursor", cursorStyle);
var labelPositionOutside = isPolar ? isHorizontalOrRadial ? layout2.r >= layout2.r0 ? "endArc" : "startArc" : layout2.endAngle >= layout2.startAngle ? "endAngle" : "startAngle" : isHorizontalOrRadial ? layout2.height >= 0 ? "bottom" : "top" : layout2.width >= 0 ? "right" : "left";
var labelStatesModels = getLabelStatesModels(itemModel);
setLabelStyle(el, labelStatesModels, {
labelFetcher: seriesModel,
labelDataIndex: dataIndex,
defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),
inheritColor: style.fill,
defaultOpacity: style.opacity,
defaultOutsidePosition: labelPositionOutside
});
var label = el.getTextContent();
if (isPolar && label) {
var position2 = itemModel.get(["label", "position"]);
el.textConfig.inside = position2 === "middle" ? true : null;
setSectorTextRotation(el, position2 === "outside" ? labelPositionOutside : position2, createPolarPositionMapping(isHorizontalOrRadial), itemModel.get(["label", "rotate"]));
}
setLabelValueAnimation(label, labelStatesModels, seriesModel.getRawValue(dataIndex), function(value) {
return getDefaultInterpolatedLabel(data, value);
});
var emphasisModel = itemModel.getModel(["emphasis"]);
toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
setStatesStylesFromModel(el, itemModel);
if (isZeroOnPolar(layout2)) {
el.style.fill = "none";
el.style.stroke = "none";
each$f(el.states, function(state) {
if (state.style) {
state.style.fill = state.style.stroke = "none";
}
});
}
}
function getLineWidth(itemModel, rawLayout) {
var borderColor = itemModel.get(["itemStyle", "borderColor"]);
if (!borderColor || borderColor === "none") {
return 0;
}
var lineWidth = itemModel.get(["itemStyle", "borderWidth"]) || 0;
var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);
var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);
return Math.min(lineWidth, width, height);
}
var LagePathShape = (
/** @class */
/* @__PURE__ */ (function() {
function LagePathShape2() {
}
return LagePathShape2;
})()
);
var LargePath = (
/** @class */
(function(_super) {
__extends(LargePath2, _super);
function LargePath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "largeBar";
return _this;
}
LargePath2.prototype.getDefaultShape = function() {
return new LagePathShape();
};
LargePath2.prototype.buildPath = function(ctx, shape) {
var points2 = shape.points;
var baseDimIdx = this.baseDimIdx;
var valueDimIdx = 1 - this.baseDimIdx;
var startPoint = [];
var size = [];
var barWidth = this.barWidth;
for (var i = 0; i < points2.length; i += 3) {
size[baseDimIdx] = barWidth;
size[valueDimIdx] = points2[i + 2];
startPoint[baseDimIdx] = points2[i + baseDimIdx];
startPoint[valueDimIdx] = points2[i + valueDimIdx];
ctx.rect(startPoint[0], startPoint[1], size[0], size[1]);
}
};
return LargePath2;
})(Path)
);
function createLarge$1(seriesModel, group, progressiveEls, incremental) {
var data = seriesModel.getData();
var baseDimIdx = data.getLayout("valueAxisHorizontal") ? 1 : 0;
var largeDataIndices = data.getLayout("largeDataIndices");
var barWidth = data.getLayout("size");
var backgroundModel = seriesModel.getModel("backgroundStyle");
var bgPoints = data.getLayout("largeBackgroundPoints");
if (bgPoints) {
var bgEl = new LargePath({
shape: {
points: bgPoints
},
incremental: !!incremental,
silent: true,
z2: 0
});
bgEl.baseDimIdx = baseDimIdx;
bgEl.largeDataIndices = largeDataIndices;
bgEl.barWidth = barWidth;
bgEl.useStyle(backgroundModel.getItemStyle());
group.add(bgEl);
progressiveEls && progressiveEls.push(bgEl);
}
var el = new LargePath({
shape: {
points: data.getLayout("largePoints")
},
incremental: !!incremental,
ignoreCoarsePointer: true,
z2: 1
});
el.baseDimIdx = baseDimIdx;
el.largeDataIndices = largeDataIndices;
el.barWidth = barWidth;
group.add(el);
el.useStyle(data.getVisual("style"));
el.style.stroke = null;
getECData(el).seriesIndex = seriesModel.seriesIndex;
if (!seriesModel.get("silent")) {
el.on("mousedown", largePathUpdateDataIndex);
el.on("mousemove", largePathUpdateDataIndex);
}
progressiveEls && progressiveEls.push(el);
}
var largePathUpdateDataIndex = throttle(function(event) {
var largePath = this;
var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);
getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null;
}, 30, false);
function largePathFindDataIndex(largePath, x, y) {
var baseDimIdx = largePath.baseDimIdx;
var valueDimIdx = 1 - baseDimIdx;
var points2 = largePath.shape.points;
var largeDataIndices = largePath.largeDataIndices;
var startPoint = [];
var size = [];
var barWidth = largePath.barWidth;
for (var i = 0, len2 = points2.length / 3; i < len2; i++) {
var ii = i * 3;
size[baseDimIdx] = barWidth;
size[valueDimIdx] = points2[ii + 2];
startPoint[baseDimIdx] = points2[ii + baseDimIdx];
startPoint[valueDimIdx] = points2[ii + valueDimIdx];
if (size[valueDimIdx] < 0) {
startPoint[valueDimIdx] += size[valueDimIdx];
size[valueDimIdx] = -size[valueDimIdx];
}
if (x >= startPoint[0] && x <= startPoint[0] + size[0] && y >= startPoint[1] && y <= startPoint[1] + size[1]) {
return largeDataIndices[i];
}
}
return -1;
}
function createBackgroundShape(isHorizontalOrRadial, layout2, coord) {
if (isCoordinateSystemType(coord, "cartesian2d")) {
var rectShape = layout2;
var coordLayout = coord.getArea();
return {
x: isHorizontalOrRadial ? rectShape.x : coordLayout.x,
y: isHorizontalOrRadial ? coordLayout.y : rectShape.y,
width: isHorizontalOrRadial ? rectShape.width : coordLayout.width,
height: isHorizontalOrRadial ? coordLayout.height : rectShape.height
};
} else {
var coordLayout = coord.getArea();
var sectorShape = layout2;
return {
cx: coordLayout.cx,
cy: coordLayout.cy,
r0: isHorizontalOrRadial ? coordLayout.r0 : sectorShape.r0,
r: isHorizontalOrRadial ? coordLayout.r : sectorShape.r,
startAngle: isHorizontalOrRadial ? sectorShape.startAngle : 0,
endAngle: isHorizontalOrRadial ? sectorShape.endAngle : Math.PI * 2
};
}
}
function createBackgroundEl(coord, isHorizontalOrRadial, layout2) {
var ElementClz = coord.type === "polar" ? Sector : Rect$2;
return new ElementClz({
shape: createBackgroundShape(isHorizontalOrRadial, layout2, coord),
silent: true,
z2: 0
});
}
function install$R(registers) {
registers.registerChartView(BarView);
registers.registerSeriesModel(BarSeriesModel);
registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, curry$1(layout$3, "bar"));
registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout("bar"));
registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample("bar"));
registers.registerAction({
type: "changeAxisOrder",
event: "changeAxisOrder",
update: "update"
}, function(payload, ecModel) {
var componentType = payload.componentType || "series";
ecModel.eachComponent({
mainType: componentType,
query: payload
}, function(componentModel) {
if (payload.sortInfo) {
componentModel.axis.setCategorySortInfo(payload.sortInfo);
}
});
});
}
var PI2 = Math.PI * 2;
var RADIAN$2 = Math.PI / 180;
function getViewRect$5(seriesModel, api) {
return getLayoutRect(seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
}
function getBasicPieLayout(seriesModel, api) {
var viewRect = getViewRect$5(seriesModel, api);
var center2 = seriesModel.get("center");
var radius = seriesModel.get("radius");
if (!isArray$1(radius)) {
radius = [0, radius];
}
var width = parsePercent(viewRect.width, api.getWidth());
var height = parsePercent(viewRect.height, api.getHeight());
var size = Math.min(width, height);
var r0 = parsePercent(radius[0], size / 2);
var r = parsePercent(radius[1], size / 2);
var cx;
var cy;
var coordSys = seriesModel.coordinateSystem;
if (coordSys) {
var point = coordSys.dataToPoint(center2);
cx = point[0] || 0;
cy = point[1] || 0;
} else {
if (!isArray$1(center2)) {
center2 = [center2, center2];
}
cx = parsePercent(center2[0], width) + viewRect.x;
cy = parsePercent(center2[1], height) + viewRect.y;
}
return {
cx,
cy,
r0,
r
};
}
function pieLayout(seriesType2, ecModel, api) {
ecModel.eachSeriesByType(seriesType2, function(seriesModel) {
var data = seriesModel.getData();
var valueDim = data.mapDimension("value");
var viewRect = getViewRect$5(seriesModel, api);
var _a2 = getBasicPieLayout(seriesModel, api), cx = _a2.cx, cy = _a2.cy, r = _a2.r, r0 = _a2.r0;
var startAngle = -seriesModel.get("startAngle") * RADIAN$2;
var endAngle = seriesModel.get("endAngle");
var padAngle = seriesModel.get("padAngle") * RADIAN$2;
endAngle = endAngle === "auto" ? startAngle - PI2 : -endAngle * RADIAN$2;
var minAngle = seriesModel.get("minAngle") * RADIAN$2;
var minAndPadAngle = minAngle + padAngle;
var validDataCount = 0;
data.each(valueDim, function(value) {
!isNaN(value) && validDataCount++;
});
var sum2 = data.getSum(valueDim);
var unitRadian = Math.PI / (sum2 || validDataCount) * 2;
var clockwise = seriesModel.get("clockwise");
var roseType = seriesModel.get("roseType");
var stillShowZeroSum = seriesModel.get("stillShowZeroSum");
var extent = data.getDataExtent(valueDim);
extent[0] = 0;
var dir3 = clockwise ? 1 : -1;
var angles = [startAngle, endAngle];
var halfPadAngle = dir3 * padAngle / 2;
normalizeArcAngles(angles, !clockwise);
startAngle = angles[0], endAngle = angles[1];
var layoutData = getSeriesLayoutData(seriesModel);
layoutData.startAngle = startAngle;
layoutData.endAngle = endAngle;
layoutData.clockwise = clockwise;
var angleRange = Math.abs(endAngle - startAngle);
var restAngle = angleRange;
var valueSumLargerThanMinAngle = 0;
var currentAngle = startAngle;
data.setLayout({
viewRect,
r
});
data.each(valueDim, function(value, idx) {
var angle;
if (isNaN(value)) {
data.setItemLayout(idx, {
angle: NaN,
startAngle: NaN,
endAngle: NaN,
clockwise,
cx,
cy,
r0,
r: roseType ? NaN : r
});
return;
}
if (roseType !== "area") {
angle = sum2 === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;
} else {
angle = angleRange / validDataCount;
}
if (angle < minAndPadAngle) {
angle = minAndPadAngle;
restAngle -= minAndPadAngle;
} else {
valueSumLargerThanMinAngle += value;
}
var endAngle2 = currentAngle + dir3 * angle;
var actualStartAngle = 0;
var actualEndAngle = 0;
if (padAngle > angle) {
actualStartAngle = currentAngle + dir3 * angle / 2;
actualEndAngle = actualStartAngle;
} else {
actualStartAngle = currentAngle + halfPadAngle;
actualEndAngle = endAngle2 - halfPadAngle;
}
data.setItemLayout(idx, {
angle,
startAngle: actualStartAngle,
endAngle: actualEndAngle,
clockwise,
cx,
cy,
r0,
r: roseType ? linearMap$2(value, extent, [r0, r]) : r
});
currentAngle = endAngle2;
});
if (restAngle < PI2 && validDataCount) {
if (restAngle <= 1e-3) {
var angle_1 = angleRange / validDataCount;
data.each(valueDim, function(value, idx) {
if (!isNaN(value)) {
var layout_1 = data.getItemLayout(idx);
layout_1.angle = angle_1;
var actualStartAngle = 0;
var actualEndAngle = 0;
if (angle_1 < padAngle) {
actualStartAngle = startAngle + dir3 * (idx + 1 / 2) * angle_1;
actualEndAngle = actualStartAngle;
} else {
actualStartAngle = startAngle + dir3 * idx * angle_1 + halfPadAngle;
actualEndAngle = startAngle + dir3 * (idx + 1) * angle_1 - halfPadAngle;
}
layout_1.startAngle = actualStartAngle;
layout_1.endAngle = actualEndAngle;
}
});
} else {
unitRadian = restAngle / valueSumLargerThanMinAngle;
currentAngle = startAngle;
data.each(valueDim, function(value, idx) {
if (!isNaN(value)) {
var layout_2 = data.getItemLayout(idx);
var angle = layout_2.angle === minAndPadAngle ? minAndPadAngle : value * unitRadian;
var actualStartAngle = 0;
var actualEndAngle = 0;
if (angle < padAngle) {
actualStartAngle = currentAngle + dir3 * angle / 2;
actualEndAngle = actualStartAngle;
} else {
actualStartAngle = currentAngle + halfPadAngle;
actualEndAngle = currentAngle + dir3 * angle - halfPadAngle;
}
layout_2.startAngle = actualStartAngle;
layout_2.endAngle = actualEndAngle;
currentAngle += dir3 * angle;
}
});
}
}
});
}
var getSeriesLayoutData = makeInner();
function dataFilter$1(seriesType2) {
return {
seriesType: seriesType2,
reset: function(seriesModel, ecModel) {
var legendModels = ecModel.findComponents({
mainType: "legend"
});
if (!legendModels || !legendModels.length) {
return;
}
var data = seriesModel.getData();
data.filterSelf(function(idx) {
var name = data.getName(idx);
for (var i = 0; i < legendModels.length; i++) {
if (!legendModels[i].isSelected(name)) {
return false;
}
}
return true;
});
}
};
}
var RADIAN$1 = Math.PI / 180;
function adjustSingleSide(list, cx, cy, r, dir3, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {
if (list.length < 2) {
return;
}
function recalculateXOnSemiToAlignOnEllipseCurve(semi) {
var rB = semi.rB;
var rB2 = rB * rB;
for (var i2 = 0; i2 < semi.list.length; i2++) {
var item = semi.list[i2];
var dy = Math.abs(item.label.y - cy);
var rA = r + item.len;
var rA2 = rA * rA;
var dx2 = Math.sqrt(Math.abs((1 - dy * dy / rB2) * rA2));
var newX = cx + (dx2 + item.len2) * dir3;
var deltaX = newX - item.label.x;
var newTargetWidth = item.targetTextWidth - deltaX * dir3;
constrainTextWidth(item, newTargetWidth, true);
item.label.x = newX;
}
}
function recalculateX(items) {
var topSemi = {
list: [],
maxY: 0
};
var bottomSemi = {
list: [],
maxY: 0
};
for (var i2 = 0; i2 < items.length; i2++) {
if (items[i2].labelAlignTo !== "none") {
continue;
}
var item = items[i2];
var semi = item.label.y > cy ? bottomSemi : topSemi;
var dy = Math.abs(item.label.y - cy);
if (dy >= semi.maxY) {
var dx2 = item.label.x - cx - item.len2 * dir3;
var rA = r + item.len;
var rB = Math.abs(dx2) < rA ? Math.sqrt(dy * dy / (1 - dx2 * dx2 / rA / rA)) : rA;
semi.rB = rB;
semi.maxY = dy;
}
semi.list.push(item);
}
recalculateXOnSemiToAlignOnEllipseCurve(topSemi);
recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi);
}
var len2 = list.length;
for (var i = 0; i < len2; i++) {
if (list[i].position === "outer" && list[i].labelAlignTo === "labelLine") {
var dx = list[i].label.x - farthestX;
list[i].linePoints[1][0] += dx;
list[i].label.x = farthestX;
}
}
if (shiftLayoutOnY(list, viewTop, viewTop + viewHeight)) {
recalculateX(list);
}
}
function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) {
var leftList = [];
var rightList = [];
var leftmostX = Number.MAX_VALUE;
var rightmostX = -Number.MAX_VALUE;
for (var i = 0; i < labelLayoutList.length; i++) {
var label = labelLayoutList[i].label;
if (isPositionCenter(labelLayoutList[i])) {
continue;
}
if (label.x < cx) {
leftmostX = Math.min(leftmostX, label.x);
leftList.push(labelLayoutList[i]);
} else {
rightmostX = Math.max(rightmostX, label.x);
rightList.push(labelLayoutList[i]);
}
}
for (var i = 0; i < labelLayoutList.length; i++) {
var layout2 = labelLayoutList[i];
if (!isPositionCenter(layout2) && layout2.linePoints) {
if (layout2.labelStyleWidth != null) {
continue;
}
var label = layout2.label;
var linePoints = layout2.linePoints;
var targetTextWidth = void 0;
if (layout2.labelAlignTo === "edge") {
if (label.x < cx) {
targetTextWidth = linePoints[2][0] - layout2.labelDistance - viewLeft - layout2.edgeDistance;
} else {
targetTextWidth = viewLeft + viewWidth - layout2.edgeDistance - linePoints[2][0] - layout2.labelDistance;
}
} else if (layout2.labelAlignTo === "labelLine") {
if (label.x < cx) {
targetTextWidth = leftmostX - viewLeft - layout2.bleedMargin;
} else {
targetTextWidth = viewLeft + viewWidth - rightmostX - layout2.bleedMargin;
}
} else {
if (label.x < cx) {
targetTextWidth = label.x - viewLeft - layout2.bleedMargin;
} else {
targetTextWidth = viewLeft + viewWidth - label.x - layout2.bleedMargin;
}
}
layout2.targetTextWidth = targetTextWidth;
constrainTextWidth(layout2, targetTextWidth);
}
}
adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX);
adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);
for (var i = 0; i < labelLayoutList.length; i++) {
var layout2 = labelLayoutList[i];
if (!isPositionCenter(layout2) && layout2.linePoints) {
var label = layout2.label;
var linePoints = layout2.linePoints;
var isAlignToEdge = layout2.labelAlignTo === "edge";
var padding = label.style.padding;
var paddingH = padding ? padding[1] + padding[3] : 0;
var extraPaddingH = label.style.backgroundColor ? 0 : paddingH;
var realTextWidth = layout2.rect.width + extraPaddingH;
var dist2 = linePoints[1][0] - linePoints[2][0];
if (isAlignToEdge) {
if (label.x < cx) {
linePoints[2][0] = viewLeft + layout2.edgeDistance + realTextWidth + layout2.labelDistance;
} else {
linePoints[2][0] = viewLeft + viewWidth - layout2.edgeDistance - realTextWidth - layout2.labelDistance;
}
} else {
if (label.x < cx) {
linePoints[2][0] = label.x + layout2.labelDistance;
} else {
linePoints[2][0] = label.x - layout2.labelDistance;
}
linePoints[1][0] = linePoints[2][0] + dist2;
}
linePoints[1][1] = linePoints[2][1] = label.y;
}
}
}
function constrainTextWidth(layout2, availableWidth, forceRecalculate) {
if (forceRecalculate === void 0) {
forceRecalculate = false;
}
if (layout2.labelStyleWidth != null) {
return;
}
var label = layout2.label;
var style = label.style;
var textRect = layout2.rect;
var bgColor = style.backgroundColor;
var padding = style.padding;
var paddingH = padding ? padding[1] + padding[3] : 0;
var overflow = style.overflow;
var oldOuterWidth = textRect.width + (bgColor ? 0 : paddingH);
if (availableWidth < oldOuterWidth || forceRecalculate) {
var oldHeight = textRect.height;
if (overflow && overflow.match("break")) {
label.setStyle("backgroundColor", null);
label.setStyle("width", availableWidth - paddingH);
var innerRect = label.getBoundingRect();
label.setStyle("width", Math.ceil(innerRect.width));
label.setStyle("backgroundColor", bgColor);
} else {
var availableInnerWidth = availableWidth - paddingH;
var newWidth = availableWidth < oldOuterWidth ? availableInnerWidth : (
// Current available width is enough, but the text may have
// already been wrapped with a smaller available width.
forceRecalculate ? availableInnerWidth > layout2.unconstrainedWidth ? null : availableInnerWidth : null
);
label.setStyle("width", newWidth);
}
var newRect = label.getBoundingRect();
textRect.width = newRect.width;
var margin = (label.style.margin || 0) + 2.1;
textRect.height = newRect.height + margin;
textRect.y -= (textRect.height - oldHeight) / 2;
}
}
function isPositionCenter(sectorShape) {
return sectorShape.position === "center";
}
function pieLabelLayout(seriesModel) {
var data = seriesModel.getData();
var labelLayoutList = [];
var cx;
var cy;
var hasLabelRotate = false;
var minShowLabelRadian = (seriesModel.get("minShowLabelAngle") || 0) * RADIAN$1;
var viewRect = data.getLayout("viewRect");
var r = data.getLayout("r");
var viewWidth = viewRect.width;
var viewLeft = viewRect.x;
var viewTop = viewRect.y;
var viewHeight = viewRect.height;
function setNotShow(el) {
el.ignore = true;
}
function isLabelShown(label2) {
if (!label2.ignore) {
return true;
}
for (var key in label2.states) {
if (label2.states[key].ignore === false) {
return true;
}
}
return false;
}
data.each(function(idx) {
var sector = data.getItemGraphicEl(idx);
var sectorShape = sector.shape;
var label2 = sector.getTextContent();
var labelLine2 = sector.getTextGuideLine();
var itemModel = data.getItemModel(idx);
var labelModel = itemModel.getModel("label");
var labelPosition = labelModel.get("position") || itemModel.get(["emphasis", "label", "position"]);
var labelDistance = labelModel.get("distanceToLabelLine");
var labelAlignTo = labelModel.get("alignTo");
var edgeDistance = parsePercent(labelModel.get("edgeDistance"), viewWidth);
var bleedMargin = labelModel.get("bleedMargin");
var labelLineModel = itemModel.getModel("labelLine");
var labelLineLen = labelLineModel.get("length");
labelLineLen = parsePercent(labelLineLen, viewWidth);
var labelLineLen2 = labelLineModel.get("length2");
labelLineLen2 = parsePercent(labelLineLen2, viewWidth);
if (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) {
each$f(label2.states, setNotShow);
label2.ignore = true;
if (labelLine2) {
each$f(labelLine2.states, setNotShow);
labelLine2.ignore = true;
}
return;
}
if (!isLabelShown(label2)) {
return;
}
var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2;
var nx = Math.cos(midAngle);
var ny = Math.sin(midAngle);
var textX;
var textY;
var linePoints2;
var textAlign;
cx = sectorShape.cx;
cy = sectorShape.cy;
var isLabelInside = labelPosition === "inside" || labelPosition === "inner";
if (labelPosition === "center") {
textX = sectorShape.cx;
textY = sectorShape.cy;
textAlign = "center";
} else {
var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx;
var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy;
textX = x1 + nx * 3;
textY = y1 + ny * 3;
if (!isLabelInside) {
var x2 = x1 + nx * (labelLineLen + r - sectorShape.r);
var y2 = y1 + ny * (labelLineLen + r - sectorShape.r);
var x3 = x2 + (nx < 0 ? -1 : 1) * labelLineLen2;
var y3 = y2;
if (labelAlignTo === "edge") {
textX = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance;
} else {
textX = x3 + (nx < 0 ? -labelDistance : labelDistance);
}
textY = y3;
linePoints2 = [[x1, y1], [x2, y2], [x3, y3]];
}
textAlign = isLabelInside ? "center" : labelAlignTo === "edge" ? nx > 0 ? "right" : "left" : nx > 0 ? "left" : "right";
}
var PI3 = Math.PI;
var labelRotate = 0;
var rotate2 = labelModel.get("rotate");
if (isNumber(rotate2)) {
labelRotate = rotate2 * (PI3 / 180);
} else if (labelPosition === "center") {
labelRotate = 0;
} else if (rotate2 === "radial" || rotate2 === true) {
var radialAngle = nx < 0 ? -midAngle + PI3 : -midAngle;
labelRotate = radialAngle;
} else if (rotate2 === "tangential" && labelPosition !== "outside" && labelPosition !== "outer") {
var rad = Math.atan2(nx, ny);
if (rad < 0) {
rad = PI3 * 2 + rad;
}
var isDown = ny > 0;
if (isDown) {
rad = PI3 + rad;
}
labelRotate = rad - PI3;
}
hasLabelRotate = !!labelRotate;
label2.x = textX;
label2.y = textY;
label2.rotation = labelRotate;
label2.setStyle({
verticalAlign: "middle"
});
if (!isLabelInside) {
var textRect = label2.getBoundingRect().clone();
textRect.applyTransform(label2.getComputedTransform());
var margin = (label2.style.margin || 0) + 2.1;
textRect.y -= margin / 2;
textRect.height += margin;
labelLayoutList.push({
label: label2,
labelLine: labelLine2,
position: labelPosition,
len: labelLineLen,
len2: labelLineLen2,
minTurnAngle: labelLineModel.get("minTurnAngle"),
maxSurfaceAngle: labelLineModel.get("maxSurfaceAngle"),
surfaceNormal: new Point(nx, ny),
linePoints: linePoints2,
textAlign,
labelDistance,
labelAlignTo,
edgeDistance,
bleedMargin,
rect: textRect,
unconstrainedWidth: textRect.width,
labelStyleWidth: label2.style.width
});
} else {
label2.setStyle({
align: textAlign
});
var selectState2 = label2.states.select;
if (selectState2) {
selectState2.x += label2.x;
selectState2.y += label2.y;
}
}
sector.setTextConfig({
inside: isLabelInside
});
});
if (!hasLabelRotate && seriesModel.get("avoidLabelOverlap")) {
avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);
}
for (var i = 0; i < labelLayoutList.length; i++) {
var layout2 = labelLayoutList[i];
var label = layout2.label;
var labelLine = layout2.labelLine;
var notShowLabel = isNaN(label.x) || isNaN(label.y);
if (label) {
label.setStyle({
align: layout2.textAlign
});
if (notShowLabel) {
each$f(label.states, setNotShow);
label.ignore = true;
}
var selectState = label.states.select;
if (selectState) {
selectState.x += label.x;
selectState.y += label.y;
}
}
if (labelLine) {
var linePoints = layout2.linePoints;
if (notShowLabel || !linePoints) {
each$f(labelLine.states, setNotShow);
labelLine.ignore = true;
} else {
limitTurnAngle(linePoints, layout2.minTurnAngle);
limitSurfaceAngle(linePoints, layout2.surfaceNormal, layout2.maxSurfaceAngle);
labelLine.setShape({
points: linePoints
});
label.__hostTarget.textGuideLineConfig = {
anchor: new Point(linePoints[0][0], linePoints[0][1])
};
}
}
}
}
var PiePiece = (
/** @class */
(function(_super) {
__extends(PiePiece2, _super);
function PiePiece2(data, idx, startAngle) {
var _this = _super.call(this) || this;
_this.z2 = 2;
var text = new ZRText();
_this.setTextContent(text);
_this.updateData(data, idx, startAngle, true);
return _this;
}
PiePiece2.prototype.updateData = function(data, idx, startAngle, firstCreate) {
var sector = this;
var seriesModel = data.hostModel;
var itemModel = data.getItemModel(idx);
var emphasisModel = itemModel.getModel("emphasis");
var layout2 = data.getItemLayout(idx);
var sectorShape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout2, true), layout2);
if (isNaN(sectorShape.startAngle)) {
sector.setShape(sectorShape);
return;
}
if (firstCreate) {
sector.setShape(sectorShape);
var animationType = seriesModel.getShallow("animationType");
if (seriesModel.ecModel.ssr) {
initProps(sector, {
scaleX: 0,
scaleY: 0
}, seriesModel, {
dataIndex: idx,
isFrom: true
});
sector.originX = sectorShape.cx;
sector.originY = sectorShape.cy;
} else if (animationType === "scale") {
sector.shape.r = layout2.r0;
initProps(sector, {
shape: {
r: layout2.r
}
}, seriesModel, idx);
} else {
if (startAngle != null) {
sector.setShape({
startAngle,
endAngle: startAngle
});
initProps(sector, {
shape: {
startAngle: layout2.startAngle,
endAngle: layout2.endAngle
}
}, seriesModel, idx);
} else {
sector.shape.endAngle = layout2.startAngle;
updateProps$1(sector, {
shape: {
endAngle: layout2.endAngle
}
}, seriesModel, idx);
}
}
} else {
saveOldStyle(sector);
updateProps$1(sector, {
shape: sectorShape
}, seriesModel, idx);
}
sector.useStyle(data.getItemVisual(idx, "style"));
setStatesStylesFromModel(sector, itemModel);
var midAngle = (layout2.startAngle + layout2.endAngle) / 2;
var offset = seriesModel.get("selectedOffset");
var dx = Math.cos(midAngle) * offset;
var dy = Math.sin(midAngle) * offset;
var cursorStyle = itemModel.getShallow("cursor");
cursorStyle && sector.attr("cursor", cursorStyle);
this._updateLabel(seriesModel, data, idx);
sector.ensureState("emphasis").shape = extend({
r: layout2.r + (emphasisModel.get("scale") ? emphasisModel.get("scaleSize") || 0 : 0)
}, getSectorCornerRadius(emphasisModel.getModel("itemStyle"), layout2));
extend(sector.ensureState("select"), {
x: dx,
y: dy,
shape: getSectorCornerRadius(itemModel.getModel(["select", "itemStyle"]), layout2)
});
extend(sector.ensureState("blur"), {
shape: getSectorCornerRadius(itemModel.getModel(["blur", "itemStyle"]), layout2)
});
var labelLine = sector.getTextGuideLine();
var labelText = sector.getTextContent();
labelLine && extend(labelLine.ensureState("select"), {
x: dx,
y: dy
});
extend(labelText.ensureState("select"), {
x: dx,
y: dy
});
toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
};
PiePiece2.prototype._updateLabel = function(seriesModel, data, idx) {
var sector = this;
var itemModel = data.getItemModel(idx);
var labelLineModel = itemModel.getModel("labelLine");
var style = data.getItemVisual(idx, "style");
var visualColor = style && style.fill;
var visualOpacity = style && style.opacity;
setLabelStyle(sector, getLabelStatesModels(itemModel), {
labelFetcher: data.hostModel,
labelDataIndex: idx,
inheritColor: visualColor,
defaultOpacity: visualOpacity,
defaultText: seriesModel.getFormattedLabel(idx, "normal") || data.getName(idx)
});
var labelText = sector.getTextContent();
sector.setTextConfig({
// reset position, rotation
position: null,
rotation: null
});
labelText.attr({
z2: 10
});
var labelPosition = seriesModel.get(["label", "position"]);
if (labelPosition !== "outside" && labelPosition !== "outer") {
sector.removeTextGuideLine();
} else {
var polyline = this.getTextGuideLine();
if (!polyline) {
polyline = new Polyline$1();
this.setTextGuideLine(polyline);
}
setLabelLineStyle(this, getLabelLineStatesModels(itemModel), {
stroke: visualColor,
opacity: retrieve3(labelLineModel.get(["lineStyle", "opacity"]), visualOpacity, 1)
});
}
};
return PiePiece2;
})(Sector)
);
var PieView = (
/** @class */
(function(_super) {
__extends(PieView2, _super);
function PieView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.ignoreLabelLineUpdate = true;
return _this;
}
PieView2.prototype.render = function(seriesModel, ecModel, api, payload) {
var data = seriesModel.getData();
var oldData = this._data;
var group = this.group;
var startAngle;
if (!oldData && data.count() > 0) {
var shape = data.getItemLayout(0);
for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) {
shape = data.getItemLayout(s);
}
if (shape) {
startAngle = shape.startAngle;
}
}
if (this._emptyCircleSector) {
group.remove(this._emptyCircleSector);
}
if (data.count() === 0 && seriesModel.get("showEmptyCircle")) {
var layoutData = getSeriesLayoutData(seriesModel);
var sector = new Sector({
shape: extend(getBasicPieLayout(seriesModel, api), layoutData)
});
sector.useStyle(seriesModel.getModel("emptyCircleStyle").getItemStyle());
this._emptyCircleSector = sector;
group.add(sector);
}
data.diff(oldData).add(function(idx) {
var piePiece = new PiePiece(data, idx, startAngle);
data.setItemGraphicEl(idx, piePiece);
group.add(piePiece);
}).update(function(newIdx, oldIdx) {
var piePiece = oldData.getItemGraphicEl(oldIdx);
piePiece.updateData(data, newIdx, startAngle);
piePiece.off("click");
group.add(piePiece);
data.setItemGraphicEl(newIdx, piePiece);
}).remove(function(idx) {
var piePiece = oldData.getItemGraphicEl(idx);
removeElementWithFadeOut(piePiece, seriesModel, idx);
}).execute();
pieLabelLayout(seriesModel);
if (seriesModel.get("animationTypeUpdate") !== "expansion") {
this._data = data;
}
};
PieView2.prototype.dispose = function() {
};
PieView2.prototype.containPoint = function(point, seriesModel) {
var data = seriesModel.getData();
var itemLayout = data.getItemLayout(0);
if (itemLayout) {
var dx = point[0] - itemLayout.cx;
var dy = point[1] - itemLayout.cy;
var radius = Math.sqrt(dx * dx + dy * dy);
return radius <= itemLayout.r && radius >= itemLayout.r0;
}
};
PieView2.type = "pie";
return PieView2;
})(ChartView)
);
function createSeriesDataSimply(seriesModel, opt, nameList) {
opt = isArray$1(opt) && {
coordDimensions: opt
} || extend({
encodeDefine: seriesModel.getEncode()
}, opt);
var source = seriesModel.getSource();
var dimensions = prepareSeriesDataSchema(source, opt).dimensions;
var list = new SeriesData(dimensions, seriesModel);
list.initData(source, nameList);
return list;
}
var LegendVisualProvider = (
/** @class */
(function() {
function LegendVisualProvider2(getDataWithEncodedVisual, getRawData2) {
this._getDataWithEncodedVisual = getDataWithEncodedVisual;
this._getRawData = getRawData2;
}
LegendVisualProvider2.prototype.getAllNames = function() {
var rawData = this._getRawData();
return rawData.mapArray(rawData.getName);
};
LegendVisualProvider2.prototype.containName = function(name) {
var rawData = this._getRawData();
return rawData.indexOfName(name) >= 0;
};
LegendVisualProvider2.prototype.indexOfName = function(name) {
var dataWithEncodedVisual = this._getDataWithEncodedVisual();
return dataWithEncodedVisual.indexOfName(name);
};
LegendVisualProvider2.prototype.getItemVisual = function(dataIndex, key) {
var dataWithEncodedVisual = this._getDataWithEncodedVisual();
return dataWithEncodedVisual.getItemVisual(dataIndex, key);
};
return LegendVisualProvider2;
})()
);
var innerData = makeInner();
var PieSeriesModel = (
/** @class */
(function(_super) {
__extends(PieSeriesModel2, _super);
function PieSeriesModel2() {
return _super !== null && _super.apply(this, arguments) || this;
}
PieSeriesModel2.prototype.init = function(option) {
_super.prototype.init.apply(this, arguments);
this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this));
this._defaultLabelLine(option);
};
PieSeriesModel2.prototype.mergeOption = function() {
_super.prototype.mergeOption.apply(this, arguments);
};
PieSeriesModel2.prototype.getInitialData = function() {
return createSeriesDataSimply(this, {
coordDimensions: ["value"],
encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this)
});
};
PieSeriesModel2.prototype.getDataParams = function(dataIndex) {
var data = this.getData();
var dataInner = innerData(data);
var seats = dataInner.seats;
if (!seats) {
var valueList_1 = [];
data.each(data.mapDimension("value"), function(value) {
valueList_1.push(value);
});
seats = dataInner.seats = getPercentSeats(valueList_1, data.hostModel.get("percentPrecision"));
}
var params = _super.prototype.getDataParams.call(this, dataIndex);
params.percent = seats[dataIndex] || 0;
params.$vars.push("percent");
return params;
};
PieSeriesModel2.prototype._defaultLabelLine = function(option) {
defaultEmphasis(option, "labelLine", ["show"]);
var labelLineNormalOpt = option.labelLine;
var labelLineEmphasisOpt = option.emphasis.labelLine;
labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;
labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;
};
PieSeriesModel2.type = "series.pie";
PieSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
legendHoverLink: true,
colorBy: "data",
// 默认全局居中
center: ["50%", "50%"],
radius: [0, "75%"],
// 默认顺时针
clockwise: true,
startAngle: 90,
endAngle: "auto",
padAngle: 0,
// 最小角度改为0
minAngle: 0,
// If the angle of a sector less than `minShowLabelAngle`,
// the label will not be displayed.
minShowLabelAngle: 0,
// 选中时扇区偏移量
selectedOffset: 10,
// 选择模式,默认关闭,可选single,multiple
// selectedMode: false,
// 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)
// roseType: null,
percentPrecision: 2,
// If still show when all data zero.
stillShowZeroSum: true,
// cursor: null,
left: 0,
top: 0,
right: 0,
bottom: 0,
width: null,
height: null,
label: {
// color: 'inherit',
// If rotate around circle
rotate: 0,
show: true,
overflow: "truncate",
// 'outer', 'inside', 'center'
position: "outer",
// 'none', 'labelLine', 'edge'. Works only when position is 'outer'
alignTo: "none",
// Closest distance between label and chart edge.
// Works only position is 'outer' and alignTo is 'edge'.
edgeDistance: "25%",
// Works only position is 'outer' and alignTo is not 'edge'.
bleedMargin: 10,
// Distance between text and label line.
distanceToLabelLine: 5
// formatter: 标签文本格式器,同 tooltip.formatter,不支持异步回调
// 默认使用全局文本样式,详见 textStyle
// distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数
},
// Enabled when label.normal.position is 'outer'
labelLine: {
show: true,
// 引导线两段中的第一段长度
length: 15,
// 引导线两段中的第二段长度
length2: 15,
smooth: false,
minTurnAngle: 90,
maxSurfaceAngle: 90,
lineStyle: {
// color: 各异,
width: 1,
type: "solid"
}
},
itemStyle: {
borderWidth: 1,
borderJoin: "round"
},
showEmptyCircle: true,
emptyCircleStyle: {
color: "lightgray",
opacity: 1
},
labelLayout: {
// Hide the overlapped label.
hideOverlap: true
},
emphasis: {
scale: true,
scaleSize: 5
},
// If use strategy to avoid label overlapping
avoidLabelOverlap: true,
// Animation type. Valid values: expansion, scale
animationType: "expansion",
animationDuration: 1e3,
// Animation type when update. Valid values: transition, expansion
animationTypeUpdate: "transition",
animationEasingUpdate: "cubicInOut",
animationDurationUpdate: 500,
animationEasing: "cubicInOut"
};
return PieSeriesModel2;
})(SeriesModel)
);
function negativeDataFilter(seriesType2) {
return {
seriesType: seriesType2,
reset: function(seriesModel, ecModel) {
var data = seriesModel.getData();
data.filterSelf(function(idx) {
var valueDim = data.mapDimension("value");
var curValue = data.get(valueDim, idx);
if (isNumber(curValue) && !isNaN(curValue) && curValue < 0) {
return false;
}
return true;
});
}
};
}
function install$Q(registers) {
registers.registerChartView(PieView);
registers.registerSeriesModel(PieSeriesModel);
createLegacyDataSelectAction("pie", registers.registerAction);
registers.registerLayout(curry$1(pieLayout, "pie"));
registers.registerProcessor(dataFilter$1("pie"));
registers.registerProcessor(negativeDataFilter("pie"));
}
var ScatterSeriesModel = (
/** @class */
(function(_super) {
__extends(ScatterSeriesModel2, _super);
function ScatterSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ScatterSeriesModel2.type;
_this.hasSymbolVisual = true;
return _this;
}
ScatterSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this, {
useEncodeDefaulter: true
});
};
ScatterSeriesModel2.prototype.getProgressive = function() {
var progressive = this.option.progressive;
if (progressive == null) {
return this.option.large ? 5e3 : this.get("progressive");
}
return progressive;
};
ScatterSeriesModel2.prototype.getProgressiveThreshold = function() {
var progressiveThreshold = this.option.progressiveThreshold;
if (progressiveThreshold == null) {
return this.option.large ? 1e4 : this.get("progressiveThreshold");
}
return progressiveThreshold;
};
ScatterSeriesModel2.prototype.brushSelector = function(dataIndex, data, selectors) {
return selectors.point(data.getItemLayout(dataIndex));
};
ScatterSeriesModel2.prototype.getZLevelKey = function() {
return this.getData().count() > this.getProgressiveThreshold() ? this.id : "";
};
ScatterSeriesModel2.type = "series.scatter";
ScatterSeriesModel2.dependencies = ["grid", "polar", "geo", "singleAxis", "calendar"];
ScatterSeriesModel2.defaultOption = {
coordinateSystem: "cartesian2d",
// zlevel: 0,
z: 2,
legendHoverLink: true,
symbolSize: 10,
// symbolRotate: null, // 图形旋转控制
large: false,
// Available when large is true
largeThreshold: 2e3,
// cursor: null,
itemStyle: {
opacity: 0.8
// color: 各异
},
emphasis: {
scale: true
},
// If clip the overflow graphics
// Works on cartesian / polar series
clip: true,
select: {
itemStyle: {
borderColor: "#212121"
}
},
universalTransition: {
divideShape: "clone"
}
// progressive: null
};
return ScatterSeriesModel2;
})(SeriesModel)
);
var BOOST_SIZE_THRESHOLD = 4;
var LargeSymbolPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function LargeSymbolPathShape2() {
}
return LargeSymbolPathShape2;
})()
);
var LargeSymbolPath = (
/** @class */
(function(_super) {
__extends(LargeSymbolPath2, _super);
function LargeSymbolPath2(opts) {
var _this = _super.call(this, opts) || this;
_this._off = 0;
_this.hoverDataIdx = -1;
return _this;
}
LargeSymbolPath2.prototype.getDefaultShape = function() {
return new LargeSymbolPathShape();
};
LargeSymbolPath2.prototype.reset = function() {
this.notClear = false;
this._off = 0;
};
LargeSymbolPath2.prototype.buildPath = function(path, shape) {
var points2 = shape.points;
var size = shape.size;
var symbolProxy = this.symbolProxy;
var symbolProxyShape = symbolProxy.shape;
var ctx = path.getContext ? path.getContext() : path;
var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;
var softClipShape = this.softClipShape;
var i;
if (canBoost) {
this._ctx = ctx;
return;
}
this._ctx = null;
for (i = this._off; i < points2.length; ) {
var x = points2[i++];
var y = points2[i++];
if (isNaN(x) || isNaN(y)) {
continue;
}
if (softClipShape && !softClipShape.contain(x, y)) {
continue;
}
symbolProxyShape.x = x - size[0] / 2;
symbolProxyShape.y = y - size[1] / 2;
symbolProxyShape.width = size[0];
symbolProxyShape.height = size[1];
symbolProxy.buildPath(path, symbolProxyShape, true);
}
if (this.incremental) {
this._off = i;
this.notClear = true;
}
};
LargeSymbolPath2.prototype.afterBrush = function() {
var shape = this.shape;
var points2 = shape.points;
var size = shape.size;
var ctx = this._ctx;
var softClipShape = this.softClipShape;
var i;
if (!ctx) {
return;
}
for (i = this._off; i < points2.length; ) {
var x = points2[i++];
var y = points2[i++];
if (isNaN(x) || isNaN(y)) {
continue;
}
if (softClipShape && !softClipShape.contain(x, y)) {
continue;
}
ctx.fillRect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);
}
if (this.incremental) {
this._off = i;
this.notClear = true;
}
};
LargeSymbolPath2.prototype.findDataIndex = function(x, y) {
var shape = this.shape;
var points2 = shape.points;
var size = shape.size;
var w = Math.max(size[0], 4);
var h = Math.max(size[1], 4);
for (var idx = points2.length / 2 - 1; idx >= 0; idx--) {
var i = idx * 2;
var x0 = points2[i] - w / 2;
var y0 = points2[i + 1] - h / 2;
if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {
return idx;
}
}
return -1;
};
LargeSymbolPath2.prototype.contain = function(x, y) {
var localPos = this.transformCoordToLocal(x, y);
var rect = this.getBoundingRect();
x = localPos[0];
y = localPos[1];
if (rect.contain(x, y)) {
var dataIdx = this.hoverDataIdx = this.findDataIndex(x, y);
return dataIdx >= 0;
}
this.hoverDataIdx = -1;
return false;
};
LargeSymbolPath2.prototype.getBoundingRect = function() {
var rect = this._rect;
if (!rect) {
var shape = this.shape;
var points2 = shape.points;
var size = shape.size;
var w = size[0];
var h = size[1];
var minX = Infinity;
var minY = Infinity;
var maxX = -Infinity;
var maxY = -Infinity;
for (var i = 0; i < points2.length; ) {
var x = points2[i++];
var y = points2[i++];
minX = Math.min(x, minX);
maxX = Math.max(x, maxX);
minY = Math.min(y, minY);
maxY = Math.max(y, maxY);
}
rect = this._rect = new BoundingRect(minX - w / 2, minY - h / 2, maxX - minX + w, maxY - minY + h);
}
return rect;
};
return LargeSymbolPath2;
})(Path)
);
var LargeSymbolDraw = (
/** @class */
(function() {
function LargeSymbolDraw2() {
this.group = new Group$3();
}
LargeSymbolDraw2.prototype.updateData = function(data, opt) {
this._clear();
var symbolEl = this._create();
symbolEl.setShape({
points: data.getLayout("points")
});
this._setCommon(symbolEl, data, opt);
};
LargeSymbolDraw2.prototype.updateLayout = function(data) {
var points2 = data.getLayout("points");
this.group.eachChild(function(child) {
if (child.startIndex != null) {
var len2 = (child.endIndex - child.startIndex) * 2;
var byteOffset = child.startIndex * 4 * 2;
points2 = new Float32Array(points2.buffer, byteOffset, len2);
}
child.setShape("points", points2);
child.reset();
});
};
LargeSymbolDraw2.prototype.incrementalPrepareUpdate = function(data) {
this._clear();
};
LargeSymbolDraw2.prototype.incrementalUpdate = function(taskParams, data, opt) {
var lastAdded = this._newAdded[0];
var points2 = data.getLayout("points");
var oldPoints = lastAdded && lastAdded.shape.points;
if (oldPoints && oldPoints.length < 2e4) {
var oldLen = oldPoints.length;
var newPoints = new Float32Array(oldLen + points2.length);
newPoints.set(oldPoints);
newPoints.set(points2, oldLen);
lastAdded.endIndex = taskParams.end;
lastAdded.setShape({
points: newPoints
});
} else {
this._newAdded = [];
var symbolEl = this._create();
symbolEl.startIndex = taskParams.start;
symbolEl.endIndex = taskParams.end;
symbolEl.incremental = true;
symbolEl.setShape({
points: points2
});
this._setCommon(symbolEl, data, opt);
}
};
LargeSymbolDraw2.prototype.eachRendered = function(cb) {
this._newAdded[0] && cb(this._newAdded[0]);
};
LargeSymbolDraw2.prototype._create = function() {
var symbolEl = new LargeSymbolPath({
cursor: "default"
});
symbolEl.ignoreCoarsePointer = true;
this.group.add(symbolEl);
this._newAdded.push(symbolEl);
return symbolEl;
};
LargeSymbolDraw2.prototype._setCommon = function(symbolEl, data, opt) {
var hostModel = data.hostModel;
opt = opt || {};
var size = data.getVisual("symbolSize");
symbolEl.setShape("size", size instanceof Array ? size : [size, size]);
symbolEl.softClipShape = opt.clipShape || null;
symbolEl.symbolProxy = createSymbol$1(data.getVisual("symbol"), 0, 0, 0, 0);
symbolEl.setColor = symbolEl.symbolProxy.setColor;
var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;
symbolEl.useStyle(
// Draw shadow when doing fillRect is extremely slow.
hostModel.getModel("itemStyle").getItemStyle(extrudeShadow ? ["color", "shadowBlur", "shadowColor"] : ["color"])
);
var globalStyle = data.getVisual("style");
var visualColor = globalStyle && globalStyle.fill;
if (visualColor) {
symbolEl.setColor(visualColor);
}
var ecData = getECData(symbolEl);
ecData.seriesIndex = hostModel.seriesIndex;
symbolEl.on("mousemove", function(e) {
ecData.dataIndex = null;
var dataIndex = symbolEl.hoverDataIdx;
if (dataIndex >= 0) {
ecData.dataIndex = dataIndex + (symbolEl.startIndex || 0);
}
});
};
LargeSymbolDraw2.prototype.remove = function() {
this._clear();
};
LargeSymbolDraw2.prototype._clear = function() {
this._newAdded = [];
this.group.removeAll();
};
return LargeSymbolDraw2;
})()
);
var ScatterView = (
/** @class */
(function(_super) {
__extends(ScatterView2, _super);
function ScatterView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ScatterView2.type;
return _this;
}
ScatterView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var symbolDraw = this._updateSymbolDraw(data, seriesModel);
symbolDraw.updateData(data, {
// TODO
// If this parameter should be a shape or a bounding volume
// shape will be more general.
// But bounding volume like bounding rect will be much faster in the contain calculation
clipShape: this._getClipShape(seriesModel)
});
this._finished = true;
};
ScatterView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var symbolDraw = this._updateSymbolDraw(data, seriesModel);
symbolDraw.incrementalPrepareUpdate(data);
this._finished = false;
};
ScatterView2.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) {
this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData(), {
clipShape: this._getClipShape(seriesModel)
});
this._finished = taskParams.end === seriesModel.getData().count();
};
ScatterView2.prototype.updateTransform = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
this.group.dirty();
if (!this._finished || data.count() > 1e4) {
return {
update: true
};
} else {
var res = pointsLayout("").reset(seriesModel, ecModel, api);
if (res.progress) {
res.progress({
start: 0,
end: data.count(),
count: data.count()
}, data);
}
this._symbolDraw.updateLayout(data);
}
};
ScatterView2.prototype.eachRendered = function(cb) {
this._symbolDraw && this._symbolDraw.eachRendered(cb);
};
ScatterView2.prototype._getClipShape = function(seriesModel) {
if (!seriesModel.get("clip", true)) {
return;
}
var coordSys = seriesModel.coordinateSystem;
return coordSys && coordSys.getArea && coordSys.getArea(0.1);
};
ScatterView2.prototype._updateSymbolDraw = function(data, seriesModel) {
var symbolDraw = this._symbolDraw;
var pipelineContext = seriesModel.pipelineContext;
var isLargeDraw = pipelineContext.large;
if (!symbolDraw || isLargeDraw !== this._isLargeDraw) {
symbolDraw && symbolDraw.remove();
symbolDraw = this._symbolDraw = isLargeDraw ? new LargeSymbolDraw() : new SymbolDraw();
this._isLargeDraw = isLargeDraw;
this.group.removeAll();
}
this.group.add(symbolDraw.group);
return symbolDraw;
};
ScatterView2.prototype.remove = function(ecModel, api) {
this._symbolDraw && this._symbolDraw.remove(true);
this._symbolDraw = null;
};
ScatterView2.prototype.dispose = function() {
};
ScatterView2.type = "scatter";
return ScatterView2;
})(ChartView)
);
var GridModel = (
/** @class */
(function(_super) {
__extends(GridModel2, _super);
function GridModel2() {
return _super !== null && _super.apply(this, arguments) || this;
}
GridModel2.type = "grid";
GridModel2.dependencies = ["xAxis", "yAxis"];
GridModel2.layoutMode = "box";
GridModel2.defaultOption = {
show: false,
// zlevel: 0,
z: 0,
left: "10%",
top: 60,
right: "10%",
bottom: 70,
// If grid size contain label
containLabel: false,
// width: {totalWidth} - left - right,
// height: {totalHeight} - top - bottom,
backgroundColor: "rgba(0,0,0,0)",
borderWidth: 1,
borderColor: "#ccc"
};
return GridModel2;
})(ComponentModel)
);
var CartesianAxisModel = (
/** @class */
(function(_super) {
__extends(CartesianAxisModel2, _super);
function CartesianAxisModel2() {
return _super !== null && _super.apply(this, arguments) || this;
}
CartesianAxisModel2.prototype.getCoordSysModel = function() {
return this.getReferringComponents("grid", SINGLE_REFERRING).models[0];
};
CartesianAxisModel2.type = "cartesian2dAxis";
return CartesianAxisModel2;
})(ComponentModel)
);
mixin(CartesianAxisModel, AxisModelCommonMixin);
var defaultOption$1 = {
show: true,
// zlevel: 0,
z: 0,
// Inverse the axis.
inverse: false,
// Axis name displayed.
name: "",
// 'start' | 'middle' | 'end'
nameLocation: "end",
// By degree. By default auto rotate by nameLocation.
nameRotate: null,
nameTruncate: {
maxWidth: null,
ellipsis: "...",
placeholder: "."
},
// Use global text style by default.
nameTextStyle: {},
// The gap between axisName and axisLine.
nameGap: 15,
// Default `false` to support tooltip.
silent: false,
// Default `false` to avoid legacy user event listener fail.
triggerEvent: false,
tooltip: {
show: false
},
axisPointer: {},
axisLine: {
show: true,
onZero: true,
onZeroAxisIndex: null,
lineStyle: {
color: "#6E7079",
width: 1,
type: "solid"
},
// The arrow at both ends the the axis.
symbol: ["none", "none"],
symbolSize: [10, 15]
},
axisTick: {
show: true,
// Whether axisTick is inside the grid or outside the grid.
inside: false,
// The length of axisTick.
length: 5,
lineStyle: {
width: 1
}
},
axisLabel: {
show: true,
// Whether axisLabel is inside the grid or outside the grid.
inside: false,
rotate: 0,
// true | false | null/undefined (auto)
showMinLabel: null,
// true | false | null/undefined (auto)
showMaxLabel: null,
margin: 8,
// formatter: null,
fontSize: 12
},
splitLine: {
show: true,
showMinLine: true,
showMaxLine: true,
lineStyle: {
color: ["#E0E6F1"],
width: 1,
type: "solid"
}
},
splitArea: {
show: false,
areaStyle: {
color: ["rgba(250,250,250,0.2)", "rgba(210,219,238,0.2)"]
}
}
};
var categoryAxis = merge({
// The gap at both ends of the axis. For categoryAxis, boolean.
boundaryGap: true,
// Set false to faster category collection.
deduplication: null,
// splitArea: {
// show: false
// },
splitLine: {
show: false
},
axisTick: {
// If tick is align with label when boundaryGap is true
alignWithLabel: false,
interval: "auto"
},
axisLabel: {
interval: "auto"
}
}, defaultOption$1);
var valueAxis = merge({
boundaryGap: [0, 0],
axisLine: {
// Not shown when other axis is categoryAxis in cartesian
show: "auto"
},
axisTick: {
// Not shown when other axis is categoryAxis in cartesian
show: "auto"
},
// TODO
// min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]
splitNumber: 5,
minorTick: {
// Minor tick, not available for cateogry axis.
show: false,
// Split number of minor ticks. The value should be in range of (0, 100)
splitNumber: 5,
// Length of minor tick
length: 3,
// Line style
lineStyle: {
// Default to be same with axisTick
}
},
minorSplitLine: {
show: false,
lineStyle: {
color: "#F4F7FD",
width: 1
}
}
}, defaultOption$1);
var timeAxis = merge({
splitNumber: 6,
axisLabel: {
// To eliminate labels that are not nice
showMinLabel: false,
showMaxLabel: false,
rich: {
primary: {
fontWeight: "bold"
}
}
},
splitLine: {
show: false
}
}, valueAxis);
var logAxis = defaults({
logBase: 10
}, valueAxis);
const axisDefault = {
category: categoryAxis,
value: valueAxis,
time: timeAxis,
log: logAxis
};
var AXIS_TYPES = {
value: 1,
category: 1,
time: 1,
log: 1
};
function axisModelCreator(registers, axisName, BaseAxisModelClass, extraDefaultOption) {
each$f(AXIS_TYPES, function(v, axisType) {
var defaultOption2 = merge(merge({}, axisDefault[axisType], true), extraDefaultOption, true);
var AxisModel = (
/** @class */
(function(_super) {
__extends(AxisModel2, _super);
function AxisModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = axisName + "Axis." + axisType;
return _this;
}
AxisModel2.prototype.mergeDefaultAndTheme = function(option, ecModel) {
var layoutMode = fetchLayoutMode(this);
var inputPositionParams = layoutMode ? getLayoutParams(option) : {};
var themeModel = ecModel.getTheme();
merge(option, themeModel.get(axisType + "Axis"));
merge(option, this.getDefaultOption());
option.type = getAxisType(option);
if (layoutMode) {
mergeLayoutParam(option, inputPositionParams, layoutMode);
}
};
AxisModel2.prototype.optionUpdated = function() {
var thisOption = this.option;
if (thisOption.type === "category") {
this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);
}
};
AxisModel2.prototype.getCategories = function(rawData) {
var option = this.option;
if (option.type === "category") {
if (rawData) {
return option.data;
}
return this.__ordinalMeta.categories;
}
};
AxisModel2.prototype.getOrdinalMeta = function() {
return this.__ordinalMeta;
};
AxisModel2.type = axisName + "Axis." + axisType;
AxisModel2.defaultOption = defaultOption2;
return AxisModel2;
})(BaseAxisModelClass)
);
registers.registerComponentModel(AxisModel);
});
registers.registerSubTypeDefaulter(axisName + "Axis", getAxisType);
}
function getAxisType(option) {
return option.type || (option.data ? "category" : "value");
}
var Cartesian = (
/** @class */
(function() {
function Cartesian2(name) {
this.type = "cartesian";
this._dimList = [];
this._axes = {};
this.name = name || "";
}
Cartesian2.prototype.getAxis = function(dim) {
return this._axes[dim];
};
Cartesian2.prototype.getAxes = function() {
return map$1(this._dimList, function(dim) {
return this._axes[dim];
}, this);
};
Cartesian2.prototype.getAxesByScale = function(scaleType) {
scaleType = scaleType.toLowerCase();
return filter(this.getAxes(), function(axis) {
return axis.scale.type === scaleType;
});
};
Cartesian2.prototype.addAxis = function(axis) {
var dim = axis.dim;
this._axes[dim] = axis;
this._dimList.push(dim);
};
return Cartesian2;
})()
);
var cartesian2DDimensions = ["x", "y"];
function canCalculateAffineTransform(scale2) {
return scale2.type === "interval" || scale2.type === "time";
}
var Cartesian2D = (
/** @class */
(function(_super) {
__extends(Cartesian2D2, _super);
function Cartesian2D2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "cartesian2d";
_this.dimensions = cartesian2DDimensions;
return _this;
}
Cartesian2D2.prototype.calcAffineTransform = function() {
this._transform = this._invTransform = null;
var xAxisScale = this.getAxis("x").scale;
var yAxisScale = this.getAxis("y").scale;
if (!canCalculateAffineTransform(xAxisScale) || !canCalculateAffineTransform(yAxisScale)) {
return;
}
var xScaleExtent = xAxisScale.getExtent();
var yScaleExtent = yAxisScale.getExtent();
var start = this.dataToPoint([xScaleExtent[0], yScaleExtent[0]]);
var end = this.dataToPoint([xScaleExtent[1], yScaleExtent[1]]);
var xScaleSpan = xScaleExtent[1] - xScaleExtent[0];
var yScaleSpan = yScaleExtent[1] - yScaleExtent[0];
if (!xScaleSpan || !yScaleSpan) {
return;
}
var scaleX = (end[0] - start[0]) / xScaleSpan;
var scaleY = (end[1] - start[1]) / yScaleSpan;
var translateX = start[0] - xScaleExtent[0] * scaleX;
var translateY = start[1] - yScaleExtent[0] * scaleY;
var m = this._transform = [scaleX, 0, 0, scaleY, translateX, translateY];
this._invTransform = invert([], m);
};
Cartesian2D2.prototype.getBaseAxis = function() {
return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x");
};
Cartesian2D2.prototype.containPoint = function(point) {
var axisX = this.getAxis("x");
var axisY = this.getAxis("y");
return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1]));
};
Cartesian2D2.prototype.containData = function(data) {
return this.getAxis("x").containData(data[0]) && this.getAxis("y").containData(data[1]);
};
Cartesian2D2.prototype.containZone = function(data1, data2) {
var zoneDiag1 = this.dataToPoint(data1);
var zoneDiag2 = this.dataToPoint(data2);
var area = this.getArea();
var zone = new BoundingRect(zoneDiag1[0], zoneDiag1[1], zoneDiag2[0] - zoneDiag1[0], zoneDiag2[1] - zoneDiag1[1]);
return area.intersect(zone);
};
Cartesian2D2.prototype.dataToPoint = function(data, clamp2, out) {
out = out || [];
var xVal = data[0];
var yVal = data[1];
if (this._transform && xVal != null && isFinite(xVal) && yVal != null && isFinite(yVal)) {
return applyTransform$1(out, data, this._transform);
}
var xAxis = this.getAxis("x");
var yAxis = this.getAxis("y");
out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(xVal, clamp2));
out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(yVal, clamp2));
return out;
};
Cartesian2D2.prototype.clampData = function(data, out) {
var xScale = this.getAxis("x").scale;
var yScale = this.getAxis("y").scale;
var xAxisExtent = xScale.getExtent();
var yAxisExtent = yScale.getExtent();
var x = xScale.parse(data[0]);
var y = yScale.parse(data[1]);
out = out || [];
out[0] = Math.min(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1]));
out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1]));
return out;
};
Cartesian2D2.prototype.pointToData = function(point, clamp2) {
var out = [];
if (this._invTransform) {
return applyTransform$1(out, point, this._invTransform);
}
var xAxis = this.getAxis("x");
var yAxis = this.getAxis("y");
out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp2);
out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp2);
return out;
};
Cartesian2D2.prototype.getOtherAxis = function(axis) {
return this.getAxis(axis.dim === "x" ? "y" : "x");
};
Cartesian2D2.prototype.getArea = function(tolerance) {
tolerance = tolerance || 0;
var xExtent = this.getAxis("x").getGlobalExtent();
var yExtent = this.getAxis("y").getGlobalExtent();
var x = Math.min(xExtent[0], xExtent[1]) - tolerance;
var y = Math.min(yExtent[0], yExtent[1]) - tolerance;
var width = Math.max(xExtent[0], xExtent[1]) - x + tolerance;
var height = Math.max(yExtent[0], yExtent[1]) - y + tolerance;
return new BoundingRect(x, y, width, height);
};
return Cartesian2D2;
})(Cartesian)
);
var Axis2D = (
/** @class */
(function(_super) {
__extends(Axis2D2, _super);
function Axis2D2(dim, scale2, coordExtent, axisType, position2) {
var _this = _super.call(this, dim, scale2, coordExtent) || this;
_this.index = 0;
_this.type = axisType || "value";
_this.position = position2 || "bottom";
return _this;
}
Axis2D2.prototype.isHorizontal = function() {
var position2 = this.position;
return position2 === "top" || position2 === "bottom";
};
Axis2D2.prototype.getGlobalExtent = function(asc2) {
var ret = this.getExtent();
ret[0] = this.toGlobalCoord(ret[0]);
ret[1] = this.toGlobalCoord(ret[1]);
asc2 && ret[0] > ret[1] && ret.reverse();
return ret;
};
Axis2D2.prototype.pointToData = function(point, clamp2) {
return this.coordToData(this.toLocalCoord(point[this.dim === "x" ? 0 : 1]), clamp2);
};
Axis2D2.prototype.setCategorySortInfo = function(info) {
if (this.type !== "category") {
return false;
}
this.model.option.categorySortInfo = info;
this.scale.setSortInfo(info);
};
return Axis2D2;
})(Axis)
);
function layout$2(gridModel, axisModel, opt) {
opt = opt || {};
var grid = gridModel.coordinateSystem;
var axis = axisModel.axis;
var layout2 = {};
var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];
var rawAxisPosition = axis.position;
var axisPosition = otherAxisOnZeroOf ? "onZero" : rawAxisPosition;
var axisDim = axis.dim;
var rect = grid.getRect();
var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
var idx = {
left: 0,
right: 1,
top: 0,
bottom: 1,
onZero: 2
};
var axisOffset = axisModel.get("offset") || 0;
var posBound = axisDim === "x" ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];
if (otherAxisOnZeroOf) {
var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));
posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);
}
layout2.position = [axisDim === "y" ? posBound[idx[axisPosition]] : rectBound[0], axisDim === "x" ? posBound[idx[axisPosition]] : rectBound[3]];
layout2.rotation = Math.PI / 2 * (axisDim === "x" ? 0 : 1);
var dirMap = {
top: -1,
bottom: 1,
left: -1,
right: 1
};
layout2.labelDirection = layout2.tickDirection = layout2.nameDirection = dirMap[rawAxisPosition];
layout2.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0;
if (axisModel.get(["axisTick", "inside"])) {
layout2.tickDirection = -layout2.tickDirection;
}
if (retrieve(opt.labelInside, axisModel.get(["axisLabel", "inside"]))) {
layout2.labelDirection = -layout2.labelDirection;
}
var labelRotate = axisModel.get(["axisLabel", "rotate"]);
layout2.labelRotate = axisPosition === "top" ? -labelRotate : labelRotate;
layout2.z2 = 1;
return layout2;
}
function isCartesian2DSeries(seriesModel) {
return seriesModel.get("coordinateSystem") === "cartesian2d";
}
function findAxisModels(seriesModel) {
var axisModelMap = {
xAxisModel: null,
yAxisModel: null
};
each$f(axisModelMap, function(v, key) {
var axisType = key.replace(/Model$/, "");
var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0];
axisModelMap[key] = axisModel;
});
return axisModelMap;
}
var mathLog = Math.log;
function alignScaleTicks(scale2, axisModel, alignToScale) {
var intervalScaleProto2 = IntervalScale.prototype;
var alignToTicks = intervalScaleProto2.getTicks.call(alignToScale);
var alignToNicedTicks = intervalScaleProto2.getTicks.call(alignToScale, true);
var alignToSplitNumber = alignToTicks.length - 1;
var alignToInterval = intervalScaleProto2.getInterval.call(alignToScale);
var scaleExtent = getScaleExtent(scale2, axisModel);
var rawExtent = scaleExtent.extent;
var isMinFixed = scaleExtent.fixMin;
var isMaxFixed = scaleExtent.fixMax;
if (scale2.type === "log") {
var logBase = mathLog(scale2.base);
rawExtent = [mathLog(rawExtent[0]) / logBase, mathLog(rawExtent[1]) / logBase];
}
scale2.setExtent(rawExtent[0], rawExtent[1]);
scale2.calcNiceExtent({
splitNumber: alignToSplitNumber,
fixMin: isMinFixed,
fixMax: isMaxFixed
});
var extent = intervalScaleProto2.getExtent.call(scale2);
if (isMinFixed) {
rawExtent[0] = extent[0];
}
if (isMaxFixed) {
rawExtent[1] = extent[1];
}
var interval = intervalScaleProto2.getInterval.call(scale2);
var min2 = rawExtent[0];
var max2 = rawExtent[1];
if (isMinFixed && isMaxFixed) {
interval = (max2 - min2) / alignToSplitNumber;
} else if (isMinFixed) {
max2 = rawExtent[0] + interval * alignToSplitNumber;
while (max2 < rawExtent[1] && isFinite(max2) && isFinite(rawExtent[1])) {
interval = increaseInterval(interval);
max2 = rawExtent[0] + interval * alignToSplitNumber;
}
} else if (isMaxFixed) {
min2 = rawExtent[1] - interval * alignToSplitNumber;
while (min2 > rawExtent[0] && isFinite(min2) && isFinite(rawExtent[0])) {
interval = increaseInterval(interval);
min2 = rawExtent[1] - interval * alignToSplitNumber;
}
} else {
var nicedSplitNumber = scale2.getTicks().length - 1;
if (nicedSplitNumber > alignToSplitNumber) {
interval = increaseInterval(interval);
}
var range = interval * alignToSplitNumber;
max2 = Math.ceil(rawExtent[1] / interval) * interval;
min2 = round$1(max2 - range);
if (min2 < 0 && rawExtent[0] >= 0) {
min2 = 0;
max2 = round$1(range);
} else if (max2 > 0 && rawExtent[1] <= 0) {
max2 = 0;
min2 = -round$1(range);
}
}
var t0 = (alignToTicks[0].value - alignToNicedTicks[0].value) / alignToInterval;
var t1 = (alignToTicks[alignToSplitNumber].value - alignToNicedTicks[alignToSplitNumber].value) / alignToInterval;
intervalScaleProto2.setExtent.call(scale2, min2 + interval * t0, max2 + interval * t1);
intervalScaleProto2.setInterval.call(scale2, interval);
if (t0 || t1) {
intervalScaleProto2.setNiceExtent.call(scale2, min2 + interval, max2 - interval);
}
}
var Grid = (
/** @class */
(function() {
function Grid2(gridModel, ecModel, api) {
this.type = "grid";
this._coordsMap = {};
this._coordsList = [];
this._axesMap = {};
this._axesList = [];
this.axisPointerEnabled = true;
this.dimensions = cartesian2DDimensions;
this._initCartesian(gridModel, ecModel, api);
this.model = gridModel;
}
Grid2.prototype.getRect = function() {
return this._rect;
};
Grid2.prototype.update = function(ecModel, api) {
var axesMap = this._axesMap;
this._updateScale(ecModel, this.model);
function updateAxisTicks(axes) {
var alignTo;
var axesIndices = keys(axes);
var len2 = axesIndices.length;
if (!len2) {
return;
}
var axisNeedsAlign = [];
for (var i = len2 - 1; i >= 0; i--) {
var idx = +axesIndices[i];
var axis = axes[idx];
var model = axis.model;
var scale2 = axis.scale;
if (
// Only value and log axis without interval support alignTicks.
isIntervalOrLogScale(scale2) && model.get("alignTicks") && model.get("interval") == null
) {
axisNeedsAlign.push(axis);
} else {
niceScaleExtent(scale2, model);
if (isIntervalOrLogScale(scale2)) {
alignTo = axis;
}
}
}
if (axisNeedsAlign.length) {
if (!alignTo) {
alignTo = axisNeedsAlign.pop();
niceScaleExtent(alignTo.scale, alignTo.model);
}
each$f(axisNeedsAlign, function(axis2) {
alignScaleTicks(axis2.scale, axis2.model, alignTo.scale);
});
}
}
updateAxisTicks(axesMap.x);
updateAxisTicks(axesMap.y);
var onZeroRecords = {};
each$f(axesMap.x, function(xAxis) {
fixAxisOnZero(axesMap, "y", xAxis, onZeroRecords);
});
each$f(axesMap.y, function(yAxis) {
fixAxisOnZero(axesMap, "x", yAxis, onZeroRecords);
});
this.resize(this.model, api);
};
Grid2.prototype.resize = function(gridModel, api, ignoreContainLabel) {
var boxLayoutParams = gridModel.getBoxLayoutParams();
var isContainLabel = !ignoreContainLabel && gridModel.get("containLabel");
var gridRect = getLayoutRect(boxLayoutParams, {
width: api.getWidth(),
height: api.getHeight()
});
this._rect = gridRect;
var axesList = this._axesList;
adjustAxes();
if (isContainLabel) {
each$f(axesList, function(axis) {
if (!axis.model.get(["axisLabel", "inside"])) {
var labelUnionRect = estimateLabelUnionRect(axis);
if (labelUnionRect) {
var dim = axis.isHorizontal() ? "height" : "width";
var margin = axis.model.get(["axisLabel", "margin"]);
gridRect[dim] -= labelUnionRect[dim] + margin;
if (axis.position === "top") {
gridRect.y += labelUnionRect.height + margin;
} else if (axis.position === "left") {
gridRect.x += labelUnionRect.width + margin;
}
}
}
});
adjustAxes();
}
each$f(this._coordsList, function(coord) {
coord.calcAffineTransform();
});
function adjustAxes() {
each$f(axesList, function(axis) {
var isHorizontal = axis.isHorizontal();
var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];
var idx = axis.inverse ? 1 : 0;
axis.setExtent(extent[idx], extent[1 - idx]);
updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);
});
}
};
Grid2.prototype.getAxis = function(dim, axisIndex) {
var axesMapOnDim = this._axesMap[dim];
if (axesMapOnDim != null) {
return axesMapOnDim[axisIndex || 0];
}
};
Grid2.prototype.getAxes = function() {
return this._axesList.slice();
};
Grid2.prototype.getCartesian = function(xAxisIndex, yAxisIndex) {
if (xAxisIndex != null && yAxisIndex != null) {
var key = "x" + xAxisIndex + "y" + yAxisIndex;
return this._coordsMap[key];
}
if (isObject$3(xAxisIndex)) {
yAxisIndex = xAxisIndex.yAxisIndex;
xAxisIndex = xAxisIndex.xAxisIndex;
}
for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {
if (coordList[i].getAxis("x").index === xAxisIndex || coordList[i].getAxis("y").index === yAxisIndex) {
return coordList[i];
}
}
};
Grid2.prototype.getCartesians = function() {
return this._coordsList.slice();
};
Grid2.prototype.convertToPixel = function(ecModel, finder, value) {
var target = this._findConvertTarget(finder);
return target.cartesian ? target.cartesian.dataToPoint(value) : target.axis ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) : null;
};
Grid2.prototype.convertFromPixel = function(ecModel, finder, value) {
var target = this._findConvertTarget(finder);
return target.cartesian ? target.cartesian.pointToData(value) : target.axis ? target.axis.coordToData(target.axis.toLocalCoord(value)) : null;
};
Grid2.prototype._findConvertTarget = function(finder) {
var seriesModel = finder.seriesModel;
var xAxisModel = finder.xAxisModel || seriesModel && seriesModel.getReferringComponents("xAxis", SINGLE_REFERRING).models[0];
var yAxisModel = finder.yAxisModel || seriesModel && seriesModel.getReferringComponents("yAxis", SINGLE_REFERRING).models[0];
var gridModel = finder.gridModel;
var coordsList = this._coordsList;
var cartesian;
var axis;
if (seriesModel) {
cartesian = seriesModel.coordinateSystem;
indexOf(coordsList, cartesian) < 0 && (cartesian = null);
} else if (xAxisModel && yAxisModel) {
cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
} else if (xAxisModel) {
axis = this.getAxis("x", xAxisModel.componentIndex);
} else if (yAxisModel) {
axis = this.getAxis("y", yAxisModel.componentIndex);
} else if (gridModel) {
var grid = gridModel.coordinateSystem;
if (grid === this) {
cartesian = this._coordsList[0];
}
}
return {
cartesian,
axis
};
};
Grid2.prototype.containPoint = function(point) {
var coord = this._coordsList[0];
if (coord) {
return coord.containPoint(point);
}
};
Grid2.prototype._initCartesian = function(gridModel, ecModel, api) {
var _this = this;
var grid = this;
var axisPositionUsed = {
left: false,
right: false,
top: false,
bottom: false
};
var axesMap = {
x: {},
y: {}
};
var axesCount = {
x: 0,
y: 0
};
ecModel.eachComponent("xAxis", createAxisCreator("x"), this);
ecModel.eachComponent("yAxis", createAxisCreator("y"), this);
if (!axesCount.x || !axesCount.y) {
this._axesMap = {};
this._axesList = [];
return;
}
this._axesMap = axesMap;
each$f(axesMap.x, function(xAxis, xAxisIndex) {
each$f(axesMap.y, function(yAxis, yAxisIndex) {
var key = "x" + xAxisIndex + "y" + yAxisIndex;
var cartesian = new Cartesian2D(key);
cartesian.master = _this;
cartesian.model = gridModel;
_this._coordsMap[key] = cartesian;
_this._coordsList.push(cartesian);
cartesian.addAxis(xAxis);
cartesian.addAxis(yAxis);
});
});
function createAxisCreator(dimName) {
return function(axisModel, idx) {
if (!isAxisUsedInTheGrid(axisModel, gridModel)) {
return;
}
var axisPosition = axisModel.get("position");
if (dimName === "x") {
if (axisPosition !== "top" && axisPosition !== "bottom") {
axisPosition = axisPositionUsed.bottom ? "top" : "bottom";
}
} else {
if (axisPosition !== "left" && axisPosition !== "right") {
axisPosition = axisPositionUsed.left ? "right" : "left";
}
}
axisPositionUsed[axisPosition] = true;
var axis = new Axis2D(dimName, createScaleByModel$1(axisModel), [0, 0], axisModel.get("type"), axisPosition);
var isCategory2 = axis.type === "category";
axis.onBand = isCategory2 && axisModel.get("boundaryGap");
axis.inverse = axisModel.get("inverse");
axisModel.axis = axis;
axis.model = axisModel;
axis.grid = grid;
axis.index = idx;
grid._axesList.push(axis);
axesMap[dimName][idx] = axis;
axesCount[dimName]++;
};
}
};
Grid2.prototype._updateScale = function(ecModel, gridModel) {
each$f(this._axesList, function(axis) {
axis.scale.setExtent(Infinity, -Infinity);
if (axis.type === "category") {
var categorySortInfo = axis.model.get("categorySortInfo");
axis.scale.setSortInfo(categorySortInfo);
}
});
ecModel.eachSeries(function(seriesModel) {
if (isCartesian2DSeries(seriesModel)) {
var axesModelMap = findAxisModels(seriesModel);
var xAxisModel = axesModelMap.xAxisModel;
var yAxisModel = axesModelMap.yAxisModel;
if (!isAxisUsedInTheGrid(xAxisModel, gridModel) || !isAxisUsedInTheGrid(yAxisModel, gridModel)) {
return;
}
var cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
var data = seriesModel.getData();
var xAxis = cartesian.getAxis("x");
var yAxis = cartesian.getAxis("y");
unionExtent(data, xAxis);
unionExtent(data, yAxis);
}
}, this);
function unionExtent(data, axis) {
each$f(getDataDimensionsOnAxis(data, axis.dim), function(dim) {
axis.scale.unionExtentFromData(data, dim);
});
}
};
Grid2.prototype.getTooltipAxes = function(dim) {
var baseAxes = [];
var otherAxes = [];
each$f(this.getCartesians(), function(cartesian) {
var baseAxis = dim != null && dim !== "auto" ? cartesian.getAxis(dim) : cartesian.getBaseAxis();
var otherAxis = cartesian.getOtherAxis(baseAxis);
indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);
indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);
});
return {
baseAxes,
otherAxes
};
};
Grid2.create = function(ecModel, api) {
var grids = [];
ecModel.eachComponent("grid", function(gridModel, idx) {
var grid = new Grid2(gridModel, ecModel, api);
grid.name = "grid_" + idx;
grid.resize(gridModel, api, true);
gridModel.coordinateSystem = grid;
grids.push(grid);
});
ecModel.eachSeries(function(seriesModel) {
if (!isCartesian2DSeries(seriesModel)) {
return;
}
var axesModelMap = findAxisModels(seriesModel);
var xAxisModel = axesModelMap.xAxisModel;
var yAxisModel = axesModelMap.yAxisModel;
var gridModel = xAxisModel.getCoordSysModel();
var grid = gridModel.coordinateSystem;
seriesModel.coordinateSystem = grid.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
});
return grids;
};
Grid2.dimensions = cartesian2DDimensions;
return Grid2;
})()
);
function isAxisUsedInTheGrid(axisModel, gridModel) {
return axisModel.getCoordSysModel() === gridModel;
}
function fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) {
axis.getAxesOnZeroOf = function() {
return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : [];
};
var otherAxes = axesMap[otherAxisDim];
var otherAxisOnZeroOf;
var axisModel = axis.model;
var onZero = axisModel.get(["axisLine", "onZero"]);
var onZeroAxisIndex = axisModel.get(["axisLine", "onZeroAxisIndex"]);
if (!onZero) {
return;
}
if (onZeroAxisIndex != null) {
if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {
otherAxisOnZeroOf = otherAxes[onZeroAxisIndex];
}
} else {
for (var idx in otherAxes) {
if (otherAxes.hasOwnProperty(idx) && canOnZeroToAxis(otherAxes[idx]) && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]) {
otherAxisOnZeroOf = otherAxes[idx];
break;
}
}
}
if (otherAxisOnZeroOf) {
onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true;
}
function getOnZeroRecordKey(axis2) {
return axis2.dim + "_" + axis2.index;
}
}
function canOnZeroToAxis(axis) {
return axis && axis.type !== "category" && axis.type !== "time" && ifAxisCrossZero(axis);
}
function updateAxisTransform(axis, coordBase) {
var axisExtent = axis.getExtent();
var axisExtentSum = axisExtent[0] + axisExtent[1];
axis.toGlobalCoord = axis.dim === "x" ? function(coord) {
return coord + coordBase;
} : function(coord) {
return axisExtentSum - coord + coordBase;
};
axis.toLocalCoord = axis.dim === "x" ? function(coord) {
return coord - coordBase;
} : function(coord) {
return axisExtentSum - coord + coordBase;
};
}
var PI$3 = Math.PI;
var AxisBuilder = (
/** @class */
(function() {
function AxisBuilder2(axisModel, opt) {
this.group = new Group$3();
this.opt = opt;
this.axisModel = axisModel;
defaults(opt, {
labelOffset: 0,
nameDirection: 1,
tickDirection: 1,
labelDirection: 1,
silent: true,
handleAutoShown: function() {
return true;
}
});
var transformGroup = new Group$3({
x: opt.position[0],
y: opt.position[1],
rotation: opt.rotation
});
transformGroup.updateTransform();
this._transformGroup = transformGroup;
}
AxisBuilder2.prototype.hasBuilder = function(name) {
return !!builders[name];
};
AxisBuilder2.prototype.add = function(name) {
builders[name](this.opt, this.axisModel, this.group, this._transformGroup);
};
AxisBuilder2.prototype.getGroup = function() {
return this.group;
};
AxisBuilder2.innerTextLayout = function(axisRotation, textRotation, direction) {
var rotationDiff = remRadian(textRotation - axisRotation);
var textAlign;
var textVerticalAlign;
if (isRadianAroundZero(rotationDiff)) {
textVerticalAlign = direction > 0 ? "top" : "bottom";
textAlign = "center";
} else if (isRadianAroundZero(rotationDiff - PI$3)) {
textVerticalAlign = direction > 0 ? "bottom" : "top";
textAlign = "center";
} else {
textVerticalAlign = "middle";
if (rotationDiff > 0 && rotationDiff < PI$3) {
textAlign = direction > 0 ? "right" : "left";
} else {
textAlign = direction > 0 ? "left" : "right";
}
}
return {
rotation: rotationDiff,
textAlign,
textVerticalAlign
};
};
AxisBuilder2.makeAxisEventDataBase = function(axisModel) {
var eventData = {
componentType: axisModel.mainType,
componentIndex: axisModel.componentIndex
};
eventData[axisModel.mainType + "Index"] = axisModel.componentIndex;
return eventData;
};
AxisBuilder2.isLabelSilent = function(axisModel) {
var tooltipOpt = axisModel.get("tooltip");
return axisModel.get("silent") || !(axisModel.get("triggerEvent") || tooltipOpt && tooltipOpt.show);
};
return AxisBuilder2;
})()
);
var builders = {
axisLine: function(opt, axisModel, group, transformGroup) {
var shown = axisModel.get(["axisLine", "show"]);
if (shown === "auto" && opt.handleAutoShown) {
shown = opt.handleAutoShown("axisLine");
}
if (!shown) {
return;
}
var extent = axisModel.axis.getExtent();
var matrix = transformGroup.transform;
var pt12 = [extent[0], 0];
var pt22 = [extent[1], 0];
var inverse = pt12[0] > pt22[0];
if (matrix) {
applyTransform$1(pt12, pt12, matrix);
applyTransform$1(pt22, pt22, matrix);
}
var lineStyle = extend({
lineCap: "round"
}, axisModel.getModel(["axisLine", "lineStyle"]).getLineStyle());
var line = new Line$1({
shape: {
x1: pt12[0],
y1: pt12[1],
x2: pt22[0],
y2: pt22[1]
},
style: lineStyle,
strokeContainThreshold: opt.strokeContainThreshold || 5,
silent: true,
z2: 1
});
subPixelOptimizeLine(line.shape, line.style.lineWidth);
line.anid = "line";
group.add(line);
var arrows = axisModel.get(["axisLine", "symbol"]);
if (arrows != null) {
var arrowSize = axisModel.get(["axisLine", "symbolSize"]);
if (isString(arrows)) {
arrows = [arrows, arrows];
}
if (isString(arrowSize) || isNumber(arrowSize)) {
arrowSize = [arrowSize, arrowSize];
}
var arrowOffset = normalizeSymbolOffset(axisModel.get(["axisLine", "symbolOffset"]) || 0, arrowSize);
var symbolWidth_1 = arrowSize[0];
var symbolHeight_1 = arrowSize[1];
each$f([{
rotate: opt.rotation + Math.PI / 2,
offset: arrowOffset[0],
r: 0
}, {
rotate: opt.rotation - Math.PI / 2,
offset: arrowOffset[1],
r: Math.sqrt((pt12[0] - pt22[0]) * (pt12[0] - pt22[0]) + (pt12[1] - pt22[1]) * (pt12[1] - pt22[1]))
}], function(point, index) {
if (arrows[index] !== "none" && arrows[index] != null) {
var symbol = createSymbol$1(arrows[index], -symbolWidth_1 / 2, -symbolHeight_1 / 2, symbolWidth_1, symbolHeight_1, lineStyle.stroke, true);
var r = point.r + point.offset;
var pt = inverse ? pt22 : pt12;
symbol.attr({
rotation: point.rotate,
x: pt[0] + r * Math.cos(opt.rotation),
y: pt[1] - r * Math.sin(opt.rotation),
silent: true,
z2: 11
});
group.add(symbol);
}
});
}
},
axisTickLabel: function(opt, axisModel, group, transformGroup) {
var ticksEls = buildAxisMajorTicks(group, transformGroup, axisModel, opt);
var labelEls = buildAxisLabel(group, transformGroup, axisModel, opt);
fixMinMaxLabelShow(axisModel, labelEls, ticksEls);
buildAxisMinorTicks(group, transformGroup, axisModel, opt.tickDirection);
if (axisModel.get(["axisLabel", "hideOverlap"])) {
var labelList = prepareLayoutList(map$1(labelEls, function(label) {
return {
label,
priority: label.z2,
defaultAttr: {
ignore: label.ignore
}
};
}));
hideOverlap(labelList);
}
},
axisName: function(opt, axisModel, group, transformGroup) {
var name = retrieve(opt.axisName, axisModel.get("name"));
if (!name) {
return;
}
var nameLocation = axisModel.get("nameLocation");
var nameDirection = opt.nameDirection;
var textStyleModel = axisModel.getModel("nameTextStyle");
var gap = axisModel.get("nameGap") || 0;
var extent = axisModel.axis.getExtent();
var gapSignal = extent[0] > extent[1] ? -1 : 1;
var pos = [
nameLocation === "start" ? extent[0] - gapSignal * gap : nameLocation === "end" ? extent[1] + gapSignal * gap : (extent[0] + extent[1]) / 2,
// Reuse labelOffset.
isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0
];
var labelLayout2;
var nameRotation = axisModel.get("nameRotate");
if (nameRotation != null) {
nameRotation = nameRotation * PI$3 / 180;
}
var axisNameAvailableWidth;
if (isNameLocationCenter(nameLocation)) {
labelLayout2 = AxisBuilder.innerTextLayout(
opt.rotation,
nameRotation != null ? nameRotation : opt.rotation,
// Adapt to axis.
nameDirection
);
} else {
labelLayout2 = endTextLayout(opt.rotation, nameLocation, nameRotation || 0, extent);
axisNameAvailableWidth = opt.axisNameAvailableWidth;
if (axisNameAvailableWidth != null) {
axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout2.rotation));
!isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);
}
}
var textFont = textStyleModel.getFont();
var truncateOpt = axisModel.get("nameTruncate", true) || {};
var ellipsis = truncateOpt.ellipsis;
var maxWidth = retrieve(opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth);
var textEl = new ZRText({
x: pos[0],
y: pos[1],
rotation: labelLayout2.rotation,
silent: AxisBuilder.isLabelSilent(axisModel),
style: createTextStyle(textStyleModel, {
text: name,
font: textFont,
overflow: "truncate",
width: maxWidth,
ellipsis,
fill: textStyleModel.getTextColor() || axisModel.get(["axisLine", "lineStyle", "color"]),
align: textStyleModel.get("align") || labelLayout2.textAlign,
verticalAlign: textStyleModel.get("verticalAlign") || labelLayout2.textVerticalAlign
}),
z2: 1
});
setTooltipConfig({
el: textEl,
componentModel: axisModel,
itemName: name
});
textEl.__fullText = name;
textEl.anid = "name";
if (axisModel.get("triggerEvent")) {
var eventData = AxisBuilder.makeAxisEventDataBase(axisModel);
eventData.targetType = "axisName";
eventData.name = name;
getECData(textEl).eventData = eventData;
}
transformGroup.add(textEl);
textEl.updateTransform();
group.add(textEl);
textEl.decomposeTransform();
}
};
function endTextLayout(rotation, textPosition, textRotate, extent) {
var rotationDiff = remRadian(textRotate - rotation);
var textAlign;
var textVerticalAlign;
var inverse = extent[0] > extent[1];
var onLeft = textPosition === "start" && !inverse || textPosition !== "start" && inverse;
if (isRadianAroundZero(rotationDiff - PI$3 / 2)) {
textVerticalAlign = onLeft ? "bottom" : "top";
textAlign = "center";
} else if (isRadianAroundZero(rotationDiff - PI$3 * 1.5)) {
textVerticalAlign = onLeft ? "top" : "bottom";
textAlign = "center";
} else {
textVerticalAlign = "middle";
if (rotationDiff < PI$3 * 1.5 && rotationDiff > PI$3 / 2) {
textAlign = onLeft ? "left" : "right";
} else {
textAlign = onLeft ? "right" : "left";
}
}
return {
rotation: rotationDiff,
textAlign,
textVerticalAlign
};
}
function fixMinMaxLabelShow(axisModel, labelEls, tickEls) {
if (shouldShowAllLabels(axisModel.axis)) {
return;
}
var showMinLabel = axisModel.get(["axisLabel", "showMinLabel"]);
var showMaxLabel = axisModel.get(["axisLabel", "showMaxLabel"]);
labelEls = labelEls || [];
tickEls = tickEls || [];
var firstLabel = labelEls[0];
var nextLabel = labelEls[1];
var lastLabel = labelEls[labelEls.length - 1];
var prevLabel = labelEls[labelEls.length - 2];
var firstTick = tickEls[0];
var nextTick = tickEls[1];
var lastTick = tickEls[tickEls.length - 1];
var prevTick = tickEls[tickEls.length - 2];
if (showMinLabel === false) {
ignoreEl(firstLabel);
ignoreEl(firstTick);
} else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {
if (showMinLabel) {
ignoreEl(nextLabel);
ignoreEl(nextTick);
} else {
ignoreEl(firstLabel);
ignoreEl(firstTick);
}
}
if (showMaxLabel === false) {
ignoreEl(lastLabel);
ignoreEl(lastTick);
} else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {
if (showMaxLabel) {
ignoreEl(prevLabel);
ignoreEl(prevTick);
} else {
ignoreEl(lastLabel);
ignoreEl(lastTick);
}
}
}
function ignoreEl(el) {
el && (el.ignore = true);
}
function isTwoLabelOverlapped(current, next) {
var firstRect = current && current.getBoundingRect().clone();
var nextRect = next && next.getBoundingRect().clone();
if (!firstRect || !nextRect) {
return;
}
var mRotationBack = identity([]);
rotate(mRotationBack, mRotationBack, -current.rotation);
firstRect.applyTransform(mul([], mRotationBack, current.getLocalTransform()));
nextRect.applyTransform(mul([], mRotationBack, next.getLocalTransform()));
return firstRect.intersect(nextRect);
}
function isNameLocationCenter(nameLocation) {
return nameLocation === "middle" || nameLocation === "center";
}
function createTicks(ticksCoords, tickTransform, tickEndCoord, tickLineStyle, anidPrefix) {
var tickEls = [];
var pt12 = [];
var pt22 = [];
for (var i = 0; i < ticksCoords.length; i++) {
var tickCoord = ticksCoords[i].coord;
pt12[0] = tickCoord;
pt12[1] = 0;
pt22[0] = tickCoord;
pt22[1] = tickEndCoord;
if (tickTransform) {
applyTransform$1(pt12, pt12, tickTransform);
applyTransform$1(pt22, pt22, tickTransform);
}
var tickEl = new Line$1({
shape: {
x1: pt12[0],
y1: pt12[1],
x2: pt22[0],
y2: pt22[1]
},
style: tickLineStyle,
z2: 2,
autoBatch: true,
silent: true
});
subPixelOptimizeLine(tickEl.shape, tickEl.style.lineWidth);
tickEl.anid = anidPrefix + "_" + ticksCoords[i].tickValue;
tickEls.push(tickEl);
}
return tickEls;
}
function buildAxisMajorTicks(group, transformGroup, axisModel, opt) {
var axis = axisModel.axis;
var tickModel = axisModel.getModel("axisTick");
var shown = tickModel.get("show");
if (shown === "auto" && opt.handleAutoShown) {
shown = opt.handleAutoShown("axisTick");
}
if (!shown || axis.scale.isBlank()) {
return;
}
var lineStyleModel = tickModel.getModel("lineStyle");
var tickEndCoord = opt.tickDirection * tickModel.get("length");
var ticksCoords = axis.getTicksCoords();
var ticksEls = createTicks(ticksCoords, transformGroup.transform, tickEndCoord, defaults(lineStyleModel.getLineStyle(), {
stroke: axisModel.get(["axisLine", "lineStyle", "color"])
}), "ticks");
for (var i = 0; i < ticksEls.length; i++) {
group.add(ticksEls[i]);
}
return ticksEls;
}
function buildAxisMinorTicks(group, transformGroup, axisModel, tickDirection) {
var axis = axisModel.axis;
var minorTickModel = axisModel.getModel("minorTick");
if (!minorTickModel.get("show") || axis.scale.isBlank()) {
return;
}
var minorTicksCoords = axis.getMinorTicksCoords();
if (!minorTicksCoords.length) {
return;
}
var lineStyleModel = minorTickModel.getModel("lineStyle");
var tickEndCoord = tickDirection * minorTickModel.get("length");
var minorTickLineStyle = defaults(lineStyleModel.getLineStyle(), defaults(axisModel.getModel("axisTick").getLineStyle(), {
stroke: axisModel.get(["axisLine", "lineStyle", "color"])
}));
for (var i = 0; i < minorTicksCoords.length; i++) {
var minorTicksEls = createTicks(minorTicksCoords[i], transformGroup.transform, tickEndCoord, minorTickLineStyle, "minorticks_" + i);
for (var k = 0; k < minorTicksEls.length; k++) {
group.add(minorTicksEls[k]);
}
}
}
function buildAxisLabel(group, transformGroup, axisModel, opt) {
var axis = axisModel.axis;
var show = retrieve(opt.axisLabelShow, axisModel.get(["axisLabel", "show"]));
if (!show || axis.scale.isBlank()) {
return;
}
var labelModel = axisModel.getModel("axisLabel");
var labelMargin = labelModel.get("margin");
var labels = axis.getViewLabels();
var labelRotation = (retrieve(opt.labelRotate, labelModel.get("rotate")) || 0) * PI$3 / 180;
var labelLayout2 = AxisBuilder.innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);
var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true);
var labelEls = [];
var silent = AxisBuilder.isLabelSilent(axisModel);
var triggerEvent = axisModel.get("triggerEvent");
each$f(labels, function(labelItem, index) {
var tickValue = axis.scale.type === "ordinal" ? axis.scale.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue;
var formattedLabel = labelItem.formattedLabel;
var rawLabel = labelItem.rawLabel;
var itemLabelModel = labelModel;
if (rawCategoryData && rawCategoryData[tickValue]) {
var rawCategoryItem = rawCategoryData[tickValue];
if (isObject$3(rawCategoryItem) && rawCategoryItem.textStyle) {
itemLabelModel = new Model(rawCategoryItem.textStyle, labelModel, axisModel.ecModel);
}
}
var textColor = itemLabelModel.getTextColor() || axisModel.get(["axisLine", "lineStyle", "color"]);
var tickCoord = axis.dataToCoord(tickValue);
var align = itemLabelModel.getShallow("align", true) || labelLayout2.textAlign;
var alignMin = retrieve2(itemLabelModel.getShallow("alignMinLabel", true), align);
var alignMax = retrieve2(itemLabelModel.getShallow("alignMaxLabel", true), align);
var verticalAlign = itemLabelModel.getShallow("verticalAlign", true) || itemLabelModel.getShallow("baseline", true) || labelLayout2.textVerticalAlign;
var verticalAlignMin = retrieve2(itemLabelModel.getShallow("verticalAlignMinLabel", true), verticalAlign);
var verticalAlignMax = retrieve2(itemLabelModel.getShallow("verticalAlignMaxLabel", true), verticalAlign);
var textEl = new ZRText({
x: tickCoord,
y: opt.labelOffset + opt.labelDirection * labelMargin,
rotation: labelLayout2.rotation,
silent,
z2: 10 + (labelItem.level || 0),
style: createTextStyle(itemLabelModel, {
text: formattedLabel,
align: index === 0 ? alignMin : index === labels.length - 1 ? alignMax : align,
verticalAlign: index === 0 ? verticalAlignMin : index === labels.length - 1 ? verticalAlignMax : verticalAlign,
fill: isFunction(textColor) ? textColor(
// (1) In category axis with data zoom, tick is not the original
// index of axis.data. So tick should not be exposed to user
// in category axis.
// (2) Compatible with previous version, which always use formatted label as
// input. But in interval scale the formatted label is like '223,445', which
// maked user replace ','. So we modify it to return original val but remain
// it as 'string' to avoid error in replacing.
axis.type === "category" ? rawLabel : axis.type === "value" ? tickValue + "" : tickValue,
index
) : textColor
})
});
textEl.anid = "label_" + tickValue;
setTooltipConfig({
el: textEl,
componentModel: axisModel,
itemName: formattedLabel,
formatterParamsExtra: {
isTruncated: function() {
return textEl.isTruncated;
},
value: rawLabel,
tickIndex: index
}
});
if (triggerEvent) {
var eventData = AxisBuilder.makeAxisEventDataBase(axisModel);
eventData.targetType = "axisLabel";
eventData.value = rawLabel;
eventData.tickIndex = index;
if (axis.type === "category") {
eventData.dataIndex = tickValue;
}
getECData(textEl).eventData = eventData;
}
transformGroup.add(textEl);
textEl.updateTransform();
labelEls.push(textEl);
group.add(textEl);
textEl.decomposeTransform();
});
return labelEls;
}
function collect(ecModel, api) {
var result = {
/**
* key: makeKey(axis.model)
* value: {
* axis,
* coordSys,
* axisPointerModel,
* triggerTooltip,
* triggerEmphasis,
* involveSeries,
* snap,
* seriesModels,
* seriesDataCount
* }
*/
axesInfo: {},
seriesInvolved: false,
/**
* key: makeKey(coordSys.model)
* value: Object: key makeKey(axis.model), value: axisInfo
*/
coordSysAxesInfo: {},
coordSysMap: {}
};
collectAxesInfo(result, ecModel, api);
result.seriesInvolved && collectSeriesInfo(result, ecModel);
return result;
}
function collectAxesInfo(result, ecModel, api) {
var globalTooltipModel = ecModel.getComponent("tooltip");
var globalAxisPointerModel = ecModel.getComponent("axisPointer");
var linksOption = globalAxisPointerModel.get("link", true) || [];
var linkGroups = [];
each$f(api.getCoordinateSystems(), function(coordSys) {
if (!coordSys.axisPointerEnabled) {
return;
}
var coordSysKey = makeKey(coordSys.model);
var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};
result.coordSysMap[coordSysKey] = coordSys;
var coordSysModel = coordSys.model;
var baseTooltipModel = coordSysModel.getModel("tooltip", globalTooltipModel);
each$f(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null));
if (coordSys.getTooltipAxes && globalTooltipModel && baseTooltipModel.get("show")) {
var triggerAxis = baseTooltipModel.get("trigger") === "axis";
var cross = baseTooltipModel.get(["axisPointer", "type"]) === "cross";
var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get(["axisPointer", "axis"]));
if (triggerAxis || cross) {
each$f(tooltipAxes.baseAxes, curry$1(saveTooltipAxisInfo, cross ? "cross" : true, triggerAxis));
}
if (cross) {
each$f(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, "cross", false));
}
}
function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {
var axisPointerModel = axis.model.getModel("axisPointer", globalAxisPointerModel);
var axisPointerShow = axisPointerModel.get("show");
if (!axisPointerShow || axisPointerShow === "auto" && !fromTooltip && !isHandleTrigger(axisPointerModel)) {
return;
}
if (triggerTooltip == null) {
triggerTooltip = axisPointerModel.get("triggerTooltip");
}
axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel;
var snap = axisPointerModel.get("snap");
var triggerEmphasis = axisPointerModel.get("triggerEmphasis");
var axisKey = makeKey(axis.model);
var involveSeries = triggerTooltip || snap || axis.type === "category";
var axisInfo = result.axesInfo[axisKey] = {
key: axisKey,
axis,
coordSys,
axisPointerModel,
triggerTooltip,
triggerEmphasis,
involveSeries,
snap,
useHandle: isHandleTrigger(axisPointerModel),
seriesModels: [],
linkGroup: null
};
axesInfoInCoordSys[axisKey] = axisInfo;
result.seriesInvolved = result.seriesInvolved || involveSeries;
var groupIndex = getLinkGroupIndex(linksOption, axis);
if (groupIndex != null) {
var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {
axesInfo: {}
});
linkGroup.axesInfo[axisKey] = axisInfo;
linkGroup.mapper = linksOption[groupIndex].mapper;
axisInfo.linkGroup = linkGroup;
}
}
});
}
function makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) {
var tooltipAxisPointerModel = baseTooltipModel.getModel("axisPointer");
var fields = ["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z"];
var volatileOption = {};
each$f(fields, function(field) {
volatileOption[field] = clone$1(tooltipAxisPointerModel.get(field));
});
volatileOption.snap = axis.type !== "category" && !!triggerTooltip;
if (tooltipAxisPointerModel.get("type") === "cross") {
volatileOption.type = "line";
}
var labelOption = volatileOption.label || (volatileOption.label = {});
labelOption.show == null && (labelOption.show = false);
if (fromTooltip === "cross") {
var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get(["label", "show"]);
labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true;
if (!triggerTooltip) {
var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get("crossStyle");
crossStyle && defaults(labelOption, crossStyle.textStyle);
}
}
return axis.model.getModel("axisPointer", new Model(volatileOption, globalAxisPointerModel, ecModel));
}
function collectSeriesInfo(result, ecModel) {
ecModel.eachSeries(function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var seriesTooltipTrigger = seriesModel.get(["tooltip", "trigger"], true);
var seriesTooltipShow = seriesModel.get(["tooltip", "show"], true);
if (!coordSys || seriesTooltipTrigger === "none" || seriesTooltipTrigger === false || seriesTooltipTrigger === "item" || seriesTooltipShow === false || seriesModel.get(["axisPointer", "show"], true) === false) {
return;
}
each$f(result.coordSysAxesInfo[makeKey(coordSys.model)], function(axisInfo) {
var axis = axisInfo.axis;
if (coordSys.getAxis(axis.dim) === axis) {
axisInfo.seriesModels.push(seriesModel);
axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);
axisInfo.seriesDataCount += seriesModel.getData().count();
}
});
});
}
function getLinkGroupIndex(linksOption, axis) {
var axisModel = axis.model;
var dim = axis.dim;
for (var i = 0; i < linksOption.length; i++) {
var linkOption = linksOption[i] || {};
if (checkPropInLink(linkOption[dim + "AxisId"], axisModel.id) || checkPropInLink(linkOption[dim + "AxisIndex"], axisModel.componentIndex) || checkPropInLink(linkOption[dim + "AxisName"], axisModel.name)) {
return i;
}
}
}
function checkPropInLink(linkPropValue, axisPropValue) {
return linkPropValue === "all" || isArray$1(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue;
}
function fixValue(axisModel) {
var axisInfo = getAxisInfo$1(axisModel);
if (!axisInfo) {
return;
}
var axisPointerModel = axisInfo.axisPointerModel;
var scale2 = axisInfo.axis.scale;
var option = axisPointerModel.option;
var status = axisPointerModel.get("status");
var value = axisPointerModel.get("value");
if (value != null) {
value = scale2.parse(value);
}
var useHandle = isHandleTrigger(axisPointerModel);
if (status == null) {
option.status = useHandle ? "show" : "hide";
}
var extent = scale2.getExtent().slice();
extent[0] > extent[1] && extent.reverse();
if (
// Pick a value on axis when initializing.
value == null || value > extent[1]
) {
value = extent[1];
}
if (value < extent[0]) {
value = extent[0];
}
option.value = value;
if (useHandle) {
option.status = axisInfo.axis.scale.isBlank() ? "hide" : "show";
}
}
function getAxisInfo$1(axisModel) {
var coordSysAxesInfo = (axisModel.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];
}
function getAxisPointerModel(axisModel) {
var axisInfo = getAxisInfo$1(axisModel);
return axisInfo && axisInfo.axisPointerModel;
}
function isHandleTrigger(axisPointerModel) {
return !!axisPointerModel.get(["handle", "show"]);
}
function makeKey(model) {
return model.type + "||" + model.id;
}
var axisPointerClazz = {};
var AxisView = (
/** @class */
(function(_super) {
__extends(AxisView2, _super);
function AxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = AxisView2.type;
return _this;
}
AxisView2.prototype.render = function(axisModel, ecModel, api, payload) {
this.axisPointerClass && fixValue(axisModel);
_super.prototype.render.apply(this, arguments);
this._doUpdateAxisPointerClass(axisModel, api, true);
};
AxisView2.prototype.updateAxisPointer = function(axisModel, ecModel, api, payload) {
this._doUpdateAxisPointerClass(axisModel, api, false);
};
AxisView2.prototype.remove = function(ecModel, api) {
var axisPointer = this._axisPointer;
axisPointer && axisPointer.remove(api);
};
AxisView2.prototype.dispose = function(ecModel, api) {
this._disposeAxisPointer(api);
_super.prototype.dispose.apply(this, arguments);
};
AxisView2.prototype._doUpdateAxisPointerClass = function(axisModel, api, forceRender) {
var Clazz = AxisView2.getAxisPointerClass(this.axisPointerClass);
if (!Clazz) {
return;
}
var axisPointerModel = getAxisPointerModel(axisModel);
axisPointerModel ? (this._axisPointer || (this._axisPointer = new Clazz())).render(axisModel, axisPointerModel, api, forceRender) : this._disposeAxisPointer(api);
};
AxisView2.prototype._disposeAxisPointer = function(api) {
this._axisPointer && this._axisPointer.dispose(api);
this._axisPointer = null;
};
AxisView2.registerAxisPointerClass = function(type, clazz) {
axisPointerClazz[type] = clazz;
};
AxisView2.getAxisPointerClass = function(type) {
return type && axisPointerClazz[type];
};
AxisView2.type = "axis";
return AxisView2;
})(ComponentView)
);
var inner$f = makeInner();
function rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel) {
var axis = axisModel.axis;
if (axis.scale.isBlank()) {
return;
}
var splitAreaModel = axisModel.getModel("splitArea");
var areaStyleModel = splitAreaModel.getModel("areaStyle");
var areaColors = areaStyleModel.get("color");
var gridRect = gridModel.coordinateSystem.getRect();
var ticksCoords = axis.getTicksCoords({
tickModel: splitAreaModel,
clamp: true
});
if (!ticksCoords.length) {
return;
}
var areaColorsLen = areaColors.length;
var lastSplitAreaColors = inner$f(axisView).splitAreaColors;
var newSplitAreaColors = createHashMap();
var colorIndex = 0;
if (lastSplitAreaColors) {
for (var i = 0; i < ticksCoords.length; i++) {
var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);
if (cIndex != null) {
colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;
break;
}
}
}
var prev = axis.toGlobalCoord(ticksCoords[0].coord);
var areaStyle = areaStyleModel.getAreaStyle();
areaColors = isArray$1(areaColors) ? areaColors : [areaColors];
for (var i = 1; i < ticksCoords.length; i++) {
var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
var x = void 0;
var y = void 0;
var width = void 0;
var height = void 0;
if (axis.isHorizontal()) {
x = prev;
y = gridRect.y;
width = tickCoord - x;
height = gridRect.height;
prev = x + width;
} else {
x = gridRect.x;
y = prev;
width = gridRect.width;
height = tickCoord - y;
prev = y + height;
}
var tickValue = ticksCoords[i - 1].tickValue;
tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);
axisGroup.add(new Rect$2({
anid: tickValue != null ? "area_" + tickValue : null,
shape: {
x,
y,
width,
height
},
style: defaults({
fill: areaColors[colorIndex]
}, areaStyle),
autoBatch: true,
silent: true
}));
colorIndex = (colorIndex + 1) % areaColorsLen;
}
inner$f(axisView).splitAreaColors = newSplitAreaColors;
}
function rectCoordAxisHandleRemove(axisView) {
inner$f(axisView).splitAreaColors = null;
}
var axisBuilderAttrs$3 = ["axisLine", "axisTickLabel", "axisName"];
var selfBuilderAttrs$2 = ["splitArea", "splitLine", "minorSplitLine"];
var CartesianAxisView = (
/** @class */
(function(_super) {
__extends(CartesianAxisView2, _super);
function CartesianAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CartesianAxisView2.type;
_this.axisPointerClass = "CartesianAxisPointer";
return _this;
}
CartesianAxisView2.prototype.render = function(axisModel, ecModel, api, payload) {
this.group.removeAll();
var oldAxisGroup = this._axisGroup;
this._axisGroup = new Group$3();
this.group.add(this._axisGroup);
if (!axisModel.get("show")) {
return;
}
var gridModel = axisModel.getCoordSysModel();
var layout2 = layout$2(gridModel, axisModel);
var axisBuilder = new AxisBuilder(axisModel, extend({
handleAutoShown: function(elementType) {
var cartesians = gridModel.coordinateSystem.getCartesians();
for (var i = 0; i < cartesians.length; i++) {
if (isIntervalOrLogScale(cartesians[i].getOtherAxis(axisModel.axis).scale)) {
return true;
}
}
return false;
}
}, layout2));
each$f(axisBuilderAttrs$3, axisBuilder.add, axisBuilder);
this._axisGroup.add(axisBuilder.getGroup());
each$f(selfBuilderAttrs$2, function(name) {
if (axisModel.get([name, "show"])) {
axisElementBuilders$2[name](this, this._axisGroup, axisModel, gridModel);
}
}, this);
var isInitialSortFromBarRacing = payload && payload.type === "changeAxisOrder" && payload.isInitSort;
if (!isInitialSortFromBarRacing) {
groupTransition(oldAxisGroup, this._axisGroup, axisModel);
}
_super.prototype.render.call(this, axisModel, ecModel, api, payload);
};
CartesianAxisView2.prototype.remove = function() {
rectCoordAxisHandleRemove(this);
};
CartesianAxisView2.type = "cartesianAxis";
return CartesianAxisView2;
})(AxisView)
);
var axisElementBuilders$2 = {
splitLine: function(axisView, axisGroup, axisModel, gridModel) {
var axis = axisModel.axis;
if (axis.scale.isBlank()) {
return;
}
var splitLineModel = axisModel.getModel("splitLine");
var lineStyleModel = splitLineModel.getModel("lineStyle");
var lineColors = lineStyleModel.get("color");
var showMinLine = splitLineModel.get("showMinLine") !== false;
var showMaxLine = splitLineModel.get("showMaxLine") !== false;
lineColors = isArray$1(lineColors) ? lineColors : [lineColors];
var gridRect = gridModel.coordinateSystem.getRect();
var isHorizontal = axis.isHorizontal();
var lineCount = 0;
var ticksCoords = axis.getTicksCoords({
tickModel: splitLineModel
});
var p1 = [];
var p2 = [];
var lineStyle = lineStyleModel.getLineStyle();
for (var i = 0; i < ticksCoords.length; i++) {
var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
if (i === 0 && !showMinLine || i === ticksCoords.length - 1 && !showMaxLine) {
continue;
}
var tickValue = ticksCoords[i].tickValue;
if (isHorizontal) {
p1[0] = tickCoord;
p1[1] = gridRect.y;
p2[0] = tickCoord;
p2[1] = gridRect.y + gridRect.height;
} else {
p1[0] = gridRect.x;
p1[1] = tickCoord;
p2[0] = gridRect.x + gridRect.width;
p2[1] = tickCoord;
}
var colorIndex = lineCount++ % lineColors.length;
var line = new Line$1({
anid: tickValue != null ? "line_" + tickValue : null,
autoBatch: true,
shape: {
x1: p1[0],
y1: p1[1],
x2: p2[0],
y2: p2[1]
},
style: defaults({
stroke: lineColors[colorIndex]
}, lineStyle),
silent: true
});
subPixelOptimizeLine(line.shape, lineStyle.lineWidth);
axisGroup.add(line);
}
},
minorSplitLine: function(axisView, axisGroup, axisModel, gridModel) {
var axis = axisModel.axis;
var minorSplitLineModel = axisModel.getModel("minorSplitLine");
var lineStyleModel = minorSplitLineModel.getModel("lineStyle");
var gridRect = gridModel.coordinateSystem.getRect();
var isHorizontal = axis.isHorizontal();
var minorTicksCoords = axis.getMinorTicksCoords();
if (!minorTicksCoords.length) {
return;
}
var p1 = [];
var p2 = [];
var lineStyle = lineStyleModel.getLineStyle();
for (var i = 0; i < minorTicksCoords.length; i++) {
for (var k = 0; k < minorTicksCoords[i].length; k++) {
var tickCoord = axis.toGlobalCoord(minorTicksCoords[i][k].coord);
if (isHorizontal) {
p1[0] = tickCoord;
p1[1] = gridRect.y;
p2[0] = tickCoord;
p2[1] = gridRect.y + gridRect.height;
} else {
p1[0] = gridRect.x;
p1[1] = tickCoord;
p2[0] = gridRect.x + gridRect.width;
p2[1] = tickCoord;
}
var line = new Line$1({
anid: "minor_line_" + minorTicksCoords[i][k].tickValue,
autoBatch: true,
shape: {
x1: p1[0],
y1: p1[1],
x2: p2[0],
y2: p2[1]
},
style: lineStyle,
silent: true
});
subPixelOptimizeLine(line.shape, lineStyle.lineWidth);
axisGroup.add(line);
}
}
},
splitArea: function(axisView, axisGroup, axisModel, gridModel) {
rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel);
}
};
var CartesianXAxisView = (
/** @class */
(function(_super) {
__extends(CartesianXAxisView2, _super);
function CartesianXAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CartesianXAxisView2.type;
return _this;
}
CartesianXAxisView2.type = "xAxis";
return CartesianXAxisView2;
})(CartesianAxisView)
);
var CartesianYAxisView = (
/** @class */
(function(_super) {
__extends(CartesianYAxisView2, _super);
function CartesianYAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CartesianXAxisView.type;
return _this;
}
CartesianYAxisView2.type = "yAxis";
return CartesianYAxisView2;
})(CartesianAxisView)
);
var GridView = (
/** @class */
(function(_super) {
__extends(GridView2, _super);
function GridView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "grid";
return _this;
}
GridView2.prototype.render = function(gridModel, ecModel) {
this.group.removeAll();
if (gridModel.get("show")) {
this.group.add(new Rect$2({
shape: gridModel.coordinateSystem.getRect(),
style: defaults({
fill: gridModel.get("backgroundColor")
}, gridModel.getItemStyle()),
silent: true,
z2: -1
}));
}
};
GridView2.type = "grid";
return GridView2;
})(ComponentView)
);
var extraOption = {
// gridIndex: 0,
// gridId: '',
offset: 0
};
function install$P(registers) {
registers.registerComponentView(GridView);
registers.registerComponentModel(GridModel);
registers.registerCoordinateSystem("cartesian2d", Grid);
axisModelCreator(registers, "x", CartesianAxisModel, extraOption);
axisModelCreator(registers, "y", CartesianAxisModel, extraOption);
registers.registerComponentView(CartesianXAxisView);
registers.registerComponentView(CartesianYAxisView);
registers.registerPreprocessor(function(option) {
if (option.xAxis && option.yAxis && !option.grid) {
option.grid = {};
}
});
}
function install$O(registers) {
use(install$P);
registers.registerSeriesModel(ScatterSeriesModel);
registers.registerChartView(ScatterView);
registers.registerLayout(pointsLayout("scatter"));
}
function radarLayout(ecModel) {
ecModel.eachSeriesByType("radar", function(seriesModel) {
var data = seriesModel.getData();
var points2 = [];
var coordSys = seriesModel.coordinateSystem;
if (!coordSys) {
return;
}
var axes = coordSys.getIndicatorAxes();
each$f(axes, function(axis, axisIndex) {
data.each(data.mapDimension(axes[axisIndex].dim), function(val, dataIndex) {
points2[dataIndex] = points2[dataIndex] || [];
var point = coordSys.dataToPoint(val, axisIndex);
points2[dataIndex][axisIndex] = isValidPoint(point) ? point : getValueMissingPoint(coordSys);
});
});
data.each(function(idx) {
var firstPoint = find(points2[idx], function(point) {
return isValidPoint(point);
}) || getValueMissingPoint(coordSys);
points2[idx].push(firstPoint.slice());
data.setItemLayout(idx, points2[idx]);
});
});
}
function isValidPoint(point) {
return !isNaN(point[0]) && !isNaN(point[1]);
}
function getValueMissingPoint(coordSys) {
return [coordSys.cx, coordSys.cy];
}
function radarBackwardCompat(option) {
var polarOptArr = option.polar;
if (polarOptArr) {
if (!isArray$1(polarOptArr)) {
polarOptArr = [polarOptArr];
}
var polarNotRadar_1 = [];
each$f(polarOptArr, function(polarOpt, idx) {
if (polarOpt.indicator) {
if (polarOpt.type && !polarOpt.shape) {
polarOpt.shape = polarOpt.type;
}
option.radar = option.radar || [];
if (!isArray$1(option.radar)) {
option.radar = [option.radar];
}
option.radar.push(polarOpt);
} else {
polarNotRadar_1.push(polarOpt);
}
});
option.polar = polarNotRadar_1;
}
each$f(option.series, function(seriesOpt) {
if (seriesOpt && seriesOpt.type === "radar" && seriesOpt.polarIndex) {
seriesOpt.radarIndex = seriesOpt.polarIndex;
}
});
}
var RadarView$1 = (
/** @class */
(function(_super) {
__extends(RadarView2, _super);
function RadarView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadarView2.type;
return _this;
}
RadarView2.prototype.render = function(seriesModel, ecModel, api) {
var polar = seriesModel.coordinateSystem;
var group = this.group;
var data = seriesModel.getData();
var oldData = this._data;
function createSymbol2(data2, idx) {
var symbolType = data2.getItemVisual(idx, "symbol") || "circle";
if (symbolType === "none") {
return;
}
var symbolSize = normalizeSymbolSize(data2.getItemVisual(idx, "symbolSize"));
var symbolPath = createSymbol$1(symbolType, -1, -1, 2, 2);
var symbolRotate = data2.getItemVisual(idx, "symbolRotate") || 0;
symbolPath.attr({
style: {
strokeNoScale: true
},
z2: 100,
scaleX: symbolSize[0] / 2,
scaleY: symbolSize[1] / 2,
rotation: symbolRotate * Math.PI / 180 || 0
});
return symbolPath;
}
function updateSymbols(oldPoints, newPoints, symbolGroup, data2, idx, isInit) {
symbolGroup.removeAll();
for (var i = 0; i < newPoints.length - 1; i++) {
var symbolPath = createSymbol2(data2, idx);
if (symbolPath) {
symbolPath.__dimIdx = i;
if (oldPoints[i]) {
symbolPath.setPosition(oldPoints[i]);
graphic[isInit ? "initProps" : "updateProps"](symbolPath, {
x: newPoints[i][0],
y: newPoints[i][1]
}, seriesModel, idx);
} else {
symbolPath.setPosition(newPoints[i]);
}
symbolGroup.add(symbolPath);
}
}
}
function getInitialPoints(points2) {
return map$1(points2, function(pt) {
return [polar.cx, polar.cy];
});
}
data.diff(oldData).add(function(idx) {
var points2 = data.getItemLayout(idx);
if (!points2) {
return;
}
var polygon = new Polygon();
var polyline = new Polyline$1();
var target = {
shape: {
points: points2
}
};
polygon.shape.points = getInitialPoints(points2);
polyline.shape.points = getInitialPoints(points2);
initProps(polygon, target, seriesModel, idx);
initProps(polyline, target, seriesModel, idx);
var itemGroup = new Group$3();
var symbolGroup = new Group$3();
itemGroup.add(polyline);
itemGroup.add(polygon);
itemGroup.add(symbolGroup);
updateSymbols(polyline.shape.points, points2, symbolGroup, data, idx, true);
data.setItemGraphicEl(idx, itemGroup);
}).update(function(newIdx, oldIdx) {
var itemGroup = oldData.getItemGraphicEl(oldIdx);
var polyline = itemGroup.childAt(0);
var polygon = itemGroup.childAt(1);
var symbolGroup = itemGroup.childAt(2);
var target = {
shape: {
points: data.getItemLayout(newIdx)
}
};
if (!target.shape.points) {
return;
}
updateSymbols(polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false);
saveOldStyle(polygon);
saveOldStyle(polyline);
updateProps$1(polyline, target, seriesModel);
updateProps$1(polygon, target, seriesModel);
data.setItemGraphicEl(newIdx, itemGroup);
}).remove(function(idx) {
group.remove(oldData.getItemGraphicEl(idx));
}).execute();
data.eachItemGraphicEl(function(itemGroup, idx) {
var itemModel = data.getItemModel(idx);
var polyline = itemGroup.childAt(0);
var polygon = itemGroup.childAt(1);
var symbolGroup = itemGroup.childAt(2);
var itemStyle = data.getItemVisual(idx, "style");
var color = itemStyle.fill;
group.add(itemGroup);
polyline.useStyle(defaults(itemModel.getModel("lineStyle").getLineStyle(), {
fill: "none",
stroke: color
}));
setStatesStylesFromModel(polyline, itemModel, "lineStyle");
setStatesStylesFromModel(polygon, itemModel, "areaStyle");
var areaStyleModel = itemModel.getModel("areaStyle");
var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();
polygon.ignore = polygonIgnore;
each$f(["emphasis", "select", "blur"], function(stateName) {
var stateModel = itemModel.getModel([stateName, "areaStyle"]);
var stateIgnore = stateModel.isEmpty() && stateModel.parentModel.isEmpty();
polygon.ensureState(stateName).ignore = stateIgnore && polygonIgnore;
});
polygon.useStyle(defaults(areaStyleModel.getAreaStyle(), {
fill: color,
opacity: 0.7,
decal: itemStyle.decal
}));
var emphasisModel = itemModel.getModel("emphasis");
var itemHoverStyle = emphasisModel.getModel("itemStyle").getItemStyle();
symbolGroup.eachChild(function(symbolPath) {
if (symbolPath instanceof ZRImage) {
var pathStyle = symbolPath.style;
symbolPath.useStyle(extend({
// TODO other properties like x, y ?
image: pathStyle.image,
x: pathStyle.x,
y: pathStyle.y,
width: pathStyle.width,
height: pathStyle.height
}, itemStyle));
} else {
symbolPath.useStyle(itemStyle);
symbolPath.setColor(color);
symbolPath.style.strokeNoScale = true;
}
var pathEmphasisState = symbolPath.ensureState("emphasis");
pathEmphasisState.style = clone$1(itemHoverStyle);
var defaultText = data.getStore().get(data.getDimensionIndex(symbolPath.__dimIdx), idx);
(defaultText == null || isNaN(defaultText)) && (defaultText = "");
setLabelStyle(symbolPath, getLabelStatesModels(itemModel), {
labelFetcher: data.hostModel,
labelDataIndex: idx,
labelDimIndex: symbolPath.__dimIdx,
defaultText,
inheritColor: color,
defaultOpacity: itemStyle.opacity
});
});
toggleHoverEmphasis(itemGroup, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
});
this._data = data;
};
RadarView2.prototype.remove = function() {
this.group.removeAll();
this._data = null;
};
RadarView2.type = "radar";
return RadarView2;
})(ChartView)
);
var RadarSeriesModel = (
/** @class */
(function(_super) {
__extends(RadarSeriesModel2, _super);
function RadarSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadarSeriesModel2.type;
_this.hasSymbolVisual = true;
return _this;
}
RadarSeriesModel2.prototype.init = function(option) {
_super.prototype.init.apply(this, arguments);
this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this));
};
RadarSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesDataSimply(this, {
generateCoord: "indicator_",
generateCoordCount: Infinity
});
};
RadarSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var coordSys = this.coordinateSystem;
var indicatorAxes = coordSys.getIndicatorAxes();
var name = this.getData().getName(dataIndex);
var nameToDisplay = name === "" ? this.name : name;
var markerColor = retrieveVisualColorForTooltipMarker(this, dataIndex);
return createTooltipMarkup("section", {
header: nameToDisplay,
sortBlocks: true,
blocks: map$1(indicatorAxes, function(axis) {
var val = data.get(data.mapDimension(axis.dim), dataIndex);
return createTooltipMarkup("nameValue", {
markerType: "subItem",
markerColor,
name: axis.name,
value: val,
sortParam: val
});
})
});
};
RadarSeriesModel2.prototype.getTooltipPosition = function(dataIndex) {
if (dataIndex != null) {
var data_1 = this.getData();
var coordSys = this.coordinateSystem;
var values = data_1.getValues(map$1(coordSys.dimensions, function(dim) {
return data_1.mapDimension(dim);
}), dataIndex);
for (var i = 0, len2 = values.length; i < len2; i++) {
if (!isNaN(values[i])) {
var indicatorAxes = coordSys.getIndicatorAxes();
return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i);
}
}
}
};
RadarSeriesModel2.type = "series.radar";
RadarSeriesModel2.dependencies = ["radar"];
RadarSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
colorBy: "data",
coordinateSystem: "radar",
legendHoverLink: true,
radarIndex: 0,
lineStyle: {
width: 2,
type: "solid",
join: "round"
},
label: {
position: "top"
},
// areaStyle: {
// },
// itemStyle: {}
symbolSize: 8
// symbolRotate: null
};
return RadarSeriesModel2;
})(SeriesModel)
);
var valueAxisDefault = axisDefault.value;
function defaultsShow(opt, show) {
return defaults({
show
}, opt);
}
var RadarModel = (
/** @class */
(function(_super) {
__extends(RadarModel2, _super);
function RadarModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadarModel2.type;
return _this;
}
RadarModel2.prototype.optionUpdated = function() {
var boundaryGap = this.get("boundaryGap");
var splitNumber = this.get("splitNumber");
var scale2 = this.get("scale");
var axisLine = this.get("axisLine");
var axisTick = this.get("axisTick");
var axisLabel = this.get("axisLabel");
var nameTextStyle = this.get("axisName");
var showName = this.get(["axisName", "show"]);
var nameFormatter = this.get(["axisName", "formatter"]);
var nameGap = this.get("axisNameGap");
var triggerEvent = this.get("triggerEvent");
var indicatorModels = map$1(this.get("indicator") || [], function(indicatorOpt) {
if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {
indicatorOpt.min = 0;
} else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {
indicatorOpt.max = 0;
}
var iNameTextStyle = nameTextStyle;
if (indicatorOpt.color != null) {
iNameTextStyle = defaults({
color: indicatorOpt.color
}, nameTextStyle);
}
var innerIndicatorOpt = merge(clone$1(indicatorOpt), {
boundaryGap,
splitNumber,
scale: scale2,
axisLine,
axisTick,
// axisType: axisType,
axisLabel,
// Compatible with 2 and use text
name: indicatorOpt.text,
showName,
nameLocation: "end",
nameGap,
// min: 0,
nameTextStyle: iNameTextStyle,
triggerEvent
}, false);
if (isString(nameFormatter)) {
var indName = innerIndicatorOpt.name;
innerIndicatorOpt.name = nameFormatter.replace("{value}", indName != null ? indName : "");
} else if (isFunction(nameFormatter)) {
innerIndicatorOpt.name = nameFormatter(innerIndicatorOpt.name, innerIndicatorOpt);
}
var model = new Model(innerIndicatorOpt, null, this.ecModel);
mixin(model, AxisModelCommonMixin.prototype);
model.mainType = "radar";
model.componentIndex = this.componentIndex;
return model;
}, this);
this._indicatorModels = indicatorModels;
};
RadarModel2.prototype.getIndicatorModels = function() {
return this._indicatorModels;
};
RadarModel2.type = "radar";
RadarModel2.defaultOption = {
// zlevel: 0,
z: 0,
center: ["50%", "50%"],
radius: "75%",
startAngle: 90,
axisName: {
show: true
// formatter: null
// textStyle: {}
},
boundaryGap: [0, 0],
splitNumber: 5,
axisNameGap: 15,
scale: false,
// Polygon or circle
shape: "polygon",
axisLine: merge({
lineStyle: {
color: "#bbb"
}
}, valueAxisDefault.axisLine),
axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),
axisTick: defaultsShow(valueAxisDefault.axisTick, false),
// axisType: 'value',
splitLine: defaultsShow(valueAxisDefault.splitLine, true),
splitArea: defaultsShow(valueAxisDefault.splitArea, true),
// {text, min, max}
indicator: []
};
return RadarModel2;
})(ComponentModel)
);
var axisBuilderAttrs$2 = ["axisLine", "axisTickLabel", "axisName"];
var RadarView = (
/** @class */
(function(_super) {
__extends(RadarView2, _super);
function RadarView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadarView2.type;
return _this;
}
RadarView2.prototype.render = function(radarModel, ecModel, api) {
var group = this.group;
group.removeAll();
this._buildAxes(radarModel);
this._buildSplitLineAndArea(radarModel);
};
RadarView2.prototype._buildAxes = function(radarModel) {
var radar = radarModel.coordinateSystem;
var indicatorAxes = radar.getIndicatorAxes();
var axisBuilders = map$1(indicatorAxes, function(indicatorAxis) {
var axisName = indicatorAxis.model.get("showName") ? indicatorAxis.name : "";
var axisBuilder = new AxisBuilder(indicatorAxis.model, {
axisName,
position: [radar.cx, radar.cy],
rotation: indicatorAxis.angle,
labelDirection: -1,
tickDirection: -1,
nameDirection: 1
});
return axisBuilder;
});
each$f(axisBuilders, function(axisBuilder) {
each$f(axisBuilderAttrs$2, axisBuilder.add, axisBuilder);
this.group.add(axisBuilder.getGroup());
}, this);
};
RadarView2.prototype._buildSplitLineAndArea = function(radarModel) {
var radar = radarModel.coordinateSystem;
var indicatorAxes = radar.getIndicatorAxes();
if (!indicatorAxes.length) {
return;
}
var shape = radarModel.get("shape");
var splitLineModel = radarModel.getModel("splitLine");
var splitAreaModel = radarModel.getModel("splitArea");
var lineStyleModel = splitLineModel.getModel("lineStyle");
var areaStyleModel = splitAreaModel.getModel("areaStyle");
var showSplitLine = splitLineModel.get("show");
var showSplitArea = splitAreaModel.get("show");
var splitLineColors = lineStyleModel.get("color");
var splitAreaColors = areaStyleModel.get("color");
var splitLineColorsArr = isArray$1(splitLineColors) ? splitLineColors : [splitLineColors];
var splitAreaColorsArr = isArray$1(splitAreaColors) ? splitAreaColors : [splitAreaColors];
var splitLines = [];
var splitAreas = [];
function getColorIndex(areaOrLine, areaOrLineColorList, idx) {
var colorIndex2 = idx % areaOrLineColorList.length;
areaOrLine[colorIndex2] = areaOrLine[colorIndex2] || [];
return colorIndex2;
}
if (shape === "circle") {
var ticksRadius = indicatorAxes[0].getTicksCoords();
var cx = radar.cx;
var cy = radar.cy;
for (var i = 0; i < ticksRadius.length; i++) {
if (showSplitLine) {
var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i);
splitLines[colorIndex].push(new Circle({
shape: {
cx,
cy,
r: ticksRadius[i].coord
}
}));
}
if (showSplitArea && i < ticksRadius.length - 1) {
var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i);
splitAreas[colorIndex].push(new Ring({
shape: {
cx,
cy,
r0: ticksRadius[i].coord,
r: ticksRadius[i + 1].coord
}
}));
}
}
} else {
var realSplitNumber_1;
var axesTicksPoints = map$1(indicatorAxes, function(indicatorAxis, idx) {
var ticksCoords = indicatorAxis.getTicksCoords();
realSplitNumber_1 = realSplitNumber_1 == null ? ticksCoords.length - 1 : Math.min(ticksCoords.length - 1, realSplitNumber_1);
return map$1(ticksCoords, function(tickCoord) {
return radar.coordToPoint(tickCoord.coord, idx);
});
});
var prevPoints = [];
for (var i = 0; i <= realSplitNumber_1; i++) {
var points2 = [];
for (var j = 0; j < indicatorAxes.length; j++) {
points2.push(axesTicksPoints[j][i]);
}
if (points2[0]) {
points2.push(points2[0].slice());
}
if (showSplitLine) {
var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i);
splitLines[colorIndex].push(new Polyline$1({
shape: {
points: points2
}
}));
}
if (showSplitArea && prevPoints) {
var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i - 1);
splitAreas[colorIndex].push(new Polygon({
shape: {
points: points2.concat(prevPoints)
}
}));
}
prevPoints = points2.slice().reverse();
}
}
var lineStyle = lineStyleModel.getLineStyle();
var areaStyle = areaStyleModel.getAreaStyle();
each$f(splitAreas, function(splitAreas2, idx) {
this.group.add(mergePath(splitAreas2, {
style: defaults({
stroke: "none",
fill: splitAreaColorsArr[idx % splitAreaColorsArr.length]
}, areaStyle),
silent: true
}));
}, this);
each$f(splitLines, function(splitLines2, idx) {
this.group.add(mergePath(splitLines2, {
style: defaults({
fill: "none",
stroke: splitLineColorsArr[idx % splitLineColorsArr.length]
}, lineStyle),
silent: true
}));
}, this);
};
RadarView2.type = "radar";
return RadarView2;
})(ComponentView)
);
var IndicatorAxis = (
/** @class */
(function(_super) {
__extends(IndicatorAxis2, _super);
function IndicatorAxis2(dim, scale2, radiusExtent) {
var _this = _super.call(this, dim, scale2, radiusExtent) || this;
_this.type = "value";
_this.angle = 0;
_this.name = "";
return _this;
}
return IndicatorAxis2;
})(Axis)
);
var Radar = (
/** @class */
(function() {
function Radar2(radarModel, ecModel, api) {
this.dimensions = [];
this._model = radarModel;
this._indicatorAxes = map$1(radarModel.getIndicatorModels(), function(indicatorModel, idx) {
var dim = "indicator_" + idx;
var indicatorAxis = new IndicatorAxis(
dim,
new IntervalScale()
// (indicatorModel.get('axisType') === 'log') ? new LogScale() : new IntervalScale()
);
indicatorAxis.name = indicatorModel.get("name");
indicatorAxis.model = indicatorModel;
indicatorModel.axis = indicatorAxis;
this.dimensions.push(dim);
return indicatorAxis;
}, this);
this.resize(radarModel, api);
}
Radar2.prototype.getIndicatorAxes = function() {
return this._indicatorAxes;
};
Radar2.prototype.dataToPoint = function(value, indicatorIndex) {
var indicatorAxis = this._indicatorAxes[indicatorIndex];
return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);
};
Radar2.prototype.coordToPoint = function(coord, indicatorIndex) {
var indicatorAxis = this._indicatorAxes[indicatorIndex];
var angle = indicatorAxis.angle;
var x = this.cx + coord * Math.cos(angle);
var y = this.cy - coord * Math.sin(angle);
return [x, y];
};
Radar2.prototype.pointToData = function(pt) {
var dx = pt[0] - this.cx;
var dy = pt[1] - this.cy;
var radius = Math.sqrt(dx * dx + dy * dy);
dx /= radius;
dy /= radius;
var radian = Math.atan2(-dy, dx);
var minRadianDiff = Infinity;
var closestAxis;
var closestAxisIdx = -1;
for (var i = 0; i < this._indicatorAxes.length; i++) {
var indicatorAxis = this._indicatorAxes[i];
var diff = Math.abs(radian - indicatorAxis.angle);
if (diff < minRadianDiff) {
closestAxis = indicatorAxis;
closestAxisIdx = i;
minRadianDiff = diff;
}
}
return [closestAxisIdx, +(closestAxis && closestAxis.coordToData(radius))];
};
Radar2.prototype.resize = function(radarModel, api) {
var center2 = radarModel.get("center");
var viewWidth = api.getWidth();
var viewHeight = api.getHeight();
var viewSize = Math.min(viewWidth, viewHeight) / 2;
this.cx = parsePercent(center2[0], viewWidth);
this.cy = parsePercent(center2[1], viewHeight);
this.startAngle = radarModel.get("startAngle") * Math.PI / 180;
var radius = radarModel.get("radius");
if (isString(radius) || isNumber(radius)) {
radius = [0, radius];
}
this.r0 = parsePercent(radius[0], viewSize);
this.r = parsePercent(radius[1], viewSize);
each$f(this._indicatorAxes, function(indicatorAxis, idx) {
indicatorAxis.setExtent(this.r0, this.r);
var angle = this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length;
angle = Math.atan2(Math.sin(angle), Math.cos(angle));
indicatorAxis.angle = angle;
}, this);
};
Radar2.prototype.update = function(ecModel, api) {
var indicatorAxes = this._indicatorAxes;
var radarModel = this._model;
each$f(indicatorAxes, function(indicatorAxis) {
indicatorAxis.scale.setExtent(Infinity, -Infinity);
});
ecModel.eachSeriesByType("radar", function(radarSeries, idx) {
if (radarSeries.get("coordinateSystem") !== "radar" || ecModel.getComponent("radar", radarSeries.get("radarIndex")) !== radarModel) {
return;
}
var data = radarSeries.getData();
each$f(indicatorAxes, function(indicatorAxis) {
indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));
});
}, this);
var splitNumber = radarModel.get("splitNumber");
var dummyScale = new IntervalScale();
dummyScale.setExtent(0, splitNumber);
dummyScale.setInterval(1);
each$f(indicatorAxes, function(indicatorAxis, idx) {
alignScaleTicks(indicatorAxis.scale, indicatorAxis.model, dummyScale);
});
};
Radar2.prototype.convertToPixel = function(ecModel, finder, value) {
console.warn("Not implemented.");
return null;
};
Radar2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
console.warn("Not implemented.");
return null;
};
Radar2.prototype.containPoint = function(point) {
console.warn("Not implemented.");
return false;
};
Radar2.create = function(ecModel, api) {
var radarList = [];
ecModel.eachComponent("radar", function(radarModel) {
var radar = new Radar2(radarModel, ecModel, api);
radarList.push(radar);
radarModel.coordinateSystem = radar;
});
ecModel.eachSeriesByType("radar", function(radarSeries) {
if (radarSeries.get("coordinateSystem") === "radar") {
radarSeries.coordinateSystem = radarList[radarSeries.get("radarIndex") || 0];
}
});
return radarList;
};
Radar2.dimensions = [];
return Radar2;
})()
);
function install$N(registers) {
registers.registerCoordinateSystem("radar", Radar);
registers.registerComponentModel(RadarModel);
registers.registerComponentView(RadarView);
registers.registerVisual({
seriesType: "radar",
reset: function(seriesModel) {
var data = seriesModel.getData();
data.each(function(idx) {
data.setItemVisual(idx, "legendIcon", "roundRect");
});
data.setVisual("legendIcon", "roundRect");
}
});
}
function install$M(registers) {
use(install$N);
registers.registerChartView(RadarView$1);
registers.registerSeriesModel(RadarSeriesModel);
registers.registerLayout(radarLayout);
registers.registerProcessor(dataFilter$1("radar"));
registers.registerPreprocessor(radarBackwardCompat);
}
var ATTR = "\0_ec_interaction_mutex";
function take(zr, resourceKey, userKey) {
var store = getStore(zr);
store[resourceKey] = userKey;
}
function release(zr, resourceKey, userKey) {
var store = getStore(zr);
var uKey = store[resourceKey];
if (uKey === userKey) {
store[resourceKey] = null;
}
}
function isTaken(zr, resourceKey) {
return !!getStore(zr)[resourceKey];
}
function getStore(zr) {
return zr[ATTR] || (zr[ATTR] = {});
}
registerAction({
type: "takeGlobalCursor",
event: "globalCursorTaken",
update: "update"
}, noop);
var RoamController = (
/** @class */
(function(_super) {
__extends(RoamController2, _super);
function RoamController2(zr) {
var _this = _super.call(this) || this;
_this._zr = zr;
var mousedownHandler = bind$1(_this._mousedownHandler, _this);
var mousemoveHandler = bind$1(_this._mousemoveHandler, _this);
var mouseupHandler = bind$1(_this._mouseupHandler, _this);
var mousewheelHandler = bind$1(_this._mousewheelHandler, _this);
var pinchHandler = bind$1(_this._pinchHandler, _this);
_this.enable = function(controlType, opt) {
this.disable();
this._opt = defaults(clone$1(opt) || {}, {
zoomOnMouseWheel: true,
moveOnMouseMove: true,
// By default, wheel do not trigger move.
moveOnMouseWheel: false,
preventDefaultMouseMove: true
});
if (controlType == null) {
controlType = true;
}
if (controlType === true || controlType === "move" || controlType === "pan") {
zr.on("mousedown", mousedownHandler);
zr.on("mousemove", mousemoveHandler);
zr.on("mouseup", mouseupHandler);
}
if (controlType === true || controlType === "scale" || controlType === "zoom") {
zr.on("mousewheel", mousewheelHandler);
zr.on("pinch", pinchHandler);
}
};
_this.disable = function() {
zr.off("mousedown", mousedownHandler);
zr.off("mousemove", mousemoveHandler);
zr.off("mouseup", mouseupHandler);
zr.off("mousewheel", mousewheelHandler);
zr.off("pinch", pinchHandler);
};
return _this;
}
RoamController2.prototype.isDragging = function() {
return this._dragging;
};
RoamController2.prototype.isPinching = function() {
return this._pinching;
};
RoamController2.prototype.setPointerChecker = function(pointerChecker) {
this.pointerChecker = pointerChecker;
};
RoamController2.prototype.dispose = function() {
this.disable();
};
RoamController2.prototype._mousedownHandler = function(e) {
if (isMiddleOrRightButtonOnMouseUpDown(e)) {
return;
}
var el = e.target;
while (el) {
if (el.draggable) {
return;
}
el = el.__hostTarget || el.parent;
}
var x = e.offsetX;
var y = e.offsetY;
if (this.pointerChecker && this.pointerChecker(e, x, y)) {
this._x = x;
this._y = y;
this._dragging = true;
}
};
RoamController2.prototype._mousemoveHandler = function(e) {
if (!this._dragging || !isAvailableBehavior("moveOnMouseMove", e, this._opt) || e.gestureEvent === "pinch" || isTaken(this._zr, "globalPan")) {
return;
}
var x = e.offsetX;
var y = e.offsetY;
var oldX = this._x;
var oldY = this._y;
var dx = x - oldX;
var dy = y - oldY;
this._x = x;
this._y = y;
this._opt.preventDefaultMouseMove && stop(e.event);
trigger$1(this, "pan", "moveOnMouseMove", e, {
dx,
dy,
oldX,
oldY,
newX: x,
newY: y,
isAvailableBehavior: null
});
};
RoamController2.prototype._mouseupHandler = function(e) {
if (!isMiddleOrRightButtonOnMouseUpDown(e)) {
this._dragging = false;
}
};
RoamController2.prototype._mousewheelHandler = function(e) {
var shouldZoom = isAvailableBehavior("zoomOnMouseWheel", e, this._opt);
var shouldMove = isAvailableBehavior("moveOnMouseWheel", e, this._opt);
var wheelDelta = e.wheelDelta;
var absWheelDeltaDelta = Math.abs(wheelDelta);
var originX = e.offsetX;
var originY = e.offsetY;
if (wheelDelta === 0 || !shouldZoom && !shouldMove) {
return;
}
if (shouldZoom) {
var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;
var scale2 = wheelDelta > 0 ? factor : 1 / factor;
checkPointerAndTrigger(this, "zoom", "zoomOnMouseWheel", e, {
scale: scale2,
originX,
originY,
isAvailableBehavior: null
});
}
if (shouldMove) {
var absDelta = Math.abs(wheelDelta);
var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);
checkPointerAndTrigger(this, "scrollMove", "moveOnMouseWheel", e, {
scrollDelta,
originX,
originY,
isAvailableBehavior: null
});
}
};
RoamController2.prototype._pinchHandler = function(e) {
if (isTaken(this._zr, "globalPan")) {
return;
}
var scale2 = e.pinchScale > 1 ? 1.1 : 1 / 1.1;
checkPointerAndTrigger(this, "zoom", null, e, {
scale: scale2,
originX: e.pinchX,
originY: e.pinchY,
isAvailableBehavior: null
});
};
return RoamController2;
})(Eventful)
);
function checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {
if (controller.pointerChecker && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)) {
stop(e.event);
trigger$1(controller, eventName, behaviorToCheck, e, contollerEvent);
}
}
function trigger$1(controller, eventName, behaviorToCheck, e, contollerEvent) {
contollerEvent.isAvailableBehavior = bind$1(isAvailableBehavior, null, behaviorToCheck, e);
controller.trigger(eventName, contollerEvent);
}
function isAvailableBehavior(behaviorToCheck, e, settings) {
var setting = settings[behaviorToCheck];
return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + "Key"]);
}
function updateViewOnPan(controllerHost, dx, dy) {
var target = controllerHost.target;
target.x += dx;
target.y += dy;
target.dirty();
}
function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {
var target = controllerHost.target;
var zoomLimit = controllerHost.zoomLimit;
var newZoom = controllerHost.zoom = controllerHost.zoom || 1;
newZoom *= zoomDelta;
if (zoomLimit) {
var zoomMin = zoomLimit.min || 0;
var zoomMax = zoomLimit.max || Infinity;
newZoom = Math.max(Math.min(zoomMax, newZoom), zoomMin);
}
var zoomScale = newZoom / controllerHost.zoom;
controllerHost.zoom = newZoom;
target.x -= (zoomX - target.x) * (zoomScale - 1);
target.y -= (zoomY - target.y) * (zoomScale - 1);
target.scaleX *= zoomScale;
target.scaleY *= zoomScale;
target.dirty();
}
var IRRELEVANT_EXCLUDES = {
"axisPointer": 1,
"tooltip": 1,
"brush": 1
};
function onIrrelevantElement(e, api, targetCoordSysModel) {
var model = api.getComponentByElement(e.topTarget);
var coordSys = model && model.coordinateSystem;
return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES.hasOwnProperty(model.mainType) && coordSys && coordSys.model !== targetCoordSysModel;
}
var REGION_AVAILABLE_SVG_TAG_MAP = createHashMap([
"rect",
"circle",
"line",
"ellipse",
"polygon",
"polyline",
"path",
// are also enabled because some SVG might paint text itself,
// but still need to trigger events or tooltip.
"text",
"tspan",
// is also enabled because this case: if multiple tags share one name
// and need label displayed, every tags will display the name, which is not
// expected. So we can put them into a . Thereby only one label
// displayed and located based on the bounding rect of the .
"g"
]);
var GeoSVGResource = (
/** @class */
(function() {
function GeoSVGResource2(mapName, svg) {
this.type = "geoSVG";
this._usedGraphicMap = createHashMap();
this._freedGraphics = [];
this._mapName = mapName;
this._parsedXML = parseXML(svg);
}
GeoSVGResource2.prototype.load = function() {
var firstGraphic = this._firstGraphic;
if (!firstGraphic) {
firstGraphic = this._firstGraphic = this._buildGraphic(this._parsedXML);
this._freedGraphics.push(firstGraphic);
this._boundingRect = this._firstGraphic.boundingRect.clone();
var _a2 = createRegions(firstGraphic.named), regions = _a2.regions, regionsMap = _a2.regionsMap;
this._regions = regions;
this._regionsMap = regionsMap;
}
return {
boundingRect: this._boundingRect,
regions: this._regions,
regionsMap: this._regionsMap
};
};
GeoSVGResource2.prototype._buildGraphic = function(svgXML) {
var result;
var rootFromParse;
try {
result = svgXML && parseSVG(svgXML, {
ignoreViewBox: true,
ignoreRootClip: true
}) || {};
rootFromParse = result.root;
assert(rootFromParse != null);
} catch (e) {
throw new Error("Invalid svg format\n" + e.message);
}
var root = new Group$3();
root.add(rootFromParse);
root.isGeoSVGGraphicRoot = true;
var svgWidth = result.width;
var svgHeight = result.height;
var viewBoxRect = result.viewBoxRect;
var boundingRect = this._boundingRect;
if (!boundingRect) {
var bRectX = void 0;
var bRectY = void 0;
var bRectWidth = void 0;
var bRectHeight = void 0;
if (svgWidth != null) {
bRectX = 0;
bRectWidth = svgWidth;
} else if (viewBoxRect) {
bRectX = viewBoxRect.x;
bRectWidth = viewBoxRect.width;
}
if (svgHeight != null) {
bRectY = 0;
bRectHeight = svgHeight;
} else if (viewBoxRect) {
bRectY = viewBoxRect.y;
bRectHeight = viewBoxRect.height;
}
if (bRectX == null || bRectY == null) {
var calculatedBoundingRect = rootFromParse.getBoundingRect();
if (bRectX == null) {
bRectX = calculatedBoundingRect.x;
bRectWidth = calculatedBoundingRect.width;
}
if (bRectY == null) {
bRectY = calculatedBoundingRect.y;
bRectHeight = calculatedBoundingRect.height;
}
}
boundingRect = this._boundingRect = new BoundingRect(bRectX, bRectY, bRectWidth, bRectHeight);
}
if (viewBoxRect) {
var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect);
rootFromParse.scaleX = rootFromParse.scaleY = viewBoxTransform.scale;
rootFromParse.x = viewBoxTransform.x;
rootFromParse.y = viewBoxTransform.y;
}
root.setClipPath(new Rect$2({
shape: boundingRect.plain()
}));
var named = [];
each$f(result.named, function(namedItem) {
if (REGION_AVAILABLE_SVG_TAG_MAP.get(namedItem.svgNodeTagLower) != null) {
named.push(namedItem);
setSilent(namedItem.el);
}
});
return {
root,
boundingRect,
named
};
};
GeoSVGResource2.prototype.useGraphic = function(hostKey) {
var usedRootMap = this._usedGraphicMap;
var svgGraphic = usedRootMap.get(hostKey);
if (svgGraphic) {
return svgGraphic;
}
svgGraphic = this._freedGraphics.pop() || this._buildGraphic(this._parsedXML);
usedRootMap.set(hostKey, svgGraphic);
return svgGraphic;
};
GeoSVGResource2.prototype.freeGraphic = function(hostKey) {
var usedRootMap = this._usedGraphicMap;
var svgGraphic = usedRootMap.get(hostKey);
if (svgGraphic) {
usedRootMap.removeKey(hostKey);
this._freedGraphics.push(svgGraphic);
}
};
return GeoSVGResource2;
})()
);
function setSilent(el) {
el.silent = false;
if (el.isGroup) {
el.traverse(function(child) {
child.silent = false;
});
}
}
function createRegions(named) {
var regions = [];
var regionsMap = createHashMap();
each$f(named, function(namedItem) {
if (namedItem.namedFrom != null) {
return;
}
var region = new GeoSVGRegion(namedItem.name, namedItem.el);
regions.push(region);
regionsMap.set(namedItem.name, region);
});
return {
regions,
regionsMap
};
}
var geoCoord = [126, 25];
var nanhaiName = "南海诸岛";
var points$1 = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7], [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]];
for (var i = 0; i < points$1.length; i++) {
for (var k = 0; k < points$1[i].length; k++) {
points$1[i][k][0] /= 10.5;
points$1[i][k][1] /= -10.5 / 0.75;
points$1[i][k][0] += geoCoord[0];
points$1[i][k][1] += geoCoord[1];
}
}
function fixNanhai(mapType, regions) {
if (mapType === "china") {
for (var i = 0; i < regions.length; i++) {
if (regions[i].name === nanhaiName) {
return;
}
}
regions.push(new GeoJSONRegion(nanhaiName, map$1(points$1, function(exterior) {
return {
type: "polygon",
exterior
};
}), geoCoord));
}
}
var coordsOffsetMap = {
"南海诸岛": [32, 80],
// 全国
"广东": [0, -10],
"香港": [10, 5],
"澳门": [-10, 10],
// '北京': [-10, 0],
"天津": [5, 5]
};
function fixTextCoords(mapType, region) {
if (mapType === "china") {
var coordFix = coordsOffsetMap[region.name];
if (coordFix) {
var cp = region.getCenter();
cp[0] += coordFix[0] / 10.5;
cp[1] += -coordFix[1] / (10.5 / 0.75);
region.setCenter(cp);
}
}
}
var points = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]];
function fixDiaoyuIsland(mapType, region) {
if (mapType === "china" && region.name === "台湾") {
region.geometries.push({
type: "polygon",
exterior: points[0]
});
}
}
var DEFAULT_NAME_PROPERTY = "name";
var GeoJSONResource = (
/** @class */
(function() {
function GeoJSONResource2(mapName, geoJSON, specialAreas) {
this.type = "geoJSON";
this._parsedMap = createHashMap();
this._mapName = mapName;
this._specialAreas = specialAreas;
this._geoJSON = parseInput(geoJSON);
}
GeoJSONResource2.prototype.load = function(nameMap, nameProperty) {
nameProperty = nameProperty || DEFAULT_NAME_PROPERTY;
var parsed = this._parsedMap.get(nameProperty);
if (!parsed) {
var rawRegions = this._parseToRegions(nameProperty);
parsed = this._parsedMap.set(nameProperty, {
regions: rawRegions,
boundingRect: calculateBoundingRect(rawRegions)
});
}
var regionsMap = createHashMap();
var finalRegions = [];
each$f(parsed.regions, function(region) {
var regionName = region.name;
if (nameMap && hasOwn(nameMap, regionName)) {
region = region.cloneShallow(regionName = nameMap[regionName]);
}
finalRegions.push(region);
regionsMap.set(regionName, region);
});
return {
regions: finalRegions,
boundingRect: parsed.boundingRect || new BoundingRect(0, 0, 0, 0),
regionsMap
};
};
GeoJSONResource2.prototype._parseToRegions = function(nameProperty) {
var mapName = this._mapName;
var geoJSON = this._geoJSON;
var rawRegions;
try {
rawRegions = geoJSON ? parseGeoJSON(geoJSON, nameProperty) : [];
} catch (e) {
throw new Error("Invalid geoJson format\n" + e.message);
}
fixNanhai(mapName, rawRegions);
each$f(rawRegions, function(region) {
var regionName = region.name;
fixTextCoords(mapName, region);
fixDiaoyuIsland(mapName, region);
var specialArea = this._specialAreas && this._specialAreas[regionName];
if (specialArea) {
region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);
}
}, this);
return rawRegions;
};
GeoJSONResource2.prototype.getMapForUser = function() {
return {
// For backward compatibility, use geoJson
// PENDING: it has been returning them without clone.
// do we need to avoid outsite modification?
geoJson: this._geoJSON,
geoJSON: this._geoJSON,
specialAreas: this._specialAreas
};
};
return GeoJSONResource2;
})()
);
function calculateBoundingRect(regions) {
var rect;
for (var i = 0; i < regions.length; i++) {
var regionRect = regions[i].getBoundingRect();
rect = rect || regionRect.clone();
rect.union(regionRect);
}
return rect;
}
function parseInput(source) {
return !isString(source) ? source : typeof JSON !== "undefined" && JSON.parse ? JSON.parse(source) : new Function("return (" + source + ");")();
}
var storage = createHashMap();
const geoSourceManager = {
/**
* Compatible with previous `echarts.registerMap`.
*
* @usage
* ```js
*
* echarts.registerMap('USA', geoJson, specialAreas);
*
* echarts.registerMap('USA', {
* geoJson: geoJson,
* specialAreas: {...}
* });
* echarts.registerMap('USA', {
* geoJSON: geoJson,
* specialAreas: {...}
* });
*
* echarts.registerMap('airport', {
* svg: svg
* }
* ```
*
* Note:
* Do not support that register multiple geoJSON or SVG
* one map name. Because different geoJSON and SVG have
* different unit. It's not easy to make sure how those
* units are mapping/normalize.
* If intending to use multiple geoJSON or SVG, we can
* use multiple geo coordinate system.
*/
registerMap: function(mapName, rawDef, rawSpecialAreas) {
if (rawDef.svg) {
var resource = new GeoSVGResource(mapName, rawDef.svg);
storage.set(mapName, resource);
} else {
var geoJSON = rawDef.geoJson || rawDef.geoJSON;
if (geoJSON && !rawDef.features) {
rawSpecialAreas = rawDef.specialAreas;
} else {
geoJSON = rawDef;
}
var resource = new GeoJSONResource(mapName, geoJSON, rawSpecialAreas);
storage.set(mapName, resource);
}
},
getGeoResource: function(mapName) {
return storage.get(mapName);
},
/**
* Only for exporting to users.
* **MUST NOT** used internally.
*/
getMapForUser: function(mapName) {
var resource = storage.get(mapName);
return resource && resource.type === "geoJSON" && resource.getMapForUser();
},
load: function(mapName, nameMap, nameProperty) {
var resource = storage.get(mapName);
if (!resource) {
return;
}
return resource.load(nameMap, nameProperty);
}
};
var OPTION_STYLE_ENABLED_TAGS = ["rect", "circle", "line", "ellipse", "polygon", "polyline", "path"];
var OPTION_STYLE_ENABLED_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS);
var STATE_TRIGGER_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(["g"]));
var LABEL_HOST_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(["g"]));
var mapLabelRaw = makeInner();
function getFixedItemStyle(model) {
var itemStyle = model.getItemStyle();
var areaColor = model.get("areaColor");
if (areaColor != null) {
itemStyle.fill = areaColor;
}
return itemStyle;
}
function fixLineStyle(styleHost) {
var style = styleHost.style;
if (style) {
style.stroke = style.stroke || style.fill;
style.fill = null;
}
}
var MapDraw = (
/** @class */
(function() {
function MapDraw2(api) {
var group = new Group$3();
this.uid = getUID("ec_map_draw");
this._controller = new RoamController(api.getZr());
this._controllerHost = {
target: group
};
this.group = group;
group.add(this._regionsGroup = new Group$3());
group.add(this._svgGroup = new Group$3());
}
MapDraw2.prototype.draw = function(mapOrGeoModel, ecModel, api, fromView, payload) {
var isGeo = mapOrGeoModel.mainType === "geo";
var data = mapOrGeoModel.getData && mapOrGeoModel.getData();
isGeo && ecModel.eachComponent({
mainType: "series",
subType: "map"
}, function(mapSeries) {
if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {
data = mapSeries.getData();
}
});
var geo = mapOrGeoModel.coordinateSystem;
var regionsGroup = this._regionsGroup;
var group = this.group;
var transformInfo = geo.getTransformInfo();
var transformInfoRaw = transformInfo.raw;
var transformInfoRoam = transformInfo.roam;
var isFirstDraw = !regionsGroup.childAt(0) || payload;
if (isFirstDraw) {
group.x = transformInfoRoam.x;
group.y = transformInfoRoam.y;
group.scaleX = transformInfoRoam.scaleX;
group.scaleY = transformInfoRoam.scaleY;
group.dirty();
} else {
updateProps$1(group, transformInfoRoam, mapOrGeoModel);
}
var isVisualEncodedByVisualMap = data && data.getVisual("visualMeta") && data.getVisual("visualMeta").length > 0;
var viewBuildCtx = {
api,
geo,
mapOrGeoModel,
data,
isVisualEncodedByVisualMap,
isGeo,
transformInfoRaw
};
if (geo.resourceType === "geoJSON") {
this._buildGeoJSON(viewBuildCtx);
} else if (geo.resourceType === "geoSVG") {
this._buildSVG(viewBuildCtx);
}
this._updateController(mapOrGeoModel, ecModel, api);
this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView);
};
MapDraw2.prototype._buildGeoJSON = function(viewBuildCtx) {
var regionsGroupByName = this._regionsGroupByName = createHashMap();
var regionsInfoByName = createHashMap();
var regionsGroup = this._regionsGroup;
var transformInfoRaw = viewBuildCtx.transformInfoRaw;
var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;
var data = viewBuildCtx.data;
var projection = viewBuildCtx.geo.projection;
var projectionStream = projection && projection.stream;
function transformPoint(point, project) {
if (project) {
point = project(point);
}
return point && [point[0] * transformInfoRaw.scaleX + transformInfoRaw.x, point[1] * transformInfoRaw.scaleY + transformInfoRaw.y];
}
function transformPolygonPoints(inPoints) {
var outPoints = [];
var project = !projectionStream && projection && projection.project;
for (var i = 0; i < inPoints.length; ++i) {
var newPt = transformPoint(inPoints[i], project);
newPt && outPoints.push(newPt);
}
return outPoints;
}
function getPolyShape(points2) {
return {
shape: {
points: transformPolygonPoints(points2)
}
};
}
regionsGroup.removeAll();
each$f(viewBuildCtx.geo.regions, function(region) {
var regionName = region.name;
var regionGroup = regionsGroupByName.get(regionName);
var _a2 = regionsInfoByName.get(regionName) || {}, dataIdx = _a2.dataIdx, regionModel = _a2.regionModel;
if (!regionGroup) {
regionGroup = regionsGroupByName.set(regionName, new Group$3());
regionsGroup.add(regionGroup);
dataIdx = data ? data.indexOfName(regionName) : null;
regionModel = viewBuildCtx.isGeo ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null;
var silent = regionModel.get("silent", true);
silent != null && (regionGroup.silent = silent);
regionsInfoByName.set(regionName, {
dataIdx,
regionModel
});
}
var polygonSubpaths = [];
var polylineSubpaths = [];
each$f(region.geometries, function(geometry) {
if (geometry.type === "polygon") {
var polys = [geometry.exterior].concat(geometry.interiors || []);
if (projectionStream) {
polys = projectPolys(polys, projectionStream);
}
each$f(polys, function(poly) {
polygonSubpaths.push(new Polygon(getPolyShape(poly)));
});
} else {
var points2 = geometry.points;
if (projectionStream) {
points2 = projectPolys(points2, projectionStream, true);
}
each$f(points2, function(points3) {
polylineSubpaths.push(new Polyline$1(getPolyShape(points3)));
});
}
});
var centerPt = transformPoint(region.getCenter(), projection && projection.project);
function createCompoundPath(subpaths, isLine) {
if (!subpaths.length) {
return;
}
var compoundPath = new CompoundPath({
culling: true,
segmentIgnoreThreshold: 1,
shape: {
paths: subpaths
}
});
regionGroup.add(compoundPath);
applyOptionStyleForRegion(viewBuildCtx, compoundPath, dataIdx, regionModel);
resetLabelForRegion(viewBuildCtx, compoundPath, regionName, regionModel, mapOrGeoModel, dataIdx, centerPt);
if (isLine) {
fixLineStyle(compoundPath);
each$f(compoundPath.states, fixLineStyle);
}
}
createCompoundPath(polygonSubpaths);
createCompoundPath(polylineSubpaths, true);
});
regionsGroupByName.each(function(regionGroup, regionName) {
var _a2 = regionsInfoByName.get(regionName), dataIdx = _a2.dataIdx, regionModel = _a2.regionModel;
resetEventTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel, dataIdx);
resetTooltipForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);
resetStateTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);
}, this);
};
MapDraw2.prototype._buildSVG = function(viewBuildCtx) {
var mapName = viewBuildCtx.geo.map;
var transformInfoRaw = viewBuildCtx.transformInfoRaw;
this._svgGroup.x = transformInfoRaw.x;
this._svgGroup.y = transformInfoRaw.y;
this._svgGroup.scaleX = transformInfoRaw.scaleX;
this._svgGroup.scaleY = transformInfoRaw.scaleY;
if (this._svgResourceChanged(mapName)) {
this._freeSVG();
this._useSVG(mapName);
}
var svgDispatcherMap = this._svgDispatcherMap = createHashMap();
var focusSelf = false;
each$f(this._svgGraphicRecord.named, function(namedItem) {
var regionName = namedItem.name;
var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;
var data = viewBuildCtx.data;
var svgNodeTagLower = namedItem.svgNodeTagLower;
var el = namedItem.el;
var dataIdx = data ? data.indexOfName(regionName) : null;
var regionModel = mapOrGeoModel.getRegionModel(regionName);
if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) {
applyOptionStyleForRegion(viewBuildCtx, el, dataIdx, regionModel);
}
if (el instanceof Displayable) {
el.culling = true;
}
var silent = regionModel.get("silent", true);
silent != null && (el.silent = silent);
el.z2EmphasisLift = 0;
if (!namedItem.namedFrom) {
if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) {
resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, null);
}
resetEventTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx);
resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);
if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) {
var focus_1 = resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);
if (focus_1 === "self") {
focusSelf = true;
}
var els = svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, []);
els.push(el);
}
}
}, this);
this._enableBlurEntireSVG(focusSelf, viewBuildCtx);
};
MapDraw2.prototype._enableBlurEntireSVG = function(focusSelf, viewBuildCtx) {
if (focusSelf && viewBuildCtx.isGeo) {
var blurStyle = viewBuildCtx.mapOrGeoModel.getModel(["blur", "itemStyle"]).getItemStyle();
var opacity_1 = blurStyle.opacity;
this._svgGraphicRecord.root.traverse(function(el) {
if (!el.isGroup) {
setDefaultStateProxy(el);
var style = el.ensureState("blur").style || {};
if (style.opacity == null && opacity_1 != null) {
style.opacity = opacity_1;
}
el.ensureState("emphasis");
}
});
}
};
MapDraw2.prototype.remove = function() {
this._regionsGroup.removeAll();
this._regionsGroupByName = null;
this._svgGroup.removeAll();
this._freeSVG();
this._controller.dispose();
this._controllerHost = null;
};
MapDraw2.prototype.findHighDownDispatchers = function(name, geoModel) {
if (name == null) {
return [];
}
var geo = geoModel.coordinateSystem;
if (geo.resourceType === "geoJSON") {
var regionsGroupByName = this._regionsGroupByName;
if (regionsGroupByName) {
var regionGroup = regionsGroupByName.get(name);
return regionGroup ? [regionGroup] : [];
}
} else if (geo.resourceType === "geoSVG") {
return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || [];
}
};
MapDraw2.prototype._svgResourceChanged = function(mapName) {
return this._svgMapName !== mapName;
};
MapDraw2.prototype._useSVG = function(mapName) {
var resource = geoSourceManager.getGeoResource(mapName);
if (resource && resource.type === "geoSVG") {
var svgGraphic = resource.useGraphic(this.uid);
this._svgGroup.add(svgGraphic.root);
this._svgGraphicRecord = svgGraphic;
this._svgMapName = mapName;
}
};
MapDraw2.prototype._freeSVG = function() {
var mapName = this._svgMapName;
if (mapName == null) {
return;
}
var resource = geoSourceManager.getGeoResource(mapName);
if (resource && resource.type === "geoSVG") {
resource.freeGraphic(this.uid);
}
this._svgGraphicRecord = null;
this._svgDispatcherMap = null;
this._svgGroup.removeAll();
this._svgMapName = null;
};
MapDraw2.prototype._updateController = function(mapOrGeoModel, ecModel, api) {
var geo = mapOrGeoModel.coordinateSystem;
var controller = this._controller;
var controllerHost = this._controllerHost;
controllerHost.zoomLimit = mapOrGeoModel.get("scaleLimit");
controllerHost.zoom = geo.getZoom();
controller.enable(mapOrGeoModel.get("roam") || false);
var mainType = mapOrGeoModel.mainType;
function makeActionBase() {
var action = {
type: "geoRoam",
componentType: mainType
};
action[mainType + "Id"] = mapOrGeoModel.id;
return action;
}
controller.off("pan").on("pan", function(e) {
this._mouseDownFlag = false;
updateViewOnPan(controllerHost, e.dx, e.dy);
api.dispatchAction(extend(makeActionBase(), {
dx: e.dx,
dy: e.dy,
animation: {
duration: 0
}
}));
}, this);
controller.off("zoom").on("zoom", function(e) {
this._mouseDownFlag = false;
updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
api.dispatchAction(extend(makeActionBase(), {
totalZoom: controllerHost.zoom,
zoom: e.scale,
originX: e.originX,
originY: e.originY,
animation: {
duration: 0
}
}));
}, this);
controller.setPointerChecker(function(e, x, y) {
return geo.containPoint([x, y]) && !onIrrelevantElement(e, api, mapOrGeoModel);
});
};
MapDraw2.prototype.resetForLabelLayout = function() {
this.group.traverse(function(el) {
var label = el.getTextContent();
if (label) {
label.ignore = mapLabelRaw(label).ignore;
}
});
};
MapDraw2.prototype._updateMapSelectHandler = function(mapOrGeoModel, regionsGroup, api, fromView) {
var mapDraw = this;
regionsGroup.off("mousedown");
regionsGroup.off("click");
if (mapOrGeoModel.get("selectedMode")) {
regionsGroup.on("mousedown", function() {
mapDraw._mouseDownFlag = true;
});
regionsGroup.on("click", function(e) {
if (!mapDraw._mouseDownFlag) {
return;
}
mapDraw._mouseDownFlag = false;
});
}
};
return MapDraw2;
})()
);
function applyOptionStyleForRegion(viewBuildCtx, el, dataIndex, regionModel) {
var normalStyleModel = regionModel.getModel("itemStyle");
var emphasisStyleModel = regionModel.getModel(["emphasis", "itemStyle"]);
var blurStyleModel = regionModel.getModel(["blur", "itemStyle"]);
var selectStyleModel = regionModel.getModel(["select", "itemStyle"]);
var normalStyle = getFixedItemStyle(normalStyleModel);
var emphasisStyle = getFixedItemStyle(emphasisStyleModel);
var selectStyle = getFixedItemStyle(selectStyleModel);
var blurStyle = getFixedItemStyle(blurStyleModel);
var data = viewBuildCtx.data;
if (data) {
var style = data.getItemVisual(dataIndex, "style");
var decal = data.getItemVisual(dataIndex, "decal");
if (viewBuildCtx.isVisualEncodedByVisualMap && style.fill) {
normalStyle.fill = style.fill;
}
if (decal) {
normalStyle.decal = createOrUpdatePatternFromDecal(decal, viewBuildCtx.api);
}
}
el.setStyle(normalStyle);
el.style.strokeNoScale = true;
el.ensureState("emphasis").style = emphasisStyle;
el.ensureState("select").style = selectStyle;
el.ensureState("blur").style = blurStyle;
setDefaultStateProxy(el);
}
function resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, labelXY) {
var data = viewBuildCtx.data;
var isGeo = viewBuildCtx.isGeo;
var isDataNaN = data && isNaN(data.get(data.mapDimension("value"), dataIdx));
var itemLayout = data && data.getItemLayout(dataIdx);
if (isGeo || isDataNaN || itemLayout && itemLayout.showLabel) {
var query = !isGeo ? dataIdx : regionName;
var labelFetcher = void 0;
if (!data || dataIdx >= 0) {
labelFetcher = mapOrGeoModel;
}
var specifiedTextOpt = labelXY ? {
normal: {
align: "center",
verticalAlign: "middle"
}
} : null;
setLabelStyle(el, getLabelStatesModels(regionModel), {
labelFetcher,
labelDataIndex: query,
defaultText: regionName
}, specifiedTextOpt);
var textEl = el.getTextContent();
if (textEl) {
mapLabelRaw(textEl).ignore = textEl.ignore;
if (el.textConfig && labelXY) {
var rect = el.getBoundingRect().clone();
el.textConfig.layoutRect = rect;
el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + "%", (labelXY[1] - rect.y) / rect.height * 100 + "%"];
}
}
el.disableLabelAnimation = true;
} else {
el.removeTextContent();
el.removeTextConfig();
el.disableLabelAnimation = null;
}
}
function resetEventTriggerForRegion(viewBuildCtx, eventTrigger, regionName, regionModel, mapOrGeoModel, dataIdx) {
if (viewBuildCtx.data) {
viewBuildCtx.data.setItemGraphicEl(dataIdx, eventTrigger);
} else {
getECData(eventTrigger).eventData = {
componentType: "geo",
componentIndex: mapOrGeoModel.componentIndex,
geoIndex: mapOrGeoModel.componentIndex,
name: regionName,
region: regionModel && regionModel.option || {}
};
}
}
function resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {
if (!viewBuildCtx.data) {
setTooltipConfig({
el,
componentModel: mapOrGeoModel,
itemName: regionName,
// @ts-ignore FIXME:TS fix the "compatible with each other"?
itemTooltipOption: regionModel.get("tooltip")
});
}
}
function resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {
el.highDownSilentOnTouch = !!mapOrGeoModel.get("selectedMode");
var emphasisModel = regionModel.getModel("emphasis");
var focus = emphasisModel.get("focus");
toggleHoverEmphasis(el, focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
if (viewBuildCtx.isGeo) {
enableComponentHighDownFeatures(el, mapOrGeoModel, regionName);
}
return focus;
}
function projectPolys(rings, createStream, isLine) {
var polygons = [];
var curPoly;
function startPolygon() {
curPoly = [];
}
function endPolygon() {
if (curPoly.length) {
polygons.push(curPoly);
curPoly = [];
}
}
var stream = createStream({
polygonStart: startPolygon,
polygonEnd: endPolygon,
lineStart: startPolygon,
lineEnd: endPolygon,
point: function(x, y) {
if (isFinite(x) && isFinite(y)) {
curPoly.push([x, y]);
}
},
sphere: function() {
}
});
!isLine && stream.polygonStart();
each$f(rings, function(ring) {
stream.lineStart();
for (var i = 0; i < ring.length; i++) {
stream.point(ring[i][0], ring[i][1]);
}
stream.lineEnd();
});
!isLine && stream.polygonEnd();
return polygons;
}
var MapView = (
/** @class */
(function(_super) {
__extends(MapView2, _super);
function MapView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MapView2.type;
return _this;
}
MapView2.prototype.render = function(mapModel, ecModel, api, payload) {
if (payload && payload.type === "mapToggleSelect" && payload.from === this.uid) {
return;
}
var group = this.group;
group.removeAll();
if (mapModel.getHostGeoModel()) {
return;
}
if (this._mapDraw && payload && payload.type === "geoRoam") {
this._mapDraw.resetForLabelLayout();
}
if (!(payload && payload.type === "geoRoam" && payload.componentType === "series" && payload.seriesId === mapModel.id)) {
if (mapModel.needsDrawMap) {
var mapDraw = this._mapDraw || new MapDraw(api);
group.add(mapDraw.group);
mapDraw.draw(mapModel, ecModel, api, this, payload);
this._mapDraw = mapDraw;
} else {
this._mapDraw && this._mapDraw.remove();
this._mapDraw = null;
}
} else {
var mapDraw = this._mapDraw;
mapDraw && group.add(mapDraw.group);
}
mapModel.get("showLegendSymbol") && ecModel.getComponent("legend") && this._renderSymbols(mapModel, ecModel, api);
};
MapView2.prototype.remove = function() {
this._mapDraw && this._mapDraw.remove();
this._mapDraw = null;
this.group.removeAll();
};
MapView2.prototype.dispose = function() {
this._mapDraw && this._mapDraw.remove();
this._mapDraw = null;
};
MapView2.prototype._renderSymbols = function(mapModel, ecModel, api) {
var originalData = mapModel.originalData;
var group = this.group;
originalData.each(originalData.mapDimension("value"), function(value, originalDataIndex) {
if (isNaN(value)) {
return;
}
var layout2 = originalData.getItemLayout(originalDataIndex);
if (!layout2 || !layout2.point) {
return;
}
var point = layout2.point;
var offset = layout2.offset;
var circle = new Circle({
style: {
// Because the special of map draw.
// Which needs statistic of multiple series and draw on one map.
// And each series also need a symbol with legend color
//
// Layout and visual are put one the different data
// TODO
fill: mapModel.getData().getVisual("style").fill
},
shape: {
cx: point[0] + offset * 9,
cy: point[1],
r: 3
},
silent: true,
// Do not overlap the first series, on which labels are displayed.
z2: 8 + (!offset ? Z2_EMPHASIS_LIFT + 1 : 0)
});
if (!offset) {
var fullData = mapModel.mainSeries.getData();
var name_1 = originalData.getName(originalDataIndex);
var fullIndex_1 = fullData.indexOfName(name_1);
var itemModel = originalData.getItemModel(originalDataIndex);
var labelModel = itemModel.getModel("label");
var regionGroup = fullData.getItemGraphicEl(fullIndex_1);
setLabelStyle(circle, getLabelStatesModels(itemModel), {
labelFetcher: {
getFormattedLabel: function(idx, state) {
return mapModel.getFormattedLabel(fullIndex_1, state);
}
},
defaultText: name_1
});
circle.disableLabelAnimation = true;
if (!labelModel.get("position")) {
circle.setTextConfig({
position: "bottom"
});
}
regionGroup.onHoverStateChange = function(toState) {
setStatesFlag(circle, toState);
};
}
group.add(circle);
});
};
MapView2.type = "map";
return MapView2;
})(ChartView)
);
var MapSeries = (
/** @class */
(function(_super) {
__extends(MapSeries2, _super);
function MapSeries2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MapSeries2.type;
_this.needsDrawMap = false;
_this.seriesGroup = [];
_this.getTooltipPosition = function(dataIndex) {
if (dataIndex != null) {
var name_1 = this.getData().getName(dataIndex);
var geo = this.coordinateSystem;
var region = geo.getRegion(name_1);
return region && geo.dataToPoint(region.getCenter());
}
};
return _this;
}
MapSeries2.prototype.getInitialData = function(option) {
var data = createSeriesDataSimply(this, {
coordDimensions: ["value"],
encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this)
});
var dataNameIndexMap = createHashMap();
var toAppendItems = [];
for (var i = 0, len2 = data.count(); i < len2; i++) {
var name_2 = data.getName(i);
dataNameIndexMap.set(name_2, i);
}
var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty);
each$f(geoSource.regions, function(region) {
var name = region.name;
var dataNameIdx = dataNameIndexMap.get(name);
var specifiedGeoJSONRegionStyle = region.properties && region.properties.echartsStyle;
var dataItem;
if (dataNameIdx == null) {
dataItem = {
name
};
toAppendItems.push(dataItem);
} else {
dataItem = data.getRawDataItem(dataNameIdx);
}
specifiedGeoJSONRegionStyle && merge(dataItem, specifiedGeoJSONRegionStyle);
});
data.appendData(toAppendItems);
return data;
};
MapSeries2.prototype.getHostGeoModel = function() {
var geoIndex = this.option.geoIndex;
return geoIndex != null ? this.ecModel.getComponent("geo", geoIndex) : null;
};
MapSeries2.prototype.getMapType = function() {
return (this.getHostGeoModel() || this).option.map;
};
MapSeries2.prototype.getRawValue = function(dataIndex) {
var data = this.getData();
return data.get(data.mapDimension("value"), dataIndex);
};
MapSeries2.prototype.getRegionModel = function(regionName) {
var data = this.getData();
return data.getItemModel(data.indexOfName(regionName));
};
MapSeries2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var value = this.getRawValue(dataIndex);
var name = data.getName(dataIndex);
var seriesGroup = this.seriesGroup;
var seriesNames = [];
for (var i = 0; i < seriesGroup.length; i++) {
var otherIndex = seriesGroup[i].originalData.indexOfName(name);
var valueDim = data.mapDimension("value");
if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {
seriesNames.push(seriesGroup[i].name);
}
}
return createTooltipMarkup("section", {
header: seriesNames.join(", "),
noHeader: !seriesNames.length,
blocks: [createTooltipMarkup("nameValue", {
name,
value
})]
});
};
MapSeries2.prototype.setZoom = function(zoom) {
this.option.zoom = zoom;
};
MapSeries2.prototype.setCenter = function(center2) {
this.option.center = center2;
};
MapSeries2.prototype.getLegendIcon = function(opt) {
var iconType = opt.icon || "roundRect";
var icon = createSymbol$1(iconType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill);
icon.setStyle(opt.itemStyle);
icon.style.stroke = "none";
if (iconType.indexOf("empty") > -1) {
icon.style.stroke = icon.style.fill;
icon.style.fill = "#fff";
icon.style.lineWidth = 2;
}
return icon;
};
MapSeries2.type = "series.map";
MapSeries2.dependencies = ["geo"];
MapSeries2.layoutMode = "box";
MapSeries2.defaultOption = {
// 一级层叠
// zlevel: 0,
// 二级层叠
z: 2,
coordinateSystem: "geo",
// map should be explicitly specified since ec3.
map: "",
// If `geoIndex` is not specified, a exclusive geo will be
// created. Otherwise use the specified geo component, and
// `map` and `mapType` are ignored.
// geoIndex: 0,
// 'center' | 'left' | 'right' | 'x%' | {number}
left: "center",
// 'center' | 'top' | 'bottom' | 'x%' | {number}
top: "center",
// right
// bottom
// width:
// height
// Aspect is width / height. Inited to be geoJson bbox aspect
// This parameter is used for scale this aspect
// Default value:
// for geoSVG source: 1,
// for geoJSON source: 0.75.
aspectScale: null,
// Layout with center and size
// If you want to put map in a fixed size box with right aspect ratio
// This two properties may be more convenient.
// layoutCenter: [50%, 50%]
// layoutSize: 100
showLegendSymbol: true,
// Define left-top, right-bottom coords to control view
// For example, [ [180, 90], [-180, -90] ],
// higher priority than center and zoom
boundingCoords: null,
// Default on center of map
center: null,
zoom: 1,
scaleLimit: null,
selectedMode: true,
label: {
show: false,
color: "#000"
},
// scaleLimit: null,
itemStyle: {
borderWidth: 0.5,
borderColor: "#444",
areaColor: "#eee"
},
emphasis: {
label: {
show: true,
color: "rgb(100,0,0)"
},
itemStyle: {
areaColor: "rgba(255,215,0,0.8)"
}
},
select: {
label: {
show: true,
color: "rgb(100,0,0)"
},
itemStyle: {
color: "rgba(255,215,0,0.8)"
}
},
nameProperty: "name"
};
return MapSeries2;
})(SeriesModel)
);
function dataStatistics(datas, statisticType) {
var dataNameMap = {};
each$f(datas, function(data) {
data.each(data.mapDimension("value"), function(value, idx) {
var mapKey = "ec-" + data.getName(idx);
dataNameMap[mapKey] = dataNameMap[mapKey] || [];
if (!isNaN(value)) {
dataNameMap[mapKey].push(value);
}
});
});
return datas[0].map(datas[0].mapDimension("value"), function(value, idx) {
var mapKey = "ec-" + datas[0].getName(idx);
var sum2 = 0;
var min2 = Infinity;
var max2 = -Infinity;
var len2 = dataNameMap[mapKey].length;
for (var i = 0; i < len2; i++) {
min2 = Math.min(min2, dataNameMap[mapKey][i]);
max2 = Math.max(max2, dataNameMap[mapKey][i]);
sum2 += dataNameMap[mapKey][i];
}
var result;
if (statisticType === "min") {
result = min2;
} else if (statisticType === "max") {
result = max2;
} else if (statisticType === "average") {
result = sum2 / len2;
} else {
result = sum2;
}
return len2 === 0 ? NaN : result;
});
}
function mapDataStatistic(ecModel) {
var seriesGroups = {};
ecModel.eachSeriesByType("map", function(seriesModel) {
var hostGeoModel = seriesModel.getHostGeoModel();
var key = hostGeoModel ? "o" + hostGeoModel.id : "i" + seriesModel.getMapType();
(seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);
});
each$f(seriesGroups, function(seriesList, key) {
var data = dataStatistics(map$1(seriesList, function(seriesModel) {
return seriesModel.getData();
}), seriesList[0].get("mapValueCalculation"));
for (var i = 0; i < seriesList.length; i++) {
seriesList[i].originalData = seriesList[i].getData();
}
for (var i = 0; i < seriesList.length; i++) {
seriesList[i].seriesGroup = seriesList;
seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();
seriesList[i].setData(data.cloneShallow());
seriesList[i].mainSeries = seriesList[0];
}
});
}
function mapSymbolLayout(ecModel) {
var processedMapType = {};
ecModel.eachSeriesByType("map", function(mapSeries) {
var mapType = mapSeries.getMapType();
if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {
return;
}
var mapSymbolOffsets = {};
each$f(mapSeries.seriesGroup, function(subMapSeries) {
var geo = subMapSeries.coordinateSystem;
var data2 = subMapSeries.originalData;
if (subMapSeries.get("showLegendSymbol") && ecModel.getComponent("legend")) {
data2.each(data2.mapDimension("value"), function(value, idx) {
var name = data2.getName(idx);
var region = geo.getRegion(name);
if (!region || isNaN(value)) {
return;
}
var offset = mapSymbolOffsets[name] || 0;
var point = geo.dataToPoint(region.getCenter());
mapSymbolOffsets[name] = offset + 1;
data2.setItemLayout(idx, {
point,
offset
});
});
}
});
var data = mapSeries.getData();
data.each(function(idx) {
var name = data.getName(idx);
var layout2 = data.getItemLayout(idx) || {};
layout2.showLabel = !mapSymbolOffsets[name];
data.setItemLayout(idx, layout2);
});
processedMapType[mapType] = true;
});
}
var v2ApplyTransform = applyTransform$1;
var View = (
/** @class */
(function(_super) {
__extends(View2, _super);
function View2(name) {
var _this = _super.call(this) || this;
_this.type = "view";
_this.dimensions = ["x", "y"];
_this._roamTransformable = new Transformable();
_this._rawTransformable = new Transformable();
_this.name = name;
return _this;
}
View2.prototype.setBoundingRect = function(x, y, width, height) {
this._rect = new BoundingRect(x, y, width, height);
return this._rect;
};
View2.prototype.getBoundingRect = function() {
return this._rect;
};
View2.prototype.setViewRect = function(x, y, width, height) {
this._transformTo(x, y, width, height);
this._viewRect = new BoundingRect(x, y, width, height);
};
View2.prototype._transformTo = function(x, y, width, height) {
var rect = this.getBoundingRect();
var rawTransform = this._rawTransformable;
rawTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));
var rawParent = rawTransform.parent;
rawTransform.parent = null;
rawTransform.decomposeTransform();
rawTransform.parent = rawParent;
this._updateTransform();
};
View2.prototype.setCenter = function(centerCoord, api) {
if (!centerCoord) {
return;
}
this._center = [parsePercent(centerCoord[0], api.getWidth()), parsePercent(centerCoord[1], api.getHeight())];
this._updateCenterAndZoom();
};
View2.prototype.setZoom = function(zoom) {
zoom = zoom || 1;
var zoomLimit = this.zoomLimit;
if (zoomLimit) {
if (zoomLimit.max != null) {
zoom = Math.min(zoomLimit.max, zoom);
}
if (zoomLimit.min != null) {
zoom = Math.max(zoomLimit.min, zoom);
}
}
this._zoom = zoom;
this._updateCenterAndZoom();
};
View2.prototype.getDefaultCenter = function() {
var rawRect = this.getBoundingRect();
var cx = rawRect.x + rawRect.width / 2;
var cy = rawRect.y + rawRect.height / 2;
return [cx, cy];
};
View2.prototype.getCenter = function() {
return this._center || this.getDefaultCenter();
};
View2.prototype.getZoom = function() {
return this._zoom || 1;
};
View2.prototype.getRoamTransform = function() {
return this._roamTransformable.getLocalTransform();
};
View2.prototype._updateCenterAndZoom = function() {
var rawTransformMatrix = this._rawTransformable.getLocalTransform();
var roamTransform = this._roamTransformable;
var defaultCenter = this.getDefaultCenter();
var center2 = this.getCenter();
var zoom = this.getZoom();
center2 = applyTransform$1([], center2, rawTransformMatrix);
defaultCenter = applyTransform$1([], defaultCenter, rawTransformMatrix);
roamTransform.originX = center2[0];
roamTransform.originY = center2[1];
roamTransform.x = defaultCenter[0] - center2[0];
roamTransform.y = defaultCenter[1] - center2[1];
roamTransform.scaleX = roamTransform.scaleY = zoom;
this._updateTransform();
};
View2.prototype._updateTransform = function() {
var roamTransformable = this._roamTransformable;
var rawTransformable = this._rawTransformable;
rawTransformable.parent = roamTransformable;
roamTransformable.updateTransform();
rawTransformable.updateTransform();
copy(this.transform || (this.transform = []), rawTransformable.transform || create$1());
this._rawTransform = rawTransformable.getLocalTransform();
this.invTransform = this.invTransform || [];
invert(this.invTransform, this.transform);
this.decomposeTransform();
};
View2.prototype.getTransformInfo = function() {
var rawTransformable = this._rawTransformable;
var roamTransformable = this._roamTransformable;
var dummyTransformable2 = new Transformable();
dummyTransformable2.transform = roamTransformable.transform;
dummyTransformable2.decomposeTransform();
return {
roam: {
x: dummyTransformable2.x,
y: dummyTransformable2.y,
scaleX: dummyTransformable2.scaleX,
scaleY: dummyTransformable2.scaleY
},
raw: {
x: rawTransformable.x,
y: rawTransformable.y,
scaleX: rawTransformable.scaleX,
scaleY: rawTransformable.scaleY
}
};
};
View2.prototype.getViewRect = function() {
return this._viewRect;
};
View2.prototype.getViewRectAfterRoam = function() {
var rect = this.getBoundingRect().clone();
rect.applyTransform(this.transform);
return rect;
};
View2.prototype.dataToPoint = function(data, noRoam, out) {
var transform2 = noRoam ? this._rawTransform : this.transform;
out = out || [];
return transform2 ? v2ApplyTransform(out, data, transform2) : copy$1(out, data);
};
View2.prototype.pointToData = function(point) {
var invTransform = this.invTransform;
return invTransform ? v2ApplyTransform([], point, invTransform) : [point[0], point[1]];
};
View2.prototype.convertToPixel = function(ecModel, finder, value) {
var coordSys = getCoordSys$4(finder);
return coordSys === this ? coordSys.dataToPoint(value) : null;
};
View2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
var coordSys = getCoordSys$4(finder);
return coordSys === this ? coordSys.pointToData(pixel) : null;
};
View2.prototype.containPoint = function(point) {
return this.getViewRectAfterRoam().contain(point[0], point[1]);
};
View2.dimensions = ["x", "y"];
return View2;
})(Transformable)
);
function getCoordSys$4(finder) {
var seriesModel = finder.seriesModel;
return seriesModel ? seriesModel.coordinateSystem : null;
}
var GEO_DEFAULT_PARAMS = {
"geoJSON": {
aspectScale: 0.75,
invertLongitute: true
},
"geoSVG": {
aspectScale: 1,
invertLongitute: false
}
};
var geo2DDimensions = ["lng", "lat"];
var Geo = (
/** @class */
(function(_super) {
__extends(Geo2, _super);
function Geo2(name, map2, opt) {
var _this = _super.call(this, name) || this;
_this.dimensions = geo2DDimensions;
_this.type = "geo";
_this._nameCoordMap = createHashMap();
_this.map = map2;
var projection = opt.projection;
var source = geoSourceManager.load(map2, opt.nameMap, opt.nameProperty);
var resource = geoSourceManager.getGeoResource(map2);
_this.resourceType = resource ? resource.type : null;
var regions = _this.regions = source.regions;
var defaultParams = GEO_DEFAULT_PARAMS[resource.type];
_this._regionsMap = source.regionsMap;
_this.regions = source.regions;
_this.projection = projection;
var boundingRect;
if (projection) {
for (var i = 0; i < regions.length; i++) {
var regionRect = regions[i].getBoundingRect(projection);
boundingRect = boundingRect || regionRect.clone();
boundingRect.union(regionRect);
}
} else {
boundingRect = source.boundingRect;
}
_this.setBoundingRect(boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height);
_this.aspectScale = projection ? 1 : retrieve2(opt.aspectScale, defaultParams.aspectScale);
_this._invertLongitute = projection ? false : defaultParams.invertLongitute;
return _this;
}
Geo2.prototype._transformTo = function(x, y, width, height) {
var rect = this.getBoundingRect();
var invertLongitute = this._invertLongitute;
rect = rect.clone();
if (invertLongitute) {
rect.y = -rect.y - rect.height;
}
var rawTransformable = this._rawTransformable;
rawTransformable.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));
var rawParent = rawTransformable.parent;
rawTransformable.parent = null;
rawTransformable.decomposeTransform();
rawTransformable.parent = rawParent;
if (invertLongitute) {
rawTransformable.scaleY = -rawTransformable.scaleY;
}
this._updateTransform();
};
Geo2.prototype.getRegion = function(name) {
return this._regionsMap.get(name);
};
Geo2.prototype.getRegionByCoord = function(coord) {
var regions = this.regions;
for (var i = 0; i < regions.length; i++) {
var region = regions[i];
if (region.type === "geoJSON" && region.contain(coord)) {
return regions[i];
}
}
};
Geo2.prototype.addGeoCoord = function(name, geoCoord2) {
this._nameCoordMap.set(name, geoCoord2);
};
Geo2.prototype.getGeoCoord = function(name) {
var region = this._regionsMap.get(name);
return this._nameCoordMap.get(name) || region && region.getCenter();
};
Geo2.prototype.dataToPoint = function(data, noRoam, out) {
if (isString(data)) {
data = this.getGeoCoord(data);
}
if (data) {
var projection = this.projection;
if (projection) {
data = projection.project(data);
}
return data && this.projectedToPoint(data, noRoam, out);
}
};
Geo2.prototype.pointToData = function(point) {
var projection = this.projection;
if (projection) {
point = projection.unproject(point);
}
return point && this.pointToProjected(point);
};
Geo2.prototype.pointToProjected = function(point) {
return _super.prototype.pointToData.call(this, point);
};
Geo2.prototype.projectedToPoint = function(projected, noRoam, out) {
return _super.prototype.dataToPoint.call(this, projected, noRoam, out);
};
Geo2.prototype.convertToPixel = function(ecModel, finder, value) {
var coordSys = getCoordSys$3(finder);
return coordSys === this ? coordSys.dataToPoint(value) : null;
};
Geo2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
var coordSys = getCoordSys$3(finder);
return coordSys === this ? coordSys.pointToData(pixel) : null;
};
return Geo2;
})(View)
);
mixin(Geo, View);
function getCoordSys$3(finder) {
var geoModel = finder.geoModel;
var seriesModel = finder.seriesModel;
return geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem || (seriesModel.getReferringComponents("geo", SINGLE_REFERRING).models[0] || {}).coordinateSystem : null;
}
function resizeGeo(geoModel, api) {
var boundingCoords = geoModel.get("boundingCoords");
if (boundingCoords != null) {
var leftTop_1 = boundingCoords[0];
var rightBottom_1 = boundingCoords[1];
if (!(isFinite(leftTop_1[0]) && isFinite(leftTop_1[1]) && isFinite(rightBottom_1[0]) && isFinite(rightBottom_1[1]))) ;
else {
var projection_1 = this.projection;
if (projection_1) {
var xMin = leftTop_1[0];
var yMin = leftTop_1[1];
var xMax = rightBottom_1[0];
var yMax = rightBottom_1[1];
leftTop_1 = [Infinity, Infinity];
rightBottom_1 = [-Infinity, -Infinity];
var sampleLine = function(x0, y0, x1, y1) {
var dx = x1 - x0;
var dy = y1 - y0;
for (var i = 0; i <= 100; i++) {
var p = i / 100;
var pt = projection_1.project([x0 + dx * p, y0 + dy * p]);
min(leftTop_1, leftTop_1, pt);
max(rightBottom_1, rightBottom_1, pt);
}
};
sampleLine(xMin, yMin, xMax, yMin);
sampleLine(xMax, yMin, xMax, yMax);
sampleLine(xMax, yMax, xMin, yMax);
sampleLine(xMin, yMax, xMax, yMin);
}
this.setBoundingRect(leftTop_1[0], leftTop_1[1], rightBottom_1[0] - leftTop_1[0], rightBottom_1[1] - leftTop_1[1]);
}
}
var rect = this.getBoundingRect();
var centerOption = geoModel.get("layoutCenter");
var sizeOption = geoModel.get("layoutSize");
var viewWidth = api.getWidth();
var viewHeight = api.getHeight();
var aspect = rect.width / rect.height * this.aspectScale;
var useCenterAndSize = false;
var center2;
var size;
if (centerOption && sizeOption) {
center2 = [parsePercent(centerOption[0], viewWidth), parsePercent(centerOption[1], viewHeight)];
size = parsePercent(sizeOption, Math.min(viewWidth, viewHeight));
if (!isNaN(center2[0]) && !isNaN(center2[1]) && !isNaN(size)) {
useCenterAndSize = true;
}
}
var viewRect;
if (useCenterAndSize) {
viewRect = {};
if (aspect > 1) {
viewRect.width = size;
viewRect.height = size / aspect;
} else {
viewRect.height = size;
viewRect.width = size * aspect;
}
viewRect.y = center2[1] - viewRect.height / 2;
viewRect.x = center2[0] - viewRect.width / 2;
} else {
var boxLayoutOption = geoModel.getBoxLayoutParams();
boxLayoutOption.aspect = aspect;
viewRect = getLayoutRect(boxLayoutOption, {
width: viewWidth,
height: viewHeight
});
}
this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
this.setCenter(geoModel.get("center"), api);
this.setZoom(geoModel.get("zoom"));
}
function setGeoCoords(geo, model) {
each$f(model.get("geoCoord"), function(geoCoord2, name) {
geo.addGeoCoord(name, geoCoord2);
});
}
var GeoCreator = (
/** @class */
(function() {
function GeoCreator2() {
this.dimensions = geo2DDimensions;
}
GeoCreator2.prototype.create = function(ecModel, api) {
var geoList = [];
function getCommonGeoProperties(model) {
return {
nameProperty: model.get("nameProperty"),
aspectScale: model.get("aspectScale"),
projection: model.get("projection")
};
}
ecModel.eachComponent("geo", function(geoModel, idx) {
var mapName = geoModel.get("map");
var geo = new Geo(mapName + idx, mapName, extend({
nameMap: geoModel.get("nameMap")
}, getCommonGeoProperties(geoModel)));
geo.zoomLimit = geoModel.get("scaleLimit");
geoList.push(geo);
geoModel.coordinateSystem = geo;
geo.model = geoModel;
geo.resize = resizeGeo;
geo.resize(geoModel, api);
});
ecModel.eachSeries(function(seriesModel) {
var coordSys = seriesModel.get("coordinateSystem");
if (coordSys === "geo") {
var geoIndex = seriesModel.get("geoIndex") || 0;
seriesModel.coordinateSystem = geoList[geoIndex];
}
});
var mapModelGroupBySeries = {};
ecModel.eachSeriesByType("map", function(seriesModel) {
if (!seriesModel.getHostGeoModel()) {
var mapType = seriesModel.getMapType();
mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];
mapModelGroupBySeries[mapType].push(seriesModel);
}
});
each$f(mapModelGroupBySeries, function(mapSeries, mapType) {
var nameMapList = map$1(mapSeries, function(singleMapSeries) {
return singleMapSeries.get("nameMap");
});
var geo = new Geo(mapType, mapType, extend({
nameMap: mergeAll(nameMapList)
}, getCommonGeoProperties(mapSeries[0])));
geo.zoomLimit = retrieve.apply(null, map$1(mapSeries, function(singleMapSeries) {
return singleMapSeries.get("scaleLimit");
}));
geoList.push(geo);
geo.resize = resizeGeo;
geo.resize(mapSeries[0], api);
each$f(mapSeries, function(singleMapSeries) {
singleMapSeries.coordinateSystem = geo;
setGeoCoords(geo, singleMapSeries);
});
});
return geoList;
};
GeoCreator2.prototype.getFilledRegions = function(originRegionArr, mapName, nameMap, nameProperty) {
var regionsArr = (originRegionArr || []).slice();
var dataNameMap = createHashMap();
for (var i = 0; i < regionsArr.length; i++) {
dataNameMap.set(regionsArr[i].name, regionsArr[i]);
}
var source = geoSourceManager.load(mapName, nameMap, nameProperty);
each$f(source.regions, function(region) {
var name = region.name;
var regionOption = dataNameMap.get(name);
var specifiedGeoJSONRegionStyle = region.properties && region.properties.echartsStyle;
if (!regionOption) {
regionOption = {
name
};
regionsArr.push(regionOption);
}
specifiedGeoJSONRegionStyle && merge(regionOption, specifiedGeoJSONRegionStyle);
});
return regionsArr;
};
return GeoCreator2;
})()
);
var geoCreator = new GeoCreator();
var GeoModel = (
/** @class */
(function(_super) {
__extends(GeoModel2, _super);
function GeoModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GeoModel2.type;
return _this;
}
GeoModel2.prototype.init = function(option, parentModel, ecModel) {
var source = geoSourceManager.getGeoResource(option.map);
if (source && source.type === "geoJSON") {
var itemStyle = option.itemStyle = option.itemStyle || {};
if (!("color" in itemStyle)) {
itemStyle.color = "#eee";
}
}
this.mergeDefaultAndTheme(option, ecModel);
defaultEmphasis(option, "label", ["show"]);
};
GeoModel2.prototype.optionUpdated = function() {
var _this = this;
var option = this.option;
option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap, option.nameProperty);
var selectedMap = {};
this._optionModelMap = reduce(option.regions || [], function(optionModelMap, regionOpt) {
var regionName = regionOpt.name;
if (regionName) {
optionModelMap.set(regionName, new Model(regionOpt, _this, _this.ecModel));
if (regionOpt.selected) {
selectedMap[regionName] = true;
}
}
return optionModelMap;
}, createHashMap());
if (!option.selectedMap) {
option.selectedMap = selectedMap;
}
};
GeoModel2.prototype.getRegionModel = function(name) {
return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);
};
GeoModel2.prototype.getFormattedLabel = function(name, status) {
var regionModel = this.getRegionModel(name);
var formatter = status === "normal" ? regionModel.get(["label", "formatter"]) : regionModel.get(["emphasis", "label", "formatter"]);
var params = {
name
};
if (isFunction(formatter)) {
params.status = status;
return formatter(params);
} else if (isString(formatter)) {
return formatter.replace("{a}", name != null ? name : "");
}
};
GeoModel2.prototype.setZoom = function(zoom) {
this.option.zoom = zoom;
};
GeoModel2.prototype.setCenter = function(center2) {
this.option.center = center2;
};
GeoModel2.prototype.select = function(name) {
var option = this.option;
var selectedMode = option.selectedMode;
if (!selectedMode) {
return;
}
if (selectedMode !== "multiple") {
option.selectedMap = null;
}
var selectedMap = option.selectedMap || (option.selectedMap = {});
selectedMap[name] = true;
};
GeoModel2.prototype.unSelect = function(name) {
var selectedMap = this.option.selectedMap;
if (selectedMap) {
selectedMap[name] = false;
}
};
GeoModel2.prototype.toggleSelected = function(name) {
this[this.isSelected(name) ? "unSelect" : "select"](name);
};
GeoModel2.prototype.isSelected = function(name) {
var selectedMap = this.option.selectedMap;
return !!(selectedMap && selectedMap[name]);
};
GeoModel2.type = "geo";
GeoModel2.layoutMode = "box";
GeoModel2.defaultOption = {
// zlevel: 0,
z: 0,
show: true,
left: "center",
top: "center",
// Default value:
// for geoSVG source: 1,
// for geoJSON source: 0.75.
aspectScale: null,
// /// Layout with center and size
// If you want to put map in a fixed size box with right aspect ratio
// This two properties may be more convenient
// layoutCenter: [50%, 50%]
// layoutSize: 100
silent: false,
// Map type
map: "",
// Define left-top, right-bottom coords to control view
// For example, [ [180, 90], [-180, -90] ]
boundingCoords: null,
// Default on center of map
center: null,
zoom: 1,
scaleLimit: null,
// selectedMode: false
label: {
show: false,
color: "#000"
},
itemStyle: {
borderWidth: 0.5,
borderColor: "#444"
// Default color:
// + geoJSON: #eee
// + geoSVG: null (use SVG original `fill`)
// color: '#eee'
},
emphasis: {
label: {
show: true,
color: "rgb(100,0,0)"
},
itemStyle: {
color: "rgba(255,215,0,0.8)"
}
},
select: {
label: {
show: true,
color: "rgb(100,0,0)"
},
itemStyle: {
color: "rgba(255,215,0,0.8)"
}
},
regions: []
// tooltip: {
// show: false
// }
};
return GeoModel2;
})(ComponentModel)
);
function getCenterCoord(view, point) {
return view.pointToProjected ? view.pointToProjected(point) : view.pointToData(point);
}
function updateCenterAndZoom(view, payload, zoomLimit, api) {
var previousZoom = view.getZoom();
var center2 = view.getCenter();
var zoom = payload.zoom;
var point = view.projectedToPoint ? view.projectedToPoint(center2) : view.dataToPoint(center2);
if (payload.dx != null && payload.dy != null) {
point[0] -= payload.dx;
point[1] -= payload.dy;
view.setCenter(getCenterCoord(view, point), api);
}
if (zoom != null) {
if (zoomLimit) {
var zoomMin = zoomLimit.min || 0;
var zoomMax = zoomLimit.max || Infinity;
zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom;
}
view.scaleX *= zoom;
view.scaleY *= zoom;
var fixX = (payload.originX - view.x) * (zoom - 1);
var fixY = (payload.originY - view.y) * (zoom - 1);
view.x -= fixX;
view.y -= fixY;
view.updateTransform();
view.setCenter(getCenterCoord(view, point), api);
view.setZoom(zoom * previousZoom);
}
return {
center: view.getCenter(),
zoom: view.getZoom()
};
}
var GeoView = (
/** @class */
(function(_super) {
__extends(GeoView2, _super);
function GeoView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GeoView2.type;
_this.focusBlurEnabled = true;
return _this;
}
GeoView2.prototype.init = function(ecModel, api) {
this._api = api;
};
GeoView2.prototype.render = function(geoModel, ecModel, api, payload) {
this._model = geoModel;
if (!geoModel.get("show")) {
this._mapDraw && this._mapDraw.remove();
this._mapDraw = null;
return;
}
if (!this._mapDraw) {
this._mapDraw = new MapDraw(api);
}
var mapDraw = this._mapDraw;
mapDraw.draw(geoModel, ecModel, api, this, payload);
mapDraw.group.on("click", this._handleRegionClick, this);
mapDraw.group.silent = geoModel.get("silent");
this.group.add(mapDraw.group);
this.updateSelectStatus(geoModel, ecModel, api);
};
GeoView2.prototype._handleRegionClick = function(e) {
var eventData;
findEventDispatcher(e.target, function(current) {
return (eventData = getECData(current).eventData) != null;
}, true);
if (eventData) {
this._api.dispatchAction({
type: "geoToggleSelect",
geoId: this._model.id,
name: eventData.name
});
}
};
GeoView2.prototype.updateSelectStatus = function(model, ecModel, api) {
var _this = this;
this._mapDraw.group.traverse(function(node) {
var eventData = getECData(node).eventData;
if (eventData) {
_this._model.isSelected(eventData.name) ? api.enterSelect(node) : api.leaveSelect(node);
return true;
}
});
};
GeoView2.prototype.findHighDownDispatchers = function(name) {
return this._mapDraw && this._mapDraw.findHighDownDispatchers(name, this._model);
};
GeoView2.prototype.dispose = function() {
this._mapDraw && this._mapDraw.remove();
};
GeoView2.type = "geo";
return GeoView2;
})(ComponentView)
);
function registerMap(mapName, geoJson, specialAreas) {
geoSourceManager.registerMap(mapName, geoJson, specialAreas);
}
function install$L(registers) {
registers.registerCoordinateSystem("geo", geoCreator);
registers.registerComponentModel(GeoModel);
registers.registerComponentView(GeoView);
registers.registerImpl("registerMap", registerMap);
registers.registerImpl("getMap", function(mapName) {
return geoSourceManager.getMapForUser(mapName);
});
function makeAction(method, actionInfo2) {
actionInfo2.update = "geo:updateSelectStatus";
registers.registerAction(actionInfo2, function(payload, ecModel) {
var selected = {};
var allSelected = [];
ecModel.eachComponent({
mainType: "geo",
query: payload
}, function(geoModel) {
geoModel[method](payload.name);
var geo = geoModel.coordinateSystem;
each$f(geo.regions, function(region) {
selected[region.name] = geoModel.isSelected(region.name) || false;
});
var names = [];
each$f(selected, function(v, name) {
selected[name] && names.push(name);
});
allSelected.push({
geoIndex: geoModel.componentIndex,
// Use singular, the same naming convention as the event `selectchanged`.
name: names
});
});
return {
selected,
allSelected,
name: payload.name
};
});
}
makeAction("toggleSelected", {
type: "geoToggleSelect",
event: "geoselectchanged"
});
makeAction("select", {
type: "geoSelect",
event: "geoselected"
});
makeAction("unSelect", {
type: "geoUnSelect",
event: "geounselected"
});
registers.registerAction({
type: "geoRoam",
event: "geoRoam",
update: "updateTransform"
}, function(payload, ecModel, api) {
var componentType = payload.componentType || "series";
ecModel.eachComponent({
mainType: componentType,
query: payload
}, function(componentModel) {
var geo = componentModel.coordinateSystem;
if (geo.type !== "geo") {
return;
}
var res = updateCenterAndZoom(geo, payload, componentModel.get("scaleLimit"), api);
componentModel.setCenter && componentModel.setCenter(res.center);
componentModel.setZoom && componentModel.setZoom(res.zoom);
if (componentType === "series") {
each$f(componentModel.seriesGroup, function(seriesModel) {
seriesModel.setCenter(res.center);
seriesModel.setZoom(res.zoom);
});
}
});
});
}
function install$K(registers) {
use(install$L);
registers.registerChartView(MapView);
registers.registerSeriesModel(MapSeries);
registers.registerLayout(mapSymbolLayout);
registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);
createLegacyDataSelectAction("map", registers.registerAction);
}
function init(inRoot) {
var root = inRoot;
root.hierNode = {
defaultAncestor: null,
ancestor: root,
prelim: 0,
modifier: 0,
change: 0,
shift: 0,
i: 0,
thread: null
};
var nodes = [root];
var node;
var children;
while (node = nodes.pop()) {
children = node.children;
if (node.isExpand && children.length) {
var n = children.length;
for (var i = n - 1; i >= 0; i--) {
var child = children[i];
child.hierNode = {
defaultAncestor: null,
ancestor: child,
prelim: 0,
modifier: 0,
change: 0,
shift: 0,
i,
thread: null
};
nodes.push(child);
}
}
}
}
function firstWalk(node, separation2) {
var children = node.isExpand ? node.children : [];
var siblings = node.parentNode.children;
var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null;
if (children.length) {
executeShifts(node);
var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;
if (subtreeW) {
node.hierNode.prelim = subtreeW.hierNode.prelim + separation2(node, subtreeW);
node.hierNode.modifier = node.hierNode.prelim - midPoint;
} else {
node.hierNode.prelim = midPoint;
}
} else if (subtreeW) {
node.hierNode.prelim = subtreeW.hierNode.prelim + separation2(node, subtreeW);
}
node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation2);
}
function secondWalk(node) {
var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;
node.setLayout({
x: nodeX
}, true);
node.hierNode.modifier += node.parentNode.hierNode.modifier;
}
function separation(cb) {
return arguments.length ? cb : defaultSeparation;
}
function radialCoordinate(rad, r) {
rad -= Math.PI / 2;
return {
x: r * Math.cos(rad),
y: r * Math.sin(rad)
};
}
function getViewRect$4(seriesModel, api) {
return getLayoutRect(seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
}
function executeShifts(node) {
var children = node.children;
var n = children.length;
var shift = 0;
var change = 0;
while (--n >= 0) {
var child = children[n];
child.hierNode.prelim += shift;
child.hierNode.modifier += shift;
change += child.hierNode.change;
shift += child.hierNode.shift + change;
}
}
function apportion(subtreeV, subtreeW, ancestor, separation2) {
if (subtreeW) {
var nodeOutRight = subtreeV;
var nodeInRight = subtreeV;
var nodeOutLeft = nodeInRight.parentNode.children[0];
var nodeInLeft = subtreeW;
var sumOutRight = nodeOutRight.hierNode.modifier;
var sumInRight = nodeInRight.hierNode.modifier;
var sumOutLeft = nodeOutLeft.hierNode.modifier;
var sumInLeft = nodeInLeft.hierNode.modifier;
while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) {
nodeOutRight = nextRight(nodeOutRight);
nodeOutLeft = nextLeft(nodeOutLeft);
nodeOutRight.hierNode.ancestor = subtreeV;
var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim - sumInRight + separation2(nodeInLeft, nodeInRight);
if (shift > 0) {
moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);
sumInRight += shift;
sumOutRight += shift;
}
sumInLeft += nodeInLeft.hierNode.modifier;
sumInRight += nodeInRight.hierNode.modifier;
sumOutRight += nodeOutRight.hierNode.modifier;
sumOutLeft += nodeOutLeft.hierNode.modifier;
}
if (nodeInLeft && !nextRight(nodeOutRight)) {
nodeOutRight.hierNode.thread = nodeInLeft;
nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight;
}
if (nodeInRight && !nextLeft(nodeOutLeft)) {
nodeOutLeft.hierNode.thread = nodeInRight;
nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft;
ancestor = subtreeV;
}
}
return ancestor;
}
function nextRight(node) {
var children = node.children;
return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread;
}
function nextLeft(node) {
var children = node.children;
return children.length && node.isExpand ? children[0] : node.hierNode.thread;
}
function nextAncestor(nodeInLeft, node, ancestor) {
return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? nodeInLeft.hierNode.ancestor : ancestor;
}
function moveSubtree(wl, wr, shift) {
var change = shift / (wr.hierNode.i - wl.hierNode.i);
wr.hierNode.change -= change;
wr.hierNode.shift += shift;
wr.hierNode.modifier += shift;
wr.hierNode.prelim += shift;
wl.hierNode.change += change;
}
function defaultSeparation(node1, node2) {
return node1.parentNode === node2.parentNode ? 1 : 2;
}
var TreeEdgeShape = (
/** @class */
/* @__PURE__ */ (function() {
function TreeEdgeShape2() {
this.parentPoint = [];
this.childPoints = [];
}
return TreeEdgeShape2;
})()
);
var TreePath = (
/** @class */
(function(_super) {
__extends(TreePath2, _super);
function TreePath2(opts) {
return _super.call(this, opts) || this;
}
TreePath2.prototype.getDefaultStyle = function() {
return {
stroke: "#000",
fill: null
};
};
TreePath2.prototype.getDefaultShape = function() {
return new TreeEdgeShape();
};
TreePath2.prototype.buildPath = function(ctx, shape) {
var childPoints = shape.childPoints;
var childLen = childPoints.length;
var parentPoint = shape.parentPoint;
var firstChildPos = childPoints[0];
var lastChildPos = childPoints[childLen - 1];
if (childLen === 1) {
ctx.moveTo(parentPoint[0], parentPoint[1]);
ctx.lineTo(firstChildPos[0], firstChildPos[1]);
return;
}
var orient = shape.orient;
var forkDim = orient === "TB" || orient === "BT" ? 0 : 1;
var otherDim = 1 - forkDim;
var forkPosition = parsePercent(shape.forkPosition, 1);
var tmpPoint = [];
tmpPoint[forkDim] = parentPoint[forkDim];
tmpPoint[otherDim] = parentPoint[otherDim] + (lastChildPos[otherDim] - parentPoint[otherDim]) * forkPosition;
ctx.moveTo(parentPoint[0], parentPoint[1]);
ctx.lineTo(tmpPoint[0], tmpPoint[1]);
ctx.moveTo(firstChildPos[0], firstChildPos[1]);
tmpPoint[forkDim] = firstChildPos[forkDim];
ctx.lineTo(tmpPoint[0], tmpPoint[1]);
tmpPoint[forkDim] = lastChildPos[forkDim];
ctx.lineTo(tmpPoint[0], tmpPoint[1]);
ctx.lineTo(lastChildPos[0], lastChildPos[1]);
for (var i = 1; i < childLen - 1; i++) {
var point = childPoints[i];
ctx.moveTo(point[0], point[1]);
tmpPoint[forkDim] = point[forkDim];
ctx.lineTo(tmpPoint[0], tmpPoint[1]);
}
};
return TreePath2;
})(Path)
);
var TreeView = (
/** @class */
(function(_super) {
__extends(TreeView2, _super);
function TreeView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TreeView2.type;
_this._mainGroup = new Group$3();
return _this;
}
TreeView2.prototype.init = function(ecModel, api) {
this._controller = new RoamController(api.getZr());
this._controllerHost = {
target: this.group
};
this.group.add(this._mainGroup);
};
TreeView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var layoutInfo = seriesModel.layoutInfo;
var group = this._mainGroup;
var layout2 = seriesModel.get("layout");
if (layout2 === "radial") {
group.x = layoutInfo.x + layoutInfo.width / 2;
group.y = layoutInfo.y + layoutInfo.height / 2;
} else {
group.x = layoutInfo.x;
group.y = layoutInfo.y;
}
this._updateViewCoordSys(seriesModel, api);
this._updateController(seriesModel, ecModel, api);
var oldData = this._data;
data.diff(oldData).add(function(newIdx) {
if (symbolNeedsDraw(data, newIdx)) {
updateNode(data, newIdx, null, group, seriesModel);
}
}).update(function(newIdx, oldIdx) {
var symbolEl = oldData.getItemGraphicEl(oldIdx);
if (!symbolNeedsDraw(data, newIdx)) {
symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel);
return;
}
updateNode(data, newIdx, symbolEl, group, seriesModel);
}).remove(function(oldIdx) {
var symbolEl = oldData.getItemGraphicEl(oldIdx);
if (symbolEl) {
removeNode(oldData, oldIdx, symbolEl, group, seriesModel);
}
}).execute();
this._nodeScaleRatio = seriesModel.get("nodeScaleRatio");
this._updateNodeAndLinkScale(seriesModel);
if (seriesModel.get("expandAndCollapse") === true) {
data.eachItemGraphicEl(function(el, dataIndex) {
el.off("click").on("click", function() {
api.dispatchAction({
type: "treeExpandAndCollapse",
seriesId: seriesModel.id,
dataIndex
});
});
});
}
this._data = data;
};
TreeView2.prototype._updateViewCoordSys = function(seriesModel, api) {
var data = seriesModel.getData();
var points2 = [];
data.each(function(idx) {
var layout2 = data.getItemLayout(idx);
if (layout2 && !isNaN(layout2.x) && !isNaN(layout2.y)) {
points2.push([+layout2.x, +layout2.y]);
}
});
var min2 = [];
var max2 = [];
fromPoints(points2, min2, max2);
var oldMin = this._min;
var oldMax = this._max;
if (max2[0] - min2[0] === 0) {
min2[0] = oldMin ? oldMin[0] : min2[0] - 1;
max2[0] = oldMax ? oldMax[0] : max2[0] + 1;
}
if (max2[1] - min2[1] === 0) {
min2[1] = oldMin ? oldMin[1] : min2[1] - 1;
max2[1] = oldMax ? oldMax[1] : max2[1] + 1;
}
var viewCoordSys = seriesModel.coordinateSystem = new View();
viewCoordSys.zoomLimit = seriesModel.get("scaleLimit");
viewCoordSys.setBoundingRect(min2[0], min2[1], max2[0] - min2[0], max2[1] - min2[1]);
viewCoordSys.setCenter(seriesModel.get("center"), api);
viewCoordSys.setZoom(seriesModel.get("zoom"));
this.group.attr({
x: viewCoordSys.x,
y: viewCoordSys.y,
scaleX: viewCoordSys.scaleX,
scaleY: viewCoordSys.scaleY
});
this._min = min2;
this._max = max2;
};
TreeView2.prototype._updateController = function(seriesModel, ecModel, api) {
var _this = this;
var controller = this._controller;
var controllerHost = this._controllerHost;
var group = this.group;
controller.setPointerChecker(function(e, x, y) {
var rect = group.getBoundingRect();
rect.applyTransform(group.transform);
return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel);
});
controller.enable(seriesModel.get("roam"));
controllerHost.zoomLimit = seriesModel.get("scaleLimit");
controllerHost.zoom = seriesModel.coordinateSystem.getZoom();
controller.off("pan").off("zoom").on("pan", function(e) {
updateViewOnPan(controllerHost, e.dx, e.dy);
api.dispatchAction({
seriesId: seriesModel.id,
type: "treeRoam",
dx: e.dx,
dy: e.dy
});
}).on("zoom", function(e) {
updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
api.dispatchAction({
seriesId: seriesModel.id,
type: "treeRoam",
zoom: e.scale,
originX: e.originX,
originY: e.originY
});
_this._updateNodeAndLinkScale(seriesModel);
api.updateLabelLayout();
});
};
TreeView2.prototype._updateNodeAndLinkScale = function(seriesModel) {
var data = seriesModel.getData();
var nodeScale = this._getNodeGlobalScale(seriesModel);
data.eachItemGraphicEl(function(el, idx) {
el.setSymbolScale(nodeScale);
});
};
TreeView2.prototype._getNodeGlobalScale = function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys.type !== "view") {
return 1;
}
var nodeScaleRatio = this._nodeScaleRatio;
var groupZoom = coordSys.scaleX || 1;
var roamZoom = coordSys.getZoom();
var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
return nodeScale / groupZoom;
};
TreeView2.prototype.dispose = function() {
this._controller && this._controller.dispose();
this._controllerHost = null;
};
TreeView2.prototype.remove = function() {
this._mainGroup.removeAll();
this._data = null;
};
TreeView2.type = "tree";
return TreeView2;
})(ChartView)
);
function symbolNeedsDraw(data, dataIndex) {
var layout2 = data.getItemLayout(dataIndex);
return layout2 && !isNaN(layout2.x) && !isNaN(layout2.y);
}
function updateNode(data, dataIndex, symbolEl, group, seriesModel) {
var isInit = !symbolEl;
var node = data.tree.getNodeByDataIndex(dataIndex);
var itemModel = node.getModel();
var visualColor = node.getVisual("style").fill;
var symbolInnerColor = node.isExpand === false && node.children.length !== 0 ? visualColor : "#fff";
var virtualRoot = data.tree.root;
var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);
var sourceLayout = source.getLayout();
var sourceOldLayout = sourceSymbolEl ? {
x: sourceSymbolEl.__oldX,
y: sourceSymbolEl.__oldY,
rawX: sourceSymbolEl.__radialOldRawX,
rawY: sourceSymbolEl.__radialOldRawY
} : sourceLayout;
var targetLayout = node.getLayout();
if (isInit) {
symbolEl = new Symbol$1(data, dataIndex, null, {
symbolInnerColor,
useNameLabel: true
});
symbolEl.x = sourceOldLayout.x;
symbolEl.y = sourceOldLayout.y;
} else {
symbolEl.updateData(data, dataIndex, null, {
symbolInnerColor,
useNameLabel: true
});
}
symbolEl.__radialOldRawX = symbolEl.__radialRawX;
symbolEl.__radialOldRawY = symbolEl.__radialRawY;
symbolEl.__radialRawX = targetLayout.rawX;
symbolEl.__radialRawY = targetLayout.rawY;
group.add(symbolEl);
data.setItemGraphicEl(dataIndex, symbolEl);
symbolEl.__oldX = symbolEl.x;
symbolEl.__oldY = symbolEl.y;
updateProps$1(symbolEl, {
x: targetLayout.x,
y: targetLayout.y
}, seriesModel);
var symbolPath = symbolEl.getSymbolPath();
if (seriesModel.get("layout") === "radial") {
var realRoot = virtualRoot.children[0];
var rootLayout = realRoot.getLayout();
var length_1 = realRoot.children.length;
var rad = void 0;
var isLeft = void 0;
if (targetLayout.x === rootLayout.x && node.isExpand === true && realRoot.children.length) {
var center2 = {
x: (realRoot.children[0].getLayout().x + realRoot.children[length_1 - 1].getLayout().x) / 2,
y: (realRoot.children[0].getLayout().y + realRoot.children[length_1 - 1].getLayout().y) / 2
};
rad = Math.atan2(center2.y - rootLayout.y, center2.x - rootLayout.x);
if (rad < 0) {
rad = Math.PI * 2 + rad;
}
isLeft = center2.x < rootLayout.x;
if (isLeft) {
rad = rad - Math.PI;
}
} else {
rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);
if (rad < 0) {
rad = Math.PI * 2 + rad;
}
if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) {
isLeft = targetLayout.x < rootLayout.x;
if (isLeft) {
rad = rad - Math.PI;
}
} else {
isLeft = targetLayout.x > rootLayout.x;
if (!isLeft) {
rad = rad - Math.PI;
}
}
}
var textPosition = isLeft ? "left" : "right";
var normalLabelModel = itemModel.getModel("label");
var rotate2 = normalLabelModel.get("rotate");
var labelRotateRadian = rotate2 * (Math.PI / 180);
var textContent = symbolPath.getTextContent();
if (textContent) {
symbolPath.setTextConfig({
position: normalLabelModel.get("position") || textPosition,
rotation: rotate2 == null ? -rad : labelRotateRadian,
origin: "center"
});
textContent.setStyle("verticalAlign", "middle");
}
}
var focus = itemModel.get(["emphasis", "focus"]);
var focusDataIndices = focus === "relative" ? concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === "ancestor" ? node.getAncestorsIndices() : focus === "descendant" ? node.getDescendantIndices() : null;
if (focusDataIndices) {
getECData(symbolEl).focus = focusDataIndices;
}
drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group);
if (symbolEl.__edge) {
symbolEl.onHoverStateChange = function(toState) {
if (toState !== "blur") {
var parentEl = node.parentNode && data.getItemGraphicEl(node.parentNode.dataIndex);
if (!(parentEl && parentEl.hoverState === HOVER_STATE_BLUR)) {
setStatesFlag(symbolEl.__edge, toState);
}
}
};
}
}
function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group) {
var itemModel = node.getModel();
var edgeShape = seriesModel.get("edgeShape");
var layout2 = seriesModel.get("layout");
var orient = seriesModel.getOrient();
var curvature = seriesModel.get(["lineStyle", "curveness"]);
var edgeForkPosition = seriesModel.get("edgeForkPosition");
var lineStyle = itemModel.getModel("lineStyle").getLineStyle();
var edge = symbolEl.__edge;
if (edgeShape === "curve") {
if (node.parentNode && node.parentNode !== virtualRoot) {
if (!edge) {
edge = symbolEl.__edge = new BezierCurve({
shape: getEdgeShape(layout2, orient, curvature, sourceOldLayout, sourceOldLayout)
});
}
updateProps$1(edge, {
shape: getEdgeShape(layout2, orient, curvature, sourceLayout, targetLayout)
}, seriesModel);
}
} else if (edgeShape === "polyline") {
if (layout2 === "orthogonal") {
if (node !== virtualRoot && node.children && node.children.length !== 0 && node.isExpand === true) {
var children = node.children;
var childPoints = [];
for (var i = 0; i < children.length; i++) {
var childLayout = children[i].getLayout();
childPoints.push([childLayout.x, childLayout.y]);
}
if (!edge) {
edge = symbolEl.__edge = new TreePath({
shape: {
parentPoint: [targetLayout.x, targetLayout.y],
childPoints: [[targetLayout.x, targetLayout.y]],
orient,
forkPosition: edgeForkPosition
}
});
}
updateProps$1(edge, {
shape: {
parentPoint: [targetLayout.x, targetLayout.y],
childPoints
}
}, seriesModel);
}
}
}
if (edge && !(edgeShape === "polyline" && !node.isExpand)) {
edge.useStyle(defaults({
strokeNoScale: true,
fill: null
}, lineStyle));
setStatesStylesFromModel(edge, itemModel, "lineStyle");
setDefaultStateProxy(edge);
group.add(edge);
}
}
function removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt) {
var virtualRoot = data.tree.root;
var _a2 = getSourceNode(virtualRoot, node), source = _a2.source, sourceLayout = _a2.sourceLayout;
var symbolEl = data.getItemGraphicEl(node.dataIndex);
if (!symbolEl) {
return;
}
var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);
var sourceEdge = sourceSymbolEl.__edge;
var edge = symbolEl.__edge || (source.isExpand === false || source.children.length === 1 ? sourceEdge : void 0);
var edgeShape = seriesModel.get("edgeShape");
var layoutOpt = seriesModel.get("layout");
var orient = seriesModel.get("orient");
var curvature = seriesModel.get(["lineStyle", "curveness"]);
if (edge) {
if (edgeShape === "curve") {
removeElement(edge, {
shape: getEdgeShape(layoutOpt, orient, curvature, sourceLayout, sourceLayout),
style: {
opacity: 0
}
}, seriesModel, {
cb: function() {
group.remove(edge);
},
removeOpt: removeAnimationOpt
});
} else if (edgeShape === "polyline" && seriesModel.get("layout") === "orthogonal") {
removeElement(edge, {
shape: {
parentPoint: [sourceLayout.x, sourceLayout.y],
childPoints: [[sourceLayout.x, sourceLayout.y]]
},
style: {
opacity: 0
}
}, seriesModel, {
cb: function() {
group.remove(edge);
},
removeOpt: removeAnimationOpt
});
}
}
}
function getSourceNode(virtualRoot, node) {
var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
var sourceLayout;
while (sourceLayout = source.getLayout(), sourceLayout == null) {
source = source.parentNode === virtualRoot ? source : source.parentNode || source;
}
return {
source,
sourceLayout
};
}
function removeNode(data, dataIndex, symbolEl, group, seriesModel) {
var node = data.tree.getNodeByDataIndex(dataIndex);
var virtualRoot = data.tree.root;
var sourceLayout = getSourceNode(virtualRoot, node).sourceLayout;
var removeAnimationOpt = {
duration: seriesModel.get("animationDurationUpdate"),
easing: seriesModel.get("animationEasingUpdate")
};
removeElement(symbolEl, {
x: sourceLayout.x + 1,
y: sourceLayout.y + 1
}, seriesModel, {
cb: function() {
group.remove(symbolEl);
data.setItemGraphicEl(dataIndex, null);
},
removeOpt: removeAnimationOpt
});
symbolEl.fadeOut(null, data.hostModel, {
fadeLabel: true,
animation: removeAnimationOpt
});
node.children.forEach(function(childNode) {
removeNodeEdge(childNode, data, group, seriesModel, removeAnimationOpt);
});
removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt);
}
function getEdgeShape(layoutOpt, orient, curvature, sourceLayout, targetLayout) {
var cpx1;
var cpy1;
var cpx2;
var cpy2;
var x1;
var x2;
var y1;
var y2;
if (layoutOpt === "radial") {
x1 = sourceLayout.rawX;
y1 = sourceLayout.rawY;
x2 = targetLayout.rawX;
y2 = targetLayout.rawY;
var radialCoor1 = radialCoordinate(x1, y1);
var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * curvature);
var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * curvature);
var radialCoor4 = radialCoordinate(x2, y2);
return {
x1: radialCoor1.x || 0,
y1: radialCoor1.y || 0,
x2: radialCoor4.x || 0,
y2: radialCoor4.y || 0,
cpx1: radialCoor2.x || 0,
cpy1: radialCoor2.y || 0,
cpx2: radialCoor3.x || 0,
cpy2: radialCoor3.y || 0
};
} else {
x1 = sourceLayout.x;
y1 = sourceLayout.y;
x2 = targetLayout.x;
y2 = targetLayout.y;
if (orient === "LR" || orient === "RL") {
cpx1 = x1 + (x2 - x1) * curvature;
cpy1 = y1;
cpx2 = x2 + (x1 - x2) * curvature;
cpy2 = y2;
}
if (orient === "TB" || orient === "BT") {
cpx1 = x1;
cpy1 = y1 + (y2 - y1) * curvature;
cpx2 = x2;
cpy2 = y2 + (y1 - y2) * curvature;
}
}
return {
x1,
y1,
x2,
y2,
cpx1,
cpy1,
cpx2,
cpy2
};
}
var inner$e = makeInner();
function linkSeriesData(opt) {
var mainData = opt.mainData;
var datas = opt.datas;
if (!datas) {
datas = {
main: mainData
};
opt.datasAttr = {
main: "data"
};
}
opt.datas = opt.mainData = null;
linkAll(mainData, datas, opt);
each$f(datas, function(data) {
each$f(mainData.TRANSFERABLE_METHODS, function(methodName) {
data.wrapMethod(methodName, curry$1(transferInjection, opt));
});
});
mainData.wrapMethod("cloneShallow", curry$1(cloneShallowInjection, opt));
each$f(mainData.CHANGABLE_METHODS, function(methodName) {
mainData.wrapMethod(methodName, curry$1(changeInjection, opt));
});
assert(datas[mainData.dataType] === mainData);
}
function transferInjection(opt, res) {
if (isMainData(this)) {
var datas = extend({}, inner$e(this).datas);
datas[this.dataType] = res;
linkAll(res, datas, opt);
} else {
linkSingle(res, this.dataType, inner$e(this).mainData, opt);
}
return res;
}
function changeInjection(opt, res) {
opt.struct && opt.struct.update();
return res;
}
function cloneShallowInjection(opt, res) {
each$f(inner$e(res).datas, function(data, dataType) {
data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);
});
return res;
}
function getLinkedData(dataType) {
var mainData = inner$e(this).mainData;
return dataType == null || mainData == null ? mainData : inner$e(mainData).datas[dataType];
}
function getLinkedDataAll() {
var mainData = inner$e(this).mainData;
return mainData == null ? [{
data: mainData
}] : map$1(keys(inner$e(mainData).datas), function(type) {
return {
type,
data: inner$e(mainData).datas[type]
};
});
}
function isMainData(data) {
return inner$e(data).mainData === data;
}
function linkAll(mainData, datas, opt) {
inner$e(mainData).datas = {};
each$f(datas, function(data, dataType) {
linkSingle(data, dataType, mainData, opt);
});
}
function linkSingle(data, dataType, mainData, opt) {
inner$e(mainData).datas[dataType] = data;
inner$e(data).mainData = mainData;
data.dataType = dataType;
if (opt.struct) {
data[opt.structAttr] = opt.struct;
opt.struct[opt.datasAttr[dataType]] = data;
}
data.getLinkedData = getLinkedData;
data.getLinkedDataAll = getLinkedDataAll;
}
var TreeNode = (
/** @class */
(function() {
function TreeNode2(name, hostTree) {
this.depth = 0;
this.height = 0;
this.dataIndex = -1;
this.children = [];
this.viewChildren = [];
this.isExpand = false;
this.name = name || "";
this.hostTree = hostTree;
}
TreeNode2.prototype.isRemoved = function() {
return this.dataIndex < 0;
};
TreeNode2.prototype.eachNode = function(options, cb, context) {
if (isFunction(options)) {
context = cb;
cb = options;
options = null;
}
options = options || {};
if (isString(options)) {
options = {
order: options
};
}
var order = options.order || "preorder";
var children = this[options.attr || "children"];
var suppressVisitSub;
order === "preorder" && (suppressVisitSub = cb.call(context, this));
for (var i = 0; !suppressVisitSub && i < children.length; i++) {
children[i].eachNode(options, cb, context);
}
order === "postorder" && cb.call(context, this);
};
TreeNode2.prototype.updateDepthAndHeight = function(depth) {
var height = 0;
this.depth = depth;
for (var i = 0; i < this.children.length; i++) {
var child = this.children[i];
child.updateDepthAndHeight(depth + 1);
if (child.height > height) {
height = child.height;
}
}
this.height = height + 1;
};
TreeNode2.prototype.getNodeById = function(id) {
if (this.getId() === id) {
return this;
}
for (var i = 0, children = this.children, len2 = children.length; i < len2; i++) {
var res = children[i].getNodeById(id);
if (res) {
return res;
}
}
};
TreeNode2.prototype.contains = function(node) {
if (node === this) {
return true;
}
for (var i = 0, children = this.children, len2 = children.length; i < len2; i++) {
var res = children[i].contains(node);
if (res) {
return res;
}
}
};
TreeNode2.prototype.getAncestors = function(includeSelf) {
var ancestors = [];
var node = includeSelf ? this : this.parentNode;
while (node) {
ancestors.push(node);
node = node.parentNode;
}
ancestors.reverse();
return ancestors;
};
TreeNode2.prototype.getAncestorsIndices = function() {
var indices = [];
var currNode = this;
while (currNode) {
indices.push(currNode.dataIndex);
currNode = currNode.parentNode;
}
indices.reverse();
return indices;
};
TreeNode2.prototype.getDescendantIndices = function() {
var indices = [];
this.eachNode(function(childNode) {
indices.push(childNode.dataIndex);
});
return indices;
};
TreeNode2.prototype.getValue = function(dimension) {
var data = this.hostTree.data;
return data.getStore().get(data.getDimensionIndex(dimension || "value"), this.dataIndex);
};
TreeNode2.prototype.setLayout = function(layout2, merge2) {
this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, layout2, merge2);
};
TreeNode2.prototype.getLayout = function() {
return this.hostTree.data.getItemLayout(this.dataIndex);
};
TreeNode2.prototype.getModel = function(path) {
if (this.dataIndex < 0) {
return;
}
var hostTree = this.hostTree;
var itemModel = hostTree.data.getItemModel(this.dataIndex);
return itemModel.getModel(path);
};
TreeNode2.prototype.getLevelModel = function() {
return (this.hostTree.levelModels || [])[this.depth];
};
TreeNode2.prototype.setVisual = function(key, value) {
this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, key, value);
};
TreeNode2.prototype.getVisual = function(key) {
return this.hostTree.data.getItemVisual(this.dataIndex, key);
};
TreeNode2.prototype.getRawIndex = function() {
return this.hostTree.data.getRawIndex(this.dataIndex);
};
TreeNode2.prototype.getId = function() {
return this.hostTree.data.getId(this.dataIndex);
};
TreeNode2.prototype.getChildIndex = function() {
if (this.parentNode) {
var children = this.parentNode.children;
for (var i = 0; i < children.length; ++i) {
if (children[i] === this) {
return i;
}
}
return -1;
}
return -1;
};
TreeNode2.prototype.isAncestorOf = function(node) {
var parent = node.parentNode;
while (parent) {
if (parent === this) {
return true;
}
parent = parent.parentNode;
}
return false;
};
TreeNode2.prototype.isDescendantOf = function(node) {
return node !== this && node.isAncestorOf(this);
};
return TreeNode2;
})()
);
var Tree = (
/** @class */
(function() {
function Tree2(hostModel) {
this.type = "tree";
this._nodes = [];
this.hostModel = hostModel;
}
Tree2.prototype.eachNode = function(options, cb, context) {
this.root.eachNode(options, cb, context);
};
Tree2.prototype.getNodeByDataIndex = function(dataIndex) {
var rawIndex = this.data.getRawIndex(dataIndex);
return this._nodes[rawIndex];
};
Tree2.prototype.getNodeById = function(name) {
return this.root.getNodeById(name);
};
Tree2.prototype.update = function() {
var data = this.data;
var nodes = this._nodes;
for (var i = 0, len2 = nodes.length; i < len2; i++) {
nodes[i].dataIndex = -1;
}
for (var i = 0, len2 = data.count(); i < len2; i++) {
nodes[data.getRawIndex(i)].dataIndex = i;
}
};
Tree2.prototype.clearLayouts = function() {
this.data.clearItemLayouts();
};
Tree2.createTree = function(dataRoot, hostModel, beforeLink) {
var tree = new Tree2(hostModel);
var listData = [];
var dimMax = 1;
buildHierarchy(dataRoot);
function buildHierarchy(dataNode, parentNode) {
var value = dataNode.value;
dimMax = Math.max(dimMax, isArray$1(value) ? value.length : 1);
listData.push(dataNode);
var node = new TreeNode(convertOptionIdName(dataNode.name, ""), tree);
parentNode ? addChild(node, parentNode) : tree.root = node;
tree._nodes.push(node);
var children = dataNode.children;
if (children) {
for (var i = 0; i < children.length; i++) {
buildHierarchy(children[i], node);
}
}
}
tree.root.updateDepthAndHeight(0);
var dimensions = prepareSeriesDataSchema(listData, {
coordDimensions: ["value"],
dimensionsCount: dimMax
}).dimensions;
var list = new SeriesData(dimensions, hostModel);
list.initData(listData);
beforeLink && beforeLink(list);
linkSeriesData({
mainData: list,
struct: tree,
structAttr: "tree"
});
tree.update();
return tree;
};
return Tree2;
})()
);
function addChild(child, node) {
var children = node.children;
if (child.parentNode === node) {
return;
}
children.push(child);
child.parentNode = node;
}
function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {
if (payload && indexOf(validPayloadTypes, payload.type) >= 0) {
var root = seriesModel.getData().tree.root;
var targetNode = payload.targetNode;
if (isString(targetNode)) {
targetNode = root.getNodeById(targetNode);
}
if (targetNode && root.contains(targetNode)) {
return {
node: targetNode
};
}
var targetNodeId = payload.targetNodeId;
if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {
return {
node: targetNode
};
}
}
}
function getPathToRoot(node) {
var path = [];
while (node) {
node = node.parentNode;
node && path.push(node);
}
return path.reverse();
}
function aboveViewRoot(viewRoot, node) {
var viewPath = getPathToRoot(viewRoot);
return indexOf(viewPath, node) >= 0;
}
function wrapTreePathInfo(node, seriesModel) {
var treePathInfo = [];
while (node) {
var nodeDataIndex = node.dataIndex;
treePathInfo.push({
name: node.name,
dataIndex: nodeDataIndex,
value: seriesModel.getRawValue(nodeDataIndex)
});
node = node.parentNode;
}
treePathInfo.reverse();
return treePathInfo;
}
var TreeSeriesModel = (
/** @class */
(function(_super) {
__extends(TreeSeriesModel2, _super);
function TreeSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.hasSymbolVisual = true;
_this.ignoreStyleOnData = true;
return _this;
}
TreeSeriesModel2.prototype.getInitialData = function(option) {
var root = {
name: option.name,
children: option.data
};
var leaves = option.leaves || {};
var leavesModel = new Model(leaves, this, this.ecModel);
var tree = Tree.createTree(root, this, beforeLink);
function beforeLink(nodeData) {
nodeData.wrapMethod("getItemModel", function(model, idx) {
var node = tree.getNodeByDataIndex(idx);
if (!(node && node.children.length && node.isExpand)) {
model.parentModel = leavesModel;
}
return model;
});
}
var treeDepth = 0;
tree.eachNode("preorder", function(node) {
if (node.depth > treeDepth) {
treeDepth = node.depth;
}
});
var expandAndCollapse = option.expandAndCollapse;
var expandTreeDepth = expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth;
tree.root.eachNode("preorder", function(node) {
var item = node.hostTree.data.getRawDataItem(node.dataIndex);
node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth;
});
return tree.data;
};
TreeSeriesModel2.prototype.getOrient = function() {
var orient = this.get("orient");
if (orient === "horizontal") {
orient = "LR";
} else if (orient === "vertical") {
orient = "TB";
}
return orient;
};
TreeSeriesModel2.prototype.setZoom = function(zoom) {
this.option.zoom = zoom;
};
TreeSeriesModel2.prototype.setCenter = function(center2) {
this.option.center = center2;
};
TreeSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var tree = this.getData().tree;
var realRoot = tree.root.children[0];
var node = tree.getNodeByDataIndex(dataIndex);
var value = node.getValue();
var name = node.name;
while (node && node !== realRoot) {
name = node.parentNode.name + "." + name;
node = node.parentNode;
}
return createTooltipMarkup("nameValue", {
name,
value,
noValue: isNaN(value) || value == null
});
};
TreeSeriesModel2.prototype.getDataParams = function(dataIndex) {
var params = _super.prototype.getDataParams.apply(this, arguments);
var node = this.getData().tree.getNodeByDataIndex(dataIndex);
params.treeAncestors = wrapTreePathInfo(node, this);
params.collapsed = !node.isExpand;
return params;
};
TreeSeriesModel2.type = "series.tree";
TreeSeriesModel2.layoutMode = "box";
TreeSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "view",
// the position of the whole view
left: "12%",
top: "12%",
right: "12%",
bottom: "12%",
// the layout of the tree, two value can be selected, 'orthogonal' or 'radial'
layout: "orthogonal",
// value can be 'polyline'
edgeShape: "curve",
edgeForkPosition: "50%",
// true | false | 'move' | 'scale', see module:component/helper/RoamController.
roam: false,
// Symbol size scale ratio in roam
nodeScaleRatio: 0.4,
// Default on center of graph
center: null,
zoom: 1,
orient: "LR",
symbol: "emptyCircle",
symbolSize: 7,
expandAndCollapse: true,
initialTreeDepth: 2,
lineStyle: {
color: "#ccc",
width: 1.5,
curveness: 0.5
},
itemStyle: {
color: "lightsteelblue",
// borderColor: '#c23531',
borderWidth: 1.5
},
label: {
show: true
},
animationEasing: "linear",
animationDuration: 700,
animationDurationUpdate: 500
};
return TreeSeriesModel2;
})(SeriesModel)
);
function eachAfter(root, callback, separation2) {
var nodes = [root];
var next = [];
var node;
while (node = nodes.pop()) {
next.push(node);
if (node.isExpand) {
var children = node.children;
if (children.length) {
for (var i = 0; i < children.length; i++) {
nodes.push(children[i]);
}
}
}
}
while (node = next.pop()) {
callback(node, separation2);
}
}
function eachBefore(root, callback) {
var nodes = [root];
var node;
while (node = nodes.pop()) {
callback(node);
if (node.isExpand) {
var children = node.children;
if (children.length) {
for (var i = children.length - 1; i >= 0; i--) {
nodes.push(children[i]);
}
}
}
}
}
function treeLayout(ecModel, api) {
ecModel.eachSeriesByType("tree", function(seriesModel) {
commonLayout(seriesModel, api);
});
}
function commonLayout(seriesModel, api) {
var layoutInfo = getViewRect$4(seriesModel, api);
seriesModel.layoutInfo = layoutInfo;
var layout2 = seriesModel.get("layout");
var width = 0;
var height = 0;
var separation$1 = null;
if (layout2 === "radial") {
width = 2 * Math.PI;
height = Math.min(layoutInfo.height, layoutInfo.width) / 2;
separation$1 = separation(function(node1, node2) {
return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth;
});
} else {
width = layoutInfo.width;
height = layoutInfo.height;
separation$1 = separation();
}
var virtualRoot = seriesModel.getData().tree.root;
var realRoot = virtualRoot.children[0];
if (realRoot) {
init(virtualRoot);
eachAfter(realRoot, firstWalk, separation$1);
virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim;
eachBefore(realRoot, secondWalk);
var left_1 = realRoot;
var right_1 = realRoot;
var bottom_1 = realRoot;
eachBefore(realRoot, function(node) {
var x = node.getLayout().x;
if (x < left_1.getLayout().x) {
left_1 = node;
}
if (x > right_1.getLayout().x) {
right_1 = node;
}
if (node.depth > bottom_1.depth) {
bottom_1 = node;
}
});
var delta = left_1 === right_1 ? 1 : separation$1(left_1, right_1) / 2;
var tx_1 = delta - left_1.getLayout().x;
var kx_1 = 0;
var ky_1 = 0;
var coorX_1 = 0;
var coorY_1 = 0;
if (layout2 === "radial") {
kx_1 = width / (right_1.getLayout().x + delta + tx_1);
ky_1 = height / (bottom_1.depth - 1 || 1);
eachBefore(realRoot, function(node) {
coorX_1 = (node.getLayout().x + tx_1) * kx_1;
coorY_1 = (node.depth - 1) * ky_1;
var finalCoor = radialCoordinate(coorX_1, coorY_1);
node.setLayout({
x: finalCoor.x,
y: finalCoor.y,
rawX: coorX_1,
rawY: coorY_1
}, true);
});
} else {
var orient_1 = seriesModel.getOrient();
if (orient_1 === "RL" || orient_1 === "LR") {
ky_1 = height / (right_1.getLayout().x + delta + tx_1);
kx_1 = width / (bottom_1.depth - 1 || 1);
eachBefore(realRoot, function(node) {
coorY_1 = (node.getLayout().x + tx_1) * ky_1;
coorX_1 = orient_1 === "LR" ? (node.depth - 1) * kx_1 : width - (node.depth - 1) * kx_1;
node.setLayout({
x: coorX_1,
y: coorY_1
}, true);
});
} else if (orient_1 === "TB" || orient_1 === "BT") {
kx_1 = width / (right_1.getLayout().x + delta + tx_1);
ky_1 = height / (bottom_1.depth - 1 || 1);
eachBefore(realRoot, function(node) {
coorX_1 = (node.getLayout().x + tx_1) * kx_1;
coorY_1 = orient_1 === "TB" ? (node.depth - 1) * ky_1 : height - (node.depth - 1) * ky_1;
node.setLayout({
x: coorX_1,
y: coorY_1
}, true);
});
}
}
}
}
function treeVisual(ecModel) {
ecModel.eachSeriesByType("tree", function(seriesModel) {
var data = seriesModel.getData();
var tree = data.tree;
tree.eachNode(function(node) {
var model = node.getModel();
var style = model.getModel("itemStyle").getItemStyle();
var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, "style");
extend(existsStyle, style);
});
});
}
function installTreeAction(registers) {
registers.registerAction({
type: "treeExpandAndCollapse",
event: "treeExpandAndCollapse",
update: "update"
}, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "series",
subType: "tree",
query: payload
}, function(seriesModel) {
var dataIndex = payload.dataIndex;
var tree = seriesModel.getData().tree;
var node = tree.getNodeByDataIndex(dataIndex);
node.isExpand = !node.isExpand;
});
});
registers.registerAction({
type: "treeRoam",
event: "treeRoam",
// Here we set 'none' instead of 'update', because roam action
// just need to update the transform matrix without having to recalculate
// the layout. So don't need to go through the whole update process, such
// as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on.
update: "none"
}, function(payload, ecModel, api) {
ecModel.eachComponent({
mainType: "series",
subType: "tree",
query: payload
}, function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var res = updateCenterAndZoom(coordSys, payload, void 0, api);
seriesModel.setCenter && seriesModel.setCenter(res.center);
seriesModel.setZoom && seriesModel.setZoom(res.zoom);
});
});
}
function install$J(registers) {
registers.registerChartView(TreeView);
registers.registerSeriesModel(TreeSeriesModel);
registers.registerLayout(treeLayout);
registers.registerVisual(treeVisual);
installTreeAction(registers);
}
var actionTypes = ["treemapZoomToNode", "treemapRender", "treemapMove"];
function installTreemapAction(registers) {
for (var i = 0; i < actionTypes.length; i++) {
registers.registerAction({
type: actionTypes[i],
update: "updateView"
}, noop);
}
registers.registerAction({
type: "treemapRootToNode",
update: "updateView"
}, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "series",
subType: "treemap",
query: payload
}, handleRootToNode);
function handleRootToNode(model, index) {
var types = ["treemapZoomToNode", "treemapRootToNode"];
var targetInfo = retrieveTargetInfo(payload, types, model);
if (targetInfo) {
var originViewRoot = model.getViewRoot();
if (originViewRoot) {
payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? "rollUp" : "drillDown";
}
model.resetViewRoot(targetInfo.node);
}
}
});
}
function enableAriaDecalForTree(seriesModel) {
var data = seriesModel.getData();
var tree = data.tree;
var decalPaletteScope2 = {};
tree.eachNode(function(node) {
var current = node;
while (current && current.depth > 1) {
current = current.parentNode;
}
var decal = getDecalFromPalette(seriesModel.ecModel, current.name || current.dataIndex + "", decalPaletteScope2);
node.setVisual("decal", decal);
});
}
var TreemapSeriesModel = (
/** @class */
(function(_super) {
__extends(TreemapSeriesModel2, _super);
function TreemapSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TreemapSeriesModel2.type;
_this.preventUsingHoverLayer = true;
return _this;
}
TreemapSeriesModel2.prototype.getInitialData = function(option, ecModel) {
var root = {
name: option.name,
children: option.data
};
completeTreeValue$1(root);
var levels = option.levels || [];
var designatedVisualItemStyle = this.designatedVisualItemStyle = {};
var designatedVisualModel = new Model({
itemStyle: designatedVisualItemStyle
}, this, ecModel);
levels = option.levels = setDefault(levels, ecModel);
var levelModels = map$1(levels || [], function(levelDefine) {
return new Model(levelDefine, designatedVisualModel, ecModel);
}, this);
var tree = Tree.createTree(root, this, beforeLink);
function beforeLink(nodeData) {
nodeData.wrapMethod("getItemModel", function(model, idx) {
var node = tree.getNodeByDataIndex(idx);
var levelModel = node ? levelModels[node.depth] : null;
model.parentModel = levelModel || designatedVisualModel;
return model;
});
}
return tree.data;
};
TreemapSeriesModel2.prototype.optionUpdated = function() {
this.resetViewRoot();
};
TreemapSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var value = this.getRawValue(dataIndex);
var name = data.getName(dataIndex);
return createTooltipMarkup("nameValue", {
name,
value
});
};
TreemapSeriesModel2.prototype.getDataParams = function(dataIndex) {
var params = _super.prototype.getDataParams.apply(this, arguments);
var node = this.getData().tree.getNodeByDataIndex(dataIndex);
params.treeAncestors = wrapTreePathInfo(node, this);
params.treePathInfo = params.treeAncestors;
return params;
};
TreemapSeriesModel2.prototype.setLayoutInfo = function(layoutInfo) {
this.layoutInfo = this.layoutInfo || {};
extend(this.layoutInfo, layoutInfo);
};
TreemapSeriesModel2.prototype.mapIdToIndex = function(id) {
var idIndexMap = this._idIndexMap;
if (!idIndexMap) {
idIndexMap = this._idIndexMap = createHashMap();
this._idIndexMapCount = 0;
}
var index = idIndexMap.get(id);
if (index == null) {
idIndexMap.set(id, index = this._idIndexMapCount++);
}
return index;
};
TreemapSeriesModel2.prototype.getViewRoot = function() {
return this._viewRoot;
};
TreemapSeriesModel2.prototype.resetViewRoot = function(viewRoot) {
viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot;
var root = this.getRawData().tree.root;
if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) {
this._viewRoot = root;
}
};
TreemapSeriesModel2.prototype.enableAriaDecal = function() {
enableAriaDecalForTree(this);
};
TreemapSeriesModel2.type = "series.treemap";
TreemapSeriesModel2.layoutMode = "box";
TreemapSeriesModel2.defaultOption = {
// Disable progressive rendering
progressive: 0,
// size: ['80%', '80%'], // deprecated, compatible with ec2.
left: "center",
top: "middle",
width: "80%",
height: "80%",
sort: true,
clipWindow: "origin",
squareRatio: 0.5 * (1 + Math.sqrt(5)),
leafDepth: null,
drillDownIcon: "▶",
// to align specialized icon. ▷▶❒❐▼✚
zoomToNodeRatio: 0.32 * 0.32,
scaleLimit: null,
roam: true,
nodeClick: "zoomToNode",
animation: true,
animationDurationUpdate: 900,
animationEasing: "quinticInOut",
breadcrumb: {
show: true,
height: 22,
left: "center",
top: "bottom",
// right
// bottom
emptyItemWidth: 25,
itemStyle: {
color: "rgba(0,0,0,0.7)",
textStyle: {
color: "#fff"
}
},
emphasis: {
itemStyle: {
color: "rgba(0,0,0,0.9)"
// '#5793f3',
}
}
},
label: {
show: true,
// Do not use textDistance, for ellipsis rect just the same as treemap node rect.
distance: 0,
padding: 5,
position: "inside",
// formatter: null,
color: "#fff",
overflow: "truncate"
// align
// verticalAlign
},
upperLabel: {
show: false,
position: [0, "50%"],
height: 20,
// formatter: null,
// color: '#fff',
overflow: "truncate",
// align: null,
verticalAlign: "middle"
},
itemStyle: {
color: null,
colorAlpha: null,
colorSaturation: null,
borderWidth: 0,
gapWidth: 0,
borderColor: "#fff",
borderColorSaturation: null
// If specified, borderColor will be ineffective, and the
// border color is evaluated by color of current node and
// borderColorSaturation.
},
emphasis: {
upperLabel: {
show: true,
position: [0, "50%"],
overflow: "truncate",
verticalAlign: "middle"
}
},
visualDimension: 0,
visualMin: null,
visualMax: null,
color: [],
// level[n].color (if necessary).
// + Specify color list of each level. level[0].color would be global
// color list if not specified. (see method `setDefault`).
// + But set as a empty array to forbid fetch color from global palette
// when using nodeModel.get('color'), otherwise nodes on deep level
// will always has color palette set and are not able to inherit color
// from parent node.
// + TreemapSeries.color can not be set as 'none', otherwise effect
// legend color fetching (see seriesColor.js).
colorAlpha: null,
colorSaturation: null,
colorMappingBy: "index",
visibleMin: 10,
// be rendered. Only works when sort is 'asc' or 'desc'.
childrenVisibleMin: null,
// grandchildren will not show.
// Why grandchildren? If not grandchildren but children,
// some siblings show children and some not,
// the appearance may be mess and not consistent,
levels: []
// Each item: {
// visibleMin, itemStyle, visualDimension, label
// }
};
return TreemapSeriesModel2;
})(SeriesModel)
);
function completeTreeValue$1(dataNode) {
var sum2 = 0;
each$f(dataNode.children, function(child) {
completeTreeValue$1(child);
var childValue = child.value;
isArray$1(childValue) && (childValue = childValue[0]);
sum2 += childValue;
});
var thisValue = dataNode.value;
if (isArray$1(thisValue)) {
thisValue = thisValue[0];
}
if (thisValue == null || isNaN(thisValue)) {
thisValue = sum2;
}
if (thisValue < 0) {
thisValue = 0;
}
isArray$1(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue;
}
function setDefault(levels, ecModel) {
var globalColorList = normalizeToArray(ecModel.get("color"));
var globalDecalList = normalizeToArray(ecModel.get(["aria", "decal", "decals"]));
if (!globalColorList) {
return;
}
levels = levels || [];
var hasColorDefine;
var hasDecalDefine;
each$f(levels, function(levelDefine) {
var model = new Model(levelDefine);
var modelColor = model.get("color");
var modelDecal = model.get("decal");
if (model.get(["itemStyle", "color"]) || modelColor && modelColor !== "none") {
hasColorDefine = true;
}
if (model.get(["itemStyle", "decal"]) || modelDecal && modelDecal !== "none") {
hasDecalDefine = true;
}
});
var level0 = levels[0] || (levels[0] = {});
if (!hasColorDefine) {
level0.color = globalColorList.slice();
}
if (!hasDecalDefine && globalDecalList) {
level0.decal = globalDecalList.slice();
}
return levels;
}
var TEXT_PADDING = 8;
var ITEM_GAP = 8;
var ARRAY_LENGTH = 5;
var Breadcrumb = (
/** @class */
(function() {
function Breadcrumb2(containerGroup) {
this.group = new Group$3();
containerGroup.add(this.group);
}
Breadcrumb2.prototype.render = function(seriesModel, api, targetNode, onSelect) {
var model = seriesModel.getModel("breadcrumb");
var thisGroup = this.group;
thisGroup.removeAll();
if (!model.get("show") || !targetNode) {
return;
}
var normalStyleModel = model.getModel("itemStyle");
var emphasisModel = model.getModel("emphasis");
var textStyleModel = normalStyleModel.getModel("textStyle");
var emphasisTextStyleModel = emphasisModel.getModel(["itemStyle", "textStyle"]);
var layoutParam = {
pos: {
left: model.get("left"),
right: model.get("right"),
top: model.get("top"),
bottom: model.get("bottom")
},
box: {
width: api.getWidth(),
height: api.getHeight()
},
emptyItemWidth: model.get("emptyItemWidth"),
totalWidth: 0,
renderList: []
};
this._prepare(targetNode, layoutParam, textStyleModel);
this._renderContent(seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect);
positionElement(thisGroup, layoutParam.pos, layoutParam.box);
};
Breadcrumb2.prototype._prepare = function(targetNode, layoutParam, textStyleModel) {
for (var node = targetNode; node; node = node.parentNode) {
var text = convertOptionIdName(node.getModel().get("name"), "");
var textRect = textStyleModel.getTextRect(text);
var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth);
layoutParam.totalWidth += itemWidth + ITEM_GAP;
layoutParam.renderList.push({
node,
text,
width: itemWidth
});
}
};
Breadcrumb2.prototype._renderContent = function(seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect) {
var lastX = 0;
var emptyItemWidth = layoutParam.emptyItemWidth;
var height = seriesModel.get(["breadcrumb", "height"]);
var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box);
var totalWidth = layoutParam.totalWidth;
var renderList = layoutParam.renderList;
var emphasisItemStyle = emphasisModel.getModel("itemStyle").getItemStyle();
for (var i = renderList.length - 1; i >= 0; i--) {
var item = renderList[i];
var itemNode = item.node;
var itemWidth = item.width;
var text = item.text;
if (totalWidth > availableSize.width) {
totalWidth -= itemWidth - emptyItemWidth;
itemWidth = emptyItemWidth;
text = null;
}
var el = new Polygon({
shape: {
points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0)
},
style: defaults(normalStyleModel.getItemStyle(), {
lineJoin: "bevel"
}),
textContent: new ZRText({
style: createTextStyle(textStyleModel, {
text
})
}),
textConfig: {
position: "inside"
},
z2: Z2_EMPHASIS_LIFT * 1e4,
onclick: curry$1(onSelect, itemNode)
});
el.disableLabelAnimation = true;
el.getTextContent().ensureState("emphasis").style = createTextStyle(emphasisTextStyleModel, {
text
});
el.ensureState("emphasis").style = emphasisItemStyle;
toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
this.group.add(el);
packEventData(el, seriesModel, itemNode);
lastX += itemWidth + ITEM_GAP;
}
};
Breadcrumb2.prototype.remove = function() {
this.group.removeAll();
};
return Breadcrumb2;
})()
);
function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {
var points2 = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]];
!tail && points2.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);
!head && points2.push([x, y + itemHeight / 2]);
return points2;
}
function packEventData(el, seriesModel, itemNode) {
getECData(el).eventData = {
componentType: "series",
componentSubType: "treemap",
componentIndex: seriesModel.componentIndex,
seriesIndex: seriesModel.seriesIndex,
seriesName: seriesModel.name,
seriesType: "treemap",
selfType: "breadcrumb",
nodeData: {
dataIndex: itemNode && itemNode.dataIndex,
name: itemNode && itemNode.name
},
treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)
};
}
var AnimationWrap = (
/** @class */
(function() {
function AnimationWrap2() {
this._storage = [];
this._elExistsMap = {};
}
AnimationWrap2.prototype.add = function(el, target, duration, delay, easing) {
if (this._elExistsMap[el.id]) {
return false;
}
this._elExistsMap[el.id] = true;
this._storage.push({
el,
target,
duration,
delay,
easing
});
return true;
};
AnimationWrap2.prototype.finished = function(callback) {
this._finishedCallback = callback;
return this;
};
AnimationWrap2.prototype.start = function() {
var _this = this;
var count2 = this._storage.length;
var checkTerminate = function() {
count2--;
if (count2 <= 0) {
_this._storage.length = 0;
_this._elExistsMap = {};
_this._finishedCallback && _this._finishedCallback();
}
};
for (var i = 0, len2 = this._storage.length; i < len2; i++) {
var item = this._storage[i];
item.el.animateTo(item.target, {
duration: item.duration,
delay: item.delay,
easing: item.easing,
setToFinal: true,
done: checkTerminate,
aborted: checkTerminate
});
}
return this;
};
return AnimationWrap2;
})()
);
function createWrap() {
return new AnimationWrap();
}
var Group$2 = Group$3;
var Rect$1 = Rect$2;
var DRAG_THRESHOLD = 3;
var PATH_LABEL_NOAMAL = "label";
var PATH_UPPERLABEL_NORMAL = "upperLabel";
var Z2_BASE = Z2_EMPHASIS_LIFT * 10;
var Z2_BG = Z2_EMPHASIS_LIFT * 2;
var Z2_CONTENT = Z2_EMPHASIS_LIFT * 3;
var getStateItemStyle = makeStyleMapper([
["fill", "color"],
// `borderColor` and `borderWidth` has been occupied,
// so use `stroke` to indicate the stroke of the rect.
["stroke", "strokeColor"],
["lineWidth", "strokeWidth"],
["shadowBlur"],
["shadowOffsetX"],
["shadowOffsetY"],
["shadowColor"]
// Option decal is in `DecalObject` but style.decal is in `PatternObject`.
// So do not transfer decal directly.
]);
var getItemStyleNormal = function(model) {
var itemStyle = getStateItemStyle(model);
itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;
return itemStyle;
};
var inner$d = makeInner();
var TreemapView = (
/** @class */
(function(_super) {
__extends(TreemapView2, _super);
function TreemapView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TreemapView2.type;
_this._state = "ready";
_this._storage = createStorage();
return _this;
}
TreemapView2.prototype.render = function(seriesModel, ecModel, api, payload) {
var models = ecModel.findComponents({
mainType: "series",
subType: "treemap",
query: payload
});
if (indexOf(models, seriesModel) < 0) {
return;
}
this.seriesModel = seriesModel;
this.api = api;
this.ecModel = ecModel;
var types = ["treemapZoomToNode", "treemapRootToNode"];
var targetInfo = retrieveTargetInfo(payload, types, seriesModel);
var payloadType = payload && payload.type;
var layoutInfo = seriesModel.layoutInfo;
var isInit = !this._oldTree;
var thisStorage = this._storage;
var reRoot = payloadType === "treemapRootToNode" && targetInfo && thisStorage ? {
rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],
direction: payload.direction
} : null;
var containerGroup = this._giveContainerGroup(layoutInfo);
var hasAnimation = seriesModel.get("animation");
var renderResult = this._doRender(containerGroup, seriesModel, reRoot);
hasAnimation && !isInit && (!payloadType || payloadType === "treemapZoomToNode" || payloadType === "treemapRootToNode") ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally();
this._resetController(api);
this._renderBreadcrumb(seriesModel, api, targetInfo);
};
TreemapView2.prototype._giveContainerGroup = function(layoutInfo) {
var containerGroup = this._containerGroup;
if (!containerGroup) {
containerGroup = this._containerGroup = new Group$2();
this._initEvents(containerGroup);
this.group.add(containerGroup);
}
containerGroup.x = layoutInfo.x;
containerGroup.y = layoutInfo.y;
return containerGroup;
};
TreemapView2.prototype._doRender = function(containerGroup, seriesModel, reRoot) {
var thisTree = seriesModel.getData().tree;
var oldTree = this._oldTree;
var lastsForAnimation = createStorage();
var thisStorage = createStorage();
var oldStorage = this._storage;
var willInvisibleEls = [];
function doRenderNode(thisNode, oldNode, parentGroup, depth) {
return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth);
}
dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0);
var willDeleteEls = clearStorage(oldStorage);
this._oldTree = thisTree;
this._storage = thisStorage;
if (this._controllerHost) {
var _oldRootLayout = this.seriesModel.layoutInfo;
var rootLayout = thisTree.root.getLayout();
if (rootLayout.width === _oldRootLayout.width && rootLayout.height === _oldRootLayout.height) {
this._controllerHost.zoom = 1;
}
}
return {
lastsForAnimation,
willDeleteEls,
renderFinally
};
function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {
if (sameTree) {
oldViewChildren = thisViewChildren;
each$f(thisViewChildren, function(child, index) {
!child.isRemoved() && processNode(index, index);
});
} else {
new DataDiffer(oldViewChildren, thisViewChildren, getKey2, getKey2).add(processNode).update(processNode).remove(curry$1(processNode, null)).execute();
}
function getKey2(node) {
return node.getId();
}
function processNode(newIndex, oldIndex) {
var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;
var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;
var group = doRenderNode(thisNode, oldNode, parentGroup, depth);
group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1);
}
}
function clearStorage(storage2) {
var willDeleteEls2 = createStorage();
storage2 && each$f(storage2, function(store, storageName) {
var delEls = willDeleteEls2[storageName];
each$f(store, function(el) {
el && (delEls.push(el), inner$d(el).willDelete = true);
});
});
return willDeleteEls2;
}
function renderFinally() {
each$f(willDeleteEls, function(els) {
each$f(els, function(el) {
el.parent && el.parent.remove(el);
});
});
each$f(willInvisibleEls, function(el) {
el.invisible = true;
el.dirty();
});
}
};
TreemapView2.prototype._doAnimation = function(containerGroup, renderResult, seriesModel, reRoot) {
var durationOption = seriesModel.get("animationDurationUpdate");
var easingOption = seriesModel.get("animationEasing");
var duration = (isFunction(durationOption) ? 0 : durationOption) || 0;
var easing = (isFunction(easingOption) ? null : easingOption) || "cubicOut";
var animationWrap = createWrap();
each$f(renderResult.willDeleteEls, function(store, storageName) {
each$f(store, function(el, rawIndex) {
if (el.invisible) {
return;
}
var parent = el.parent;
var target;
var innerStore = inner$d(parent);
if (reRoot && reRoot.direction === "drillDown") {
target = parent === reRoot.rootNodeGroup ? {
shape: {
x: 0,
y: 0,
width: innerStore.nodeWidth,
height: innerStore.nodeHeight
},
style: {
opacity: 0
}
} : {
style: {
opacity: 0
}
};
} else {
var targetX = 0;
var targetY = 0;
if (!innerStore.willDelete) {
targetX = innerStore.nodeWidth / 2;
targetY = innerStore.nodeHeight / 2;
}
target = storageName === "nodeGroup" ? {
x: targetX,
y: targetY,
style: {
opacity: 0
}
} : {
shape: {
x: targetX,
y: targetY,
width: 0,
height: 0
},
style: {
opacity: 0
}
};
}
target && animationWrap.add(el, target, duration, 0, easing);
});
});
each$f(this._storage, function(store, storageName) {
each$f(store, function(el, rawIndex) {
var last = renderResult.lastsForAnimation[storageName][rawIndex];
var target = {};
if (!last) {
return;
}
if (el instanceof Group$3) {
if (last.oldX != null) {
target.x = el.x;
target.y = el.y;
el.x = last.oldX;
el.y = last.oldY;
}
} else {
if (last.oldShape) {
target.shape = extend({}, el.shape);
el.setShape(last.oldShape);
}
if (last.fadein) {
el.setStyle("opacity", 0);
target.style = {
opacity: 1
};
} else if (el.style.opacity !== 1) {
target.style = {
opacity: 1
};
}
}
animationWrap.add(el, target, duration, 0, easing);
});
}, this);
this._state = "animating";
animationWrap.finished(bind$1(function() {
this._state = "ready";
renderResult.renderFinally();
}, this)).start();
};
TreemapView2.prototype._resetController = function(api) {
var controller = this._controller;
var controllerHost = this._controllerHost;
if (!controllerHost) {
this._controllerHost = {
target: this.group
};
controllerHost = this._controllerHost;
}
if (!controller) {
controller = this._controller = new RoamController(api.getZr());
controller.enable(this.seriesModel.get("roam"));
controllerHost.zoomLimit = this.seriesModel.get("scaleLimit");
controllerHost.zoom = this.seriesModel.get("zoom");
controller.on("pan", bind$1(this._onPan, this));
controller.on("zoom", bind$1(this._onZoom, this));
}
var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());
controller.setPointerChecker(function(e, x, y) {
return rect.contain(x, y);
});
};
TreemapView2.prototype._clearController = function() {
var controller = this._controller;
this._controllerHost = null;
if (controller) {
controller.dispose();
controller = null;
}
};
TreemapView2.prototype._onPan = function(e) {
if (this._state !== "animating" && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) {
var root = this.seriesModel.getData().tree.root;
if (!root) {
return;
}
var rootLayout = root.getLayout();
if (!rootLayout) {
return;
}
this.api.dispatchAction({
type: "treemapMove",
from: this.uid,
seriesId: this.seriesModel.id,
rootRect: {
x: rootLayout.x + e.dx,
y: rootLayout.y + e.dy,
width: rootLayout.width,
height: rootLayout.height
}
});
}
};
TreemapView2.prototype._onZoom = function(e) {
var mouseX = e.originX;
var mouseY = e.originY;
var zoomDelta = e.scale;
if (this._state !== "animating") {
var root = this.seriesModel.getData().tree.root;
if (!root) {
return;
}
var rootLayout = root.getLayout();
if (!rootLayout) {
return;
}
var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height);
var zoomLimit = null;
var _controllerHost = this._controllerHost;
zoomLimit = _controllerHost.zoomLimit;
var newZoom = _controllerHost.zoom = _controllerHost.zoom || 1;
newZoom *= zoomDelta;
if (zoomLimit) {
var zoomMin = zoomLimit.min || 0;
var zoomMax = zoomLimit.max || Infinity;
newZoom = Math.max(Math.min(zoomMax, newZoom), zoomMin);
}
var zoomScale = newZoom / _controllerHost.zoom;
_controllerHost.zoom = newZoom;
var layoutInfo = this.seriesModel.layoutInfo;
mouseX -= layoutInfo.x;
mouseY -= layoutInfo.y;
var m = create$1();
translate(m, m, [-mouseX, -mouseY]);
scale$1(m, m, [zoomScale, zoomScale]);
translate(m, m, [mouseX, mouseY]);
rect.applyTransform(m);
this.api.dispatchAction({
type: "treemapRender",
from: this.uid,
seriesId: this.seriesModel.id,
rootRect: {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
}
});
}
};
TreemapView2.prototype._initEvents = function(containerGroup) {
var _this = this;
containerGroup.on("click", function(e) {
if (_this._state !== "ready") {
return;
}
var nodeClick = _this.seriesModel.get("nodeClick", true);
if (!nodeClick) {
return;
}
var targetInfo = _this.findTarget(e.offsetX, e.offsetY);
if (!targetInfo) {
return;
}
var node = targetInfo.node;
if (node.getLayout().isLeafRoot) {
_this._rootToNode(targetInfo);
} else {
if (nodeClick === "zoomToNode") {
_this._zoomToNode(targetInfo);
} else if (nodeClick === "link") {
var itemModel = node.hostTree.data.getItemModel(node.dataIndex);
var link = itemModel.get("link", true);
var linkTarget = itemModel.get("target", true) || "blank";
link && windowOpen(link, linkTarget);
}
}
}, this);
};
TreemapView2.prototype._renderBreadcrumb = function(seriesModel, api, targetInfo) {
var _this = this;
if (!targetInfo) {
targetInfo = seriesModel.get("leafDepth", true) != null ? {
node: seriesModel.getViewRoot()
} : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);
if (!targetInfo) {
targetInfo = {
node: seriesModel.getData().tree.root
};
}
}
(this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function(node) {
if (_this._state !== "animating") {
aboveViewRoot(seriesModel.getViewRoot(), node) ? _this._rootToNode({
node
}) : _this._zoomToNode({
node
});
}
});
};
TreemapView2.prototype.remove = function() {
this._clearController();
this._containerGroup && this._containerGroup.removeAll();
this._storage = createStorage();
this._state = "ready";
this._breadcrumb && this._breadcrumb.remove();
};
TreemapView2.prototype.dispose = function() {
this._clearController();
};
TreemapView2.prototype._zoomToNode = function(targetInfo) {
this.api.dispatchAction({
type: "treemapZoomToNode",
from: this.uid,
seriesId: this.seriesModel.id,
targetNode: targetInfo.node
});
};
TreemapView2.prototype._rootToNode = function(targetInfo) {
this.api.dispatchAction({
type: "treemapRootToNode",
from: this.uid,
seriesId: this.seriesModel.id,
targetNode: targetInfo.node
});
};
TreemapView2.prototype.findTarget = function(x, y) {
var targetInfo;
var viewRoot = this.seriesModel.getViewRoot();
viewRoot.eachNode({
attr: "viewChildren",
order: "preorder"
}, function(node) {
var bgEl = this._storage.background[node.getRawIndex()];
if (bgEl) {
var point = bgEl.transformCoordToLocal(x, y);
var shape = bgEl.shape;
if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {
targetInfo = {
node,
offsetX: point[0],
offsetY: point[1]
};
} else {
return false;
}
}
}, this);
return targetInfo;
};
TreemapView2.type = "treemap";
return TreemapView2;
})(ChartView)
);
function createStorage() {
return {
nodeGroup: [],
background: [],
content: []
};
}
function renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) {
if (!thisNode) {
return;
}
var thisLayout = thisNode.getLayout();
var data = seriesModel.getData();
var nodeModel = thisNode.getModel();
data.setItemGraphicEl(thisNode.dataIndex, null);
if (!thisLayout || !thisLayout.isInView) {
return;
}
var thisWidth = thisLayout.width;
var thisHeight = thisLayout.height;
var borderWidth = thisLayout.borderWidth;
var thisInvisible = thisLayout.invisible;
var thisRawIndex = thisNode.getRawIndex();
var oldRawIndex = oldNode && oldNode.getRawIndex();
var thisViewChildren = thisNode.viewChildren;
var upperHeight = thisLayout.upperHeight;
var isParent = thisViewChildren && thisViewChildren.length;
var itemStyleNormalModel = nodeModel.getModel("itemStyle");
var itemStyleEmphasisModel = nodeModel.getModel(["emphasis", "itemStyle"]);
var itemStyleBlurModel = nodeModel.getModel(["blur", "itemStyle"]);
var itemStyleSelectModel = nodeModel.getModel(["select", "itemStyle"]);
var borderRadius = itemStyleNormalModel.get("borderRadius") || 0;
var group = giveGraphic("nodeGroup", Group$2);
if (!group) {
return;
}
parentGroup.add(group);
group.x = thisLayout.x || 0;
group.y = thisLayout.y || 0;
group.markRedraw();
inner$d(group).nodeWidth = thisWidth;
inner$d(group).nodeHeight = thisHeight;
if (thisLayout.isAboveViewRoot) {
return group;
}
var bg = giveGraphic("background", Rect$1, depth, Z2_BG);
bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight);
var emphasisModel = nodeModel.getModel("emphasis");
var focus = emphasisModel.get("focus");
var blurScope = emphasisModel.get("blurScope");
var isDisabled = emphasisModel.get("disabled");
var focusOrIndices = focus === "ancestor" ? thisNode.getAncestorsIndices() : focus === "descendant" ? thisNode.getDescendantIndices() : focus;
if (isParent) {
if (isHighDownDispatcher(group)) {
setAsHighDownDispatcher(group, false);
}
if (bg) {
setAsHighDownDispatcher(bg, !isDisabled);
data.setItemGraphicEl(thisNode.dataIndex, bg);
enableHoverFocus(bg, focusOrIndices, blurScope);
}
} else {
var content = giveGraphic("content", Rect$1, depth, Z2_CONTENT);
content && renderContent(group, content);
bg.disableMorphing = true;
if (bg && isHighDownDispatcher(bg)) {
setAsHighDownDispatcher(bg, false);
}
setAsHighDownDispatcher(group, !isDisabled);
data.setItemGraphicEl(thisNode.dataIndex, group);
var cursorStyle = nodeModel.getShallow("cursor");
cursorStyle && content.attr("cursor", cursorStyle);
enableHoverFocus(group, focusOrIndices, blurScope);
}
return group;
function renderBackground(group2, bg2, useUpperLabel) {
var ecData = getECData(bg2);
ecData.dataIndex = thisNode.dataIndex;
ecData.seriesIndex = seriesModel.seriesIndex;
bg2.setShape({
x: 0,
y: 0,
width: thisWidth,
height: thisHeight,
r: borderRadius
});
if (thisInvisible) {
processInvisible(bg2);
} else {
bg2.invisible = false;
var style = thisNode.getVisual("style");
var visualBorderColor = style.stroke;
var normalStyle = getItemStyleNormal(itemStyleNormalModel);
normalStyle.fill = visualBorderColor;
var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);
emphasisStyle.fill = itemStyleEmphasisModel.get("borderColor");
var blurStyle = getStateItemStyle(itemStyleBlurModel);
blurStyle.fill = itemStyleBlurModel.get("borderColor");
var selectStyle = getStateItemStyle(itemStyleSelectModel);
selectStyle.fill = itemStyleSelectModel.get("borderColor");
if (useUpperLabel) {
var upperLabelWidth = thisWidth - 2 * borderWidth;
prepareText(
// PENDING: convert ZRColor to ColorString for text.
bg2,
visualBorderColor,
style.opacity,
{
x: borderWidth,
y: 0,
width: upperLabelWidth,
height: upperHeight
}
);
} else {
bg2.removeTextContent();
}
bg2.setStyle(normalStyle);
bg2.ensureState("emphasis").style = emphasisStyle;
bg2.ensureState("blur").style = blurStyle;
bg2.ensureState("select").style = selectStyle;
setDefaultStateProxy(bg2);
}
group2.add(bg2);
}
function renderContent(group2, content2) {
var ecData = getECData(content2);
ecData.dataIndex = thisNode.dataIndex;
ecData.seriesIndex = seriesModel.seriesIndex;
var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);
var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);
content2.culling = true;
content2.setShape({
x: borderWidth,
y: borderWidth,
width: contentWidth,
height: contentHeight,
r: borderRadius
});
if (thisInvisible) {
processInvisible(content2);
} else {
content2.invisible = false;
var nodeStyle = thisNode.getVisual("style");
var visualColor = nodeStyle.fill;
var normalStyle = getItemStyleNormal(itemStyleNormalModel);
normalStyle.fill = visualColor;
normalStyle.decal = nodeStyle.decal;
var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);
var blurStyle = getStateItemStyle(itemStyleBlurModel);
var selectStyle = getStateItemStyle(itemStyleSelectModel);
prepareText(content2, visualColor, nodeStyle.opacity, null);
content2.setStyle(normalStyle);
content2.ensureState("emphasis").style = emphasisStyle;
content2.ensureState("blur").style = blurStyle;
content2.ensureState("select").style = selectStyle;
setDefaultStateProxy(content2);
}
group2.add(content2);
}
function processInvisible(element) {
!element.invisible && willInvisibleEls.push(element);
}
function prepareText(rectEl, visualColor, visualOpacity, upperLabelRect) {
var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);
var defaultText = convertOptionIdName(nodeModel.get("name"), null);
var isShow = normalLabelModel.getShallow("show");
setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), {
defaultText: isShow ? defaultText : null,
inheritColor: visualColor,
defaultOpacity: visualOpacity,
labelFetcher: seriesModel,
labelDataIndex: thisNode.dataIndex
});
var textEl = rectEl.getTextContent();
if (!textEl) {
return;
}
var textStyle = textEl.style;
var textPadding = normalizeCssArray$1(textStyle.padding || 0);
if (upperLabelRect) {
rectEl.setTextConfig({
layoutRect: upperLabelRect
});
textEl.disableLabelLayout = true;
}
textEl.beforeUpdate = function() {
var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0);
var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0);
if (textStyle.width !== width || textStyle.height !== height) {
textEl.setStyle({
width,
height
});
}
};
textStyle.truncateMinChar = 2;
textStyle.lineOverflow = "truncate";
addDrillDownIcon(textStyle, upperLabelRect, thisLayout);
var textEmphasisState = textEl.getState("emphasis");
addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout);
}
function addDrillDownIcon(style, upperLabelRect, thisLayout2) {
var text = style ? style.text : null;
if (!upperLabelRect && thisLayout2.isLeafRoot && text != null) {
var iconChar = seriesModel.get("drillDownIcon", true);
style.text = iconChar ? iconChar + " " + text : text;
}
}
function giveGraphic(storageName, Ctor, depth2, z) {
var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];
var lasts = lastsForAnimation[storageName];
if (element) {
oldStorage[storageName][oldRawIndex] = null;
prepareAnimationWhenHasOld(lasts, element);
} else if (!thisInvisible) {
element = new Ctor();
if (element instanceof Displayable) {
element.z2 = calculateZ2(depth2, z);
}
prepareAnimationWhenNoOld(lasts, element);
}
return thisStorage[storageName][thisRawIndex] = element;
}
function prepareAnimationWhenHasOld(lasts, element) {
var lastCfg = lasts[thisRawIndex] = {};
if (element instanceof Group$2) {
lastCfg.oldX = element.x;
lastCfg.oldY = element.y;
} else {
lastCfg.oldShape = extend({}, element.shape);
}
}
function prepareAnimationWhenNoOld(lasts, element) {
var lastCfg = lasts[thisRawIndex] = {};
var parentNode = thisNode.parentNode;
var isGroup = element instanceof Group$3;
if (parentNode && (!reRoot || reRoot.direction === "drillDown")) {
var parentOldX = 0;
var parentOldY = 0;
var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];
if (!reRoot && parentOldBg && parentOldBg.oldShape) {
parentOldX = parentOldBg.oldShape.width;
parentOldY = parentOldBg.oldShape.height;
}
if (isGroup) {
lastCfg.oldX = 0;
lastCfg.oldY = parentOldY;
} else {
lastCfg.oldShape = {
x: parentOldX,
y: parentOldY,
width: 0,
height: 0
};
}
}
lastCfg.fadein = !isGroup;
}
}
function calculateZ2(depth, z2InLevel) {
return depth * Z2_BASE + z2InLevel;
}
var each$c = each$f;
var isObject = isObject$3;
var CATEGORY_DEFAULT_VISUAL_INDEX = -1;
var VisualMapping = (
/** @class */
(function() {
function VisualMapping2(option) {
var mappingMethod = option.mappingMethod;
var visualType = option.type;
var thisOption = this.option = clone$1(option);
this.type = visualType;
this.mappingMethod = mappingMethod;
this._normalizeData = normalizers[mappingMethod];
var visualHandler = VisualMapping2.visualHandlers[visualType];
this.applyVisual = visualHandler.applyVisual;
this.getColorMapper = visualHandler.getColorMapper;
this._normalizedToVisual = visualHandler._normalizedToVisual[mappingMethod];
if (mappingMethod === "piecewise") {
normalizeVisualRange(thisOption);
preprocessForPiecewise(thisOption);
} else if (mappingMethod === "category") {
thisOption.categories ? preprocessForSpecifiedCategory(thisOption) : normalizeVisualRange(thisOption, true);
} else {
assert(mappingMethod !== "linear" || thisOption.dataExtent);
normalizeVisualRange(thisOption);
}
}
VisualMapping2.prototype.mapValueToVisual = function(value) {
var normalized = this._normalizeData(value);
return this._normalizedToVisual(normalized, value);
};
VisualMapping2.prototype.getNormalizer = function() {
return bind$1(this._normalizeData, this);
};
VisualMapping2.listVisualTypes = function() {
return keys(VisualMapping2.visualHandlers);
};
VisualMapping2.isValidType = function(visualType) {
return VisualMapping2.visualHandlers.hasOwnProperty(visualType);
};
VisualMapping2.eachVisual = function(visual, callback, context) {
if (isObject$3(visual)) {
each$f(visual, callback, context);
} else {
callback.call(context, visual);
}
};
VisualMapping2.mapVisual = function(visual, callback, context) {
var isPrimary;
var newVisual = isArray$1(visual) ? [] : isObject$3(visual) ? {} : (isPrimary = true, null);
VisualMapping2.eachVisual(visual, function(v, key) {
var newVal = callback.call(context, v, key);
isPrimary ? newVisual = newVal : newVisual[key] = newVal;
});
return newVisual;
};
VisualMapping2.retrieveVisuals = function(obj) {
var ret = {};
var hasVisual;
obj && each$c(VisualMapping2.visualHandlers, function(h, visualType) {
if (obj.hasOwnProperty(visualType)) {
ret[visualType] = obj[visualType];
hasVisual = true;
}
});
return hasVisual ? ret : null;
};
VisualMapping2.prepareVisualTypes = function(visualTypes) {
if (isArray$1(visualTypes)) {
visualTypes = visualTypes.slice();
} else if (isObject(visualTypes)) {
var types_1 = [];
each$c(visualTypes, function(item, type) {
types_1.push(type);
});
visualTypes = types_1;
} else {
return [];
}
visualTypes.sort(function(type1, type2) {
return type2 === "color" && type1 !== "color" && type1.indexOf("color") === 0 ? 1 : -1;
});
return visualTypes;
};
VisualMapping2.dependsOn = function(visualType1, visualType2) {
return visualType2 === "color" ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2;
};
VisualMapping2.findPieceIndex = function(value, pieceList, findClosestWhenOutside) {
var possibleI;
var abs = Infinity;
for (var i = 0, len2 = pieceList.length; i < len2; i++) {
var pieceValue = pieceList[i].value;
if (pieceValue != null) {
if (pieceValue === value || isString(pieceValue) && pieceValue === value + "") {
return i;
}
findClosestWhenOutside && updatePossible(pieceValue, i);
}
}
for (var i = 0, len2 = pieceList.length; i < len2; i++) {
var piece = pieceList[i];
var interval = piece.interval;
var close_1 = piece.close;
if (interval) {
if (interval[0] === -Infinity) {
if (littleThan(close_1[1], value, interval[1])) {
return i;
}
} else if (interval[1] === Infinity) {
if (littleThan(close_1[0], interval[0], value)) {
return i;
}
} else if (littleThan(close_1[0], interval[0], value) && littleThan(close_1[1], value, interval[1])) {
return i;
}
findClosestWhenOutside && updatePossible(interval[0], i);
findClosestWhenOutside && updatePossible(interval[1], i);
}
}
if (findClosestWhenOutside) {
return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI;
}
function updatePossible(val, index) {
var newAbs = Math.abs(val - value);
if (newAbs < abs) {
abs = newAbs;
possibleI = index;
}
}
};
VisualMapping2.visualHandlers = {
color: {
applyVisual: makeApplyVisual("color"),
getColorMapper: function() {
var thisOption = this.option;
return bind$1(thisOption.mappingMethod === "category" ? function(value, isNormalized) {
!isNormalized && (value = this._normalizeData(value));
return doMapCategory.call(this, value);
} : function(value, isNormalized, out) {
var returnRGBArray = !!out;
!isNormalized && (value = this._normalizeData(value));
out = fastLerp(value, thisOption.parsedVisual, out);
return returnRGBArray ? out : stringify(out, "rgba");
}, this);
},
_normalizedToVisual: {
linear: function(normalized) {
return stringify(fastLerp(normalized, this.option.parsedVisual), "rgba");
},
category: doMapCategory,
piecewise: function(normalized, value) {
var result = getSpecifiedVisual.call(this, value);
if (result == null) {
result = stringify(fastLerp(normalized, this.option.parsedVisual), "rgba");
}
return result;
},
fixed: doMapFixed
}
},
colorHue: makePartialColorVisualHandler(function(color, value) {
return modifyHSL(color, value);
}),
colorSaturation: makePartialColorVisualHandler(function(color, value) {
return modifyHSL(color, null, value);
}),
colorLightness: makePartialColorVisualHandler(function(color, value) {
return modifyHSL(color, null, null, value);
}),
colorAlpha: makePartialColorVisualHandler(function(color, value) {
return modifyAlpha(color, value);
}),
decal: {
applyVisual: makeApplyVisual("decal"),
_normalizedToVisual: {
linear: null,
category: doMapCategory,
piecewise: null,
fixed: null
}
},
opacity: {
applyVisual: makeApplyVisual("opacity"),
_normalizedToVisual: createNormalizedToNumericVisual([0, 1])
},
liftZ: {
applyVisual: makeApplyVisual("liftZ"),
_normalizedToVisual: {
linear: doMapFixed,
category: doMapFixed,
piecewise: doMapFixed,
fixed: doMapFixed
}
},
symbol: {
applyVisual: function(value, getter, setter) {
var symbolCfg = this.mapValueToVisual(value);
setter("symbol", symbolCfg);
},
_normalizedToVisual: {
linear: doMapToArray,
category: doMapCategory,
piecewise: function(normalized, value) {
var result = getSpecifiedVisual.call(this, value);
if (result == null) {
result = doMapToArray.call(this, normalized);
}
return result;
},
fixed: doMapFixed
}
},
symbolSize: {
applyVisual: makeApplyVisual("symbolSize"),
_normalizedToVisual: createNormalizedToNumericVisual([0, 1])
}
};
return VisualMapping2;
})()
);
function preprocessForPiecewise(thisOption) {
var pieceList = thisOption.pieceList;
thisOption.hasSpecialVisual = false;
each$f(pieceList, function(piece, index) {
piece.originIndex = index;
if (piece.visual != null) {
thisOption.hasSpecialVisual = true;
}
});
}
function preprocessForSpecifiedCategory(thisOption) {
var categories = thisOption.categories;
var categoryMap = thisOption.categoryMap = {};
var visual = thisOption.visual;
each$c(categories, function(cate, index) {
categoryMap[cate] = index;
});
if (!isArray$1(visual)) {
var visualArr_1 = [];
if (isObject$3(visual)) {
each$c(visual, function(v, cate) {
var index = categoryMap[cate];
visualArr_1[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;
});
} else {
visualArr_1[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;
}
visual = setVisualToOption(thisOption, visualArr_1);
}
for (var i = categories.length - 1; i >= 0; i--) {
if (visual[i] == null) {
delete categoryMap[categories[i]];
categories.pop();
}
}
}
function normalizeVisualRange(thisOption, isCategory2) {
var visual = thisOption.visual;
var visualArr = [];
if (isObject$3(visual)) {
each$c(visual, function(v) {
visualArr.push(v);
});
} else if (visual != null) {
visualArr.push(visual);
}
var doNotNeedPair = {
color: 1,
symbol: 1
};
if (!isCategory2 && visualArr.length === 1 && !doNotNeedPair.hasOwnProperty(thisOption.type)) {
visualArr[1] = visualArr[0];
}
setVisualToOption(thisOption, visualArr);
}
function makePartialColorVisualHandler(applyValue) {
return {
applyVisual: function(value, getter, setter) {
var colorChannel = this.mapValueToVisual(value);
setter("color", applyValue(getter("color"), colorChannel));
},
_normalizedToVisual: createNormalizedToNumericVisual([0, 1])
};
}
function doMapToArray(normalized) {
var visual = this.option.visual;
return visual[Math.round(linearMap$2(normalized, [0, 1], [0, visual.length - 1], true))] || {};
}
function makeApplyVisual(visualType) {
return function(value, getter, setter) {
setter(visualType, this.mapValueToVisual(value));
};
}
function doMapCategory(normalized) {
var visual = this.option.visual;
return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized];
}
function doMapFixed() {
return this.option.visual[0];
}
function createNormalizedToNumericVisual(sourceExtent) {
return {
linear: function(normalized) {
return linearMap$2(normalized, sourceExtent, this.option.visual, true);
},
category: doMapCategory,
piecewise: function(normalized, value) {
var result = getSpecifiedVisual.call(this, value);
if (result == null) {
result = linearMap$2(normalized, sourceExtent, this.option.visual, true);
}
return result;
},
fixed: doMapFixed
};
}
function getSpecifiedVisual(value) {
var thisOption = this.option;
var pieceList = thisOption.pieceList;
if (thisOption.hasSpecialVisual) {
var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);
var piece = pieceList[pieceIndex];
if (piece && piece.visual) {
return piece.visual[this.type];
}
}
}
function setVisualToOption(thisOption, visualArr) {
thisOption.visual = visualArr;
if (thisOption.type === "color") {
thisOption.parsedVisual = map$1(visualArr, function(item) {
var color = parse(item);
return color || [0, 0, 0, 1];
});
}
return visualArr;
}
var normalizers = {
linear: function(value) {
return linearMap$2(value, this.option.dataExtent, [0, 1], true);
},
piecewise: function(value) {
var pieceList = this.option.pieceList;
var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);
if (pieceIndex != null) {
return linearMap$2(pieceIndex, [0, pieceList.length - 1], [0, 1], true);
}
},
category: function(value) {
var index = this.option.categories ? this.option.categoryMap[value] : value;
return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;
},
fixed: noop
};
function littleThan(close, a, b) {
return close ? a <= b : a < b;
}
var ITEM_STYLE_NORMAL = "itemStyle";
var inner$c = makeInner();
const treemapVisual = {
seriesType: "treemap",
reset: function(seriesModel) {
var tree = seriesModel.getData().tree;
var root = tree.root;
if (root.isRemoved()) {
return;
}
travelTree(
root,
// Visual should calculate from tree root but not view root.
{},
seriesModel.getViewRoot().getAncestors(),
seriesModel
);
}
};
function travelTree(node, designatedVisual, viewRootAncestors, seriesModel) {
var nodeModel = node.getModel();
var nodeLayout = node.getLayout();
var data = node.hostTree.data;
if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {
return;
}
var nodeItemStyleModel = nodeModel.getModel(ITEM_STYLE_NORMAL);
var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel);
var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, "style");
var borderColor = nodeItemStyleModel.get("borderColor");
var borderColorSaturation = nodeItemStyleModel.get("borderColorSaturation");
var thisNodeColor;
if (borderColorSaturation != null) {
thisNodeColor = calculateColor(visuals);
borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);
}
existsStyle.stroke = borderColor;
var viewChildren = node.viewChildren;
if (!viewChildren || !viewChildren.length) {
thisNodeColor = calculateColor(visuals);
existsStyle.fill = thisNodeColor;
} else {
var mapping_1 = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren);
each$f(viewChildren, function(child, index) {
if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) {
var childVisual = mapVisual$1(nodeModel, visuals, child, index, mapping_1, seriesModel);
travelTree(child, childVisual, viewRootAncestors, seriesModel);
}
});
}
}
function buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) {
var visuals = extend({}, designatedVisual);
var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle;
each$f(["color", "colorAlpha", "colorSaturation"], function(visualName) {
designatedVisualItemStyle[visualName] = designatedVisual[visualName];
var val = nodeItemStyleModel.get(visualName);
designatedVisualItemStyle[visualName] = null;
val != null && (visuals[visualName] = val);
});
return visuals;
}
function calculateColor(visuals) {
var color = getValueVisualDefine(visuals, "color");
if (color) {
var colorAlpha = getValueVisualDefine(visuals, "colorAlpha");
var colorSaturation = getValueVisualDefine(visuals, "colorSaturation");
if (colorSaturation) {
color = modifyHSL(color, null, null, colorSaturation);
}
if (colorAlpha) {
color = modifyAlpha(color, colorAlpha);
}
return color;
}
}
function calculateBorderColor(borderColorSaturation, thisNodeColor) {
return thisNodeColor != null ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null;
}
function getValueVisualDefine(visuals, name) {
var value = visuals[name];
if (value != null && value !== "none") {
return value;
}
}
function buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) {
if (!viewChildren || !viewChildren.length) {
return;
}
var rangeVisual = getRangeVisual(nodeModel, "color") || visuals.color != null && visuals.color !== "none" && (getRangeVisual(nodeModel, "colorAlpha") || getRangeVisual(nodeModel, "colorSaturation"));
if (!rangeVisual) {
return;
}
var visualMin = nodeModel.get("visualMin");
var visualMax = nodeModel.get("visualMax");
var dataExtent = nodeLayout.dataExtent.slice();
visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin);
visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax);
var colorMappingBy = nodeModel.get("colorMappingBy");
var opt = {
type: rangeVisual.name,
dataExtent,
visual: rangeVisual.range
};
if (opt.type === "color" && (colorMappingBy === "index" || colorMappingBy === "id")) {
opt.mappingMethod = "category";
opt.loop = true;
} else {
opt.mappingMethod = "linear";
}
var mapping = new VisualMapping(opt);
inner$c(mapping).drColorMappingBy = colorMappingBy;
return mapping;
}
function getRangeVisual(nodeModel, name) {
var range = nodeModel.get(name);
return isArray$1(range) && range.length ? {
name,
range
} : null;
}
function mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) {
var childVisuals = extend({}, visuals);
if (mapping) {
var mappingType = mapping.type;
var colorMappingBy = mappingType === "color" && inner$c(mapping).drColorMappingBy;
var value = colorMappingBy === "index" ? index : colorMappingBy === "id" ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get("visualDimension"));
childVisuals[mappingType] = mapping.mapValueToVisual(value);
}
return childVisuals;
}
var mathMax$3 = Math.max;
var mathMin$3 = Math.min;
var retrieveValue = retrieve;
var each$b = each$f;
var PATH_BORDER_WIDTH = ["itemStyle", "borderWidth"];
var PATH_GAP_WIDTH = ["itemStyle", "gapWidth"];
var PATH_UPPER_LABEL_SHOW = ["upperLabel", "show"];
var PATH_UPPER_LABEL_HEIGHT = ["upperLabel", "height"];
const treemapLayout = {
seriesType: "treemap",
reset: function(seriesModel, ecModel, api, payload) {
var ecWidth = api.getWidth();
var ecHeight = api.getHeight();
var seriesOption = seriesModel.option;
var layoutInfo = getLayoutRect(seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
var size = seriesOption.size || [];
var containerWidth = parsePercent(retrieveValue(layoutInfo.width, size[0]), ecWidth);
var containerHeight = parsePercent(retrieveValue(layoutInfo.height, size[1]), ecHeight);
var payloadType = payload && payload.type;
var types = ["treemapZoomToNode", "treemapRootToNode"];
var targetInfo = retrieveTargetInfo(payload, types, seriesModel);
var rootRect = payloadType === "treemapRender" || payloadType === "treemapMove" ? payload.rootRect : null;
var viewRoot = seriesModel.getViewRoot();
var viewAbovePath = getPathToRoot(viewRoot);
if (payloadType !== "treemapMove") {
var rootSize = payloadType === "treemapZoomToNode" ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight];
var sort_1 = seriesOption.sort;
if (sort_1 && sort_1 !== "asc" && sort_1 !== "desc") {
sort_1 = "desc";
}
var options = {
squareRatio: seriesOption.squareRatio,
sort: sort_1,
leafDepth: seriesOption.leafDepth
};
viewRoot.hostTree.clearLayouts();
var viewRootLayout_1 = {
x: 0,
y: 0,
width: rootSize[0],
height: rootSize[1],
area: rootSize[0] * rootSize[1]
};
viewRoot.setLayout(viewRootLayout_1);
squarify(viewRoot, options, false, 0);
viewRootLayout_1 = viewRoot.getLayout();
each$b(viewAbovePath, function(node, index) {
var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();
node.setLayout(extend({
dataExtent: [childValue, childValue],
borderWidth: 0,
upperHeight: 0
}, viewRootLayout_1));
});
}
var treeRoot = seriesModel.getData().tree.root;
treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true);
seriesModel.setLayoutInfo(layoutInfo);
prunning(
treeRoot,
// Transform to base element coordinate system.
new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight),
viewAbovePath,
viewRoot,
0
);
}
};
function squarify(node, options, hideChildren, depth) {
var width;
var height;
if (node.isRemoved()) {
return;
}
var thisLayout = node.getLayout();
width = thisLayout.width;
height = thisLayout.height;
var nodeModel = node.getModel();
var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);
var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;
var upperLabelHeight = getUpperLabelHeight(nodeModel);
var upperHeight = Math.max(borderWidth, upperLabelHeight);
var layoutOffset = borderWidth - halfGapWidth;
var layoutOffsetUpper = upperHeight - halfGapWidth;
node.setLayout({
borderWidth,
upperHeight,
upperLabelHeight
}, true);
width = mathMax$3(width - 2 * layoutOffset, 0);
height = mathMax$3(height - layoutOffset - layoutOffsetUpper, 0);
var totalArea = width * height;
var viewChildren = initChildren$1(node, nodeModel, totalArea, options, hideChildren, depth);
if (!viewChildren.length) {
return;
}
var rect = {
x: layoutOffset,
y: layoutOffsetUpper,
width,
height
};
var rowFixedLength = mathMin$3(width, height);
var best = Infinity;
var row = [];
row.area = 0;
for (var i = 0, len2 = viewChildren.length; i < len2; ) {
var child = viewChildren[i];
row.push(child);
row.area += child.getLayout().area;
var score = worst(row, rowFixedLength, options.squareRatio);
if (score <= best) {
i++;
best = score;
} else {
row.area -= row.pop().getLayout().area;
position(row, rowFixedLength, rect, halfGapWidth, false);
rowFixedLength = mathMin$3(rect.width, rect.height);
row.length = row.area = 0;
best = Infinity;
}
}
if (row.length) {
position(row, rowFixedLength, rect, halfGapWidth, true);
}
if (!hideChildren) {
var childrenVisibleMin = nodeModel.get("childrenVisibleMin");
if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {
hideChildren = true;
}
}
for (var i = 0, len2 = viewChildren.length; i < len2; i++) {
squarify(viewChildren[i], options, hideChildren, depth + 1);
}
}
function initChildren$1(node, nodeModel, totalArea, options, hideChildren, depth) {
var viewChildren = node.children || [];
var orderBy = options.sort;
orderBy !== "asc" && orderBy !== "desc" && (orderBy = null);
var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth;
if (hideChildren && !overLeafDepth) {
return node.viewChildren = [];
}
viewChildren = filter(viewChildren, function(child) {
return !child.isRemoved();
});
sort$1(viewChildren, orderBy);
var info = statistic(nodeModel, viewChildren, orderBy);
if (info.sum === 0) {
return node.viewChildren = [];
}
info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);
if (info.sum === 0) {
return node.viewChildren = [];
}
for (var i = 0, len2 = viewChildren.length; i < len2; i++) {
var area = viewChildren[i].getValue() / info.sum * totalArea;
viewChildren[i].setLayout({
area
});
}
if (overLeafDepth) {
viewChildren.length && node.setLayout({
isLeafRoot: true
}, true);
viewChildren.length = 0;
}
node.viewChildren = viewChildren;
node.setLayout({
dataExtent: info.dataExtent
}, true);
return viewChildren;
}
function filterByThreshold(nodeModel, totalArea, sum2, orderBy, orderedChildren) {
if (!orderBy) {
return sum2;
}
var visibleMin = nodeModel.get("visibleMin");
var len2 = orderedChildren.length;
var deletePoint = len2;
for (var i = len2 - 1; i >= 0; i--) {
var value = orderedChildren[orderBy === "asc" ? len2 - i - 1 : i].getValue();
if (value / sum2 * totalArea < visibleMin) {
deletePoint = i;
sum2 -= value;
}
}
orderBy === "asc" ? orderedChildren.splice(0, len2 - deletePoint) : orderedChildren.splice(deletePoint, len2 - deletePoint);
return sum2;
}
function sort$1(viewChildren, orderBy) {
if (orderBy) {
viewChildren.sort(function(a, b) {
var diff = orderBy === "asc" ? a.getValue() - b.getValue() : b.getValue() - a.getValue();
return diff === 0 ? orderBy === "asc" ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff;
});
}
return viewChildren;
}
function statistic(nodeModel, children, orderBy) {
var sum2 = 0;
for (var i = 0, len2 = children.length; i < len2; i++) {
sum2 += children[i].getValue();
}
var dimension = nodeModel.get("visualDimension");
var dataExtent;
if (!children || !children.length) {
dataExtent = [NaN, NaN];
} else if (dimension === "value" && orderBy) {
dataExtent = [children[children.length - 1].getValue(), children[0].getValue()];
orderBy === "asc" && dataExtent.reverse();
} else {
dataExtent = [Infinity, -Infinity];
each$b(children, function(child) {
var value = child.getValue(dimension);
value < dataExtent[0] && (dataExtent[0] = value);
value > dataExtent[1] && (dataExtent[1] = value);
});
}
return {
sum: sum2,
dataExtent
};
}
function worst(row, rowFixedLength, ratio) {
var areaMax = 0;
var areaMin = Infinity;
for (var i = 0, area = void 0, len2 = row.length; i < len2; i++) {
area = row[i].getLayout().area;
if (area) {
area < areaMin && (areaMin = area);
area > areaMax && (areaMax = area);
}
}
var squareArea = row.area * row.area;
var f = rowFixedLength * rowFixedLength * ratio;
return squareArea ? mathMax$3(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity;
}
function position(row, rowFixedLength, rect, halfGapWidth, flush) {
var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;
var idx1WhenH = 1 - idx0WhenH;
var xy = ["x", "y"];
var wh = ["width", "height"];
var last = rect[xy[idx0WhenH]];
var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0;
if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {
rowOtherLength = rect[wh[idx1WhenH]];
}
for (var i = 0, rowLen = row.length; i < rowLen; i++) {
var node = row[i];
var nodeLayout = {};
var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0;
var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$3(rowOtherLength - 2 * halfGapWidth, 0);
var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;
var modWH = i === rowLen - 1 || remain < step ? remain : step;
var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$3(modWH - 2 * halfGapWidth, 0);
nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$3(halfGapWidth, wh1 / 2);
nodeLayout[xy[idx0WhenH]] = last + mathMin$3(halfGapWidth, wh0 / 2);
last += modWH;
node.setLayout(nodeLayout, true);
}
rect[xy[idx1WhenH]] += rowOtherLength;
rect[wh[idx1WhenH]] -= rowOtherLength;
}
function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {
var currNode = (targetInfo || {}).node;
var defaultSize = [containerWidth, containerHeight];
if (!currNode || currNode === viewRoot) {
return defaultSize;
}
var parent;
var viewArea = containerWidth * containerHeight;
var area = viewArea * seriesModel.option.zoomToNodeRatio;
while (parent = currNode.parentNode) {
var sum2 = 0;
var siblings = parent.children;
for (var i = 0, len2 = siblings.length; i < len2; i++) {
sum2 += siblings[i].getValue();
}
var currNodeValue = currNode.getValue();
if (currNodeValue === 0) {
return defaultSize;
}
area *= sum2 / currNodeValue;
var parentModel = parent.getModel();
var borderWidth = parentModel.get(PATH_BORDER_WIDTH);
var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel));
area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);
area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);
currNode = parent;
}
area < viewArea && (area = viewArea);
var scale2 = Math.pow(area / viewArea, 0.5);
return [containerWidth * scale2, containerHeight * scale2];
}
function calculateRootPosition(layoutInfo, rootRect, targetInfo) {
if (rootRect) {
return {
x: rootRect.x,
y: rootRect.y
};
}
var defaultPosition = {
x: 0,
y: 0
};
if (!targetInfo) {
return defaultPosition;
}
var targetNode = targetInfo.node;
var layout2 = targetNode.getLayout();
if (!layout2) {
return defaultPosition;
}
var targetCenter = [layout2.width / 2, layout2.height / 2];
var node = targetNode;
while (node) {
var nodeLayout = node.getLayout();
targetCenter[0] += nodeLayout.x;
targetCenter[1] += nodeLayout.y;
node = node.parentNode;
}
return {
x: layoutInfo.width / 2 - targetCenter[0],
y: layoutInfo.height / 2 - targetCenter[1]
};
}
function prunning(node, clipRect, viewAbovePath, viewRoot, depth) {
var nodeLayout = node.getLayout();
var nodeInViewAbovePath = viewAbovePath[depth];
var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;
if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {
return;
}
node.setLayout({
// isInView means: viewRoot sub tree + viewAbovePath
isInView: true,
// invisible only means: outside view clip so that the node can not
// see but still layout for animation preparation but not render.
invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),
isAboveViewRoot
}, true);
var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);
each$b(node.viewChildren || [], function(child) {
prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);
});
}
function getUpperLabelHeight(model) {
return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;
}
function install$I(registers) {
registers.registerSeriesModel(TreemapSeriesModel);
registers.registerChartView(TreemapView);
registers.registerVisual(treemapVisual);
registers.registerLayout(treemapLayout);
installTreemapAction(registers);
}
function categoryFilter(ecModel) {
var legendModels = ecModel.findComponents({
mainType: "legend"
});
if (!legendModels || !legendModels.length) {
return;
}
ecModel.eachSeriesByType("graph", function(graphSeries) {
var categoriesData = graphSeries.getCategoriesData();
var graph = graphSeries.getGraph();
var data = graph.data;
var categoryNames = categoriesData.mapArray(categoriesData.getName);
data.filterSelf(function(idx) {
var model = data.getItemModel(idx);
var category = model.getShallow("category");
if (category != null) {
if (isNumber(category)) {
category = categoryNames[category];
}
for (var i = 0; i < legendModels.length; i++) {
if (!legendModels[i].isSelected(category)) {
return false;
}
}
}
return true;
});
});
}
function categoryVisual(ecModel) {
var paletteScope = {};
ecModel.eachSeriesByType("graph", function(seriesModel) {
var categoriesData = seriesModel.getCategoriesData();
var data = seriesModel.getData();
var categoryNameIdxMap = {};
categoriesData.each(function(idx) {
var name = categoriesData.getName(idx);
categoryNameIdxMap["ec-" + name] = idx;
var itemModel = categoriesData.getItemModel(idx);
var style = itemModel.getModel("itemStyle").getItemStyle();
if (!style.fill) {
style.fill = seriesModel.getColorFromPalette(name, paletteScope);
}
categoriesData.setItemVisual(idx, "style", style);
var symbolVisualList = ["symbol", "symbolSize", "symbolKeepAspect"];
for (var i = 0; i < symbolVisualList.length; i++) {
var symbolVisual = itemModel.getShallow(symbolVisualList[i], true);
if (symbolVisual != null) {
categoriesData.setItemVisual(idx, symbolVisualList[i], symbolVisual);
}
}
});
if (categoriesData.count()) {
data.each(function(idx) {
var model = data.getItemModel(idx);
var categoryIdx = model.getShallow("category");
if (categoryIdx != null) {
if (isString(categoryIdx)) {
categoryIdx = categoryNameIdxMap["ec-" + categoryIdx];
}
var categoryStyle = categoriesData.getItemVisual(categoryIdx, "style");
var style = data.ensureUniqueItemVisual(idx, "style");
extend(style, categoryStyle);
var visualList = ["symbol", "symbolSize", "symbolKeepAspect"];
for (var i = 0; i < visualList.length; i++) {
data.setItemVisual(idx, visualList[i], categoriesData.getItemVisual(categoryIdx, visualList[i]));
}
}
});
}
});
}
function normalize$1(a) {
if (!(a instanceof Array)) {
a = [a, a];
}
return a;
}
function graphEdgeVisual(ecModel) {
ecModel.eachSeriesByType("graph", function(seriesModel) {
var graph = seriesModel.getGraph();
var edgeData = seriesModel.getEdgeData();
var symbolType = normalize$1(seriesModel.get("edgeSymbol"));
var symbolSize = normalize$1(seriesModel.get("edgeSymbolSize"));
edgeData.setVisual("fromSymbol", symbolType && symbolType[0]);
edgeData.setVisual("toSymbol", symbolType && symbolType[1]);
edgeData.setVisual("fromSymbolSize", symbolSize && symbolSize[0]);
edgeData.setVisual("toSymbolSize", symbolSize && symbolSize[1]);
edgeData.setVisual("style", seriesModel.getModel("lineStyle").getLineStyle());
edgeData.each(function(idx) {
var itemModel = edgeData.getItemModel(idx);
var edge = graph.getEdgeByIndex(idx);
var symbolType2 = normalize$1(itemModel.getShallow("symbol", true));
var symbolSize2 = normalize$1(itemModel.getShallow("symbolSize", true));
var style = itemModel.getModel("lineStyle").getLineStyle();
var existsStyle = edgeData.ensureUniqueItemVisual(idx, "style");
extend(existsStyle, style);
switch (existsStyle.stroke) {
case "source": {
var nodeStyle = edge.node1.getVisual("style");
existsStyle.stroke = nodeStyle && nodeStyle.fill;
break;
}
case "target": {
var nodeStyle = edge.node2.getVisual("style");
existsStyle.stroke = nodeStyle && nodeStyle.fill;
break;
}
}
symbolType2[0] && edge.setVisual("fromSymbol", symbolType2[0]);
symbolType2[1] && edge.setVisual("toSymbol", symbolType2[1]);
symbolSize2[0] && edge.setVisual("fromSymbolSize", symbolSize2[0]);
symbolSize2[1] && edge.setVisual("toSymbolSize", symbolSize2[1]);
});
});
}
var KEY_DELIMITER = "-->";
var getAutoCurvenessParams = function(seriesModel) {
return seriesModel.get("autoCurveness") || null;
};
var createCurveness = function(seriesModel, appendLength) {
var autoCurvenessParmas = getAutoCurvenessParams(seriesModel);
var length = 20;
var curvenessList = [];
if (isNumber(autoCurvenessParmas)) {
length = autoCurvenessParmas;
} else if (isArray$1(autoCurvenessParmas)) {
seriesModel.__curvenessList = autoCurvenessParmas;
return;
}
if (appendLength > length) {
length = appendLength;
}
var len2 = length % 2 ? length + 2 : length + 3;
curvenessList = [];
for (var i = 0; i < len2; i++) {
curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1));
}
seriesModel.__curvenessList = curvenessList;
};
var getKeyOfEdges = function(n1, n2, seriesModel) {
var source = [n1.id, n1.dataIndex].join(".");
var target = [n2.id, n2.dataIndex].join(".");
return [seriesModel.uid, source, target].join(KEY_DELIMITER);
};
var getOppositeKey = function(key) {
var keys2 = key.split(KEY_DELIMITER);
return [keys2[0], keys2[2], keys2[1]].join(KEY_DELIMITER);
};
var getEdgeFromMap = function(edge, seriesModel) {
var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
return seriesModel.__edgeMap[key];
};
var getTotalLengthBetweenNodes = function(edge, seriesModel) {
var len2 = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel);
var lenV = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel);
return len2 + lenV;
};
var getEdgeMapLengthWithKey = function(key, seriesModel) {
var edgeMap = seriesModel.__edgeMap;
return edgeMap[key] ? edgeMap[key].length : 0;
};
function initCurvenessList(seriesModel) {
if (!getAutoCurvenessParams(seriesModel)) {
return;
}
seriesModel.__curvenessList = [];
seriesModel.__edgeMap = {};
createCurveness(seriesModel);
}
function createEdgeMapForCurveness(n1, n2, seriesModel, index) {
if (!getAutoCurvenessParams(seriesModel)) {
return;
}
var key = getKeyOfEdges(n1, n2, seriesModel);
var edgeMap = seriesModel.__edgeMap;
var oppositeEdges = edgeMap[getOppositeKey(key)];
if (edgeMap[key] && !oppositeEdges) {
edgeMap[key].isForward = true;
} else if (oppositeEdges && edgeMap[key]) {
oppositeEdges.isForward = true;
edgeMap[key].isForward = false;
}
edgeMap[key] = edgeMap[key] || [];
edgeMap[key].push(index);
}
function getCurvenessForEdge(edge, seriesModel, index, needReverse) {
var autoCurvenessParams = getAutoCurvenessParams(seriesModel);
var isArrayParam = isArray$1(autoCurvenessParams);
if (!autoCurvenessParams) {
return null;
}
var edgeArray = getEdgeFromMap(edge, seriesModel);
if (!edgeArray) {
return null;
}
var edgeIndex = -1;
for (var i = 0; i < edgeArray.length; i++) {
if (edgeArray[i] === index) {
edgeIndex = i;
break;
}
}
var totalLen = getTotalLengthBetweenNodes(edge, seriesModel);
createCurveness(seriesModel, totalLen);
edge.lineStyle = edge.lineStyle || {};
var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
var curvenessList = seriesModel.__curvenessList;
var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1;
if (!edgeArray.isForward) {
var oppositeKey = getOppositeKey(curKey);
var len2 = getEdgeMapLengthWithKey(oppositeKey, seriesModel);
var resValue = curvenessList[edgeIndex + len2 + parityCorrection];
if (needReverse) {
if (isArrayParam) {
if (autoCurvenessParams && autoCurvenessParams[0] === 0) {
return (len2 + parityCorrection) % 2 ? resValue : -resValue;
} else {
return ((len2 % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue;
}
} else {
return (len2 + parityCorrection) % 2 ? resValue : -resValue;
}
} else {
return curvenessList[edgeIndex + len2 + parityCorrection];
}
} else {
return curvenessList[parityCorrection + edgeIndex];
}
}
function simpleLayout(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.type !== "view") {
return;
}
var graph = seriesModel.getGraph();
graph.eachNode(function(node) {
var model = node.getModel();
node.setLayout([+model.get("x"), +model.get("y")]);
});
simpleLayoutEdge(graph, seriesModel);
}
function simpleLayoutEdge(graph, seriesModel) {
graph.eachEdge(function(edge, index) {
var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), -getCurvenessForEdge(edge, seriesModel, index, true), 0);
var p1 = clone$2(edge.node1.getLayout());
var p2 = clone$2(edge.node2.getLayout());
var points2 = [p1, p2];
if (+curveness) {
points2.push([(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness]);
}
edge.setLayout(points2);
});
}
function graphSimpleLayout(ecModel, api) {
ecModel.eachSeriesByType("graph", function(seriesModel) {
var layout2 = seriesModel.get("layout");
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.type !== "view") {
var data_1 = seriesModel.getData();
var dimensions_1 = [];
each$f(coordSys.dimensions, function(coordDim) {
dimensions_1 = dimensions_1.concat(data_1.mapDimensionsAll(coordDim));
});
for (var dataIndex = 0; dataIndex < data_1.count(); dataIndex++) {
var value = [];
var hasValue = false;
for (var i = 0; i < dimensions_1.length; i++) {
var val = data_1.get(dimensions_1[i], dataIndex);
if (!isNaN(val)) {
hasValue = true;
}
value.push(val);
}
if (hasValue) {
data_1.setItemLayout(dataIndex, coordSys.dataToPoint(value));
} else {
data_1.setItemLayout(dataIndex, [NaN, NaN]);
}
}
simpleLayoutEdge(data_1.graph, seriesModel);
} else if (!layout2 || layout2 === "none") {
simpleLayout(seriesModel);
}
});
}
function getNodeGlobalScale(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys.type !== "view") {
return 1;
}
var nodeScaleRatio = seriesModel.option.nodeScaleRatio;
var groupZoom = coordSys.scaleX;
var roamZoom = coordSys.getZoom();
var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
return nodeScale / groupZoom;
}
function getSymbolSize(node) {
var symbolSize = node.getVisual("symbolSize");
if (symbolSize instanceof Array) {
symbolSize = (symbolSize[0] + symbolSize[1]) / 2;
}
return +symbolSize;
}
var PI$2 = Math.PI;
var _symbolRadiansHalf = [];
function circularLayout(seriesModel, basedOn, draggingNode, pointer) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.type !== "view") {
return;
}
var rect = coordSys.getBoundingRect();
var nodeData = seriesModel.getData();
var graph = nodeData.graph;
var cx = rect.width / 2 + rect.x;
var cy = rect.height / 2 + rect.y;
var r = Math.min(rect.width, rect.height) / 2;
var count2 = nodeData.count();
nodeData.setLayout({
cx,
cy
});
if (!count2) {
return;
}
if (draggingNode) {
var _a2 = coordSys.pointToData(pointer), tempX = _a2[0], tempY = _a2[1];
var v = [tempX - cx, tempY - cy];
normalize$3(v, v);
scale$2(v, v, r);
draggingNode.setLayout([cx + v[0], cy + v[1]], true);
var circularRotateLabel = seriesModel.get(["circular", "rotateLabel"]);
rotateNodeLabel(draggingNode, circularRotateLabel, cx, cy);
}
_layoutNodesBasedOn[basedOn](seriesModel, graph, nodeData, r, cx, cy, count2);
graph.eachEdge(function(edge, index) {
var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), getCurvenessForEdge(edge, seriesModel, index), 0);
var p1 = clone$2(edge.node1.getLayout());
var p2 = clone$2(edge.node2.getLayout());
var cp1;
var x12 = (p1[0] + p2[0]) / 2;
var y12 = (p1[1] + p2[1]) / 2;
if (+curveness) {
curveness *= 3;
cp1 = [cx * curveness + x12 * (1 - curveness), cy * curveness + y12 * (1 - curveness)];
}
edge.setLayout([p1, p2, cp1]);
});
}
var _layoutNodesBasedOn = {
value: function(seriesModel, graph, nodeData, r, cx, cy, count2) {
var angle = 0;
var sum2 = nodeData.getSum("value");
var unitAngle = Math.PI * 2 / (sum2 || count2);
graph.eachNode(function(node) {
var value = node.getValue("value");
var radianHalf = unitAngle * (sum2 ? value : 1) / 2;
angle += radianHalf;
node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);
angle += radianHalf;
});
},
symbolSize: function(seriesModel, graph, nodeData, r, cx, cy, count2) {
var sumRadian = 0;
_symbolRadiansHalf.length = count2;
var nodeScale = getNodeGlobalScale(seriesModel);
graph.eachNode(function(node) {
var symbolSize = getSymbolSize(node);
isNaN(symbolSize) && (symbolSize = 2);
symbolSize < 0 && (symbolSize = 0);
symbolSize *= nodeScale;
var symbolRadianHalf = Math.asin(symbolSize / 2 / r);
isNaN(symbolRadianHalf) && (symbolRadianHalf = PI$2 / 2);
_symbolRadiansHalf[node.dataIndex] = symbolRadianHalf;
sumRadian += symbolRadianHalf * 2;
});
var halfRemainRadian = (2 * PI$2 - sumRadian) / count2 / 2;
var angle = 0;
graph.eachNode(function(node) {
var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];
angle += radianHalf;
(!node.getLayout() || !node.getLayout().fixed) && node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);
angle += radianHalf;
});
}
};
function rotateNodeLabel(node, circularRotateLabel, cx, cy) {
var el = node.getGraphicEl();
if (!el) {
return;
}
var nodeModel = node.getModel();
var labelRotate = nodeModel.get(["label", "rotate"]) || 0;
var symbolPath = el.getSymbolPath();
if (circularRotateLabel) {
var pos = node.getLayout();
var rad = Math.atan2(pos[1] - cy, pos[0] - cx);
if (rad < 0) {
rad = Math.PI * 2 + rad;
}
var isLeft = pos[0] < cx;
if (isLeft) {
rad = rad - Math.PI;
}
var textPosition = isLeft ? "left" : "right";
symbolPath.setTextConfig({
rotation: -rad,
position: textPosition,
origin: "center"
});
var emphasisState = symbolPath.ensureState("emphasis");
extend(emphasisState.textConfig || (emphasisState.textConfig = {}), {
position: textPosition
});
} else {
symbolPath.setTextConfig({
rotation: labelRotate *= Math.PI / 180
});
}
}
function graphCircularLayout(ecModel) {
ecModel.eachSeriesByType("graph", function(seriesModel) {
if (seriesModel.get("layout") === "circular") {
circularLayout(seriesModel, "symbolSize");
}
});
}
var scaleAndAdd = scaleAndAdd$1;
function forceLayout(inNodes, inEdges, opts) {
var nodes = inNodes;
var edges = inEdges;
var rect = opts.rect;
var width = rect.width;
var height = rect.height;
var center2 = [rect.x + width / 2, rect.y + height / 2];
var gravity = opts.gravity == null ? 0.1 : opts.gravity;
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
if (!n.p) {
n.p = create$2(width * (Math.random() - 0.5) + center2[0], height * (Math.random() - 0.5) + center2[1]);
}
n.pp = clone$2(n.p);
n.edges = null;
}
var initialFriction = opts.friction == null ? 0.6 : opts.friction;
var friction = initialFriction;
var beforeStepCallback;
var afterStepCallback;
return {
warmUp: function() {
friction = initialFriction * 0.8;
},
setFixed: function(idx) {
nodes[idx].fixed = true;
},
setUnfixed: function(idx) {
nodes[idx].fixed = false;
},
/**
* Before step hook
*/
beforeStep: function(cb) {
beforeStepCallback = cb;
},
/**
* After step hook
*/
afterStep: function(cb) {
afterStepCallback = cb;
},
/**
* Some formulas were originally copied from "d3.js"
* https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js
* with some modifications made for this project.
* See the license statement at the head of this file.
*/
step: function(cb) {
beforeStepCallback && beforeStepCallback(nodes, edges);
var v12 = [];
var nLen = nodes.length;
for (var i2 = 0; i2 < edges.length; i2++) {
var e = edges[i2];
if (e.ignoreForceLayout) {
continue;
}
var n1 = e.n1;
var n2 = e.n2;
sub(v12, n2.p, n1.p);
var d = len(v12) - e.d;
var w = n2.w / (n1.w + n2.w);
if (isNaN(w)) {
w = 0;
}
normalize$3(v12, v12);
!n1.fixed && scaleAndAdd(n1.p, n1.p, v12, w * d * friction);
!n2.fixed && scaleAndAdd(n2.p, n2.p, v12, -(1 - w) * d * friction);
}
for (var i2 = 0; i2 < nLen; i2++) {
var n3 = nodes[i2];
if (!n3.fixed) {
sub(v12, center2, n3.p);
scaleAndAdd(n3.p, n3.p, v12, gravity * friction);
}
}
for (var i2 = 0; i2 < nLen; i2++) {
var n1 = nodes[i2];
for (var j = i2 + 1; j < nLen; j++) {
var n2 = nodes[j];
sub(v12, n2.p, n1.p);
var d = len(v12);
if (d === 0) {
set$1(v12, Math.random() - 0.5, Math.random() - 0.5);
d = 1;
}
var repFact = (n1.rep + n2.rep) / d / d;
!n1.fixed && scaleAndAdd(n1.pp, n1.pp, v12, repFact);
!n2.fixed && scaleAndAdd(n2.pp, n2.pp, v12, -repFact);
}
}
var v = [];
for (var i2 = 0; i2 < nLen; i2++) {
var n3 = nodes[i2];
if (!n3.fixed) {
sub(v, n3.p, n3.pp);
scaleAndAdd(n3.p, n3.p, v, friction);
copy$1(n3.pp, n3.p);
}
}
friction = friction * 0.992;
var finished = friction < 0.01;
afterStepCallback && afterStepCallback(nodes, edges, finished);
cb && cb(finished);
}
};
}
function graphForceLayout(ecModel) {
ecModel.eachSeriesByType("graph", function(graphSeries) {
var coordSys = graphSeries.coordinateSystem;
if (coordSys && coordSys.type !== "view") {
return;
}
if (graphSeries.get("layout") === "force") {
var preservedPoints_1 = graphSeries.preservedPoints || {};
var graph_1 = graphSeries.getGraph();
var nodeData_1 = graph_1.data;
var edgeData = graph_1.edgeData;
var forceModel = graphSeries.getModel("force");
var initLayout = forceModel.get("initLayout");
if (graphSeries.preservedPoints) {
nodeData_1.each(function(idx) {
var id = nodeData_1.getId(idx);
nodeData_1.setItemLayout(idx, preservedPoints_1[id] || [NaN, NaN]);
});
} else if (!initLayout || initLayout === "none") {
simpleLayout(graphSeries);
} else if (initLayout === "circular") {
circularLayout(graphSeries, "value");
}
var nodeDataExtent_1 = nodeData_1.getDataExtent("value");
var edgeDataExtent_1 = edgeData.getDataExtent("value");
var repulsion = forceModel.get("repulsion");
var edgeLength = forceModel.get("edgeLength");
var repulsionArr_1 = isArray$1(repulsion) ? repulsion : [repulsion, repulsion];
var edgeLengthArr_1 = isArray$1(edgeLength) ? edgeLength : [edgeLength, edgeLength];
edgeLengthArr_1 = [edgeLengthArr_1[1], edgeLengthArr_1[0]];
var nodes_1 = nodeData_1.mapArray("value", function(value, idx) {
var point = nodeData_1.getItemLayout(idx);
var rep = linearMap$2(value, nodeDataExtent_1, repulsionArr_1);
if (isNaN(rep)) {
rep = (repulsionArr_1[0] + repulsionArr_1[1]) / 2;
}
return {
w: rep,
rep,
fixed: nodeData_1.getItemModel(idx).get("fixed"),
p: !point || isNaN(point[0]) || isNaN(point[1]) ? null : point
};
});
var edges = edgeData.mapArray("value", function(value, idx) {
var edge = graph_1.getEdgeByIndex(idx);
var d = linearMap$2(value, edgeDataExtent_1, edgeLengthArr_1);
if (isNaN(d)) {
d = (edgeLengthArr_1[0] + edgeLengthArr_1[1]) / 2;
}
var edgeModel = edge.getModel();
var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), -getCurvenessForEdge(edge, graphSeries, idx, true), 0);
return {
n1: nodes_1[edge.node1.dataIndex],
n2: nodes_1[edge.node2.dataIndex],
d,
curveness,
ignoreForceLayout: edgeModel.get("ignoreForceLayout")
};
});
var rect = coordSys.getBoundingRect();
var forceInstance = forceLayout(nodes_1, edges, {
rect,
gravity: forceModel.get("gravity"),
friction: forceModel.get("friction")
});
forceInstance.beforeStep(function(nodes, edges2) {
for (var i = 0, l = nodes.length; i < l; i++) {
if (nodes[i].fixed) {
copy$1(nodes[i].p, graph_1.getNodeByIndex(i).getLayout());
}
}
});
forceInstance.afterStep(function(nodes, edges2, stopped) {
for (var i = 0, l = nodes.length; i < l; i++) {
if (!nodes[i].fixed) {
graph_1.getNodeByIndex(i).setLayout(nodes[i].p);
}
preservedPoints_1[nodeData_1.getId(i)] = nodes[i].p;
}
for (var i = 0, l = edges2.length; i < l; i++) {
var e = edges2[i];
var edge = graph_1.getEdgeByIndex(i);
var p1 = e.n1.p;
var p2 = e.n2.p;
var points2 = edge.getLayout();
points2 = points2 ? points2.slice() : [];
points2[0] = points2[0] || [];
points2[1] = points2[1] || [];
copy$1(points2[0], p1);
copy$1(points2[1], p2);
if (+e.curveness) {
points2[2] = [(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness];
}
edge.setLayout(points2);
}
});
graphSeries.forceLayout = forceInstance;
graphSeries.preservedPoints = preservedPoints_1;
forceInstance.step();
} else {
graphSeries.forceLayout = null;
}
});
}
function getViewRect$3(seriesModel, api, aspect) {
var option = extend(seriesModel.getBoxLayoutParams(), {
aspect
});
return getLayoutRect(option, {
width: api.getWidth(),
height: api.getHeight()
});
}
function createViewCoordSys(ecModel, api) {
var viewList = [];
ecModel.eachSeriesByType("graph", function(seriesModel) {
var coordSysType = seriesModel.get("coordinateSystem");
if (!coordSysType || coordSysType === "view") {
var data_1 = seriesModel.getData();
var positions = data_1.mapArray(function(idx) {
var itemModel = data_1.getItemModel(idx);
return [+itemModel.get("x"), +itemModel.get("y")];
});
var min2 = [];
var max2 = [];
fromPoints(positions, min2, max2);
if (max2[0] - min2[0] === 0) {
max2[0] += 1;
min2[0] -= 1;
}
if (max2[1] - min2[1] === 0) {
max2[1] += 1;
min2[1] -= 1;
}
var aspect = (max2[0] - min2[0]) / (max2[1] - min2[1]);
var viewRect = getViewRect$3(seriesModel, api, aspect);
if (isNaN(aspect)) {
min2 = [viewRect.x, viewRect.y];
max2 = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];
}
var bbWidth = max2[0] - min2[0];
var bbHeight = max2[1] - min2[1];
var viewWidth = viewRect.width;
var viewHeight = viewRect.height;
var viewCoordSys = seriesModel.coordinateSystem = new View();
viewCoordSys.zoomLimit = seriesModel.get("scaleLimit");
viewCoordSys.setBoundingRect(min2[0], min2[1], bbWidth, bbHeight);
viewCoordSys.setViewRect(viewRect.x, viewRect.y, viewWidth, viewHeight);
viewCoordSys.setCenter(seriesModel.get("center"), api);
viewCoordSys.setZoom(seriesModel.get("zoom"));
viewList.push(viewCoordSys);
}
});
return viewList;
}
var straightLineProto = Line$1.prototype;
var bezierCurveProto = BezierCurve.prototype;
var StraightLineShape = (
/** @class */
/* @__PURE__ */ (function() {
function StraightLineShape2() {
this.x1 = 0;
this.y1 = 0;
this.x2 = 0;
this.y2 = 0;
this.percent = 1;
}
return StraightLineShape2;
})()
);
(function(_super) {
__extends(CurveShape, _super);
function CurveShape() {
return _super !== null && _super.apply(this, arguments) || this;
}
return CurveShape;
})(StraightLineShape);
function isStraightLine(shape) {
return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);
}
var ECLinePath = (
/** @class */
(function(_super) {
__extends(ECLinePath2, _super);
function ECLinePath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "ec-line";
return _this;
}
ECLinePath2.prototype.getDefaultStyle = function() {
return {
stroke: "#000",
fill: null
};
};
ECLinePath2.prototype.getDefaultShape = function() {
return new StraightLineShape();
};
ECLinePath2.prototype.buildPath = function(ctx, shape) {
if (isStraightLine(shape)) {
straightLineProto.buildPath.call(this, ctx, shape);
} else {
bezierCurveProto.buildPath.call(this, ctx, shape);
}
};
ECLinePath2.prototype.pointAt = function(t) {
if (isStraightLine(this.shape)) {
return straightLineProto.pointAt.call(this, t);
} else {
return bezierCurveProto.pointAt.call(this, t);
}
};
ECLinePath2.prototype.tangentAt = function(t) {
var shape = this.shape;
var p = isStraightLine(shape) ? [shape.x2 - shape.x1, shape.y2 - shape.y1] : bezierCurveProto.tangentAt.call(this, t);
return normalize$3(p, p);
};
return ECLinePath2;
})(Path)
);
var SYMBOL_CATEGORIES = ["fromSymbol", "toSymbol"];
function makeSymbolTypeKey(symbolCategory) {
return "_" + symbolCategory + "Type";
}
function makeSymbolTypeValue(name, lineData, idx) {
var symbolType = lineData.getItemVisual(idx, name);
if (!symbolType || symbolType === "none") {
return symbolType;
}
var symbolSize = lineData.getItemVisual(idx, name + "Size");
var symbolRotate = lineData.getItemVisual(idx, name + "Rotate");
var symbolOffset = lineData.getItemVisual(idx, name + "Offset");
var symbolKeepAspect = lineData.getItemVisual(idx, name + "KeepAspect");
var symbolSizeArr = normalizeSymbolSize(symbolSize);
var symbolOffsetArr = normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr);
return symbolType + symbolSizeArr + symbolOffsetArr + (symbolRotate || "") + (symbolKeepAspect || "");
}
function createSymbol(name, lineData, idx) {
var symbolType = lineData.getItemVisual(idx, name);
if (!symbolType || symbolType === "none") {
return;
}
var symbolSize = lineData.getItemVisual(idx, name + "Size");
var symbolRotate = lineData.getItemVisual(idx, name + "Rotate");
var symbolOffset = lineData.getItemVisual(idx, name + "Offset");
var symbolKeepAspect = lineData.getItemVisual(idx, name + "KeepAspect");
var symbolSizeArr = normalizeSymbolSize(symbolSize);
var symbolOffsetArr = normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr);
var symbolPath = createSymbol$1(symbolType, -symbolSizeArr[0] / 2 + symbolOffsetArr[0], -symbolSizeArr[1] / 2 + symbolOffsetArr[1], symbolSizeArr[0], symbolSizeArr[1], null, symbolKeepAspect);
symbolPath.__specifiedRotation = symbolRotate == null || isNaN(symbolRotate) ? void 0 : +symbolRotate * Math.PI / 180 || 0;
symbolPath.name = name;
return symbolPath;
}
function createLine(points2) {
var line = new ECLinePath({
name: "line",
subPixelOptimize: true
});
setLinePoints(line.shape, points2);
return line;
}
function setLinePoints(targetShape, points2) {
targetShape.x1 = points2[0][0];
targetShape.y1 = points2[0][1];
targetShape.x2 = points2[1][0];
targetShape.y2 = points2[1][1];
targetShape.percent = 1;
var cp1 = points2[2];
if (cp1) {
targetShape.cpx1 = cp1[0];
targetShape.cpy1 = cp1[1];
} else {
targetShape.cpx1 = NaN;
targetShape.cpy1 = NaN;
}
}
var Line = (
/** @class */
(function(_super) {
__extends(Line2, _super);
function Line2(lineData, idx, seriesScope) {
var _this = _super.call(this) || this;
_this._createLine(lineData, idx, seriesScope);
return _this;
}
Line2.prototype._createLine = function(lineData, idx, seriesScope) {
var seriesModel = lineData.hostModel;
var linePoints = lineData.getItemLayout(idx);
var line = createLine(linePoints);
line.shape.percent = 0;
initProps(line, {
shape: {
percent: 1
}
}, seriesModel, idx);
this.add(line);
each$f(SYMBOL_CATEGORIES, function(symbolCategory) {
var symbol = createSymbol(symbolCategory, lineData, idx);
this.add(symbol);
this[makeSymbolTypeKey(symbolCategory)] = makeSymbolTypeValue(symbolCategory, lineData, idx);
}, this);
this._updateCommonStl(lineData, idx, seriesScope);
};
Line2.prototype.updateData = function(lineData, idx, seriesScope) {
var seriesModel = lineData.hostModel;
var line = this.childOfName("line");
var linePoints = lineData.getItemLayout(idx);
var target = {
shape: {}
};
setLinePoints(target.shape, linePoints);
updateProps$1(line, target, seriesModel, idx);
each$f(SYMBOL_CATEGORIES, function(symbolCategory) {
var symbolType = makeSymbolTypeValue(symbolCategory, lineData, idx);
var key = makeSymbolTypeKey(symbolCategory);
if (this[key] !== symbolType) {
this.remove(this.childOfName(symbolCategory));
var symbol = createSymbol(symbolCategory, lineData, idx);
this.add(symbol);
}
this[key] = symbolType;
}, this);
this._updateCommonStl(lineData, idx, seriesScope);
};
Line2.prototype.getLinePath = function() {
return this.childAt(0);
};
Line2.prototype._updateCommonStl = function(lineData, idx, seriesScope) {
var seriesModel = lineData.hostModel;
var line = this.childOfName("line");
var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle;
var blurLineStyle = seriesScope && seriesScope.blurLineStyle;
var selectLineStyle = seriesScope && seriesScope.selectLineStyle;
var labelStatesModels = seriesScope && seriesScope.labelStatesModels;
var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled;
var focus = seriesScope && seriesScope.focus;
var blurScope = seriesScope && seriesScope.blurScope;
if (!seriesScope || lineData.hasItemOption) {
var itemModel = lineData.getItemModel(idx);
var emphasisModel = itemModel.getModel("emphasis");
emphasisLineStyle = emphasisModel.getModel("lineStyle").getLineStyle();
blurLineStyle = itemModel.getModel(["blur", "lineStyle"]).getLineStyle();
selectLineStyle = itemModel.getModel(["select", "lineStyle"]).getLineStyle();
emphasisDisabled = emphasisModel.get("disabled");
focus = emphasisModel.get("focus");
blurScope = emphasisModel.get("blurScope");
labelStatesModels = getLabelStatesModels(itemModel);
}
var lineStyle = lineData.getItemVisual(idx, "style");
var visualColor = lineStyle.stroke;
line.useStyle(lineStyle);
line.style.fill = null;
line.style.strokeNoScale = true;
line.ensureState("emphasis").style = emphasisLineStyle;
line.ensureState("blur").style = blurLineStyle;
line.ensureState("select").style = selectLineStyle;
each$f(SYMBOL_CATEGORIES, function(symbolCategory) {
var symbol = this.childOfName(symbolCategory);
if (symbol) {
symbol.setColor(visualColor);
symbol.style.opacity = lineStyle.opacity;
for (var i = 0; i < SPECIAL_STATES.length; i++) {
var stateName = SPECIAL_STATES[i];
var lineState = line.getState(stateName);
if (lineState) {
var lineStateStyle = lineState.style || {};
var state = symbol.ensureState(stateName);
var stateStyle = state.style || (state.style = {});
if (lineStateStyle.stroke != null) {
stateStyle[symbol.__isEmptyBrush ? "stroke" : "fill"] = lineStateStyle.stroke;
}
if (lineStateStyle.opacity != null) {
stateStyle.opacity = lineStateStyle.opacity;
}
}
}
symbol.markRedraw();
}
}, this);
var rawVal = seriesModel.getRawValue(idx);
setLabelStyle(this, labelStatesModels, {
labelDataIndex: idx,
labelFetcher: {
getFormattedLabel: function(dataIndex, stateName) {
return seriesModel.getFormattedLabel(dataIndex, stateName, lineData.dataType);
}
},
inheritColor: visualColor || "#000",
defaultOpacity: lineStyle.opacity,
defaultText: (rawVal == null ? lineData.getName(idx) : isFinite(rawVal) ? round$1(rawVal) : rawVal) + ""
});
var label = this.getTextContent();
if (label) {
var labelNormalModel = labelStatesModels.normal;
label.__align = label.style.align;
label.__verticalAlign = label.style.verticalAlign;
label.__position = labelNormalModel.get("position") || "middle";
var distance = labelNormalModel.get("distance");
if (!isArray$1(distance)) {
distance = [distance, distance];
}
label.__labelDistance = distance;
}
this.setTextConfig({
position: null,
local: true,
inside: false
// Can't be inside for stroke element.
});
toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);
};
Line2.prototype.highlight = function() {
enterEmphasis(this);
};
Line2.prototype.downplay = function() {
leaveEmphasis(this);
};
Line2.prototype.updateLayout = function(lineData, idx) {
this.setLinePoints(lineData.getItemLayout(idx));
};
Line2.prototype.setLinePoints = function(points2) {
var linePath = this.childOfName("line");
setLinePoints(linePath.shape, points2);
linePath.dirty();
};
Line2.prototype.beforeUpdate = function() {
var lineGroup = this;
var symbolFrom = lineGroup.childOfName("fromSymbol");
var symbolTo = lineGroup.childOfName("toSymbol");
var label = lineGroup.getTextContent();
if (!symbolFrom && !symbolTo && (!label || label.ignore)) {
return;
}
var invScale = 1;
var parentNode = this.parent;
while (parentNode) {
if (parentNode.scaleX) {
invScale /= parentNode.scaleX;
}
parentNode = parentNode.parent;
}
var line = lineGroup.childOfName("line");
if (!this.__dirty && !line.__dirty) {
return;
}
var percent = line.shape.percent;
var fromPos = line.pointAt(0);
var toPos = line.pointAt(percent);
var d = sub([], toPos, fromPos);
normalize$3(d, d);
function setSymbolRotation(symbol, percent2) {
var specifiedRotation = symbol.__specifiedRotation;
if (specifiedRotation == null) {
var tangent2 = line.tangentAt(percent2);
symbol.attr("rotation", (percent2 === 1 ? -1 : 1) * Math.PI / 2 - Math.atan2(tangent2[1], tangent2[0]));
} else {
symbol.attr("rotation", specifiedRotation);
}
}
if (symbolFrom) {
symbolFrom.setPosition(fromPos);
setSymbolRotation(symbolFrom, 0);
symbolFrom.scaleX = symbolFrom.scaleY = invScale * percent;
symbolFrom.markRedraw();
}
if (symbolTo) {
symbolTo.setPosition(toPos);
setSymbolRotation(symbolTo, 1);
symbolTo.scaleX = symbolTo.scaleY = invScale * percent;
symbolTo.markRedraw();
}
if (label && !label.ignore) {
label.x = label.y = 0;
label.originX = label.originY = 0;
var textAlign = void 0;
var textVerticalAlign = void 0;
var distance = label.__labelDistance;
var distanceX = distance[0] * invScale;
var distanceY = distance[1] * invScale;
var halfPercent = percent / 2;
var tangent = line.tangentAt(halfPercent);
var n = [tangent[1], -tangent[0]];
var cp = line.pointAt(halfPercent);
if (n[1] > 0) {
n[0] = -n[0];
n[1] = -n[1];
}
var dir3 = tangent[0] < 0 ? -1 : 1;
if (label.__position !== "start" && label.__position !== "end") {
var rotation = -Math.atan2(tangent[1], tangent[0]);
if (toPos[0] < fromPos[0]) {
rotation = Math.PI + rotation;
}
label.rotation = rotation;
}
var dy = void 0;
switch (label.__position) {
case "insideStartTop":
case "insideMiddleTop":
case "insideEndTop":
case "middle":
dy = -distanceY;
textVerticalAlign = "bottom";
break;
case "insideStartBottom":
case "insideMiddleBottom":
case "insideEndBottom":
dy = distanceY;
textVerticalAlign = "top";
break;
default:
dy = 0;
textVerticalAlign = "middle";
}
switch (label.__position) {
case "end":
label.x = d[0] * distanceX + toPos[0];
label.y = d[1] * distanceY + toPos[1];
textAlign = d[0] > 0.8 ? "left" : d[0] < -0.8 ? "right" : "center";
textVerticalAlign = d[1] > 0.8 ? "top" : d[1] < -0.8 ? "bottom" : "middle";
break;
case "start":
label.x = -d[0] * distanceX + fromPos[0];
label.y = -d[1] * distanceY + fromPos[1];
textAlign = d[0] > 0.8 ? "right" : d[0] < -0.8 ? "left" : "center";
textVerticalAlign = d[1] > 0.8 ? "bottom" : d[1] < -0.8 ? "top" : "middle";
break;
case "insideStartTop":
case "insideStart":
case "insideStartBottom":
label.x = distanceX * dir3 + fromPos[0];
label.y = fromPos[1] + dy;
textAlign = tangent[0] < 0 ? "right" : "left";
label.originX = -distanceX * dir3;
label.originY = -dy;
break;
case "insideMiddleTop":
case "insideMiddle":
case "insideMiddleBottom":
case "middle":
label.x = cp[0];
label.y = cp[1] + dy;
textAlign = "center";
label.originY = -dy;
break;
case "insideEndTop":
case "insideEnd":
case "insideEndBottom":
label.x = -distanceX * dir3 + toPos[0];
label.y = toPos[1] + dy;
textAlign = tangent[0] >= 0 ? "right" : "left";
label.originX = distanceX * dir3;
label.originY = -dy;
break;
}
label.scaleX = label.scaleY = invScale;
label.setStyle({
// Use the user specified text align and baseline first
verticalAlign: label.__verticalAlign || textVerticalAlign,
align: label.__align || textAlign
});
}
};
return Line2;
})(Group$3)
);
var LineDraw = (
/** @class */
(function() {
function LineDraw2(LineCtor) {
this.group = new Group$3();
this._LineCtor = LineCtor || Line;
}
LineDraw2.prototype.updateData = function(lineData) {
var _this = this;
this._progressiveEls = null;
var lineDraw = this;
var group = lineDraw.group;
var oldLineData = lineDraw._lineData;
lineDraw._lineData = lineData;
if (!oldLineData) {
group.removeAll();
}
var seriesScope = makeSeriesScope$1(lineData);
lineData.diff(oldLineData).add(function(idx) {
_this._doAdd(lineData, idx, seriesScope);
}).update(function(newIdx, oldIdx) {
_this._doUpdate(oldLineData, lineData, oldIdx, newIdx, seriesScope);
}).remove(function(idx) {
group.remove(oldLineData.getItemGraphicEl(idx));
}).execute();
};
LineDraw2.prototype.updateLayout = function() {
var lineData = this._lineData;
if (!lineData) {
return;
}
lineData.eachItemGraphicEl(function(el, idx) {
el.updateLayout(lineData, idx);
}, this);
};
LineDraw2.prototype.incrementalPrepareUpdate = function(lineData) {
this._seriesScope = makeSeriesScope$1(lineData);
this._lineData = null;
this.group.removeAll();
};
LineDraw2.prototype.incrementalUpdate = function(taskParams, lineData) {
this._progressiveEls = [];
function updateIncrementalAndHover(el2) {
if (!el2.isGroup && !isEffectObject(el2)) {
el2.incremental = true;
el2.ensureState("emphasis").hoverLayer = true;
}
}
for (var idx = taskParams.start; idx < taskParams.end; idx++) {
var itemLayout = lineData.getItemLayout(idx);
if (lineNeedsDraw(itemLayout)) {
var el = new this._LineCtor(lineData, idx, this._seriesScope);
el.traverse(updateIncrementalAndHover);
this.group.add(el);
lineData.setItemGraphicEl(idx, el);
this._progressiveEls.push(el);
}
}
};
LineDraw2.prototype.remove = function() {
this.group.removeAll();
};
LineDraw2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
LineDraw2.prototype._doAdd = function(lineData, idx, seriesScope) {
var itemLayout = lineData.getItemLayout(idx);
if (!lineNeedsDraw(itemLayout)) {
return;
}
var el = new this._LineCtor(lineData, idx, seriesScope);
lineData.setItemGraphicEl(idx, el);
this.group.add(el);
};
LineDraw2.prototype._doUpdate = function(oldLineData, newLineData, oldIdx, newIdx, seriesScope) {
var itemEl = oldLineData.getItemGraphicEl(oldIdx);
if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {
this.group.remove(itemEl);
return;
}
if (!itemEl) {
itemEl = new this._LineCtor(newLineData, newIdx, seriesScope);
} else {
itemEl.updateData(newLineData, newIdx, seriesScope);
}
newLineData.setItemGraphicEl(newIdx, itemEl);
this.group.add(itemEl);
};
return LineDraw2;
})()
);
function isEffectObject(el) {
return el.animators && el.animators.length > 0;
}
function makeSeriesScope$1(lineData) {
var hostModel = lineData.hostModel;
var emphasisModel = hostModel.getModel("emphasis");
return {
lineStyle: hostModel.getModel("lineStyle").getLineStyle(),
emphasisLineStyle: emphasisModel.getModel(["lineStyle"]).getLineStyle(),
blurLineStyle: hostModel.getModel(["blur", "lineStyle"]).getLineStyle(),
selectLineStyle: hostModel.getModel(["select", "lineStyle"]).getLineStyle(),
emphasisDisabled: emphasisModel.get("disabled"),
blurScope: emphasisModel.get("blurScope"),
focus: emphasisModel.get("focus"),
labelStatesModels: getLabelStatesModels(hostModel)
};
}
function isPointNaN(pt) {
return isNaN(pt[0]) || isNaN(pt[1]);
}
function lineNeedsDraw(pts) {
return pts && !isPointNaN(pts[0]) && !isPointNaN(pts[1]);
}
var v1 = [];
var v2 = [];
var v3 = [];
var quadraticAt = quadraticAt$1;
var v2DistSquare = distSquare;
var mathAbs = Math.abs;
function intersectCurveCircle(curvePoints, center2, radius) {
var p0 = curvePoints[0];
var p1 = curvePoints[1];
var p2 = curvePoints[2];
var d = Infinity;
var t;
var radiusSquare = radius * radius;
var interval = 0.1;
for (var _t = 0.1; _t <= 0.9; _t += 0.1) {
v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t);
v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t);
var diff = mathAbs(v2DistSquare(v1, center2) - radiusSquare);
if (diff < d) {
d = diff;
t = _t;
}
}
for (var i = 0; i < 32; i++) {
var next = t + interval;
v2[0] = quadraticAt(p0[0], p1[0], p2[0], t);
v2[1] = quadraticAt(p0[1], p1[1], p2[1], t);
v3[0] = quadraticAt(p0[0], p1[0], p2[0], next);
v3[1] = quadraticAt(p0[1], p1[1], p2[1], next);
var diff = v2DistSquare(v2, center2) - radiusSquare;
if (mathAbs(diff) < 0.01) {
break;
}
var nextDiff = v2DistSquare(v3, center2) - radiusSquare;
interval /= 2;
if (diff < 0) {
if (nextDiff >= 0) {
t = t + interval;
} else {
t = t - interval;
}
} else {
if (nextDiff >= 0) {
t = t - interval;
} else {
t = t + interval;
}
}
}
return t;
}
function adjustEdge(graph, scale2) {
var tmp0 = [];
var quadraticSubdivide$1 = quadraticSubdivide;
var pts = [[], [], []];
var pts2 = [[], []];
var v = [];
scale2 /= 2;
graph.eachEdge(function(edge, idx) {
var linePoints = edge.getLayout();
var fromSymbol = edge.getVisual("fromSymbol");
var toSymbol = edge.getVisual("toSymbol");
if (!linePoints.__original) {
linePoints.__original = [clone$2(linePoints[0]), clone$2(linePoints[1])];
if (linePoints[2]) {
linePoints.__original.push(clone$2(linePoints[2]));
}
}
var originalPoints = linePoints.__original;
if (linePoints[2] != null) {
copy$1(pts[0], originalPoints[0]);
copy$1(pts[1], originalPoints[2]);
copy$1(pts[2], originalPoints[1]);
if (fromSymbol && fromSymbol !== "none") {
var symbolSize = getSymbolSize(edge.node1);
var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale2);
quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);
pts[0][0] = tmp0[3];
pts[1][0] = tmp0[4];
quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);
pts[0][1] = tmp0[3];
pts[1][1] = tmp0[4];
}
if (toSymbol && toSymbol !== "none") {
var symbolSize = getSymbolSize(edge.node2);
var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale2);
quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);
pts[1][0] = tmp0[1];
pts[2][0] = tmp0[2];
quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);
pts[1][1] = tmp0[1];
pts[2][1] = tmp0[2];
}
copy$1(linePoints[0], pts[0]);
copy$1(linePoints[1], pts[2]);
copy$1(linePoints[2], pts[1]);
} else {
copy$1(pts2[0], originalPoints[0]);
copy$1(pts2[1], originalPoints[1]);
sub(v, pts2[1], pts2[0]);
normalize$3(v, v);
if (fromSymbol && fromSymbol !== "none") {
var symbolSize = getSymbolSize(edge.node1);
scaleAndAdd$1(pts2[0], pts2[0], v, symbolSize * scale2);
}
if (toSymbol && toSymbol !== "none") {
var symbolSize = getSymbolSize(edge.node2);
scaleAndAdd$1(pts2[1], pts2[1], v, -symbolSize * scale2);
}
copy$1(linePoints[0], pts2[0]);
copy$1(linePoints[1], pts2[1]);
}
});
}
function isViewCoordSys(coordSys) {
return coordSys.type === "view";
}
var GraphView = (
/** @class */
(function(_super) {
__extends(GraphView2, _super);
function GraphView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GraphView2.type;
return _this;
}
GraphView2.prototype.init = function(ecModel, api) {
var symbolDraw = new SymbolDraw();
var lineDraw = new LineDraw();
var group = this.group;
this._controller = new RoamController(api.getZr());
this._controllerHost = {
target: group
};
group.add(symbolDraw.group);
group.add(lineDraw.group);
this._symbolDraw = symbolDraw;
this._lineDraw = lineDraw;
this._firstRender = true;
};
GraphView2.prototype.render = function(seriesModel, ecModel, api) {
var _this = this;
var coordSys = seriesModel.coordinateSystem;
this._model = seriesModel;
var symbolDraw = this._symbolDraw;
var lineDraw = this._lineDraw;
var group = this.group;
if (isViewCoordSys(coordSys)) {
var groupNewProp = {
x: coordSys.x,
y: coordSys.y,
scaleX: coordSys.scaleX,
scaleY: coordSys.scaleY
};
if (this._firstRender) {
group.attr(groupNewProp);
} else {
updateProps$1(group, groupNewProp, seriesModel);
}
}
adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));
var data = seriesModel.getData();
symbolDraw.updateData(data);
var edgeData = seriesModel.getEdgeData();
lineDraw.updateData(edgeData);
this._updateNodeAndLinkScale();
this._updateController(seriesModel, ecModel, api);
clearTimeout(this._layoutTimeout);
var forceLayout2 = seriesModel.forceLayout;
var layoutAnimation = seriesModel.get(["force", "layoutAnimation"]);
if (forceLayout2) {
this._startForceLayoutIteration(forceLayout2, layoutAnimation);
}
var layout2 = seriesModel.get("layout");
data.graph.eachNode(function(node) {
var idx = node.dataIndex;
var el = node.getGraphicEl();
var itemModel = node.getModel();
if (!el) {
return;
}
el.off("drag").off("dragend");
var draggable = itemModel.get("draggable");
if (draggable) {
el.on("drag", function(e) {
switch (layout2) {
case "force":
forceLayout2.warmUp();
!_this._layouting && _this._startForceLayoutIteration(forceLayout2, layoutAnimation);
forceLayout2.setFixed(idx);
data.setItemLayout(idx, [el.x, el.y]);
break;
case "circular":
data.setItemLayout(idx, [el.x, el.y]);
node.setLayout({
fixed: true
}, true);
circularLayout(seriesModel, "symbolSize", node, [e.offsetX, e.offsetY]);
_this.updateLayout(seriesModel);
break;
case "none":
default:
data.setItemLayout(idx, [el.x, el.y]);
simpleLayoutEdge(seriesModel.getGraph(), seriesModel);
_this.updateLayout(seriesModel);
break;
}
}).on("dragend", function() {
if (forceLayout2) {
forceLayout2.setUnfixed(idx);
}
});
}
el.setDraggable(draggable, !!itemModel.get("cursor"));
var focus = itemModel.get(["emphasis", "focus"]);
if (focus === "adjacency") {
getECData(el).focus = node.getAdjacentDataIndices();
}
});
data.graph.eachEdge(function(edge) {
var el = edge.getGraphicEl();
var focus = edge.getModel().get(["emphasis", "focus"]);
if (!el) {
return;
}
if (focus === "adjacency") {
getECData(el).focus = {
edge: [edge.dataIndex],
node: [edge.node1.dataIndex, edge.node2.dataIndex]
};
}
});
var circularRotateLabel = seriesModel.get("layout") === "circular" && seriesModel.get(["circular", "rotateLabel"]);
var cx = data.getLayout("cx");
var cy = data.getLayout("cy");
data.graph.eachNode(function(node) {
rotateNodeLabel(node, circularRotateLabel, cx, cy);
});
this._firstRender = false;
};
GraphView2.prototype.dispose = function() {
this.remove();
this._controller && this._controller.dispose();
this._controllerHost = null;
};
GraphView2.prototype._startForceLayoutIteration = function(forceLayout2, layoutAnimation) {
var self = this;
(function step() {
forceLayout2.step(function(stopped) {
self.updateLayout(self._model);
(self._layouting = !stopped) && (layoutAnimation ? self._layoutTimeout = setTimeout(step, 16) : step());
});
})();
};
GraphView2.prototype._updateController = function(seriesModel, ecModel, api) {
var _this = this;
var controller = this._controller;
var controllerHost = this._controllerHost;
var group = this.group;
controller.setPointerChecker(function(e, x, y) {
var rect = group.getBoundingRect();
rect.applyTransform(group.transform);
return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel);
});
if (!isViewCoordSys(seriesModel.coordinateSystem)) {
controller.disable();
return;
}
controller.enable(seriesModel.get("roam"));
controllerHost.zoomLimit = seriesModel.get("scaleLimit");
controllerHost.zoom = seriesModel.coordinateSystem.getZoom();
controller.off("pan").off("zoom").on("pan", function(e) {
updateViewOnPan(controllerHost, e.dx, e.dy);
api.dispatchAction({
seriesId: seriesModel.id,
type: "graphRoam",
dx: e.dx,
dy: e.dy
});
}).on("zoom", function(e) {
updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
api.dispatchAction({
seriesId: seriesModel.id,
type: "graphRoam",
zoom: e.scale,
originX: e.originX,
originY: e.originY
});
_this._updateNodeAndLinkScale();
adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));
_this._lineDraw.updateLayout();
api.updateLabelLayout();
});
};
GraphView2.prototype._updateNodeAndLinkScale = function() {
var seriesModel = this._model;
var data = seriesModel.getData();
var nodeScale = getNodeGlobalScale(seriesModel);
data.eachItemGraphicEl(function(el, idx) {
el && el.setSymbolScale(nodeScale);
});
};
GraphView2.prototype.updateLayout = function(seriesModel) {
adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));
this._symbolDraw.updateLayout();
this._lineDraw.updateLayout();
};
GraphView2.prototype.remove = function() {
clearTimeout(this._layoutTimeout);
this._layouting = false;
this._layoutTimeout = null;
this._symbolDraw && this._symbolDraw.remove();
this._lineDraw && this._lineDraw.remove();
};
GraphView2.type = "graph";
return GraphView2;
})(ChartView)
);
function generateNodeKey(id) {
return "_EC_" + id;
}
var Graph = (
/** @class */
(function() {
function Graph2(directed) {
this.type = "graph";
this.nodes = [];
this.edges = [];
this._nodesMap = {};
this._edgesMap = {};
this._directed = directed || false;
}
Graph2.prototype.isDirected = function() {
return this._directed;
};
Graph2.prototype.addNode = function(id, dataIndex) {
id = id == null ? "" + dataIndex : "" + id;
var nodesMap = this._nodesMap;
if (nodesMap[generateNodeKey(id)]) {
return;
}
var node = new GraphNode(id, dataIndex);
node.hostGraph = this;
this.nodes.push(node);
nodesMap[generateNodeKey(id)] = node;
return node;
};
Graph2.prototype.getNodeByIndex = function(dataIndex) {
var rawIdx = this.data.getRawIndex(dataIndex);
return this.nodes[rawIdx];
};
Graph2.prototype.getNodeById = function(id) {
return this._nodesMap[generateNodeKey(id)];
};
Graph2.prototype.addEdge = function(n1, n2, dataIndex) {
var nodesMap = this._nodesMap;
var edgesMap = this._edgesMap;
if (isNumber(n1)) {
n1 = this.nodes[n1];
}
if (isNumber(n2)) {
n2 = this.nodes[n2];
}
if (!(n1 instanceof GraphNode)) {
n1 = nodesMap[generateNodeKey(n1)];
}
if (!(n2 instanceof GraphNode)) {
n2 = nodesMap[generateNodeKey(n2)];
}
if (!n1 || !n2) {
return;
}
var key = n1.id + "-" + n2.id;
var edge = new GraphEdge(n1, n2, dataIndex);
edge.hostGraph = this;
if (this._directed) {
n1.outEdges.push(edge);
n2.inEdges.push(edge);
}
n1.edges.push(edge);
if (n1 !== n2) {
n2.edges.push(edge);
}
this.edges.push(edge);
edgesMap[key] = edge;
return edge;
};
Graph2.prototype.getEdgeByIndex = function(dataIndex) {
var rawIdx = this.edgeData.getRawIndex(dataIndex);
return this.edges[rawIdx];
};
Graph2.prototype.getEdge = function(n1, n2) {
if (n1 instanceof GraphNode) {
n1 = n1.id;
}
if (n2 instanceof GraphNode) {
n2 = n2.id;
}
var edgesMap = this._edgesMap;
if (this._directed) {
return edgesMap[n1 + "-" + n2];
} else {
return edgesMap[n1 + "-" + n2] || edgesMap[n2 + "-" + n1];
}
};
Graph2.prototype.eachNode = function(cb, context) {
var nodes = this.nodes;
var len2 = nodes.length;
for (var i = 0; i < len2; i++) {
if (nodes[i].dataIndex >= 0) {
cb.call(context, nodes[i], i);
}
}
};
Graph2.prototype.eachEdge = function(cb, context) {
var edges = this.edges;
var len2 = edges.length;
for (var i = 0; i < len2; i++) {
if (edges[i].dataIndex >= 0 && edges[i].node1.dataIndex >= 0 && edges[i].node2.dataIndex >= 0) {
cb.call(context, edges[i], i);
}
}
};
Graph2.prototype.breadthFirstTraverse = function(cb, startNode, direction, context) {
if (!(startNode instanceof GraphNode)) {
startNode = this._nodesMap[generateNodeKey(startNode)];
}
if (!startNode) {
return;
}
var edgeType = direction === "out" ? "outEdges" : direction === "in" ? "inEdges" : "edges";
for (var i = 0; i < this.nodes.length; i++) {
this.nodes[i].__visited = false;
}
if (cb.call(context, startNode, null)) {
return;
}
var queue = [startNode];
while (queue.length) {
var currentNode = queue.shift();
var edges = currentNode[edgeType];
for (var i = 0; i < edges.length; i++) {
var e = edges[i];
var otherNode = e.node1 === currentNode ? e.node2 : e.node1;
if (!otherNode.__visited) {
if (cb.call(context, otherNode, currentNode)) {
return;
}
queue.push(otherNode);
otherNode.__visited = true;
}
}
}
};
Graph2.prototype.update = function() {
var data = this.data;
var edgeData = this.edgeData;
var nodes = this.nodes;
var edges = this.edges;
for (var i = 0, len2 = nodes.length; i < len2; i++) {
nodes[i].dataIndex = -1;
}
for (var i = 0, len2 = data.count(); i < len2; i++) {
nodes[data.getRawIndex(i)].dataIndex = i;
}
edgeData.filterSelf(function(idx) {
var edge = edges[edgeData.getRawIndex(idx)];
return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;
});
for (var i = 0, len2 = edges.length; i < len2; i++) {
edges[i].dataIndex = -1;
}
for (var i = 0, len2 = edgeData.count(); i < len2; i++) {
edges[edgeData.getRawIndex(i)].dataIndex = i;
}
};
Graph2.prototype.clone = function() {
var graph = new Graph2(this._directed);
var nodes = this.nodes;
var edges = this.edges;
for (var i = 0; i < nodes.length; i++) {
graph.addNode(nodes[i].id, nodes[i].dataIndex);
}
for (var i = 0; i < edges.length; i++) {
var e = edges[i];
graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);
}
return graph;
};
return Graph2;
})()
);
var GraphNode = (
/** @class */
(function() {
function GraphNode2(id, dataIndex) {
this.inEdges = [];
this.outEdges = [];
this.edges = [];
this.dataIndex = -1;
this.id = id == null ? "" : id;
this.dataIndex = dataIndex == null ? -1 : dataIndex;
}
GraphNode2.prototype.degree = function() {
return this.edges.length;
};
GraphNode2.prototype.inDegree = function() {
return this.inEdges.length;
};
GraphNode2.prototype.outDegree = function() {
return this.outEdges.length;
};
GraphNode2.prototype.getModel = function(path) {
if (this.dataIndex < 0) {
return;
}
var graph = this.hostGraph;
var itemModel = graph.data.getItemModel(this.dataIndex);
return itemModel.getModel(path);
};
GraphNode2.prototype.getAdjacentDataIndices = function() {
var dataIndices = {
edge: [],
node: []
};
for (var i = 0; i < this.edges.length; i++) {
var adjacentEdge = this.edges[i];
if (adjacentEdge.dataIndex < 0) {
continue;
}
dataIndices.edge.push(adjacentEdge.dataIndex);
dataIndices.node.push(adjacentEdge.node1.dataIndex, adjacentEdge.node2.dataIndex);
}
return dataIndices;
};
GraphNode2.prototype.getTrajectoryDataIndices = function() {
var connectedEdgesMap = createHashMap();
var connectedNodesMap = createHashMap();
for (var i = 0; i < this.edges.length; i++) {
var adjacentEdge = this.edges[i];
if (adjacentEdge.dataIndex < 0) {
continue;
}
connectedEdgesMap.set(adjacentEdge.dataIndex, true);
var sourceNodesQueue = [adjacentEdge.node1];
var targetNodesQueue = [adjacentEdge.node2];
var nodeIteratorIndex = 0;
while (nodeIteratorIndex < sourceNodesQueue.length) {
var sourceNode = sourceNodesQueue[nodeIteratorIndex];
nodeIteratorIndex++;
connectedNodesMap.set(sourceNode.dataIndex, true);
for (var j = 0; j < sourceNode.inEdges.length; j++) {
connectedEdgesMap.set(sourceNode.inEdges[j].dataIndex, true);
sourceNodesQueue.push(sourceNode.inEdges[j].node1);
}
}
nodeIteratorIndex = 0;
while (nodeIteratorIndex < targetNodesQueue.length) {
var targetNode = targetNodesQueue[nodeIteratorIndex];
nodeIteratorIndex++;
connectedNodesMap.set(targetNode.dataIndex, true);
for (var j = 0; j < targetNode.outEdges.length; j++) {
connectedEdgesMap.set(targetNode.outEdges[j].dataIndex, true);
targetNodesQueue.push(targetNode.outEdges[j].node2);
}
}
}
return {
edge: connectedEdgesMap.keys(),
node: connectedNodesMap.keys()
};
};
return GraphNode2;
})()
);
var GraphEdge = (
/** @class */
(function() {
function GraphEdge2(n1, n2, dataIndex) {
this.dataIndex = -1;
this.node1 = n1;
this.node2 = n2;
this.dataIndex = dataIndex == null ? -1 : dataIndex;
}
GraphEdge2.prototype.getModel = function(path) {
if (this.dataIndex < 0) {
return;
}
var graph = this.hostGraph;
var itemModel = graph.edgeData.getItemModel(this.dataIndex);
return itemModel.getModel(path);
};
GraphEdge2.prototype.getAdjacentDataIndices = function() {
return {
edge: [this.dataIndex],
node: [this.node1.dataIndex, this.node2.dataIndex]
};
};
GraphEdge2.prototype.getTrajectoryDataIndices = function() {
var connectedEdgesMap = createHashMap();
var connectedNodesMap = createHashMap();
connectedEdgesMap.set(this.dataIndex, true);
var sourceNodes = [this.node1];
var targetNodes = [this.node2];
var nodeIteratorIndex = 0;
while (nodeIteratorIndex < sourceNodes.length) {
var sourceNode = sourceNodes[nodeIteratorIndex];
nodeIteratorIndex++;
connectedNodesMap.set(sourceNode.dataIndex, true);
for (var j = 0; j < sourceNode.inEdges.length; j++) {
connectedEdgesMap.set(sourceNode.inEdges[j].dataIndex, true);
sourceNodes.push(sourceNode.inEdges[j].node1);
}
}
nodeIteratorIndex = 0;
while (nodeIteratorIndex < targetNodes.length) {
var targetNode = targetNodes[nodeIteratorIndex];
nodeIteratorIndex++;
connectedNodesMap.set(targetNode.dataIndex, true);
for (var j = 0; j < targetNode.outEdges.length; j++) {
connectedEdgesMap.set(targetNode.outEdges[j].dataIndex, true);
targetNodes.push(targetNode.outEdges[j].node2);
}
}
return {
edge: connectedEdgesMap.keys(),
node: connectedNodesMap.keys()
};
};
return GraphEdge2;
})()
);
function createGraphDataProxyMixin(hostName, dataName) {
return {
/**
* @param Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.
*/
getValue: function(dimension) {
var data = this[hostName][dataName];
return data.getStore().get(data.getDimensionIndex(dimension || "value"), this.dataIndex);
},
// TODO: TYPE stricter type.
setVisual: function(key, value) {
this.dataIndex >= 0 && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);
},
getVisual: function(key) {
return this[hostName][dataName].getItemVisual(this.dataIndex, key);
},
setLayout: function(layout2, merge2) {
this.dataIndex >= 0 && this[hostName][dataName].setItemLayout(this.dataIndex, layout2, merge2);
},
getLayout: function() {
return this[hostName][dataName].getItemLayout(this.dataIndex);
},
getGraphicEl: function() {
return this[hostName][dataName].getItemGraphicEl(this.dataIndex);
},
getRawIndex: function() {
return this[hostName][dataName].getRawIndex(this.dataIndex);
}
};
}
mixin(GraphNode, createGraphDataProxyMixin("hostGraph", "data"));
mixin(GraphEdge, createGraphDataProxyMixin("hostGraph", "edgeData"));
function createGraphFromNodeEdge(nodes, edges, seriesModel, directed, beforeLink) {
var graph = new Graph(directed);
for (var i = 0; i < nodes.length; i++) {
graph.addNode(retrieve(
// Id, name, dataIndex
nodes[i].id,
nodes[i].name,
i
), i);
}
var linkNameList = [];
var validEdges = [];
var linkCount = 0;
for (var i = 0; i < edges.length; i++) {
var link = edges[i];
var source = link.source;
var target = link.target;
if (graph.addEdge(source, target, linkCount)) {
validEdges.push(link);
linkNameList.push(retrieve(convertOptionIdName(link.id, null), source + " > " + target));
linkCount++;
}
}
var coordSys = seriesModel.get("coordinateSystem");
var nodeData;
if (coordSys === "cartesian2d" || coordSys === "polar") {
nodeData = createSeriesData(nodes, seriesModel);
} else {
var coordSysCtor = CoordinateSystemManager.get(coordSys);
var coordDimensions = coordSysCtor ? coordSysCtor.dimensions || [] : [];
if (indexOf(coordDimensions, "value") < 0) {
coordDimensions.concat(["value"]);
}
var dimensions = prepareSeriesDataSchema(nodes, {
coordDimensions,
encodeDefine: seriesModel.getEncode()
}).dimensions;
nodeData = new SeriesData(dimensions, seriesModel);
nodeData.initData(nodes);
}
var edgeData = new SeriesData(["value"], seriesModel);
edgeData.initData(validEdges, linkNameList);
beforeLink && beforeLink(nodeData, edgeData);
linkSeriesData({
mainData: nodeData,
struct: graph,
structAttr: "graph",
datas: {
node: nodeData,
edge: edgeData
},
datasAttr: {
node: "data",
edge: "edgeData"
}
});
graph.update();
return graph;
}
var GraphSeriesModel = (
/** @class */
(function(_super) {
__extends(GraphSeriesModel2, _super);
function GraphSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GraphSeriesModel2.type;
_this.hasSymbolVisual = true;
return _this;
}
GraphSeriesModel2.prototype.init = function(option) {
_super.prototype.init.apply(this, arguments);
var self = this;
function getCategoriesData() {
return self._categoriesData;
}
this.legendVisualProvider = new LegendVisualProvider(getCategoriesData, getCategoriesData);
this.fillDataTextStyle(option.edges || option.links);
this._updateCategoriesData();
};
GraphSeriesModel2.prototype.mergeOption = function(option) {
_super.prototype.mergeOption.apply(this, arguments);
this.fillDataTextStyle(option.edges || option.links);
this._updateCategoriesData();
};
GraphSeriesModel2.prototype.mergeDefaultAndTheme = function(option) {
_super.prototype.mergeDefaultAndTheme.apply(this, arguments);
defaultEmphasis(option, "edgeLabel", ["show"]);
};
GraphSeriesModel2.prototype.getInitialData = function(option, ecModel) {
var edges = option.edges || option.links || [];
var nodes = option.data || option.nodes || [];
var self = this;
if (nodes && edges) {
initCurvenessList(this);
var graph = createGraphFromNodeEdge(nodes, edges, this, true, beforeLink);
each$f(graph.edges, function(edge) {
createEdgeMapForCurveness(edge.node1, edge.node2, this, edge.dataIndex);
}, this);
return graph.data;
}
function beforeLink(nodeData, edgeData) {
nodeData.wrapMethod("getItemModel", function(model) {
var categoriesModels = self._categoriesModels;
var categoryIdx = model.getShallow("category");
var categoryModel = categoriesModels[categoryIdx];
if (categoryModel) {
categoryModel.parentModel = model.parentModel;
model.parentModel = categoryModel;
}
return model;
});
var oldGetModel = Model.prototype.getModel;
function newGetModel(path, parentModel) {
var model = oldGetModel.call(this, path, parentModel);
model.resolveParentPath = resolveParentPath;
return model;
}
edgeData.wrapMethod("getItemModel", function(model) {
model.resolveParentPath = resolveParentPath;
model.getModel = newGetModel;
return model;
});
function resolveParentPath(pathArr) {
if (pathArr && (pathArr[0] === "label" || pathArr[1] === "label")) {
var newPathArr = pathArr.slice();
if (pathArr[0] === "label") {
newPathArr[0] = "edgeLabel";
} else if (pathArr[1] === "label") {
newPathArr[1] = "edgeLabel";
}
return newPathArr;
}
return pathArr;
}
}
};
GraphSeriesModel2.prototype.getGraph = function() {
return this.getData().graph;
};
GraphSeriesModel2.prototype.getEdgeData = function() {
return this.getGraph().edgeData;
};
GraphSeriesModel2.prototype.getCategoriesData = function() {
return this._categoriesData;
};
GraphSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
if (dataType === "edge") {
var nodeData = this.getData();
var params = this.getDataParams(dataIndex, dataType);
var edge = nodeData.graph.getEdgeByIndex(dataIndex);
var sourceName = nodeData.getName(edge.node1.dataIndex);
var targetName = nodeData.getName(edge.node2.dataIndex);
var nameArr = [];
sourceName != null && nameArr.push(sourceName);
targetName != null && nameArr.push(targetName);
return createTooltipMarkup("nameValue", {
name: nameArr.join(" > "),
value: params.value,
noValue: params.value == null
});
}
var nodeMarkup = defaultSeriesFormatTooltip({
series: this,
dataIndex,
multipleSeries
});
return nodeMarkup;
};
GraphSeriesModel2.prototype._updateCategoriesData = function() {
var categories = map$1(this.option.categories || [], function(category) {
return category.value != null ? category : extend({
value: 0
}, category);
});
var categoriesData = new SeriesData(["value"], this);
categoriesData.initData(categories);
this._categoriesData = categoriesData;
this._categoriesModels = categoriesData.mapArray(function(idx) {
return categoriesData.getItemModel(idx);
});
};
GraphSeriesModel2.prototype.setZoom = function(zoom) {
this.option.zoom = zoom;
};
GraphSeriesModel2.prototype.setCenter = function(center2) {
this.option.center = center2;
};
GraphSeriesModel2.prototype.isAnimationEnabled = function() {
return _super.prototype.isAnimationEnabled.call(this) && !(this.get("layout") === "force" && this.get(["force", "layoutAnimation"]));
};
GraphSeriesModel2.type = "series.graph";
GraphSeriesModel2.dependencies = ["grid", "polar", "geo", "singleAxis", "calendar"];
GraphSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "view",
// Default option for all coordinate systems
// xAxisIndex: 0,
// yAxisIndex: 0,
// polarIndex: 0,
// geoIndex: 0,
legendHoverLink: true,
layout: null,
// Configuration of circular layout
circular: {
rotateLabel: false
},
// Configuration of force directed layout
force: {
initLayout: null,
// Node repulsion. Can be an array to represent range.
repulsion: [0, 50],
gravity: 0.1,
// Initial friction
friction: 0.6,
// Edge length. Can be an array to represent range.
edgeLength: 30,
layoutAnimation: true
},
left: "center",
top: "center",
// right: null,
// bottom: null,
// width: '80%',
// height: '80%',
symbol: "circle",
symbolSize: 10,
edgeSymbol: ["none", "none"],
edgeSymbolSize: 10,
edgeLabel: {
position: "middle",
distance: 5
},
draggable: false,
roam: false,
// Default on center of graph
center: null,
zoom: 1,
// Symbol size scale ratio in roam
nodeScaleRatio: 0.6,
// cursor: null,
// categories: [],
// data: []
// Or
// nodes: []
//
// links: []
// Or
// edges: []
label: {
show: false,
formatter: "{b}"
},
itemStyle: {},
lineStyle: {
color: "#aaa",
width: 1,
opacity: 0.5
},
emphasis: {
scale: true,
label: {
show: true
}
},
select: {
itemStyle: {
borderColor: "#212121"
}
}
};
return GraphSeriesModel2;
})(SeriesModel)
);
var actionInfo$1 = {
type: "graphRoam",
event: "graphRoam",
update: "none"
};
function install$H(registers) {
registers.registerChartView(GraphView);
registers.registerSeriesModel(GraphSeriesModel);
registers.registerProcessor(categoryFilter);
registers.registerVisual(categoryVisual);
registers.registerVisual(graphEdgeVisual);
registers.registerLayout(graphSimpleLayout);
registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, graphCircularLayout);
registers.registerLayout(graphForceLayout);
registers.registerCoordinateSystem("graphView", {
dimensions: View.dimensions,
create: createViewCoordSys
});
registers.registerAction({
type: "focusNodeAdjacency",
event: "focusNodeAdjacency",
update: "series:focusNodeAdjacency"
}, noop);
registers.registerAction({
type: "unfocusNodeAdjacency",
event: "unfocusNodeAdjacency",
update: "series:unfocusNodeAdjacency"
}, noop);
registers.registerAction(actionInfo$1, function(payload, ecModel, api) {
ecModel.eachComponent({
mainType: "series",
query: payload
}, function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var res = updateCenterAndZoom(coordSys, payload, void 0, api);
seriesModel.setCenter && seriesModel.setCenter(res.center);
seriesModel.setZoom && seriesModel.setZoom(res.zoom);
});
});
}
var PointerShape = (
/** @class */
/* @__PURE__ */ (function() {
function PointerShape2() {
this.angle = 0;
this.width = 10;
this.r = 10;
this.x = 0;
this.y = 0;
}
return PointerShape2;
})()
);
var PointerPath = (
/** @class */
(function(_super) {
__extends(PointerPath2, _super);
function PointerPath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "pointer";
return _this;
}
PointerPath2.prototype.getDefaultShape = function() {
return new PointerShape();
};
PointerPath2.prototype.buildPath = function(ctx, shape) {
var mathCos = Math.cos;
var mathSin = Math.sin;
var r = shape.r;
var width = shape.width;
var angle = shape.angle;
var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);
var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);
angle = shape.angle - Math.PI / 2;
ctx.moveTo(x, y);
ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width);
ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r);
ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width);
ctx.lineTo(x, y);
};
return PointerPath2;
})(Path)
);
function parsePosition(seriesModel, api) {
var center2 = seriesModel.get("center");
var width = api.getWidth();
var height = api.getHeight();
var size = Math.min(width, height);
var cx = parsePercent(center2[0], api.getWidth());
var cy = parsePercent(center2[1], api.getHeight());
var r = parsePercent(seriesModel.get("radius"), size / 2);
return {
cx,
cy,
r
};
}
function formatLabel(value, labelFormatter) {
var label = value == null ? "" : value + "";
if (labelFormatter) {
if (isString(labelFormatter)) {
label = labelFormatter.replace("{value}", label);
} else if (isFunction(labelFormatter)) {
label = labelFormatter(value);
}
}
return label;
}
var GaugeView = (
/** @class */
(function(_super) {
__extends(GaugeView2, _super);
function GaugeView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GaugeView2.type;
return _this;
}
GaugeView2.prototype.render = function(seriesModel, ecModel, api) {
this.group.removeAll();
var colorList = seriesModel.get(["axisLine", "lineStyle", "color"]);
var posInfo = parsePosition(seriesModel, api);
this._renderMain(seriesModel, ecModel, api, colorList, posInfo);
this._data = seriesModel.getData();
};
GaugeView2.prototype.dispose = function() {
};
GaugeView2.prototype._renderMain = function(seriesModel, ecModel, api, colorList, posInfo) {
var group = this.group;
var clockwise = seriesModel.get("clockwise");
var startAngle = -seriesModel.get("startAngle") / 180 * Math.PI;
var endAngle = -seriesModel.get("endAngle") / 180 * Math.PI;
var axisLineModel = seriesModel.getModel("axisLine");
var roundCap = axisLineModel.get("roundCap");
var MainPath = roundCap ? SausagePath : Sector;
var showAxis = axisLineModel.get("show");
var lineStyleModel = axisLineModel.getModel("lineStyle");
var axisLineWidth = lineStyleModel.get("width");
var angles = [startAngle, endAngle];
normalizeArcAngles(angles, !clockwise);
startAngle = angles[0];
endAngle = angles[1];
var angleRangeSpan = endAngle - startAngle;
var prevEndAngle = startAngle;
var sectors = [];
for (var i = 0; showAxis && i < colorList.length; i++) {
var percent = Math.min(Math.max(colorList[i][0], 0), 1);
endAngle = startAngle + angleRangeSpan * percent;
var sector = new MainPath({
shape: {
startAngle: prevEndAngle,
endAngle,
cx: posInfo.cx,
cy: posInfo.cy,
clockwise,
r0: posInfo.r - axisLineWidth,
r: posInfo.r
},
silent: true
});
sector.setStyle({
fill: colorList[i][1]
});
sector.setStyle(lineStyleModel.getLineStyle(
// Because we use sector to simulate arc
// so the properties for stroking are useless
["color", "width"]
));
sectors.push(sector);
prevEndAngle = endAngle;
}
sectors.reverse();
each$f(sectors, function(sector2) {
return group.add(sector2);
});
var getColor2 = function(percent2) {
if (percent2 <= 0) {
return colorList[0][1];
}
var i2;
for (i2 = 0; i2 < colorList.length; i2++) {
if (colorList[i2][0] >= percent2 && (i2 === 0 ? 0 : colorList[i2 - 1][0]) < percent2) {
return colorList[i2][1];
}
}
return colorList[i2 - 1][1];
};
this._renderTicks(seriesModel, ecModel, api, getColor2, posInfo, startAngle, endAngle, clockwise, axisLineWidth);
this._renderTitleAndDetail(seriesModel, ecModel, api, getColor2, posInfo);
this._renderAnchor(seriesModel, posInfo);
this._renderPointer(seriesModel, ecModel, api, getColor2, posInfo, startAngle, endAngle, clockwise, axisLineWidth);
};
GaugeView2.prototype._renderTicks = function(seriesModel, ecModel, api, getColor2, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {
var group = this.group;
var cx = posInfo.cx;
var cy = posInfo.cy;
var r = posInfo.r;
var minVal = +seriesModel.get("min");
var maxVal = +seriesModel.get("max");
var splitLineModel = seriesModel.getModel("splitLine");
var tickModel = seriesModel.getModel("axisTick");
var labelModel = seriesModel.getModel("axisLabel");
var splitNumber = seriesModel.get("splitNumber");
var subSplitNumber = tickModel.get("splitNumber");
var splitLineLen = parsePercent(splitLineModel.get("length"), r);
var tickLen = parsePercent(tickModel.get("length"), r);
var angle = startAngle;
var step = (endAngle - startAngle) / splitNumber;
var subStep = step / subSplitNumber;
var splitLineStyle = splitLineModel.getModel("lineStyle").getLineStyle();
var tickLineStyle = tickModel.getModel("lineStyle").getLineStyle();
var splitLineDistance = splitLineModel.get("distance");
var unitX;
var unitY;
for (var i = 0; i <= splitNumber; i++) {
unitX = Math.cos(angle);
unitY = Math.sin(angle);
if (splitLineModel.get("show")) {
var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth;
var splitLine = new Line$1({
shape: {
x1: unitX * (r - distance) + cx,
y1: unitY * (r - distance) + cy,
x2: unitX * (r - splitLineLen - distance) + cx,
y2: unitY * (r - splitLineLen - distance) + cy
},
style: splitLineStyle,
silent: true
});
if (splitLineStyle.stroke === "auto") {
splitLine.setStyle({
stroke: getColor2(i / splitNumber)
});
}
group.add(splitLine);
}
if (labelModel.get("show")) {
var distance = labelModel.get("distance") + splitLineDistance;
var label = formatLabel(round$1(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get("formatter"));
var autoColor = getColor2(i / splitNumber);
var textStyleX = unitX * (r - splitLineLen - distance) + cx;
var textStyleY = unitY * (r - splitLineLen - distance) + cy;
var rotateType = labelModel.get("rotate");
var rotate2 = 0;
if (rotateType === "radial") {
rotate2 = -angle + 2 * Math.PI;
if (rotate2 > Math.PI / 2) {
rotate2 += Math.PI;
}
} else if (rotateType === "tangential") {
rotate2 = -angle - Math.PI / 2;
} else if (isNumber(rotateType)) {
rotate2 = rotateType * Math.PI / 180;
}
if (rotate2 === 0) {
group.add(new ZRText({
style: createTextStyle(labelModel, {
text: label,
x: textStyleX,
y: textStyleY,
verticalAlign: unitY < -0.8 ? "top" : unitY > 0.8 ? "bottom" : "middle",
align: unitX < -0.4 ? "left" : unitX > 0.4 ? "right" : "center"
}, {
inheritColor: autoColor
}),
silent: true
}));
} else {
group.add(new ZRText({
style: createTextStyle(labelModel, {
text: label,
x: textStyleX,
y: textStyleY,
verticalAlign: "middle",
align: "center"
}, {
inheritColor: autoColor
}),
silent: true,
originX: textStyleX,
originY: textStyleY,
rotation: rotate2
}));
}
}
if (tickModel.get("show") && i !== splitNumber) {
var distance = tickModel.get("distance");
distance = distance ? distance + axisLineWidth : axisLineWidth;
for (var j = 0; j <= subSplitNumber; j++) {
unitX = Math.cos(angle);
unitY = Math.sin(angle);
var tickLine = new Line$1({
shape: {
x1: unitX * (r - distance) + cx,
y1: unitY * (r - distance) + cy,
x2: unitX * (r - tickLen - distance) + cx,
y2: unitY * (r - tickLen - distance) + cy
},
silent: true,
style: tickLineStyle
});
if (tickLineStyle.stroke === "auto") {
tickLine.setStyle({
stroke: getColor2((i + j / subSplitNumber) / splitNumber)
});
}
group.add(tickLine);
angle += subStep;
}
angle -= subStep;
} else {
angle += step;
}
}
};
GaugeView2.prototype._renderPointer = function(seriesModel, ecModel, api, getColor2, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {
var group = this.group;
var oldData = this._data;
var oldProgressData = this._progressEls;
var progressList = [];
var showPointer2 = seriesModel.get(["pointer", "show"]);
var progressModel = seriesModel.getModel("progress");
var showProgress = progressModel.get("show");
var data = seriesModel.getData();
var valueDim = data.mapDimension("value");
var minVal = +seriesModel.get("min");
var maxVal = +seriesModel.get("max");
var valueExtent = [minVal, maxVal];
var angleExtent = [startAngle, endAngle];
function createPointer(idx, angle) {
var itemModel = data.getItemModel(idx);
var pointerModel = itemModel.getModel("pointer");
var pointerWidth = parsePercent(pointerModel.get("width"), posInfo.r);
var pointerLength = parsePercent(pointerModel.get("length"), posInfo.r);
var pointerStr = seriesModel.get(["pointer", "icon"]);
var pointerOffset = pointerModel.get("offsetCenter");
var pointerOffsetX = parsePercent(pointerOffset[0], posInfo.r);
var pointerOffsetY = parsePercent(pointerOffset[1], posInfo.r);
var pointerKeepAspect = pointerModel.get("keepAspect");
var pointer;
if (pointerStr) {
pointer = createSymbol$1(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect);
} else {
pointer = new PointerPath({
shape: {
angle: -Math.PI / 2,
width: pointerWidth,
r: pointerLength,
x: pointerOffsetX,
y: pointerOffsetY
}
});
}
pointer.rotation = -(angle + Math.PI / 2);
pointer.x = posInfo.cx;
pointer.y = posInfo.cy;
return pointer;
}
function createProgress(idx, endAngle2) {
var roundCap = progressModel.get("roundCap");
var ProgressPath = roundCap ? SausagePath : Sector;
var isOverlap = progressModel.get("overlap");
var progressWidth = isOverlap ? progressModel.get("width") : axisLineWidth / data.count();
var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth;
var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth;
var progress = new ProgressPath({
shape: {
startAngle,
endAngle: endAngle2,
cx: posInfo.cx,
cy: posInfo.cy,
clockwise,
r0,
r
}
});
isOverlap && (progress.z2 = linearMap$2(data.get(valueDim, idx), [minVal, maxVal], [100, 0], true));
return progress;
}
if (showProgress || showPointer2) {
data.diff(oldData).add(function(idx) {
var val = data.get(valueDim, idx);
if (showPointer2) {
var pointer = createPointer(idx, startAngle);
initProps(pointer, {
rotation: -((isNaN(+val) ? angleExtent[0] : linearMap$2(val, valueExtent, angleExtent, true)) + Math.PI / 2)
}, seriesModel);
group.add(pointer);
data.setItemGraphicEl(idx, pointer);
}
if (showProgress) {
var progress = createProgress(idx, startAngle);
var isClip = progressModel.get("clip");
initProps(progress, {
shape: {
endAngle: linearMap$2(val, valueExtent, angleExtent, isClip)
}
}, seriesModel);
group.add(progress);
setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress);
progressList[idx] = progress;
}
}).update(function(newIdx, oldIdx) {
var val = data.get(valueDim, newIdx);
if (showPointer2) {
var previousPointer = oldData.getItemGraphicEl(oldIdx);
var previousRotate = previousPointer ? previousPointer.rotation : startAngle;
var pointer = createPointer(newIdx, previousRotate);
pointer.rotation = previousRotate;
updateProps$1(pointer, {
rotation: -((isNaN(+val) ? angleExtent[0] : linearMap$2(val, valueExtent, angleExtent, true)) + Math.PI / 2)
}, seriesModel);
group.add(pointer);
data.setItemGraphicEl(newIdx, pointer);
}
if (showProgress) {
var previousProgress = oldProgressData[oldIdx];
var previousEndAngle = previousProgress ? previousProgress.shape.endAngle : startAngle;
var progress = createProgress(newIdx, previousEndAngle);
var isClip = progressModel.get("clip");
updateProps$1(progress, {
shape: {
endAngle: linearMap$2(val, valueExtent, angleExtent, isClip)
}
}, seriesModel);
group.add(progress);
setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress);
progressList[newIdx] = progress;
}
}).execute();
data.each(function(idx) {
var itemModel = data.getItemModel(idx);
var emphasisModel = itemModel.getModel("emphasis");
var focus = emphasisModel.get("focus");
var blurScope = emphasisModel.get("blurScope");
var emphasisDisabled = emphasisModel.get("disabled");
if (showPointer2) {
var pointer = data.getItemGraphicEl(idx);
var symbolStyle = data.getItemVisual(idx, "style");
var visualColor = symbolStyle.fill;
if (pointer instanceof ZRImage) {
var pathStyle = pointer.style;
pointer.useStyle(extend({
image: pathStyle.image,
x: pathStyle.x,
y: pathStyle.y,
width: pathStyle.width,
height: pathStyle.height
}, symbolStyle));
} else {
pointer.useStyle(symbolStyle);
pointer.type !== "pointer" && pointer.setColor(visualColor);
}
pointer.setStyle(itemModel.getModel(["pointer", "itemStyle"]).getItemStyle());
if (pointer.style.fill === "auto") {
pointer.setStyle("fill", getColor2(linearMap$2(data.get(valueDim, idx), valueExtent, [0, 1], true)));
}
pointer.z2EmphasisLift = 0;
setStatesStylesFromModel(pointer, itemModel);
toggleHoverEmphasis(pointer, focus, blurScope, emphasisDisabled);
}
if (showProgress) {
var progress = progressList[idx];
progress.useStyle(data.getItemVisual(idx, "style"));
progress.setStyle(itemModel.getModel(["progress", "itemStyle"]).getItemStyle());
progress.z2EmphasisLift = 0;
setStatesStylesFromModel(progress, itemModel);
toggleHoverEmphasis(progress, focus, blurScope, emphasisDisabled);
}
});
this._progressEls = progressList;
}
};
GaugeView2.prototype._renderAnchor = function(seriesModel, posInfo) {
var anchorModel = seriesModel.getModel("anchor");
var showAnchor = anchorModel.get("show");
if (showAnchor) {
var anchorSize = anchorModel.get("size");
var anchorType = anchorModel.get("icon");
var offsetCenter = anchorModel.get("offsetCenter");
var anchorKeepAspect = anchorModel.get("keepAspect");
var anchor = createSymbol$1(anchorType, posInfo.cx - anchorSize / 2 + parsePercent(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect);
anchor.z2 = anchorModel.get("showAbove") ? 1 : 0;
anchor.setStyle(anchorModel.getModel("itemStyle").getItemStyle());
this.group.add(anchor);
}
};
GaugeView2.prototype._renderTitleAndDetail = function(seriesModel, ecModel, api, getColor2, posInfo) {
var _this = this;
var data = seriesModel.getData();
var valueDim = data.mapDimension("value");
var minVal = +seriesModel.get("min");
var maxVal = +seriesModel.get("max");
var contentGroup = new Group$3();
var newTitleEls = [];
var newDetailEls = [];
var hasAnimation = seriesModel.isAnimationEnabled();
var showPointerAbove = seriesModel.get(["pointer", "showAbove"]);
data.diff(this._data).add(function(idx) {
newTitleEls[idx] = new ZRText({
silent: true
});
newDetailEls[idx] = new ZRText({
silent: true
});
}).update(function(idx, oldIdx) {
newTitleEls[idx] = _this._titleEls[oldIdx];
newDetailEls[idx] = _this._detailEls[oldIdx];
}).execute();
data.each(function(idx) {
var itemModel = data.getItemModel(idx);
var value = data.get(valueDim, idx);
var itemGroup = new Group$3();
var autoColor = getColor2(linearMap$2(value, [minVal, maxVal], [0, 1], true));
var itemTitleModel = itemModel.getModel("title");
if (itemTitleModel.get("show")) {
var titleOffsetCenter = itemTitleModel.get("offsetCenter");
var titleX = posInfo.cx + parsePercent(titleOffsetCenter[0], posInfo.r);
var titleY = posInfo.cy + parsePercent(titleOffsetCenter[1], posInfo.r);
var labelEl = newTitleEls[idx];
labelEl.attr({
z2: showPointerAbove ? 0 : 2,
style: createTextStyle(itemTitleModel, {
x: titleX,
y: titleY,
text: data.getName(idx),
align: "center",
verticalAlign: "middle"
}, {
inheritColor: autoColor
})
});
itemGroup.add(labelEl);
}
var itemDetailModel = itemModel.getModel("detail");
if (itemDetailModel.get("show")) {
var detailOffsetCenter = itemDetailModel.get("offsetCenter");
var detailX = posInfo.cx + parsePercent(detailOffsetCenter[0], posInfo.r);
var detailY = posInfo.cy + parsePercent(detailOffsetCenter[1], posInfo.r);
var width = parsePercent(itemDetailModel.get("width"), posInfo.r);
var height = parsePercent(itemDetailModel.get("height"), posInfo.r);
var detailColor = seriesModel.get(["progress", "show"]) ? data.getItemVisual(idx, "style").fill : autoColor;
var labelEl = newDetailEls[idx];
var formatter_1 = itemDetailModel.get("formatter");
labelEl.attr({
z2: showPointerAbove ? 0 : 2,
style: createTextStyle(itemDetailModel, {
x: detailX,
y: detailY,
text: formatLabel(value, formatter_1),
width: isNaN(width) ? null : width,
height: isNaN(height) ? null : height,
align: "center",
verticalAlign: "middle"
}, {
inheritColor: detailColor
})
});
setLabelValueAnimation(labelEl, {
normal: itemDetailModel
}, value, function(value2) {
return formatLabel(value2, formatter_1);
});
hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, {
getFormattedLabel: function(labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) {
return formatLabel(extendParams ? extendParams.interpolatedValue : value, formatter_1);
}
});
itemGroup.add(labelEl);
}
contentGroup.add(itemGroup);
});
this.group.add(contentGroup);
this._titleEls = newTitleEls;
this._detailEls = newDetailEls;
};
GaugeView2.type = "gauge";
return GaugeView2;
})(ChartView)
);
var GaugeSeriesModel = (
/** @class */
(function(_super) {
__extends(GaugeSeriesModel2, _super);
function GaugeSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GaugeSeriesModel2.type;
_this.visualStyleAccessPath = "itemStyle";
return _this;
}
GaugeSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesDataSimply(this, ["value"]);
};
GaugeSeriesModel2.type = "series.gauge";
GaugeSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
colorBy: "data",
// 默认全局居中
center: ["50%", "50%"],
legendHoverLink: true,
radius: "75%",
startAngle: 225,
endAngle: -45,
clockwise: true,
// 最小值
min: 0,
// 最大值
max: 100,
// 分割段数,默认为10
splitNumber: 10,
// 坐标轴线
axisLine: {
// 默认显示,属性show控制显示与否
show: true,
roundCap: false,
lineStyle: {
color: [[1, "#E6EBF8"]],
width: 10
}
},
// 坐标轴线
progress: {
// 默认显示,属性show控制显示与否
show: false,
overlap: true,
width: 10,
roundCap: false,
clip: true
},
// 分隔线
splitLine: {
// 默认显示,属性show控制显示与否
show: true,
// 属性length控制线长
length: 10,
distance: 10,
// 属性lineStyle(详见lineStyle)控制线条样式
lineStyle: {
color: "#63677A",
width: 3,
type: "solid"
}
},
// 坐标轴小标记
axisTick: {
// 属性show控制显示与否,默认不显示
show: true,
// 每份split细分多少段
splitNumber: 5,
// 属性length控制线长
length: 6,
distance: 10,
// 属性lineStyle控制线条样式
lineStyle: {
color: "#63677A",
width: 1,
type: "solid"
}
},
axisLabel: {
show: true,
distance: 15,
// formatter: null,
color: "#464646",
fontSize: 12,
rotate: 0
},
pointer: {
icon: null,
offsetCenter: [0, 0],
show: true,
showAbove: true,
length: "60%",
width: 6,
keepAspect: false
},
anchor: {
show: false,
showAbove: false,
size: 6,
icon: "circle",
offsetCenter: [0, 0],
keepAspect: false,
itemStyle: {
color: "#fff",
borderWidth: 0,
borderColor: "#5470c6"
}
},
title: {
show: true,
// x, y,单位px
offsetCenter: [0, "20%"],
// 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: "#464646",
fontSize: 16,
valueAnimation: false
},
detail: {
show: true,
backgroundColor: "rgba(0,0,0,0)",
borderWidth: 0,
borderColor: "#ccc",
width: 100,
height: null,
padding: [5, 10],
// x, y,单位px
offsetCenter: [0, "40%"],
// formatter: null,
// 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: "#464646",
fontSize: 30,
fontWeight: "bold",
lineHeight: 30,
valueAnimation: false
}
};
return GaugeSeriesModel2;
})(SeriesModel)
);
function install$G(registers) {
registers.registerChartView(GaugeView);
registers.registerSeriesModel(GaugeSeriesModel);
}
var opacityAccessPath$1 = ["itemStyle", "opacity"];
var FunnelPiece = (
/** @class */
(function(_super) {
__extends(FunnelPiece2, _super);
function FunnelPiece2(data, idx) {
var _this = _super.call(this) || this;
var polygon = _this;
var labelLine = new Polyline$1();
var text = new ZRText();
polygon.setTextContent(text);
_this.setTextGuideLine(labelLine);
_this.updateData(data, idx, true);
return _this;
}
FunnelPiece2.prototype.updateData = function(data, idx, firstCreate) {
var polygon = this;
var seriesModel = data.hostModel;
var itemModel = data.getItemModel(idx);
var layout2 = data.getItemLayout(idx);
var emphasisModel = itemModel.getModel("emphasis");
var opacity = itemModel.get(opacityAccessPath$1);
opacity = opacity == null ? 1 : opacity;
if (!firstCreate) {
saveOldStyle(polygon);
}
polygon.useStyle(data.getItemVisual(idx, "style"));
polygon.style.lineJoin = "round";
if (firstCreate) {
polygon.setShape({
points: layout2.points
});
polygon.style.opacity = 0;
initProps(polygon, {
style: {
opacity
}
}, seriesModel, idx);
} else {
updateProps$1(polygon, {
style: {
opacity
},
shape: {
points: layout2.points
}
}, seriesModel, idx);
}
setStatesStylesFromModel(polygon, itemModel);
this._updateLabel(data, idx);
toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
};
FunnelPiece2.prototype._updateLabel = function(data, idx) {
var polygon = this;
var labelLine = this.getTextGuideLine();
var labelText = polygon.getTextContent();
var seriesModel = data.hostModel;
var itemModel = data.getItemModel(idx);
var layout2 = data.getItemLayout(idx);
var labelLayout2 = layout2.label;
var style = data.getItemVisual(idx, "style");
var visualColor = style.fill;
setLabelStyle(
// position will not be used in setLabelStyle
labelText,
getLabelStatesModels(itemModel),
{
labelFetcher: data.hostModel,
labelDataIndex: idx,
defaultOpacity: style.opacity,
defaultText: data.getName(idx)
},
{
normal: {
align: labelLayout2.textAlign,
verticalAlign: labelLayout2.verticalAlign
}
}
);
polygon.setTextConfig({
local: true,
inside: !!labelLayout2.inside,
insideStroke: visualColor,
// insideFill: 'auto',
outsideFill: visualColor
});
var linePoints = labelLayout2.linePoints;
labelLine.setShape({
points: linePoints
});
polygon.textGuideLineConfig = {
anchor: linePoints ? new Point(linePoints[0][0], linePoints[0][1]) : null
};
updateProps$1(labelText, {
style: {
x: labelLayout2.x,
y: labelLayout2.y
}
}, seriesModel, idx);
labelText.attr({
rotation: labelLayout2.rotation,
originX: labelLayout2.x,
originY: labelLayout2.y,
z2: 10
});
setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), {
// Default use item visual color
stroke: visualColor
});
};
return FunnelPiece2;
})(Polygon)
);
var FunnelView = (
/** @class */
(function(_super) {
__extends(FunnelView2, _super);
function FunnelView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = FunnelView2.type;
_this.ignoreLabelLineUpdate = true;
return _this;
}
FunnelView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var oldData = this._data;
var group = this.group;
data.diff(oldData).add(function(idx) {
var funnelPiece = new FunnelPiece(data, idx);
data.setItemGraphicEl(idx, funnelPiece);
group.add(funnelPiece);
}).update(function(newIdx, oldIdx) {
var piece = oldData.getItemGraphicEl(oldIdx);
piece.updateData(data, newIdx);
group.add(piece);
data.setItemGraphicEl(newIdx, piece);
}).remove(function(idx) {
var piece = oldData.getItemGraphicEl(idx);
removeElementWithFadeOut(piece, seriesModel, idx);
}).execute();
this._data = data;
};
FunnelView2.prototype.remove = function() {
this.group.removeAll();
this._data = null;
};
FunnelView2.prototype.dispose = function() {
};
FunnelView2.type = "funnel";
return FunnelView2;
})(ChartView)
);
var FunnelSeriesModel = (
/** @class */
(function(_super) {
__extends(FunnelSeriesModel2, _super);
function FunnelSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = FunnelSeriesModel2.type;
return _this;
}
FunnelSeriesModel2.prototype.init = function(option) {
_super.prototype.init.apply(this, arguments);
this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this));
this._defaultLabelLine(option);
};
FunnelSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesDataSimply(this, {
coordDimensions: ["value"],
encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this)
});
};
FunnelSeriesModel2.prototype._defaultLabelLine = function(option) {
defaultEmphasis(option, "labelLine", ["show"]);
var labelLineNormalOpt = option.labelLine;
var labelLineEmphasisOpt = option.emphasis.labelLine;
labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;
labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;
};
FunnelSeriesModel2.prototype.getDataParams = function(dataIndex) {
var data = this.getData();
var params = _super.prototype.getDataParams.call(this, dataIndex);
var valueDim = data.mapDimension("value");
var sum2 = data.getSum(valueDim);
params.percent = !sum2 ? 0 : +(data.get(valueDim, dataIndex) / sum2 * 100).toFixed(2);
params.$vars.push("percent");
return params;
};
FunnelSeriesModel2.type = "series.funnel";
FunnelSeriesModel2.defaultOption = {
// zlevel: 0, // 一级层叠
z: 2,
legendHoverLink: true,
colorBy: "data",
left: 80,
top: 60,
right: 80,
bottom: 60,
// width: {totalWidth} - left - right,
// height: {totalHeight} - top - bottom,
// 默认取数据最小最大值
// min: 0,
// max: 100,
minSize: "0%",
maxSize: "100%",
sort: "descending",
orient: "vertical",
gap: 0,
funnelAlign: "center",
label: {
show: true,
position: "outer"
// formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
},
labelLine: {
show: true,
length: 20,
lineStyle: {
// color: 各异,
width: 1
}
},
itemStyle: {
// color: 各异,
borderColor: "#fff",
borderWidth: 1
},
emphasis: {
label: {
show: true
}
},
select: {
itemStyle: {
borderColor: "#212121"
}
}
};
return FunnelSeriesModel2;
})(SeriesModel)
);
function getViewRect$2(seriesModel, api) {
return getLayoutRect(seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
}
function getSortedIndices(data, sort2) {
var valueDim = data.mapDimension("value");
var valueArr = data.mapArray(valueDim, function(val) {
return val;
});
var indices = [];
var isAscending = sort2 === "ascending";
for (var i = 0, len2 = data.count(); i < len2; i++) {
indices[i] = i;
}
if (isFunction(sort2)) {
indices.sort(sort2);
} else if (sort2 !== "none") {
indices.sort(function(a, b) {
return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];
});
}
return indices;
}
function labelLayout(data) {
var seriesModel = data.hostModel;
var orient = seriesModel.get("orient");
data.each(function(idx) {
var itemModel = data.getItemModel(idx);
var labelModel = itemModel.getModel("label");
var labelPosition = labelModel.get("position");
var labelLineModel = itemModel.getModel("labelLine");
var layout2 = data.getItemLayout(idx);
var points2 = layout2.points;
var isLabelInside = labelPosition === "inner" || labelPosition === "inside" || labelPosition === "center" || labelPosition === "insideLeft" || labelPosition === "insideRight";
var textAlign;
var textX;
var textY;
var linePoints;
if (isLabelInside) {
if (labelPosition === "insideLeft") {
textX = (points2[0][0] + points2[3][0]) / 2 + 5;
textY = (points2[0][1] + points2[3][1]) / 2;
textAlign = "left";
} else if (labelPosition === "insideRight") {
textX = (points2[1][0] + points2[2][0]) / 2 - 5;
textY = (points2[1][1] + points2[2][1]) / 2;
textAlign = "right";
} else {
textX = (points2[0][0] + points2[1][0] + points2[2][0] + points2[3][0]) / 4;
textY = (points2[0][1] + points2[1][1] + points2[2][1] + points2[3][1]) / 4;
textAlign = "center";
}
linePoints = [[textX, textY], [textX, textY]];
} else {
var x1 = void 0;
var y1 = void 0;
var x2 = void 0;
var y2 = void 0;
var labelLineLen = labelLineModel.get("length");
if (labelPosition === "left") {
x1 = (points2[3][0] + points2[0][0]) / 2;
y1 = (points2[3][1] + points2[0][1]) / 2;
x2 = x1 - labelLineLen;
textX = x2 - 5;
textAlign = "right";
} else if (labelPosition === "right") {
x1 = (points2[1][0] + points2[2][0]) / 2;
y1 = (points2[1][1] + points2[2][1]) / 2;
x2 = x1 + labelLineLen;
textX = x2 + 5;
textAlign = "left";
} else if (labelPosition === "top") {
x1 = (points2[3][0] + points2[0][0]) / 2;
y1 = (points2[3][1] + points2[0][1]) / 2;
y2 = y1 - labelLineLen;
textY = y2 - 5;
textAlign = "center";
} else if (labelPosition === "bottom") {
x1 = (points2[1][0] + points2[2][0]) / 2;
y1 = (points2[1][1] + points2[2][1]) / 2;
y2 = y1 + labelLineLen;
textY = y2 + 5;
textAlign = "center";
} else if (labelPosition === "rightTop") {
x1 = orient === "horizontal" ? points2[3][0] : points2[1][0];
y1 = orient === "horizontal" ? points2[3][1] : points2[1][1];
if (orient === "horizontal") {
y2 = y1 - labelLineLen;
textY = y2 - 5;
textAlign = "center";
} else {
x2 = x1 + labelLineLen;
textX = x2 + 5;
textAlign = "top";
}
} else if (labelPosition === "rightBottom") {
x1 = points2[2][0];
y1 = points2[2][1];
if (orient === "horizontal") {
y2 = y1 + labelLineLen;
textY = y2 + 5;
textAlign = "center";
} else {
x2 = x1 + labelLineLen;
textX = x2 + 5;
textAlign = "bottom";
}
} else if (labelPosition === "leftTop") {
x1 = points2[0][0];
y1 = orient === "horizontal" ? points2[0][1] : points2[1][1];
if (orient === "horizontal") {
y2 = y1 - labelLineLen;
textY = y2 - 5;
textAlign = "center";
} else {
x2 = x1 - labelLineLen;
textX = x2 - 5;
textAlign = "right";
}
} else if (labelPosition === "leftBottom") {
x1 = orient === "horizontal" ? points2[1][0] : points2[3][0];
y1 = orient === "horizontal" ? points2[1][1] : points2[2][1];
if (orient === "horizontal") {
y2 = y1 + labelLineLen;
textY = y2 + 5;
textAlign = "center";
} else {
x2 = x1 - labelLineLen;
textX = x2 - 5;
textAlign = "right";
}
} else {
x1 = (points2[1][0] + points2[2][0]) / 2;
y1 = (points2[1][1] + points2[2][1]) / 2;
if (orient === "horizontal") {
y2 = y1 + labelLineLen;
textY = y2 + 5;
textAlign = "center";
} else {
x2 = x1 + labelLineLen;
textX = x2 + 5;
textAlign = "left";
}
}
if (orient === "horizontal") {
x2 = x1;
textX = x2;
} else {
y2 = y1;
textY = y2;
}
linePoints = [[x1, y1], [x2, y2]];
}
layout2.label = {
linePoints,
x: textX,
y: textY,
verticalAlign: "middle",
textAlign,
inside: isLabelInside
};
});
}
function funnelLayout(ecModel, api) {
ecModel.eachSeriesByType("funnel", function(seriesModel) {
var data = seriesModel.getData();
var valueDim = data.mapDimension("value");
var sort2 = seriesModel.get("sort");
var viewRect = getViewRect$2(seriesModel, api);
var orient = seriesModel.get("orient");
var viewWidth = viewRect.width;
var viewHeight = viewRect.height;
var indices = getSortedIndices(data, sort2);
var x = viewRect.x;
var y = viewRect.y;
var sizeExtent = orient === "horizontal" ? [parsePercent(seriesModel.get("minSize"), viewHeight), parsePercent(seriesModel.get("maxSize"), viewHeight)] : [parsePercent(seriesModel.get("minSize"), viewWidth), parsePercent(seriesModel.get("maxSize"), viewWidth)];
var dataExtent = data.getDataExtent(valueDim);
var min2 = seriesModel.get("min");
var max2 = seriesModel.get("max");
if (min2 == null) {
min2 = Math.min(dataExtent[0], 0);
}
if (max2 == null) {
max2 = dataExtent[1];
}
var funnelAlign = seriesModel.get("funnelAlign");
var gap = seriesModel.get("gap");
var viewSize = orient === "horizontal" ? viewWidth : viewHeight;
var itemSize = (viewSize - gap * (data.count() - 1)) / data.count();
var getLinePoints = function(idx2, offset) {
if (orient === "horizontal") {
var val_1 = data.get(valueDim, idx2) || 0;
var itemHeight = linearMap$2(val_1, [min2, max2], sizeExtent, true);
var y0 = void 0;
switch (funnelAlign) {
case "top":
y0 = y;
break;
case "center":
y0 = y + (viewHeight - itemHeight) / 2;
break;
case "bottom":
y0 = y + (viewHeight - itemHeight);
break;
}
return [[offset, y0], [offset, y0 + itemHeight]];
}
var val = data.get(valueDim, idx2) || 0;
var itemWidth = linearMap$2(val, [min2, max2], sizeExtent, true);
var x0;
switch (funnelAlign) {
case "left":
x0 = x;
break;
case "center":
x0 = x + (viewWidth - itemWidth) / 2;
break;
case "right":
x0 = x + viewWidth - itemWidth;
break;
}
return [[x0, offset], [x0 + itemWidth, offset]];
};
if (sort2 === "ascending") {
itemSize = -itemSize;
gap = -gap;
if (orient === "horizontal") {
x += viewWidth;
} else {
y += viewHeight;
}
indices = indices.reverse();
}
for (var i = 0; i < indices.length; i++) {
var idx = indices[i];
var nextIdx = indices[i + 1];
var itemModel = data.getItemModel(idx);
if (orient === "horizontal") {
var width = itemModel.get(["itemStyle", "width"]);
if (width == null) {
width = itemSize;
} else {
width = parsePercent(width, viewWidth);
if (sort2 === "ascending") {
width = -width;
}
}
var start = getLinePoints(idx, x);
var end = getLinePoints(nextIdx, x + width);
x += width + gap;
data.setItemLayout(idx, {
points: start.concat(end.slice().reverse())
});
} else {
var height = itemModel.get(["itemStyle", "height"]);
if (height == null) {
height = itemSize;
} else {
height = parsePercent(height, viewHeight);
if (sort2 === "ascending") {
height = -height;
}
}
var start = getLinePoints(idx, y);
var end = getLinePoints(nextIdx, y + height);
y += height + gap;
data.setItemLayout(idx, {
points: start.concat(end.slice().reverse())
});
}
}
labelLayout(data);
});
}
function install$F(registers) {
registers.registerChartView(FunnelView);
registers.registerSeriesModel(FunnelSeriesModel);
registers.registerLayout(funnelLayout);
registers.registerProcessor(dataFilter$1("funnel"));
}
var DEFAULT_SMOOTH = 0.3;
var ParallelView$1 = (
/** @class */
(function(_super) {
__extends(ParallelView2, _super);
function ParallelView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelView2.type;
_this._dataGroup = new Group$3();
_this._initialized = false;
return _this;
}
ParallelView2.prototype.init = function() {
this.group.add(this._dataGroup);
};
ParallelView2.prototype.render = function(seriesModel, ecModel, api, payload) {
this._progressiveEls = null;
var dataGroup = this._dataGroup;
var data = seriesModel.getData();
var oldData = this._data;
var coordSys = seriesModel.coordinateSystem;
var dimensions = coordSys.dimensions;
var seriesScope = makeSeriesScope(seriesModel);
data.diff(oldData).add(add).update(update).remove(remove).execute();
function add(newDataIndex) {
var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);
updateElCommon(line, data, newDataIndex, seriesScope);
}
function update(newDataIndex, oldDataIndex) {
var line = oldData.getItemGraphicEl(oldDataIndex);
var points2 = createLinePoints(data, newDataIndex, dimensions, coordSys);
data.setItemGraphicEl(newDataIndex, line);
updateProps$1(line, {
shape: {
points: points2
}
}, seriesModel, newDataIndex);
saveOldStyle(line);
updateElCommon(line, data, newDataIndex, seriesScope);
}
function remove(oldDataIndex) {
var line = oldData.getItemGraphicEl(oldDataIndex);
dataGroup.remove(line);
}
if (!this._initialized) {
this._initialized = true;
var clipPath = createGridClipShape$2(coordSys, seriesModel, function() {
setTimeout(function() {
dataGroup.removeClipPath();
});
});
dataGroup.setClipPath(clipPath);
}
this._data = data;
};
ParallelView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) {
this._initialized = true;
this._data = null;
this._dataGroup.removeAll();
};
ParallelView2.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) {
var data = seriesModel.getData();
var coordSys = seriesModel.coordinateSystem;
var dimensions = coordSys.dimensions;
var seriesScope = makeSeriesScope(seriesModel);
var progressiveEls = this._progressiveEls = [];
for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {
var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);
line.incremental = true;
updateElCommon(line, data, dataIndex, seriesScope);
progressiveEls.push(line);
}
};
ParallelView2.prototype.remove = function() {
this._dataGroup && this._dataGroup.removeAll();
this._data = null;
};
ParallelView2.type = "parallel";
return ParallelView2;
})(ChartView)
);
function createGridClipShape$2(coordSys, seriesModel, cb) {
var parallelModel = coordSys.model;
var rect = coordSys.getRect();
var rectEl = new Rect$2({
shape: {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
}
});
var dim = parallelModel.get("layout") === "horizontal" ? "width" : "height";
rectEl.setShape(dim, 0);
initProps(rectEl, {
shape: {
width: rect.width,
height: rect.height
}
}, seriesModel, cb);
return rectEl;
}
function createLinePoints(data, dataIndex, dimensions, coordSys) {
var points2 = [];
for (var i = 0; i < dimensions.length; i++) {
var dimName = dimensions[i];
var value = data.get(data.mapDimension(dimName), dataIndex);
if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {
points2.push(coordSys.dataToPoint(value, dimName));
}
}
return points2;
}
function addEl(data, dataGroup, dataIndex, dimensions, coordSys) {
var points2 = createLinePoints(data, dataIndex, dimensions, coordSys);
var line = new Polyline$1({
shape: {
points: points2
},
// silent: true,
z2: 10
});
dataGroup.add(line);
data.setItemGraphicEl(dataIndex, line);
return line;
}
function makeSeriesScope(seriesModel) {
var smooth = seriesModel.get("smooth", true);
smooth === true && (smooth = DEFAULT_SMOOTH);
smooth = numericToNumber(smooth);
eqNaN(smooth) && (smooth = 0);
return {
smooth
};
}
function updateElCommon(el, data, dataIndex, seriesScope) {
el.useStyle(data.getItemVisual(dataIndex, "style"));
el.style.fill = null;
el.setShape("smooth", seriesScope.smooth);
var itemModel = data.getItemModel(dataIndex);
var emphasisModel = itemModel.getModel("emphasis");
setStatesStylesFromModel(el, itemModel, "lineStyle");
toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
}
function isEmptyValue(val, axisType) {
return axisType === "category" ? val == null : val == null || isNaN(val);
}
var ParallelSeriesModel = (
/** @class */
(function(_super) {
__extends(ParallelSeriesModel2, _super);
function ParallelSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelSeriesModel2.type;
_this.visualStyleAccessPath = "lineStyle";
_this.visualDrawType = "stroke";
return _this;
}
ParallelSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this, {
useEncodeDefaulter: bind$1(makeDefaultEncode, null, this)
});
};
ParallelSeriesModel2.prototype.getRawIndicesByActiveState = function(activeState) {
var coordSys = this.coordinateSystem;
var data = this.getData();
var indices = [];
coordSys.eachActiveState(data, function(theActiveState, dataIndex) {
if (activeState === theActiveState) {
indices.push(data.getRawIndex(dataIndex));
}
});
return indices;
};
ParallelSeriesModel2.type = "series.parallel";
ParallelSeriesModel2.dependencies = ["parallel"];
ParallelSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "parallel",
parallelIndex: 0,
label: {
show: false
},
inactiveOpacity: 0.05,
activeOpacity: 1,
lineStyle: {
width: 1,
opacity: 0.45,
type: "solid"
},
emphasis: {
label: {
show: false
}
},
progressive: 500,
smooth: false,
animationEasing: "linear"
};
return ParallelSeriesModel2;
})(SeriesModel)
);
function makeDefaultEncode(seriesModel) {
var parallelModel = seriesModel.ecModel.getComponent("parallel", seriesModel.get("parallelIndex"));
if (!parallelModel) {
return;
}
var encodeDefine = {};
each$f(parallelModel.dimensions, function(axisDim) {
var dataDimIndex = convertDimNameToNumber(axisDim);
encodeDefine[axisDim] = dataDimIndex;
});
return encodeDefine;
}
function convertDimNameToNumber(dimName) {
return +dimName.replace("dim", "");
}
var opacityAccessPath = ["lineStyle", "opacity"];
var parallelVisual = {
seriesType: "parallel",
reset: function(seriesModel, ecModel) {
var coordSys = seriesModel.coordinateSystem;
var opacityMap = {
normal: seriesModel.get(["lineStyle", "opacity"]),
active: seriesModel.get("activeOpacity"),
inactive: seriesModel.get("inactiveOpacity")
};
return {
progress: function(params, data) {
coordSys.eachActiveState(data, function(activeState, dataIndex) {
var opacity = opacityMap[activeState];
if (activeState === "normal" && data.hasItemOption) {
var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath, true);
itemOpacity != null && (opacity = itemOpacity);
}
var existsStyle = data.ensureUniqueItemVisual(dataIndex, "style");
existsStyle.opacity = opacity;
}, params.start, params.end);
}
};
}
};
function parallelPreprocessor(option) {
createParallelIfNeeded(option);
mergeAxisOptionFromParallel(option);
}
function createParallelIfNeeded(option) {
if (option.parallel) {
return;
}
var hasParallelSeries = false;
each$f(option.series, function(seriesOpt) {
if (seriesOpt && seriesOpt.type === "parallel") {
hasParallelSeries = true;
}
});
if (hasParallelSeries) {
option.parallel = [{}];
}
}
function mergeAxisOptionFromParallel(option) {
var axes = normalizeToArray(option.parallelAxis);
each$f(axes, function(axisOption) {
if (!isObject$3(axisOption)) {
return;
}
var parallelIndex = axisOption.parallelIndex || 0;
var parallelOption = normalizeToArray(option.parallel)[parallelIndex];
if (parallelOption && parallelOption.parallelAxisDefault) {
merge(axisOption, parallelOption.parallelAxisDefault, false);
}
});
}
var CLICK_THRESHOLD = 5;
var ParallelView = (
/** @class */
(function(_super) {
__extends(ParallelView2, _super);
function ParallelView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelView2.type;
return _this;
}
ParallelView2.prototype.render = function(parallelModel, ecModel, api) {
this._model = parallelModel;
this._api = api;
if (!this._handlers) {
this._handlers = {};
each$f(handlers$1, function(handler, eventName) {
api.getZr().on(eventName, this._handlers[eventName] = bind$1(handler, this));
}, this);
}
createOrUpdate(this, "_throttledDispatchExpand", parallelModel.get("axisExpandRate"), "fixRate");
};
ParallelView2.prototype.dispose = function(ecModel, api) {
clear$1(this, "_throttledDispatchExpand");
each$f(this._handlers, function(handler, eventName) {
api.getZr().off(eventName, handler);
});
this._handlers = null;
};
ParallelView2.prototype._throttledDispatchExpand = function(opt) {
this._dispatchExpand(opt);
};
ParallelView2.prototype._dispatchExpand = function(opt) {
opt && this._api.dispatchAction(extend({
type: "parallelAxisExpand"
}, opt));
};
ParallelView2.type = "parallel";
return ParallelView2;
})(ComponentView)
);
var handlers$1 = {
mousedown: function(e) {
if (checkTrigger(this, "click")) {
this._mouseDownPoint = [e.offsetX, e.offsetY];
}
},
mouseup: function(e) {
var mouseDownPoint = this._mouseDownPoint;
if (checkTrigger(this, "click") && mouseDownPoint) {
var point = [e.offsetX, e.offsetY];
var dist2 = Math.pow(mouseDownPoint[0] - point[0], 2) + Math.pow(mouseDownPoint[1] - point[1], 2);
if (dist2 > CLICK_THRESHOLD) {
return;
}
var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);
result.behavior !== "none" && this._dispatchExpand({
axisExpandWindow: result.axisExpandWindow
});
}
this._mouseDownPoint = null;
},
mousemove: function(e) {
if (this._mouseDownPoint || !checkTrigger(this, "mousemove")) {
return;
}
var model = this._model;
var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);
var behavior = result.behavior;
behavior === "jump" && this._throttledDispatchExpand.debounceNextCall(model.get("axisExpandDebounce"));
this._throttledDispatchExpand(behavior === "none" ? null : {
axisExpandWindow: result.axisExpandWindow,
// Jumping uses animation, and sliding suppresses animation.
animation: behavior === "jump" ? null : {
duration: 0
// Disable animation.
}
});
}
};
function checkTrigger(view, triggerOn) {
var model = view._model;
return model.get("axisExpandable") && model.get("axisExpandTriggerOn") === triggerOn;
}
var ParallelModel = (
/** @class */
(function(_super) {
__extends(ParallelModel2, _super);
function ParallelModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelModel2.type;
return _this;
}
ParallelModel2.prototype.init = function() {
_super.prototype.init.apply(this, arguments);
this.mergeOption({});
};
ParallelModel2.prototype.mergeOption = function(newOption) {
var thisOption = this.option;
newOption && merge(thisOption, newOption, true);
this._initDimensions();
};
ParallelModel2.prototype.contains = function(model, ecModel) {
var parallelIndex = model.get("parallelIndex");
return parallelIndex != null && ecModel.getComponent("parallel", parallelIndex) === this;
};
ParallelModel2.prototype.setAxisExpand = function(opt) {
each$f(["axisExpandable", "axisExpandCenter", "axisExpandCount", "axisExpandWidth", "axisExpandWindow"], function(name) {
if (opt.hasOwnProperty(name)) {
this.option[name] = opt[name];
}
}, this);
};
ParallelModel2.prototype._initDimensions = function() {
var dimensions = this.dimensions = [];
var parallelAxisIndex = this.parallelAxisIndex = [];
var axisModels = filter(this.ecModel.queryComponents({
mainType: "parallelAxis"
}), function(axisModel) {
return (axisModel.get("parallelIndex") || 0) === this.componentIndex;
}, this);
each$f(axisModels, function(axisModel) {
dimensions.push("dim" + axisModel.get("dim"));
parallelAxisIndex.push(axisModel.componentIndex);
});
};
ParallelModel2.type = "parallel";
ParallelModel2.dependencies = ["parallelAxis"];
ParallelModel2.layoutMode = "box";
ParallelModel2.defaultOption = {
// zlevel: 0,
z: 0,
left: 80,
top: 60,
right: 80,
bottom: 60,
// width: {totalWidth} - left - right,
// height: {totalHeight} - top - bottom,
layout: "horizontal",
// FIXME
// naming?
axisExpandable: false,
axisExpandCenter: null,
axisExpandCount: 0,
axisExpandWidth: 50,
axisExpandRate: 17,
axisExpandDebounce: 50,
// [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.
// Do not doc to user until necessary.
axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],
axisExpandTriggerOn: "click",
parallelAxisDefault: null
};
return ParallelModel2;
})(ComponentModel)
);
var ParallelAxis = (
/** @class */
(function(_super) {
__extends(ParallelAxis2, _super);
function ParallelAxis2(dim, scale2, coordExtent, axisType, axisIndex) {
var _this = _super.call(this, dim, scale2, coordExtent) || this;
_this.type = axisType || "value";
_this.axisIndex = axisIndex;
return _this;
}
ParallelAxis2.prototype.isHorizontal = function() {
return this.coordinateSystem.getModel().get("layout") !== "horizontal";
};
return ParallelAxis2;
})(Axis)
);
function sliderMove(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {
delta = delta || 0;
var extentSpan = extent[1] - extent[0];
if (minSpan != null) {
minSpan = restrict$1(minSpan, [0, extentSpan]);
}
if (maxSpan != null) {
maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);
}
if (handleIndex === "all") {
var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]);
handleSpan = restrict$1(handleSpan, [0, extentSpan]);
minSpan = maxSpan = restrict$1(handleSpan, [minSpan, maxSpan]);
handleIndex = 0;
}
handleEnds[0] = restrict$1(handleEnds[0], extent);
handleEnds[1] = restrict$1(handleEnds[1], extent);
var originalDistSign = getSpanSign(handleEnds, handleIndex);
handleEnds[handleIndex] += delta;
var extentMinSpan = minSpan || 0;
var realExtent = extent.slice();
originalDistSign.sign < 0 ? realExtent[0] += extentMinSpan : realExtent[1] -= extentMinSpan;
handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent);
var currDistSign;
currDistSign = getSpanSign(handleEnds, handleIndex);
if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) {
handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;
}
currDistSign = getSpanSign(handleEnds, handleIndex);
if (maxSpan != null && currDistSign.span > maxSpan) {
handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;
}
return handleEnds;
}
function getSpanSign(handleEnds, handleIndex) {
var dist2 = handleEnds[handleIndex] - handleEnds[1 - handleIndex];
return {
span: Math.abs(dist2),
sign: dist2 > 0 ? -1 : dist2 < 0 ? 1 : handleIndex ? -1 : 1
};
}
function restrict$1(value, extend2) {
return Math.min(extend2[1] != null ? extend2[1] : Infinity, Math.max(extend2[0] != null ? extend2[0] : -Infinity, value));
}
var each$a = each$f;
var mathMin$2 = Math.min;
var mathMax$2 = Math.max;
var mathFloor = Math.floor;
var mathCeil = Math.ceil;
var round = round$1;
var PI$1 = Math.PI;
var Parallel = (
/** @class */
(function() {
function Parallel2(parallelModel, ecModel, api) {
this.type = "parallel";
this._axesMap = createHashMap();
this._axesLayout = {};
this.dimensions = parallelModel.dimensions;
this._model = parallelModel;
this._init(parallelModel, ecModel, api);
}
Parallel2.prototype._init = function(parallelModel, ecModel, api) {
var dimensions = parallelModel.dimensions;
var parallelAxisIndex = parallelModel.parallelAxisIndex;
each$a(dimensions, function(dim, idx) {
var axisIndex = parallelAxisIndex[idx];
var axisModel = ecModel.getComponent("parallelAxis", axisIndex);
var axis = this._axesMap.set(dim, new ParallelAxis(dim, createScaleByModel$1(axisModel), [0, 0], axisModel.get("type"), axisIndex));
var isCategory2 = axis.type === "category";
axis.onBand = isCategory2 && axisModel.get("boundaryGap");
axis.inverse = axisModel.get("inverse");
axisModel.axis = axis;
axis.model = axisModel;
axis.coordinateSystem = axisModel.coordinateSystem = this;
}, this);
};
Parallel2.prototype.update = function(ecModel, api) {
this._updateAxesFromSeries(this._model, ecModel);
};
Parallel2.prototype.containPoint = function(point) {
var layoutInfo = this._makeLayoutInfo();
var axisBase = layoutInfo.axisBase;
var layoutBase = layoutInfo.layoutBase;
var pixelDimIndex = layoutInfo.pixelDimIndex;
var pAxis = point[1 - pixelDimIndex];
var pLayout = point[pixelDimIndex];
return pAxis >= axisBase && pAxis <= axisBase + layoutInfo.axisLength && pLayout >= layoutBase && pLayout <= layoutBase + layoutInfo.layoutLength;
};
Parallel2.prototype.getModel = function() {
return this._model;
};
Parallel2.prototype._updateAxesFromSeries = function(parallelModel, ecModel) {
ecModel.eachSeries(function(seriesModel) {
if (!parallelModel.contains(seriesModel, ecModel)) {
return;
}
var data = seriesModel.getData();
each$a(this.dimensions, function(dim) {
var axis = this._axesMap.get(dim);
axis.scale.unionExtentFromData(data, data.mapDimension(dim));
niceScaleExtent(axis.scale, axis.model);
}, this);
}, this);
};
Parallel2.prototype.resize = function(parallelModel, api) {
this._rect = getLayoutRect(parallelModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
this._layoutAxes();
};
Parallel2.prototype.getRect = function() {
return this._rect;
};
Parallel2.prototype._makeLayoutInfo = function() {
var parallelModel = this._model;
var rect = this._rect;
var xy = ["x", "y"];
var wh = ["width", "height"];
var layout2 = parallelModel.get("layout");
var pixelDimIndex = layout2 === "horizontal" ? 0 : 1;
var layoutLength = rect[wh[pixelDimIndex]];
var layoutExtent = [0, layoutLength];
var axisCount = this.dimensions.length;
var axisExpandWidth = restrict(parallelModel.get("axisExpandWidth"), layoutExtent);
var axisExpandCount = restrict(parallelModel.get("axisExpandCount") || 0, [0, axisCount]);
var axisExpandable = parallelModel.get("axisExpandable") && axisCount > 3 && axisCount > axisExpandCount && axisExpandCount > 1 && axisExpandWidth > 0 && layoutLength > 0;
var axisExpandWindow = parallelModel.get("axisExpandWindow");
var winSize;
if (!axisExpandWindow) {
winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);
var axisExpandCenter = parallelModel.get("axisExpandCenter") || mathFloor(axisCount / 2);
axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];
axisExpandWindow[1] = axisExpandWindow[0] + winSize;
} else {
winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);
axisExpandWindow[1] = axisExpandWindow[0] + winSize;
}
var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount);
axisCollapseWidth < 3 && (axisCollapseWidth = 0);
var winInnerIndices = [mathFloor(round(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, mathCeil(round(axisExpandWindow[1] / axisExpandWidth, 1)) - 1];
var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];
return {
layout: layout2,
pixelDimIndex,
layoutBase: rect[xy[pixelDimIndex]],
layoutLength,
axisBase: rect[xy[1 - pixelDimIndex]],
axisLength: rect[wh[1 - pixelDimIndex]],
axisExpandable,
axisExpandWidth,
axisCollapseWidth,
axisExpandWindow,
axisCount,
winInnerIndices,
axisExpandWindow0Pos
};
};
Parallel2.prototype._layoutAxes = function() {
var rect = this._rect;
var axes = this._axesMap;
var dimensions = this.dimensions;
var layoutInfo = this._makeLayoutInfo();
var layout2 = layoutInfo.layout;
axes.each(function(axis) {
var axisExtent = [0, layoutInfo.axisLength];
var idx = axis.inverse ? 1 : 0;
axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);
});
each$a(dimensions, function(dim, idx) {
var posInfo = (layoutInfo.axisExpandable ? layoutAxisWithExpand : layoutAxisWithoutExpand)(idx, layoutInfo);
var positionTable = {
horizontal: {
x: posInfo.position,
y: layoutInfo.axisLength
},
vertical: {
x: 0,
y: posInfo.position
}
};
var rotationTable = {
horizontal: PI$1 / 2,
vertical: 0
};
var position2 = [positionTable[layout2].x + rect.x, positionTable[layout2].y + rect.y];
var rotation = rotationTable[layout2];
var transform2 = create$1();
rotate(transform2, transform2, rotation);
translate(transform2, transform2, position2);
this._axesLayout[dim] = {
position: position2,
rotation,
transform: transform2,
axisNameAvailableWidth: posInfo.axisNameAvailableWidth,
axisLabelShow: posInfo.axisLabelShow,
nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,
tickDirection: 1,
labelDirection: 1
};
}, this);
};
Parallel2.prototype.getAxis = function(dim) {
return this._axesMap.get(dim);
};
Parallel2.prototype.dataToPoint = function(value, dim) {
return this.axisCoordToPoint(this._axesMap.get(dim).dataToCoord(value), dim);
};
Parallel2.prototype.eachActiveState = function(data, callback, start, end) {
start == null && (start = 0);
end == null && (end = data.count());
var axesMap = this._axesMap;
var dimensions = this.dimensions;
var dataDimensions = [];
var axisModels = [];
each$f(dimensions, function(axisDim) {
dataDimensions.push(data.mapDimension(axisDim));
axisModels.push(axesMap.get(axisDim).model);
});
var hasActiveSet = this.hasAxisBrushed();
for (var dataIndex = start; dataIndex < end; dataIndex++) {
var activeState = void 0;
if (!hasActiveSet) {
activeState = "normal";
} else {
activeState = "active";
var values = data.getValues(dataDimensions, dataIndex);
for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
var state = axisModels[j].getActiveState(values[j]);
if (state === "inactive") {
activeState = "inactive";
break;
}
}
}
callback(activeState, dataIndex);
}
};
Parallel2.prototype.hasAxisBrushed = function() {
var dimensions = this.dimensions;
var axesMap = this._axesMap;
var hasActiveSet = false;
for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
if (axesMap.get(dimensions[j]).model.getActiveState() !== "normal") {
hasActiveSet = true;
}
}
return hasActiveSet;
};
Parallel2.prototype.axisCoordToPoint = function(coord, dim) {
var axisLayout = this._axesLayout[dim];
return applyTransform([coord, 0], axisLayout.transform);
};
Parallel2.prototype.getAxisLayout = function(dim) {
return clone$1(this._axesLayout[dim]);
};
Parallel2.prototype.getSlidedAxisExpandWindow = function(point) {
var layoutInfo = this._makeLayoutInfo();
var pixelDimIndex = layoutInfo.pixelDimIndex;
var axisExpandWindow = layoutInfo.axisExpandWindow.slice();
var winSize = axisExpandWindow[1] - axisExpandWindow[0];
var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)];
if (!this.containPoint(point)) {
return {
behavior: "none",
axisExpandWindow
};
}
var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos;
var delta;
var behavior = "slide";
var axisCollapseWidth = layoutInfo.axisCollapseWidth;
var triggerArea = this._model.get("axisExpandSlideTriggerArea");
var useJump = triggerArea[0] != null;
if (axisCollapseWidth) {
if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {
behavior = "jump";
delta = pointCoord - winSize * triggerArea[2];
} else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {
behavior = "jump";
delta = pointCoord - winSize * (1 - triggerArea[2]);
} else {
(delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0);
}
delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;
delta ? sliderMove(delta, axisExpandWindow, extent, "all") : behavior = "none";
} else {
var winSize2 = axisExpandWindow[1] - axisExpandWindow[0];
var pos = extent[1] * pointCoord / winSize2;
axisExpandWindow = [mathMax$2(0, pos - winSize2 / 2)];
axisExpandWindow[1] = mathMin$2(extent[1], axisExpandWindow[0] + winSize2);
axisExpandWindow[0] = axisExpandWindow[1] - winSize2;
}
return {
axisExpandWindow,
behavior
};
};
return Parallel2;
})()
);
function restrict(len2, extent) {
return mathMin$2(mathMax$2(len2, extent[0]), extent[1]);
}
function layoutAxisWithoutExpand(axisIndex, layoutInfo) {
var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);
return {
position: step * axisIndex,
axisNameAvailableWidth: step,
axisLabelShow: true
};
}
function layoutAxisWithExpand(axisIndex, layoutInfo) {
var layoutLength = layoutInfo.layoutLength;
var axisExpandWidth = layoutInfo.axisExpandWidth;
var axisCount = layoutInfo.axisCount;
var axisCollapseWidth = layoutInfo.axisCollapseWidth;
var winInnerIndices = layoutInfo.winInnerIndices;
var position2;
var axisNameAvailableWidth = axisCollapseWidth;
var axisLabelShow = false;
var nameTruncateMaxWidth;
if (axisIndex < winInnerIndices[0]) {
position2 = axisIndex * axisCollapseWidth;
nameTruncateMaxWidth = axisCollapseWidth;
} else if (axisIndex <= winInnerIndices[1]) {
position2 = layoutInfo.axisExpandWindow0Pos + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];
axisNameAvailableWidth = axisExpandWidth;
axisLabelShow = true;
} else {
position2 = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;
nameTruncateMaxWidth = axisCollapseWidth;
}
return {
position: position2,
axisNameAvailableWidth,
axisLabelShow,
nameTruncateMaxWidth
};
}
function createParallelCoordSys(ecModel, api) {
var coordSysList = [];
ecModel.eachComponent("parallel", function(parallelModel, idx) {
var coordSys = new Parallel(parallelModel, ecModel, api);
coordSys.name = "parallel_" + idx;
coordSys.resize(parallelModel, api);
parallelModel.coordinateSystem = coordSys;
coordSys.model = parallelModel;
coordSysList.push(coordSys);
});
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.get("coordinateSystem") === "parallel") {
var parallelModel = seriesModel.getReferringComponents("parallel", SINGLE_REFERRING).models[0];
seriesModel.coordinateSystem = parallelModel.coordinateSystem;
}
});
return coordSysList;
}
var parallelCoordSysCreator = {
create: createParallelCoordSys
};
var ParallelAxisModel = (
/** @class */
(function(_super) {
__extends(ParallelAxisModel2, _super);
function ParallelAxisModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelAxisModel2.type;
_this.activeIntervals = [];
return _this;
}
ParallelAxisModel2.prototype.getAreaSelectStyle = function() {
return makeStyleMapper([
["fill", "color"],
["lineWidth", "borderWidth"],
["stroke", "borderColor"],
["width", "width"],
["opacity", "opacity"]
// Option decal is in `DecalObject` but style.decal is in `PatternObject`.
// So do not transfer decal directly.
])(this.getModel("areaSelectStyle"));
};
ParallelAxisModel2.prototype.setActiveIntervals = function(intervals) {
var activeIntervals = this.activeIntervals = clone$1(intervals);
if (activeIntervals) {
for (var i = activeIntervals.length - 1; i >= 0; i--) {
asc$2(activeIntervals[i]);
}
}
};
ParallelAxisModel2.prototype.getActiveState = function(value) {
var activeIntervals = this.activeIntervals;
if (!activeIntervals.length) {
return "normal";
}
if (value == null || isNaN(+value)) {
return "inactive";
}
if (activeIntervals.length === 1) {
var interval = activeIntervals[0];
if (interval[0] <= value && value <= interval[1]) {
return "active";
}
} else {
for (var i = 0, len2 = activeIntervals.length; i < len2; i++) {
if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {
return "active";
}
}
}
return "inactive";
};
return ParallelAxisModel2;
})(ComponentModel)
);
mixin(ParallelAxisModel, AxisModelCommonMixin);
var BRUSH_PANEL_GLOBAL = true;
var mathMin$1 = Math.min;
var mathMax$1 = Math.max;
var mathPow = Math.pow;
var COVER_Z = 1e4;
var UNSELECT_THRESHOLD = 6;
var MIN_RESIZE_LINE_WIDTH = 6;
var MUTEX_RESOURCE_KEY = "globalPan";
var DIRECTION_MAP = {
w: [0, 0],
e: [0, 1],
n: [1, 0],
s: [1, 1]
};
var CURSOR_MAP = {
w: "ew",
e: "ew",
n: "ns",
s: "ns",
ne: "nesw",
sw: "nesw",
nw: "nwse",
se: "nwse"
};
var DEFAULT_BRUSH_OPT = {
brushStyle: {
lineWidth: 2,
stroke: "rgba(210,219,238,0.3)",
fill: "#D2DBEE"
},
transformable: true,
brushMode: "single",
removeOnClick: false
};
var baseUID = 0;
var BrushController = (
/** @class */
(function(_super) {
__extends(BrushController2, _super);
function BrushController2(zr) {
var _this = _super.call(this) || this;
_this._track = [];
_this._covers = [];
_this._handlers = {};
_this._zr = zr;
_this.group = new Group$3();
_this._uid = "brushController_" + baseUID++;
each$f(pointerHandlers, function(handler, eventName) {
this._handlers[eventName] = bind$1(handler, this);
}, _this);
return _this;
}
BrushController2.prototype.enableBrush = function(brushOption) {
this._brushType && this._doDisableBrush();
brushOption.brushType && this._doEnableBrush(brushOption);
return this;
};
BrushController2.prototype._doEnableBrush = function(brushOption) {
var zr = this._zr;
if (!this._enableGlobalPan) {
take(zr, MUTEX_RESOURCE_KEY, this._uid);
}
each$f(this._handlers, function(handler, eventName) {
zr.on(eventName, handler);
});
this._brushType = brushOption.brushType;
this._brushOption = merge(clone$1(DEFAULT_BRUSH_OPT), brushOption, true);
};
BrushController2.prototype._doDisableBrush = function() {
var zr = this._zr;
release(zr, MUTEX_RESOURCE_KEY, this._uid);
each$f(this._handlers, function(handler, eventName) {
zr.off(eventName, handler);
});
this._brushType = this._brushOption = null;
};
BrushController2.prototype.setPanels = function(panelOpts) {
if (panelOpts && panelOpts.length) {
var panels_1 = this._panels = {};
each$f(panelOpts, function(panelOpts2) {
panels_1[panelOpts2.panelId] = clone$1(panelOpts2);
});
} else {
this._panels = null;
}
return this;
};
BrushController2.prototype.mount = function(opt) {
opt = opt || {};
this._enableGlobalPan = opt.enableGlobalPan;
var thisGroup = this.group;
this._zr.add(thisGroup);
thisGroup.attr({
x: opt.x || 0,
y: opt.y || 0,
rotation: opt.rotation || 0,
scaleX: opt.scaleX || 1,
scaleY: opt.scaleY || 1
});
this._transform = thisGroup.getLocalTransform();
return this;
};
BrushController2.prototype.updateCovers = function(coverConfigList) {
coverConfigList = map$1(coverConfigList, function(coverConfig) {
return merge(clone$1(DEFAULT_BRUSH_OPT), coverConfig, true);
});
var tmpIdPrefix = "\0-brush-index-";
var oldCovers = this._covers;
var newCovers = this._covers = [];
var controller = this;
var creatingCover = this._creatingCover;
new DataDiffer(oldCovers, coverConfigList, oldGetKey, getKey2).add(addOrUpdate).update(addOrUpdate).remove(remove).execute();
return this;
function getKey2(brushOption, index) {
return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + "-" + brushOption.brushType;
}
function oldGetKey(cover, index) {
return getKey2(cover.__brushOption, index);
}
function addOrUpdate(newIndex, oldIndex) {
var newBrushInternal = coverConfigList[newIndex];
if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {
newCovers[newIndex] = oldCovers[oldIndex];
} else {
var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushInternal, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushInternal));
updateCoverAfterCreation(controller, cover);
}
}
function remove(oldIndex) {
if (oldCovers[oldIndex] !== creatingCover) {
controller.group.remove(oldCovers[oldIndex]);
}
}
};
BrushController2.prototype.unmount = function() {
this.enableBrush(false);
clearCovers(this);
this._zr.remove(this.group);
return this;
};
BrushController2.prototype.dispose = function() {
this.unmount();
this.off();
};
return BrushController2;
})(Eventful)
);
function createCover(controller, brushOption) {
var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);
cover.__brushOption = brushOption;
updateZ$1(cover, brushOption);
controller.group.add(cover);
return cover;
}
function endCreating(controller, creatingCover) {
var coverRenderer = getCoverRenderer(creatingCover);
if (coverRenderer.endCreating) {
coverRenderer.endCreating(controller, creatingCover);
updateZ$1(creatingCover, creatingCover.__brushOption);
}
return creatingCover;
}
function updateCoverShape(controller, cover) {
var brushOption = cover.__brushOption;
getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption);
}
function updateZ$1(cover, brushOption) {
var z = brushOption.z;
z == null && (z = COVER_Z);
cover.traverse(function(el) {
el.z = z;
el.z2 = z;
});
}
function updateCoverAfterCreation(controller, cover) {
getCoverRenderer(cover).updateCommon(controller, cover);
updateCoverShape(controller, cover);
}
function getCoverRenderer(cover) {
return coverRenderers[cover.__brushOption.brushType];
}
function getPanelByPoint(controller, e, localCursorPoint) {
var panels = controller._panels;
if (!panels) {
return BRUSH_PANEL_GLOBAL;
}
var panel;
var transform2 = controller._transform;
each$f(panels, function(pn) {
pn.isTargetByCursor(e, localCursorPoint, transform2) && (panel = pn);
});
return panel;
}
function getPanelByCover(controller, cover) {
var panels = controller._panels;
if (!panels) {
return BRUSH_PANEL_GLOBAL;
}
var panelId = cover.__brushOption.panelId;
return panelId != null ? panels[panelId] : BRUSH_PANEL_GLOBAL;
}
function clearCovers(controller) {
var covers = controller._covers;
var originalLength = covers.length;
each$f(covers, function(cover) {
controller.group.remove(cover);
}, controller);
covers.length = 0;
return !!originalLength;
}
function trigger(controller, opt) {
var areas = map$1(controller._covers, function(cover) {
var brushOption = cover.__brushOption;
var range = clone$1(brushOption.range);
return {
brushType: brushOption.brushType,
panelId: brushOption.panelId,
range
};
});
controller.trigger("brush", {
areas,
isEnd: !!opt.isEnd,
removeOnClick: !!opt.removeOnClick
});
}
function shouldShowCover(controller) {
var track = controller._track;
if (!track.length) {
return false;
}
var p2 = track[track.length - 1];
var p1 = track[0];
var dx = p2[0] - p1[0];
var dy = p2[1] - p1[1];
var dist2 = mathPow(dx * dx + dy * dy, 0.5);
return dist2 > UNSELECT_THRESHOLD;
}
function getTrackEnds(track) {
var tail = track.length - 1;
tail < 0 && (tail = 0);
return [track[0], track[tail]];
}
function createBaseRectCover(rectRangeConverter, controller, brushOption, edgeNameSequences) {
var cover = new Group$3();
cover.add(new Rect$2({
name: "main",
style: makeStyle(brushOption),
silent: true,
draggable: true,
cursor: "move",
drift: curry$1(driftRect, rectRangeConverter, controller, cover, ["n", "s", "w", "e"]),
ondragend: curry$1(trigger, controller, {
isEnd: true
})
}));
each$f(edgeNameSequences, function(nameSequence) {
cover.add(new Rect$2({
name: nameSequence.join(""),
style: {
opacity: 0
},
draggable: true,
silent: true,
invisible: true,
drift: curry$1(driftRect, rectRangeConverter, controller, cover, nameSequence),
ondragend: curry$1(trigger, controller, {
isEnd: true
})
}));
});
return cover;
}
function updateBaseRect(controller, cover, localRange, brushOption) {
var lineWidth = brushOption.brushStyle.lineWidth || 0;
var handleSize = mathMax$1(lineWidth, MIN_RESIZE_LINE_WIDTH);
var x = localRange[0][0];
var y = localRange[1][0];
var xa = x - lineWidth / 2;
var ya = y - lineWidth / 2;
var x2 = localRange[0][1];
var y2 = localRange[1][1];
var x2a = x2 - handleSize + lineWidth / 2;
var y2a = y2 - handleSize + lineWidth / 2;
var width = x2 - x;
var height = y2 - y;
var widtha = width + lineWidth;
var heighta = height + lineWidth;
updateRectShape(controller, cover, "main", x, y, width, height);
if (brushOption.transformable) {
updateRectShape(controller, cover, "w", xa, ya, handleSize, heighta);
updateRectShape(controller, cover, "e", x2a, ya, handleSize, heighta);
updateRectShape(controller, cover, "n", xa, ya, widtha, handleSize);
updateRectShape(controller, cover, "s", xa, y2a, widtha, handleSize);
updateRectShape(controller, cover, "nw", xa, ya, handleSize, handleSize);
updateRectShape(controller, cover, "ne", x2a, ya, handleSize, handleSize);
updateRectShape(controller, cover, "sw", xa, y2a, handleSize, handleSize);
updateRectShape(controller, cover, "se", x2a, y2a, handleSize, handleSize);
}
}
function updateCommon$1(controller, cover) {
var brushOption = cover.__brushOption;
var transformable = brushOption.transformable;
var mainEl = cover.childAt(0);
mainEl.useStyle(makeStyle(brushOption));
mainEl.attr({
silent: !transformable,
cursor: transformable ? "move" : "default"
});
each$f([["w"], ["e"], ["n"], ["s"], ["s", "e"], ["s", "w"], ["n", "e"], ["n", "w"]], function(nameSequence) {
var el = cover.childOfName(nameSequence.join(""));
var globalDir = nameSequence.length === 1 ? getGlobalDirection1(controller, nameSequence[0]) : getGlobalDirection2(controller, nameSequence);
el && el.attr({
silent: !transformable,
invisible: !transformable,
cursor: transformable ? CURSOR_MAP[globalDir] + "-resize" : null
});
});
}
function updateRectShape(controller, cover, name, x, y, w, h) {
var el = cover.childOfName(name);
el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]])));
}
function makeStyle(brushOption) {
return defaults({
strokeNoScale: true
}, brushOption.brushStyle);
}
function formatRectRange(x, y, x2, y2) {
var min2 = [mathMin$1(x, x2), mathMin$1(y, y2)];
var max2 = [mathMax$1(x, x2), mathMax$1(y, y2)];
return [
[min2[0], max2[0]],
[min2[1], max2[1]]
// y range
];
}
function getTransform(controller) {
return getTransform$1(controller.group);
}
function getGlobalDirection1(controller, localDirName) {
var map2 = {
w: "left",
e: "right",
n: "top",
s: "bottom"
};
var inverseMap = {
left: "w",
right: "e",
top: "n",
bottom: "s"
};
var dir3 = transformDirection(map2[localDirName], getTransform(controller));
return inverseMap[dir3];
}
function getGlobalDirection2(controller, localDirNameSeq) {
var globalDir = [getGlobalDirection1(controller, localDirNameSeq[0]), getGlobalDirection1(controller, localDirNameSeq[1])];
(globalDir[0] === "e" || globalDir[0] === "w") && globalDir.reverse();
return globalDir.join("");
}
function driftRect(rectRangeConverter, controller, cover, dirNameSequence, dx, dy) {
var brushOption = cover.__brushOption;
var rectRange = rectRangeConverter.toRectRange(brushOption.range);
var localDelta = toLocalDelta(controller, dx, dy);
each$f(dirNameSequence, function(dirName) {
var ind = DIRECTION_MAP[dirName];
rectRange[ind[0]][ind[1]] += localDelta[ind[0]];
});
brushOption.range = rectRangeConverter.fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]));
updateCoverAfterCreation(controller, cover);
trigger(controller, {
isEnd: false
});
}
function driftPolygon(controller, cover, dx, dy) {
var range = cover.__brushOption.range;
var localDelta = toLocalDelta(controller, dx, dy);
each$f(range, function(point) {
point[0] += localDelta[0];
point[1] += localDelta[1];
});
updateCoverAfterCreation(controller, cover);
trigger(controller, {
isEnd: false
});
}
function toLocalDelta(controller, dx, dy) {
var thisGroup = controller.group;
var localD = thisGroup.transformCoordToLocal(dx, dy);
var localZero = thisGroup.transformCoordToLocal(0, 0);
return [localD[0] - localZero[0], localD[1] - localZero[1]];
}
function clipByPanel(controller, cover, data) {
var panel = getPanelByCover(controller, cover);
return panel && panel !== BRUSH_PANEL_GLOBAL ? panel.clipPath(data, controller._transform) : clone$1(data);
}
function pointsToRect(points2) {
var xmin = mathMin$1(points2[0][0], points2[1][0]);
var ymin = mathMin$1(points2[0][1], points2[1][1]);
var xmax = mathMax$1(points2[0][0], points2[1][0]);
var ymax = mathMax$1(points2[0][1], points2[1][1]);
return {
x: xmin,
y: ymin,
width: xmax - xmin,
height: ymax - ymin
};
}
function resetCursor(controller, e, localCursorPoint) {
if (
// Check active
!controller._brushType || isOutsideZrArea(controller, e.offsetX, e.offsetY)
) {
return;
}
var zr = controller._zr;
var covers = controller._covers;
var currPanel = getPanelByPoint(controller, e, localCursorPoint);
if (!controller._dragging) {
for (var i = 0; i < covers.length; i++) {
var brushOption = covers[i].__brushOption;
if (currPanel && (currPanel === BRUSH_PANEL_GLOBAL || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) {
return;
}
}
}
currPanel && zr.setCursorStyle("crosshair");
}
function preventDefault(e) {
var rawE = e.event;
rawE.preventDefault && rawE.preventDefault();
}
function mainShapeContain(cover, x, y) {
return cover.childOfName("main").contain(x, y);
}
function updateCoverByMouse(controller, e, localCursorPoint, isEnd) {
var creatingCover = controller._creatingCover;
var panel = controller._creatingPanel;
var thisBrushOption = controller._brushOption;
var eventParams;
controller._track.push(localCursorPoint.slice());
if (shouldShowCover(controller) || creatingCover) {
if (panel && !creatingCover) {
thisBrushOption.brushMode === "single" && clearCovers(controller);
var brushOption = clone$1(thisBrushOption);
brushOption.brushType = determineBrushType(brushOption.brushType, panel);
brushOption.panelId = panel === BRUSH_PANEL_GLOBAL ? null : panel.panelId;
creatingCover = controller._creatingCover = createCover(controller, brushOption);
controller._covers.push(creatingCover);
}
if (creatingCover) {
var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];
var coverBrushOption = creatingCover.__brushOption;
coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track));
if (isEnd) {
endCreating(controller, creatingCover);
coverRenderer.updateCommon(controller, creatingCover);
}
updateCoverShape(controller, creatingCover);
eventParams = {
isEnd
};
}
} else if (isEnd && thisBrushOption.brushMode === "single" && thisBrushOption.removeOnClick) {
if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {
eventParams = {
isEnd,
removeOnClick: true
};
}
}
return eventParams;
}
function determineBrushType(brushType, panel) {
if (brushType === "auto") {
return panel.defaultBrushType;
}
return brushType;
}
var pointerHandlers = {
mousedown: function(e) {
if (this._dragging) {
handleDragEnd(this, e);
} else if (!e.target || !e.target.draggable) {
preventDefault(e);
var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);
this._creatingCover = null;
var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);
if (panel) {
this._dragging = true;
this._track = [localCursorPoint.slice()];
}
}
},
mousemove: function(e) {
var x = e.offsetX;
var y = e.offsetY;
var localCursorPoint = this.group.transformCoordToLocal(x, y);
resetCursor(this, e, localCursorPoint);
if (this._dragging) {
preventDefault(e);
var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);
eventParams && trigger(this, eventParams);
}
},
mouseup: function(e) {
handleDragEnd(this, e);
}
};
function handleDragEnd(controller, e) {
if (controller._dragging) {
preventDefault(e);
var x = e.offsetX;
var y = e.offsetY;
var localCursorPoint = controller.group.transformCoordToLocal(x, y);
var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true);
controller._dragging = false;
controller._track = [];
controller._creatingCover = null;
eventParams && trigger(controller, eventParams);
}
}
function isOutsideZrArea(controller, x, y) {
var zr = controller._zr;
return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight();
}
var coverRenderers = {
lineX: getLineRenderer(0),
lineY: getLineRenderer(1),
rect: {
createCover: function(controller, brushOption) {
function returnInput(range) {
return range;
}
return createBaseRectCover({
toRectRange: returnInput,
fromRectRange: returnInput
}, controller, brushOption, [["w"], ["e"], ["n"], ["s"], ["s", "e"], ["s", "w"], ["n", "e"], ["n", "w"]]);
},
getCreatingRange: function(localTrack) {
var ends = getTrackEnds(localTrack);
return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);
},
updateCoverShape: function(controller, cover, localRange, brushOption) {
updateBaseRect(controller, cover, localRange, brushOption);
},
updateCommon: updateCommon$1,
contain: mainShapeContain
},
polygon: {
createCover: function(controller, brushOption) {
var cover = new Group$3();
cover.add(new Polyline$1({
name: "main",
style: makeStyle(brushOption),
silent: true
}));
return cover;
},
getCreatingRange: function(localTrack) {
return localTrack;
},
endCreating: function(controller, cover) {
cover.remove(cover.childAt(0));
cover.add(new Polygon({
name: "main",
draggable: true,
drift: curry$1(driftPolygon, controller, cover),
ondragend: curry$1(trigger, controller, {
isEnd: true
})
}));
},
updateCoverShape: function(controller, cover, localRange, brushOption) {
cover.childAt(0).setShape({
points: clipByPanel(controller, cover, localRange)
});
},
updateCommon: updateCommon$1,
contain: mainShapeContain
}
};
function getLineRenderer(xyIndex) {
return {
createCover: function(controller, brushOption) {
return createBaseRectCover({
toRectRange: function(range) {
var rectRange = [range, [0, 100]];
xyIndex && rectRange.reverse();
return rectRange;
},
fromRectRange: function(rectRange) {
return rectRange[xyIndex];
}
}, controller, brushOption, [[["w"], ["e"]], [["n"], ["s"]]][xyIndex]);
},
getCreatingRange: function(localTrack) {
var ends = getTrackEnds(localTrack);
var min2 = mathMin$1(ends[0][xyIndex], ends[1][xyIndex]);
var max2 = mathMax$1(ends[0][xyIndex], ends[1][xyIndex]);
return [min2, max2];
},
updateCoverShape: function(controller, cover, localRange, brushOption) {
var otherExtent;
var panel = getPanelByCover(controller, cover);
if (panel !== BRUSH_PANEL_GLOBAL && panel.getLinearBrushOtherExtent) {
otherExtent = panel.getLinearBrushOtherExtent(xyIndex);
} else {
var zr = controller._zr;
otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];
}
var rectRange = [localRange, otherExtent];
xyIndex && rectRange.reverse();
updateBaseRect(controller, cover, rectRange, brushOption);
},
updateCommon: updateCommon$1,
contain: mainShapeContain
};
}
function makeRectPanelClipPath(rect) {
rect = normalizeRect(rect);
return function(localPoints) {
return clipPointsByRect(localPoints, rect);
};
}
function makeLinearBrushOtherExtent(rect, specifiedXYIndex) {
rect = normalizeRect(rect);
return function(xyIndex) {
var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;
var brushWidth = idx ? rect.width : rect.height;
var base2 = idx ? rect.x : rect.y;
return [base2, base2 + (brushWidth || 0)];
};
}
function makeRectIsTargetByCursor(rect, api, targetModel) {
var boundingRect = normalizeRect(rect);
return function(e, localCursorPoint) {
return boundingRect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel);
};
}
function normalizeRect(rect) {
return BoundingRect.create(rect);
}
var elementList$1 = ["axisLine", "axisTickLabel", "axisName"];
var ParallelAxisView = (
/** @class */
(function(_super) {
__extends(ParallelAxisView2, _super);
function ParallelAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ParallelAxisView2.type;
return _this;
}
ParallelAxisView2.prototype.init = function(ecModel, api) {
_super.prototype.init.apply(this, arguments);
(this._brushController = new BrushController(api.getZr())).on("brush", bind$1(this._onBrush, this));
};
ParallelAxisView2.prototype.render = function(axisModel, ecModel, api, payload) {
if (fromAxisAreaSelect(axisModel, ecModel, payload)) {
return;
}
this.axisModel = axisModel;
this.api = api;
this.group.removeAll();
var oldAxisGroup = this._axisGroup;
this._axisGroup = new Group$3();
this.group.add(this._axisGroup);
if (!axisModel.get("show")) {
return;
}
var coordSysModel = getCoordSysModel(axisModel, ecModel);
var coordSys = coordSysModel.coordinateSystem;
var areaSelectStyle = axisModel.getAreaSelectStyle();
var areaWidth = areaSelectStyle.width;
var dim = axisModel.axis.dim;
var axisLayout = coordSys.getAxisLayout(dim);
var builderOpt = extend({
strokeContainThreshold: areaWidth
}, axisLayout);
var axisBuilder = new AxisBuilder(axisModel, builderOpt);
each$f(elementList$1, axisBuilder.add, axisBuilder);
this._axisGroup.add(axisBuilder.getGroup());
this._refreshBrushController(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api);
groupTransition(oldAxisGroup, this._axisGroup, axisModel);
};
ParallelAxisView2.prototype._refreshBrushController = function(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api) {
var extent = axisModel.axis.getExtent();
var extentLen = extent[1] - extent[0];
var extra = Math.min(30, Math.abs(extentLen) * 0.1);
var rect = BoundingRect.create({
x: extent[0],
y: -areaWidth / 2,
width: extentLen,
height: areaWidth
});
rect.x -= extra;
rect.width += 2 * extra;
this._brushController.mount({
enableGlobalPan: true,
rotation: builderOpt.rotation,
x: builderOpt.position[0],
y: builderOpt.position[1]
}).setPanels([{
panelId: "pl",
clipPath: makeRectPanelClipPath(rect),
isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel),
getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0)
}]).enableBrush({
brushType: "lineX",
brushStyle: areaSelectStyle,
removeOnClick: true
}).updateCovers(getCoverInfoList(axisModel));
};
ParallelAxisView2.prototype._onBrush = function(eventParam) {
var coverInfoList = eventParam.areas;
var axisModel = this.axisModel;
var axis = axisModel.axis;
var intervals = map$1(coverInfoList, function(coverInfo) {
return [axis.coordToData(coverInfo.range[0], true), axis.coordToData(coverInfo.range[1], true)];
});
if (!axisModel.option.realtime === eventParam.isEnd || eventParam.removeOnClick) {
this.api.dispatchAction({
type: "axisAreaSelect",
parallelAxisId: axisModel.id,
intervals
});
}
};
ParallelAxisView2.prototype.dispose = function() {
this._brushController.dispose();
};
ParallelAxisView2.type = "parallelAxis";
return ParallelAxisView2;
})(ComponentView)
);
function fromAxisAreaSelect(axisModel, ecModel, payload) {
return payload && payload.type === "axisAreaSelect" && ecModel.findComponents({
mainType: "parallelAxis",
query: payload
})[0] === axisModel;
}
function getCoverInfoList(axisModel) {
var axis = axisModel.axis;
return map$1(axisModel.activeIntervals, function(interval) {
return {
brushType: "lineX",
panelId: "pl",
range: [axis.dataToCoord(interval[0], true), axis.dataToCoord(interval[1], true)]
};
});
}
function getCoordSysModel(axisModel, ecModel) {
return ecModel.getComponent("parallel", axisModel.get("parallelIndex"));
}
var actionInfo = {
type: "axisAreaSelect",
event: "axisAreaSelected"
// update: 'updateVisual'
};
function installParallelActions(registers) {
registers.registerAction(actionInfo, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "parallelAxis",
query: payload
}, function(parallelAxisModel) {
parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);
});
});
registers.registerAction("parallelAxisExpand", function(payload, ecModel) {
ecModel.eachComponent({
mainType: "parallel",
query: payload
}, function(parallelModel) {
parallelModel.setAxisExpand(payload);
});
});
}
var defaultAxisOption = {
type: "value",
areaSelectStyle: {
width: 20,
borderWidth: 1,
borderColor: "rgba(160,197,232)",
color: "rgba(160,197,232)",
opacity: 0.3
},
realtime: true,
z: 10
};
function install$E(registers) {
registers.registerComponentView(ParallelView);
registers.registerComponentModel(ParallelModel);
registers.registerCoordinateSystem("parallel", parallelCoordSysCreator);
registers.registerPreprocessor(parallelPreprocessor);
registers.registerComponentModel(ParallelAxisModel);
registers.registerComponentView(ParallelAxisView);
axisModelCreator(registers, "parallel", ParallelAxisModel, defaultAxisOption);
installParallelActions(registers);
}
function install$D(registers) {
use(install$E);
registers.registerChartView(ParallelView$1);
registers.registerSeriesModel(ParallelSeriesModel);
registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, parallelVisual);
}
var SankeyPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function SankeyPathShape2() {
this.x1 = 0;
this.y1 = 0;
this.x2 = 0;
this.y2 = 0;
this.cpx1 = 0;
this.cpy1 = 0;
this.cpx2 = 0;
this.cpy2 = 0;
this.extent = 0;
}
return SankeyPathShape2;
})()
);
var SankeyPath = (
/** @class */
(function(_super) {
__extends(SankeyPath2, _super);
function SankeyPath2(opts) {
return _super.call(this, opts) || this;
}
SankeyPath2.prototype.getDefaultShape = function() {
return new SankeyPathShape();
};
SankeyPath2.prototype.buildPath = function(ctx, shape) {
var extent = shape.extent;
ctx.moveTo(shape.x1, shape.y1);
ctx.bezierCurveTo(shape.cpx1, shape.cpy1, shape.cpx2, shape.cpy2, shape.x2, shape.y2);
if (shape.orient === "vertical") {
ctx.lineTo(shape.x2 + extent, shape.y2);
ctx.bezierCurveTo(shape.cpx2 + extent, shape.cpy2, shape.cpx1 + extent, shape.cpy1, shape.x1 + extent, shape.y1);
} else {
ctx.lineTo(shape.x2, shape.y2 + extent);
ctx.bezierCurveTo(shape.cpx2, shape.cpy2 + extent, shape.cpx1, shape.cpy1 + extent, shape.x1, shape.y1 + extent);
}
ctx.closePath();
};
SankeyPath2.prototype.highlight = function() {
enterEmphasis(this);
};
SankeyPath2.prototype.downplay = function() {
leaveEmphasis(this);
};
return SankeyPath2;
})(Path)
);
var SankeyView = (
/** @class */
(function(_super) {
__extends(SankeyView2, _super);
function SankeyView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SankeyView2.type;
_this._focusAdjacencyDisabled = false;
return _this;
}
SankeyView2.prototype.render = function(seriesModel, ecModel, api) {
var sankeyView = this;
var graph = seriesModel.getGraph();
var group = this.group;
var layoutInfo = seriesModel.layoutInfo;
var width = layoutInfo.width;
var height = layoutInfo.height;
var nodeData = seriesModel.getData();
var edgeData = seriesModel.getData("edge");
var orient = seriesModel.get("orient");
this._model = seriesModel;
group.removeAll();
group.x = layoutInfo.x;
group.y = layoutInfo.y;
graph.eachEdge(function(edge) {
var curve = new SankeyPath();
var ecData = getECData(curve);
ecData.dataIndex = edge.dataIndex;
ecData.seriesIndex = seriesModel.seriesIndex;
ecData.dataType = "edge";
var edgeModel = edge.getModel();
var lineStyleModel = edgeModel.getModel("lineStyle");
var curvature = lineStyleModel.get("curveness");
var n1Layout = edge.node1.getLayout();
var node1Model = edge.node1.getModel();
var dragX1 = node1Model.get("localX");
var dragY1 = node1Model.get("localY");
var n2Layout = edge.node2.getLayout();
var node2Model = edge.node2.getModel();
var dragX2 = node2Model.get("localX");
var dragY2 = node2Model.get("localY");
var edgeLayout = edge.getLayout();
var x1;
var y1;
var x2;
var y2;
var cpx1;
var cpy1;
var cpx2;
var cpy2;
curve.shape.extent = Math.max(1, edgeLayout.dy);
curve.shape.orient = orient;
if (orient === "vertical") {
x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy;
y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy;
x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty;
y2 = dragY2 != null ? dragY2 * height : n2Layout.y;
cpx1 = x1;
cpy1 = y1 * (1 - curvature) + y2 * curvature;
cpx2 = x2;
cpy2 = y1 * curvature + y2 * (1 - curvature);
} else {
x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx;
y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy;
x2 = dragX2 != null ? dragX2 * width : n2Layout.x;
y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty;
cpx1 = x1 * (1 - curvature) + x2 * curvature;
cpy1 = y1;
cpx2 = x1 * curvature + x2 * (1 - curvature);
cpy2 = y2;
}
curve.setShape({
x1,
y1,
x2,
y2,
cpx1,
cpy1,
cpx2,
cpy2
});
curve.useStyle(lineStyleModel.getItemStyle());
applyCurveStyle(curve.style, orient, edge);
var defaultEdgeLabelText = "" + edgeModel.get("value");
var edgeLabelStateModels = getLabelStatesModels(edgeModel, "edgeLabel");
setLabelStyle(curve, edgeLabelStateModels, {
labelFetcher: {
getFormattedLabel: function(dataIndex, stateName, dataType, labelDimIndex, formatter, extendParams) {
return seriesModel.getFormattedLabel(
dataIndex,
stateName,
"edge",
labelDimIndex,
// ensure edgeLabel formatter is provided
// to prevent the inheritance from `label.formatter` of the series
retrieve3(formatter, edgeLabelStateModels.normal && edgeLabelStateModels.normal.get("formatter"), defaultEdgeLabelText),
extendParams
);
}
},
labelDataIndex: edge.dataIndex,
defaultText: defaultEdgeLabelText
});
curve.setTextConfig({
position: "inside"
});
var emphasisModel = edgeModel.getModel("emphasis");
setStatesStylesFromModel(curve, edgeModel, "lineStyle", function(model) {
var style = model.getItemStyle();
applyCurveStyle(style, orient, edge);
return style;
});
group.add(curve);
edgeData.setItemGraphicEl(edge.dataIndex, curve);
var focus = emphasisModel.get("focus");
toggleHoverEmphasis(curve, focus === "adjacency" ? edge.getAdjacentDataIndices() : focus === "trajectory" ? edge.getTrajectoryDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
});
graph.eachNode(function(node) {
var layout2 = node.getLayout();
var itemModel = node.getModel();
var dragX = itemModel.get("localX");
var dragY = itemModel.get("localY");
var emphasisModel = itemModel.getModel("emphasis");
var borderRadius = itemModel.get(["itemStyle", "borderRadius"]) || 0;
var rect = new Rect$2({
shape: {
x: dragX != null ? dragX * width : layout2.x,
y: dragY != null ? dragY * height : layout2.y,
width: layout2.dx,
height: layout2.dy,
r: borderRadius
},
style: itemModel.getModel("itemStyle").getItemStyle(),
z2: 10
});
setLabelStyle(rect, getLabelStatesModels(itemModel), {
labelFetcher: {
getFormattedLabel: function(dataIndex, stateName) {
return seriesModel.getFormattedLabel(dataIndex, stateName, "node");
}
},
labelDataIndex: node.dataIndex,
defaultText: node.id
});
rect.disableLabelAnimation = true;
rect.setStyle("fill", node.getVisual("color"));
rect.setStyle("decal", node.getVisual("style").decal);
setStatesStylesFromModel(rect, itemModel);
group.add(rect);
nodeData.setItemGraphicEl(node.dataIndex, rect);
getECData(rect).dataType = "node";
var focus = emphasisModel.get("focus");
toggleHoverEmphasis(rect, focus === "adjacency" ? node.getAdjacentDataIndices() : focus === "trajectory" ? node.getTrajectoryDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
});
nodeData.eachItemGraphicEl(function(el, dataIndex) {
var itemModel = nodeData.getItemModel(dataIndex);
if (itemModel.get("draggable")) {
el.drift = function(dx, dy) {
sankeyView._focusAdjacencyDisabled = true;
this.shape.x += dx;
this.shape.y += dy;
this.dirty();
api.dispatchAction({
type: "dragNode",
seriesId: seriesModel.id,
dataIndex: nodeData.getRawIndex(dataIndex),
localX: this.shape.x / width,
localY: this.shape.y / height
});
};
el.ondragend = function() {
sankeyView._focusAdjacencyDisabled = false;
};
el.draggable = true;
el.cursor = "move";
}
});
if (!this._data && seriesModel.isAnimationEnabled()) {
group.setClipPath(createGridClipShape$1(group.getBoundingRect(), seriesModel, function() {
group.removeClipPath();
}));
}
this._data = seriesModel.getData();
};
SankeyView2.prototype.dispose = function() {
};
SankeyView2.type = "sankey";
return SankeyView2;
})(ChartView)
);
function applyCurveStyle(curveProps, orient, edge) {
switch (curveProps.fill) {
case "source":
curveProps.fill = edge.node1.getVisual("color");
curveProps.decal = edge.node1.getVisual("style").decal;
break;
case "target":
curveProps.fill = edge.node2.getVisual("color");
curveProps.decal = edge.node2.getVisual("style").decal;
break;
case "gradient":
var sourceColor = edge.node1.getVisual("color");
var targetColor = edge.node2.getVisual("color");
if (isString(sourceColor) && isString(targetColor)) {
curveProps.fill = new LinearGradient(0, 0, +(orient === "horizontal"), +(orient === "vertical"), [{
color: sourceColor,
offset: 0
}, {
color: targetColor,
offset: 1
}]);
}
}
}
function createGridClipShape$1(rect, seriesModel, cb) {
var rectEl = new Rect$2({
shape: {
x: rect.x - 10,
y: rect.y - 10,
width: 0,
height: rect.height + 20
}
});
initProps(rectEl, {
shape: {
width: rect.width + 20
}
}, seriesModel, cb);
return rectEl;
}
var SankeySeriesModel = (
/** @class */
(function(_super) {
__extends(SankeySeriesModel2, _super);
function SankeySeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SankeySeriesModel2.type;
return _this;
}
SankeySeriesModel2.prototype.getInitialData = function(option, ecModel) {
var links = option.edges || option.links || [];
var nodes = option.data || option.nodes || [];
var levels = option.levels || [];
this.levelModels = [];
var levelModels = this.levelModels;
for (var i = 0; i < levels.length; i++) {
if (levels[i].depth != null && levels[i].depth >= 0) {
levelModels[levels[i].depth] = new Model(levels[i], this, ecModel);
}
}
var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);
return graph.data;
function beforeLink(nodeData, edgeData) {
nodeData.wrapMethod("getItemModel", function(model, idx) {
var seriesModel = model.parentModel;
var layout2 = seriesModel.getData().getItemLayout(idx);
if (layout2) {
var nodeDepth = layout2.depth;
var levelModel = seriesModel.levelModels[nodeDepth];
if (levelModel) {
model.parentModel = levelModel;
}
}
return model;
});
edgeData.wrapMethod("getItemModel", function(model, idx) {
var seriesModel = model.parentModel;
var edge = seriesModel.getGraph().getEdgeByIndex(idx);
var layout2 = edge.node1.getLayout();
if (layout2) {
var depth = layout2.depth;
var levelModel = seriesModel.levelModels[depth];
if (levelModel) {
model.parentModel = levelModel;
}
}
return model;
});
}
};
SankeySeriesModel2.prototype.setNodePosition = function(dataIndex, localPosition) {
var nodes = this.option.data || this.option.nodes;
var dataItem = nodes[dataIndex];
dataItem.localX = localPosition[0];
dataItem.localY = localPosition[1];
};
SankeySeriesModel2.prototype.getGraph = function() {
return this.getData().graph;
};
SankeySeriesModel2.prototype.getEdgeData = function() {
return this.getGraph().edgeData;
};
SankeySeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
function noValue(val) {
return isNaN(val) || val == null;
}
if (dataType === "edge") {
var params = this.getDataParams(dataIndex, dataType);
var rawDataOpt = params.data;
var edgeValue = params.value;
var edgeName = rawDataOpt.source + " -- " + rawDataOpt.target;
return createTooltipMarkup("nameValue", {
name: edgeName,
value: edgeValue,
noValue: noValue(edgeValue)
});
} else {
var node = this.getGraph().getNodeByIndex(dataIndex);
var value = node.getLayout().value;
var name_1 = this.getDataParams(dataIndex, dataType).data.name;
return createTooltipMarkup("nameValue", {
name: name_1 != null ? name_1 + "" : null,
value,
noValue: noValue(value)
});
}
};
SankeySeriesModel2.prototype.optionUpdated = function() {
};
SankeySeriesModel2.prototype.getDataParams = function(dataIndex, dataType) {
var params = _super.prototype.getDataParams.call(this, dataIndex, dataType);
if (params.value == null && dataType === "node") {
var node = this.getGraph().getNodeByIndex(dataIndex);
var nodeValue = node.getLayout().value;
params.value = nodeValue;
}
return params;
};
SankeySeriesModel2.type = "series.sankey";
SankeySeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "view",
left: "5%",
top: "5%",
right: "20%",
bottom: "5%",
orient: "horizontal",
nodeWidth: 20,
nodeGap: 8,
draggable: true,
layoutIterations: 32,
label: {
show: true,
position: "right",
fontSize: 12
},
edgeLabel: {
show: false,
fontSize: 12
},
levels: [],
nodeAlign: "justify",
lineStyle: {
color: "#314656",
opacity: 0.2,
curveness: 0.5
},
emphasis: {
label: {
show: true
},
lineStyle: {
opacity: 0.5
}
},
select: {
itemStyle: {
borderColor: "#212121"
}
},
animationEasing: "linear",
animationDuration: 1e3
};
return SankeySeriesModel2;
})(SeriesModel)
);
function sankeyLayout(ecModel, api) {
ecModel.eachSeriesByType("sankey", function(seriesModel) {
var nodeWidth = seriesModel.get("nodeWidth");
var nodeGap = seriesModel.get("nodeGap");
var layoutInfo = getViewRect$1(seriesModel, api);
seriesModel.layoutInfo = layoutInfo;
var width = layoutInfo.width;
var height = layoutInfo.height;
var graph = seriesModel.getGraph();
var nodes = graph.nodes;
var edges = graph.edges;
computeNodeValues(nodes);
var filteredNodes = filter(nodes, function(node) {
return node.getLayout().value === 0;
});
var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get("layoutIterations");
var orient = seriesModel.get("orient");
var nodeAlign = seriesModel.get("nodeAlign");
layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign);
});
}
function getViewRect$1(seriesModel, api) {
return getLayoutRect(seriesModel.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
}
function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) {
computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign);
computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient);
computeEdgeDepths(nodes, orient);
}
function computeNodeValues(nodes) {
each$f(nodes, function(node) {
var value1 = sum(node.outEdges, getEdgeValue);
var value2 = sum(node.inEdges, getEdgeValue);
var nodeRawValue = node.getValue() || 0;
var value = Math.max(value1, value2, nodeRawValue);
node.setLayout({
value
}, true);
});
}
function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) {
var remainEdges = [];
var indegreeArr = [];
var zeroIndegrees = [];
var nextTargetNode = [];
var x = 0;
for (var i = 0; i < edges.length; i++) {
remainEdges[i] = 1;
}
for (var i = 0; i < nodes.length; i++) {
indegreeArr[i] = nodes[i].inEdges.length;
if (indegreeArr[i] === 0) {
zeroIndegrees.push(nodes[i]);
}
}
var maxNodeDepth = -1;
while (zeroIndegrees.length) {
for (var idx = 0; idx < zeroIndegrees.length; idx++) {
var node = zeroIndegrees[idx];
var item = node.hostGraph.data.getRawDataItem(node.dataIndex);
var isItemDepth = item.depth != null && item.depth >= 0;
if (isItemDepth && item.depth > maxNodeDepth) {
maxNodeDepth = item.depth;
}
node.setLayout({
depth: isItemDepth ? item.depth : x
}, true);
orient === "vertical" ? node.setLayout({
dy: nodeWidth
}, true) : node.setLayout({
dx: nodeWidth
}, true);
for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) {
var edge = node.outEdges[edgeIdx];
var indexEdge = edges.indexOf(edge);
remainEdges[indexEdge] = 0;
var targetNode = edge.node2;
var nodeIndex = nodes.indexOf(targetNode);
if (--indegreeArr[nodeIndex] === 0 && nextTargetNode.indexOf(targetNode) < 0) {
nextTargetNode.push(targetNode);
}
}
}
++x;
zeroIndegrees = nextTargetNode;
nextTargetNode = [];
}
for (var i = 0; i < remainEdges.length; i++) {
if (remainEdges[i] === 1) {
throw new Error("Sankey is a DAG, the original data has cycle!");
}
}
var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1;
if (nodeAlign && nodeAlign !== "left") {
adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth);
}
var kx = orient === "vertical" ? (height - nodeWidth) / maxDepth : (width - nodeWidth) / maxDepth;
scaleNodeBreadths(nodes, kx, orient);
}
function isNodeDepth(node) {
var item = node.hostGraph.data.getRawDataItem(node.dataIndex);
return item.depth != null && item.depth >= 0;
}
function adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) {
if (nodeAlign === "right") {
var nextSourceNode = [];
var remainNodes = nodes;
var nodeHeight = 0;
while (remainNodes.length) {
for (var i = 0; i < remainNodes.length; i++) {
var node = remainNodes[i];
node.setLayout({
skNodeHeight: nodeHeight
}, true);
for (var j = 0; j < node.inEdges.length; j++) {
var edge = node.inEdges[j];
if (nextSourceNode.indexOf(edge.node1) < 0) {
nextSourceNode.push(edge.node1);
}
}
}
remainNodes = nextSourceNode;
nextSourceNode = [];
++nodeHeight;
}
each$f(nodes, function(node2) {
if (!isNodeDepth(node2)) {
node2.setLayout({
depth: Math.max(0, maxDepth - node2.getLayout().skNodeHeight)
}, true);
}
});
} else if (nodeAlign === "justify") {
moveSinksRight(nodes, maxDepth);
}
}
function moveSinksRight(nodes, maxDepth) {
each$f(nodes, function(node) {
if (!isNodeDepth(node) && !node.outEdges.length) {
node.setLayout({
depth: maxDepth
}, true);
}
});
}
function scaleNodeBreadths(nodes, kx, orient) {
each$f(nodes, function(node) {
var nodeDepth = node.getLayout().depth * kx;
orient === "vertical" ? node.setLayout({
y: nodeDepth
}, true) : node.setLayout({
x: nodeDepth
}, true);
});
}
function computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) {
var nodesByBreadth = prepareNodesByBreadth(nodes, orient);
initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient);
resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);
for (var alpha = 1; iterations > 0; iterations--) {
alpha *= 0.99;
relaxRightToLeft(nodesByBreadth, alpha, orient);
resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);
relaxLeftToRight(nodesByBreadth, alpha, orient);
resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);
}
}
function prepareNodesByBreadth(nodes, orient) {
var nodesByBreadth = [];
var keyAttr = orient === "vertical" ? "y" : "x";
var groupResult = groupData(nodes, function(node) {
return node.getLayout()[keyAttr];
});
groupResult.keys.sort(function(a, b) {
return a - b;
});
each$f(groupResult.keys, function(key) {
nodesByBreadth.push(groupResult.buckets.get(key));
});
return nodesByBreadth;
}
function initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) {
var minKy = Infinity;
each$f(nodesByBreadth, function(nodes) {
var n = nodes.length;
var sum2 = 0;
each$f(nodes, function(node) {
sum2 += node.getLayout().value;
});
var ky = orient === "vertical" ? (width - (n - 1) * nodeGap) / sum2 : (height - (n - 1) * nodeGap) / sum2;
if (ky < minKy) {
minKy = ky;
}
});
each$f(nodesByBreadth, function(nodes) {
each$f(nodes, function(node, i) {
var nodeDy = node.getLayout().value * minKy;
if (orient === "vertical") {
node.setLayout({
x: i
}, true);
node.setLayout({
dx: nodeDy
}, true);
} else {
node.setLayout({
y: i
}, true);
node.setLayout({
dy: nodeDy
}, true);
}
});
});
each$f(edges, function(edge) {
var edgeDy = +edge.getValue() * minKy;
edge.setLayout({
dy: edgeDy
}, true);
});
}
function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {
var keyAttr = orient === "vertical" ? "x" : "y";
each$f(nodesByBreadth, function(nodes) {
nodes.sort(function(a, b) {
return a.getLayout()[keyAttr] - b.getLayout()[keyAttr];
});
var nodeX;
var node;
var dy;
var y0 = 0;
var n = nodes.length;
var nodeDyAttr = orient === "vertical" ? "dx" : "dy";
for (var i = 0; i < n; i++) {
node = nodes[i];
dy = y0 - node.getLayout()[keyAttr];
if (dy > 0) {
nodeX = node.getLayout()[keyAttr] + dy;
orient === "vertical" ? node.setLayout({
x: nodeX
}, true) : node.setLayout({
y: nodeX
}, true);
}
y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap;
}
var viewWidth = orient === "vertical" ? width : height;
dy = y0 - nodeGap - viewWidth;
if (dy > 0) {
nodeX = node.getLayout()[keyAttr] - dy;
orient === "vertical" ? node.setLayout({
x: nodeX
}, true) : node.setLayout({
y: nodeX
}, true);
y0 = nodeX;
for (var i = n - 2; i >= 0; --i) {
node = nodes[i];
dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0;
if (dy > 0) {
nodeX = node.getLayout()[keyAttr] - dy;
orient === "vertical" ? node.setLayout({
x: nodeX
}, true) : node.setLayout({
y: nodeX
}, true);
}
y0 = node.getLayout()[keyAttr];
}
}
});
}
function relaxRightToLeft(nodesByBreadth, alpha, orient) {
each$f(nodesByBreadth.slice().reverse(), function(nodes) {
each$f(nodes, function(node) {
if (node.outEdges.length) {
var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue);
if (isNaN(y)) {
var len2 = node.outEdges.length;
y = len2 ? sum(node.outEdges, centerTarget, orient) / len2 : 0;
}
if (orient === "vertical") {
var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;
node.setLayout({
x: nodeX
}, true);
} else {
var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;
node.setLayout({
y: nodeY
}, true);
}
}
});
});
}
function weightedTarget(edge, orient) {
return center(edge.node2, orient) * edge.getValue();
}
function centerTarget(edge, orient) {
return center(edge.node2, orient);
}
function weightedSource(edge, orient) {
return center(edge.node1, orient) * edge.getValue();
}
function centerSource(edge, orient) {
return center(edge.node1, orient);
}
function center(node, orient) {
return orient === "vertical" ? node.getLayout().x + node.getLayout().dx / 2 : node.getLayout().y + node.getLayout().dy / 2;
}
function getEdgeValue(edge) {
return edge.getValue();
}
function sum(array, cb, orient) {
var sum2 = 0;
var len2 = array.length;
var i = -1;
while (++i < len2) {
var value = +cb(array[i], orient);
if (!isNaN(value)) {
sum2 += value;
}
}
return sum2;
}
function relaxLeftToRight(nodesByBreadth, alpha, orient) {
each$f(nodesByBreadth, function(nodes) {
each$f(nodes, function(node) {
if (node.inEdges.length) {
var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue);
if (isNaN(y)) {
var len2 = node.inEdges.length;
y = len2 ? sum(node.inEdges, centerSource, orient) / len2 : 0;
}
if (orient === "vertical") {
var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;
node.setLayout({
x: nodeX
}, true);
} else {
var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;
node.setLayout({
y: nodeY
}, true);
}
}
});
});
}
function computeEdgeDepths(nodes, orient) {
var keyAttr = orient === "vertical" ? "x" : "y";
each$f(nodes, function(node) {
node.outEdges.sort(function(a, b) {
return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr];
});
node.inEdges.sort(function(a, b) {
return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr];
});
});
each$f(nodes, function(node) {
var sy = 0;
var ty = 0;
each$f(node.outEdges, function(edge) {
edge.setLayout({
sy
}, true);
sy += edge.getLayout().dy;
});
each$f(node.inEdges, function(edge) {
edge.setLayout({
ty
}, true);
ty += edge.getLayout().dy;
});
});
}
function sankeyVisual(ecModel) {
ecModel.eachSeriesByType("sankey", function(seriesModel) {
var graph = seriesModel.getGraph();
var nodes = graph.nodes;
var edges = graph.edges;
if (nodes.length) {
var minValue_1 = Infinity;
var maxValue_1 = -Infinity;
each$f(nodes, function(node) {
var nodeValue = node.getLayout().value;
if (nodeValue < minValue_1) {
minValue_1 = nodeValue;
}
if (nodeValue > maxValue_1) {
maxValue_1 = nodeValue;
}
});
each$f(nodes, function(node) {
var mapping = new VisualMapping({
type: "color",
mappingMethod: "linear",
dataExtent: [minValue_1, maxValue_1],
visual: seriesModel.get("color")
});
var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);
var customColor = node.getModel().get(["itemStyle", "color"]);
if (customColor != null) {
node.setVisual("color", customColor);
node.setVisual("style", {
fill: customColor
});
} else {
node.setVisual("color", mapValueToColor);
node.setVisual("style", {
fill: mapValueToColor
});
}
});
}
if (edges.length) {
each$f(edges, function(edge) {
var edgeStyle = edge.getModel().get("lineStyle");
edge.setVisual("style", edgeStyle);
});
}
});
}
function install$C(registers) {
registers.registerChartView(SankeyView);
registers.registerSeriesModel(SankeySeriesModel);
registers.registerLayout(sankeyLayout);
registers.registerVisual(sankeyVisual);
registers.registerAction({
type: "dragNode",
event: "dragnode",
// here can only use 'update' now, other value is not support in echarts.
update: "update"
}, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "series",
subType: "sankey",
query: payload
}, function(seriesModel) {
seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]);
});
});
}
var WhiskerBoxCommonMixin = (
/** @class */
(function() {
function WhiskerBoxCommonMixin2() {
}
WhiskerBoxCommonMixin2.prototype._hasEncodeRule = function(key) {
var encodeRules = this.getEncode();
return encodeRules && encodeRules.get(key) != null;
};
WhiskerBoxCommonMixin2.prototype.getInitialData = function(option, ecModel) {
var ordinalMeta;
var xAxisModel = ecModel.getComponent("xAxis", this.get("xAxisIndex"));
var yAxisModel = ecModel.getComponent("yAxis", this.get("yAxisIndex"));
var xAxisType = xAxisModel.get("type");
var yAxisType = yAxisModel.get("type");
var addOrdinal;
if (xAxisType === "category") {
option.layout = "horizontal";
ordinalMeta = xAxisModel.getOrdinalMeta();
addOrdinal = !this._hasEncodeRule("x");
} else if (yAxisType === "category") {
option.layout = "vertical";
ordinalMeta = yAxisModel.getOrdinalMeta();
addOrdinal = !this._hasEncodeRule("y");
} else {
option.layout = option.layout || "horizontal";
}
var coordDims = ["x", "y"];
var baseAxisDimIndex = option.layout === "horizontal" ? 0 : 1;
var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];
var otherAxisDim = coordDims[1 - baseAxisDimIndex];
var axisModels = [xAxisModel, yAxisModel];
var baseAxisType = axisModels[baseAxisDimIndex].get("type");
var otherAxisType = axisModels[1 - baseAxisDimIndex].get("type");
var data = option.data;
if (data && addOrdinal) {
var newOptionData_1 = [];
each$f(data, function(item, index) {
var newItem;
if (isArray$1(item)) {
newItem = item.slice();
item.unshift(index);
} else if (isArray$1(item.value)) {
newItem = extend({}, item);
newItem.value = newItem.value.slice();
item.value.unshift(index);
} else {
newItem = item;
}
newOptionData_1.push(newItem);
});
option.data = newOptionData_1;
}
var defaultValueDimensions = this.defaultValueDimensions;
var coordDimensions = [{
name: baseAxisDim,
type: getDimensionTypeByAxis(baseAxisType),
ordinalMeta,
otherDims: {
tooltip: false,
itemName: 0
},
dimsDef: ["base"]
}, {
name: otherAxisDim,
type: getDimensionTypeByAxis(otherAxisType),
dimsDef: defaultValueDimensions.slice()
}];
return createSeriesDataSimply(this, {
coordDimensions,
dimensionsCount: defaultValueDimensions.length + 1,
encodeDefaulter: curry$1(makeSeriesEncodeForAxisCoordSys, coordDimensions, this)
});
};
WhiskerBoxCommonMixin2.prototype.getBaseAxis = function() {
var dim = this._baseAxisDim;
return this.ecModel.getComponent(dim + "Axis", this.get(dim + "AxisIndex")).axis;
};
return WhiskerBoxCommonMixin2;
})()
);
var BoxplotSeriesModel = (
/** @class */
(function(_super) {
__extends(BoxplotSeriesModel2, _super);
function BoxplotSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BoxplotSeriesModel2.type;
_this.defaultValueDimensions = [{
name: "min",
defaultTooltip: true
}, {
name: "Q1",
defaultTooltip: true
}, {
name: "median",
defaultTooltip: true
}, {
name: "Q3",
defaultTooltip: true
}, {
name: "max",
defaultTooltip: true
}];
_this.visualDrawType = "stroke";
return _this;
}
BoxplotSeriesModel2.type = "series.boxplot";
BoxplotSeriesModel2.dependencies = ["xAxis", "yAxis", "grid"];
BoxplotSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "cartesian2d",
legendHoverLink: true,
layout: null,
boxWidth: [7, 50],
itemStyle: {
color: "#fff",
borderWidth: 1
},
emphasis: {
scale: true,
itemStyle: {
borderWidth: 2,
shadowBlur: 5,
shadowOffsetX: 1,
shadowOffsetY: 1,
shadowColor: "rgba(0,0,0,0.2)"
}
},
animationDuration: 800
};
return BoxplotSeriesModel2;
})(SeriesModel)
);
mixin(BoxplotSeriesModel, WhiskerBoxCommonMixin, true);
var BoxplotView = (
/** @class */
(function(_super) {
__extends(BoxplotView2, _super);
function BoxplotView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BoxplotView2.type;
return _this;
}
BoxplotView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var group = this.group;
var oldData = this._data;
if (!this._data) {
group.removeAll();
}
var constDim = seriesModel.get("layout") === "horizontal" ? 1 : 0;
data.diff(oldData).add(function(newIdx) {
if (data.hasValue(newIdx)) {
var itemLayout = data.getItemLayout(newIdx);
var symbolEl = createNormalBox$1(itemLayout, data, newIdx, constDim, true);
data.setItemGraphicEl(newIdx, symbolEl);
group.add(symbolEl);
}
}).update(function(newIdx, oldIdx) {
var symbolEl = oldData.getItemGraphicEl(oldIdx);
if (!data.hasValue(newIdx)) {
group.remove(symbolEl);
return;
}
var itemLayout = data.getItemLayout(newIdx);
if (!symbolEl) {
symbolEl = createNormalBox$1(itemLayout, data, newIdx, constDim);
} else {
saveOldStyle(symbolEl);
updateNormalBoxData(itemLayout, symbolEl, data, newIdx);
}
group.add(symbolEl);
data.setItemGraphicEl(newIdx, symbolEl);
}).remove(function(oldIdx) {
var el = oldData.getItemGraphicEl(oldIdx);
el && group.remove(el);
}).execute();
this._data = data;
};
BoxplotView2.prototype.remove = function(ecModel) {
var group = this.group;
var data = this._data;
this._data = null;
data && data.eachItemGraphicEl(function(el) {
el && group.remove(el);
});
};
BoxplotView2.type = "boxplot";
return BoxplotView2;
})(ChartView)
);
var BoxPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function BoxPathShape2() {
}
return BoxPathShape2;
})()
);
var BoxPath = (
/** @class */
(function(_super) {
__extends(BoxPath2, _super);
function BoxPath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "boxplotBoxPath";
return _this;
}
BoxPath2.prototype.getDefaultShape = function() {
return new BoxPathShape();
};
BoxPath2.prototype.buildPath = function(ctx, shape) {
var ends = shape.points;
var i = 0;
ctx.moveTo(ends[i][0], ends[i][1]);
i++;
for (; i < 4; i++) {
ctx.lineTo(ends[i][0], ends[i][1]);
}
ctx.closePath();
for (; i < ends.length; i++) {
ctx.moveTo(ends[i][0], ends[i][1]);
i++;
ctx.lineTo(ends[i][0], ends[i][1]);
}
};
return BoxPath2;
})(Path)
);
function createNormalBox$1(itemLayout, data, dataIndex, constDim, isInit) {
var ends = itemLayout.ends;
var el = new BoxPath({
shape: {
points: isInit ? transInit$1(ends, constDim, itemLayout) : ends
}
});
updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);
return el;
}
function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) {
var seriesModel = data.hostModel;
var updateMethod = graphic[isInit ? "initProps" : "updateProps"];
updateMethod(el, {
shape: {
points: itemLayout.ends
}
}, seriesModel, dataIndex);
el.useStyle(data.getItemVisual(dataIndex, "style"));
el.style.strokeNoScale = true;
el.z2 = 100;
var itemModel = data.getItemModel(dataIndex);
var emphasisModel = itemModel.getModel("emphasis");
setStatesStylesFromModel(el, itemModel);
toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
}
function transInit$1(points2, dim, itemLayout) {
return map$1(points2, function(point) {
point = point.slice();
point[dim] = itemLayout.initBaseline;
return point;
});
}
var each$9 = each$f;
function boxplotLayout(ecModel) {
var groupResult = groupSeriesByAxis(ecModel);
each$9(groupResult, function(groupItem) {
var seriesModels = groupItem.seriesModels;
if (!seriesModels.length) {
return;
}
calculateBase(groupItem);
each$9(seriesModels, function(seriesModel, idx) {
layoutSingleSeries(seriesModel, groupItem.boxOffsetList[idx], groupItem.boxWidthList[idx]);
});
});
}
function groupSeriesByAxis(ecModel) {
var result = [];
var axisList = [];
ecModel.eachSeriesByType("boxplot", function(seriesModel) {
var baseAxis = seriesModel.getBaseAxis();
var idx = indexOf(axisList, baseAxis);
if (idx < 0) {
idx = axisList.length;
axisList[idx] = baseAxis;
result[idx] = {
axis: baseAxis,
seriesModels: []
};
}
result[idx].seriesModels.push(seriesModel);
});
return result;
}
function calculateBase(groupItem) {
var baseAxis = groupItem.axis;
var seriesModels = groupItem.seriesModels;
var seriesCount = seriesModels.length;
var boxWidthList = groupItem.boxWidthList = [];
var boxOffsetList = groupItem.boxOffsetList = [];
var boundList = [];
var bandWidth;
if (baseAxis.type === "category") {
bandWidth = baseAxis.getBandWidth();
} else {
var maxDataCount_1 = 0;
each$9(seriesModels, function(seriesModel) {
maxDataCount_1 = Math.max(maxDataCount_1, seriesModel.getData().count());
});
var extent = baseAxis.getExtent();
bandWidth = Math.abs(extent[1] - extent[0]) / maxDataCount_1;
}
each$9(seriesModels, function(seriesModel) {
var boxWidthBound = seriesModel.get("boxWidth");
if (!isArray$1(boxWidthBound)) {
boxWidthBound = [boxWidthBound, boxWidthBound];
}
boundList.push([parsePercent(boxWidthBound[0], bandWidth) || 0, parsePercent(boxWidthBound[1], bandWidth) || 0]);
});
var availableWidth = bandWidth * 0.8 - 2;
var boxGap = availableWidth / seriesCount * 0.3;
var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;
var base2 = boxWidth / 2 - availableWidth / 2;
each$9(seriesModels, function(seriesModel, idx) {
boxOffsetList.push(base2);
base2 += boxGap + boxWidth;
boxWidthList.push(Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]));
});
}
function layoutSingleSeries(seriesModel, offset, boxWidth) {
var coordSys = seriesModel.coordinateSystem;
var data = seriesModel.getData();
var halfWidth = boxWidth / 2;
var cDimIdx = seriesModel.get("layout") === "horizontal" ? 0 : 1;
var vDimIdx = 1 - cDimIdx;
var coordDims = ["x", "y"];
var cDim = data.mapDimension(coordDims[cDimIdx]);
var vDims = data.mapDimensionsAll(coordDims[vDimIdx]);
if (cDim == null || vDims.length < 5) {
return;
}
for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
var axisDimVal = data.get(cDim, dataIndex);
var median = getPoint(axisDimVal, vDims[2], dataIndex);
var end1 = getPoint(axisDimVal, vDims[0], dataIndex);
var end2 = getPoint(axisDimVal, vDims[1], dataIndex);
var end4 = getPoint(axisDimVal, vDims[3], dataIndex);
var end5 = getPoint(axisDimVal, vDims[4], dataIndex);
var ends = [];
addBodyEnd(ends, end2, false);
addBodyEnd(ends, end4, true);
ends.push(end1, end2, end5, end4);
layEndLine(ends, end1);
layEndLine(ends, end5);
layEndLine(ends, median);
data.setItemLayout(dataIndex, {
initBaseline: median[vDimIdx],
ends
});
}
function getPoint(axisDimVal2, dim, dataIndex2) {
var val = data.get(dim, dataIndex2);
var p = [];
p[cDimIdx] = axisDimVal2;
p[vDimIdx] = val;
var point;
if (isNaN(axisDimVal2) || isNaN(val)) {
point = [NaN, NaN];
} else {
point = coordSys.dataToPoint(p);
point[cDimIdx] += offset;
}
return point;
}
function addBodyEnd(ends2, point, start) {
var point1 = point.slice();
var point2 = point.slice();
point1[cDimIdx] += halfWidth;
point2[cDimIdx] -= halfWidth;
start ? ends2.push(point1, point2) : ends2.push(point2, point1);
}
function layEndLine(ends2, endCenter) {
var from = endCenter.slice();
var to = endCenter.slice();
from[cDimIdx] -= halfWidth;
to[cDimIdx] += halfWidth;
ends2.push(from, to);
}
}
function prepareBoxplotData(rawData, opt) {
opt = opt || {};
var boxData = [];
var outliers = [];
var boundIQR = opt.boundIQR;
var useExtreme = boundIQR === "none" || boundIQR === 0;
for (var i = 0; i < rawData.length; i++) {
var ascList = asc$2(rawData[i].slice());
var Q1 = quantile(ascList, 0.25);
var Q2 = quantile(ascList, 0.5);
var Q3 = quantile(ascList, 0.75);
var min2 = ascList[0];
var max2 = ascList[ascList.length - 1];
var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
var low = useExtreme ? min2 : Math.max(min2, Q1 - bound);
var high = useExtreme ? max2 : Math.min(max2, Q3 + bound);
var itemNameFormatter = opt.itemNameFormatter;
var itemName = isFunction(itemNameFormatter) ? itemNameFormatter({
value: i
}) : isString(itemNameFormatter) ? itemNameFormatter.replace("{value}", i + "") : i + "";
boxData.push([itemName, low, Q1, Q2, Q3, high]);
for (var j = 0; j < ascList.length; j++) {
var dataItem = ascList[j];
if (dataItem < low || dataItem > high) {
var outlier = [itemName, dataItem];
outliers.push(outlier);
}
}
}
return {
boxData,
outliers
};
}
var boxplotTransform = {
type: "echarts:boxplot",
transform: function transform(params) {
var upstream = params.upstream;
if (upstream.sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS) {
var errMsg = "";
throwError(errMsg);
}
var result = prepareBoxplotData(upstream.getRawData(), params.config);
return [{
dimensions: ["ItemName", "Low", "Q1", "Q2", "Q3", "High"],
data: result.boxData
}, {
data: result.outliers
}];
}
};
function install$B(registers) {
registers.registerSeriesModel(BoxplotSeriesModel);
registers.registerChartView(BoxplotView);
registers.registerLayout(boxplotLayout);
registers.registerTransform(boxplotTransform);
}
var positiveBorderColorQuery = ["itemStyle", "borderColor"];
var negativeBorderColorQuery = ["itemStyle", "borderColor0"];
var dojiBorderColorQuery = ["itemStyle", "borderColorDoji"];
var positiveColorQuery = ["itemStyle", "color"];
var negativeColorQuery = ["itemStyle", "color0"];
function getColor(sign, model) {
return model.get(sign > 0 ? positiveColorQuery : negativeColorQuery);
}
function getBorderColor(sign, model) {
return model.get(sign === 0 ? dojiBorderColorQuery : sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery);
}
var candlestickVisual = {
seriesType: "candlestick",
plan: createRenderPlanner(),
// For legend.
performRawSeries: true,
reset: function(seriesModel, ecModel) {
if (ecModel.isSeriesFiltered(seriesModel)) {
return;
}
var isLargeRender = seriesModel.pipelineContext.large;
return !isLargeRender && {
progress: function(params, data) {
var dataIndex;
while ((dataIndex = params.next()) != null) {
var itemModel = data.getItemModel(dataIndex);
var sign = data.getItemLayout(dataIndex).sign;
var style = itemModel.getItemStyle();
style.fill = getColor(sign, itemModel);
style.stroke = getBorderColor(sign, itemModel) || style.fill;
var existsStyle = data.ensureUniqueItemVisual(dataIndex, "style");
extend(existsStyle, style);
}
}
};
}
};
var SKIP_PROPS = ["color", "borderColor"];
var CandlestickView = (
/** @class */
(function(_super) {
__extends(CandlestickView2, _super);
function CandlestickView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CandlestickView2.type;
return _this;
}
CandlestickView2.prototype.render = function(seriesModel, ecModel, api) {
this.group.removeClipPath();
this._progressiveEls = null;
this._updateDrawMode(seriesModel);
this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel);
};
CandlestickView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) {
this._clear();
this._updateDrawMode(seriesModel);
};
CandlestickView2.prototype.incrementalRender = function(params, seriesModel, ecModel, api) {
this._progressiveEls = [];
this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel);
};
CandlestickView2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
CandlestickView2.prototype._updateDrawMode = function(seriesModel) {
var isLargeDraw = seriesModel.pipelineContext.large;
if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
this._isLargeDraw = isLargeDraw;
this._clear();
}
};
CandlestickView2.prototype._renderNormal = function(seriesModel) {
var data = seriesModel.getData();
var oldData = this._data;
var group = this.group;
var isSimpleBox = data.getLayout("isSimpleBox");
var needsClip = seriesModel.get("clip", true);
var coord = seriesModel.coordinateSystem;
var clipArea = coord.getArea && coord.getArea();
if (!this._data) {
group.removeAll();
}
data.diff(oldData).add(function(newIdx) {
if (data.hasValue(newIdx)) {
var itemLayout = data.getItemLayout(newIdx);
if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
return;
}
var el = createNormalBox(itemLayout, newIdx, true);
initProps(el, {
shape: {
points: itemLayout.ends
}
}, seriesModel, newIdx);
setBoxCommon(el, data, newIdx, isSimpleBox);
group.add(el);
data.setItemGraphicEl(newIdx, el);
}
}).update(function(newIdx, oldIdx) {
var el = oldData.getItemGraphicEl(oldIdx);
if (!data.hasValue(newIdx)) {
group.remove(el);
return;
}
var itemLayout = data.getItemLayout(newIdx);
if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
group.remove(el);
return;
}
if (!el) {
el = createNormalBox(itemLayout);
} else {
updateProps$1(el, {
shape: {
points: itemLayout.ends
}
}, seriesModel, newIdx);
saveOldStyle(el);
}
setBoxCommon(el, data, newIdx, isSimpleBox);
group.add(el);
data.setItemGraphicEl(newIdx, el);
}).remove(function(oldIdx) {
var el = oldData.getItemGraphicEl(oldIdx);
el && group.remove(el);
}).execute();
this._data = data;
};
CandlestickView2.prototype._renderLarge = function(seriesModel) {
this._clear();
createLarge(seriesModel, this.group);
var clipPath = seriesModel.get("clip", true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null;
if (clipPath) {
this.group.setClipPath(clipPath);
} else {
this.group.removeClipPath();
}
};
CandlestickView2.prototype._incrementalRenderNormal = function(params, seriesModel) {
var data = seriesModel.getData();
var isSimpleBox = data.getLayout("isSimpleBox");
var dataIndex;
while ((dataIndex = params.next()) != null) {
var itemLayout = data.getItemLayout(dataIndex);
var el = createNormalBox(itemLayout);
setBoxCommon(el, data, dataIndex, isSimpleBox);
el.incremental = true;
this.group.add(el);
this._progressiveEls.push(el);
}
};
CandlestickView2.prototype._incrementalRenderLarge = function(params, seriesModel) {
createLarge(seriesModel, this.group, this._progressiveEls, true);
};
CandlestickView2.prototype.remove = function(ecModel) {
this._clear();
};
CandlestickView2.prototype._clear = function() {
this.group.removeAll();
this._data = null;
};
CandlestickView2.type = "candlestick";
return CandlestickView2;
})(ChartView)
);
var NormalBoxPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function NormalBoxPathShape2() {
}
return NormalBoxPathShape2;
})()
);
var NormalBoxPath = (
/** @class */
(function(_super) {
__extends(NormalBoxPath2, _super);
function NormalBoxPath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "normalCandlestickBox";
return _this;
}
NormalBoxPath2.prototype.getDefaultShape = function() {
return new NormalBoxPathShape();
};
NormalBoxPath2.prototype.buildPath = function(ctx, shape) {
var ends = shape.points;
if (this.__simpleBox) {
ctx.moveTo(ends[4][0], ends[4][1]);
ctx.lineTo(ends[6][0], ends[6][1]);
} else {
ctx.moveTo(ends[0][0], ends[0][1]);
ctx.lineTo(ends[1][0], ends[1][1]);
ctx.lineTo(ends[2][0], ends[2][1]);
ctx.lineTo(ends[3][0], ends[3][1]);
ctx.closePath();
ctx.moveTo(ends[4][0], ends[4][1]);
ctx.lineTo(ends[5][0], ends[5][1]);
ctx.moveTo(ends[6][0], ends[6][1]);
ctx.lineTo(ends[7][0], ends[7][1]);
}
};
return NormalBoxPath2;
})(Path)
);
function createNormalBox(itemLayout, dataIndex, isInit) {
var ends = itemLayout.ends;
return new NormalBoxPath({
shape: {
points: isInit ? transInit(ends, itemLayout) : ends
},
z2: 100
});
}
function isNormalBoxClipped(clipArea, itemLayout) {
var clipped = true;
for (var i = 0; i < itemLayout.ends.length; i++) {
if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) {
clipped = false;
break;
}
}
return clipped;
}
function setBoxCommon(el, data, dataIndex, isSimpleBox) {
var itemModel = data.getItemModel(dataIndex);
el.useStyle(data.getItemVisual(dataIndex, "style"));
el.style.strokeNoScale = true;
el.__simpleBox = isSimpleBox;
setStatesStylesFromModel(el, itemModel);
var sign = data.getItemLayout(dataIndex).sign;
each$f(el.states, function(state, stateName) {
var stateModel = itemModel.getModel(stateName);
var color = getColor(sign, stateModel);
var borderColor = getBorderColor(sign, stateModel) || color;
var stateStyle = state.style || (state.style = {});
color && (stateStyle.fill = color);
borderColor && (stateStyle.stroke = borderColor);
});
var emphasisModel = itemModel.getModel("emphasis");
toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
}
function transInit(points2, itemLayout) {
return map$1(points2, function(point) {
point = point.slice();
point[1] = itemLayout.initBaseline;
return point;
});
}
var LargeBoxPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function LargeBoxPathShape2() {
}
return LargeBoxPathShape2;
})()
);
var LargeBoxPath = (
/** @class */
(function(_super) {
__extends(LargeBoxPath2, _super);
function LargeBoxPath2(opts) {
var _this = _super.call(this, opts) || this;
_this.type = "largeCandlestickBox";
return _this;
}
LargeBoxPath2.prototype.getDefaultShape = function() {
return new LargeBoxPathShape();
};
LargeBoxPath2.prototype.buildPath = function(ctx, shape) {
var points2 = shape.points;
for (var i = 0; i < points2.length; ) {
if (this.__sign === points2[i++]) {
var x = points2[i++];
ctx.moveTo(x, points2[i++]);
ctx.lineTo(x, points2[i++]);
} else {
i += 3;
}
}
};
return LargeBoxPath2;
})(Path)
);
function createLarge(seriesModel, group, progressiveEls, incremental) {
var data = seriesModel.getData();
var largePoints = data.getLayout("largePoints");
var elP = new LargeBoxPath({
shape: {
points: largePoints
},
__sign: 1,
ignoreCoarsePointer: true
});
group.add(elP);
var elN = new LargeBoxPath({
shape: {
points: largePoints
},
__sign: -1,
ignoreCoarsePointer: true
});
group.add(elN);
var elDoji = new LargeBoxPath({
shape: {
points: largePoints
},
__sign: 0,
ignoreCoarsePointer: true
});
group.add(elDoji);
setLargeStyle(1, elP, seriesModel);
setLargeStyle(-1, elN, seriesModel);
setLargeStyle(0, elDoji, seriesModel);
if (incremental) {
elP.incremental = true;
elN.incremental = true;
}
if (progressiveEls) {
progressiveEls.push(elP, elN);
}
}
function setLargeStyle(sign, el, seriesModel, data) {
var borderColor = getBorderColor(sign, seriesModel) || getColor(sign, seriesModel);
var itemStyle = seriesModel.getModel("itemStyle").getItemStyle(SKIP_PROPS);
el.useStyle(itemStyle);
el.style.fill = null;
el.style.stroke = borderColor;
}
var CandlestickSeriesModel = (
/** @class */
(function(_super) {
__extends(CandlestickSeriesModel2, _super);
function CandlestickSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CandlestickSeriesModel2.type;
_this.defaultValueDimensions = [{
name: "open",
defaultTooltip: true
}, {
name: "close",
defaultTooltip: true
}, {
name: "lowest",
defaultTooltip: true
}, {
name: "highest",
defaultTooltip: true
}];
return _this;
}
CandlestickSeriesModel2.prototype.getShadowDim = function() {
return "open";
};
CandlestickSeriesModel2.prototype.brushSelector = function(dataIndex, data, selectors) {
var itemLayout = data.getItemLayout(dataIndex);
return itemLayout && selectors.rect(itemLayout.brushRect);
};
CandlestickSeriesModel2.type = "series.candlestick";
CandlestickSeriesModel2.dependencies = ["xAxis", "yAxis", "grid"];
CandlestickSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
coordinateSystem: "cartesian2d",
legendHoverLink: true,
// xAxisIndex: 0,
// yAxisIndex: 0,
layout: null,
clip: true,
itemStyle: {
color: "#eb5454",
color0: "#47b262",
borderColor: "#eb5454",
borderColor0: "#47b262",
borderColorDoji: null,
// borderColor: '#d24040',
// borderColor0: '#398f4f',
borderWidth: 1
},
emphasis: {
itemStyle: {
borderWidth: 2
}
},
barMaxWidth: null,
barMinWidth: null,
barWidth: null,
large: true,
largeThreshold: 600,
progressive: 3e3,
progressiveThreshold: 1e4,
progressiveChunkMode: "mod",
animationEasing: "linear",
animationDuration: 300
};
return CandlestickSeriesModel2;
})(SeriesModel)
);
mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true);
function candlestickPreprocessor(option) {
if (!option || !isArray$1(option.series)) {
return;
}
each$f(option.series, function(seriesItem) {
if (isObject$3(seriesItem) && seriesItem.type === "k") {
seriesItem.type = "candlestick";
}
});
}
var candlestickLayout = {
seriesType: "candlestick",
plan: createRenderPlanner(),
reset: function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var data = seriesModel.getData();
var candleWidth = calculateCandleWidth(seriesModel, data);
var cDimIdx = 0;
var vDimIdx = 1;
var coordDims = ["x", "y"];
var cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx]));
var vDimsI = map$1(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data);
var openDimI = vDimsI[0];
var closeDimI = vDimsI[1];
var lowestDimI = vDimsI[2];
var highestDimI = vDimsI[3];
data.setLayout({
candleWidth,
// The value is experimented visually.
isSimpleBox: candleWidth <= 1.3
});
if (cDimI < 0 || vDimsI.length < 4) {
return;
}
return {
progress: seriesModel.pipelineContext.large ? largeProgress : normalProgress
};
function normalProgress(params, data2) {
var dataIndex;
var store = data2.getStore();
while ((dataIndex = params.next()) != null) {
var axisDimVal = store.get(cDimI, dataIndex);
var openVal = store.get(openDimI, dataIndex);
var closeVal = store.get(closeDimI, dataIndex);
var lowestVal = store.get(lowestDimI, dataIndex);
var highestVal = store.get(highestDimI, dataIndex);
var ocLow = Math.min(openVal, closeVal);
var ocHigh = Math.max(openVal, closeVal);
var ocLowPoint = getPoint(ocLow, axisDimVal);
var ocHighPoint = getPoint(ocHigh, axisDimVal);
var lowestPoint = getPoint(lowestVal, axisDimVal);
var highestPoint = getPoint(highestVal, axisDimVal);
var ends = [];
addBodyEnd(ends, ocHighPoint, 0);
addBodyEnd(ends, ocLowPoint, 1);
ends.push(subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint), subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint));
var itemModel = data2.getItemModel(dataIndex);
var hasDojiColor = !!itemModel.get(["itemStyle", "borderColorDoji"]);
data2.setItemLayout(dataIndex, {
sign: getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor),
initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx],
ends,
brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal)
});
}
function getPoint(val, axisDimVal2) {
var p = [];
p[cDimIdx] = axisDimVal2;
p[vDimIdx] = val;
return isNaN(axisDimVal2) || isNaN(val) ? [NaN, NaN] : coordSys.dataToPoint(p);
}
function addBodyEnd(ends2, point, start) {
var point1 = point.slice();
var point2 = point.slice();
point1[cDimIdx] = subPixelOptimize(point1[cDimIdx] + candleWidth / 2, 1, false);
point2[cDimIdx] = subPixelOptimize(point2[cDimIdx] - candleWidth / 2, 1, true);
start ? ends2.push(point1, point2) : ends2.push(point2, point1);
}
function makeBrushRect(lowestVal2, highestVal2, axisDimVal2) {
var pmin = getPoint(lowestVal2, axisDimVal2);
var pmax = getPoint(highestVal2, axisDimVal2);
pmin[cDimIdx] -= candleWidth / 2;
pmax[cDimIdx] -= candleWidth / 2;
return {
x: pmin[0],
y: pmin[1],
width: candleWidth,
height: pmax[1] - pmin[1]
};
}
function subPixelOptimizePoint(point) {
point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1);
return point;
}
}
function largeProgress(params, data2) {
var points2 = createFloat32Array(params.count * 4);
var offset = 0;
var point;
var tmpIn = [];
var tmpOut = [];
var dataIndex;
var store = data2.getStore();
var hasDojiColor = !!seriesModel.get(["itemStyle", "borderColorDoji"]);
while ((dataIndex = params.next()) != null) {
var axisDimVal = store.get(cDimI, dataIndex);
var openVal = store.get(openDimI, dataIndex);
var closeVal = store.get(closeDimI, dataIndex);
var lowestVal = store.get(lowestDimI, dataIndex);
var highestVal = store.get(highestDimI, dataIndex);
if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {
points2[offset++] = NaN;
offset += 3;
continue;
}
points2[offset++] = getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor);
tmpIn[cDimIdx] = axisDimVal;
tmpIn[vDimIdx] = lowestVal;
point = coordSys.dataToPoint(tmpIn, null, tmpOut);
points2[offset++] = point ? point[0] : NaN;
points2[offset++] = point ? point[1] : NaN;
tmpIn[vDimIdx] = highestVal;
point = coordSys.dataToPoint(tmpIn, null, tmpOut);
points2[offset++] = point ? point[1] : NaN;
}
data2.setLayout("largePoints", points2);
}
}
};
function getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor) {
var sign;
if (openVal > closeVal) {
sign = -1;
} else if (openVal < closeVal) {
sign = 1;
} else {
sign = hasDojiColor ? 0 : dataIndex > 0 ? store.get(closeDimI, dataIndex - 1) <= closeVal ? 1 : -1 : 1;
}
return sign;
}
function calculateCandleWidth(seriesModel, data) {
var baseAxis = seriesModel.getBaseAxis();
var extent;
var bandWidth = baseAxis.type === "category" ? baseAxis.getBandWidth() : (extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / data.count());
var barMaxWidth = parsePercent(retrieve2(seriesModel.get("barMaxWidth"), bandWidth), bandWidth);
var barMinWidth = parsePercent(retrieve2(seriesModel.get("barMinWidth"), 1), bandWidth);
var barWidth = seriesModel.get("barWidth");
return barWidth != null ? parsePercent(barWidth, bandWidth) : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);
}
function install$A(registers) {
registers.registerChartView(CandlestickView);
registers.registerSeriesModel(CandlestickSeriesModel);
registers.registerPreprocessor(candlestickPreprocessor);
registers.registerVisual(candlestickVisual);
registers.registerLayout(candlestickLayout);
}
function updateRipplePath(rippleGroup, effectCfg) {
var color = effectCfg.rippleEffectColor || effectCfg.color;
rippleGroup.eachChild(function(ripplePath) {
ripplePath.attr({
z: effectCfg.z,
zlevel: effectCfg.zlevel,
style: {
stroke: effectCfg.brushType === "stroke" ? color : null,
fill: effectCfg.brushType === "fill" ? color : null
}
});
});
}
var EffectSymbol = (
/** @class */
(function(_super) {
__extends(EffectSymbol2, _super);
function EffectSymbol2(data, idx) {
var _this = _super.call(this) || this;
var symbol = new Symbol$1(data, idx);
var rippleGroup = new Group$3();
_this.add(symbol);
_this.add(rippleGroup);
_this.updateData(data, idx);
return _this;
}
EffectSymbol2.prototype.stopEffectAnimation = function() {
this.childAt(1).removeAll();
};
EffectSymbol2.prototype.startEffectAnimation = function(effectCfg) {
var symbolType = effectCfg.symbolType;
var color = effectCfg.color;
var rippleNumber = effectCfg.rippleNumber;
var rippleGroup = this.childAt(1);
for (var i = 0; i < rippleNumber; i++) {
var ripplePath = createSymbol$1(symbolType, -1, -1, 2, 2, color);
ripplePath.attr({
style: {
strokeNoScale: true
},
z2: 99,
silent: true,
scaleX: 0.5,
scaleY: 0.5
});
var delay = -i / rippleNumber * effectCfg.period + effectCfg.effectOffset;
ripplePath.animate("", true).when(effectCfg.period, {
scaleX: effectCfg.rippleScale / 2,
scaleY: effectCfg.rippleScale / 2
}).delay(delay).start();
ripplePath.animateStyle(true).when(effectCfg.period, {
opacity: 0
}).delay(delay).start();
rippleGroup.add(ripplePath);
}
updateRipplePath(rippleGroup, effectCfg);
};
EffectSymbol2.prototype.updateEffectAnimation = function(effectCfg) {
var oldEffectCfg = this._effectCfg;
var rippleGroup = this.childAt(1);
var DIFFICULT_PROPS = ["symbolType", "period", "rippleScale", "rippleNumber"];
for (var i = 0; i < DIFFICULT_PROPS.length; i++) {
var propName = DIFFICULT_PROPS[i];
if (oldEffectCfg[propName] !== effectCfg[propName]) {
this.stopEffectAnimation();
this.startEffectAnimation(effectCfg);
return;
}
}
updateRipplePath(rippleGroup, effectCfg);
};
EffectSymbol2.prototype.highlight = function() {
enterEmphasis(this);
};
EffectSymbol2.prototype.downplay = function() {
leaveEmphasis(this);
};
EffectSymbol2.prototype.getSymbolType = function() {
var symbol = this.childAt(0);
return symbol && symbol.getSymbolType();
};
EffectSymbol2.prototype.updateData = function(data, idx) {
var _this = this;
var seriesModel = data.hostModel;
this.childAt(0).updateData(data, idx);
var rippleGroup = this.childAt(1);
var itemModel = data.getItemModel(idx);
var symbolType = data.getItemVisual(idx, "symbol");
var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, "symbolSize"));
var symbolStyle = data.getItemVisual(idx, "style");
var color = symbolStyle && symbolStyle.fill;
var emphasisModel = itemModel.getModel("emphasis");
rippleGroup.setScale(symbolSize);
rippleGroup.traverse(function(ripplePath) {
ripplePath.setStyle("fill", color);
});
var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, "symbolOffset"), symbolSize);
if (symbolOffset) {
rippleGroup.x = symbolOffset[0];
rippleGroup.y = symbolOffset[1];
}
var symbolRotate = data.getItemVisual(idx, "symbolRotate");
rippleGroup.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
var effectCfg = {};
effectCfg.showEffectOn = seriesModel.get("showEffectOn");
effectCfg.rippleScale = itemModel.get(["rippleEffect", "scale"]);
effectCfg.brushType = itemModel.get(["rippleEffect", "brushType"]);
effectCfg.period = itemModel.get(["rippleEffect", "period"]) * 1e3;
effectCfg.effectOffset = idx / data.count();
effectCfg.z = seriesModel.getShallow("z") || 0;
effectCfg.zlevel = seriesModel.getShallow("zlevel") || 0;
effectCfg.symbolType = symbolType;
effectCfg.color = color;
effectCfg.rippleEffectColor = itemModel.get(["rippleEffect", "color"]);
effectCfg.rippleNumber = itemModel.get(["rippleEffect", "number"]);
if (effectCfg.showEffectOn === "render") {
this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg);
this._effectCfg = effectCfg;
} else {
this._effectCfg = null;
this.stopEffectAnimation();
this.onHoverStateChange = function(toState) {
if (toState === "emphasis") {
if (effectCfg.showEffectOn !== "render") {
_this.startEffectAnimation(effectCfg);
}
} else if (toState === "normal") {
if (effectCfg.showEffectOn !== "render") {
_this.stopEffectAnimation();
}
}
};
}
this._effectCfg = effectCfg;
toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
};
EffectSymbol2.prototype.fadeOut = function(cb) {
cb && cb();
};
return EffectSymbol2;
})(Group$3)
);
var EffectScatterView = (
/** @class */
(function(_super) {
__extends(EffectScatterView2, _super);
function EffectScatterView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = EffectScatterView2.type;
return _this;
}
EffectScatterView2.prototype.init = function() {
this._symbolDraw = new SymbolDraw(EffectSymbol);
};
EffectScatterView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var effectSymbolDraw = this._symbolDraw;
effectSymbolDraw.updateData(data, {
clipShape: this._getClipShape(seriesModel)
});
this.group.add(effectSymbolDraw.group);
};
EffectScatterView2.prototype._getClipShape = function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var clipArea = coordSys && coordSys.getArea && coordSys.getArea();
return seriesModel.get("clip", true) ? clipArea : null;
};
EffectScatterView2.prototype.updateTransform = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
this.group.dirty();
var res = pointsLayout("").reset(seriesModel, ecModel, api);
if (res.progress) {
res.progress({
start: 0,
end: data.count(),
count: data.count()
}, data);
}
this._symbolDraw.updateLayout();
};
EffectScatterView2.prototype._updateGroupTransform = function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.getRoamTransform) {
this.group.transform = clone$3(coordSys.getRoamTransform());
this.group.decomposeTransform();
}
};
EffectScatterView2.prototype.remove = function(ecModel, api) {
this._symbolDraw && this._symbolDraw.remove(true);
};
EffectScatterView2.type = "effectScatter";
return EffectScatterView2;
})(ChartView)
);
var EffectScatterSeriesModel = (
/** @class */
(function(_super) {
__extends(EffectScatterSeriesModel2, _super);
function EffectScatterSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = EffectScatterSeriesModel2.type;
_this.hasSymbolVisual = true;
return _this;
}
EffectScatterSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this, {
useEncodeDefaulter: true
});
};
EffectScatterSeriesModel2.prototype.brushSelector = function(dataIndex, data, selectors) {
return selectors.point(data.getItemLayout(dataIndex));
};
EffectScatterSeriesModel2.type = "series.effectScatter";
EffectScatterSeriesModel2.dependencies = ["grid", "polar"];
EffectScatterSeriesModel2.defaultOption = {
coordinateSystem: "cartesian2d",
// zlevel: 0,
z: 2,
legendHoverLink: true,
effectType: "ripple",
progressive: 0,
// When to show the effect, option: 'render'|'emphasis'
showEffectOn: "render",
clip: true,
// Ripple effect config
rippleEffect: {
period: 4,
// Scale of ripple
scale: 2.5,
// Brush type can be fill or stroke
brushType: "fill",
// Ripple number
number: 3
},
universalTransition: {
divideShape: "clone"
},
// Cartesian coordinate system
// xAxisIndex: 0,
// yAxisIndex: 0,
// Polar coordinate system
// polarIndex: 0,
// Geo coordinate system
// geoIndex: 0,
// symbol: null, // 图形类型
symbolSize: 10
// 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2
// symbolRotate: null, // 图形旋转控制
// itemStyle: {
// opacity: 1
// }
};
return EffectScatterSeriesModel2;
})(SeriesModel)
);
function install$z(registers) {
registers.registerChartView(EffectScatterView);
registers.registerSeriesModel(EffectScatterSeriesModel);
registers.registerLayout(pointsLayout("effectScatter"));
}
var EffectLine = (
/** @class */
(function(_super) {
__extends(EffectLine2, _super);
function EffectLine2(lineData, idx, seriesScope) {
var _this = _super.call(this) || this;
_this.add(_this.createLine(lineData, idx, seriesScope));
_this._updateEffectSymbol(lineData, idx);
return _this;
}
EffectLine2.prototype.createLine = function(lineData, idx, seriesScope) {
return new Line(lineData, idx, seriesScope);
};
EffectLine2.prototype._updateEffectSymbol = function(lineData, idx) {
var itemModel = lineData.getItemModel(idx);
var effectModel = itemModel.getModel("effect");
var size = effectModel.get("symbolSize");
var symbolType = effectModel.get("symbol");
if (!isArray$1(size)) {
size = [size, size];
}
var lineStyle = lineData.getItemVisual(idx, "style");
var color = effectModel.get("color") || lineStyle && lineStyle.stroke;
var symbol = this.childAt(1);
if (this._symbolType !== symbolType) {
this.remove(symbol);
symbol = createSymbol$1(symbolType, -0.5, -0.5, 1, 1, color);
symbol.z2 = 100;
symbol.culling = true;
this.add(symbol);
}
if (!symbol) {
return;
}
symbol.setStyle("shadowColor", color);
symbol.setStyle(effectModel.getItemStyle(["color"]));
symbol.scaleX = size[0];
symbol.scaleY = size[1];
symbol.setColor(color);
this._symbolType = symbolType;
this._symbolScale = size;
this._updateEffectAnimation(lineData, effectModel, idx);
};
EffectLine2.prototype._updateEffectAnimation = function(lineData, effectModel, idx) {
var symbol = this.childAt(1);
if (!symbol) {
return;
}
var points2 = lineData.getItemLayout(idx);
var period = effectModel.get("period") * 1e3;
var loop = effectModel.get("loop");
var roundTrip = effectModel.get("roundTrip");
var constantSpeed = effectModel.get("constantSpeed");
var delayExpr = retrieve(effectModel.get("delay"), function(idx2) {
return idx2 / lineData.count() * period / 3;
});
symbol.ignore = true;
this._updateAnimationPoints(symbol, points2);
if (constantSpeed > 0) {
period = this._getLineLength(symbol) / constantSpeed * 1e3;
}
if (period !== this._period || loop !== this._loop || roundTrip !== this._roundTrip) {
symbol.stopAnimation();
var delayNum = void 0;
if (isFunction(delayExpr)) {
delayNum = delayExpr(idx);
} else {
delayNum = delayExpr;
}
if (symbol.__t > 0) {
delayNum = -period * symbol.__t;
}
this._animateSymbol(symbol, period, delayNum, loop, roundTrip);
}
this._period = period;
this._loop = loop;
this._roundTrip = roundTrip;
};
EffectLine2.prototype._animateSymbol = function(symbol, period, delayNum, loop, roundTrip) {
if (period > 0) {
symbol.__t = 0;
var self_1 = this;
var animator = symbol.animate("", loop).when(roundTrip ? period * 2 : period, {
__t: roundTrip ? 2 : 1
}).delay(delayNum).during(function() {
self_1._updateSymbolPosition(symbol);
});
if (!loop) {
animator.done(function() {
self_1.remove(symbol);
});
}
animator.start();
}
};
EffectLine2.prototype._getLineLength = function(symbol) {
return dist(symbol.__p1, symbol.__cp1) + dist(symbol.__cp1, symbol.__p2);
};
EffectLine2.prototype._updateAnimationPoints = function(symbol, points2) {
symbol.__p1 = points2[0];
symbol.__p2 = points2[1];
symbol.__cp1 = points2[2] || [(points2[0][0] + points2[1][0]) / 2, (points2[0][1] + points2[1][1]) / 2];
};
EffectLine2.prototype.updateData = function(lineData, idx, seriesScope) {
this.childAt(0).updateData(lineData, idx, seriesScope);
this._updateEffectSymbol(lineData, idx);
};
EffectLine2.prototype._updateSymbolPosition = function(symbol) {
var p1 = symbol.__p1;
var p2 = symbol.__p2;
var cp1 = symbol.__cp1;
var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;
var pos = [symbol.x, symbol.y];
var lastPos = pos.slice();
var quadraticAt2 = quadraticAt$1;
var quadraticDerivativeAt$1 = quadraticDerivativeAt;
pos[0] = quadraticAt2(p1[0], cp1[0], p2[0], t);
pos[1] = quadraticAt2(p1[1], cp1[1], p2[1], t);
var tx = symbol.__t < 1 ? quadraticDerivativeAt$1(p1[0], cp1[0], p2[0], t) : quadraticDerivativeAt$1(p2[0], cp1[0], p1[0], 1 - t);
var ty = symbol.__t < 1 ? quadraticDerivativeAt$1(p1[1], cp1[1], p2[1], t) : quadraticDerivativeAt$1(p2[1], cp1[1], p1[1], 1 - t);
symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
if (this._symbolType === "line" || this._symbolType === "rect" || this._symbolType === "roundRect") {
if (symbol.__lastT !== void 0 && symbol.__lastT < symbol.__t) {
symbol.scaleY = dist(lastPos, pos) * 1.05;
if (t === 1) {
pos[0] = lastPos[0] + (pos[0] - lastPos[0]) / 2;
pos[1] = lastPos[1] + (pos[1] - lastPos[1]) / 2;
}
} else if (symbol.__lastT === 1) {
symbol.scaleY = 2 * dist(p1, pos);
} else {
symbol.scaleY = this._symbolScale[1];
}
}
symbol.__lastT = symbol.__t;
symbol.ignore = false;
symbol.x = pos[0];
symbol.y = pos[1];
};
EffectLine2.prototype.updateLayout = function(lineData, idx) {
this.childAt(0).updateLayout(lineData, idx);
var effectModel = lineData.getItemModel(idx).getModel("effect");
this._updateEffectAnimation(lineData, effectModel, idx);
};
return EffectLine2;
})(Group$3)
);
var Polyline = (
/** @class */
(function(_super) {
__extends(Polyline2, _super);
function Polyline2(lineData, idx, seriesScope) {
var _this = _super.call(this) || this;
_this._createPolyline(lineData, idx, seriesScope);
return _this;
}
Polyline2.prototype._createPolyline = function(lineData, idx, seriesScope) {
var points2 = lineData.getItemLayout(idx);
var line = new Polyline$1({
shape: {
points: points2
}
});
this.add(line);
this._updateCommonStl(lineData, idx, seriesScope);
};
Polyline2.prototype.updateData = function(lineData, idx, seriesScope) {
var seriesModel = lineData.hostModel;
var line = this.childAt(0);
var target = {
shape: {
points: lineData.getItemLayout(idx)
}
};
updateProps$1(line, target, seriesModel, idx);
this._updateCommonStl(lineData, idx, seriesScope);
};
Polyline2.prototype._updateCommonStl = function(lineData, idx, seriesScope) {
var line = this.childAt(0);
var itemModel = lineData.getItemModel(idx);
var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle;
var focus = seriesScope && seriesScope.focus;
var blurScope = seriesScope && seriesScope.blurScope;
var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled;
if (!seriesScope || lineData.hasItemOption) {
var emphasisModel = itemModel.getModel("emphasis");
emphasisLineStyle = emphasisModel.getModel("lineStyle").getLineStyle();
emphasisDisabled = emphasisModel.get("disabled");
focus = emphasisModel.get("focus");
blurScope = emphasisModel.get("blurScope");
}
line.useStyle(lineData.getItemVisual(idx, "style"));
line.style.fill = null;
line.style.strokeNoScale = true;
var lineEmphasisState = line.ensureState("emphasis");
lineEmphasisState.style = emphasisLineStyle;
toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);
};
Polyline2.prototype.updateLayout = function(lineData, idx) {
var polyline = this.childAt(0);
polyline.setShape("points", lineData.getItemLayout(idx));
};
return Polyline2;
})(Group$3)
);
var EffectPolyline = (
/** @class */
(function(_super) {
__extends(EffectPolyline2, _super);
function EffectPolyline2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._lastFrame = 0;
_this._lastFramePercent = 0;
return _this;
}
EffectPolyline2.prototype.createLine = function(lineData, idx, seriesScope) {
return new Polyline(lineData, idx, seriesScope);
};
EffectPolyline2.prototype._updateAnimationPoints = function(symbol, points2) {
this._points = points2;
var accLenArr = [0];
var len2 = 0;
for (var i = 1; i < points2.length; i++) {
var p1 = points2[i - 1];
var p2 = points2[i];
len2 += dist(p1, p2);
accLenArr.push(len2);
}
if (len2 === 0) {
this._length = 0;
return;
}
for (var i = 0; i < accLenArr.length; i++) {
accLenArr[i] /= len2;
}
this._offsets = accLenArr;
this._length = len2;
};
EffectPolyline2.prototype._getLineLength = function() {
return this._length;
};
EffectPolyline2.prototype._updateSymbolPosition = function(symbol) {
var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;
var points2 = this._points;
var offsets = this._offsets;
var len2 = points2.length;
if (!offsets) {
return;
}
var lastFrame = this._lastFrame;
var frame;
if (t < this._lastFramePercent) {
var start = Math.min(lastFrame + 1, len2 - 1);
for (frame = start; frame >= 0; frame--) {
if (offsets[frame] <= t) {
break;
}
}
frame = Math.min(frame, len2 - 2);
} else {
for (frame = lastFrame; frame < len2; frame++) {
if (offsets[frame] > t) {
break;
}
}
frame = Math.min(frame - 1, len2 - 2);
}
var p = (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]);
var p0 = points2[frame];
var p1 = points2[frame + 1];
symbol.x = p0[0] * (1 - p) + p * p1[0];
symbol.y = p0[1] * (1 - p) + p * p1[1];
var tx = symbol.__t < 1 ? p1[0] - p0[0] : p0[0] - p1[0];
var ty = symbol.__t < 1 ? p1[1] - p0[1] : p0[1] - p1[1];
symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
this._lastFrame = frame;
this._lastFramePercent = t;
symbol.ignore = false;
};
return EffectPolyline2;
})(EffectLine)
);
var LargeLinesPathShape = (
/** @class */
/* @__PURE__ */ (function() {
function LargeLinesPathShape2() {
this.polyline = false;
this.curveness = 0;
this.segs = [];
}
return LargeLinesPathShape2;
})()
);
var LargeLinesPath = (
/** @class */
(function(_super) {
__extends(LargeLinesPath2, _super);
function LargeLinesPath2(opts) {
var _this = _super.call(this, opts) || this;
_this._off = 0;
_this.hoverDataIdx = -1;
return _this;
}
LargeLinesPath2.prototype.reset = function() {
this.notClear = false;
this._off = 0;
};
LargeLinesPath2.prototype.getDefaultStyle = function() {
return {
stroke: "#000",
fill: null
};
};
LargeLinesPath2.prototype.getDefaultShape = function() {
return new LargeLinesPathShape();
};
LargeLinesPath2.prototype.buildPath = function(ctx, shape) {
var segs = shape.segs;
var curveness = shape.curveness;
var i;
if (shape.polyline) {
for (i = this._off; i < segs.length; ) {
var count2 = segs[i++];
if (count2 > 0) {
ctx.moveTo(segs[i++], segs[i++]);
for (var k = 1; k < count2; k++) {
ctx.lineTo(segs[i++], segs[i++]);
}
}
}
} else {
for (i = this._off; i < segs.length; ) {
var x0 = segs[i++];
var y0 = segs[i++];
var x1 = segs[i++];
var y1 = segs[i++];
ctx.moveTo(x0, y0);
if (curveness > 0) {
var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
ctx.quadraticCurveTo(x2, y2, x1, y1);
} else {
ctx.lineTo(x1, y1);
}
}
}
if (this.incremental) {
this._off = i;
this.notClear = true;
}
};
LargeLinesPath2.prototype.findDataIndex = function(x, y) {
var shape = this.shape;
var segs = shape.segs;
var curveness = shape.curveness;
var lineWidth = this.style.lineWidth;
if (shape.polyline) {
var dataIndex = 0;
for (var i = 0; i < segs.length; ) {
var count2 = segs[i++];
if (count2 > 0) {
var x0 = segs[i++];
var y0 = segs[i++];
for (var k = 1; k < count2; k++) {
var x1 = segs[i++];
var y1 = segs[i++];
if (containStroke(x0, y0, x1, y1, lineWidth, x, y)) {
return dataIndex;
}
}
}
dataIndex++;
}
} else {
var dataIndex = 0;
for (var i = 0; i < segs.length; ) {
var x0 = segs[i++];
var y0 = segs[i++];
var x1 = segs[i++];
var y1 = segs[i++];
if (curveness > 0) {
var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
if (containStroke$1(x0, y0, x2, y2, x1, y1, lineWidth, x, y)) {
return dataIndex;
}
} else {
if (containStroke(x0, y0, x1, y1, lineWidth, x, y)) {
return dataIndex;
}
}
dataIndex++;
}
}
return -1;
};
LargeLinesPath2.prototype.contain = function(x, y) {
var localPos = this.transformCoordToLocal(x, y);
var rect = this.getBoundingRect();
x = localPos[0];
y = localPos[1];
if (rect.contain(x, y)) {
var dataIdx = this.hoverDataIdx = this.findDataIndex(x, y);
return dataIdx >= 0;
}
this.hoverDataIdx = -1;
return false;
};
LargeLinesPath2.prototype.getBoundingRect = function() {
var rect = this._rect;
if (!rect) {
var shape = this.shape;
var points2 = shape.segs;
var minX = Infinity;
var minY = Infinity;
var maxX = -Infinity;
var maxY = -Infinity;
for (var i = 0; i < points2.length; ) {
var x = points2[i++];
var y = points2[i++];
minX = Math.min(x, minX);
maxX = Math.max(x, maxX);
minY = Math.min(y, minY);
maxY = Math.max(y, maxY);
}
rect = this._rect = new BoundingRect(minX, minY, maxX, maxY);
}
return rect;
};
return LargeLinesPath2;
})(Path)
);
var LargeLineDraw = (
/** @class */
(function() {
function LargeLineDraw2() {
this.group = new Group$3();
}
LargeLineDraw2.prototype.updateData = function(data) {
this._clear();
var lineEl = this._create();
lineEl.setShape({
segs: data.getLayout("linesPoints")
});
this._setCommon(lineEl, data);
};
LargeLineDraw2.prototype.incrementalPrepareUpdate = function(data) {
this.group.removeAll();
this._clear();
};
LargeLineDraw2.prototype.incrementalUpdate = function(taskParams, data) {
var lastAdded = this._newAdded[0];
var linePoints = data.getLayout("linesPoints");
var oldSegs = lastAdded && lastAdded.shape.segs;
if (oldSegs && oldSegs.length < 2e4) {
var oldLen = oldSegs.length;
var newSegs = new Float32Array(oldLen + linePoints.length);
newSegs.set(oldSegs);
newSegs.set(linePoints, oldLen);
lastAdded.setShape({
segs: newSegs
});
} else {
this._newAdded = [];
var lineEl = this._create();
lineEl.incremental = true;
lineEl.setShape({
segs: linePoints
});
this._setCommon(lineEl, data);
lineEl.__startIndex = taskParams.start;
}
};
LargeLineDraw2.prototype.remove = function() {
this._clear();
};
LargeLineDraw2.prototype.eachRendered = function(cb) {
this._newAdded[0] && cb(this._newAdded[0]);
};
LargeLineDraw2.prototype._create = function() {
var lineEl = new LargeLinesPath({
cursor: "default",
ignoreCoarsePointer: true
});
this._newAdded.push(lineEl);
this.group.add(lineEl);
return lineEl;
};
LargeLineDraw2.prototype._setCommon = function(lineEl, data, isIncremental) {
var hostModel = data.hostModel;
lineEl.setShape({
polyline: hostModel.get("polyline"),
curveness: hostModel.get(["lineStyle", "curveness"])
});
lineEl.useStyle(hostModel.getModel("lineStyle").getLineStyle());
lineEl.style.strokeNoScale = true;
var style = data.getVisual("style");
if (style && style.stroke) {
lineEl.setStyle("stroke", style.stroke);
}
lineEl.setStyle("fill", null);
var ecData = getECData(lineEl);
ecData.seriesIndex = hostModel.seriesIndex;
lineEl.on("mousemove", function(e) {
ecData.dataIndex = null;
var dataIndex = lineEl.hoverDataIdx;
if (dataIndex > 0) {
ecData.dataIndex = dataIndex + lineEl.__startIndex;
}
});
};
LargeLineDraw2.prototype._clear = function() {
this._newAdded = [];
this.group.removeAll();
};
return LargeLineDraw2;
})()
);
var linesLayout = {
seriesType: "lines",
plan: createRenderPlanner(),
reset: function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (!coordSys) {
return;
}
var isPolyline = seriesModel.get("polyline");
var isLarge = seriesModel.pipelineContext.large;
return {
progress: function(params, lineData) {
var lineCoords = [];
if (isLarge) {
var points2 = void 0;
var segCount = params.end - params.start;
if (isPolyline) {
var totalCoordsCount = 0;
for (var i = params.start; i < params.end; i++) {
totalCoordsCount += seriesModel.getLineCoordsCount(i);
}
points2 = new Float32Array(segCount + totalCoordsCount * 2);
} else {
points2 = new Float32Array(segCount * 4);
}
var offset = 0;
var pt = [];
for (var i = params.start; i < params.end; i++) {
var len2 = seriesModel.getLineCoords(i, lineCoords);
if (isPolyline) {
points2[offset++] = len2;
}
for (var k = 0; k < len2; k++) {
pt = coordSys.dataToPoint(lineCoords[k], false, pt);
points2[offset++] = pt[0];
points2[offset++] = pt[1];
}
}
lineData.setLayout("linesPoints", points2);
} else {
for (var i = params.start; i < params.end; i++) {
var itemModel = lineData.getItemModel(i);
var len2 = seriesModel.getLineCoords(i, lineCoords);
var pts = [];
if (isPolyline) {
for (var j = 0; j < len2; j++) {
pts.push(coordSys.dataToPoint(lineCoords[j]));
}
} else {
pts[0] = coordSys.dataToPoint(lineCoords[0]);
pts[1] = coordSys.dataToPoint(lineCoords[1]);
var curveness = itemModel.get(["lineStyle", "curveness"]);
if (+curveness) {
pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness];
}
}
lineData.setItemLayout(i, pts);
}
}
}
};
}
};
var LinesView = (
/** @class */
(function(_super) {
__extends(LinesView2, _super);
function LinesView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = LinesView2.type;
return _this;
}
LinesView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var lineDraw = this._updateLineDraw(data, seriesModel);
var zlevel = seriesModel.get("zlevel");
var trailLength = seriesModel.get(["effect", "trailLength"]);
var zr = api.getZr();
var isSvg = zr.painter.getType() === "svg";
if (!isSvg) {
zr.painter.getLayer(zlevel).clear(true);
}
if (this._lastZlevel != null && !isSvg) {
zr.configLayer(this._lastZlevel, {
motionBlur: false
});
}
if (this._showEffect(seriesModel) && trailLength > 0) {
if (!isSvg) {
zr.configLayer(zlevel, {
motionBlur: true,
lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)
});
}
}
lineDraw.updateData(data);
var clipPath = seriesModel.get("clip", true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel);
if (clipPath) {
this.group.setClipPath(clipPath);
} else {
this.group.removeClipPath();
}
this._lastZlevel = zlevel;
this._finished = true;
};
LinesView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var lineDraw = this._updateLineDraw(data, seriesModel);
lineDraw.incrementalPrepareUpdate(data);
this._clearLayer(api);
this._finished = false;
};
LinesView2.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) {
this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());
this._finished = taskParams.end === seriesModel.getData().count();
};
LinesView2.prototype.eachRendered = function(cb) {
this._lineDraw && this._lineDraw.eachRendered(cb);
};
LinesView2.prototype.updateTransform = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var pipelineContext = seriesModel.pipelineContext;
if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {
return {
update: true
};
} else {
var res = linesLayout.reset(seriesModel, ecModel, api);
if (res.progress) {
res.progress({
start: 0,
end: data.count(),
count: data.count()
}, data);
}
this._lineDraw.updateLayout();
this._clearLayer(api);
}
};
LinesView2.prototype._updateLineDraw = function(data, seriesModel) {
var lineDraw = this._lineDraw;
var hasEffect = this._showEffect(seriesModel);
var isPolyline = !!seriesModel.get("polyline");
var pipelineContext = seriesModel.pipelineContext;
var isLargeDraw = pipelineContext.large;
if (!lineDraw || hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLargeDraw !== this._isLargeDraw) {
if (lineDraw) {
lineDraw.remove();
}
lineDraw = this._lineDraw = isLargeDraw ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line);
this._hasEffet = hasEffect;
this._isPolyline = isPolyline;
this._isLargeDraw = isLargeDraw;
}
this.group.add(lineDraw.group);
return lineDraw;
};
LinesView2.prototype._showEffect = function(seriesModel) {
return !!seriesModel.get(["effect", "show"]);
};
LinesView2.prototype._clearLayer = function(api) {
var zr = api.getZr();
var isSvg = zr.painter.getType() === "svg";
if (!isSvg && this._lastZlevel != null) {
zr.painter.getLayer(this._lastZlevel).clear(true);
}
};
LinesView2.prototype.remove = function(ecModel, api) {
this._lineDraw && this._lineDraw.remove();
this._lineDraw = null;
this._clearLayer(api);
};
LinesView2.prototype.dispose = function(ecModel, api) {
this.remove(ecModel, api);
};
LinesView2.type = "lines";
return LinesView2;
})(ChartView)
);
var Uint32Arr = typeof Uint32Array === "undefined" ? Array : Uint32Array;
var Float64Arr = typeof Float64Array === "undefined" ? Array : Float64Array;
function compatEc2(seriesOpt) {
var data = seriesOpt.data;
if (data && data[0] && data[0][0] && data[0][0].coord) {
seriesOpt.data = map$1(data, function(itemOpt) {
var coords = [itemOpt[0].coord, itemOpt[1].coord];
var target = {
coords
};
if (itemOpt[0].name) {
target.fromName = itemOpt[0].name;
}
if (itemOpt[1].name) {
target.toName = itemOpt[1].name;
}
return mergeAll([target, itemOpt[0], itemOpt[1]]);
});
}
}
var LinesSeriesModel = (
/** @class */
(function(_super) {
__extends(LinesSeriesModel2, _super);
function LinesSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = LinesSeriesModel2.type;
_this.visualStyleAccessPath = "lineStyle";
_this.visualDrawType = "stroke";
return _this;
}
LinesSeriesModel2.prototype.init = function(option) {
option.data = option.data || [];
compatEc2(option);
var result = this._processFlatCoordsArray(option.data);
this._flatCoords = result.flatCoords;
this._flatCoordsOffset = result.flatCoordsOffset;
if (result.flatCoords) {
option.data = new Float32Array(result.count);
}
_super.prototype.init.apply(this, arguments);
};
LinesSeriesModel2.prototype.mergeOption = function(option) {
compatEc2(option);
if (option.data) {
var result = this._processFlatCoordsArray(option.data);
this._flatCoords = result.flatCoords;
this._flatCoordsOffset = result.flatCoordsOffset;
if (result.flatCoords) {
option.data = new Float32Array(result.count);
}
}
_super.prototype.mergeOption.apply(this, arguments);
};
LinesSeriesModel2.prototype.appendData = function(params) {
var result = this._processFlatCoordsArray(params.data);
if (result.flatCoords) {
if (!this._flatCoords) {
this._flatCoords = result.flatCoords;
this._flatCoordsOffset = result.flatCoordsOffset;
} else {
this._flatCoords = concatArray(this._flatCoords, result.flatCoords);
this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);
}
params.data = new Float32Array(result.count);
}
this.getRawData().appendData(params.data);
};
LinesSeriesModel2.prototype._getCoordsFromItemModel = function(idx) {
var itemModel = this.getData().getItemModel(idx);
var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.getShallow("coords");
return coords;
};
LinesSeriesModel2.prototype.getLineCoordsCount = function(idx) {
if (this._flatCoordsOffset) {
return this._flatCoordsOffset[idx * 2 + 1];
} else {
return this._getCoordsFromItemModel(idx).length;
}
};
LinesSeriesModel2.prototype.getLineCoords = function(idx, out) {
if (this._flatCoordsOffset) {
var offset = this._flatCoordsOffset[idx * 2];
var len2 = this._flatCoordsOffset[idx * 2 + 1];
for (var i = 0; i < len2; i++) {
out[i] = out[i] || [];
out[i][0] = this._flatCoords[offset + i * 2];
out[i][1] = this._flatCoords[offset + i * 2 + 1];
}
return len2;
} else {
var coords = this._getCoordsFromItemModel(idx);
for (var i = 0; i < coords.length; i++) {
out[i] = out[i] || [];
out[i][0] = coords[i][0];
out[i][1] = coords[i][1];
}
return coords.length;
}
};
LinesSeriesModel2.prototype._processFlatCoordsArray = function(data) {
var startOffset = 0;
if (this._flatCoords) {
startOffset = this._flatCoords.length;
}
if (isNumber(data[0])) {
var len2 = data.length;
var coordsOffsetAndLenStorage = new Uint32Arr(len2);
var coordsStorage = new Float64Arr(len2);
var coordsCursor = 0;
var offsetCursor = 0;
var dataCount = 0;
for (var i = 0; i < len2; ) {
dataCount++;
var count2 = data[i++];
coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset;
coordsOffsetAndLenStorage[offsetCursor++] = count2;
for (var k = 0; k < count2; k++) {
var x = data[i++];
var y = data[i++];
coordsStorage[coordsCursor++] = x;
coordsStorage[coordsCursor++] = y;
}
}
return {
flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor),
flatCoords: coordsStorage,
count: dataCount
};
}
return {
flatCoordsOffset: null,
flatCoords: null,
count: data.length
};
};
LinesSeriesModel2.prototype.getInitialData = function(option, ecModel) {
var lineData = new SeriesData(["value"], this);
lineData.hasItemOption = false;
lineData.initData(option.data, [], function(dataItem, dimName, dataIndex, dimIndex) {
if (dataItem instanceof Array) {
return NaN;
} else {
lineData.hasItemOption = true;
var value = dataItem.value;
if (value != null) {
return value instanceof Array ? value[dimIndex] : value;
}
}
});
return lineData;
};
LinesSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var itemModel = data.getItemModel(dataIndex);
var name = itemModel.get("name");
if (name) {
return name;
}
var fromName = itemModel.get("fromName");
var toName = itemModel.get("toName");
var nameArr = [];
fromName != null && nameArr.push(fromName);
toName != null && nameArr.push(toName);
return createTooltipMarkup("nameValue", {
name: nameArr.join(" > ")
});
};
LinesSeriesModel2.prototype.preventIncremental = function() {
return !!this.get(["effect", "show"]);
};
LinesSeriesModel2.prototype.getProgressive = function() {
var progressive = this.option.progressive;
if (progressive == null) {
return this.option.large ? 1e4 : this.get("progressive");
}
return progressive;
};
LinesSeriesModel2.prototype.getProgressiveThreshold = function() {
var progressiveThreshold = this.option.progressiveThreshold;
if (progressiveThreshold == null) {
return this.option.large ? 2e4 : this.get("progressiveThreshold");
}
return progressiveThreshold;
};
LinesSeriesModel2.prototype.getZLevelKey = function() {
var effectModel = this.getModel("effect");
var trailLength = effectModel.get("trailLength");
return this.getData().count() > this.getProgressiveThreshold() ? this.id : effectModel.get("show") && trailLength > 0 ? trailLength + "" : "";
};
LinesSeriesModel2.type = "series.lines";
LinesSeriesModel2.dependencies = ["grid", "polar", "geo", "calendar"];
LinesSeriesModel2.defaultOption = {
coordinateSystem: "geo",
// zlevel: 0,
z: 2,
legendHoverLink: true,
// Cartesian coordinate system
xAxisIndex: 0,
yAxisIndex: 0,
symbol: ["none", "none"],
symbolSize: [10, 10],
// Geo coordinate system
geoIndex: 0,
effect: {
show: false,
period: 4,
constantSpeed: 0,
symbol: "circle",
symbolSize: 3,
loop: true,
trailLength: 0.2
},
large: false,
// Available when large is true
largeThreshold: 2e3,
polyline: false,
clip: true,
label: {
show: false,
position: "end"
// distance: 5,
// formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
},
lineStyle: {
opacity: 0.5
}
};
return LinesSeriesModel2;
})(SeriesModel)
);
function normalize(a) {
if (!(a instanceof Array)) {
a = [a, a];
}
return a;
}
var linesVisual = {
seriesType: "lines",
reset: function(seriesModel) {
var symbolType = normalize(seriesModel.get("symbol"));
var symbolSize = normalize(seriesModel.get("symbolSize"));
var data = seriesModel.getData();
data.setVisual("fromSymbol", symbolType && symbolType[0]);
data.setVisual("toSymbol", symbolType && symbolType[1]);
data.setVisual("fromSymbolSize", symbolSize && symbolSize[0]);
data.setVisual("toSymbolSize", symbolSize && symbolSize[1]);
function dataEach(data2, idx) {
var itemModel = data2.getItemModel(idx);
var symbolType2 = normalize(itemModel.getShallow("symbol", true));
var symbolSize2 = normalize(itemModel.getShallow("symbolSize", true));
symbolType2[0] && data2.setItemVisual(idx, "fromSymbol", symbolType2[0]);
symbolType2[1] && data2.setItemVisual(idx, "toSymbol", symbolType2[1]);
symbolSize2[0] && data2.setItemVisual(idx, "fromSymbolSize", symbolSize2[0]);
symbolSize2[1] && data2.setItemVisual(idx, "toSymbolSize", symbolSize2[1]);
}
return {
dataEach: data.hasItemOption ? dataEach : null
};
}
};
function install$y(registers) {
registers.registerChartView(LinesView);
registers.registerSeriesModel(LinesSeriesModel);
registers.registerLayout(linesLayout);
registers.registerVisual(linesVisual);
}
var GRADIENT_LEVELS = 256;
var HeatmapLayer = (
/** @class */
(function() {
function HeatmapLayer2() {
this.blurSize = 30;
this.pointSize = 20;
this.maxOpacity = 1;
this.minOpacity = 0;
this._gradientPixels = {
inRange: null,
outOfRange: null
};
var canvas = platformApi.createCanvas();
this.canvas = canvas;
}
HeatmapLayer2.prototype.update = function(data, width, height, normalize2, colorFunc, isInRange) {
var brush = this._getBrush();
var gradientInRange = this._getGradient(colorFunc, "inRange");
var gradientOutOfRange = this._getGradient(colorFunc, "outOfRange");
var r = this.pointSize + this.blurSize;
var canvas = this.canvas;
var ctx = canvas.getContext("2d");
var len2 = data.length;
canvas.width = width;
canvas.height = height;
for (var i = 0; i < len2; ++i) {
var p = data[i];
var x = p[0];
var y = p[1];
var value = p[2];
var alpha = normalize2(value);
ctx.globalAlpha = alpha;
ctx.drawImage(brush, x - r, y - r);
}
if (!canvas.width || !canvas.height) {
return canvas;
}
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var pixels = imageData.data;
var offset = 0;
var pixelLen = pixels.length;
var minOpacity = this.minOpacity;
var maxOpacity = this.maxOpacity;
var diffOpacity = maxOpacity - minOpacity;
while (offset < pixelLen) {
var alpha = pixels[offset + 3] / 256;
var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;
if (alpha > 0) {
var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;
alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);
pixels[offset++] = gradient[gradientOffset];
pixels[offset++] = gradient[gradientOffset + 1];
pixels[offset++] = gradient[gradientOffset + 2];
pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256;
} else {
offset += 4;
}
}
ctx.putImageData(imageData, 0, 0);
return canvas;
};
HeatmapLayer2.prototype._getBrush = function() {
var brushCanvas = this._brushCanvas || (this._brushCanvas = platformApi.createCanvas());
var r = this.pointSize + this.blurSize;
var d = r * 2;
brushCanvas.width = d;
brushCanvas.height = d;
var ctx = brushCanvas.getContext("2d");
ctx.clearRect(0, 0, d, d);
ctx.shadowOffsetX = d;
ctx.shadowBlur = this.blurSize;
ctx.shadowColor = "#000";
ctx.beginPath();
ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
return brushCanvas;
};
HeatmapLayer2.prototype._getGradient = function(colorFunc, state) {
var gradientPixels = this._gradientPixels;
var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));
var color = [0, 0, 0, 0];
var off = 0;
for (var i = 0; i < 256; i++) {
colorFunc[state](i / 255, true, color);
pixelsSingleState[off++] = color[0];
pixelsSingleState[off++] = color[1];
pixelsSingleState[off++] = color[2];
pixelsSingleState[off++] = color[3];
}
return pixelsSingleState;
};
return HeatmapLayer2;
})()
);
function getIsInPiecewiseRange(dataExtent, pieceList, selected) {
var dataSpan = dataExtent[1] - dataExtent[0];
pieceList = map$1(pieceList, function(piece) {
return {
interval: [(piece.interval[0] - dataExtent[0]) / dataSpan, (piece.interval[1] - dataExtent[0]) / dataSpan]
};
});
var len2 = pieceList.length;
var lastIndex = 0;
return function(val) {
var i;
for (i = lastIndex; i < len2; i++) {
var interval = pieceList[i].interval;
if (interval[0] <= val && val <= interval[1]) {
lastIndex = i;
break;
}
}
if (i === len2) {
for (i = lastIndex - 1; i >= 0; i--) {
var interval = pieceList[i].interval;
if (interval[0] <= val && val <= interval[1]) {
lastIndex = i;
break;
}
}
}
return i >= 0 && i < len2 && selected[i];
};
}
function getIsInContinuousRange(dataExtent, range) {
var dataSpan = dataExtent[1] - dataExtent[0];
range = [(range[0] - dataExtent[0]) / dataSpan, (range[1] - dataExtent[0]) / dataSpan];
return function(val) {
return val >= range[0] && val <= range[1];
};
}
function isGeoCoordSys(coordSys) {
var dimensions = coordSys.dimensions;
return dimensions[0] === "lng" && dimensions[1] === "lat";
}
var HeatmapView = (
/** @class */
(function(_super) {
__extends(HeatmapView2, _super);
function HeatmapView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = HeatmapView2.type;
return _this;
}
HeatmapView2.prototype.render = function(seriesModel, ecModel, api) {
var visualMapOfThisSeries;
ecModel.eachComponent("visualMap", function(visualMap) {
visualMap.eachTargetSeries(function(targetSeries) {
if (targetSeries === seriesModel) {
visualMapOfThisSeries = visualMap;
}
});
});
this._progressiveEls = null;
this.group.removeAll();
var coordSys = seriesModel.coordinateSystem;
if (coordSys.type === "cartesian2d" || coordSys.type === "calendar") {
this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());
} else if (isGeoCoordSys(coordSys)) {
this._renderOnGeo(coordSys, seriesModel, visualMapOfThisSeries, api);
}
};
HeatmapView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) {
this.group.removeAll();
};
HeatmapView2.prototype.incrementalRender = function(params, seriesModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys) {
if (isGeoCoordSys(coordSys)) {
this.render(seriesModel, ecModel, api);
} else {
this._progressiveEls = [];
this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);
}
}
};
HeatmapView2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
HeatmapView2.prototype._renderOnCartesianAndCalendar = function(seriesModel, api, start, end, incremental) {
var coordSys = seriesModel.coordinateSystem;
var isCartesian2d = isCoordinateSystemType(coordSys, "cartesian2d");
var width;
var height;
var xAxisExtent;
var yAxisExtent;
if (isCartesian2d) {
var xAxis = coordSys.getAxis("x");
var yAxis = coordSys.getAxis("y");
width = xAxis.getBandWidth() + 0.5;
height = yAxis.getBandWidth() + 0.5;
xAxisExtent = xAxis.scale.getExtent();
yAxisExtent = yAxis.scale.getExtent();
}
var group = this.group;
var data = seriesModel.getData();
var emphasisStyle = seriesModel.getModel(["emphasis", "itemStyle"]).getItemStyle();
var blurStyle = seriesModel.getModel(["blur", "itemStyle"]).getItemStyle();
var selectStyle = seriesModel.getModel(["select", "itemStyle"]).getItemStyle();
var borderRadius = seriesModel.get(["itemStyle", "borderRadius"]);
var labelStatesModels = getLabelStatesModels(seriesModel);
var emphasisModel = seriesModel.getModel("emphasis");
var focus = emphasisModel.get("focus");
var blurScope = emphasisModel.get("blurScope");
var emphasisDisabled = emphasisModel.get("disabled");
var dataDims = isCartesian2d ? [data.mapDimension("x"), data.mapDimension("y"), data.mapDimension("value")] : [data.mapDimension("time"), data.mapDimension("value")];
for (var idx = start; idx < end; idx++) {
var rect = void 0;
var style = data.getItemVisual(idx, "style");
if (isCartesian2d) {
var dataDimX = data.get(dataDims[0], idx);
var dataDimY = data.get(dataDims[1], idx);
if (isNaN(data.get(dataDims[2], idx)) || isNaN(dataDimX) || isNaN(dataDimY) || dataDimX < xAxisExtent[0] || dataDimX > xAxisExtent[1] || dataDimY < yAxisExtent[0] || dataDimY > yAxisExtent[1]) {
continue;
}
var point = coordSys.dataToPoint([dataDimX, dataDimY]);
rect = new Rect$2({
shape: {
x: point[0] - width / 2,
y: point[1] - height / 2,
width,
height
},
style
});
} else {
if (isNaN(data.get(dataDims[1], idx))) {
continue;
}
rect = new Rect$2({
z2: 1,
shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,
style
});
}
if (data.hasItemOption) {
var itemModel = data.getItemModel(idx);
var emphasisModel_1 = itemModel.getModel("emphasis");
emphasisStyle = emphasisModel_1.getModel("itemStyle").getItemStyle();
blurStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle();
selectStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle();
borderRadius = itemModel.get(["itemStyle", "borderRadius"]);
focus = emphasisModel_1.get("focus");
blurScope = emphasisModel_1.get("blurScope");
emphasisDisabled = emphasisModel_1.get("disabled");
labelStatesModels = getLabelStatesModels(itemModel);
}
rect.shape.r = borderRadius;
var rawValue = seriesModel.getRawValue(idx);
var defaultText = "-";
if (rawValue && rawValue[2] != null) {
defaultText = rawValue[2] + "";
}
setLabelStyle(rect, labelStatesModels, {
labelFetcher: seriesModel,
labelDataIndex: idx,
defaultOpacity: style.opacity,
defaultText
});
rect.ensureState("emphasis").style = emphasisStyle;
rect.ensureState("blur").style = blurStyle;
rect.ensureState("select").style = selectStyle;
toggleHoverEmphasis(rect, focus, blurScope, emphasisDisabled);
rect.incremental = incremental;
if (incremental) {
rect.states.emphasis.hoverLayer = true;
}
group.add(rect);
data.setItemGraphicEl(idx, rect);
if (this._progressiveEls) {
this._progressiveEls.push(rect);
}
}
};
HeatmapView2.prototype._renderOnGeo = function(geo, seriesModel, visualMapModel, api) {
var inRangeVisuals = visualMapModel.targetVisuals.inRange;
var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;
var data = seriesModel.getData();
var hmLayer = this._hmLayer || this._hmLayer || new HeatmapLayer();
hmLayer.blurSize = seriesModel.get("blurSize");
hmLayer.pointSize = seriesModel.get("pointSize");
hmLayer.minOpacity = seriesModel.get("minOpacity");
hmLayer.maxOpacity = seriesModel.get("maxOpacity");
var rect = geo.getViewRect().clone();
var roamTransform = geo.getRoamTransform();
rect.applyTransform(roamTransform);
var x = Math.max(rect.x, 0);
var y = Math.max(rect.y, 0);
var x2 = Math.min(rect.width + rect.x, api.getWidth());
var y2 = Math.min(rect.height + rect.y, api.getHeight());
var width = x2 - x;
var height = y2 - y;
var dims = [data.mapDimension("lng"), data.mapDimension("lat"), data.mapDimension("value")];
var points2 = data.mapArray(dims, function(lng, lat, value) {
var pt = geo.dataToPoint([lng, lat]);
pt[0] -= x;
pt[1] -= y;
pt.push(value);
return pt;
});
var dataExtent = visualMapModel.getExtent();
var isInRange = visualMapModel.type === "visualMap.continuous" ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) : getIsInPiecewiseRange(dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected);
hmLayer.update(points2, width, height, inRangeVisuals.color.getNormalizer(), {
inRange: inRangeVisuals.color.getColorMapper(),
outOfRange: outOfRangeVisuals.color.getColorMapper()
}, isInRange);
var img = new ZRImage({
style: {
width,
height,
x,
y,
image: hmLayer.canvas
},
silent: true
});
this.group.add(img);
};
HeatmapView2.type = "heatmap";
return HeatmapView2;
})(ChartView)
);
var HeatmapSeriesModel = (
/** @class */
(function(_super) {
__extends(HeatmapSeriesModel2, _super);
function HeatmapSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = HeatmapSeriesModel2.type;
return _this;
}
HeatmapSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this, {
generateCoord: "value"
});
};
HeatmapSeriesModel2.prototype.preventIncremental = function() {
var coordSysCreator = CoordinateSystemManager.get(this.get("coordinateSystem"));
if (coordSysCreator && coordSysCreator.dimensions) {
return coordSysCreator.dimensions[0] === "lng" && coordSysCreator.dimensions[1] === "lat";
}
};
HeatmapSeriesModel2.type = "series.heatmap";
HeatmapSeriesModel2.dependencies = ["grid", "geo", "calendar"];
HeatmapSeriesModel2.defaultOption = {
coordinateSystem: "cartesian2d",
// zlevel: 0,
z: 2,
// Cartesian coordinate system
// xAxisIndex: 0,
// yAxisIndex: 0,
// Geo coordinate system
geoIndex: 0,
blurSize: 30,
pointSize: 20,
maxOpacity: 1,
minOpacity: 0,
select: {
itemStyle: {
borderColor: "#212121"
}
}
};
return HeatmapSeriesModel2;
})(SeriesModel)
);
function install$x(registers) {
registers.registerChartView(HeatmapView);
registers.registerSeriesModel(HeatmapSeriesModel);
}
var BAR_BORDER_WIDTH_QUERY = ["itemStyle", "borderWidth"];
var LAYOUT_ATTRS = [{
xy: "x",
wh: "width",
index: 0,
posDesc: ["left", "right"]
}, {
xy: "y",
wh: "height",
index: 1,
posDesc: ["top", "bottom"]
}];
var pathForLineWidth = new Circle();
var PictorialBarView = (
/** @class */
(function(_super) {
__extends(PictorialBarView2, _super);
function PictorialBarView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PictorialBarView2.type;
return _this;
}
PictorialBarView2.prototype.render = function(seriesModel, ecModel, api) {
var group = this.group;
var data = seriesModel.getData();
var oldData = this._data;
var cartesian = seriesModel.coordinateSystem;
var baseAxis = cartesian.getBaseAxis();
var isHorizontal = baseAxis.isHorizontal();
var coordSysRect = cartesian.master.getRect();
var opt = {
ecSize: {
width: api.getWidth(),
height: api.getHeight()
},
seriesModel,
coordSys: cartesian,
coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]],
isHorizontal,
valueDim: LAYOUT_ATTRS[+isHorizontal],
categoryDim: LAYOUT_ATTRS[1 - +isHorizontal]
};
data.diff(oldData).add(function(dataIndex) {
if (!data.hasValue(dataIndex)) {
return;
}
var itemModel = getItemModel(data, dataIndex);
var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);
var bar = createBar(data, opt, symbolMeta);
data.setItemGraphicEl(dataIndex, bar);
group.add(bar);
updateCommon(bar, opt, symbolMeta);
}).update(function(newIndex, oldIndex) {
var bar = oldData.getItemGraphicEl(oldIndex);
if (!data.hasValue(newIndex)) {
group.remove(bar);
return;
}
var itemModel = getItemModel(data, newIndex);
var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);
var pictorialShapeStr = getShapeStr(data, symbolMeta);
if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {
group.remove(bar);
data.setItemGraphicEl(newIndex, null);
bar = null;
}
if (bar) {
updateBar(bar, opt, symbolMeta);
} else {
bar = createBar(data, opt, symbolMeta, true);
}
data.setItemGraphicEl(newIndex, bar);
bar.__pictorialSymbolMeta = symbolMeta;
group.add(bar);
updateCommon(bar, opt, symbolMeta);
}).remove(function(dataIndex) {
var bar = oldData.getItemGraphicEl(dataIndex);
bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);
}).execute();
var clipPath = seriesModel.get("clip", true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null;
if (clipPath) {
group.setClipPath(clipPath);
} else {
group.removeClipPath();
}
this._data = data;
return this.group;
};
PictorialBarView2.prototype.remove = function(ecModel, api) {
var group = this.group;
var data = this._data;
if (ecModel.get("animation")) {
if (data) {
data.eachItemGraphicEl(function(bar) {
removeBar(data, getECData(bar).dataIndex, ecModel, bar);
});
}
} else {
group.removeAll();
}
};
PictorialBarView2.type = "pictorialBar";
return PictorialBarView2;
})(ChartView)
);
function getSymbolMeta(data, dataIndex, itemModel, opt) {
var layout2 = data.getItemLayout(dataIndex);
var symbolRepeat = itemModel.get("symbolRepeat");
var symbolClip = itemModel.get("symbolClip");
var symbolPosition = itemModel.get("symbolPosition") || "start";
var symbolRotate = itemModel.get("symbolRotate");
var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
var symbolPatternSize = itemModel.get("symbolPatternSize") || 2;
var isAnimationEnabled2 = itemModel.isAnimationEnabled();
var symbolMeta = {
dataIndex,
layout: layout2,
itemModel,
symbolType: data.getItemVisual(dataIndex, "symbol") || "circle",
style: data.getItemVisual(dataIndex, "style"),
symbolClip,
symbolRepeat,
symbolRepeatDirection: itemModel.get("symbolRepeatDirection"),
symbolPatternSize,
rotation,
animationModel: isAnimationEnabled2 ? itemModel : null,
hoverScale: isAnimationEnabled2 && itemModel.get(["emphasis", "scale"]),
z2: itemModel.getShallow("z", true) || 0
};
prepareBarLength(itemModel, symbolRepeat, layout2, opt, symbolMeta);
prepareSymbolSize(data, dataIndex, layout2, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta);
prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);
var symbolSize = symbolMeta.symbolSize;
var symbolOffset = normalizeSymbolOffset(itemModel.get("symbolOffset"), symbolSize);
prepareLayoutInfo(itemModel, symbolSize, layout2, symbolRepeat, symbolClip, symbolOffset, symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta);
return symbolMeta;
}
function prepareBarLength(itemModel, symbolRepeat, layout2, opt, outputSymbolMeta) {
var valueDim = opt.valueDim;
var symbolBoundingData = itemModel.get("symbolBoundingData");
var valueAxis2 = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());
var zeroPx = valueAxis2.toGlobalCoord(valueAxis2.dataToCoord(0));
var pxSignIdx = 1 - +(layout2[valueDim.wh] <= 0);
var boundingLength;
if (isArray$1(symbolBoundingData)) {
var symbolBoundingExtent = [convertToCoordOnAxis(valueAxis2, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis2, symbolBoundingData[1]) - zeroPx];
symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse();
boundingLength = symbolBoundingExtent[pxSignIdx];
} else if (symbolBoundingData != null) {
boundingLength = convertToCoordOnAxis(valueAxis2, symbolBoundingData) - zeroPx;
} else if (symbolRepeat) {
boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;
} else {
boundingLength = layout2[valueDim.wh];
}
outputSymbolMeta.boundingLength = boundingLength;
if (symbolRepeat) {
outputSymbolMeta.repeatCutLength = layout2[valueDim.wh];
}
var isXAxis = valueDim.xy === "x";
var isInverse = valueAxis2.inverse;
outputSymbolMeta.pxSign = isXAxis && !isInverse || !isXAxis && isInverse ? boundingLength >= 0 ? 1 : -1 : boundingLength > 0 ? 1 : -1;
}
function convertToCoordOnAxis(axis, value) {
return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));
}
function prepareSymbolSize(data, dataIndex, layout2, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, outputSymbolMeta) {
var valueDim = opt.valueDim;
var categoryDim = opt.categoryDim;
var categorySize = Math.abs(layout2[categoryDim.wh]);
var symbolSize = data.getItemVisual(dataIndex, "symbolSize");
var parsedSymbolSize;
if (isArray$1(symbolSize)) {
parsedSymbolSize = symbolSize.slice();
} else {
if (symbolSize == null) {
parsedSymbolSize = ["100%", "100%"];
} else {
parsedSymbolSize = [symbolSize, symbolSize];
}
}
parsedSymbolSize[categoryDim.index] = parsePercent(parsedSymbolSize[categoryDim.index], categorySize);
parsedSymbolSize[valueDim.index] = parsePercent(parsedSymbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength));
outputSymbolMeta.symbolSize = parsedSymbolSize;
var symbolScale = outputSymbolMeta.symbolScale = [parsedSymbolSize[0] / symbolPatternSize, parsedSymbolSize[1] / symbolPatternSize];
symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;
}
function prepareLineWidth(itemModel, symbolScale, rotation, opt, outputSymbolMeta) {
var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
if (valueLineWidth) {
pathForLineWidth.attr({
scaleX: symbolScale[0],
scaleY: symbolScale[1],
rotation
});
pathForLineWidth.updateTransform();
valueLineWidth /= pathForLineWidth.getLineScale();
valueLineWidth *= symbolScale[opt.valueDim.index];
}
outputSymbolMeta.valueLineWidth = valueLineWidth || 0;
}
function prepareLayoutInfo(itemModel, symbolSize, layout2, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, outputSymbolMeta) {
var categoryDim = opt.categoryDim;
var valueDim = opt.valueDim;
var pxSign = outputSymbolMeta.pxSign;
var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);
var pathLen = unitLength;
if (symbolRepeat) {
var absBoundingLength = Math.abs(boundingLength);
var symbolMargin = retrieve(itemModel.get("symbolMargin"), "15%") + "";
var hasEndGap = false;
if (symbolMargin.lastIndexOf("!") === symbolMargin.length - 1) {
hasEndGap = true;
symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);
}
var symbolMarginNumeric = parsePercent(symbolMargin, symbolSize[valueDim.index]);
var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0);
var endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
var repeatSpecified = isNumeric(symbolRepeat);
var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);
var mDiff = absBoundingLength - repeatTimes * unitLength;
symbolMarginNumeric = mDiff / 2 / (hasEndGap ? repeatTimes : Math.max(repeatTimes - 1, 1));
uLenWithMargin = unitLength + symbolMarginNumeric * 2;
endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
if (!repeatSpecified && symbolRepeat !== "fixed") {
repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 0;
}
pathLen = repeatTimes * uLenWithMargin - endFix;
outputSymbolMeta.repeatTimes = repeatTimes;
outputSymbolMeta.symbolMargin = symbolMarginNumeric;
}
var sizeFix = pxSign * (pathLen / 2);
var pathPosition = outputSymbolMeta.pathPosition = [];
pathPosition[categoryDim.index] = layout2[categoryDim.wh] / 2;
pathPosition[valueDim.index] = symbolPosition === "start" ? sizeFix : symbolPosition === "end" ? boundingLength - sizeFix : boundingLength / 2;
if (symbolOffset) {
pathPosition[0] += symbolOffset[0];
pathPosition[1] += symbolOffset[1];
}
var bundlePosition = outputSymbolMeta.bundlePosition = [];
bundlePosition[categoryDim.index] = layout2[categoryDim.xy];
bundlePosition[valueDim.index] = layout2[valueDim.xy];
var barRectShape = outputSymbolMeta.barRectShape = extend({}, layout2);
barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout2[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix));
barRectShape[categoryDim.wh] = layout2[categoryDim.wh];
var clipShape = outputSymbolMeta.clipShape = {};
clipShape[categoryDim.xy] = -layout2[categoryDim.xy];
clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];
clipShape[valueDim.xy] = 0;
clipShape[valueDim.wh] = layout2[valueDim.wh];
}
function createPath(symbolMeta) {
var symbolPatternSize = symbolMeta.symbolPatternSize;
var path = createSymbol$1(
// Consider texture img, make a big size.
symbolMeta.symbolType,
-symbolPatternSize / 2,
-symbolPatternSize / 2,
symbolPatternSize,
symbolPatternSize
);
path.attr({
culling: true
});
path.type !== "image" && path.setStyle({
strokeNoScale: true
});
return path;
}
function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {
var bundle = bar.__pictorialBundle;
var symbolSize = symbolMeta.symbolSize;
var valueLineWidth = symbolMeta.valueLineWidth;
var pathPosition = symbolMeta.pathPosition;
var valueDim = opt.valueDim;
var repeatTimes = symbolMeta.repeatTimes || 0;
var index = 0;
var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;
eachPath(bar, function(path2) {
path2.__pictorialAnimationIndex = index;
path2.__pictorialRepeatTimes = repeatTimes;
if (index < repeatTimes) {
updateAttr(path2, null, makeTarget(index), symbolMeta, isUpdate);
} else {
updateAttr(path2, null, {
scaleX: 0,
scaleY: 0
}, symbolMeta, isUpdate, function() {
bundle.remove(path2);
});
}
index++;
});
for (; index < repeatTimes; index++) {
var path = createPath(symbolMeta);
path.__pictorialAnimationIndex = index;
path.__pictorialRepeatTimes = repeatTimes;
bundle.add(path);
var target = makeTarget(index);
updateAttr(path, {
x: target.x,
y: target.y,
scaleX: 0,
scaleY: 0
}, {
scaleX: target.scaleX,
scaleY: target.scaleY,
rotation: target.rotation
}, symbolMeta, isUpdate);
}
function makeTarget(index2) {
var position2 = pathPosition.slice();
var pxSign = symbolMeta.pxSign;
var i = index2;
if (symbolMeta.symbolRepeatDirection === "start" ? pxSign > 0 : pxSign < 0) {
i = repeatTimes - 1 - index2;
}
position2[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];
return {
x: position2[0],
y: position2[1],
scaleX: symbolMeta.symbolScale[0],
scaleY: symbolMeta.symbolScale[1],
rotation: symbolMeta.rotation
};
}
}
function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {
var bundle = bar.__pictorialBundle;
var mainPath = bar.__pictorialMainPath;
if (!mainPath) {
mainPath = bar.__pictorialMainPath = createPath(symbolMeta);
bundle.add(mainPath);
updateAttr(mainPath, {
x: symbolMeta.pathPosition[0],
y: symbolMeta.pathPosition[1],
scaleX: 0,
scaleY: 0,
rotation: symbolMeta.rotation
}, {
scaleX: symbolMeta.symbolScale[0],
scaleY: symbolMeta.symbolScale[1]
}, symbolMeta, isUpdate);
} else {
updateAttr(mainPath, null, {
x: symbolMeta.pathPosition[0],
y: symbolMeta.pathPosition[1],
scaleX: symbolMeta.symbolScale[0],
scaleY: symbolMeta.symbolScale[1],
rotation: symbolMeta.rotation
}, symbolMeta, isUpdate);
}
}
function createOrUpdateBarRect(bar, symbolMeta, isUpdate) {
var rectShape = extend({}, symbolMeta.barRectShape);
var barRect = bar.__pictorialBarRect;
if (!barRect) {
barRect = bar.__pictorialBarRect = new Rect$2({
z2: 2,
shape: rectShape,
silent: true,
style: {
stroke: "transparent",
fill: "transparent",
lineWidth: 0
}
});
barRect.disableMorphing = true;
bar.add(barRect);
} else {
updateAttr(barRect, null, {
shape: rectShape
}, symbolMeta, isUpdate);
}
}
function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {
if (symbolMeta.symbolClip) {
var clipPath = bar.__pictorialClipPath;
var clipShape = extend({}, symbolMeta.clipShape);
var valueDim = opt.valueDim;
var animationModel = symbolMeta.animationModel;
var dataIndex = symbolMeta.dataIndex;
if (clipPath) {
updateProps$1(clipPath, {
shape: clipShape
}, animationModel, dataIndex);
} else {
clipShape[valueDim.wh] = 0;
clipPath = new Rect$2({
shape: clipShape
});
bar.__pictorialBundle.setClipPath(clipPath);
bar.__pictorialClipPath = clipPath;
var target = {};
target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];
graphic[isUpdate ? "updateProps" : "initProps"](clipPath, {
shape: target
}, animationModel, dataIndex);
}
}
}
function getItemModel(data, dataIndex) {
var itemModel = data.getItemModel(dataIndex);
itemModel.getAnimationDelayParams = getAnimationDelayParams;
itemModel.isAnimationEnabled = isAnimationEnabled;
return itemModel;
}
function getAnimationDelayParams(path) {
return {
index: path.__pictorialAnimationIndex,
count: path.__pictorialRepeatTimes
};
}
function isAnimationEnabled() {
return this.parentModel.isAnimationEnabled() && !!this.getShallow("animation");
}
function createBar(data, opt, symbolMeta, isUpdate) {
var bar = new Group$3();
var bundle = new Group$3();
bar.add(bundle);
bar.__pictorialBundle = bundle;
bundle.x = symbolMeta.bundlePosition[0];
bundle.y = symbolMeta.bundlePosition[1];
if (symbolMeta.symbolRepeat) {
createOrUpdateRepeatSymbols(bar, opt, symbolMeta);
} else {
createOrUpdateSingleSymbol(bar, opt, symbolMeta);
}
createOrUpdateBarRect(bar, symbolMeta, isUpdate);
createOrUpdateClip(bar, opt, symbolMeta, isUpdate);
bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);
bar.__pictorialSymbolMeta = symbolMeta;
return bar;
}
function updateBar(bar, opt, symbolMeta) {
var animationModel = symbolMeta.animationModel;
var dataIndex = symbolMeta.dataIndex;
var bundle = bar.__pictorialBundle;
updateProps$1(bundle, {
x: symbolMeta.bundlePosition[0],
y: symbolMeta.bundlePosition[1]
}, animationModel, dataIndex);
if (symbolMeta.symbolRepeat) {
createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);
} else {
createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);
}
createOrUpdateBarRect(bar, symbolMeta, true);
createOrUpdateClip(bar, opt, symbolMeta, true);
}
function removeBar(data, dataIndex, animationModel, bar) {
var labelRect = bar.__pictorialBarRect;
labelRect && labelRect.removeTextContent();
var paths = [];
eachPath(bar, function(path) {
paths.push(path);
});
bar.__pictorialMainPath && paths.push(bar.__pictorialMainPath);
bar.__pictorialClipPath && (animationModel = null);
each$f(paths, function(path) {
removeElement(path, {
scaleX: 0,
scaleY: 0
}, animationModel, dataIndex, function() {
bar.parent && bar.parent.remove(bar);
});
});
data.setItemGraphicEl(dataIndex, null);
}
function getShapeStr(data, symbolMeta) {
return [data.getItemVisual(symbolMeta.dataIndex, "symbol") || "none", !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip].join(":");
}
function eachPath(bar, cb, context) {
each$f(bar.__pictorialBundle.children(), function(el) {
el !== bar.__pictorialBarRect && cb.call(context, el);
});
}
function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {
immediateAttrs && el.attr(immediateAttrs);
if (symbolMeta.symbolClip && !isUpdate) {
animationAttrs && el.attr(animationAttrs);
} else {
animationAttrs && graphic[isUpdate ? "updateProps" : "initProps"](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb);
}
}
function updateCommon(bar, opt, symbolMeta) {
var dataIndex = symbolMeta.dataIndex;
var itemModel = symbolMeta.itemModel;
var emphasisModel = itemModel.getModel("emphasis");
var emphasisStyle = emphasisModel.getModel("itemStyle").getItemStyle();
var blurStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle();
var selectStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle();
var cursorStyle = itemModel.getShallow("cursor");
var focus = emphasisModel.get("focus");
var blurScope = emphasisModel.get("blurScope");
var hoverScale = emphasisModel.get("scale");
eachPath(bar, function(path) {
if (path instanceof ZRImage) {
var pathStyle = path.style;
path.useStyle(extend({
// TODO other properties like dx, dy ?
image: pathStyle.image,
x: pathStyle.x,
y: pathStyle.y,
width: pathStyle.width,
height: pathStyle.height
}, symbolMeta.style));
} else {
path.useStyle(symbolMeta.style);
}
var emphasisState = path.ensureState("emphasis");
emphasisState.style = emphasisStyle;
if (hoverScale) {
emphasisState.scaleX = path.scaleX * 1.1;
emphasisState.scaleY = path.scaleY * 1.1;
}
path.ensureState("blur").style = blurStyle;
path.ensureState("select").style = selectStyle;
cursorStyle && (path.cursor = cursorStyle);
path.z2 = symbolMeta.z2;
});
var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];
var barRect = bar.__pictorialBarRect;
barRect.ignoreClip = true;
setLabelStyle(barRect, getLabelStatesModels(itemModel), {
labelFetcher: opt.seriesModel,
labelDataIndex: dataIndex,
defaultText: getDefaultLabel(opt.seriesModel.getData(), dataIndex),
inheritColor: symbolMeta.style.fill,
defaultOpacity: symbolMeta.style.opacity,
defaultOutsidePosition: barPositionOutside
});
toggleHoverEmphasis(bar, focus, blurScope, emphasisModel.get("disabled"));
}
function toIntTimes(times) {
var roundedTimes = Math.round(times);
return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times);
}
var PictorialBarSeriesModel = (
/** @class */
(function(_super) {
__extends(PictorialBarSeriesModel2, _super);
function PictorialBarSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PictorialBarSeriesModel2.type;
_this.hasSymbolVisual = true;
_this.defaultSymbol = "roundRect";
return _this;
}
PictorialBarSeriesModel2.prototype.getInitialData = function(option) {
option.stack = null;
return _super.prototype.getInitialData.apply(this, arguments);
};
PictorialBarSeriesModel2.type = "series.pictorialBar";
PictorialBarSeriesModel2.dependencies = ["grid"];
PictorialBarSeriesModel2.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {
symbol: "circle",
symbolSize: null,
symbolRotate: null,
symbolPosition: null,
symbolOffset: null,
symbolMargin: null,
symbolRepeat: false,
symbolRepeatDirection: "end",
symbolClip: false,
symbolBoundingData: null,
symbolPatternSize: 400,
barGap: "-100%",
// Pictorial bar do not clip by default because in many cases
// xAxis and yAxis are not displayed and it's expected not to clip
clip: false,
// z can be set in data item, which is z2 actually.
// Disable progressive
progressive: 0,
emphasis: {
// By default pictorialBar do not hover scale. Hover scale is not suitable
// for the case that both has foreground and background.
scale: false
},
select: {
itemStyle: {
borderColor: "#212121"
}
}
});
return PictorialBarSeriesModel2;
})(BaseBarSeriesModel)
);
function install$w(registers) {
registers.registerChartView(PictorialBarView);
registers.registerSeriesModel(PictorialBarSeriesModel);
registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, curry$1(layout$3, "pictorialBar"));
registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout("pictorialBar"));
}
var ThemeRiverView = (
/** @class */
(function(_super) {
__extends(ThemeRiverView2, _super);
function ThemeRiverView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ThemeRiverView2.type;
_this._layers = [];
return _this;
}
ThemeRiverView2.prototype.render = function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var self = this;
var group = this.group;
var layersSeries = seriesModel.getLayerSeries();
var layoutInfo = data.getLayout("layoutInfo");
var rect = layoutInfo.rect;
var boundaryGap = layoutInfo.boundaryGap;
group.x = 0;
group.y = rect.y + boundaryGap[0];
function keyGetter(item) {
return item.name;
}
var dataDiffer = new DataDiffer(this._layersSeries || [], layersSeries, keyGetter, keyGetter);
var newLayersGroups = [];
dataDiffer.add(bind$1(process, this, "add")).update(bind$1(process, this, "update")).remove(bind$1(process, this, "remove")).execute();
function process(status, idx, oldIdx) {
var oldLayersGroups = self._layers;
if (status === "remove") {
group.remove(oldLayersGroups[idx]);
return;
}
var points0 = [];
var points1 = [];
var style;
var indices = layersSeries[idx].indices;
var j = 0;
for (; j < indices.length; j++) {
var layout2 = data.getItemLayout(indices[j]);
var x = layout2.x;
var y0 = layout2.y0;
var y = layout2.y;
points0.push(x, y0);
points1.push(x, y0 + y);
style = data.getItemVisual(indices[j], "style");
}
var polygon;
var textLayout = data.getItemLayout(indices[0]);
var labelModel = seriesModel.getModel("label");
var margin = labelModel.get("margin");
var emphasisModel = seriesModel.getModel("emphasis");
if (status === "add") {
var layerGroup = newLayersGroups[idx] = new Group$3();
polygon = new ECPolygon({
shape: {
points: points0,
stackedOnPoints: points1,
smooth: 0.4,
stackedOnSmooth: 0.4,
smoothConstraint: false
},
z2: 0
});
layerGroup.add(polygon);
group.add(layerGroup);
if (seriesModel.isAnimationEnabled()) {
polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function() {
polygon.removeClipPath();
}));
}
} else {
var layerGroup = oldLayersGroups[oldIdx];
polygon = layerGroup.childAt(0);
group.add(layerGroup);
newLayersGroups[idx] = layerGroup;
updateProps$1(polygon, {
shape: {
points: points0,
stackedOnPoints: points1
}
}, seriesModel);
saveOldStyle(polygon);
}
setLabelStyle(polygon, getLabelStatesModels(seriesModel), {
labelDataIndex: indices[j - 1],
defaultText: data.getName(indices[j - 1]),
inheritColor: style.fill
}, {
normal: {
verticalAlign: "middle"
// align: 'right'
}
});
polygon.setTextConfig({
position: null,
local: true
});
var labelEl = polygon.getTextContent();
if (labelEl) {
labelEl.x = textLayout.x - margin;
labelEl.y = textLayout.y0 + textLayout.y / 2;
}
polygon.useStyle(style);
data.setItemGraphicEl(idx, polygon);
setStatesStylesFromModel(polygon, seriesModel);
toggleHoverEmphasis(polygon, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
}
this._layersSeries = layersSeries;
this._layers = newLayersGroups;
};
ThemeRiverView2.type = "themeRiver";
return ThemeRiverView2;
})(ChartView)
);
function createGridClipShape(rect, seriesModel, cb) {
var rectEl = new Rect$2({
shape: {
x: rect.x - 10,
y: rect.y - 10,
width: 0,
height: rect.height + 20
}
});
initProps(rectEl, {
shape: {
x: rect.x - 50,
width: rect.width + 100,
height: rect.height + 20
}
}, seriesModel, cb);
return rectEl;
}
var DATA_NAME_INDEX = 2;
var ThemeRiverSeriesModel = (
/** @class */
(function(_super) {
__extends(ThemeRiverSeriesModel2, _super);
function ThemeRiverSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ThemeRiverSeriesModel2.type;
return _this;
}
ThemeRiverSeriesModel2.prototype.init = function(option) {
_super.prototype.init.apply(this, arguments);
this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this));
};
ThemeRiverSeriesModel2.prototype.fixData = function(data) {
var rawDataLength = data.length;
var timeValueKeys = {};
var groupResult = groupData(data, function(item) {
if (!timeValueKeys.hasOwnProperty(item[0] + "")) {
timeValueKeys[item[0] + ""] = -1;
}
return item[2];
});
var layerData = [];
groupResult.buckets.each(function(items, key) {
layerData.push({
name: key,
dataList: items
});
});
var layerNum = layerData.length;
for (var k = 0; k < layerNum; ++k) {
var name_1 = layerData[k].name;
for (var j = 0; j < layerData[k].dataList.length; ++j) {
var timeValue = layerData[k].dataList[j][0] + "";
timeValueKeys[timeValue] = k;
}
for (var timeValue in timeValueKeys) {
if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) {
timeValueKeys[timeValue] = k;
data[rawDataLength] = [timeValue, 0, name_1];
rawDataLength++;
}
}
}
return data;
};
ThemeRiverSeriesModel2.prototype.getInitialData = function(option, ecModel) {
var singleAxisModel = this.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0];
var axisType = singleAxisModel.get("type");
var filterData = filter(option.data, function(dataItem) {
return dataItem[2] !== void 0;
});
var data = this.fixData(filterData || []);
var nameList = [];
var nameMap = this.nameMap = createHashMap();
var count2 = 0;
for (var i = 0; i < data.length; ++i) {
nameList.push(data[i][DATA_NAME_INDEX]);
if (!nameMap.get(data[i][DATA_NAME_INDEX])) {
nameMap.set(data[i][DATA_NAME_INDEX], count2);
count2++;
}
}
var dimensions = prepareSeriesDataSchema(data, {
coordDimensions: ["single"],
dimensionsDefine: [{
name: "time",
type: getDimensionTypeByAxis(axisType)
}, {
name: "value",
type: "float"
}, {
name: "name",
type: "ordinal"
}],
encodeDefine: {
single: 0,
value: 1,
itemName: 2
}
}).dimensions;
var list = new SeriesData(dimensions, this);
list.initData(data);
return list;
};
ThemeRiverSeriesModel2.prototype.getLayerSeries = function() {
var data = this.getData();
var lenCount = data.count();
var indexArr = [];
for (var i = 0; i < lenCount; ++i) {
indexArr[i] = i;
}
var timeDim = data.mapDimension("single");
var groupResult = groupData(indexArr, function(index) {
return data.get("name", index);
});
var layerSeries = [];
groupResult.buckets.each(function(items, key) {
items.sort(function(index1, index2) {
return data.get(timeDim, index1) - data.get(timeDim, index2);
});
layerSeries.push({
name: key,
indices: items
});
});
return layerSeries;
};
ThemeRiverSeriesModel2.prototype.getAxisTooltipData = function(dim, value, baseAxis) {
if (!isArray$1(dim)) {
dim = dim ? [dim] : [];
}
var data = this.getData();
var layerSeries = this.getLayerSeries();
var indices = [];
var layerNum = layerSeries.length;
var nestestValue;
for (var i = 0; i < layerNum; ++i) {
var minDist = Number.MAX_VALUE;
var nearestIdx = -1;
var pointNum = layerSeries[i].indices.length;
for (var j = 0; j < pointNum; ++j) {
var theValue = data.get(dim[0], layerSeries[i].indices[j]);
var dist2 = Math.abs(theValue - value);
if (dist2 <= minDist) {
nestestValue = theValue;
minDist = dist2;
nearestIdx = layerSeries[i].indices[j];
}
}
indices.push(nearestIdx);
}
return {
dataIndices: indices,
nestestValue
};
};
ThemeRiverSeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var name = data.getName(dataIndex);
var value = data.get(data.mapDimension("value"), dataIndex);
return createTooltipMarkup("nameValue", {
name,
value
});
};
ThemeRiverSeriesModel2.type = "series.themeRiver";
ThemeRiverSeriesModel2.dependencies = ["singleAxis"];
ThemeRiverSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
colorBy: "data",
coordinateSystem: "singleAxis",
// gap in axis's orthogonal orientation
boundaryGap: ["10%", "10%"],
// legendHoverLink: true,
singleAxisIndex: 0,
animationEasing: "linear",
label: {
margin: 4,
show: true,
position: "left",
fontSize: 11
},
emphasis: {
label: {
show: true
}
}
};
return ThemeRiverSeriesModel2;
})(SeriesModel)
);
function themeRiverLayout(ecModel, api) {
ecModel.eachSeriesByType("themeRiver", function(seriesModel) {
var data = seriesModel.getData();
var single = seriesModel.coordinateSystem;
var layoutInfo = {};
var rect = single.getRect();
layoutInfo.rect = rect;
var boundaryGap = seriesModel.get("boundaryGap");
var axis = single.getAxis();
layoutInfo.boundaryGap = boundaryGap;
if (axis.orient === "horizontal") {
boundaryGap[0] = parsePercent(boundaryGap[0], rect.height);
boundaryGap[1] = parsePercent(boundaryGap[1], rect.height);
var height = rect.height - boundaryGap[0] - boundaryGap[1];
doThemeRiverLayout(data, seriesModel, height);
} else {
boundaryGap[0] = parsePercent(boundaryGap[0], rect.width);
boundaryGap[1] = parsePercent(boundaryGap[1], rect.width);
var width = rect.width - boundaryGap[0] - boundaryGap[1];
doThemeRiverLayout(data, seriesModel, width);
}
data.setLayout("layoutInfo", layoutInfo);
});
}
function doThemeRiverLayout(data, seriesModel, height) {
if (!data.count()) {
return;
}
var coordSys = seriesModel.coordinateSystem;
var layerSeries = seriesModel.getLayerSeries();
var timeDim = data.mapDimension("single");
var valueDim = data.mapDimension("value");
var layerPoints = map$1(layerSeries, function(singleLayer) {
return map$1(singleLayer.indices, function(idx) {
var pt = coordSys.dataToPoint(data.get(timeDim, idx));
pt[1] = data.get(valueDim, idx);
return pt;
});
});
var base2 = computeBaseline(layerPoints);
var baseLine = base2.y0;
var ky = height / base2.max;
var n = layerSeries.length;
var m = layerSeries[0].indices.length;
var baseY0;
for (var j = 0; j < m; ++j) {
baseY0 = baseLine[j] * ky;
data.setItemLayout(layerSeries[0].indices[j], {
layerIndex: 0,
x: layerPoints[0][j][0],
y0: baseY0,
y: layerPoints[0][j][1] * ky
});
for (var i = 1; i < n; ++i) {
baseY0 += layerPoints[i - 1][j][1] * ky;
data.setItemLayout(layerSeries[i].indices[j], {
layerIndex: i,
x: layerPoints[i][j][0],
y0: baseY0,
y: layerPoints[i][j][1] * ky
});
}
}
}
function computeBaseline(data) {
var layerNum = data.length;
var pointNum = data[0].length;
var sums = [];
var y0 = [];
var max2 = 0;
for (var i = 0; i < pointNum; ++i) {
var temp = 0;
for (var j = 0; j < layerNum; ++j) {
temp += data[j][i][1];
}
if (temp > max2) {
max2 = temp;
}
sums.push(temp);
}
for (var k = 0; k < pointNum; ++k) {
y0[k] = (max2 - sums[k]) / 2;
}
max2 = 0;
for (var l = 0; l < pointNum; ++l) {
var sum2 = sums[l] + y0[l];
if (sum2 > max2) {
max2 = sum2;
}
}
return {
y0,
max: max2
};
}
function install$v(registers) {
registers.registerChartView(ThemeRiverView);
registers.registerSeriesModel(ThemeRiverSeriesModel);
registers.registerLayout(themeRiverLayout);
registers.registerProcessor(dataFilter$1("themeRiver"));
}
var DEFAULT_SECTOR_Z = 2;
var DEFAULT_TEXT_Z = 4;
var SunburstPiece = (
/** @class */
(function(_super) {
__extends(SunburstPiece2, _super);
function SunburstPiece2(node, seriesModel, ecModel, api) {
var _this = _super.call(this) || this;
_this.z2 = DEFAULT_SECTOR_Z;
_this.textConfig = {
inside: true
};
getECData(_this).seriesIndex = seriesModel.seriesIndex;
var text = new ZRText({
z2: DEFAULT_TEXT_Z,
silent: node.getModel().get(["label", "silent"])
});
_this.setTextContent(text);
_this.updateData(true, node, seriesModel, ecModel, api);
return _this;
}
SunburstPiece2.prototype.updateData = function(firstCreate, node, seriesModel, ecModel, api) {
this.node = node;
node.piece = this;
seriesModel = seriesModel || this._seriesModel;
ecModel = ecModel || this._ecModel;
var sector = this;
getECData(sector).dataIndex = node.dataIndex;
var itemModel = node.getModel();
var emphasisModel = itemModel.getModel("emphasis");
var layout2 = node.getLayout();
var sectorShape = extend({}, layout2);
sectorShape.label = null;
var normalStyle = node.getVisual("style");
normalStyle.lineJoin = "bevel";
var decal = node.getVisual("decal");
if (decal) {
normalStyle.decal = createOrUpdatePatternFromDecal(decal, api);
}
var cornerRadius = getSectorCornerRadius(itemModel.getModel("itemStyle"), sectorShape, true);
extend(sectorShape, cornerRadius);
each$f(SPECIAL_STATES, function(stateName) {
var state = sector.ensureState(stateName);
var itemStyleModel = itemModel.getModel([stateName, "itemStyle"]);
state.style = itemStyleModel.getItemStyle();
var cornerRadius2 = getSectorCornerRadius(itemStyleModel, sectorShape);
if (cornerRadius2) {
state.shape = cornerRadius2;
}
});
if (firstCreate) {
sector.setShape(sectorShape);
sector.shape.r = layout2.r0;
initProps(sector, {
shape: {
r: layout2.r
}
}, seriesModel, node.dataIndex);
} else {
updateProps$1(sector, {
shape: sectorShape
}, seriesModel);
saveOldStyle(sector);
}
sector.useStyle(normalStyle);
this._updateLabel(seriesModel);
var cursorStyle = itemModel.getShallow("cursor");
cursorStyle && sector.attr("cursor", cursorStyle);
this._seriesModel = seriesModel || this._seriesModel;
this._ecModel = ecModel || this._ecModel;
var focus = emphasisModel.get("focus");
var focusOrIndices = focus === "relative" ? concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === "ancestor" ? node.getAncestorsIndices() : focus === "descendant" ? node.getDescendantIndices() : focus;
toggleHoverEmphasis(this, focusOrIndices, emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
};
SunburstPiece2.prototype._updateLabel = function(seriesModel) {
var _this = this;
var itemModel = this.node.getModel();
var normalLabelModel = itemModel.getModel("label");
var layout2 = this.node.getLayout();
var angle = layout2.endAngle - layout2.startAngle;
var midAngle = (layout2.startAngle + layout2.endAngle) / 2;
var dx = Math.cos(midAngle);
var dy = Math.sin(midAngle);
var sector = this;
var label = sector.getTextContent();
var dataIndex = this.node.dataIndex;
var labelMinAngle = normalLabelModel.get("minAngle") / 180 * Math.PI;
var isNormalShown = normalLabelModel.get("show") && !(labelMinAngle != null && Math.abs(angle) < labelMinAngle);
label.ignore = !isNormalShown;
each$f(DISPLAY_STATES, function(stateName) {
var labelStateModel = stateName === "normal" ? itemModel.getModel("label") : itemModel.getModel([stateName, "label"]);
var isNormal = stateName === "normal";
var state = isNormal ? label : label.ensureState(stateName);
var text = seriesModel.getFormattedLabel(dataIndex, stateName);
if (isNormal) {
text = text || _this.node.name;
}
state.style = createTextStyle(labelStateModel, {}, null, stateName !== "normal", true);
if (text) {
state.style.text = text;
}
var isShown = labelStateModel.get("show");
if (isShown != null && !isNormal) {
state.ignore = !isShown;
}
var labelPosition = getLabelAttr(labelStateModel, "position");
var sectorState = isNormal ? sector : sector.states[stateName];
var labelColor = sectorState.style.fill;
sectorState.textConfig = {
outsideFill: labelStateModel.get("color") === "inherit" ? labelColor : null,
inside: labelPosition !== "outside"
};
var r;
var labelPadding = getLabelAttr(labelStateModel, "distance") || 0;
var textAlign = getLabelAttr(labelStateModel, "align");
var rotateType = getLabelAttr(labelStateModel, "rotate");
var flipStartAngle = Math.PI * 0.5;
var flipEndAngle = Math.PI * 1.5;
var midAngleNormal = normalizeRadian(rotateType === "tangential" ? Math.PI / 2 - midAngle : midAngle);
var needsFlip = midAngleNormal > flipStartAngle && !isRadianAroundZero(midAngleNormal - flipStartAngle) && midAngleNormal < flipEndAngle;
if (labelPosition === "outside") {
r = layout2.r + labelPadding;
textAlign = needsFlip ? "right" : "left";
} else {
if (!textAlign || textAlign === "center") {
if (angle === 2 * Math.PI && layout2.r0 === 0) {
r = 0;
} else {
r = (layout2.r + layout2.r0) / 2;
}
textAlign = "center";
} else if (textAlign === "left") {
r = layout2.r0 + labelPadding;
textAlign = needsFlip ? "right" : "left";
} else if (textAlign === "right") {
r = layout2.r - labelPadding;
textAlign = needsFlip ? "left" : "right";
}
}
state.style.align = textAlign;
state.style.verticalAlign = getLabelAttr(labelStateModel, "verticalAlign") || "middle";
state.x = r * dx + layout2.cx;
state.y = r * dy + layout2.cy;
var rotate2 = 0;
if (rotateType === "radial") {
rotate2 = normalizeRadian(-midAngle) + (needsFlip ? Math.PI : 0);
} else if (rotateType === "tangential") {
rotate2 = normalizeRadian(Math.PI / 2 - midAngle) + (needsFlip ? Math.PI : 0);
} else if (isNumber(rotateType)) {
rotate2 = rotateType * Math.PI / 180;
}
state.rotation = normalizeRadian(rotate2);
});
function getLabelAttr(model, name) {
var stateAttr = model.get(name);
if (stateAttr == null) {
return normalLabelModel.get(name);
}
return stateAttr;
}
label.dirtyStyle();
};
return SunburstPiece2;
})(Sector)
);
var ROOT_TO_NODE_ACTION = "sunburstRootToNode";
var HIGHLIGHT_ACTION = "sunburstHighlight";
var UNHIGHLIGHT_ACTION = "sunburstUnhighlight";
function installSunburstAction(registers) {
registers.registerAction({
type: ROOT_TO_NODE_ACTION,
update: "updateView"
}, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "series",
subType: "sunburst",
query: payload
}, handleRootToNode);
function handleRootToNode(model, index) {
var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION], model);
if (targetInfo) {
var originViewRoot = model.getViewRoot();
if (originViewRoot) {
payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? "rollUp" : "drillDown";
}
model.resetViewRoot(targetInfo.node);
}
}
});
registers.registerAction({
type: HIGHLIGHT_ACTION,
update: "none"
}, function(payload, ecModel, api) {
payload = extend({}, payload);
ecModel.eachComponent({
mainType: "series",
subType: "sunburst",
query: payload
}, handleHighlight);
function handleHighlight(model) {
var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model);
if (targetInfo) {
payload.dataIndex = targetInfo.node.dataIndex;
}
}
api.dispatchAction(extend(payload, {
type: "highlight"
}));
});
registers.registerAction({
type: UNHIGHLIGHT_ACTION,
update: "updateView"
}, function(payload, ecModel, api) {
payload = extend({}, payload);
api.dispatchAction(extend(payload, {
type: "downplay"
}));
});
}
var SunburstView = (
/** @class */
(function(_super) {
__extends(SunburstView2, _super);
function SunburstView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SunburstView2.type;
return _this;
}
SunburstView2.prototype.render = function(seriesModel, ecModel, api, payload) {
var self = this;
this.seriesModel = seriesModel;
this.api = api;
this.ecModel = ecModel;
var data = seriesModel.getData();
var virtualRoot = data.tree.root;
var newRoot = seriesModel.getViewRoot();
var group = this.group;
var renderLabelForZeroData = seriesModel.get("renderLabelForZeroData");
var newChildren = [];
newRoot.eachNode(function(node) {
newChildren.push(node);
});
var oldChildren = this._oldChildren || [];
dualTravel(newChildren, oldChildren);
renderRollUp(virtualRoot, newRoot);
this._initEvents();
this._oldChildren = newChildren;
function dualTravel(newChildren2, oldChildren2) {
if (newChildren2.length === 0 && oldChildren2.length === 0) {
return;
}
new DataDiffer(oldChildren2, newChildren2, getKey2, getKey2).add(processNode).update(processNode).remove(curry$1(processNode, null)).execute();
function getKey2(node) {
return node.getId();
}
function processNode(newIdx, oldIdx) {
var newNode = newIdx == null ? null : newChildren2[newIdx];
var oldNode = oldIdx == null ? null : oldChildren2[oldIdx];
doRenderNode(newNode, oldNode);
}
}
function doRenderNode(newNode, oldNode) {
if (!renderLabelForZeroData && newNode && !newNode.getValue()) {
newNode = null;
}
if (newNode !== virtualRoot && oldNode !== virtualRoot) {
if (oldNode && oldNode.piece) {
if (newNode) {
oldNode.piece.updateData(false, newNode, seriesModel, ecModel, api);
data.setItemGraphicEl(newNode.dataIndex, oldNode.piece);
} else {
removeNode2(oldNode);
}
} else if (newNode) {
var piece = new SunburstPiece(newNode, seriesModel, ecModel, api);
group.add(piece);
data.setItemGraphicEl(newNode.dataIndex, piece);
}
}
}
function removeNode2(node) {
if (!node) {
return;
}
if (node.piece) {
group.remove(node.piece);
node.piece = null;
}
}
function renderRollUp(virtualRoot2, viewRoot) {
if (viewRoot.depth > 0) {
if (self.virtualPiece) {
self.virtualPiece.updateData(false, virtualRoot2, seriesModel, ecModel, api);
} else {
self.virtualPiece = new SunburstPiece(virtualRoot2, seriesModel, ecModel, api);
group.add(self.virtualPiece);
}
viewRoot.piece.off("click");
self.virtualPiece.on("click", function(e) {
self._rootToNode(viewRoot.parentNode);
});
} else if (self.virtualPiece) {
group.remove(self.virtualPiece);
self.virtualPiece = null;
}
}
};
SunburstView2.prototype._initEvents = function() {
var _this = this;
this.group.off("click");
this.group.on("click", function(e) {
var targetFound = false;
var viewRoot = _this.seriesModel.getViewRoot();
viewRoot.eachNode(function(node) {
if (!targetFound && node.piece && node.piece === e.target) {
var nodeClick = node.getModel().get("nodeClick");
if (nodeClick === "rootToNode") {
_this._rootToNode(node);
} else if (nodeClick === "link") {
var itemModel = node.getModel();
var link = itemModel.get("link");
if (link) {
var linkTarget = itemModel.get("target", true) || "_blank";
windowOpen(link, linkTarget);
}
}
targetFound = true;
}
});
});
};
SunburstView2.prototype._rootToNode = function(node) {
if (node !== this.seriesModel.getViewRoot()) {
this.api.dispatchAction({
type: ROOT_TO_NODE_ACTION,
from: this.uid,
seriesId: this.seriesModel.id,
targetNode: node
});
}
};
SunburstView2.prototype.containPoint = function(point, seriesModel) {
var treeRoot = seriesModel.getData();
var itemLayout = treeRoot.getItemLayout(0);
if (itemLayout) {
var dx = point[0] - itemLayout.cx;
var dy = point[1] - itemLayout.cy;
var radius = Math.sqrt(dx * dx + dy * dy);
return radius <= itemLayout.r && radius >= itemLayout.r0;
}
};
SunburstView2.type = "sunburst";
return SunburstView2;
})(ChartView)
);
var SunburstSeriesModel = (
/** @class */
(function(_super) {
__extends(SunburstSeriesModel2, _super);
function SunburstSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SunburstSeriesModel2.type;
_this.ignoreStyleOnData = true;
return _this;
}
SunburstSeriesModel2.prototype.getInitialData = function(option, ecModel) {
var root = {
name: option.name,
children: option.data
};
completeTreeValue(root);
var levelModels = this._levelModels = map$1(option.levels || [], function(levelDefine) {
return new Model(levelDefine, this, ecModel);
}, this);
var tree = Tree.createTree(root, this, beforeLink);
function beforeLink(nodeData) {
nodeData.wrapMethod("getItemModel", function(model, idx) {
var node = tree.getNodeByDataIndex(idx);
var levelModel = levelModels[node.depth];
levelModel && (model.parentModel = levelModel);
return model;
});
}
return tree.data;
};
SunburstSeriesModel2.prototype.optionUpdated = function() {
this.resetViewRoot();
};
SunburstSeriesModel2.prototype.getDataParams = function(dataIndex) {
var params = _super.prototype.getDataParams.apply(this, arguments);
var node = this.getData().tree.getNodeByDataIndex(dataIndex);
params.treePathInfo = wrapTreePathInfo(node, this);
return params;
};
SunburstSeriesModel2.prototype.getLevelModel = function(node) {
return this._levelModels && this._levelModels[node.depth];
};
SunburstSeriesModel2.prototype.getViewRoot = function() {
return this._viewRoot;
};
SunburstSeriesModel2.prototype.resetViewRoot = function(viewRoot) {
viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot;
var root = this.getRawData().tree.root;
if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) {
this._viewRoot = root;
}
};
SunburstSeriesModel2.prototype.enableAriaDecal = function() {
enableAriaDecalForTree(this);
};
SunburstSeriesModel2.type = "series.sunburst";
SunburstSeriesModel2.defaultOption = {
// zlevel: 0,
z: 2,
// 默认全局居中
center: ["50%", "50%"],
radius: [0, "75%"],
// 默认顺时针
clockwise: true,
startAngle: 90,
// 最小角度改为0
minAngle: 0,
// If still show when all data zero.
stillShowZeroSum: true,
// 'rootToNode', 'link', or false
nodeClick: "rootToNode",
renderLabelForZeroData: false,
label: {
// could be: 'radial', 'tangential', or 'none'
rotate: "radial",
show: true,
opacity: 1,
// 'left' is for inner side of inside, and 'right' is for outer
// side for inside
align: "center",
position: "inside",
distance: 5,
silent: true
},
itemStyle: {
borderWidth: 1,
borderColor: "white",
borderType: "solid",
shadowBlur: 0,
shadowColor: "rgba(0, 0, 0, 0.2)",
shadowOffsetX: 0,
shadowOffsetY: 0,
opacity: 1
},
emphasis: {
focus: "descendant"
},
blur: {
itemStyle: {
opacity: 0.2
},
label: {
opacity: 0.1
}
},
// Animation type can be expansion, scale.
animationType: "expansion",
animationDuration: 1e3,
animationDurationUpdate: 500,
data: [],
/**
* Sort order.
*
* Valid values: 'desc', 'asc', null, or callback function.
* 'desc' and 'asc' for descend and ascendant order;
* null for not sorting;
* example of callback function:
* function(nodeA, nodeB) {
* return nodeA.getValue() - nodeB.getValue();
* }
*/
sort: "desc"
};
return SunburstSeriesModel2;
})(SeriesModel)
);
function completeTreeValue(dataNode) {
var sum2 = 0;
each$f(dataNode.children, function(child) {
completeTreeValue(child);
var childValue = child.value;
isArray$1(childValue) && (childValue = childValue[0]);
sum2 += childValue;
});
var thisValue = dataNode.value;
if (isArray$1(thisValue)) {
thisValue = thisValue[0];
}
if (thisValue == null || isNaN(thisValue)) {
thisValue = sum2;
}
if (thisValue < 0) {
thisValue = 0;
}
isArray$1(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue;
}
var RADIAN = Math.PI / 180;
function sunburstLayout(seriesType2, ecModel, api) {
ecModel.eachSeriesByType(seriesType2, function(seriesModel) {
var center2 = seriesModel.get("center");
var radius = seriesModel.get("radius");
if (!isArray$1(radius)) {
radius = [0, radius];
}
if (!isArray$1(center2)) {
center2 = [center2, center2];
}
var width = api.getWidth();
var height = api.getHeight();
var size = Math.min(width, height);
var cx = parsePercent(center2[0], width);
var cy = parsePercent(center2[1], height);
var r0 = parsePercent(radius[0], size / 2);
var r = parsePercent(radius[1], size / 2);
var startAngle = -seriesModel.get("startAngle") * RADIAN;
var minAngle = seriesModel.get("minAngle") * RADIAN;
var virtualRoot = seriesModel.getData().tree.root;
var treeRoot = seriesModel.getViewRoot();
var rootDepth = treeRoot.depth;
var sort2 = seriesModel.get("sort");
if (sort2 != null) {
initChildren(treeRoot, sort2);
}
var validDataCount = 0;
each$f(treeRoot.children, function(child) {
!isNaN(child.getValue()) && validDataCount++;
});
var sum2 = treeRoot.getValue();
var unitRadian = Math.PI / (sum2 || validDataCount) * 2;
var renderRollupNode = treeRoot.depth > 0;
var levels = treeRoot.height - (renderRollupNode ? -1 : 1);
var rPerLevel = (r - r0) / (levels || 1);
var clockwise = seriesModel.get("clockwise");
var stillShowZeroSum = seriesModel.get("stillShowZeroSum");
var dir3 = clockwise ? 1 : -1;
var renderNode2 = function(node, startAngle2) {
if (!node) {
return;
}
var endAngle = startAngle2;
if (node !== virtualRoot) {
var value = node.getValue();
var angle2 = sum2 === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;
if (angle2 < minAngle) {
angle2 = minAngle;
}
endAngle = startAngle2 + dir3 * angle2;
var depth = node.depth - rootDepth - (renderRollupNode ? -1 : 1);
var rStart2 = r0 + rPerLevel * depth;
var rEnd2 = r0 + rPerLevel * (depth + 1);
var levelModel = seriesModel.getLevelModel(node);
if (levelModel) {
var r0_1 = levelModel.get("r0", true);
var r_1 = levelModel.get("r", true);
var radius_1 = levelModel.get("radius", true);
if (radius_1 != null) {
r0_1 = radius_1[0];
r_1 = radius_1[1];
}
r0_1 != null && (rStart2 = parsePercent(r0_1, size / 2));
r_1 != null && (rEnd2 = parsePercent(r_1, size / 2));
}
node.setLayout({
angle: angle2,
startAngle: startAngle2,
endAngle,
clockwise,
cx,
cy,
r0: rStart2,
r: rEnd2
});
}
if (node.children && node.children.length) {
var siblingAngle_1 = 0;
each$f(node.children, function(node2) {
siblingAngle_1 += renderNode2(node2, startAngle2 + siblingAngle_1);
});
}
return endAngle - startAngle2;
};
if (renderRollupNode) {
var rStart = r0;
var rEnd = r0 + rPerLevel;
var angle = Math.PI * 2;
virtualRoot.setLayout({
angle,
startAngle,
endAngle: startAngle + angle,
clockwise,
cx,
cy,
r0: rStart,
r: rEnd
});
}
renderNode2(treeRoot, startAngle);
});
}
function initChildren(node, sortOrder) {
var children = node.children || [];
node.children = sort(children, sortOrder);
if (children.length) {
each$f(node.children, function(child) {
initChildren(child, sortOrder);
});
}
}
function sort(children, sortOrder) {
if (isFunction(sortOrder)) {
var sortTargets = map$1(children, function(child, idx) {
var value = child.getValue();
return {
params: {
depth: child.depth,
height: child.height,
dataIndex: child.dataIndex,
getValue: function() {
return value;
}
},
index: idx
};
});
sortTargets.sort(function(a, b) {
return sortOrder(a.params, b.params);
});
return map$1(sortTargets, function(target) {
return children[target.index];
});
} else {
var isAsc_1 = sortOrder === "asc";
return children.sort(function(a, b) {
var diff = (a.getValue() - b.getValue()) * (isAsc_1 ? 1 : -1);
return diff === 0 ? (a.dataIndex - b.dataIndex) * (isAsc_1 ? -1 : 1) : diff;
});
}
}
function sunburstVisual(ecModel) {
var paletteScope = {};
function pickColor(node, seriesModel, treeHeight) {
var current = node;
while (current && current.depth > 1) {
current = current.parentNode;
}
var color = seriesModel.getColorFromPalette(current.name || current.dataIndex + "", paletteScope);
if (node.depth > 1 && isString(color)) {
color = lift(color, (node.depth - 1) / (treeHeight - 1) * 0.5);
}
return color;
}
ecModel.eachSeriesByType("sunburst", function(seriesModel) {
var data = seriesModel.getData();
var tree = data.tree;
tree.eachNode(function(node) {
var model = node.getModel();
var style = model.getModel("itemStyle").getItemStyle();
if (!style.fill) {
style.fill = pickColor(node, seriesModel, tree.root.height);
}
var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, "style");
extend(existsStyle, style);
});
});
}
function install$u(registers) {
registers.registerChartView(SunburstView);
registers.registerSeriesModel(SunburstSeriesModel);
registers.registerLayout(curry$1(sunburstLayout, "sunburst"));
registers.registerProcessor(curry$1(dataFilter$1, "sunburst"));
registers.registerVisual(sunburstVisual);
installSunburstAction(registers);
}
var STYLE_VISUAL_TYPE = {
color: "fill",
borderColor: "stroke"
};
var NON_STYLE_VISUAL_PROPS = {
symbol: 1,
symbolSize: 1,
symbolKeepAspect: 1,
legendIcon: 1,
visualMeta: 1,
liftZ: 1,
decal: 1
};
var customInnerStore = makeInner();
var CustomSeriesModel = (
/** @class */
(function(_super) {
__extends(CustomSeriesModel2, _super);
function CustomSeriesModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CustomSeriesModel2.type;
return _this;
}
CustomSeriesModel2.prototype.optionUpdated = function() {
this.currentZLevel = this.get("zlevel", true);
this.currentZ = this.get("z", true);
};
CustomSeriesModel2.prototype.getInitialData = function(option, ecModel) {
return createSeriesData(null, this);
};
CustomSeriesModel2.prototype.getDataParams = function(dataIndex, dataType, el) {
var params = _super.prototype.getDataParams.call(this, dataIndex, dataType);
el && (params.info = customInnerStore(el).info);
return params;
};
CustomSeriesModel2.type = "series.custom";
CustomSeriesModel2.dependencies = ["grid", "polar", "geo", "singleAxis", "calendar"];
CustomSeriesModel2.defaultOption = {
coordinateSystem: "cartesian2d",
// zlevel: 0,
z: 2,
legendHoverLink: true,
// Custom series will not clip by default.
// Some case will use custom series to draw label
// For example https://echarts.apache.org/examples/en/editor.html?c=custom-gantt-flight
clip: false
// Cartesian coordinate system
// xAxisIndex: 0,
// yAxisIndex: 0,
// Polar coordinate system
// polarIndex: 0,
// Geo coordinate system
// geoIndex: 0,
};
return CustomSeriesModel2;
})(SeriesModel)
);
function dataToCoordSize$3(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return map$1(["x", "y"], function(dim, dimIdx) {
var axis = this.getAxis(dim);
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
return axis.type === "category" ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
}, this);
}
function cartesianPrepareCustom(coordSys) {
var rect = coordSys.master.getRect();
return {
coordSys: {
// The name exposed to user is always 'cartesian2d' but not 'grid'.
type: "cartesian2d",
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
},
api: {
coord: function(data) {
return coordSys.dataToPoint(data);
},
size: bind$1(dataToCoordSize$3, coordSys)
}
};
}
function dataToCoordSize$2(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return map$1([0, 1], function(dimIdx) {
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
var p1 = [];
var p2 = [];
p1[dimIdx] = val - halfSize;
p2[dimIdx] = val + halfSize;
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
}, this);
}
function geoPrepareCustom(coordSys) {
var rect = coordSys.getBoundingRect();
return {
coordSys: {
type: "geo",
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
zoom: coordSys.getZoom()
},
api: {
coord: function(data) {
return coordSys.dataToPoint(data);
},
size: bind$1(dataToCoordSize$2, coordSys)
}
};
}
function dataToCoordSize$1(dataSize, dataItem) {
var axis = this.getAxis();
var val = dataItem instanceof Array ? dataItem[0] : dataItem;
var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;
return axis.type === "category" ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
}
function singlePrepareCustom(coordSys) {
var rect = coordSys.getRect();
return {
coordSys: {
type: "singleAxis",
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
},
api: {
coord: function(val) {
return coordSys.dataToPoint(val);
},
size: bind$1(dataToCoordSize$1, coordSys)
}
};
}
function dataToCoordSize(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return map$1(["Radius", "Angle"], function(dim, dimIdx) {
var getterName = "get" + dim + "Axis";
var axis = this[getterName]();
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
var result = axis.type === "category" ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
if (dim === "Angle") {
result = result * Math.PI / 180;
}
return result;
}, this);
}
function polarPrepareCustom(coordSys) {
var radiusAxis = coordSys.getRadiusAxis();
var angleAxis = coordSys.getAngleAxis();
var radius = radiusAxis.getExtent();
radius[0] > radius[1] && radius.reverse();
return {
coordSys: {
type: "polar",
cx: coordSys.cx,
cy: coordSys.cy,
r: radius[1],
r0: radius[0]
},
api: {
coord: function(data) {
var radius2 = radiusAxis.dataToRadius(data[0]);
var angle = angleAxis.dataToAngle(data[1]);
var coord = coordSys.coordToPoint([radius2, angle]);
coord.push(radius2, angle * Math.PI / 180);
return coord;
},
size: bind$1(dataToCoordSize, coordSys)
}
};
}
function calendarPrepareCustom(coordSys) {
var rect = coordSys.getRect();
var rangeInfo = coordSys.getRangeInfo();
return {
coordSys: {
type: "calendar",
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
cellWidth: coordSys.getCellWidth(),
cellHeight: coordSys.getCellHeight(),
rangeInfo: {
start: rangeInfo.start,
end: rangeInfo.end,
weeks: rangeInfo.weeks,
dayCount: rangeInfo.allDay
}
},
api: {
coord: function(data, clamp2) {
return coordSys.dataToPoint(data, clamp2);
}
}
};
}
function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) {
return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== "tspan" && (elType === "text" || hasOwn(style, "text")));
}
function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) {
var srcStyle = hostStyle;
var textConfig;
var textContent;
var textContentStyle;
if (elType === "text") {
textContentStyle = srcStyle;
} else {
textContentStyle = {};
hasOwn(srcStyle, "text") && (textContentStyle.text = srcStyle.text);
hasOwn(srcStyle, "rich") && (textContentStyle.rich = srcStyle.rich);
hasOwn(srcStyle, "textFill") && (textContentStyle.fill = srcStyle.textFill);
hasOwn(srcStyle, "textStroke") && (textContentStyle.stroke = srcStyle.textStroke);
hasOwn(srcStyle, "fontFamily") && (textContentStyle.fontFamily = srcStyle.fontFamily);
hasOwn(srcStyle, "fontSize") && (textContentStyle.fontSize = srcStyle.fontSize);
hasOwn(srcStyle, "fontStyle") && (textContentStyle.fontStyle = srcStyle.fontStyle);
hasOwn(srcStyle, "fontWeight") && (textContentStyle.fontWeight = srcStyle.fontWeight);
textContent = {
type: "text",
style: textContentStyle,
// ec4 does not support rectText trigger.
// And when text position is different in normal and emphasis
// => hover text trigger emphasis;
// => text position changed, leave mouse pointer immediately;
// That might cause incorrect state.
silent: true
};
textConfig = {};
var hasOwnPos = hasOwn(srcStyle, "textPosition");
if (isNormal) {
textConfig.position = hasOwnPos ? srcStyle.textPosition : "inside";
} else {
hasOwnPos && (textConfig.position = srcStyle.textPosition);
}
hasOwn(srcStyle, "textPosition") && (textConfig.position = srcStyle.textPosition);
hasOwn(srcStyle, "textOffset") && (textConfig.offset = srcStyle.textOffset);
hasOwn(srcStyle, "textRotation") && (textConfig.rotation = srcStyle.textRotation);
hasOwn(srcStyle, "textDistance") && (textConfig.distance = srcStyle.textDistance);
}
convertEC4CompatibleRichItem(textContentStyle, hostStyle);
each$f(textContentStyle.rich, function(richItem) {
convertEC4CompatibleRichItem(richItem, richItem);
});
return {
textConfig,
textContent
};
}
function convertEC4CompatibleRichItem(out, richItem) {
if (!richItem) {
return;
}
richItem.font = richItem.textFont || richItem.font;
hasOwn(richItem, "textStrokeWidth") && (out.lineWidth = richItem.textStrokeWidth);
hasOwn(richItem, "textAlign") && (out.align = richItem.textAlign);
hasOwn(richItem, "textVerticalAlign") && (out.verticalAlign = richItem.textVerticalAlign);
hasOwn(richItem, "textLineHeight") && (out.lineHeight = richItem.textLineHeight);
hasOwn(richItem, "textWidth") && (out.width = richItem.textWidth);
hasOwn(richItem, "textHeight") && (out.height = richItem.textHeight);
hasOwn(richItem, "textBackgroundColor") && (out.backgroundColor = richItem.textBackgroundColor);
hasOwn(richItem, "textPadding") && (out.padding = richItem.textPadding);
hasOwn(richItem, "textBorderColor") && (out.borderColor = richItem.textBorderColor);
hasOwn(richItem, "textBorderWidth") && (out.borderWidth = richItem.textBorderWidth);
hasOwn(richItem, "textBorderRadius") && (out.borderRadius = richItem.textBorderRadius);
hasOwn(richItem, "textBoxShadowColor") && (out.shadowColor = richItem.textBoxShadowColor);
hasOwn(richItem, "textBoxShadowBlur") && (out.shadowBlur = richItem.textBoxShadowBlur);
hasOwn(richItem, "textBoxShadowOffsetX") && (out.shadowOffsetX = richItem.textBoxShadowOffsetX);
hasOwn(richItem, "textBoxShadowOffsetY") && (out.shadowOffsetY = richItem.textBoxShadowOffsetY);
}
function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) {
var out = itemStl;
out.textPosition = out.textPosition || txCfg.position || "inside";
txCfg.offset != null && (out.textOffset = txCfg.offset);
txCfg.rotation != null && (out.textRotation = txCfg.rotation);
txCfg.distance != null && (out.textDistance = txCfg.distance);
var isInside = out.textPosition.indexOf("inside") >= 0;
var hostFill = itemStl.fill || "#000";
convertToEC4RichItem(out, txStl);
var textFillNotSet = out.textFill == null;
if (isInside) {
if (textFillNotSet) {
out.textFill = txCfg.insideFill || "#fff";
!out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke);
!out.textStroke && (out.textStroke = hostFill);
out.textStrokeWidth == null && (out.textStrokeWidth = 2);
}
} else {
if (textFillNotSet) {
out.textFill = itemStl.fill || txCfg.outsideFill || "#000";
}
!out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke);
}
out.text = txStl.text;
out.rich = txStl.rich;
each$f(txStl.rich, function(richItem) {
convertToEC4RichItem(richItem, richItem);
});
return out;
}
function convertToEC4RichItem(out, richItem) {
if (!richItem) {
return;
}
hasOwn(richItem, "fill") && (out.textFill = richItem.fill);
hasOwn(richItem, "stroke") && (out.textStroke = richItem.fill);
hasOwn(richItem, "lineWidth") && (out.textStrokeWidth = richItem.lineWidth);
hasOwn(richItem, "font") && (out.font = richItem.font);
hasOwn(richItem, "fontStyle") && (out.fontStyle = richItem.fontStyle);
hasOwn(richItem, "fontWeight") && (out.fontWeight = richItem.fontWeight);
hasOwn(richItem, "fontSize") && (out.fontSize = richItem.fontSize);
hasOwn(richItem, "fontFamily") && (out.fontFamily = richItem.fontFamily);
hasOwn(richItem, "align") && (out.textAlign = richItem.align);
hasOwn(richItem, "verticalAlign") && (out.textVerticalAlign = richItem.verticalAlign);
hasOwn(richItem, "lineHeight") && (out.textLineHeight = richItem.lineHeight);
hasOwn(richItem, "width") && (out.textWidth = richItem.width);
hasOwn(richItem, "height") && (out.textHeight = richItem.height);
hasOwn(richItem, "backgroundColor") && (out.textBackgroundColor = richItem.backgroundColor);
hasOwn(richItem, "padding") && (out.textPadding = richItem.padding);
hasOwn(richItem, "borderColor") && (out.textBorderColor = richItem.borderColor);
hasOwn(richItem, "borderWidth") && (out.textBorderWidth = richItem.borderWidth);
hasOwn(richItem, "borderRadius") && (out.textBorderRadius = richItem.borderRadius);
hasOwn(richItem, "shadowColor") && (out.textBoxShadowColor = richItem.shadowColor);
hasOwn(richItem, "shadowBlur") && (out.textBoxShadowBlur = richItem.shadowBlur);
hasOwn(richItem, "shadowOffsetX") && (out.textBoxShadowOffsetX = richItem.shadowOffsetX);
hasOwn(richItem, "shadowOffsetY") && (out.textBoxShadowOffsetY = richItem.shadowOffsetY);
hasOwn(richItem, "textShadowColor") && (out.textShadowColor = richItem.textShadowColor);
hasOwn(richItem, "textShadowBlur") && (out.textShadowBlur = richItem.textShadowBlur);
hasOwn(richItem, "textShadowOffsetX") && (out.textShadowOffsetX = richItem.textShadowOffsetX);
hasOwn(richItem, "textShadowOffsetY") && (out.textShadowOffsetY = richItem.textShadowOffsetY);
}
var LEGACY_TRANSFORM_PROPS_MAP = {
position: ["x", "y"],
scale: ["scaleX", "scaleY"],
origin: ["originX", "originY"]
};
var LEGACY_TRANSFORM_PROPS = keys(LEGACY_TRANSFORM_PROPS_MAP);
reduce(TRANSFORMABLE_PROPS, function(obj, key) {
obj[key] = 1;
return obj;
}, {});
TRANSFORMABLE_PROPS.join(", ");
var ELEMENT_ANIMATABLE_PROPS = ["", "style", "shape", "extra"];
var transitionInnerStore = makeInner();
function getElementAnimationConfig(animationType, el, elOption, parentModel, dataIndex) {
var animationProp = animationType + "Animation";
var config = getAnimationConfig(animationType, parentModel, dataIndex) || {};
var userDuring = transitionInnerStore(el).userDuring;
if (config.duration > 0) {
config.during = userDuring ? bind$1(duringCall, {
el,
userDuring
}) : null;
config.setToFinal = true;
config.scope = animationType;
}
extend(config, elOption[animationProp]);
return config;
}
function applyUpdateTransition(el, elOption, animatableModel, opts) {
opts = opts || {};
var dataIndex = opts.dataIndex, isInit = opts.isInit, clearStyle = opts.clearStyle;
var hasAnimation = animatableModel.isAnimationEnabled();
var store = transitionInnerStore(el);
var styleOpt = elOption.style;
store.userDuring = elOption.during;
var transFromProps = {};
var propsToSet = {};
prepareTransformAllPropsFinal(el, elOption, propsToSet);
prepareShapeOrExtraAllPropsFinal("shape", elOption, propsToSet);
prepareShapeOrExtraAllPropsFinal("extra", elOption, propsToSet);
if (!isInit && hasAnimation) {
prepareTransformTransitionFrom(el, elOption, transFromProps);
prepareShapeOrExtraTransitionFrom("shape", el, elOption, transFromProps);
prepareShapeOrExtraTransitionFrom("extra", el, elOption, transFromProps);
prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps);
}
propsToSet.style = styleOpt;
applyPropsDirectly(el, propsToSet, clearStyle);
applyMiscProps(el, elOption);
if (hasAnimation) {
if (isInit) {
var enterFromProps_1 = {};
each$f(ELEMENT_ANIMATABLE_PROPS, function(propName) {
var prop = propName ? elOption[propName] : elOption;
if (prop && prop.enterFrom) {
if (propName) {
enterFromProps_1[propName] = enterFromProps_1[propName] || {};
}
extend(propName ? enterFromProps_1[propName] : enterFromProps_1, prop.enterFrom);
}
});
var config = getElementAnimationConfig("enter", el, elOption, animatableModel, dataIndex);
if (config.duration > 0) {
el.animateFrom(enterFromProps_1, config);
}
} else {
applyPropsTransition(el, elOption, dataIndex || 0, animatableModel, transFromProps);
}
}
updateLeaveTo(el, elOption);
styleOpt ? el.dirty() : el.markRedraw();
}
function updateLeaveTo(el, elOption) {
var leaveToProps = transitionInnerStore(el).leaveToProps;
for (var i = 0; i < ELEMENT_ANIMATABLE_PROPS.length; i++) {
var propName = ELEMENT_ANIMATABLE_PROPS[i];
var prop = propName ? elOption[propName] : elOption;
if (prop && prop.leaveTo) {
if (!leaveToProps) {
leaveToProps = transitionInnerStore(el).leaveToProps = {};
}
if (propName) {
leaveToProps[propName] = leaveToProps[propName] || {};
}
extend(propName ? leaveToProps[propName] : leaveToProps, prop.leaveTo);
}
}
}
function applyLeaveTransition(el, elOption, animatableModel, onRemove) {
if (el) {
var parent_1 = el.parent;
var leaveToProps = transitionInnerStore(el).leaveToProps;
if (leaveToProps) {
var config = getElementAnimationConfig("update", el, elOption, animatableModel, 0);
config.done = function() {
parent_1.remove(el);
};
el.animateTo(leaveToProps, config);
} else {
parent_1.remove(el);
}
}
}
function isTransitionAll(transition) {
return transition === "all";
}
function applyPropsDirectly(el, allPropsFinal, clearStyle) {
var styleOpt = allPropsFinal.style;
if (!el.isGroup && styleOpt) {
if (clearStyle) {
el.useStyle({});
var animators = el.animators;
for (var i = 0; i < animators.length; i++) {
var animator = animators[i];
if (animator.targetName === "style") {
animator.changeTarget(el.style);
}
}
}
el.setStyle(styleOpt);
}
if (allPropsFinal) {
allPropsFinal.style = null;
allPropsFinal && el.attr(allPropsFinal);
allPropsFinal.style = styleOpt;
}
}
function applyPropsTransition(el, elOption, dataIndex, model, transFromProps) {
if (transFromProps) {
var config = getElementAnimationConfig("update", el, elOption, model, dataIndex);
if (config.duration > 0) {
el.animateFrom(transFromProps, config);
}
}
}
function applyMiscProps(el, elOption) {
hasOwn(elOption, "silent") && (el.silent = elOption.silent);
hasOwn(elOption, "ignore") && (el.ignore = elOption.ignore);
if (el instanceof Displayable) {
hasOwn(elOption, "invisible") && (el.invisible = elOption.invisible);
}
if (el instanceof Path) {
hasOwn(elOption, "autoBatch") && (el.autoBatch = elOption.autoBatch);
}
}
var tmpDuringScope = {};
var transitionDuringAPI = {
// Usually other props do not need to be changed in animation during.
setTransform: function(key, val) {
tmpDuringScope.el[key] = val;
return this;
},
getTransform: function(key) {
return tmpDuringScope.el[key];
},
setShape: function(key, val) {
var el = tmpDuringScope.el;
var shape = el.shape || (el.shape = {});
shape[key] = val;
el.dirtyShape && el.dirtyShape();
return this;
},
getShape: function(key) {
var shape = tmpDuringScope.el.shape;
if (shape) {
return shape[key];
}
},
setStyle: function(key, val) {
var el = tmpDuringScope.el;
var style = el.style;
if (style) {
style[key] = val;
el.dirtyStyle && el.dirtyStyle();
}
return this;
},
getStyle: function(key) {
var style = tmpDuringScope.el.style;
if (style) {
return style[key];
}
},
setExtra: function(key, val) {
var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {});
extra[key] = val;
return this;
},
getExtra: function(key) {
var extra = tmpDuringScope.el.extra;
if (extra) {
return extra[key];
}
}
};
function duringCall() {
var scope = this;
var el = scope.el;
if (!el) {
return;
}
var latestUserDuring = transitionInnerStore(el).userDuring;
var scopeUserDuring = scope.userDuring;
if (latestUserDuring !== scopeUserDuring) {
scope.el = scope.userDuring = null;
return;
}
tmpDuringScope.el = el;
scopeUserDuring(transitionDuringAPI);
}
function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps) {
var attrOpt = elOption[mainAttr];
if (!attrOpt) {
return;
}
var elPropsInAttr = fromEl[mainAttr];
var transFromPropsInAttr;
if (elPropsInAttr) {
var transition = elOption.transition;
var attrTransition = attrOpt.transition;
if (attrTransition) {
!transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
if (isTransitionAll(attrTransition)) {
extend(transFromPropsInAttr, elPropsInAttr);
} else {
var transitionKeys = normalizeToArray(attrTransition);
for (var i = 0; i < transitionKeys.length; i++) {
var key = transitionKeys[i];
var elVal = elPropsInAttr[key];
transFromPropsInAttr[key] = elVal;
}
}
} else if (isTransitionAll(transition) || indexOf(transition, mainAttr) >= 0) {
!transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
var elPropsInAttrKeys = keys(elPropsInAttr);
for (var i = 0; i < elPropsInAttrKeys.length; i++) {
var key = elPropsInAttrKeys[i];
var elVal = elPropsInAttr[key];
if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) {
transFromPropsInAttr[key] = elVal;
}
}
}
}
}
function prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) {
var attrOpt = elOption[mainAttr];
if (!attrOpt) {
return;
}
var allPropsInAttr = allProps[mainAttr] = {};
var keysInAttr = keys(attrOpt);
for (var i = 0; i < keysInAttr.length; i++) {
var key = keysInAttr[i];
allPropsInAttr[key] = cloneValue(attrOpt[key]);
}
}
function prepareTransformTransitionFrom(el, elOption, transFromProps) {
var transition = elOption.transition;
var transitionKeys = isTransitionAll(transition) ? TRANSFORMABLE_PROPS : normalizeToArray(transition || []);
for (var i = 0; i < transitionKeys.length; i++) {
var key = transitionKeys[i];
if (key === "style" || key === "shape" || key === "extra") {
continue;
}
var elVal = el[key];
transFromProps[key] = elVal;
}
}
function prepareTransformAllPropsFinal(el, elOption, allProps) {
for (var i = 0; i < LEGACY_TRANSFORM_PROPS.length; i++) {
var legacyName = LEGACY_TRANSFORM_PROPS[i];
var xyName = LEGACY_TRANSFORM_PROPS_MAP[legacyName];
var legacyArr = elOption[legacyName];
if (legacyArr) {
allProps[xyName[0]] = legacyArr[0];
allProps[xyName[1]] = legacyArr[1];
}
}
for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {
var key = TRANSFORMABLE_PROPS[i];
if (elOption[key] != null) {
allProps[key] = elOption[key];
}
}
}
function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps) {
if (!styleOpt) {
return;
}
var fromElStyle = fromEl.style;
var transFromStyleProps;
if (fromElStyle) {
var styleTransition = styleOpt.transition;
var elTransition = elOption.transition;
if (styleTransition && !isTransitionAll(styleTransition)) {
var transitionKeys = normalizeToArray(styleTransition);
!transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
for (var i = 0; i < transitionKeys.length; i++) {
var key = transitionKeys[i];
var elVal = fromElStyle[key];
transFromStyleProps[key] = elVal;
}
} else if (fromEl.getAnimationStyleProps && (isTransitionAll(elTransition) || isTransitionAll(styleTransition) || indexOf(elTransition, "style") >= 0)) {
var animationProps = fromEl.getAnimationStyleProps();
var animationStyleProps = animationProps ? animationProps.style : null;
if (animationStyleProps) {
!transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
var styleKeys = keys(styleOpt);
for (var i = 0; i < styleKeys.length; i++) {
var key = styleKeys[i];
if (animationStyleProps[key]) {
var elVal = fromElStyle[key];
transFromStyleProps[key] = elVal;
}
}
}
}
}
}
function isNonStyleTransitionEnabled(optVal, elVal) {
return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal;
}
var getStateToRestore = makeInner();
var KEYFRAME_EXCLUDE_KEYS = ["percent", "easing", "shape", "style", "extra"];
function stopPreviousKeyframeAnimationAndRestore(el) {
el.stopAnimation("keyframe");
el.attr(getStateToRestore(el));
}
function applyKeyframeAnimation(el, animationOpts, animatableModel) {
if (!animatableModel.isAnimationEnabled() || !animationOpts) {
return;
}
if (isArray$1(animationOpts)) {
each$f(animationOpts, function(singleAnimationOpts) {
applyKeyframeAnimation(el, singleAnimationOpts, animatableModel);
});
return;
}
var keyframes = animationOpts.keyframes;
var duration = animationOpts.duration;
if (animatableModel && duration == null) {
var config = getAnimationConfig("enter", animatableModel, 0);
duration = config && config.duration;
}
if (!keyframes || !duration) {
return;
}
var stateToRestore = getStateToRestore(el);
each$f(ELEMENT_ANIMATABLE_PROPS, function(targetPropName) {
if (targetPropName && !el[targetPropName]) {
return;
}
var animator;
keyframes.sort(function(a, b) {
return a.percent - b.percent;
});
each$f(keyframes, function(kf) {
var animators = el.animators;
var kfValues = targetPropName ? kf[targetPropName] : kf;
if (!kfValues) {
return;
}
var propKeys = keys(kfValues);
if (!targetPropName) {
propKeys = filter(propKeys, function(key) {
return indexOf(KEYFRAME_EXCLUDE_KEYS, key) < 0;
});
}
if (!propKeys.length) {
return;
}
if (!animator) {
animator = el.animate(targetPropName, animationOpts.loop, true);
animator.scope = "keyframe";
}
for (var i = 0; i < animators.length; i++) {
if (animators[i] !== animator && animators[i].targetName === animator.targetName) {
animators[i].stopTracks(propKeys);
}
}
targetPropName && (stateToRestore[targetPropName] = stateToRestore[targetPropName] || {});
var savedTarget = targetPropName ? stateToRestore[targetPropName] : stateToRestore;
each$f(propKeys, function(key) {
savedTarget[key] = ((targetPropName ? el[targetPropName] : el) || {})[key];
});
animator.whenWithKeys(duration * kf.percent, kfValues, propKeys, kf.easing);
});
if (!animator) {
return;
}
animator.delay(animationOpts.delay || 0).duration(duration).start(animationOpts.easing);
});
}
var EMPHASIS = "emphasis";
var NORMAL = "normal";
var BLUR = "blur";
var SELECT = "select";
var STATES = [NORMAL, EMPHASIS, BLUR, SELECT];
var PATH_ITEM_STYLE = {
normal: ["itemStyle"],
emphasis: [EMPHASIS, "itemStyle"],
blur: [BLUR, "itemStyle"],
select: [SELECT, "itemStyle"]
};
var PATH_LABEL = {
normal: ["label"],
emphasis: [EMPHASIS, "label"],
blur: [BLUR, "label"],
select: [SELECT, "label"]
};
var DEFAULT_TRANSITION = ["x", "y"];
var GROUP_DIFF_PREFIX = "e\0\0";
var attachedTxInfoTmp = {
normal: {},
emphasis: {},
blur: {},
select: {}
};
var prepareCustoms = {
cartesian2d: cartesianPrepareCustom,
geo: geoPrepareCustom,
single: singlePrepareCustom,
polar: polarPrepareCustom,
calendar: calendarPrepareCustom
};
function isPath(el) {
return el instanceof Path;
}
function isDisplayable(el) {
return el instanceof Displayable;
}
function copyElement(sourceEl, targetEl) {
targetEl.copyTransform(sourceEl);
if (isDisplayable(targetEl) && isDisplayable(sourceEl)) {
targetEl.setStyle(sourceEl.style);
targetEl.z = sourceEl.z;
targetEl.z2 = sourceEl.z2;
targetEl.zlevel = sourceEl.zlevel;
targetEl.invisible = sourceEl.invisible;
targetEl.ignore = sourceEl.ignore;
if (isPath(targetEl) && isPath(sourceEl)) {
targetEl.setShape(sourceEl.shape);
}
}
}
var CustomChartView = (
/** @class */
(function(_super) {
__extends(CustomChartView2, _super);
function CustomChartView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CustomChartView2.type;
return _this;
}
CustomChartView2.prototype.render = function(customSeries, ecModel, api, payload) {
this._progressiveEls = null;
var oldData = this._data;
var data = customSeries.getData();
var group = this.group;
var renderItem = makeRenderItem(customSeries, data, ecModel, api);
if (!oldData) {
group.removeAll();
}
data.diff(oldData).add(function(newIdx) {
createOrUpdateItem(api, null, newIdx, renderItem(newIdx, payload), customSeries, group, data);
}).remove(function(oldIdx) {
var el = oldData.getItemGraphicEl(oldIdx);
el && applyLeaveTransition(el, customInnerStore(el).option, customSeries);
}).update(function(newIdx, oldIdx) {
var oldEl = oldData.getItemGraphicEl(oldIdx);
createOrUpdateItem(api, oldEl, newIdx, renderItem(newIdx, payload), customSeries, group, data);
}).execute();
var clipPath = customSeries.get("clip", true) ? createClipPath(customSeries.coordinateSystem, false, customSeries) : null;
if (clipPath) {
group.setClipPath(clipPath);
} else {
group.removeClipPath();
}
this._data = data;
};
CustomChartView2.prototype.incrementalPrepareRender = function(customSeries, ecModel, api) {
this.group.removeAll();
this._data = null;
};
CustomChartView2.prototype.incrementalRender = function(params, customSeries, ecModel, api, payload) {
var data = customSeries.getData();
var renderItem = makeRenderItem(customSeries, data, ecModel, api);
var progressiveEls = this._progressiveEls = [];
function setIncrementalAndHoverLayer(el2) {
if (!el2.isGroup) {
el2.incremental = true;
el2.ensureState("emphasis").hoverLayer = true;
}
}
for (var idx = params.start; idx < params.end; idx++) {
var el = createOrUpdateItem(null, null, idx, renderItem(idx, payload), customSeries, this.group, data);
if (el) {
el.traverse(setIncrementalAndHoverLayer);
progressiveEls.push(el);
}
}
};
CustomChartView2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
CustomChartView2.prototype.filterForExposedEvent = function(eventType, query, targetEl, packedEvent) {
var elementName = query.element;
if (elementName == null || targetEl.name === elementName) {
return true;
}
while ((targetEl = targetEl.__hostTarget || targetEl.parent) && targetEl !== this.group) {
if (targetEl.name === elementName) {
return true;
}
}
return false;
};
CustomChartView2.type = "custom";
return CustomChartView2;
})(ChartView)
);
function createEl$1(elOption) {
var graphicType = elOption.type;
var el;
if (graphicType === "path") {
var shape = elOption.shape;
var pathRect = shape.width != null && shape.height != null ? {
x: shape.x || 0,
y: shape.y || 0,
width: shape.width,
height: shape.height
} : null;
var pathData = getPathData(shape);
el = makePath(pathData, null, pathRect, shape.layout || "center");
customInnerStore(el).customPathData = pathData;
} else if (graphicType === "image") {
el = new ZRImage({});
customInnerStore(el).customImagePath = elOption.style.image;
} else if (graphicType === "text") {
el = new ZRText({});
} else if (graphicType === "group") {
el = new Group$3();
} else if (graphicType === "compoundPath") {
throw new Error('"compoundPath" is not supported yet.');
} else {
var Clz = getShapeClass(graphicType);
if (!Clz) {
var errMsg = "";
throwError(errMsg);
}
el = new Clz();
}
customInnerStore(el).customGraphicType = graphicType;
el.name = elOption.name;
el.z2EmphasisLift = 1;
el.z2SelectLift = 1;
return el;
}
function updateElNormal(api, el, dataIndex, elOption, attachedTxInfo, seriesModel, isInit) {
stopPreviousKeyframeAnimationAndRestore(el);
var txCfgOpt = attachedTxInfo && attachedTxInfo.normal.cfg;
if (txCfgOpt) {
el.setTextConfig(txCfgOpt);
}
if (elOption && elOption.transition == null) {
elOption.transition = DEFAULT_TRANSITION;
}
var styleOpt = elOption && elOption.style;
if (styleOpt) {
if (el.type === "text") {
var textOptionStyle = styleOpt;
hasOwn(textOptionStyle, "textFill") && (textOptionStyle.fill = textOptionStyle.textFill);
hasOwn(textOptionStyle, "textStroke") && (textOptionStyle.stroke = textOptionStyle.textStroke);
}
var decalPattern = void 0;
var decalObj = isPath(el) ? styleOpt.decal : null;
if (api && decalObj) {
decalObj.dirty = true;
decalPattern = createOrUpdatePatternFromDecal(decalObj, api);
}
styleOpt.__decalPattern = decalPattern;
}
if (isDisplayable(el)) {
if (styleOpt) {
var decalPattern = styleOpt.__decalPattern;
if (decalPattern) {
styleOpt.decal = decalPattern;
}
}
}
applyUpdateTransition(el, elOption, seriesModel, {
dataIndex,
isInit,
clearStyle: true
});
applyKeyframeAnimation(el, elOption.keyframeAnimation, seriesModel);
}
function updateElOnState(state, el, elStateOpt, styleOpt, attachedTxInfo) {
var elDisplayable = el.isGroup ? null : el;
var txCfgOpt = attachedTxInfo && attachedTxInfo[state].cfg;
if (elDisplayable) {
var stateObj = elDisplayable.ensureState(state);
if (styleOpt === false) {
var existingEmphasisState = elDisplayable.getState(state);
if (existingEmphasisState) {
existingEmphasisState.style = null;
}
} else {
stateObj.style = styleOpt || null;
}
if (txCfgOpt) {
stateObj.textConfig = txCfgOpt;
}
setDefaultStateProxy(elDisplayable);
}
}
function updateZ(el, elOption, seriesModel) {
if (el.isGroup) {
return;
}
var elDisplayable = el;
var currentZ = seriesModel.currentZ;
var currentZLevel = seriesModel.currentZLevel;
elDisplayable.z = currentZ;
elDisplayable.zlevel = currentZLevel;
var optZ2 = elOption.z2;
optZ2 != null && (elDisplayable.z2 = optZ2 || 0);
for (var i = 0; i < STATES.length; i++) {
updateZForEachState(elDisplayable, elOption, STATES[i]);
}
}
function updateZForEachState(elDisplayable, elOption, state) {
var isNormal = state === NORMAL;
var elStateOpt = isNormal ? elOption : retrieveStateOption(elOption, state);
var optZ2 = elStateOpt ? elStateOpt.z2 : null;
var stateObj;
if (optZ2 != null) {
stateObj = isNormal ? elDisplayable : elDisplayable.ensureState(state);
stateObj.z2 = optZ2 || 0;
}
}
function makeRenderItem(customSeries, data, ecModel, api) {
var renderItem = customSeries.get("renderItem");
var coordSys = customSeries.coordinateSystem;
var prepareResult2 = {};
if (coordSys) {
prepareResult2 = coordSys.prepareCustoms ? coordSys.prepareCustoms(coordSys) : prepareCustoms[coordSys.type](coordSys);
}
var userAPI = defaults({
getWidth: api.getWidth,
getHeight: api.getHeight,
getZr: api.getZr,
getDevicePixelRatio: api.getDevicePixelRatio,
value,
style,
ordinalRawValue,
styleEmphasis,
visual,
barLayout,
currentSeriesIndices,
font
}, prepareResult2.api || {});
var userParams = {
// The life cycle of context: current round of rendering.
// The global life cycle is probably not necessary, because
// user can store global status by themselves.
context: {},
seriesId: customSeries.id,
seriesName: customSeries.name,
seriesIndex: customSeries.seriesIndex,
coordSys: prepareResult2.coordSys,
dataInsideLength: data.count(),
encode: wrapEncodeDef(customSeries.getData())
};
var currDataIndexInside;
var currItemModel;
var currItemStyleModels = {};
var currLabelModels = {};
var seriesItemStyleModels = {};
var seriesLabelModels = {};
for (var i = 0; i < STATES.length; i++) {
var stateName = STATES[i];
seriesItemStyleModels[stateName] = customSeries.getModel(PATH_ITEM_STYLE[stateName]);
seriesLabelModels[stateName] = customSeries.getModel(PATH_LABEL[stateName]);
}
function getItemModel2(dataIndexInside) {
return dataIndexInside === currDataIndexInside ? currItemModel || (currItemModel = data.getItemModel(dataIndexInside)) : data.getItemModel(dataIndexInside);
}
function getItemStyleModel(dataIndexInside, state) {
return !data.hasItemOption ? seriesItemStyleModels[state] : dataIndexInside === currDataIndexInside ? currItemStyleModels[state] || (currItemStyleModels[state] = getItemModel2(dataIndexInside).getModel(PATH_ITEM_STYLE[state])) : getItemModel2(dataIndexInside).getModel(PATH_ITEM_STYLE[state]);
}
function getLabelModel(dataIndexInside, state) {
return !data.hasItemOption ? seriesLabelModels[state] : dataIndexInside === currDataIndexInside ? currLabelModels[state] || (currLabelModels[state] = getItemModel2(dataIndexInside).getModel(PATH_LABEL[state])) : getItemModel2(dataIndexInside).getModel(PATH_LABEL[state]);
}
return function(dataIndexInside, payload) {
currDataIndexInside = dataIndexInside;
currItemModel = null;
currItemStyleModels = {};
currLabelModels = {};
return renderItem && renderItem(defaults({
dataIndexInside,
dataIndex: data.getRawIndex(dataIndexInside),
// Can be used for optimization when zoom or roam.
actionType: payload ? payload.type : null
}, userParams), userAPI);
};
function value(dim, dataIndexInside) {
dataIndexInside == null && (dataIndexInside = currDataIndexInside);
return data.getStore().get(data.getDimensionIndex(dim || 0), dataIndexInside);
}
function ordinalRawValue(dim, dataIndexInside) {
dataIndexInside == null && (dataIndexInside = currDataIndexInside);
dim = dim || 0;
var dimInfo = data.getDimensionInfo(dim);
if (!dimInfo) {
var dimIndex = data.getDimensionIndex(dim);
return dimIndex >= 0 ? data.getStore().get(dimIndex, dataIndexInside) : void 0;
}
var val = data.get(dimInfo.name, dataIndexInside);
var ordinalMeta = dimInfo && dimInfo.ordinalMeta;
return ordinalMeta ? ordinalMeta.categories[val] : val;
}
function style(userProps, dataIndexInside) {
dataIndexInside == null && (dataIndexInside = currDataIndexInside);
var style2 = data.getItemVisual(dataIndexInside, "style");
var visualColor = style2 && style2.fill;
var opacity = style2 && style2.opacity;
var itemStyle = getItemStyleModel(dataIndexInside, NORMAL).getItemStyle();
visualColor != null && (itemStyle.fill = visualColor);
opacity != null && (itemStyle.opacity = opacity);
var opt = {
inheritColor: isString(visualColor) ? visualColor : "#000"
};
var labelModel = getLabelModel(dataIndexInside, NORMAL);
var textStyle = createTextStyle(labelModel, null, opt, false, true);
textStyle.text = labelModel.getShallow("show") ? retrieve2(customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null;
var textConfig = createTextConfig(labelModel, opt, false);
preFetchFromExtra(userProps, itemStyle);
itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig);
userProps && applyUserPropsAfter(itemStyle, userProps);
itemStyle.legacy = true;
return itemStyle;
}
function styleEmphasis(userProps, dataIndexInside) {
dataIndexInside == null && (dataIndexInside = currDataIndexInside);
var itemStyle = getItemStyleModel(dataIndexInside, EMPHASIS).getItemStyle();
var labelModel = getLabelModel(dataIndexInside, EMPHASIS);
var textStyle = createTextStyle(labelModel, null, null, true, true);
textStyle.text = labelModel.getShallow("show") ? retrieve3(customSeries.getFormattedLabel(dataIndexInside, EMPHASIS), customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null;
var textConfig = createTextConfig(labelModel, null, true);
preFetchFromExtra(userProps, itemStyle);
itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig);
userProps && applyUserPropsAfter(itemStyle, userProps);
itemStyle.legacy = true;
return itemStyle;
}
function applyUserPropsAfter(itemStyle, extra) {
for (var key in extra) {
if (hasOwn(extra, key)) {
itemStyle[key] = extra[key];
}
}
}
function preFetchFromExtra(extra, itemStyle) {
if (extra) {
extra.textFill && (itemStyle.textFill = extra.textFill);
extra.textPosition && (itemStyle.textPosition = extra.textPosition);
}
}
function visual(visualType, dataIndexInside) {
dataIndexInside == null && (dataIndexInside = currDataIndexInside);
if (hasOwn(STYLE_VISUAL_TYPE, visualType)) {
var style_1 = data.getItemVisual(dataIndexInside, "style");
return style_1 ? style_1[STYLE_VISUAL_TYPE[visualType]] : null;
}
if (hasOwn(NON_STYLE_VISUAL_PROPS, visualType)) {
return data.getItemVisual(dataIndexInside, visualType);
}
}
function barLayout(opt) {
if (coordSys.type === "cartesian2d") {
var baseAxis = coordSys.getBaseAxis();
return getLayoutOnAxis(defaults({
axis: baseAxis
}, opt));
}
}
function currentSeriesIndices() {
return ecModel.getCurrentSeriesIndices();
}
function font(opt) {
return getFont(opt, ecModel);
}
}
function wrapEncodeDef(data) {
var encodeDef = {};
each$f(data.dimensions, function(dimName) {
var dimInfo = data.getDimensionInfo(dimName);
if (!dimInfo.isExtraCoord) {
var coordDim = dimInfo.coordDim;
var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];
dataDims[dimInfo.coordDimIndex] = data.getDimensionIndex(dimName);
}
});
return encodeDef;
}
function createOrUpdateItem(api, existsEl, dataIndex, elOption, seriesModel, group, data) {
if (!elOption) {
group.remove(existsEl);
return;
}
var el = doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group);
el && data.setItemGraphicEl(dataIndex, el);
el && toggleHoverEmphasis(el, elOption.focus, elOption.blurScope, elOption.emphasisDisabled);
return el;
}
function doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group) {
var toBeReplacedIdx = -1;
var oldEl = existsEl;
if (existsEl && doesElNeedRecreate(existsEl, elOption, seriesModel)) {
toBeReplacedIdx = indexOf(group.childrenRef(), existsEl);
existsEl = null;
}
var isInit = !existsEl;
var el = existsEl;
if (!el) {
el = createEl$1(elOption);
if (oldEl) {
copyElement(oldEl, el);
}
} else {
el.clearStates();
}
if (elOption.morph === false) {
el.disableMorphing = true;
} else if (el.disableMorphing) {
el.disableMorphing = false;
}
attachedTxInfoTmp.normal.cfg = attachedTxInfoTmp.normal.conOpt = attachedTxInfoTmp.emphasis.cfg = attachedTxInfoTmp.emphasis.conOpt = attachedTxInfoTmp.blur.cfg = attachedTxInfoTmp.blur.conOpt = attachedTxInfoTmp.select.cfg = attachedTxInfoTmp.select.conOpt = null;
attachedTxInfoTmp.isLegacy = false;
doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfoTmp);
doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit);
updateElNormal(api, el, dataIndex, elOption, attachedTxInfoTmp, seriesModel, isInit);
hasOwn(elOption, "info") && (customInnerStore(el).info = elOption.info);
for (var i = 0; i < STATES.length; i++) {
var stateName = STATES[i];
if (stateName !== NORMAL) {
var otherStateOpt = retrieveStateOption(elOption, stateName);
var otherStyleOpt = retrieveStyleOptionOnState(elOption, otherStateOpt, stateName);
updateElOnState(stateName, el, otherStateOpt, otherStyleOpt, attachedTxInfoTmp);
}
}
updateZ(el, elOption, seriesModel);
if (elOption.type === "group") {
mergeChildren(api, el, dataIndex, elOption, seriesModel);
}
if (toBeReplacedIdx >= 0) {
group.replaceAt(el, toBeReplacedIdx);
} else {
group.add(el);
}
return el;
}
function doesElNeedRecreate(el, elOption, seriesModel) {
var elInner = customInnerStore(el);
var elOptionType = elOption.type;
var elOptionShape = elOption.shape;
var elOptionStyle = elOption.style;
return (
// Always create new if universal transition is enabled.
// Because we do transition after render. It needs to know what old element is. Replacement will loose it.
seriesModel.isUniversalTransitionEnabled() || elOptionType != null && elOptionType !== elInner.customGraphicType || elOptionType === "path" && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== elInner.customPathData || elOptionType === "image" && hasOwn(elOptionStyle, "image") && elOptionStyle.image !== elInner.customImagePath
);
}
function doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit) {
var clipPathOpt = elOption.clipPath;
if (clipPathOpt === false) {
if (el && el.getClipPath()) {
el.removeClipPath();
}
} else if (clipPathOpt) {
var clipPath = el.getClipPath();
if (clipPath && doesElNeedRecreate(clipPath, clipPathOpt, seriesModel)) {
clipPath = null;
}
if (!clipPath) {
clipPath = createEl$1(clipPathOpt);
el.setClipPath(clipPath);
}
updateElNormal(null, clipPath, dataIndex, clipPathOpt, null, seriesModel, isInit);
}
}
function doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfo) {
if (el.isGroup) {
return;
}
processTxInfo(elOption, null, attachedTxInfo);
processTxInfo(elOption, EMPHASIS, attachedTxInfo);
var txConOptNormal = attachedTxInfo.normal.conOpt;
var txConOptEmphasis = attachedTxInfo.emphasis.conOpt;
var txConOptBlur = attachedTxInfo.blur.conOpt;
var txConOptSelect = attachedTxInfo.select.conOpt;
if (txConOptNormal != null || txConOptEmphasis != null || txConOptSelect != null || txConOptBlur != null) {
var textContent = el.getTextContent();
if (txConOptNormal === false) {
textContent && el.removeTextContent();
} else {
txConOptNormal = attachedTxInfo.normal.conOpt = txConOptNormal || {
type: "text"
};
if (!textContent) {
textContent = createEl$1(txConOptNormal);
el.setTextContent(textContent);
} else {
textContent.clearStates();
}
updateElNormal(null, textContent, dataIndex, txConOptNormal, null, seriesModel, isInit);
var txConStlOptNormal = txConOptNormal && txConOptNormal.style;
for (var i = 0; i < STATES.length; i++) {
var stateName = STATES[i];
if (stateName !== NORMAL) {
var txConOptOtherState = attachedTxInfo[stateName].conOpt;
updateElOnState(stateName, textContent, txConOptOtherState, retrieveStyleOptionOnState(txConOptNormal, txConOptOtherState, stateName), null);
}
}
txConStlOptNormal ? textContent.dirty() : textContent.markRedraw();
}
}
}
function processTxInfo(elOption, state, attachedTxInfo) {
var stateOpt = !state ? elOption : retrieveStateOption(elOption, state);
var styleOpt = !state ? elOption.style : retrieveStyleOptionOnState(elOption, stateOpt, EMPHASIS);
var elType = elOption.type;
var txCfg = stateOpt ? stateOpt.textConfig : null;
var txConOptNormal = elOption.textContent;
var txConOpt = !txConOptNormal ? null : !state ? txConOptNormal : retrieveStateOption(txConOptNormal, state);
if (styleOpt && // Because emphasis style has little info to detect legacy,
// if normal is legacy, emphasis is trade as legacy.
(attachedTxInfo.isLegacy || isEC4CompatibleStyle(styleOpt, elType, !!txCfg, !!txConOpt))) {
attachedTxInfo.isLegacy = true;
var convertResult = convertFromEC4CompatibleStyle(styleOpt, elType, !state);
if (!txCfg && convertResult.textConfig) {
txCfg = convertResult.textConfig;
}
if (!txConOpt && convertResult.textContent) {
txConOpt = convertResult.textContent;
}
}
if (!state && txConOpt) {
var txConOptNormal_1 = txConOpt;
!txConOptNormal_1.type && (txConOptNormal_1.type = "text");
}
var info = !state ? attachedTxInfo.normal : attachedTxInfo[state];
info.cfg = txCfg;
info.conOpt = txConOpt;
}
function retrieveStateOption(elOption, state) {
return !state ? elOption : elOption ? elOption[state] : null;
}
function retrieveStyleOptionOnState(stateOptionNormal, stateOption, state) {
var style = stateOption && stateOption.style;
if (style == null && state === EMPHASIS && stateOptionNormal) {
style = stateOptionNormal.styleEmphasis;
}
return style;
}
function mergeChildren(api, el, dataIndex, elOption, seriesModel) {
var newChildren = elOption.children;
var newLen = newChildren ? newChildren.length : 0;
var mergeChildren2 = elOption.$mergeChildren;
var byName = mergeChildren2 === "byName" || elOption.diffChildrenByName;
var notMerge = mergeChildren2 === false;
if (!newLen && !byName && !notMerge) {
return;
}
if (byName) {
diffGroupChildren({
api,
oldChildren: el.children() || [],
newChildren: newChildren || [],
dataIndex,
seriesModel,
group: el
});
return;
}
notMerge && el.removeAll();
var index = 0;
for (; index < newLen; index++) {
var newChild = newChildren[index];
var oldChild = el.childAt(index);
if (newChild) {
if (newChild.ignore == null) {
newChild.ignore = false;
}
doCreateOrUpdateEl(api, oldChild, dataIndex, newChild, seriesModel, el);
} else {
oldChild.ignore = true;
}
}
for (var i = el.childCount() - 1; i >= index; i--) {
var child = el.childAt(i);
removeChildFromGroup(el, child, seriesModel);
}
}
function removeChildFromGroup(group, child, seriesModel) {
child && applyLeaveTransition(child, customInnerStore(group).option, seriesModel);
}
function diffGroupChildren(context) {
new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).execute();
}
function getKey(item, idx) {
var name = item && item.name;
return name != null ? name : GROUP_DIFF_PREFIX + idx;
}
function processAddUpdate(newIndex, oldIndex) {
var context = this.context;
var childOption = newIndex != null ? context.newChildren[newIndex] : null;
var child = oldIndex != null ? context.oldChildren[oldIndex] : null;
doCreateOrUpdateEl(context.api, child, context.dataIndex, childOption, context.seriesModel, context.group);
}
function processRemove(oldIndex) {
var context = this.context;
var child = context.oldChildren[oldIndex];
child && applyLeaveTransition(child, customInnerStore(child).option, context.seriesModel);
}
function getPathData(shape) {
return shape && (shape.pathData || shape.d);
}
function hasOwnPathData(shape) {
return shape && (hasOwn(shape, "pathData") || hasOwn(shape, "d"));
}
function install$t(registers) {
registers.registerChartView(CustomChartView);
registers.registerSeriesModel(CustomSeriesModel);
}
var inner$b = makeInner();
var clone = clone$1;
var bind = bind$1;
var BaseAxisPointer = (
/** @class */
(function() {
function BaseAxisPointer2() {
this._dragging = false;
this.animationThreshold = 15;
}
BaseAxisPointer2.prototype.render = function(axisModel, axisPointerModel, api, forceRender) {
var value = axisPointerModel.get("value");
var status = axisPointerModel.get("status");
this._axisModel = axisModel;
this._axisPointerModel = axisPointerModel;
this._api = api;
if (!forceRender && this._lastValue === value && this._lastStatus === status) {
return;
}
this._lastValue = value;
this._lastStatus = status;
var group = this._group;
var handle = this._handle;
if (!status || status === "hide") {
group && group.hide();
handle && handle.hide();
return;
}
group && group.show();
handle && handle.show();
var elOption = {};
this.makeElOption(elOption, value, axisModel, axisPointerModel, api);
var graphicKey = elOption.graphicKey;
if (graphicKey !== this._lastGraphicKey) {
this.clear(api);
}
this._lastGraphicKey = graphicKey;
var moveAnimation = this._moveAnimation = this.determineAnimation(axisModel, axisPointerModel);
if (!group) {
group = this._group = new Group$3();
this.createPointerEl(group, elOption, axisModel, axisPointerModel);
this.createLabelEl(group, elOption, axisModel, axisPointerModel);
api.getZr().add(group);
} else {
var doUpdateProps = curry$1(updateProps, axisPointerModel, moveAnimation);
this.updatePointerEl(group, elOption, doUpdateProps);
this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);
}
updateMandatoryProps(group, axisPointerModel, true);
this._renderHandle(value);
};
BaseAxisPointer2.prototype.remove = function(api) {
this.clear(api);
};
BaseAxisPointer2.prototype.dispose = function(api) {
this.clear(api);
};
BaseAxisPointer2.prototype.determineAnimation = function(axisModel, axisPointerModel) {
var animation = axisPointerModel.get("animation");
var axis = axisModel.axis;
var isCategoryAxis = axis.type === "category";
var useSnap = axisPointerModel.get("snap");
if (!useSnap && !isCategoryAxis) {
return false;
}
if (animation === "auto" || animation == null) {
var animationThreshold = this.animationThreshold;
if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {
return true;
}
if (useSnap) {
var seriesDataCount = getAxisInfo$1(axisModel).seriesDataCount;
var axisExtent = axis.getExtent();
return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;
}
return false;
}
return animation === true;
};
BaseAxisPointer2.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) {
};
BaseAxisPointer2.prototype.createPointerEl = function(group, elOption, axisModel, axisPointerModel) {
var pointerOption = elOption.pointer;
if (pointerOption) {
var pointerEl = inner$b(group).pointerEl = new graphic[pointerOption.type](clone(elOption.pointer));
group.add(pointerEl);
}
};
BaseAxisPointer2.prototype.createLabelEl = function(group, elOption, axisModel, axisPointerModel) {
if (elOption.label) {
var labelEl = inner$b(group).labelEl = new ZRText(clone(elOption.label));
group.add(labelEl);
updateLabelShowHide(labelEl, axisPointerModel);
}
};
BaseAxisPointer2.prototype.updatePointerEl = function(group, elOption, updateProps2) {
var pointerEl = inner$b(group).pointerEl;
if (pointerEl && elOption.pointer) {
pointerEl.setStyle(elOption.pointer.style);
updateProps2(pointerEl, {
shape: elOption.pointer.shape
});
}
};
BaseAxisPointer2.prototype.updateLabelEl = function(group, elOption, updateProps2, axisPointerModel) {
var labelEl = inner$b(group).labelEl;
if (labelEl) {
labelEl.setStyle(elOption.label.style);
updateProps2(labelEl, {
// Consider text length change in vertical axis, animation should
// be used on shape, otherwise the effect will be weird.
// TODOTODO
// shape: elOption.label.shape,
x: elOption.label.x,
y: elOption.label.y
});
updateLabelShowHide(labelEl, axisPointerModel);
}
};
BaseAxisPointer2.prototype._renderHandle = function(value) {
if (this._dragging || !this.updateHandleTransform) {
return;
}
var axisPointerModel = this._axisPointerModel;
var zr = this._api.getZr();
var handle = this._handle;
var handleModel = axisPointerModel.getModel("handle");
var status = axisPointerModel.get("status");
if (!handleModel.get("show") || !status || status === "hide") {
handle && zr.remove(handle);
this._handle = null;
return;
}
var isInit;
if (!this._handle) {
isInit = true;
handle = this._handle = createIcon(handleModel.get("icon"), {
cursor: "move",
draggable: true,
onmousemove: function(e) {
stop(e.event);
},
onmousedown: bind(this._onHandleDragMove, this, 0, 0),
drift: bind(this._onHandleDragMove, this),
ondragend: bind(this._onHandleDragEnd, this)
});
zr.add(handle);
}
updateMandatoryProps(handle, axisPointerModel, false);
handle.setStyle(handleModel.getItemStyle(null, ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY"]));
var handleSize = handleModel.get("size");
if (!isArray$1(handleSize)) {
handleSize = [handleSize, handleSize];
}
handle.scaleX = handleSize[0] / 2;
handle.scaleY = handleSize[1] / 2;
createOrUpdate(this, "_doDispatchAxisPointer", handleModel.get("throttle") || 0, "fixRate");
this._moveHandleToValue(value, isInit);
};
BaseAxisPointer2.prototype._moveHandleToValue = function(value, isInit) {
updateProps(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel)));
};
BaseAxisPointer2.prototype._onHandleDragMove = function(dx, dy) {
var handle = this._handle;
if (!handle) {
return;
}
this._dragging = true;
var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel);
this._payloadInfo = trans;
handle.stopAnimation();
handle.attr(getHandleTransProps(trans));
inner$b(handle).lastProp = null;
this._doDispatchAxisPointer();
};
BaseAxisPointer2.prototype._doDispatchAxisPointer = function() {
var handle = this._handle;
if (!handle) {
return;
}
var payloadInfo = this._payloadInfo;
var axisModel = this._axisModel;
this._api.dispatchAction({
type: "updateAxisPointer",
x: payloadInfo.cursorPoint[0],
y: payloadInfo.cursorPoint[1],
tooltipOption: payloadInfo.tooltipOption,
axesInfo: [{
axisDim: axisModel.axis.dim,
axisIndex: axisModel.componentIndex
}]
});
};
BaseAxisPointer2.prototype._onHandleDragEnd = function() {
this._dragging = false;
var handle = this._handle;
if (!handle) {
return;
}
var value = this._axisPointerModel.get("value");
this._moveHandleToValue(value);
this._api.dispatchAction({
type: "hideTip"
});
};
BaseAxisPointer2.prototype.clear = function(api) {
this._lastValue = null;
this._lastStatus = null;
var zr = api.getZr();
var group = this._group;
var handle = this._handle;
if (zr && group) {
this._lastGraphicKey = null;
group && zr.remove(group);
handle && zr.remove(handle);
this._group = null;
this._handle = null;
this._payloadInfo = null;
}
clear$1(this, "_doDispatchAxisPointer");
};
BaseAxisPointer2.prototype.doClear = function() {
};
BaseAxisPointer2.prototype.buildLabel = function(xy, wh, xDimIndex) {
xDimIndex = xDimIndex || 0;
return {
x: xy[xDimIndex],
y: xy[1 - xDimIndex],
width: wh[xDimIndex],
height: wh[1 - xDimIndex]
};
};
return BaseAxisPointer2;
})()
);
function updateProps(animationModel, moveAnimation, el, props) {
if (!propsEqual(inner$b(el).lastProp, props)) {
inner$b(el).lastProp = props;
moveAnimation ? updateProps$1(el, props, animationModel) : (el.stopAnimation(), el.attr(props));
}
}
function propsEqual(lastProps, newProps) {
if (isObject$3(lastProps) && isObject$3(newProps)) {
var equals_1 = true;
each$f(newProps, function(item, key) {
equals_1 = equals_1 && propsEqual(lastProps[key], item);
});
return !!equals_1;
} else {
return lastProps === newProps;
}
}
function updateLabelShowHide(labelEl, axisPointerModel) {
labelEl[axisPointerModel.get(["label", "show"]) ? "show" : "hide"]();
}
function getHandleTransProps(trans) {
return {
x: trans.x || 0,
y: trans.y || 0,
rotation: trans.rotation || 0
};
}
function updateMandatoryProps(group, axisPointerModel, silent) {
var z = axisPointerModel.get("z");
var zlevel = axisPointerModel.get("zlevel");
group && group.traverse(function(el) {
if (el.type !== "group") {
z != null && (el.z = z);
zlevel != null && (el.zlevel = zlevel);
el.silent = silent;
}
});
}
function buildElStyle(axisPointerModel) {
var axisPointerType = axisPointerModel.get("type");
var styleModel = axisPointerModel.getModel(axisPointerType + "Style");
var style;
if (axisPointerType === "line") {
style = styleModel.getLineStyle();
style.fill = null;
} else if (axisPointerType === "shadow") {
style = styleModel.getAreaStyle();
style.stroke = null;
}
return style;
}
function buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) {
var value = axisPointerModel.get("value");
var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get("seriesDataIndices"), {
precision: axisPointerModel.get(["label", "precision"]),
formatter: axisPointerModel.get(["label", "formatter"])
});
var labelModel = axisPointerModel.getModel("label");
var paddings = normalizeCssArray(labelModel.get("padding") || 0);
var font = labelModel.getFont();
var textRect = getBoundingRect(text, font);
var position2 = labelPos.position;
var width = textRect.width + paddings[1] + paddings[3];
var height = textRect.height + paddings[0] + paddings[2];
var align = labelPos.align;
align === "right" && (position2[0] -= width);
align === "center" && (position2[0] -= width / 2);
var verticalAlign = labelPos.verticalAlign;
verticalAlign === "bottom" && (position2[1] -= height);
verticalAlign === "middle" && (position2[1] -= height / 2);
confineInContainer(position2, width, height, api);
var bgColor = labelModel.get("backgroundColor");
if (!bgColor || bgColor === "auto") {
bgColor = axisModel.get(["axisLine", "lineStyle", "color"]);
}
elOption.label = {
// shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')},
x: position2[0],
y: position2[1],
style: createTextStyle(labelModel, {
text,
font,
fill: labelModel.getTextColor(),
padding: paddings,
backgroundColor: bgColor
}),
// Label should be over axisPointer.
z2: 10
};
}
function confineInContainer(position2, width, height, api) {
var viewWidth = api.getWidth();
var viewHeight = api.getHeight();
position2[0] = Math.min(position2[0] + width, viewWidth) - width;
position2[1] = Math.min(position2[1] + height, viewHeight) - height;
position2[0] = Math.max(position2[0], 0);
position2[1] = Math.max(position2[1], 0);
}
function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {
value = axis.scale.parse(value);
var text = axis.scale.getLabel({
value
}, {
// If `precision` is set, width can be fixed (like '12.00500'), which
// helps to debounce when when moving label.
precision: opt.precision
});
var formatter = opt.formatter;
if (formatter) {
var params_1 = {
value: getAxisRawValue(axis, {
value
}),
axisDimension: axis.dim,
axisIndex: axis.index,
seriesData: []
};
each$f(seriesDataIndices, function(idxItem) {
var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
var dataIndex = idxItem.dataIndexInside;
var dataParams = series && series.getDataParams(dataIndex);
dataParams && params_1.seriesData.push(dataParams);
});
if (isString(formatter)) {
text = formatter.replace("{value}", text);
} else if (isFunction(formatter)) {
text = formatter(params_1);
}
}
return text;
}
function getTransformedPosition(axis, value, layoutInfo) {
var transform2 = create$1();
rotate(transform2, transform2, layoutInfo.rotation);
translate(transform2, transform2, layoutInfo.position);
return applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform2);
}
function buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) {
var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection);
layoutInfo.labelMargin = axisPointerModel.get(["label", "margin"]);
buildLabelElOption(elOption, axisModel, axisPointerModel, api, {
position: getTransformedPosition(axisModel.axis, value, layoutInfo),
align: textLayout.textAlign,
verticalAlign: textLayout.textVerticalAlign
});
}
function makeLineShape(p1, p2, xDimIndex) {
xDimIndex = xDimIndex || 0;
return {
x1: p1[xDimIndex],
y1: p1[1 - xDimIndex],
x2: p2[xDimIndex],
y2: p2[1 - xDimIndex]
};
}
function makeRectShape(xy, wh, xDimIndex) {
xDimIndex = xDimIndex || 0;
return {
x: xy[xDimIndex],
y: xy[1 - xDimIndex],
width: wh[xDimIndex],
height: wh[1 - xDimIndex]
};
}
function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {
return {
cx,
cy,
r0,
r,
startAngle,
endAngle,
clockwise: true
};
}
var CartesianAxisPointer = (
/** @class */
(function(_super) {
__extends(CartesianAxisPointer2, _super);
function CartesianAxisPointer2() {
return _super !== null && _super.apply(this, arguments) || this;
}
CartesianAxisPointer2.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) {
var axis = axisModel.axis;
var grid = axis.grid;
var axisPointerType = axisPointerModel.get("type");
var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));
if (axisPointerType && axisPointerType !== "none") {
var elStyle = buildElStyle(axisPointerModel);
var pointerOption = pointerShapeBuilder$2[axisPointerType](axis, pixelValue, otherExtent);
pointerOption.style = elStyle;
elOption.graphicKey = pointerOption.type;
elOption.pointer = pointerOption;
}
var layoutInfo = layout$2(grid.model, axisModel);
buildCartesianSingleLabelElOption(
// @ts-ignore
value,
elOption,
layoutInfo,
axisModel,
axisPointerModel,
api
);
};
CartesianAxisPointer2.prototype.getHandleTransform = function(value, axisModel, axisPointerModel) {
var layoutInfo = layout$2(axisModel.axis.grid.model, axisModel, {
labelInside: false
});
layoutInfo.labelMargin = axisPointerModel.get(["handle", "margin"]);
var pos = getTransformedPosition(axisModel.axis, value, layoutInfo);
return {
x: pos[0],
y: pos[1],
rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)
};
};
CartesianAxisPointer2.prototype.updateHandleTransform = function(transform2, delta, axisModel, axisPointerModel) {
var axis = axisModel.axis;
var grid = axis.grid;
var axisExtent = axis.getGlobalExtent(true);
var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
var dimIndex = axis.dim === "x" ? 0 : 1;
var currPosition = [transform2.x, transform2.y];
currPosition[dimIndex] += delta[dimIndex];
currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);
currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);
var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;
var cursorPoint = [cursorOtherValue, cursorOtherValue];
cursorPoint[dimIndex] = currPosition[dimIndex];
var tooltipOptions = [{
verticalAlign: "middle"
}, {
align: "center"
}];
return {
x: currPosition[0],
y: currPosition[1],
rotation: transform2.rotation,
cursorPoint,
tooltipOption: tooltipOptions[dimIndex]
};
};
return CartesianAxisPointer2;
})(BaseAxisPointer)
);
function getCartesian(grid, axis) {
var opt = {};
opt[axis.dim + "AxisIndex"] = axis.index;
return grid.getCartesian(opt);
}
var pointerShapeBuilder$2 = {
line: function(axis, pixelValue, otherExtent) {
var targetShape = makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis));
return {
type: "Line",
subPixelOptimize: true,
shape: targetShape
};
},
shadow: function(axis, pixelValue, otherExtent) {
var bandWidth = Math.max(1, axis.getBandWidth());
var span = otherExtent[1] - otherExtent[0];
return {
type: "Rect",
shape: makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getAxisDimIndex(axis))
};
}
};
function getAxisDimIndex(axis) {
return axis.dim === "x" ? 0 : 1;
}
var AxisPointerModel = (
/** @class */
(function(_super) {
__extends(AxisPointerModel2, _super);
function AxisPointerModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = AxisPointerModel2.type;
return _this;
}
AxisPointerModel2.type = "axisPointer";
AxisPointerModel2.defaultOption = {
// 'auto' means that show when triggered by tooltip or handle.
show: "auto",
// zlevel: 0,
z: 50,
type: "line",
// axispointer triggered by tootip determine snap automatically,
// see `modelHelper`.
snap: false,
triggerTooltip: true,
triggerEmphasis: true,
value: null,
status: null,
link: [],
// Do not set 'auto' here, otherwise global animation: false
// will not effect at this axispointer.
animation: null,
animationDurationUpdate: 200,
lineStyle: {
color: "#B9BEC9",
width: 1,
type: "dashed"
},
shadowStyle: {
color: "rgba(210,219,238,0.2)"
},
label: {
show: true,
formatter: null,
precision: "auto",
margin: 3,
color: "#fff",
padding: [5, 7, 5, 7],
backgroundColor: "auto",
borderColor: null,
borderWidth: 0,
borderRadius: 3
},
handle: {
show: false,
// eslint-disable-next-line
icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
size: 45,
// handle margin is from symbol center to axis, which is stable when circular move.
margin: 50,
// color: '#1b8bbd'
// color: '#2f4554'
color: "#333",
shadowBlur: 3,
shadowColor: "#aaa",
shadowOffsetX: 0,
shadowOffsetY: 2,
// For mobile performance
throttle: 40
}
};
return AxisPointerModel2;
})(ComponentModel)
);
var inner$a = makeInner();
var each$8 = each$f;
function register(key, api, handler) {
if (env.node) {
return;
}
var zr = api.getZr();
inner$a(zr).records || (inner$a(zr).records = {});
initGlobalListeners(zr, api);
var record = inner$a(zr).records[key] || (inner$a(zr).records[key] = {});
record.handler = handler;
}
function initGlobalListeners(zr, api) {
if (inner$a(zr).initialized) {
return;
}
inner$a(zr).initialized = true;
useHandler("click", curry$1(doEnter, "click"));
useHandler("mousemove", curry$1(doEnter, "mousemove"));
useHandler("globalout", onLeave);
function useHandler(eventType, cb) {
zr.on(eventType, function(e) {
var dis = makeDispatchAction$1(api);
each$8(inner$a(zr).records, function(record) {
record && cb(record, e, dis.dispatchAction);
});
dispatchTooltipFinally(dis.pendings, api);
});
}
}
function dispatchTooltipFinally(pendings, api) {
var showLen = pendings.showTip.length;
var hideLen = pendings.hideTip.length;
var actuallyPayload;
if (showLen) {
actuallyPayload = pendings.showTip[showLen - 1];
} else if (hideLen) {
actuallyPayload = pendings.hideTip[hideLen - 1];
}
if (actuallyPayload) {
actuallyPayload.dispatchAction = null;
api.dispatchAction(actuallyPayload);
}
}
function onLeave(record, e, dispatchAction2) {
record.handler("leave", null, dispatchAction2);
}
function doEnter(currTrigger, record, e, dispatchAction2) {
record.handler(currTrigger, e, dispatchAction2);
}
function makeDispatchAction$1(api) {
var pendings = {
showTip: [],
hideTip: []
};
var dispatchAction2 = function(payload) {
var pendingList = pendings[payload.type];
if (pendingList) {
pendingList.push(payload);
} else {
payload.dispatchAction = dispatchAction2;
api.dispatchAction(payload);
}
};
return {
dispatchAction: dispatchAction2,
pendings
};
}
function unregister(key, api) {
if (env.node) {
return;
}
var zr = api.getZr();
var record = (inner$a(zr).records || {})[key];
if (record) {
inner$a(zr).records[key] = null;
}
}
var AxisPointerView = (
/** @class */
(function(_super) {
__extends(AxisPointerView2, _super);
function AxisPointerView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = AxisPointerView2.type;
return _this;
}
AxisPointerView2.prototype.render = function(globalAxisPointerModel, ecModel, api) {
var globalTooltipModel = ecModel.getComponent("tooltip");
var triggerOn = globalAxisPointerModel.get("triggerOn") || globalTooltipModel && globalTooltipModel.get("triggerOn") || "mousemove|click";
register("axisPointer", api, function(currTrigger, e, dispatchAction2) {
if (triggerOn !== "none" && (currTrigger === "leave" || triggerOn.indexOf(currTrigger) >= 0)) {
dispatchAction2({
type: "updateAxisPointer",
currTrigger,
x: e && e.offsetX,
y: e && e.offsetY
});
}
});
};
AxisPointerView2.prototype.remove = function(ecModel, api) {
unregister("axisPointer", api);
};
AxisPointerView2.prototype.dispose = function(ecModel, api) {
unregister("axisPointer", api);
};
AxisPointerView2.type = "axisPointer";
return AxisPointerView2;
})(ComponentView)
);
function findPointFromSeries(finder, ecModel) {
var point = [];
var seriesIndex = finder.seriesIndex;
var seriesModel;
if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) {
return {
point: []
};
}
var data = seriesModel.getData();
var dataIndex = queryDataIndex(data, finder);
if (dataIndex == null || dataIndex < 0 || isArray$1(dataIndex)) {
return {
point: []
};
}
var el = data.getItemGraphicEl(dataIndex);
var coordSys = seriesModel.coordinateSystem;
if (seriesModel.getTooltipPosition) {
point = seriesModel.getTooltipPosition(dataIndex) || [];
} else if (coordSys && coordSys.dataToPoint) {
if (finder.isStacked) {
var baseAxis = coordSys.getBaseAxis();
var valueAxis2 = coordSys.getOtherAxis(baseAxis);
var valueAxisDim = valueAxis2.dim;
var baseAxisDim = baseAxis.dim;
var baseDataOffset = valueAxisDim === "x" || valueAxisDim === "radius" ? 1 : 0;
var baseDim = data.mapDimension(baseAxisDim);
var stackedData = [];
stackedData[baseDataOffset] = data.get(baseDim, dataIndex);
stackedData[1 - baseDataOffset] = data.get(data.getCalculationInfo("stackResultDimension"), dataIndex);
point = coordSys.dataToPoint(stackedData) || [];
} else {
point = coordSys.dataToPoint(data.getValues(map$1(coordSys.dimensions, function(dim) {
return data.mapDimension(dim);
}), dataIndex)) || [];
}
} else if (el) {
var rect = el.getBoundingRect().clone();
rect.applyTransform(el.transform);
point = [rect.x + rect.width / 2, rect.y + rect.height / 2];
}
return {
point,
el
};
}
var inner$9 = makeInner();
function axisTrigger(payload, ecModel, api) {
var currTrigger = payload.currTrigger;
var point = [payload.x, payload.y];
var finder = payload;
var dispatchAction2 = payload.dispatchAction || bind$1(api.dispatchAction, api);
var coordSysAxesInfo = ecModel.getComponent("axisPointer").coordSysAxesInfo;
if (!coordSysAxesInfo) {
return;
}
if (illegalPoint(point)) {
point = findPointFromSeries({
seriesIndex: finder.seriesIndex,
// Do not use dataIndexInside from other ec instance.
// FIXME: auto detect it?
dataIndex: finder.dataIndex
}, ecModel).point;
}
var isIllegalPoint = illegalPoint(point);
var inputAxesInfo = finder.axesInfo;
var axesInfo = coordSysAxesInfo.axesInfo;
var shouldHide = currTrigger === "leave" || illegalPoint(point);
var outputPayload = {};
var showValueMap = {};
var dataByCoordSys = {
list: [],
map: {}
};
var updaters = {
showPointer: curry$1(showPointer, showValueMap),
showTooltip: curry$1(showTooltip, dataByCoordSys)
};
each$f(coordSysAxesInfo.coordSysMap, function(coordSys, coordSysKey) {
var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);
each$f(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function(axisInfo, key) {
var axis = axisInfo.axis;
var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo);
if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {
var val = inputAxisInfo && inputAxisInfo.value;
if (val == null && !isIllegalPoint) {
val = axis.pointToData(point);
}
val != null && processOnAxis(axisInfo, val, updaters, false, outputPayload);
}
});
});
var linkTriggers = {};
each$f(axesInfo, function(tarAxisInfo, tarKey) {
var linkGroup = tarAxisInfo.linkGroup;
if (linkGroup && !showValueMap[tarKey]) {
each$f(linkGroup.axesInfo, function(srcAxisInfo, srcKey) {
var srcValItem = showValueMap[srcKey];
if (srcAxisInfo !== tarAxisInfo && srcValItem) {
var val = srcValItem.value;
linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo))));
linkTriggers[tarAxisInfo.key] = val;
}
});
}
});
each$f(linkTriggers, function(val, tarKey) {
processOnAxis(axesInfo[tarKey], val, updaters, true, outputPayload);
});
updateModelActually(showValueMap, axesInfo, outputPayload);
dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction2);
dispatchHighDownActually(axesInfo, dispatchAction2, api);
return outputPayload;
}
function processOnAxis(axisInfo, newValue, updaters, noSnap, outputFinder) {
var axis = axisInfo.axis;
if (axis.scale.isBlank() || !axis.containData(newValue)) {
return;
}
if (!axisInfo.involveSeries) {
updaters.showPointer(axisInfo, newValue);
return;
}
var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);
var payloadBatch = payloadInfo.payloadBatch;
var snapToValue = payloadInfo.snapToValue;
if (payloadBatch[0] && outputFinder.seriesIndex == null) {
extend(outputFinder, payloadBatch[0]);
}
if (!noSnap && axisInfo.snap) {
if (axis.containData(snapToValue) && snapToValue != null) {
newValue = snapToValue;
}
}
updaters.showPointer(axisInfo, newValue, payloadBatch);
updaters.showTooltip(axisInfo, payloadInfo, snapToValue);
}
function buildPayloadsBySeries(value, axisInfo) {
var axis = axisInfo.axis;
var dim = axis.dim;
var snapToValue = value;
var payloadBatch = [];
var minDist = Number.MAX_VALUE;
var minDiff = -1;
each$f(axisInfo.seriesModels, function(series, idx) {
var dataDim = series.getData().mapDimensionsAll(dim);
var seriesNestestValue;
var dataIndices;
if (series.getAxisTooltipData) {
var result = series.getAxisTooltipData(dataDim, value, axis);
dataIndices = result.dataIndices;
seriesNestestValue = result.nestestValue;
} else {
dataIndices = series.getData().indicesOfNearest(
dataDim[0],
value,
// Add a threshold to avoid find the wrong dataIndex
// when data length is not same.
// false,
axis.type === "category" ? 0.5 : null
);
if (!dataIndices.length) {
return;
}
seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);
}
if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {
return;
}
var diff = value - seriesNestestValue;
var dist2 = Math.abs(diff);
if (dist2 <= minDist) {
if (dist2 < minDist || diff >= 0 && minDiff < 0) {
minDist = dist2;
minDiff = diff;
snapToValue = seriesNestestValue;
payloadBatch.length = 0;
}
each$f(dataIndices, function(dataIndex) {
payloadBatch.push({
seriesIndex: series.seriesIndex,
dataIndexInside: dataIndex,
dataIndex: series.getData().getRawIndex(dataIndex)
});
});
}
});
return {
payloadBatch,
snapToValue
};
}
function showPointer(showValueMap, axisInfo, value, payloadBatch) {
showValueMap[axisInfo.key] = {
value,
payloadBatch
};
}
function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {
var payloadBatch = payloadInfo.payloadBatch;
var axis = axisInfo.axis;
var axisModel = axis.model;
var axisPointerModel = axisInfo.axisPointerModel;
if (!axisInfo.triggerTooltip || !payloadBatch.length) {
return;
}
var coordSysModel = axisInfo.coordSys.model;
var coordSysKey = makeKey(coordSysModel);
var coordSysItem = dataByCoordSys.map[coordSysKey];
if (!coordSysItem) {
coordSysItem = dataByCoordSys.map[coordSysKey] = {
coordSysId: coordSysModel.id,
coordSysIndex: coordSysModel.componentIndex,
coordSysType: coordSysModel.type,
coordSysMainType: coordSysModel.mainType,
dataByAxis: []
};
dataByCoordSys.list.push(coordSysItem);
}
coordSysItem.dataByAxis.push({
axisDim: axis.dim,
axisIndex: axisModel.componentIndex,
axisType: axisModel.type,
axisId: axisModel.id,
value,
// Caustion: viewHelper.getValueLabel is actually on "view stage", which
// depends that all models have been updated. So it should not be performed
// here. Considering axisPointerModel used here is volatile, which is hard
// to be retrieve in TooltipView, we prepare parameters here.
valueLabelOpt: {
precision: axisPointerModel.get(["label", "precision"]),
formatter: axisPointerModel.get(["label", "formatter"])
},
seriesDataIndices: payloadBatch.slice()
});
}
function updateModelActually(showValueMap, axesInfo, outputPayload) {
var outputAxesInfo = outputPayload.axesInfo = [];
each$f(axesInfo, function(axisInfo, key) {
var option = axisInfo.axisPointerModel.option;
var valItem = showValueMap[key];
if (valItem) {
!axisInfo.useHandle && (option.status = "show");
option.value = valItem.value;
option.seriesDataIndices = (valItem.payloadBatch || []).slice();
} else {
!axisInfo.useHandle && (option.status = "hide");
}
option.status === "show" && outputAxesInfo.push({
axisDim: axisInfo.axis.dim,
axisIndex: axisInfo.axis.model.componentIndex,
value: option.value
});
});
}
function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction2) {
if (illegalPoint(point) || !dataByCoordSys.list.length) {
dispatchAction2({
type: "hideTip"
});
return;
}
var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
dispatchAction2({
type: "showTip",
escapeConnect: true,
x: point[0],
y: point[1],
tooltipOption: payload.tooltipOption,
position: payload.position,
dataIndexInside: sampleItem.dataIndexInside,
dataIndex: sampleItem.dataIndex,
seriesIndex: sampleItem.seriesIndex,
dataByCoordSys: dataByCoordSys.list
});
}
function dispatchHighDownActually(axesInfo, dispatchAction2, api) {
var zr = api.getZr();
var highDownKey = "axisPointerLastHighlights";
var lastHighlights = inner$9(zr)[highDownKey] || {};
var newHighlights = inner$9(zr)[highDownKey] = {};
each$f(axesInfo, function(axisInfo, key) {
var option = axisInfo.axisPointerModel.option;
option.status === "show" && axisInfo.triggerEmphasis && each$f(option.seriesDataIndices, function(batchItem) {
var key2 = batchItem.seriesIndex + " | " + batchItem.dataIndex;
newHighlights[key2] = batchItem;
});
});
var toHighlight = [];
var toDownplay = [];
each$f(lastHighlights, function(batchItem, key) {
!newHighlights[key] && toDownplay.push(batchItem);
});
each$f(newHighlights, function(batchItem, key) {
!lastHighlights[key] && toHighlight.push(batchItem);
});
toDownplay.length && api.dispatchAction({
type: "downplay",
escapeConnect: true,
// Not blur others when highlight in axisPointer.
notBlur: true,
batch: toDownplay
});
toHighlight.length && api.dispatchAction({
type: "highlight",
escapeConnect: true,
// Not blur others when highlight in axisPointer.
notBlur: true,
batch: toHighlight
});
}
function findInputAxisInfo(inputAxesInfo, axisInfo) {
for (var i = 0; i < (inputAxesInfo || []).length; i++) {
var inputAxisInfo = inputAxesInfo[i];
if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) {
return inputAxisInfo;
}
}
}
function makeMapperParam(axisInfo) {
var axisModel = axisInfo.axis.model;
var item = {};
var dim = item.axisDim = axisInfo.axis.dim;
item.axisIndex = item[dim + "AxisIndex"] = axisModel.componentIndex;
item.axisName = item[dim + "AxisName"] = axisModel.name;
item.axisId = item[dim + "AxisId"] = axisModel.id;
return item;
}
function illegalPoint(point) {
return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);
}
function install$s(registers) {
AxisView.registerAxisPointerClass("CartesianAxisPointer", CartesianAxisPointer);
registers.registerComponentModel(AxisPointerModel);
registers.registerComponentView(AxisPointerView);
registers.registerPreprocessor(function(option) {
if (option) {
(!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {});
var link = option.axisPointer.link;
if (link && !isArray$1(link)) {
option.axisPointer.link = [link];
}
}
});
registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, function(ecModel, api) {
ecModel.getComponent("axisPointer").coordSysAxesInfo = collect(ecModel, api);
});
registers.registerAction({
type: "updateAxisPointer",
event: "updateAxisPointer",
update: ":updateAxisPointer"
}, axisTrigger);
}
function install$r(registers) {
use(install$P);
use(install$s);
}
var PolarAxisPointer = (
/** @class */
(function(_super) {
__extends(PolarAxisPointer2, _super);
function PolarAxisPointer2() {
return _super !== null && _super.apply(this, arguments) || this;
}
PolarAxisPointer2.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) {
var axis = axisModel.axis;
if (axis.dim === "angle") {
this.animationThreshold = Math.PI / 18;
}
var polar = axis.polar;
var otherAxis = polar.getOtherAxis(axis);
var otherExtent = otherAxis.getExtent();
var coordValue = axis.dataToCoord(value);
var axisPointerType = axisPointerModel.get("type");
if (axisPointerType && axisPointerType !== "none") {
var elStyle = buildElStyle(axisPointerModel);
var pointerOption = pointerShapeBuilder$1[axisPointerType](axis, polar, coordValue, otherExtent);
pointerOption.style = elStyle;
elOption.graphicKey = pointerOption.type;
elOption.pointer = pointerOption;
}
var labelMargin = axisPointerModel.get(["label", "margin"]);
var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);
buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);
};
return PolarAxisPointer2;
})(BaseAxisPointer)
);
function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {
var axis = axisModel.axis;
var coord = axis.dataToCoord(value);
var axisAngle = polar.getAngleAxis().getExtent()[0];
axisAngle = axisAngle / 180 * Math.PI;
var radiusExtent = polar.getRadiusAxis().getExtent();
var position2;
var align;
var verticalAlign;
if (axis.dim === "radius") {
var transform2 = create$1();
rotate(transform2, transform2, axisAngle);
translate(transform2, transform2, [polar.cx, polar.cy]);
position2 = applyTransform([coord, -labelMargin], transform2);
var labelRotation = axisModel.getModel("axisLabel").get("rotate") || 0;
var labelLayout2 = AxisBuilder.innerTextLayout(axisAngle, labelRotation * Math.PI / 180, -1);
align = labelLayout2.textAlign;
verticalAlign = labelLayout2.textVerticalAlign;
} else {
var r = radiusExtent[1];
position2 = polar.coordToPoint([r + labelMargin, coord]);
var cx = polar.cx;
var cy = polar.cy;
align = Math.abs(position2[0] - cx) / r < 0.3 ? "center" : position2[0] > cx ? "left" : "right";
verticalAlign = Math.abs(position2[1] - cy) / r < 0.3 ? "middle" : position2[1] > cy ? "top" : "bottom";
}
return {
position: position2,
align,
verticalAlign
};
}
var pointerShapeBuilder$1 = {
line: function(axis, polar, coordValue, otherExtent) {
return axis.dim === "angle" ? {
type: "Line",
shape: makeLineShape(polar.coordToPoint([otherExtent[0], coordValue]), polar.coordToPoint([otherExtent[1], coordValue]))
} : {
type: "Circle",
shape: {
cx: polar.cx,
cy: polar.cy,
r: coordValue
}
};
},
shadow: function(axis, polar, coordValue, otherExtent) {
var bandWidth = Math.max(1, axis.getBandWidth());
var radian = Math.PI / 180;
return axis.dim === "angle" ? {
type: "Sector",
shape: makeSectorShape(
polar.cx,
polar.cy,
otherExtent[0],
otherExtent[1],
// In ECharts y is negative if angle is positive
(-coordValue - bandWidth / 2) * radian,
(-coordValue + bandWidth / 2) * radian
)
} : {
type: "Sector",
shape: makeSectorShape(polar.cx, polar.cy, coordValue - bandWidth / 2, coordValue + bandWidth / 2, 0, Math.PI * 2)
};
}
};
var PolarModel = (
/** @class */
(function(_super) {
__extends(PolarModel2, _super);
function PolarModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PolarModel2.type;
return _this;
}
PolarModel2.prototype.findAxisModel = function(axisType) {
var foundAxisModel;
var ecModel = this.ecModel;
ecModel.eachComponent(axisType, function(axisModel) {
if (axisModel.getCoordSysModel() === this) {
foundAxisModel = axisModel;
}
}, this);
return foundAxisModel;
};
PolarModel2.type = "polar";
PolarModel2.dependencies = ["radiusAxis", "angleAxis"];
PolarModel2.defaultOption = {
// zlevel: 0,
z: 0,
center: ["50%", "50%"],
radius: "80%"
};
return PolarModel2;
})(ComponentModel)
);
var PolarAxisModel = (
/** @class */
(function(_super) {
__extends(PolarAxisModel2, _super);
function PolarAxisModel2() {
return _super !== null && _super.apply(this, arguments) || this;
}
PolarAxisModel2.prototype.getCoordSysModel = function() {
return this.getReferringComponents("polar", SINGLE_REFERRING).models[0];
};
PolarAxisModel2.type = "polarAxis";
return PolarAxisModel2;
})(ComponentModel)
);
mixin(PolarAxisModel, AxisModelCommonMixin);
var AngleAxisModel = (
/** @class */
(function(_super) {
__extends(AngleAxisModel2, _super);
function AngleAxisModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = AngleAxisModel2.type;
return _this;
}
AngleAxisModel2.type = "angleAxis";
return AngleAxisModel2;
})(PolarAxisModel)
);
var RadiusAxisModel = (
/** @class */
(function(_super) {
__extends(RadiusAxisModel2, _super);
function RadiusAxisModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadiusAxisModel2.type;
return _this;
}
RadiusAxisModel2.type = "radiusAxis";
return RadiusAxisModel2;
})(PolarAxisModel)
);
var RadiusAxis = (
/** @class */
(function(_super) {
__extends(RadiusAxis2, _super);
function RadiusAxis2(scale2, radiusExtent) {
return _super.call(this, "radius", scale2, radiusExtent) || this;
}
RadiusAxis2.prototype.pointToData = function(point, clamp2) {
return this.polar.pointToData(point, clamp2)[this.dim === "radius" ? 0 : 1];
};
return RadiusAxis2;
})(Axis)
);
RadiusAxis.prototype.dataToRadius = Axis.prototype.dataToCoord;
RadiusAxis.prototype.radiusToData = Axis.prototype.coordToData;
var inner$8 = makeInner();
var AngleAxis = (
/** @class */
(function(_super) {
__extends(AngleAxis2, _super);
function AngleAxis2(scale2, angleExtent) {
return _super.call(this, "angle", scale2, angleExtent || [0, 360]) || this;
}
AngleAxis2.prototype.pointToData = function(point, clamp2) {
return this.polar.pointToData(point, clamp2)[this.dim === "radius" ? 0 : 1];
};
AngleAxis2.prototype.calculateCategoryInterval = function() {
var axis = this;
var labelModel = axis.getLabelModel();
var ordinalScale = axis.scale;
var ordinalExtent = ordinalScale.getExtent();
var tickCount = ordinalScale.count();
if (ordinalExtent[1] - ordinalExtent[0] < 1) {
return 0;
}
var tickValue = ordinalExtent[0];
var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
var unitH = Math.abs(unitSpan);
var rect = getBoundingRect(tickValue == null ? "" : tickValue + "", labelModel.getFont(), "center", "top");
var maxH = Math.max(rect.height, 7);
var dh = maxH / unitH;
isNaN(dh) && (dh = Infinity);
var interval = Math.max(0, Math.floor(dh));
var cache = inner$8(axis.model);
var lastAutoInterval = cache.lastAutoInterval;
var lastTickCount = cache.lastTickCount;
if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 && lastAutoInterval > interval) {
interval = lastAutoInterval;
} else {
cache.lastTickCount = tickCount;
cache.lastAutoInterval = interval;
}
return interval;
};
return AngleAxis2;
})(Axis)
);
AngleAxis.prototype.dataToAngle = Axis.prototype.dataToCoord;
AngleAxis.prototype.angleToData = Axis.prototype.coordToData;
var polarDimensions = ["radius", "angle"];
var Polar = (
/** @class */
(function() {
function Polar2(name) {
this.dimensions = polarDimensions;
this.type = "polar";
this.cx = 0;
this.cy = 0;
this._radiusAxis = new RadiusAxis();
this._angleAxis = new AngleAxis();
this.axisPointerEnabled = true;
this.name = name || "";
this._radiusAxis.polar = this._angleAxis.polar = this;
}
Polar2.prototype.containPoint = function(point) {
var coord = this.pointToCoord(point);
return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]);
};
Polar2.prototype.containData = function(data) {
return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]);
};
Polar2.prototype.getAxis = function(dim) {
var key = "_" + dim + "Axis";
return this[key];
};
Polar2.prototype.getAxes = function() {
return [this._radiusAxis, this._angleAxis];
};
Polar2.prototype.getAxesByScale = function(scaleType) {
var axes = [];
var angleAxis = this._angleAxis;
var radiusAxis = this._radiusAxis;
angleAxis.scale.type === scaleType && axes.push(angleAxis);
radiusAxis.scale.type === scaleType && axes.push(radiusAxis);
return axes;
};
Polar2.prototype.getAngleAxis = function() {
return this._angleAxis;
};
Polar2.prototype.getRadiusAxis = function() {
return this._radiusAxis;
};
Polar2.prototype.getOtherAxis = function(axis) {
var angleAxis = this._angleAxis;
return axis === angleAxis ? this._radiusAxis : angleAxis;
};
Polar2.prototype.getBaseAxis = function() {
return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAngleAxis();
};
Polar2.prototype.getTooltipAxes = function(dim) {
var baseAxis = dim != null && dim !== "auto" ? this.getAxis(dim) : this.getBaseAxis();
return {
baseAxes: [baseAxis],
otherAxes: [this.getOtherAxis(baseAxis)]
};
};
Polar2.prototype.dataToPoint = function(data, clamp2) {
return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp2), this._angleAxis.dataToAngle(data[1], clamp2)]);
};
Polar2.prototype.pointToData = function(point, clamp2) {
var coord = this.pointToCoord(point);
return [this._radiusAxis.radiusToData(coord[0], clamp2), this._angleAxis.angleToData(coord[1], clamp2)];
};
Polar2.prototype.pointToCoord = function(point) {
var dx = point[0] - this.cx;
var dy = point[1] - this.cy;
var angleAxis = this.getAngleAxis();
var extent = angleAxis.getExtent();
var minAngle = Math.min(extent[0], extent[1]);
var maxAngle = Math.max(extent[0], extent[1]);
angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360;
var radius = Math.sqrt(dx * dx + dy * dy);
dx /= radius;
dy /= radius;
var radian = Math.atan2(-dy, dx) / Math.PI * 180;
var dir3 = radian < minAngle ? 1 : -1;
while (radian < minAngle || radian > maxAngle) {
radian += dir3 * 360;
}
return [radius, radian];
};
Polar2.prototype.coordToPoint = function(coord) {
var radius = coord[0];
var radian = coord[1] / 180 * Math.PI;
var x = Math.cos(radian) * radius + this.cx;
var y = -Math.sin(radian) * radius + this.cy;
return [x, y];
};
Polar2.prototype.getArea = function() {
var angleAxis = this.getAngleAxis();
var radiusAxis = this.getRadiusAxis();
var radiusExtent = radiusAxis.getExtent().slice();
radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();
var angleExtent = angleAxis.getExtent();
var RADIAN2 = Math.PI / 180;
var EPSILON = 1e-4;
return {
cx: this.cx,
cy: this.cy,
r0: radiusExtent[0],
r: radiusExtent[1],
startAngle: -angleExtent[0] * RADIAN2,
endAngle: -angleExtent[1] * RADIAN2,
clockwise: angleAxis.inverse,
contain: function(x, y) {
var dx = x - this.cx;
var dy = y - this.cy;
var d2 = dx * dx + dy * dy;
var r = this.r;
var r0 = this.r0;
return r !== r0 && d2 - EPSILON <= r * r && d2 + EPSILON >= r0 * r0;
}
};
};
Polar2.prototype.convertToPixel = function(ecModel, finder, value) {
var coordSys = getCoordSys$2(finder);
return coordSys === this ? this.dataToPoint(value) : null;
};
Polar2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
var coordSys = getCoordSys$2(finder);
return coordSys === this ? this.pointToData(pixel) : null;
};
return Polar2;
})()
);
function getCoordSys$2(finder) {
var seriesModel = finder.seriesModel;
var polarModel = finder.polarModel;
return polarModel && polarModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem;
}
function resizePolar(polar, polarModel, api) {
var center2 = polarModel.get("center");
var width = api.getWidth();
var height = api.getHeight();
polar.cx = parsePercent(center2[0], width);
polar.cy = parsePercent(center2[1], height);
var radiusAxis = polar.getRadiusAxis();
var size = Math.min(width, height) / 2;
var radius = polarModel.get("radius");
if (radius == null) {
radius = [0, "100%"];
} else if (!isArray$1(radius)) {
radius = [0, radius];
}
var parsedRadius = [parsePercent(radius[0], size), parsePercent(radius[1], size)];
radiusAxis.inverse ? radiusAxis.setExtent(parsedRadius[1], parsedRadius[0]) : radiusAxis.setExtent(parsedRadius[0], parsedRadius[1]);
}
function updatePolarScale(ecModel, api) {
var polar = this;
var angleAxis = polar.getAngleAxis();
var radiusAxis = polar.getRadiusAxis();
angleAxis.scale.setExtent(Infinity, -Infinity);
radiusAxis.scale.setExtent(Infinity, -Infinity);
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.coordinateSystem === polar) {
var data_1 = seriesModel.getData();
each$f(getDataDimensionsOnAxis(data_1, "radius"), function(dim) {
radiusAxis.scale.unionExtentFromData(data_1, dim);
});
each$f(getDataDimensionsOnAxis(data_1, "angle"), function(dim) {
angleAxis.scale.unionExtentFromData(data_1, dim);
});
}
});
niceScaleExtent(angleAxis.scale, angleAxis.model);
niceScaleExtent(radiusAxis.scale, radiusAxis.model);
if (angleAxis.type === "category" && !angleAxis.onBand) {
var extent = angleAxis.getExtent();
var diff = 360 / angleAxis.scale.count();
angleAxis.inverse ? extent[1] += diff : extent[1] -= diff;
angleAxis.setExtent(extent[0], extent[1]);
}
}
function isAngleAxisModel(axisModel) {
return axisModel.mainType === "angleAxis";
}
function setAxis(axis, axisModel) {
var _a2;
axis.type = axisModel.get("type");
axis.scale = createScaleByModel$1(axisModel);
axis.onBand = axisModel.get("boundaryGap") && axis.type === "category";
axis.inverse = axisModel.get("inverse");
if (isAngleAxisModel(axisModel)) {
axis.inverse = axis.inverse !== axisModel.get("clockwise");
var startAngle = axisModel.get("startAngle");
var endAngle = (_a2 = axisModel.get("endAngle")) !== null && _a2 !== void 0 ? _a2 : startAngle + (axis.inverse ? -360 : 360);
axis.setExtent(startAngle, endAngle);
}
axisModel.axis = axis;
axis.model = axisModel;
}
var polarCreator = {
dimensions: polarDimensions,
create: function(ecModel, api) {
var polarList = [];
ecModel.eachComponent("polar", function(polarModel, idx) {
var polar = new Polar(idx + "");
polar.update = updatePolarScale;
var radiusAxis = polar.getRadiusAxis();
var angleAxis = polar.getAngleAxis();
var radiusAxisModel = polarModel.findAxisModel("radiusAxis");
var angleAxisModel = polarModel.findAxisModel("angleAxis");
setAxis(radiusAxis, radiusAxisModel);
setAxis(angleAxis, angleAxisModel);
resizePolar(polar, polarModel, api);
polarList.push(polar);
polarModel.coordinateSystem = polar;
polar.model = polarModel;
});
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.get("coordinateSystem") === "polar") {
var polarModel = seriesModel.getReferringComponents("polar", SINGLE_REFERRING).models[0];
seriesModel.coordinateSystem = polarModel.coordinateSystem;
}
});
return polarList;
}
};
var elementList = ["axisLine", "axisLabel", "axisTick", "minorTick", "splitLine", "minorSplitLine", "splitArea"];
function getAxisLineShape(polar, rExtent, angle) {
rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());
var start = polar.coordToPoint([rExtent[0], angle]);
var end = polar.coordToPoint([rExtent[1], angle]);
return {
x1: start[0],
y1: start[1],
x2: end[0],
y2: end[1]
};
}
function getRadiusIdx(polar) {
var radiusAxis = polar.getRadiusAxis();
return radiusAxis.inverse ? 0 : 1;
}
function fixAngleOverlap(list) {
var firstItem = list[0];
var lastItem = list[list.length - 1];
if (firstItem && lastItem && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4) {
list.pop();
}
}
var AngleAxisView = (
/** @class */
(function(_super) {
__extends(AngleAxisView2, _super);
function AngleAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = AngleAxisView2.type;
_this.axisPointerClass = "PolarAxisPointer";
return _this;
}
AngleAxisView2.prototype.render = function(angleAxisModel, ecModel) {
this.group.removeAll();
if (!angleAxisModel.get("show")) {
return;
}
var angleAxis = angleAxisModel.axis;
var polar = angleAxis.polar;
var radiusExtent = polar.getRadiusAxis().getExtent();
var ticksAngles = angleAxis.getTicksCoords();
var minorTickAngles = angleAxis.getMinorTicksCoords();
var labels = map$1(angleAxis.getViewLabels(), function(labelItem) {
labelItem = clone$1(labelItem);
var scale2 = angleAxis.scale;
var tickValue = scale2.type === "ordinal" ? scale2.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue;
labelItem.coord = angleAxis.dataToCoord(tickValue);
return labelItem;
});
fixAngleOverlap(labels);
fixAngleOverlap(ticksAngles);
each$f(elementList, function(name) {
if (angleAxisModel.get([name, "show"]) && (!angleAxis.scale.isBlank() || name === "axisLine")) {
angelAxisElementsBuilders[name](this.group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels);
}
}, this);
};
AngleAxisView2.type = "angleAxis";
return AngleAxisView2;
})(AxisView)
);
var angelAxisElementsBuilders = {
axisLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
var lineStyleModel = angleAxisModel.getModel(["axisLine", "lineStyle"]);
var angleAxis = polar.getAngleAxis();
var RADIAN2 = Math.PI / 180;
var angleExtent = angleAxis.getExtent();
var rId = getRadiusIdx(polar);
var r0Id = rId ? 0 : 1;
var shape;
var shapeType = Math.abs(angleExtent[1] - angleExtent[0]) === 360 ? "Circle" : "Arc";
if (radiusExtent[r0Id] === 0) {
shape = new graphic[shapeType]({
shape: {
cx: polar.cx,
cy: polar.cy,
r: radiusExtent[rId],
startAngle: -angleExtent[0] * RADIAN2,
endAngle: -angleExtent[1] * RADIAN2,
clockwise: angleAxis.inverse
},
style: lineStyleModel.getLineStyle(),
z2: 1,
silent: true
});
} else {
shape = new Ring({
shape: {
cx: polar.cx,
cy: polar.cy,
r: radiusExtent[rId],
r0: radiusExtent[r0Id]
},
style: lineStyleModel.getLineStyle(),
z2: 1,
silent: true
});
}
shape.style.fill = null;
group.add(shape);
},
axisTick: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
var tickModel = angleAxisModel.getModel("axisTick");
var tickLen = (tickModel.get("inside") ? -1 : 1) * tickModel.get("length");
var radius = radiusExtent[getRadiusIdx(polar)];
var lines = map$1(ticksAngles, function(tickAngleItem) {
return new Line$1({
shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord)
});
});
group.add(mergePath(lines, {
style: defaults(tickModel.getModel("lineStyle").getLineStyle(), {
stroke: angleAxisModel.get(["axisLine", "lineStyle", "color"])
})
}));
},
minorTick: function(group, angleAxisModel, polar, tickAngles, minorTickAngles, radiusExtent) {
if (!minorTickAngles.length) {
return;
}
var tickModel = angleAxisModel.getModel("axisTick");
var minorTickModel = angleAxisModel.getModel("minorTick");
var tickLen = (tickModel.get("inside") ? -1 : 1) * minorTickModel.get("length");
var radius = radiusExtent[getRadiusIdx(polar)];
var lines = [];
for (var i = 0; i < minorTickAngles.length; i++) {
for (var k = 0; k < minorTickAngles[i].length; k++) {
lines.push(new Line$1({
shape: getAxisLineShape(polar, [radius, radius + tickLen], minorTickAngles[i][k].coord)
}));
}
}
group.add(mergePath(lines, {
style: defaults(minorTickModel.getModel("lineStyle").getLineStyle(), defaults(tickModel.getLineStyle(), {
stroke: angleAxisModel.get(["axisLine", "lineStyle", "color"])
}))
}));
},
axisLabel: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels) {
var rawCategoryData = angleAxisModel.getCategories(true);
var commonLabelModel = angleAxisModel.getModel("axisLabel");
var labelMargin = commonLabelModel.get("margin");
var triggerEvent = angleAxisModel.get("triggerEvent");
each$f(labels, function(labelItem, idx) {
var labelModel = commonLabelModel;
var tickValue = labelItem.tickValue;
var r = radiusExtent[getRadiusIdx(polar)];
var p = polar.coordToPoint([r + labelMargin, labelItem.coord]);
var cx = polar.cx;
var cy = polar.cy;
var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 ? "center" : p[0] > cx ? "left" : "right";
var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 ? "middle" : p[1] > cy ? "top" : "bottom";
if (rawCategoryData && rawCategoryData[tickValue]) {
var rawCategoryItem = rawCategoryData[tickValue];
if (isObject$3(rawCategoryItem) && rawCategoryItem.textStyle) {
labelModel = new Model(rawCategoryItem.textStyle, commonLabelModel, commonLabelModel.ecModel);
}
}
var textEl = new ZRText({
silent: AxisBuilder.isLabelSilent(angleAxisModel),
style: createTextStyle(labelModel, {
x: p[0],
y: p[1],
fill: labelModel.getTextColor() || angleAxisModel.get(["axisLine", "lineStyle", "color"]),
text: labelItem.formattedLabel,
align: labelTextAlign,
verticalAlign: labelTextVerticalAlign
})
});
group.add(textEl);
if (triggerEvent) {
var eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel);
eventData.targetType = "axisLabel";
eventData.value = labelItem.rawLabel;
getECData(textEl).eventData = eventData;
}
}, this);
},
splitLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
var splitLineModel = angleAxisModel.getModel("splitLine");
var lineStyleModel = splitLineModel.getModel("lineStyle");
var lineColors = lineStyleModel.get("color");
var lineCount = 0;
lineColors = lineColors instanceof Array ? lineColors : [lineColors];
var splitLines = [];
for (var i = 0; i < ticksAngles.length; i++) {
var colorIndex = lineCount++ % lineColors.length;
splitLines[colorIndex] = splitLines[colorIndex] || [];
splitLines[colorIndex].push(new Line$1({
shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord)
}));
}
for (var i = 0; i < splitLines.length; i++) {
group.add(mergePath(splitLines[i], {
style: defaults({
stroke: lineColors[i % lineColors.length]
}, lineStyleModel.getLineStyle()),
silent: true,
z: angleAxisModel.get("z")
}));
}
},
minorSplitLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
if (!minorTickAngles.length) {
return;
}
var minorSplitLineModel = angleAxisModel.getModel("minorSplitLine");
var lineStyleModel = minorSplitLineModel.getModel("lineStyle");
var lines = [];
for (var i = 0; i < minorTickAngles.length; i++) {
for (var k = 0; k < minorTickAngles[i].length; k++) {
lines.push(new Line$1({
shape: getAxisLineShape(polar, radiusExtent, minorTickAngles[i][k].coord)
}));
}
}
group.add(mergePath(lines, {
style: lineStyleModel.getLineStyle(),
silent: true,
z: angleAxisModel.get("z")
}));
},
splitArea: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
if (!ticksAngles.length) {
return;
}
var splitAreaModel = angleAxisModel.getModel("splitArea");
var areaStyleModel = splitAreaModel.getModel("areaStyle");
var areaColors = areaStyleModel.get("color");
var lineCount = 0;
areaColors = areaColors instanceof Array ? areaColors : [areaColors];
var splitAreas = [];
var RADIAN2 = Math.PI / 180;
var prevAngle = -ticksAngles[0].coord * RADIAN2;
var r0 = Math.min(radiusExtent[0], radiusExtent[1]);
var r1 = Math.max(radiusExtent[0], radiusExtent[1]);
var clockwise = angleAxisModel.get("clockwise");
for (var i = 1, len2 = ticksAngles.length; i <= len2; i++) {
var coord = i === len2 ? ticksAngles[0].coord : ticksAngles[i].coord;
var colorIndex = lineCount++ % areaColors.length;
splitAreas[colorIndex] = splitAreas[colorIndex] || [];
splitAreas[colorIndex].push(new Sector({
shape: {
cx: polar.cx,
cy: polar.cy,
r0,
r: r1,
startAngle: prevAngle,
endAngle: -coord * RADIAN2,
clockwise
},
silent: true
}));
prevAngle = -coord * RADIAN2;
}
for (var i = 0; i < splitAreas.length; i++) {
group.add(mergePath(splitAreas[i], {
style: defaults({
fill: areaColors[i % areaColors.length]
}, areaStyleModel.getAreaStyle()),
silent: true
}));
}
}
};
var axisBuilderAttrs$1 = ["axisLine", "axisTickLabel", "axisName"];
var selfBuilderAttrs$1 = ["splitLine", "splitArea", "minorSplitLine"];
var RadiusAxisView = (
/** @class */
(function(_super) {
__extends(RadiusAxisView2, _super);
function RadiusAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = RadiusAxisView2.type;
_this.axisPointerClass = "PolarAxisPointer";
return _this;
}
RadiusAxisView2.prototype.render = function(radiusAxisModel, ecModel) {
this.group.removeAll();
if (!radiusAxisModel.get("show")) {
return;
}
var oldAxisGroup = this._axisGroup;
var newAxisGroup = this._axisGroup = new Group$3();
this.group.add(newAxisGroup);
var radiusAxis = radiusAxisModel.axis;
var polar = radiusAxis.polar;
var angleAxis = polar.getAngleAxis();
var ticksCoords = radiusAxis.getTicksCoords();
var minorTicksCoords = radiusAxis.getMinorTicksCoords();
var axisAngle = angleAxis.getExtent()[0];
var radiusExtent = radiusAxis.getExtent();
var layout2 = layoutAxis(polar, radiusAxisModel, axisAngle);
var axisBuilder = new AxisBuilder(radiusAxisModel, layout2);
each$f(axisBuilderAttrs$1, axisBuilder.add, axisBuilder);
newAxisGroup.add(axisBuilder.getGroup());
groupTransition(oldAxisGroup, newAxisGroup, radiusAxisModel);
each$f(selfBuilderAttrs$1, function(name) {
if (radiusAxisModel.get([name, "show"]) && !radiusAxis.scale.isBlank()) {
axisElementBuilders$1[name](this.group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords);
}
}, this);
};
RadiusAxisView2.type = "radiusAxis";
return RadiusAxisView2;
})(AxisView)
);
var axisElementBuilders$1 = {
splitLine: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {
var splitLineModel = radiusAxisModel.getModel("splitLine");
var lineStyleModel = splitLineModel.getModel("lineStyle");
var lineColors = lineStyleModel.get("color");
var lineCount = 0;
var angleAxis = polar.getAngleAxis();
var RADIAN2 = Math.PI / 180;
var angleExtent = angleAxis.getExtent();
var shapeType = Math.abs(angleExtent[1] - angleExtent[0]) === 360 ? "Circle" : "Arc";
lineColors = lineColors instanceof Array ? lineColors : [lineColors];
var splitLines = [];
for (var i = 0; i < ticksCoords.length; i++) {
var colorIndex = lineCount++ % lineColors.length;
splitLines[colorIndex] = splitLines[colorIndex] || [];
splitLines[colorIndex].push(new graphic[shapeType]({
shape: {
cx: polar.cx,
cy: polar.cy,
// ensure circle radius >= 0
r: Math.max(ticksCoords[i].coord, 0),
startAngle: -angleExtent[0] * RADIAN2,
endAngle: -angleExtent[1] * RADIAN2,
clockwise: angleAxis.inverse
}
}));
}
for (var i = 0; i < splitLines.length; i++) {
group.add(mergePath(splitLines[i], {
style: defaults({
stroke: lineColors[i % lineColors.length],
fill: null
}, lineStyleModel.getLineStyle()),
silent: true
}));
}
},
minorSplitLine: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords) {
if (!minorTicksCoords.length) {
return;
}
var minorSplitLineModel = radiusAxisModel.getModel("minorSplitLine");
var lineStyleModel = minorSplitLineModel.getModel("lineStyle");
var lines = [];
for (var i = 0; i < minorTicksCoords.length; i++) {
for (var k = 0; k < minorTicksCoords[i].length; k++) {
lines.push(new Circle({
shape: {
cx: polar.cx,
cy: polar.cy,
r: minorTicksCoords[i][k].coord
}
}));
}
}
group.add(mergePath(lines, {
style: defaults({
fill: null
}, lineStyleModel.getLineStyle()),
silent: true
}));
},
splitArea: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {
if (!ticksCoords.length) {
return;
}
var splitAreaModel = radiusAxisModel.getModel("splitArea");
var areaStyleModel = splitAreaModel.getModel("areaStyle");
var areaColors = areaStyleModel.get("color");
var lineCount = 0;
areaColors = areaColors instanceof Array ? areaColors : [areaColors];
var splitAreas = [];
var prevRadius = ticksCoords[0].coord;
for (var i = 1; i < ticksCoords.length; i++) {
var colorIndex = lineCount++ % areaColors.length;
splitAreas[colorIndex] = splitAreas[colorIndex] || [];
splitAreas[colorIndex].push(new Sector({
shape: {
cx: polar.cx,
cy: polar.cy,
r0: prevRadius,
r: ticksCoords[i].coord,
startAngle: 0,
endAngle: Math.PI * 2
},
silent: true
}));
prevRadius = ticksCoords[i].coord;
}
for (var i = 0; i < splitAreas.length; i++) {
group.add(mergePath(splitAreas[i], {
style: defaults({
fill: areaColors[i % areaColors.length]
}, areaStyleModel.getAreaStyle()),
silent: true
}));
}
}
};
function layoutAxis(polar, radiusAxisModel, axisAngle) {
return {
position: [polar.cx, polar.cy],
rotation: axisAngle / 180 * Math.PI,
labelDirection: -1,
tickDirection: -1,
nameDirection: 1,
labelRotate: radiusAxisModel.getModel("axisLabel").get("rotate"),
// Over splitLine and splitArea
z2: 1
};
}
function getSeriesStackId(seriesModel) {
return seriesModel.get("stack") || "__ec_stack_" + seriesModel.seriesIndex;
}
function getAxisKey(polar, axis) {
return axis.dim + polar.model.componentIndex;
}
function barLayoutPolar(seriesType2, ecModel, api) {
var lastStackCoords = {};
var barWidthAndOffset = calRadialBar(filter(ecModel.getSeriesByType(seriesType2), function(seriesModel) {
return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === "polar";
}));
ecModel.eachSeriesByType(seriesType2, function(seriesModel) {
if (seriesModel.coordinateSystem.type !== "polar") {
return;
}
var data = seriesModel.getData();
var polar = seriesModel.coordinateSystem;
var baseAxis = polar.getBaseAxis();
var axisKey = getAxisKey(polar, baseAxis);
var stackId = getSeriesStackId(seriesModel);
var columnLayoutInfo = barWidthAndOffset[axisKey][stackId];
var columnOffset = columnLayoutInfo.offset;
var columnWidth = columnLayoutInfo.width;
var valueAxis2 = polar.getOtherAxis(baseAxis);
var cx = seriesModel.coordinateSystem.cx;
var cy = seriesModel.coordinateSystem.cy;
var barMinHeight = seriesModel.get("barMinHeight") || 0;
var barMinAngle = seriesModel.get("barMinAngle") || 0;
lastStackCoords[stackId] = lastStackCoords[stackId] || [];
var valueDim = data.mapDimension(valueAxis2.dim);
var baseDim = data.mapDimension(baseAxis.dim);
var stacked = isDimensionStacked(
data,
valueDim
/* , baseDim */
);
var clampLayout = baseAxis.dim !== "radius" || !seriesModel.get("roundCap", true);
var valueAxisModel = valueAxis2.model;
var startValue = valueAxisModel.get("startValue");
var valueAxisStart = valueAxis2.dataToCoord(startValue || 0);
for (var idx = 0, len2 = data.count(); idx < len2; idx++) {
var value = data.get(valueDim, idx);
var baseValue = data.get(baseDim, idx);
var sign = value >= 0 ? "p" : "n";
var baseCoord = valueAxisStart;
if (stacked) {
if (!lastStackCoords[stackId][baseValue]) {
lastStackCoords[stackId][baseValue] = {
p: valueAxisStart,
n: valueAxisStart
// Negative stack
};
}
baseCoord = lastStackCoords[stackId][baseValue][sign];
}
var r0 = void 0;
var r = void 0;
var startAngle = void 0;
var endAngle = void 0;
if (valueAxis2.dim === "radius") {
var radiusSpan = valueAxis2.dataToCoord(value) - valueAxisStart;
var angle = baseAxis.dataToCoord(baseValue);
if (Math.abs(radiusSpan) < barMinHeight) {
radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight;
}
r0 = baseCoord;
r = baseCoord + radiusSpan;
startAngle = angle - columnOffset;
endAngle = startAngle - columnWidth;
stacked && (lastStackCoords[stackId][baseValue][sign] = r);
} else {
var angleSpan = valueAxis2.dataToCoord(value, clampLayout) - valueAxisStart;
var radius = baseAxis.dataToCoord(baseValue);
if (Math.abs(angleSpan) < barMinAngle) {
angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;
}
r0 = radius + columnOffset;
r = r0 + columnWidth;
startAngle = baseCoord;
endAngle = baseCoord + angleSpan;
stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle);
}
data.setItemLayout(idx, {
cx,
cy,
r0,
r,
// Consider that positive angle is anti-clockwise,
// while positive radian of sector is clockwise
startAngle: -startAngle * Math.PI / 180,
endAngle: -endAngle * Math.PI / 180,
/**
* Keep the same logic with bar in catesion: use end value to
* control direction. Notice that if clockwise is true (by
* default), the sector will always draw clockwisely, no matter
* whether endAngle is greater or less than startAngle.
*/
clockwise: startAngle >= endAngle
});
}
});
}
function calRadialBar(barSeries) {
var columnsMap = {};
each$f(barSeries, function(seriesModel, idx) {
var data = seriesModel.getData();
var polar = seriesModel.coordinateSystem;
var baseAxis = polar.getBaseAxis();
var axisKey = getAxisKey(polar, baseAxis);
var axisExtent = baseAxis.getExtent();
var bandWidth = baseAxis.type === "category" ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count();
var columnsOnAxis = columnsMap[axisKey] || {
bandWidth,
remainedWidth: bandWidth,
autoWidthCount: 0,
categoryGap: "20%",
gap: "30%",
stacks: {}
};
var stacks = columnsOnAxis.stacks;
columnsMap[axisKey] = columnsOnAxis;
var stackId = getSeriesStackId(seriesModel);
if (!stacks[stackId]) {
columnsOnAxis.autoWidthCount++;
}
stacks[stackId] = stacks[stackId] || {
width: 0,
maxWidth: 0
};
var barWidth = parsePercent(seriesModel.get("barWidth"), bandWidth);
var barMaxWidth = parsePercent(seriesModel.get("barMaxWidth"), bandWidth);
var barGap = seriesModel.get("barGap");
var barCategoryGap = seriesModel.get("barCategoryGap");
if (barWidth && !stacks[stackId].width) {
barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
stacks[stackId].width = barWidth;
columnsOnAxis.remainedWidth -= barWidth;
}
barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
barGap != null && (columnsOnAxis.gap = barGap);
barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);
});
var result = {};
each$f(columnsMap, function(columnsOnAxis, coordSysName) {
result[coordSysName] = {};
var stacks = columnsOnAxis.stacks;
var bandWidth = columnsOnAxis.bandWidth;
var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);
var barGapPercent = parsePercent(columnsOnAxis.gap, 1);
var remainedWidth = columnsOnAxis.remainedWidth;
var autoWidthCount = columnsOnAxis.autoWidthCount;
var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
autoWidth = Math.max(autoWidth, 0);
each$f(stacks, function(column, stack) {
var maxWidth = column.maxWidth;
if (maxWidth && maxWidth < autoWidth) {
maxWidth = Math.min(maxWidth, remainedWidth);
if (column.width) {
maxWidth = Math.min(maxWidth, column.width);
}
remainedWidth -= maxWidth;
column.width = maxWidth;
autoWidthCount--;
}
});
autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
autoWidth = Math.max(autoWidth, 0);
var widthSum = 0;
var lastColumn;
each$f(stacks, function(column, idx) {
if (!column.width) {
column.width = autoWidth;
}
lastColumn = column;
widthSum += column.width * (1 + barGapPercent);
});
if (lastColumn) {
widthSum -= lastColumn.width * barGapPercent;
}
var offset = -widthSum / 2;
each$f(stacks, function(column, stackId) {
result[coordSysName][stackId] = result[coordSysName][stackId] || {
offset,
width: column.width
};
offset += column.width * (1 + barGapPercent);
});
});
return result;
}
var angleAxisExtraOption = {
startAngle: 90,
clockwise: true,
splitNumber: 12,
axisLabel: {
rotate: 0
}
};
var radiusAxisExtraOption = {
splitNumber: 5
};
var PolarView = (
/** @class */
(function(_super) {
__extends(PolarView2, _super);
function PolarView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PolarView2.type;
return _this;
}
PolarView2.type = "polar";
return PolarView2;
})(ComponentView)
);
function install$q(registers) {
use(install$s);
AxisView.registerAxisPointerClass("PolarAxisPointer", PolarAxisPointer);
registers.registerCoordinateSystem("polar", polarCreator);
registers.registerComponentModel(PolarModel);
registers.registerComponentView(PolarView);
axisModelCreator(registers, "angle", AngleAxisModel, angleAxisExtraOption);
axisModelCreator(registers, "radius", RadiusAxisModel, radiusAxisExtraOption);
registers.registerComponentView(AngleAxisView);
registers.registerComponentView(RadiusAxisView);
registers.registerLayout(curry$1(barLayoutPolar, "bar"));
}
function layout$1(axisModel, opt) {
opt = opt || {};
var single = axisModel.coordinateSystem;
var axis = axisModel.axis;
var layout2 = {};
var axisPosition = axis.position;
var orient = axis.orient;
var rect = single.getRect();
var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
var positionMap = {
horizontal: {
top: rectBound[2],
bottom: rectBound[3]
},
vertical: {
left: rectBound[0],
right: rectBound[1]
}
};
layout2.position = [orient === "vertical" ? positionMap.vertical[axisPosition] : rectBound[0], orient === "horizontal" ? positionMap.horizontal[axisPosition] : rectBound[3]];
var r = {
horizontal: 0,
vertical: 1
};
layout2.rotation = Math.PI / 2 * r[orient];
var directionMap = {
top: -1,
bottom: 1,
right: 1,
left: -1
};
layout2.labelDirection = layout2.tickDirection = layout2.nameDirection = directionMap[axisPosition];
if (axisModel.get(["axisTick", "inside"])) {
layout2.tickDirection = -layout2.tickDirection;
}
if (retrieve(opt.labelInside, axisModel.get(["axisLabel", "inside"]))) {
layout2.labelDirection = -layout2.labelDirection;
}
var labelRotation = opt.rotate;
labelRotation == null && (labelRotation = axisModel.get(["axisLabel", "rotate"]));
layout2.labelRotation = axisPosition === "top" ? -labelRotation : labelRotation;
layout2.z2 = 1;
return layout2;
}
var axisBuilderAttrs = ["axisLine", "axisTickLabel", "axisName"];
var selfBuilderAttrs = ["splitArea", "splitLine"];
var SingleAxisView = (
/** @class */
(function(_super) {
__extends(SingleAxisView2, _super);
function SingleAxisView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SingleAxisView2.type;
_this.axisPointerClass = "SingleAxisPointer";
return _this;
}
SingleAxisView2.prototype.render = function(axisModel, ecModel, api, payload) {
var group = this.group;
group.removeAll();
var oldAxisGroup = this._axisGroup;
this._axisGroup = new Group$3();
var layout2 = layout$1(axisModel);
var axisBuilder = new AxisBuilder(axisModel, layout2);
each$f(axisBuilderAttrs, axisBuilder.add, axisBuilder);
group.add(this._axisGroup);
group.add(axisBuilder.getGroup());
each$f(selfBuilderAttrs, function(name) {
if (axisModel.get([name, "show"])) {
axisElementBuilders[name](this, this.group, this._axisGroup, axisModel);
}
}, this);
groupTransition(oldAxisGroup, this._axisGroup, axisModel);
_super.prototype.render.call(this, axisModel, ecModel, api, payload);
};
SingleAxisView2.prototype.remove = function() {
rectCoordAxisHandleRemove(this);
};
SingleAxisView2.type = "singleAxis";
return SingleAxisView2;
})(AxisView)
);
var axisElementBuilders = {
splitLine: function(axisView, group, axisGroup, axisModel) {
var axis = axisModel.axis;
if (axis.scale.isBlank()) {
return;
}
var splitLineModel = axisModel.getModel("splitLine");
var lineStyleModel = splitLineModel.getModel("lineStyle");
var lineColors = lineStyleModel.get("color");
lineColors = lineColors instanceof Array ? lineColors : [lineColors];
var lineWidth = lineStyleModel.get("width");
var gridRect = axisModel.coordinateSystem.getRect();
var isHorizontal = axis.isHorizontal();
var splitLines = [];
var lineCount = 0;
var ticksCoords = axis.getTicksCoords({
tickModel: splitLineModel
});
var p1 = [];
var p2 = [];
for (var i = 0; i < ticksCoords.length; ++i) {
var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
if (isHorizontal) {
p1[0] = tickCoord;
p1[1] = gridRect.y;
p2[0] = tickCoord;
p2[1] = gridRect.y + gridRect.height;
} else {
p1[0] = gridRect.x;
p1[1] = tickCoord;
p2[0] = gridRect.x + gridRect.width;
p2[1] = tickCoord;
}
var line = new Line$1({
shape: {
x1: p1[0],
y1: p1[1],
x2: p2[0],
y2: p2[1]
},
silent: true
});
subPixelOptimizeLine(line.shape, lineWidth);
var colorIndex = lineCount++ % lineColors.length;
splitLines[colorIndex] = splitLines[colorIndex] || [];
splitLines[colorIndex].push(line);
}
var lineStyle = lineStyleModel.getLineStyle(["color"]);
for (var i = 0; i < splitLines.length; ++i) {
group.add(mergePath(splitLines[i], {
style: defaults({
stroke: lineColors[i % lineColors.length]
}, lineStyle),
silent: true
}));
}
},
splitArea: function(axisView, group, axisGroup, axisModel) {
rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel);
}
};
var SingleAxisModel = (
/** @class */
(function(_super) {
__extends(SingleAxisModel2, _super);
function SingleAxisModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SingleAxisModel2.type;
return _this;
}
SingleAxisModel2.prototype.getCoordSysModel = function() {
return this;
};
SingleAxisModel2.type = "singleAxis";
SingleAxisModel2.layoutMode = "box";
SingleAxisModel2.defaultOption = {
left: "5%",
top: "5%",
right: "5%",
bottom: "5%",
type: "value",
position: "bottom",
orient: "horizontal",
axisLine: {
show: true,
lineStyle: {
width: 1,
type: "solid"
}
},
// Single coordinate system and single axis is the,
// which is used as the parent tooltip model.
// same model, so we set default tooltip show as true.
tooltip: {
show: true
},
axisTick: {
show: true,
length: 6,
lineStyle: {
width: 1
}
},
axisLabel: {
show: true,
interval: "auto"
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
opacity: 0.2
}
}
};
return SingleAxisModel2;
})(ComponentModel)
);
mixin(SingleAxisModel, AxisModelCommonMixin.prototype);
var SingleAxis = (
/** @class */
(function(_super) {
__extends(SingleAxis2, _super);
function SingleAxis2(dim, scale2, coordExtent, axisType, position2) {
var _this = _super.call(this, dim, scale2, coordExtent) || this;
_this.type = axisType || "value";
_this.position = position2 || "bottom";
return _this;
}
SingleAxis2.prototype.isHorizontal = function() {
var position2 = this.position;
return position2 === "top" || position2 === "bottom";
};
SingleAxis2.prototype.pointToData = function(point, clamp2) {
return this.coordinateSystem.pointToData(point)[0];
};
return SingleAxis2;
})(Axis)
);
var singleDimensions = ["single"];
var Single = (
/** @class */
(function() {
function Single2(axisModel, ecModel, api) {
this.type = "single";
this.dimension = "single";
this.dimensions = singleDimensions;
this.axisPointerEnabled = true;
this.model = axisModel;
this._init(axisModel, ecModel, api);
}
Single2.prototype._init = function(axisModel, ecModel, api) {
var dim = this.dimension;
var axis = new SingleAxis(dim, createScaleByModel$1(axisModel), [0, 0], axisModel.get("type"), axisModel.get("position"));
var isCategory2 = axis.type === "category";
axis.onBand = isCategory2 && axisModel.get("boundaryGap");
axis.inverse = axisModel.get("inverse");
axis.orient = axisModel.get("orient");
axisModel.axis = axis;
axis.model = axisModel;
axis.coordinateSystem = this;
this._axis = axis;
};
Single2.prototype.update = function(ecModel, api) {
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.coordinateSystem === this) {
var data_1 = seriesModel.getData();
each$f(data_1.mapDimensionsAll(this.dimension), function(dim) {
this._axis.scale.unionExtentFromData(data_1, dim);
}, this);
niceScaleExtent(this._axis.scale, this._axis.model);
}
}, this);
};
Single2.prototype.resize = function(axisModel, api) {
this._rect = getLayoutRect({
left: axisModel.get("left"),
top: axisModel.get("top"),
right: axisModel.get("right"),
bottom: axisModel.get("bottom"),
width: axisModel.get("width"),
height: axisModel.get("height")
}, {
width: api.getWidth(),
height: api.getHeight()
});
this._adjustAxis();
};
Single2.prototype.getRect = function() {
return this._rect;
};
Single2.prototype._adjustAxis = function() {
var rect = this._rect;
var axis = this._axis;
var isHorizontal = axis.isHorizontal();
var extent = isHorizontal ? [0, rect.width] : [0, rect.height];
var idx = axis.inverse ? 1 : 0;
axis.setExtent(extent[idx], extent[1 - idx]);
this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);
};
Single2.prototype._updateAxisTransform = function(axis, coordBase) {
var axisExtent = axis.getExtent();
var extentSum = axisExtent[0] + axisExtent[1];
var isHorizontal = axis.isHorizontal();
axis.toGlobalCoord = isHorizontal ? function(coord) {
return coord + coordBase;
} : function(coord) {
return extentSum - coord + coordBase;
};
axis.toLocalCoord = isHorizontal ? function(coord) {
return coord - coordBase;
} : function(coord) {
return extentSum - coord + coordBase;
};
};
Single2.prototype.getAxis = function() {
return this._axis;
};
Single2.prototype.getBaseAxis = function() {
return this._axis;
};
Single2.prototype.getAxes = function() {
return [this._axis];
};
Single2.prototype.getTooltipAxes = function() {
return {
baseAxes: [this.getAxis()],
// Empty otherAxes
otherAxes: []
};
};
Single2.prototype.containPoint = function(point) {
var rect = this.getRect();
var axis = this.getAxis();
var orient = axis.orient;
if (orient === "horizontal") {
return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height;
} else {
return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height;
}
};
Single2.prototype.pointToData = function(point) {
var axis = this.getAxis();
return [axis.coordToData(axis.toLocalCoord(point[axis.orient === "horizontal" ? 0 : 1]))];
};
Single2.prototype.dataToPoint = function(val) {
var axis = this.getAxis();
var rect = this.getRect();
var pt = [];
var idx = axis.orient === "horizontal" ? 0 : 1;
if (val instanceof Array) {
val = val[0];
}
pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));
pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2;
return pt;
};
Single2.prototype.convertToPixel = function(ecModel, finder, value) {
var coordSys = getCoordSys$1(finder);
return coordSys === this ? this.dataToPoint(value) : null;
};
Single2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
var coordSys = getCoordSys$1(finder);
return coordSys === this ? this.pointToData(pixel) : null;
};
return Single2;
})()
);
function getCoordSys$1(finder) {
var seriesModel = finder.seriesModel;
var singleModel = finder.singleAxisModel;
return singleModel && singleModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem;
}
function create(ecModel, api) {
var singles = [];
ecModel.eachComponent("singleAxis", function(axisModel, idx) {
var single = new Single(axisModel, ecModel, api);
single.name = "single_" + idx;
single.resize(axisModel, api);
axisModel.coordinateSystem = single;
singles.push(single);
});
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.get("coordinateSystem") === "singleAxis") {
var singleAxisModel = seriesModel.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0];
seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;
}
});
return singles;
}
var singleCreator = {
create,
dimensions: singleDimensions
};
var XY$1 = ["x", "y"];
var WH$1 = ["width", "height"];
var SingleAxisPointer = (
/** @class */
(function(_super) {
__extends(SingleAxisPointer2, _super);
function SingleAxisPointer2() {
return _super !== null && _super.apply(this, arguments) || this;
}
SingleAxisPointer2.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) {
var axis = axisModel.axis;
var coordSys = axis.coordinateSystem;
var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis));
var pixelValue = coordSys.dataToPoint(value)[0];
var axisPointerType = axisPointerModel.get("type");
if (axisPointerType && axisPointerType !== "none") {
var elStyle = buildElStyle(axisPointerModel);
var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent);
pointerOption.style = elStyle;
elOption.graphicKey = pointerOption.type;
elOption.pointer = pointerOption;
}
var layoutInfo = layout$1(axisModel);
buildCartesianSingleLabelElOption(
// @ts-ignore
value,
elOption,
layoutInfo,
axisModel,
axisPointerModel,
api
);
};
SingleAxisPointer2.prototype.getHandleTransform = function(value, axisModel, axisPointerModel) {
var layoutInfo = layout$1(axisModel, {
labelInside: false
});
layoutInfo.labelMargin = axisPointerModel.get(["handle", "margin"]);
var position2 = getTransformedPosition(axisModel.axis, value, layoutInfo);
return {
x: position2[0],
y: position2[1],
rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)
};
};
SingleAxisPointer2.prototype.updateHandleTransform = function(transform2, delta, axisModel, axisPointerModel) {
var axis = axisModel.axis;
var coordSys = axis.coordinateSystem;
var dimIndex = getPointDimIndex(axis);
var axisExtent = getGlobalExtent(coordSys, dimIndex);
var currPosition = [transform2.x, transform2.y];
currPosition[dimIndex] += delta[dimIndex];
currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);
currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);
var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex);
var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;
var cursorPoint = [cursorOtherValue, cursorOtherValue];
cursorPoint[dimIndex] = currPosition[dimIndex];
return {
x: currPosition[0],
y: currPosition[1],
rotation: transform2.rotation,
cursorPoint,
tooltipOption: {
verticalAlign: "middle"
}
};
};
return SingleAxisPointer2;
})(BaseAxisPointer)
);
var pointerShapeBuilder = {
line: function(axis, pixelValue, otherExtent) {
var targetShape = makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getPointDimIndex(axis));
return {
type: "Line",
subPixelOptimize: true,
shape: targetShape
};
},
shadow: function(axis, pixelValue, otherExtent) {
var bandWidth = axis.getBandWidth();
var span = otherExtent[1] - otherExtent[0];
return {
type: "Rect",
shape: makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getPointDimIndex(axis))
};
}
};
function getPointDimIndex(axis) {
return axis.isHorizontal() ? 0 : 1;
}
function getGlobalExtent(coordSys, dimIndex) {
var rect = coordSys.getRect();
return [rect[XY$1[dimIndex]], rect[XY$1[dimIndex]] + rect[WH$1[dimIndex]]];
}
var SingleView = (
/** @class */
(function(_super) {
__extends(SingleView2, _super);
function SingleView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SingleView2.type;
return _this;
}
SingleView2.type = "single";
return SingleView2;
})(ComponentView)
);
function install$p(registers) {
use(install$s);
AxisView.registerAxisPointerClass("SingleAxisPointer", SingleAxisPointer);
registers.registerComponentView(SingleView);
registers.registerComponentView(SingleAxisView);
registers.registerComponentModel(SingleAxisModel);
axisModelCreator(registers, "single", SingleAxisModel, SingleAxisModel.defaultOption);
registers.registerCoordinateSystem("single", singleCreator);
}
var CalendarModel = (
/** @class */
(function(_super) {
__extends(CalendarModel2, _super);
function CalendarModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CalendarModel2.type;
return _this;
}
CalendarModel2.prototype.init = function(option, parentModel, ecModel) {
var inputPositionParams = getLayoutParams(option);
_super.prototype.init.apply(this, arguments);
mergeAndNormalizeLayoutParams$1(option, inputPositionParams);
};
CalendarModel2.prototype.mergeOption = function(option) {
_super.prototype.mergeOption.apply(this, arguments);
mergeAndNormalizeLayoutParams$1(this.option, option);
};
CalendarModel2.prototype.getCellSize = function() {
return this.option.cellSize;
};
CalendarModel2.type = "calendar";
CalendarModel2.defaultOption = {
// zlevel: 0,
z: 2,
left: 80,
top: 60,
cellSize: 20,
// horizontal vertical
orient: "horizontal",
// month separate line style
splitLine: {
show: true,
lineStyle: {
color: "#000",
width: 1,
type: "solid"
}
},
// rect style temporarily unused emphasis
itemStyle: {
color: "#fff",
borderWidth: 1,
borderColor: "#ccc"
},
// week text style
dayLabel: {
show: true,
firstDay: 0,
// start end
position: "start",
margin: "50%",
color: "#000"
},
// month text style
monthLabel: {
show: true,
// start end
position: "start",
margin: 5,
// center or left
align: "center",
formatter: null,
color: "#000"
},
// year text style
yearLabel: {
show: true,
// top bottom left right
position: null,
margin: 30,
formatter: null,
color: "#ccc",
fontFamily: "sans-serif",
fontWeight: "bolder",
fontSize: 20
}
};
return CalendarModel2;
})(ComponentModel)
);
function mergeAndNormalizeLayoutParams$1(target, raw) {
var cellSize = target.cellSize;
var cellSizeArr;
if (!isArray$1(cellSize)) {
cellSizeArr = target.cellSize = [cellSize, cellSize];
} else {
cellSizeArr = cellSize;
}
if (cellSizeArr.length === 1) {
cellSizeArr[1] = cellSizeArr[0];
}
var ignoreSize = map$1([0, 1], function(hvIdx) {
if (sizeCalculable(raw, hvIdx)) {
cellSizeArr[hvIdx] = "auto";
}
return cellSizeArr[hvIdx] != null && cellSizeArr[hvIdx] !== "auto";
});
mergeLayoutParam(target, raw, {
type: "box",
ignoreSize
});
}
var CalendarView = (
/** @class */
(function(_super) {
__extends(CalendarView2, _super);
function CalendarView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = CalendarView2.type;
return _this;
}
CalendarView2.prototype.render = function(calendarModel, ecModel, api) {
var group = this.group;
group.removeAll();
var coordSys = calendarModel.coordinateSystem;
var rangeData = coordSys.getRangeInfo();
var orient = coordSys.getOrient();
var localeModel = ecModel.getLocaleModel();
this._renderDayRect(calendarModel, rangeData, group);
this._renderLines(calendarModel, rangeData, orient, group);
this._renderYearText(calendarModel, rangeData, orient, group);
this._renderMonthText(calendarModel, localeModel, orient, group);
this._renderWeekText(calendarModel, localeModel, rangeData, orient, group);
};
CalendarView2.prototype._renderDayRect = function(calendarModel, rangeData, group) {
var coordSys = calendarModel.coordinateSystem;
var itemRectStyleModel = calendarModel.getModel("itemStyle").getItemStyle();
var sw = coordSys.getCellWidth();
var sh = coordSys.getCellHeight();
for (var i = rangeData.start.time; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) {
var point = coordSys.dataToRect([i], false).tl;
var rect = new Rect$2({
shape: {
x: point[0],
y: point[1],
width: sw,
height: sh
},
cursor: "default",
style: itemRectStyleModel
});
group.add(rect);
}
};
CalendarView2.prototype._renderLines = function(calendarModel, rangeData, orient, group) {
var self = this;
var coordSys = calendarModel.coordinateSystem;
var lineStyleModel = calendarModel.getModel(["splitLine", "lineStyle"]).getLineStyle();
var show = calendarModel.get(["splitLine", "show"]);
var lineWidth = lineStyleModel.lineWidth;
this._tlpoints = [];
this._blpoints = [];
this._firstDayOfMonth = [];
this._firstDayPoints = [];
var firstDay = rangeData.start;
for (var i = 0; firstDay.time <= rangeData.end.time; i++) {
addPoints(firstDay.formatedDate);
if (i === 0) {
firstDay = coordSys.getDateInfo(rangeData.start.y + "-" + rangeData.start.m);
}
var date = firstDay.date;
date.setMonth(date.getMonth() + 1);
firstDay = coordSys.getDateInfo(date);
}
addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);
function addPoints(date2) {
self._firstDayOfMonth.push(coordSys.getDateInfo(date2));
self._firstDayPoints.push(coordSys.dataToRect([date2], false).tl);
var points2 = self._getLinePointsOfOneWeek(calendarModel, date2, orient);
self._tlpoints.push(points2[0]);
self._blpoints.push(points2[points2.length - 1]);
show && self._drawSplitline(points2, lineStyleModel, group);
}
show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group);
show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);
};
CalendarView2.prototype._getEdgesPoints = function(points2, lineWidth, orient) {
var rs = [points2[0].slice(), points2[points2.length - 1].slice()];
var idx = orient === "horizontal" ? 0 : 1;
rs[0][idx] = rs[0][idx] - lineWidth / 2;
rs[1][idx] = rs[1][idx] + lineWidth / 2;
return rs;
};
CalendarView2.prototype._drawSplitline = function(points2, lineStyle, group) {
var poyline = new Polyline$1({
z2: 20,
shape: {
points: points2
},
style: lineStyle
});
group.add(poyline);
};
CalendarView2.prototype._getLinePointsOfOneWeek = function(calendarModel, date, orient) {
var coordSys = calendarModel.coordinateSystem;
var parsedDate = coordSys.getDateInfo(date);
var points2 = [];
for (var i = 0; i < 7; i++) {
var tmpD = coordSys.getNextNDay(parsedDate.time, i);
var point = coordSys.dataToRect([tmpD.time], false);
points2[2 * tmpD.day] = point.tl;
points2[2 * tmpD.day + 1] = point[orient === "horizontal" ? "bl" : "tr"];
}
return points2;
};
CalendarView2.prototype._formatterLabel = function(formatter, params) {
if (isString(formatter) && formatter) {
return formatTplSimple(formatter, params);
}
if (isFunction(formatter)) {
return formatter(params);
}
return params.nameMap;
};
CalendarView2.prototype._yearTextPositionControl = function(textEl, point, orient, position2, margin) {
var x = point[0];
var y = point[1];
var aligns = ["center", "bottom"];
if (position2 === "bottom") {
y += margin;
aligns = ["center", "top"];
} else if (position2 === "left") {
x -= margin;
} else if (position2 === "right") {
x += margin;
aligns = ["center", "top"];
} else {
y -= margin;
}
var rotate2 = 0;
if (position2 === "left" || position2 === "right") {
rotate2 = Math.PI / 2;
}
return {
rotation: rotate2,
x,
y,
style: {
align: aligns[0],
verticalAlign: aligns[1]
}
};
};
CalendarView2.prototype._renderYearText = function(calendarModel, rangeData, orient, group) {
var yearLabel = calendarModel.getModel("yearLabel");
if (!yearLabel.get("show")) {
return;
}
var margin = yearLabel.get("margin");
var pos = yearLabel.get("position");
if (!pos) {
pos = orient !== "horizontal" ? "top" : "left";
}
var points2 = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]];
var xc = (points2[0][0] + points2[1][0]) / 2;
var yc = (points2[0][1] + points2[1][1]) / 2;
var idx = orient === "horizontal" ? 0 : 1;
var posPoints = {
top: [xc, points2[idx][1]],
bottom: [xc, points2[1 - idx][1]],
left: [points2[1 - idx][0], yc],
right: [points2[idx][0], yc]
};
var name = rangeData.start.y;
if (+rangeData.end.y > +rangeData.start.y) {
name = name + "-" + rangeData.end.y;
}
var formatter = yearLabel.get("formatter");
var params = {
start: rangeData.start.y,
end: rangeData.end.y,
nameMap: name
};
var content = this._formatterLabel(formatter, params);
var yearText = new ZRText({
z2: 30,
style: createTextStyle(yearLabel, {
text: content
}),
silent: yearLabel.get("silent")
});
yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));
group.add(yearText);
};
CalendarView2.prototype._monthTextPositionControl = function(point, isCenter, orient, position2, margin) {
var align = "left";
var vAlign = "top";
var x = point[0];
var y = point[1];
if (orient === "horizontal") {
y = y + margin;
if (isCenter) {
align = "center";
}
if (position2 === "start") {
vAlign = "bottom";
}
} else {
x = x + margin;
if (isCenter) {
vAlign = "middle";
}
if (position2 === "start") {
align = "right";
}
}
return {
x,
y,
align,
verticalAlign: vAlign
};
};
CalendarView2.prototype._renderMonthText = function(calendarModel, localeModel, orient, group) {
var monthLabel = calendarModel.getModel("monthLabel");
if (!monthLabel.get("show")) {
return;
}
var nameMap = monthLabel.get("nameMap");
var margin = monthLabel.get("margin");
var pos = monthLabel.get("position");
var align = monthLabel.get("align");
var termPoints = [this._tlpoints, this._blpoints];
if (!nameMap || isString(nameMap)) {
if (nameMap) {
localeModel = getLocaleModel(nameMap) || localeModel;
}
nameMap = localeModel.get(["time", "monthAbbr"]) || [];
}
var idx = pos === "start" ? 0 : 1;
var axis = orient === "horizontal" ? 0 : 1;
margin = pos === "start" ? -margin : margin;
var isCenter = align === "center";
var labelSilent = monthLabel.get("silent");
for (var i = 0; i < termPoints[idx].length - 1; i++) {
var tmp = termPoints[idx][i].slice();
var firstDay = this._firstDayOfMonth[i];
if (isCenter) {
var firstDayPoints = this._firstDayPoints[i];
tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2;
}
var formatter = monthLabel.get("formatter");
var name_1 = nameMap[+firstDay.m - 1];
var params = {
yyyy: firstDay.y,
yy: (firstDay.y + "").slice(2),
MM: firstDay.m,
M: +firstDay.m,
nameMap: name_1
};
var content = this._formatterLabel(formatter, params);
var monthText = new ZRText({
z2: 30,
style: extend(createTextStyle(monthLabel, {
text: content
}), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)),
silent: labelSilent
});
group.add(monthText);
}
};
CalendarView2.prototype._weekTextPositionControl = function(point, orient, position2, margin, cellSize) {
var align = "center";
var vAlign = "middle";
var x = point[0];
var y = point[1];
var isStart = position2 === "start";
if (orient === "horizontal") {
x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2;
align = isStart ? "right" : "left";
} else {
y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2;
vAlign = isStart ? "bottom" : "top";
}
return {
x,
y,
align,
verticalAlign: vAlign
};
};
CalendarView2.prototype._renderWeekText = function(calendarModel, localeModel, rangeData, orient, group) {
var dayLabel = calendarModel.getModel("dayLabel");
if (!dayLabel.get("show")) {
return;
}
var coordSys = calendarModel.coordinateSystem;
var pos = dayLabel.get("position");
var nameMap = dayLabel.get("nameMap");
var margin = dayLabel.get("margin");
var firstDayOfWeek = coordSys.getFirstDayOfWeek();
if (!nameMap || isString(nameMap)) {
if (nameMap) {
localeModel = getLocaleModel(nameMap) || localeModel;
}
var dayOfWeekShort = localeModel.get(["time", "dayOfWeekShort"]);
nameMap = dayOfWeekShort || map$1(localeModel.get(["time", "dayOfWeekAbbr"]), function(val) {
return val[0];
});
}
var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time;
var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];
margin = parsePercent(margin, Math.min(cellSize[1], cellSize[0]));
if (pos === "start") {
start = coordSys.getNextNDay(rangeData.start.time, -(7 + rangeData.fweek)).time;
margin = -margin;
}
var labelSilent = dayLabel.get("silent");
for (var i = 0; i < 7; i++) {
var tmpD = coordSys.getNextNDay(start, i);
var point = coordSys.dataToRect([tmpD.time], false).center;
var day = i;
day = Math.abs((i + firstDayOfWeek) % 7);
var weekText = new ZRText({
z2: 30,
style: extend(createTextStyle(dayLabel, {
text: nameMap[day]
}), this._weekTextPositionControl(point, orient, pos, margin, cellSize)),
silent: labelSilent
});
group.add(weekText);
}
};
CalendarView2.type = "calendar";
return CalendarView2;
})(ComponentView)
);
var PROXIMATE_ONE_DAY = 864e5;
var Calendar = (
/** @class */
(function() {
function Calendar2(calendarModel, ecModel, api) {
this.type = "calendar";
this.dimensions = Calendar2.dimensions;
this.getDimensionsInfo = Calendar2.getDimensionsInfo;
this._model = calendarModel;
}
Calendar2.getDimensionsInfo = function() {
return [{
name: "time",
type: "time"
}, "value"];
};
Calendar2.prototype.getRangeInfo = function() {
return this._rangeInfo;
};
Calendar2.prototype.getModel = function() {
return this._model;
};
Calendar2.prototype.getRect = function() {
return this._rect;
};
Calendar2.prototype.getCellWidth = function() {
return this._sw;
};
Calendar2.prototype.getCellHeight = function() {
return this._sh;
};
Calendar2.prototype.getOrient = function() {
return this._orient;
};
Calendar2.prototype.getFirstDayOfWeek = function() {
return this._firstDayOfWeek;
};
Calendar2.prototype.getDateInfo = function(date) {
date = parseDate(date);
var y = date.getFullYear();
var m = date.getMonth() + 1;
var mStr = m < 10 ? "0" + m : "" + m;
var d = date.getDate();
var dStr = d < 10 ? "0" + d : "" + d;
var day = date.getDay();
day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);
return {
y: y + "",
m: mStr,
d: dStr,
day,
time: date.getTime(),
formatedDate: y + "-" + mStr + "-" + dStr,
date
};
};
Calendar2.prototype.getNextNDay = function(date, n) {
n = n || 0;
if (n === 0) {
return this.getDateInfo(date);
}
date = new Date(this.getDateInfo(date).time);
date.setDate(date.getDate() + n);
return this.getDateInfo(date);
};
Calendar2.prototype.update = function(ecModel, api) {
this._firstDayOfWeek = +this._model.getModel("dayLabel").get("firstDay");
this._orient = this._model.get("orient");
this._lineWidth = this._model.getModel("itemStyle").getItemStyle().lineWidth || 0;
this._rangeInfo = this._getRangeInfo(this._initRangeOption());
var weeks = this._rangeInfo.weeks || 1;
var whNames = ["width", "height"];
var cellSize = this._model.getCellSize().slice();
var layoutParams = this._model.getBoxLayoutParams();
var cellNumbers = this._orient === "horizontal" ? [weeks, 7] : [7, weeks];
each$f([0, 1], function(idx) {
if (cellSizeSpecified(cellSize, idx)) {
layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];
}
});
var whGlobal = {
width: api.getWidth(),
height: api.getHeight()
};
var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal);
each$f([0, 1], function(idx) {
if (!cellSizeSpecified(cellSize, idx)) {
cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];
}
});
function cellSizeSpecified(cellSize2, idx) {
return cellSize2[idx] != null && cellSize2[idx] !== "auto";
}
this._sw = cellSize[0];
this._sh = cellSize[1];
};
Calendar2.prototype.dataToPoint = function(data, clamp2) {
isArray$1(data) && (data = data[0]);
clamp2 == null && (clamp2 = true);
var dayInfo = this.getDateInfo(data);
var range = this._rangeInfo;
var date = dayInfo.formatedDate;
if (clamp2 && !(dayInfo.time >= range.start.time && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY)) {
return [NaN, NaN];
}
var week = dayInfo.day;
var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;
if (this._orient === "vertical") {
return [this._rect.x + week * this._sw + this._sw / 2, this._rect.y + nthWeek * this._sh + this._sh / 2];
}
return [this._rect.x + nthWeek * this._sw + this._sw / 2, this._rect.y + week * this._sh + this._sh / 2];
};
Calendar2.prototype.pointToData = function(point) {
var date = this.pointToDate(point);
return date && date.time;
};
Calendar2.prototype.dataToRect = function(data, clamp2) {
var point = this.dataToPoint(data, clamp2);
return {
contentShape: {
x: point[0] - (this._sw - this._lineWidth) / 2,
y: point[1] - (this._sh - this._lineWidth) / 2,
width: this._sw - this._lineWidth,
height: this._sh - this._lineWidth
},
center: point,
tl: [point[0] - this._sw / 2, point[1] - this._sh / 2],
tr: [point[0] + this._sw / 2, point[1] - this._sh / 2],
br: [point[0] + this._sw / 2, point[1] + this._sh / 2],
bl: [point[0] - this._sw / 2, point[1] + this._sh / 2]
};
};
Calendar2.prototype.pointToDate = function(point) {
var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;
var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;
var range = this._rangeInfo.range;
if (this._orient === "vertical") {
return this._getDateByWeeksAndDay(nthY, nthX - 1, range);
}
return this._getDateByWeeksAndDay(nthX, nthY - 1, range);
};
Calendar2.prototype.convertToPixel = function(ecModel, finder, value) {
var coordSys = getCoordSys(finder);
return coordSys === this ? coordSys.dataToPoint(value) : null;
};
Calendar2.prototype.convertFromPixel = function(ecModel, finder, pixel) {
var coordSys = getCoordSys(finder);
return coordSys === this ? coordSys.pointToData(pixel) : null;
};
Calendar2.prototype.containPoint = function(point) {
console.warn("Not implemented.");
return false;
};
Calendar2.prototype._initRangeOption = function() {
var range = this._model.get("range");
var normalizedRange;
if (isArray$1(range) && range.length === 1) {
range = range[0];
}
if (!isArray$1(range)) {
var rangeStr = range.toString();
if (/^\d{4}$/.test(rangeStr)) {
normalizedRange = [rangeStr + "-01-01", rangeStr + "-12-31"];
}
if (/^\d{4}[\/|-]\d{1,2}$/.test(rangeStr)) {
var start = this.getDateInfo(rangeStr);
var firstDay = start.date;
firstDay.setMonth(firstDay.getMonth() + 1);
var end = this.getNextNDay(firstDay, -1);
normalizedRange = [start.formatedDate, end.formatedDate];
}
if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rangeStr)) {
normalizedRange = [rangeStr, rangeStr];
}
} else {
normalizedRange = range;
}
if (!normalizedRange) {
return range;
}
var tmp = this._getRangeInfo(normalizedRange);
if (tmp.start.time > tmp.end.time) {
normalizedRange.reverse();
}
return normalizedRange;
};
Calendar2.prototype._getRangeInfo = function(range) {
var parsedRange = [this.getDateInfo(range[0]), this.getDateInfo(range[1])];
var reversed;
if (parsedRange[0].time > parsedRange[1].time) {
reversed = true;
parsedRange.reverse();
}
var allDay = Math.floor(parsedRange[1].time / PROXIMATE_ONE_DAY) - Math.floor(parsedRange[0].time / PROXIMATE_ONE_DAY) + 1;
var date = new Date(parsedRange[0].time);
var startDateNum = date.getDate();
var endDateNum = parsedRange[1].date.getDate();
date.setDate(startDateNum + allDay - 1);
var dateNum = date.getDate();
if (dateNum !== endDateNum) {
var sign = date.getTime() - parsedRange[1].time > 0 ? 1 : -1;
while ((dateNum = date.getDate()) !== endDateNum && (date.getTime() - parsedRange[1].time) * sign > 0) {
allDay -= sign;
date.setDate(dateNum - sign);
}
}
var weeks = Math.floor((allDay + parsedRange[0].day + 6) / 7);
var nthWeek = reversed ? -weeks + 1 : weeks - 1;
reversed && parsedRange.reverse();
return {
range: [parsedRange[0].formatedDate, parsedRange[1].formatedDate],
start: parsedRange[0],
end: parsedRange[1],
allDay,
weeks,
// From 0.
nthWeek,
fweek: parsedRange[0].day,
lweek: parsedRange[1].day
};
};
Calendar2.prototype._getDateByWeeksAndDay = function(nthWeek, day, range) {
var rangeInfo = this._getRangeInfo(range);
if (nthWeek > rangeInfo.weeks || nthWeek === 0 && day < rangeInfo.fweek || nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) {
return null;
}
var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;
var date = new Date(rangeInfo.start.time);
date.setDate(+rangeInfo.start.d + nthDay);
return this.getDateInfo(date);
};
Calendar2.create = function(ecModel, api) {
var calendarList = [];
ecModel.eachComponent("calendar", function(calendarModel) {
var calendar = new Calendar2(calendarModel);
calendarList.push(calendar);
calendarModel.coordinateSystem = calendar;
});
ecModel.eachSeries(function(calendarSeries) {
if (calendarSeries.get("coordinateSystem") === "calendar") {
calendarSeries.coordinateSystem = calendarList[calendarSeries.get("calendarIndex") || 0];
}
});
return calendarList;
};
Calendar2.dimensions = ["time", "value"];
return Calendar2;
})()
);
function getCoordSys(finder) {
var calendarModel = finder.calendarModel;
var seriesModel = finder.seriesModel;
var coordSys = calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null;
return coordSys;
}
function install$o(registers) {
registers.registerComponentModel(CalendarModel);
registers.registerComponentView(CalendarView);
registers.registerCoordinateSystem("calendar", Calendar);
}
function setKeyInfoToNewElOption(resultItem, newElOption) {
var existElOption = resultItem.existing;
newElOption.id = resultItem.keyInfo.id;
!newElOption.type && existElOption && (newElOption.type = existElOption.type);
if (newElOption.parentId == null) {
var newElParentOption = newElOption.parentOption;
if (newElParentOption) {
newElOption.parentId = newElParentOption.id;
} else if (existElOption) {
newElOption.parentId = existElOption.parentId;
}
}
newElOption.parentOption = null;
}
function isSetLoc(obj, props) {
var isSet;
each$f(props, function(prop) {
obj[prop] != null && obj[prop] !== "auto" && (isSet = true);
});
return isSet;
}
function mergeNewElOptionToExist(existList, index, newElOption) {
var newElOptCopy = extend({}, newElOption);
var existElOption = existList[index];
var $action = newElOption.$action || "merge";
if ($action === "merge") {
if (existElOption) {
merge(existElOption, newElOptCopy, true);
mergeLayoutParam(existElOption, newElOptCopy, {
ignoreSize: true
});
copyLayoutParams(newElOption, existElOption);
copyTransitionInfo(newElOption, existElOption);
copyTransitionInfo(newElOption, existElOption, "shape");
copyTransitionInfo(newElOption, existElOption, "style");
copyTransitionInfo(newElOption, existElOption, "extra");
newElOption.clipPath = existElOption.clipPath;
} else {
existList[index] = newElOptCopy;
}
} else if ($action === "replace") {
existList[index] = newElOptCopy;
} else if ($action === "remove") {
existElOption && (existList[index] = null);
}
}
var TRANSITION_PROPS_TO_COPY = ["transition", "enterFrom", "leaveTo"];
var ROOT_TRANSITION_PROPS_TO_COPY = TRANSITION_PROPS_TO_COPY.concat(["enterAnimation", "updateAnimation", "leaveAnimation"]);
function copyTransitionInfo(target, source, targetProp) {
if (targetProp) {
if (!target[targetProp] && source[targetProp]) {
target[targetProp] = {};
}
target = target[targetProp];
source = source[targetProp];
}
if (!target || !source) {
return;
}
var props = targetProp ? TRANSITION_PROPS_TO_COPY : ROOT_TRANSITION_PROPS_TO_COPY;
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (target[prop] == null && source[prop] != null) {
target[prop] = source[prop];
}
}
}
function setLayoutInfoToExist(existItem, newElOption) {
if (!existItem) {
return;
}
existItem.hv = newElOption.hv = [
// Rigid body, don't care about `width`.
isSetLoc(newElOption, ["left", "right"]),
// Rigid body, don't care about `height`.
isSetLoc(newElOption, ["top", "bottom"])
];
if (existItem.type === "group") {
var existingGroupOpt = existItem;
var newGroupOpt = newElOption;
existingGroupOpt.width == null && (existingGroupOpt.width = newGroupOpt.width = 0);
existingGroupOpt.height == null && (existingGroupOpt.height = newGroupOpt.height = 0);
}
}
var GraphicComponentModel = (
/** @class */
(function(_super) {
__extends(GraphicComponentModel2, _super);
function GraphicComponentModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GraphicComponentModel2.type;
_this.preventAutoZ = true;
return _this;
}
GraphicComponentModel2.prototype.mergeOption = function(option, ecModel) {
var elements = this.option.elements;
this.option.elements = null;
_super.prototype.mergeOption.call(this, option, ecModel);
this.option.elements = elements;
};
GraphicComponentModel2.prototype.optionUpdated = function(newOption, isInit) {
var thisOption = this.option;
var newList = (isInit ? thisOption : newOption).elements;
var existList = thisOption.elements = isInit ? [] : thisOption.elements;
var flattenedList = [];
this._flatten(newList, flattenedList, null);
var mappingResult = mappingToExists(existList, flattenedList, "normalMerge");
var elOptionsToUpdate = this._elOptionsToUpdate = [];
each$f(mappingResult, function(resultItem, index) {
var newElOption = resultItem.newOption;
if (!newElOption) {
return;
}
elOptionsToUpdate.push(newElOption);
setKeyInfoToNewElOption(resultItem, newElOption);
mergeNewElOptionToExist(existList, index, newElOption);
setLayoutInfoToExist(existList[index], newElOption);
}, this);
thisOption.elements = filter(existList, function(item) {
item && delete item.$action;
return item != null;
});
};
GraphicComponentModel2.prototype._flatten = function(optionList, result, parentOption) {
each$f(optionList, function(option) {
if (!option) {
return;
}
if (parentOption) {
option.parentOption = parentOption;
}
result.push(option);
var children = option.children;
if (children && children.length) {
this._flatten(children, result, option);
}
delete option.children;
}, this);
};
GraphicComponentModel2.prototype.useElOptionsToUpdate = function() {
var els = this._elOptionsToUpdate;
this._elOptionsToUpdate = null;
return els;
};
GraphicComponentModel2.type = "graphic";
GraphicComponentModel2.defaultOption = {
elements: []
// parentId: null
};
return GraphicComponentModel2;
})(ComponentModel)
);
var nonShapeGraphicElements = {
// Reserved but not supported in graphic component.
path: null,
compoundPath: null,
// Supported in graphic component.
group: Group$3,
image: ZRImage,
text: ZRText
};
var inner$7 = makeInner();
var GraphicComponentView = (
/** @class */
(function(_super) {
__extends(GraphicComponentView2, _super);
function GraphicComponentView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = GraphicComponentView2.type;
return _this;
}
GraphicComponentView2.prototype.init = function() {
this._elMap = createHashMap();
};
GraphicComponentView2.prototype.render = function(graphicModel, ecModel, api) {
if (graphicModel !== this._lastGraphicModel) {
this._clear();
}
this._lastGraphicModel = graphicModel;
this._updateElements(graphicModel);
this._relocate(graphicModel, api);
};
GraphicComponentView2.prototype._updateElements = function(graphicModel) {
var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();
if (!elOptionsToUpdate) {
return;
}
var elMap = this._elMap;
var rootGroup = this.group;
var globalZ = graphicModel.get("z");
var globalZLevel = graphicModel.get("zlevel");
each$f(elOptionsToUpdate, function(elOption) {
var id = convertOptionIdName(elOption.id, null);
var elExisting = id != null ? elMap.get(id) : null;
var parentId = convertOptionIdName(elOption.parentId, null);
var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;
var elType = elOption.type;
var elOptionStyle = elOption.style;
if (elType === "text" && elOptionStyle) {
if (elOption.hv && elOption.hv[1]) {
elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = elOptionStyle.verticalAlign = elOptionStyle.align = null;
}
}
var textContentOption = elOption.textContent;
var textConfig = elOption.textConfig;
if (elOptionStyle && isEC4CompatibleStyle(elOptionStyle, elType, !!textConfig, !!textContentOption)) {
var convertResult = convertFromEC4CompatibleStyle(elOptionStyle, elType, true);
if (!textConfig && convertResult.textConfig) {
textConfig = elOption.textConfig = convertResult.textConfig;
}
if (!textContentOption && convertResult.textContent) {
textContentOption = convertResult.textContent;
}
}
var elOptionCleaned = getCleanedElOption(elOption);
var $action = elOption.$action || "merge";
var isMerge = $action === "merge";
var isReplace = $action === "replace";
if (isMerge) {
var isInit = !elExisting;
var el_1 = elExisting;
if (isInit) {
el_1 = createEl(id, targetElParent, elOption.type, elMap);
} else {
el_1 && (inner$7(el_1).isNew = false);
stopPreviousKeyframeAnimationAndRestore(el_1);
}
if (el_1) {
applyUpdateTransition(el_1, elOptionCleaned, graphicModel, {
isInit
});
updateCommonAttrs(el_1, elOption, globalZ, globalZLevel);
}
} else if (isReplace) {
removeEl$1(elExisting, elOption, elMap, graphicModel);
var el_2 = createEl(id, targetElParent, elOption.type, elMap);
if (el_2) {
applyUpdateTransition(el_2, elOptionCleaned, graphicModel, {
isInit: true
});
updateCommonAttrs(el_2, elOption, globalZ, globalZLevel);
}
} else if ($action === "remove") {
updateLeaveTo(elExisting, elOption);
removeEl$1(elExisting, elOption, elMap, graphicModel);
}
var el = elMap.get(id);
if (el && textContentOption) {
if (isMerge) {
var textContentExisting = el.getTextContent();
textContentExisting ? textContentExisting.attr(textContentOption) : el.setTextContent(new ZRText(textContentOption));
} else if (isReplace) {
el.setTextContent(new ZRText(textContentOption));
}
}
if (el) {
var clipPathOption = elOption.clipPath;
if (clipPathOption) {
var clipPathType = clipPathOption.type;
var clipPath = void 0;
var isInit = false;
if (isMerge) {
var oldClipPath = el.getClipPath();
isInit = !oldClipPath || inner$7(oldClipPath).type !== clipPathType;
clipPath = isInit ? newEl(clipPathType) : oldClipPath;
} else if (isReplace) {
isInit = true;
clipPath = newEl(clipPathType);
}
el.setClipPath(clipPath);
applyUpdateTransition(clipPath, clipPathOption, graphicModel, {
isInit
});
applyKeyframeAnimation(clipPath, clipPathOption.keyframeAnimation, graphicModel);
}
var elInner = inner$7(el);
el.setTextConfig(textConfig);
elInner.option = elOption;
setEventData(el, graphicModel, elOption);
setTooltipConfig({
el,
componentModel: graphicModel,
itemName: el.name,
itemTooltipOption: elOption.tooltip
});
applyKeyframeAnimation(el, elOption.keyframeAnimation, graphicModel);
}
});
};
GraphicComponentView2.prototype._relocate = function(graphicModel, api) {
var elOptions = graphicModel.option.elements;
var rootGroup = this.group;
var elMap = this._elMap;
var apiWidth = api.getWidth();
var apiHeight = api.getHeight();
var xy = ["x", "y"];
for (var i = 0; i < elOptions.length; i++) {
var elOption = elOptions[i];
var id = convertOptionIdName(elOption.id, null);
var el = id != null ? elMap.get(id) : null;
if (!el || !el.isGroup) {
continue;
}
var parentEl = el.parent;
var isParentRoot = parentEl === rootGroup;
var elInner = inner$7(el);
var parentElInner = inner$7(parentEl);
elInner.width = parsePercent(elInner.option.width, isParentRoot ? apiWidth : parentElInner.width) || 0;
elInner.height = parsePercent(elInner.option.height, isParentRoot ? apiHeight : parentElInner.height) || 0;
}
for (var i = elOptions.length - 1; i >= 0; i--) {
var elOption = elOptions[i];
var id = convertOptionIdName(elOption.id, null);
var el = id != null ? elMap.get(id) : null;
if (!el) {
continue;
}
var parentEl = el.parent;
var parentElInner = inner$7(parentEl);
var containerInfo = parentEl === rootGroup ? {
width: apiWidth,
height: apiHeight
} : {
width: parentElInner.width,
height: parentElInner.height
};
var layoutPos = {};
var layouted = positionElement(el, elOption, containerInfo, null, {
hv: elOption.hv,
boundingMode: elOption.bounding
}, layoutPos);
if (!inner$7(el).isNew && layouted) {
var transition = elOption.transition;
var animatePos = {};
for (var k = 0; k < xy.length; k++) {
var key = xy[k];
var val = layoutPos[key];
if (transition && (isTransitionAll(transition) || indexOf(transition, key) >= 0)) {
animatePos[key] = val;
} else {
el[key] = val;
}
}
updateProps$1(el, animatePos, graphicModel, 0);
} else {
el.attr(layoutPos);
}
}
};
GraphicComponentView2.prototype._clear = function() {
var _this = this;
var elMap = this._elMap;
elMap.each(function(el) {
removeEl$1(el, inner$7(el).option, elMap, _this._lastGraphicModel);
});
this._elMap = createHashMap();
};
GraphicComponentView2.prototype.dispose = function() {
this._clear();
};
GraphicComponentView2.type = "graphic";
return GraphicComponentView2;
})(ComponentView)
);
function newEl(graphicType) {
var Clz = hasOwn(nonShapeGraphicElements, graphicType) ? nonShapeGraphicElements[graphicType] : getShapeClass(graphicType);
var el = new Clz({});
inner$7(el).type = graphicType;
return el;
}
function createEl(id, targetElParent, graphicType, elMap) {
var el = newEl(graphicType);
targetElParent.add(el);
elMap.set(id, el);
inner$7(el).id = id;
inner$7(el).isNew = true;
return el;
}
function removeEl$1(elExisting, elOption, elMap, graphicModel) {
var existElParent = elExisting && elExisting.parent;
if (existElParent) {
elExisting.type === "group" && elExisting.traverse(function(el) {
removeEl$1(el, elOption, elMap, graphicModel);
});
applyLeaveTransition(elExisting, elOption, graphicModel);
elMap.removeKey(inner$7(elExisting).id);
}
}
function updateCommonAttrs(el, elOption, defaultZ, defaultZlevel) {
if (!el.isGroup) {
each$f([
["cursor", Displayable.prototype.cursor],
// We should not support configure z and zlevel in the element level.
// But seems we didn't limit it previously. So here still use it to avoid breaking.
["zlevel", defaultZlevel || 0],
["z", defaultZ || 0],
// z2 must not be null/undefined, otherwise sort error may occur.
["z2", 0]
], function(item) {
var prop = item[0];
if (hasOwn(elOption, prop)) {
el[prop] = retrieve2(elOption[prop], item[1]);
} else if (el[prop] == null) {
el[prop] = item[1];
}
});
}
each$f(keys(elOption), function(key) {
if (key.indexOf("on") === 0) {
var val = elOption[key];
el[key] = isFunction(val) ? val : null;
}
});
if (hasOwn(elOption, "draggable")) {
el.draggable = elOption.draggable;
}
elOption.name != null && (el.name = elOption.name);
elOption.id != null && (el.id = elOption.id);
}
function getCleanedElOption(elOption) {
elOption = extend({}, elOption);
each$f(["id", "parentId", "$action", "hv", "bounding", "textContent", "clipPath"].concat(LOCATION_PARAMS), function(name) {
delete elOption[name];
});
return elOption;
}
function setEventData(el, graphicModel, elOption) {
var eventData = getECData(el).eventData;
if (!el.silent && !el.ignore && !eventData) {
eventData = getECData(el).eventData = {
componentType: "graphic",
componentIndex: graphicModel.componentIndex,
name: el.name
};
}
if (eventData) {
eventData.info = elOption.info;
}
}
function install$n(registers) {
registers.registerComponentModel(GraphicComponentModel);
registers.registerComponentView(GraphicComponentView);
registers.registerPreprocessor(function(option) {
var graphicOption = option.graphic;
if (isArray$1(graphicOption)) {
if (!graphicOption[0] || !graphicOption[0].elements) {
option.graphic = [{
elements: graphicOption
}];
} else {
option.graphic = [option.graphic[0]];
}
} else if (graphicOption && !graphicOption.elements) {
option.graphic = [{
elements: [graphicOption]
}];
}
});
}
var DATA_ZOOM_AXIS_DIMENSIONS = ["x", "y", "radius", "angle", "single"];
var SERIES_COORDS = ["cartesian2d", "polar", "singleAxis"];
function isCoordSupported(seriesModel) {
var coordType = seriesModel.get("coordinateSystem");
return indexOf(SERIES_COORDS, coordType) >= 0;
}
function getAxisMainType(axisDim) {
return axisDim + "Axis";
}
function findEffectedDataZooms(ecModel, payload) {
var axisRecords = createHashMap();
var effectedModels = [];
var effectedModelMap = createHashMap();
ecModel.eachComponent({
mainType: "dataZoom",
query: payload
}, function(dataZoomModel) {
if (!effectedModelMap.get(dataZoomModel.uid)) {
addToEffected(dataZoomModel);
}
});
var foundNewLink;
do {
foundNewLink = false;
ecModel.eachComponent("dataZoom", processSingle);
} while (foundNewLink);
function processSingle(dataZoomModel) {
if (!effectedModelMap.get(dataZoomModel.uid) && isLinked(dataZoomModel)) {
addToEffected(dataZoomModel);
foundNewLink = true;
}
}
function addToEffected(dataZoom) {
effectedModelMap.set(dataZoom.uid, true);
effectedModels.push(dataZoom);
markAxisControlled(dataZoom);
}
function isLinked(dataZoomModel) {
var isLink = false;
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
var axisIdxArr = axisRecords.get(axisDim);
if (axisIdxArr && axisIdxArr[axisIndex]) {
isLink = true;
}
});
return isLink;
}
function markAxisControlled(dataZoomModel) {
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
(axisRecords.get(axisDim) || axisRecords.set(axisDim, []))[axisIndex] = true;
});
}
return effectedModels;
}
function collectReferCoordSysModelInfo(dataZoomModel) {
var ecModel = dataZoomModel.ecModel;
var coordSysInfoWrap = {
infoList: [],
infoMap: createHashMap()
};
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex);
if (!axisModel) {
return;
}
var coordSysModel = axisModel.getCoordSysModel();
if (!coordSysModel) {
return;
}
var coordSysUid = coordSysModel.uid;
var coordSysInfo = coordSysInfoWrap.infoMap.get(coordSysUid);
if (!coordSysInfo) {
coordSysInfo = {
model: coordSysModel,
axisModels: []
};
coordSysInfoWrap.infoList.push(coordSysInfo);
coordSysInfoWrap.infoMap.set(coordSysUid, coordSysInfo);
}
coordSysInfo.axisModels.push(axisModel);
});
return coordSysInfoWrap;
}
var DataZoomAxisInfo = (
/** @class */
(function() {
function DataZoomAxisInfo2() {
this.indexList = [];
this.indexMap = [];
}
DataZoomAxisInfo2.prototype.add = function(axisCmptIdx) {
if (!this.indexMap[axisCmptIdx]) {
this.indexList.push(axisCmptIdx);
this.indexMap[axisCmptIdx] = true;
}
};
return DataZoomAxisInfo2;
})()
);
var DataZoomModel = (
/** @class */
(function(_super) {
__extends(DataZoomModel2, _super);
function DataZoomModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = DataZoomModel2.type;
_this._autoThrottle = true;
_this._noTarget = true;
_this._rangePropMode = ["percent", "percent"];
return _this;
}
DataZoomModel2.prototype.init = function(option, parentModel, ecModel) {
var inputRawOption = retrieveRawOption(option);
this.settledOption = inputRawOption;
this.mergeDefaultAndTheme(option, ecModel);
this._doInit(inputRawOption);
};
DataZoomModel2.prototype.mergeOption = function(newOption) {
var inputRawOption = retrieveRawOption(newOption);
merge(this.option, newOption, true);
merge(this.settledOption, inputRawOption, true);
this._doInit(inputRawOption);
};
DataZoomModel2.prototype._doInit = function(inputRawOption) {
var thisOption = this.option;
this._setDefaultThrottle(inputRawOption);
this._updateRangeUse(inputRawOption);
var settledOption = this.settledOption;
each$f([["start", "startValue"], ["end", "endValue"]], function(names, index) {
if (this._rangePropMode[index] === "value") {
thisOption[names[0]] = settledOption[names[0]] = null;
}
}, this);
this._resetTarget();
};
DataZoomModel2.prototype._resetTarget = function() {
var optionOrient = this.get("orient", true);
var targetAxisIndexMap = this._targetAxisInfoMap = createHashMap();
var hasAxisSpecified = this._fillSpecifiedTargetAxis(targetAxisIndexMap);
if (hasAxisSpecified) {
this._orient = optionOrient || this._makeAutoOrientByTargetAxis();
} else {
this._orient = optionOrient || "horizontal";
this._fillAutoTargetAxisByOrient(targetAxisIndexMap, this._orient);
}
this._noTarget = true;
targetAxisIndexMap.each(function(axisInfo) {
if (axisInfo.indexList.length) {
this._noTarget = false;
}
}, this);
};
DataZoomModel2.prototype._fillSpecifiedTargetAxis = function(targetAxisIndexMap) {
var hasAxisSpecified = false;
each$f(DATA_ZOOM_AXIS_DIMENSIONS, function(axisDim) {
var refering = this.getReferringComponents(getAxisMainType(axisDim), MULTIPLE_REFERRING);
if (!refering.specified) {
return;
}
hasAxisSpecified = true;
var axisInfo = new DataZoomAxisInfo();
each$f(refering.models, function(axisModel) {
axisInfo.add(axisModel.componentIndex);
});
targetAxisIndexMap.set(axisDim, axisInfo);
}, this);
return hasAxisSpecified;
};
DataZoomModel2.prototype._fillAutoTargetAxisByOrient = function(targetAxisIndexMap, orient) {
var ecModel = this.ecModel;
var needAuto = true;
if (needAuto) {
var axisDim = orient === "vertical" ? "y" : "x";
var axisModels = ecModel.findComponents({
mainType: axisDim + "Axis"
});
setParallelAxis(axisModels, axisDim);
}
if (needAuto) {
var axisModels = ecModel.findComponents({
mainType: "singleAxis",
filter: function(axisModel) {
return axisModel.get("orient", true) === orient;
}
});
setParallelAxis(axisModels, "single");
}
function setParallelAxis(axisModels2, axisDim2) {
var axisModel = axisModels2[0];
if (!axisModel) {
return;
}
var axisInfo = new DataZoomAxisInfo();
axisInfo.add(axisModel.componentIndex);
targetAxisIndexMap.set(axisDim2, axisInfo);
needAuto = false;
if (axisDim2 === "x" || axisDim2 === "y") {
var gridModel_1 = axisModel.getReferringComponents("grid", SINGLE_REFERRING).models[0];
gridModel_1 && each$f(axisModels2, function(axModel) {
if (axisModel.componentIndex !== axModel.componentIndex && gridModel_1 === axModel.getReferringComponents("grid", SINGLE_REFERRING).models[0]) {
axisInfo.add(axModel.componentIndex);
}
});
}
}
if (needAuto) {
each$f(DATA_ZOOM_AXIS_DIMENSIONS, function(axisDim2) {
if (!needAuto) {
return;
}
var axisModels2 = ecModel.findComponents({
mainType: getAxisMainType(axisDim2),
filter: function(axisModel) {
return axisModel.get("type", true) === "category";
}
});
if (axisModels2[0]) {
var axisInfo = new DataZoomAxisInfo();
axisInfo.add(axisModels2[0].componentIndex);
targetAxisIndexMap.set(axisDim2, axisInfo);
needAuto = false;
}
}, this);
}
};
DataZoomModel2.prototype._makeAutoOrientByTargetAxis = function() {
var dim;
this.eachTargetAxis(function(axisDim) {
!dim && (dim = axisDim);
}, this);
return dim === "y" ? "vertical" : "horizontal";
};
DataZoomModel2.prototype._setDefaultThrottle = function(inputRawOption) {
if (inputRawOption.hasOwnProperty("throttle")) {
this._autoThrottle = false;
}
if (this._autoThrottle) {
var globalOption = this.ecModel.option;
this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 100 : 20;
}
};
DataZoomModel2.prototype._updateRangeUse = function(inputRawOption) {
var rangePropMode = this._rangePropMode;
var rangeModeInOption = this.get("rangeMode");
each$f([["start", "startValue"], ["end", "endValue"]], function(names, index) {
var percentSpecified = inputRawOption[names[0]] != null;
var valueSpecified = inputRawOption[names[1]] != null;
if (percentSpecified && !valueSpecified) {
rangePropMode[index] = "percent";
} else if (!percentSpecified && valueSpecified) {
rangePropMode[index] = "value";
} else if (rangeModeInOption) {
rangePropMode[index] = rangeModeInOption[index];
} else if (percentSpecified) {
rangePropMode[index] = "percent";
}
});
};
DataZoomModel2.prototype.noTarget = function() {
return this._noTarget;
};
DataZoomModel2.prototype.getFirstTargetAxisModel = function() {
var firstAxisModel;
this.eachTargetAxis(function(axisDim, axisIndex) {
if (firstAxisModel == null) {
firstAxisModel = this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex);
}
}, this);
return firstAxisModel;
};
DataZoomModel2.prototype.eachTargetAxis = function(callback, context) {
this._targetAxisInfoMap.each(function(axisInfo, axisDim) {
each$f(axisInfo.indexList, function(axisIndex) {
callback.call(context, axisDim, axisIndex);
});
});
};
DataZoomModel2.prototype.getAxisProxy = function(axisDim, axisIndex) {
var axisModel = this.getAxisModel(axisDim, axisIndex);
if (axisModel) {
return axisModel.__dzAxisProxy;
}
};
DataZoomModel2.prototype.getAxisModel = function(axisDim, axisIndex) {
var axisInfo = this._targetAxisInfoMap.get(axisDim);
if (axisInfo && axisInfo.indexMap[axisIndex]) {
return this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex);
}
};
DataZoomModel2.prototype.setRawRange = function(opt) {
var thisOption = this.option;
var settledOption = this.settledOption;
each$f([["start", "startValue"], ["end", "endValue"]], function(names) {
if (opt[names[0]] != null || opt[names[1]] != null) {
thisOption[names[0]] = settledOption[names[0]] = opt[names[0]];
thisOption[names[1]] = settledOption[names[1]] = opt[names[1]];
}
}, this);
this._updateRangeUse(opt);
};
DataZoomModel2.prototype.setCalculatedRange = function(opt) {
var option = this.option;
each$f(["start", "startValue", "end", "endValue"], function(name) {
option[name] = opt[name];
});
};
DataZoomModel2.prototype.getPercentRange = function() {
var axisProxy = this.findRepresentativeAxisProxy();
if (axisProxy) {
return axisProxy.getDataPercentWindow();
}
};
DataZoomModel2.prototype.getValueRange = function(axisDim, axisIndex) {
if (axisDim == null && axisIndex == null) {
var axisProxy = this.findRepresentativeAxisProxy();
if (axisProxy) {
return axisProxy.getDataValueWindow();
}
} else {
return this.getAxisProxy(axisDim, axisIndex).getDataValueWindow();
}
};
DataZoomModel2.prototype.findRepresentativeAxisProxy = function(axisModel) {
if (axisModel) {
return axisModel.__dzAxisProxy;
}
var firstProxy;
var axisDimList = this._targetAxisInfoMap.keys();
for (var i = 0; i < axisDimList.length; i++) {
var axisDim = axisDimList[i];
var axisInfo = this._targetAxisInfoMap.get(axisDim);
for (var j = 0; j < axisInfo.indexList.length; j++) {
var proxy = this.getAxisProxy(axisDim, axisInfo.indexList[j]);
if (proxy.hostedBy(this)) {
return proxy;
}
if (!firstProxy) {
firstProxy = proxy;
}
}
}
return firstProxy;
};
DataZoomModel2.prototype.getRangePropMode = function() {
return this._rangePropMode.slice();
};
DataZoomModel2.prototype.getOrient = function() {
return this._orient;
};
DataZoomModel2.type = "dataZoom";
DataZoomModel2.dependencies = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "series", "toolbox"];
DataZoomModel2.defaultOption = {
// zlevel: 0,
z: 4,
filterMode: "filter",
start: 0,
end: 100
};
return DataZoomModel2;
})(ComponentModel)
);
function retrieveRawOption(option) {
var ret = {};
each$f(["start", "end", "startValue", "endValue", "throttle"], function(name) {
option.hasOwnProperty(name) && (ret[name] = option[name]);
});
return ret;
}
var SelectDataZoomModel = (
/** @class */
(function(_super) {
__extends(SelectDataZoomModel2, _super);
function SelectDataZoomModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SelectDataZoomModel2.type;
return _this;
}
SelectDataZoomModel2.type = "dataZoom.select";
return SelectDataZoomModel2;
})(DataZoomModel)
);
var DataZoomView = (
/** @class */
(function(_super) {
__extends(DataZoomView2, _super);
function DataZoomView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = DataZoomView2.type;
return _this;
}
DataZoomView2.prototype.render = function(dataZoomModel, ecModel, api, payload) {
this.dataZoomModel = dataZoomModel;
this.ecModel = ecModel;
this.api = api;
};
DataZoomView2.type = "dataZoom";
return DataZoomView2;
})(ComponentView)
);
var SelectDataZoomView = (
/** @class */
(function(_super) {
__extends(SelectDataZoomView2, _super);
function SelectDataZoomView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SelectDataZoomView2.type;
return _this;
}
SelectDataZoomView2.type = "dataZoom.select";
return SelectDataZoomView2;
})(DataZoomView)
);
var each$7 = each$f;
var asc$1 = asc$2;
var AxisProxy = (
/** @class */
(function() {
function AxisProxy2(dimName, axisIndex, dataZoomModel, ecModel) {
this._dimName = dimName;
this._axisIndex = axisIndex;
this.ecModel = ecModel;
this._dataZoomModel = dataZoomModel;
}
AxisProxy2.prototype.hostedBy = function(dataZoomModel) {
return this._dataZoomModel === dataZoomModel;
};
AxisProxy2.prototype.getDataValueWindow = function() {
return this._valueWindow.slice();
};
AxisProxy2.prototype.getDataPercentWindow = function() {
return this._percentWindow.slice();
};
AxisProxy2.prototype.getTargetSeriesModels = function() {
var seriesModels = [];
this.ecModel.eachSeries(function(seriesModel) {
if (isCoordSupported(seriesModel)) {
var axisMainType = getAxisMainType(this._dimName);
var axisModel = seriesModel.getReferringComponents(axisMainType, SINGLE_REFERRING).models[0];
if (axisModel && this._axisIndex === axisModel.componentIndex) {
seriesModels.push(seriesModel);
}
}
}, this);
return seriesModels;
};
AxisProxy2.prototype.getAxisModel = function() {
return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex);
};
AxisProxy2.prototype.getMinMaxSpan = function() {
return clone$1(this._minMaxSpan);
};
AxisProxy2.prototype.calculateDataWindow = function(opt) {
var dataExtent = this._dataExtent;
var axisModel = this.getAxisModel();
var scale2 = axisModel.axis.scale;
var rangePropMode = this._dataZoomModel.getRangePropMode();
var percentExtent = [0, 100];
var percentWindow = [];
var valueWindow = [];
var hasPropModeValue;
each$7(["start", "end"], function(prop, idx) {
var boundPercent = opt[prop];
var boundValue = opt[prop + "Value"];
if (rangePropMode[idx] === "percent") {
boundPercent == null && (boundPercent = percentExtent[idx]);
boundValue = scale2.parse(linearMap$2(boundPercent, percentExtent, dataExtent));
} else {
hasPropModeValue = true;
boundValue = boundValue == null ? dataExtent[idx] : scale2.parse(boundValue);
boundPercent = linearMap$2(boundValue, dataExtent, percentExtent);
}
valueWindow[idx] = boundValue == null || isNaN(boundValue) ? dataExtent[idx] : boundValue;
percentWindow[idx] = boundPercent == null || isNaN(boundPercent) ? percentExtent[idx] : boundPercent;
});
asc$1(valueWindow);
asc$1(percentWindow);
var spans = this._minMaxSpan;
hasPropModeValue ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false) : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true);
function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) {
var suffix = toValue ? "Span" : "ValueSpan";
sliderMove(0, fromWindow, fromExtent, "all", spans["min" + suffix], spans["max" + suffix]);
for (var i = 0; i < 2; i++) {
toWindow[i] = linearMap$2(fromWindow[i], fromExtent, toExtent, true);
toValue && (toWindow[i] = scale2.parse(toWindow[i]));
}
}
return {
valueWindow,
percentWindow
};
};
AxisProxy2.prototype.reset = function(dataZoomModel) {
if (dataZoomModel !== this._dataZoomModel) {
return;
}
var targetSeries = this.getTargetSeriesModels();
this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries);
this._updateMinMaxSpan();
var dataWindow = this.calculateDataWindow(dataZoomModel.settledOption);
this._valueWindow = dataWindow.valueWindow;
this._percentWindow = dataWindow.percentWindow;
this._setAxisModel();
};
AxisProxy2.prototype.filterData = function(dataZoomModel, api) {
if (dataZoomModel !== this._dataZoomModel) {
return;
}
var axisDim = this._dimName;
var seriesModels = this.getTargetSeriesModels();
var filterMode = dataZoomModel.get("filterMode");
var valueWindow = this._valueWindow;
if (filterMode === "none") {
return;
}
each$7(seriesModels, function(seriesModel) {
var seriesData = seriesModel.getData();
var dataDims = seriesData.mapDimensionsAll(axisDim);
if (!dataDims.length) {
return;
}
if (filterMode === "weakFilter") {
var store_1 = seriesData.getStore();
var dataDimIndices_1 = map$1(dataDims, function(dim) {
return seriesData.getDimensionIndex(dim);
}, seriesData);
seriesData.filterSelf(function(dataIndex) {
var leftOut;
var rightOut;
var hasValue;
for (var i = 0; i < dataDims.length; i++) {
var value = store_1.get(dataDimIndices_1[i], dataIndex);
var thisHasValue = !isNaN(value);
var thisLeftOut = value < valueWindow[0];
var thisRightOut = value > valueWindow[1];
if (thisHasValue && !thisLeftOut && !thisRightOut) {
return true;
}
thisHasValue && (hasValue = true);
thisLeftOut && (leftOut = true);
thisRightOut && (rightOut = true);
}
return hasValue && leftOut && rightOut;
});
} else {
each$7(dataDims, function(dim) {
if (filterMode === "empty") {
seriesModel.setData(seriesData = seriesData.map(dim, function(value) {
return !isInWindow(value) ? NaN : value;
}));
} else {
var range = {};
range[dim] = valueWindow;
seriesData.selectRange(range);
}
});
}
each$7(dataDims, function(dim) {
seriesData.setApproximateExtent(valueWindow, dim);
});
});
function isInWindow(value) {
return value >= valueWindow[0] && value <= valueWindow[1];
}
};
AxisProxy2.prototype._updateMinMaxSpan = function() {
var minMaxSpan = this._minMaxSpan = {};
var dataZoomModel = this._dataZoomModel;
var dataExtent = this._dataExtent;
each$7(["min", "max"], function(minMax) {
var percentSpan = dataZoomModel.get(minMax + "Span");
var valueSpan = dataZoomModel.get(minMax + "ValueSpan");
valueSpan != null && (valueSpan = this.getAxisModel().axis.scale.parse(valueSpan));
if (valueSpan != null) {
percentSpan = linearMap$2(dataExtent[0] + valueSpan, dataExtent, [0, 100], true);
} else if (percentSpan != null) {
valueSpan = linearMap$2(percentSpan, [0, 100], dataExtent, true) - dataExtent[0];
}
minMaxSpan[minMax + "Span"] = percentSpan;
minMaxSpan[minMax + "ValueSpan"] = valueSpan;
}, this);
};
AxisProxy2.prototype._setAxisModel = function() {
var axisModel = this.getAxisModel();
var percentWindow = this._percentWindow;
var valueWindow = this._valueWindow;
if (!percentWindow) {
return;
}
var precision = getPixelPrecision(valueWindow, [0, 500]);
precision = Math.min(precision, 20);
var rawExtentInfo = axisModel.axis.scale.rawExtentInfo;
if (percentWindow[0] !== 0) {
rawExtentInfo.setDeterminedMinMax("min", +valueWindow[0].toFixed(precision));
}
if (percentWindow[1] !== 100) {
rawExtentInfo.setDeterminedMinMax("max", +valueWindow[1].toFixed(precision));
}
rawExtentInfo.freeze();
};
return AxisProxy2;
})()
);
function calculateDataExtent(axisProxy, axisDim, seriesModels) {
var dataExtent = [Infinity, -Infinity];
each$7(seriesModels, function(seriesModel) {
unionAxisExtentFromData(dataExtent, seriesModel.getData(), axisDim);
});
var axisModel = axisProxy.getAxisModel();
var rawExtentResult = ensureScaleRawExtentInfo(axisModel.axis.scale, axisModel, dataExtent).calculate();
return [rawExtentResult.min, rawExtentResult.max];
}
var dataZoomProcessor = {
// `dataZoomProcessor` will only be performed in needed series. Consider if
// there is a line series and a pie series, it is better not to update the
// line series if only pie series is needed to be updated.
getTargetSeries: function(ecModel) {
function eachAxisModel(cb) {
ecModel.eachComponent("dataZoom", function(dataZoomModel) {
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex);
cb(axisDim, axisIndex, axisModel, dataZoomModel);
});
});
}
eachAxisModel(function(axisDim, axisIndex, axisModel, dataZoomModel) {
axisModel.__dzAxisProxy = null;
});
var proxyList = [];
eachAxisModel(function(axisDim, axisIndex, axisModel, dataZoomModel) {
if (!axisModel.__dzAxisProxy) {
axisModel.__dzAxisProxy = new AxisProxy(axisDim, axisIndex, dataZoomModel, ecModel);
proxyList.push(axisModel.__dzAxisProxy);
}
});
var seriesModelMap = createHashMap();
each$f(proxyList, function(axisProxy) {
each$f(axisProxy.getTargetSeriesModels(), function(seriesModel) {
seriesModelMap.set(seriesModel.uid, seriesModel);
});
});
return seriesModelMap;
},
// Consider appendData, where filter should be performed. Because data process is
// in block mode currently, it is not need to worry about that the overallProgress
// execute every frame.
overallReset: function(ecModel, api) {
ecModel.eachComponent("dataZoom", function(dataZoomModel) {
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
dataZoomModel.getAxisProxy(axisDim, axisIndex).reset(dataZoomModel);
});
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
dataZoomModel.getAxisProxy(axisDim, axisIndex).filterData(dataZoomModel, api);
});
});
ecModel.eachComponent("dataZoom", function(dataZoomModel) {
var axisProxy = dataZoomModel.findRepresentativeAxisProxy();
if (axisProxy) {
var percentRange = axisProxy.getDataPercentWindow();
var valueRange = axisProxy.getDataValueWindow();
dataZoomModel.setCalculatedRange({
start: percentRange[0],
end: percentRange[1],
startValue: valueRange[0],
endValue: valueRange[1]
});
}
});
}
};
function installDataZoomAction(registers) {
registers.registerAction("dataZoom", function(payload, ecModel) {
var effectedModels = findEffectedDataZooms(ecModel, payload);
each$f(effectedModels, function(dataZoomModel) {
dataZoomModel.setRawRange({
start: payload.start,
end: payload.end,
startValue: payload.startValue,
endValue: payload.endValue
});
});
});
}
var installed$1 = false;
function installCommon$1(registers) {
if (installed$1) {
return;
}
installed$1 = true;
registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, dataZoomProcessor);
installDataZoomAction(registers);
registers.registerSubTypeDefaulter("dataZoom", function() {
return "slider";
});
}
function install$m(registers) {
registers.registerComponentModel(SelectDataZoomModel);
registers.registerComponentView(SelectDataZoomView);
installCommon$1(registers);
}
var ToolboxFeature = (
/** @class */
/* @__PURE__ */ (function() {
function ToolboxFeature2() {
}
return ToolboxFeature2;
})()
);
var features = {};
function registerFeature(name, ctor) {
features[name] = ctor;
}
function getFeature(name) {
return features[name];
}
var ToolboxModel = (
/** @class */
(function(_super) {
__extends(ToolboxModel2, _super);
function ToolboxModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ToolboxModel2.type;
return _this;
}
ToolboxModel2.prototype.optionUpdated = function() {
_super.prototype.optionUpdated.apply(this, arguments);
var ecModel = this.ecModel;
each$f(this.option.feature, function(featureOpt, featureName) {
var Feature = getFeature(featureName);
if (Feature) {
if (Feature.getDefaultOption) {
Feature.defaultOption = Feature.getDefaultOption(ecModel);
}
merge(featureOpt, Feature.defaultOption);
}
});
};
ToolboxModel2.type = "toolbox";
ToolboxModel2.layoutMode = {
type: "box",
ignoreSize: true
};
ToolboxModel2.defaultOption = {
show: true,
z: 6,
// zlevel: 0,
orient: "horizontal",
left: "right",
top: "top",
// right
// bottom
backgroundColor: "transparent",
borderColor: "#ccc",
borderRadius: 0,
borderWidth: 0,
padding: 5,
itemSize: 15,
itemGap: 8,
showTitle: true,
iconStyle: {
borderColor: "#666",
color: "none"
},
emphasis: {
iconStyle: {
borderColor: "#3E98C5"
}
},
// textStyle: {},
// feature
tooltip: {
show: false,
position: "bottom"
}
};
return ToolboxModel2;
})(ComponentModel)
);
function layout(group, componentModel, api) {
var boxLayoutParams = componentModel.getBoxLayoutParams();
var padding = componentModel.get("padding");
var viewportSize = {
width: api.getWidth(),
height: api.getHeight()
};
var rect = getLayoutRect(boxLayoutParams, viewportSize, padding);
box(componentModel.get("orient"), group, componentModel.get("itemGap"), rect.width, rect.height);
positionElement(group, boxLayoutParams, viewportSize, padding);
}
function makeBackground(rect, componentModel) {
var padding = normalizeCssArray(componentModel.get("padding"));
var style = componentModel.getItemStyle(["color", "opacity"]);
style.fill = componentModel.get("backgroundColor");
rect = new Rect$2({
shape: {
x: rect.x - padding[3],
y: rect.y - padding[0],
width: rect.width + padding[1] + padding[3],
height: rect.height + padding[0] + padding[2],
r: componentModel.get("borderRadius")
},
style,
silent: true,
z2: -1
});
return rect;
}
var ToolboxView = (
/** @class */
(function(_super) {
__extends(ToolboxView2, _super);
function ToolboxView2() {
return _super !== null && _super.apply(this, arguments) || this;
}
ToolboxView2.prototype.render = function(toolboxModel, ecModel, api, payload) {
var group = this.group;
group.removeAll();
if (!toolboxModel.get("show")) {
return;
}
var itemSize = +toolboxModel.get("itemSize");
var isVertical = toolboxModel.get("orient") === "vertical";
var featureOpts = toolboxModel.get("feature") || {};
var features2 = this._features || (this._features = {});
var featureNames = [];
each$f(featureOpts, function(opt, name) {
featureNames.push(name);
});
new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(curry$1(processFeature, null)).execute();
this._featureNames = featureNames;
function processFeature(newIndex, oldIndex) {
var featureName = featureNames[newIndex];
var oldName = featureNames[oldIndex];
var featureOpt = featureOpts[featureName];
var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);
var feature;
if (payload && payload.newTitle != null && payload.featureName === featureName) {
featureOpt.title = payload.newTitle;
}
if (featureName && !oldName) {
if (isUserFeatureName(featureName)) {
feature = {
onclick: featureModel.option.onclick,
featureName
};
} else {
var Feature = getFeature(featureName);
if (!Feature) {
return;
}
feature = new Feature();
}
features2[featureName] = feature;
} else {
feature = features2[oldName];
if (!feature) {
return;
}
}
feature.uid = getUID("toolbox-feature");
feature.model = featureModel;
feature.ecModel = ecModel;
feature.api = api;
var isToolboxFeature = feature instanceof ToolboxFeature;
if (!featureName && oldName) {
isToolboxFeature && feature.dispose && feature.dispose(ecModel, api);
return;
}
if (!featureModel.get("show") || isToolboxFeature && feature.unusable) {
isToolboxFeature && feature.remove && feature.remove(ecModel, api);
return;
}
createIconPaths(featureModel, feature, featureName);
featureModel.setIconStatus = function(iconName, status) {
var option = this.option;
var iconPaths = this.iconPaths;
option.iconStatus = option.iconStatus || {};
option.iconStatus[iconName] = status;
if (iconPaths[iconName]) {
(status === "emphasis" ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]);
}
};
if (feature instanceof ToolboxFeature) {
if (feature.render) {
feature.render(featureModel, ecModel, api, payload);
}
}
}
function createIconPaths(featureModel, feature, featureName) {
var iconStyleModel = featureModel.getModel("iconStyle");
var iconStyleEmphasisModel = featureModel.getModel(["emphasis", "iconStyle"]);
var icons = feature instanceof ToolboxFeature && feature.getIcons ? feature.getIcons() : featureModel.get("icon");
var titles = featureModel.get("title") || {};
var iconsMap;
var titlesMap;
if (isString(icons)) {
iconsMap = {};
iconsMap[featureName] = icons;
} else {
iconsMap = icons;
}
if (isString(titles)) {
titlesMap = {};
titlesMap[featureName] = titles;
} else {
titlesMap = titles;
}
var iconPaths = featureModel.iconPaths = {};
each$f(iconsMap, function(iconStr, iconName) {
var path = createIcon(iconStr, {}, {
x: -itemSize / 2,
y: -itemSize / 2,
width: itemSize,
height: itemSize
});
path.setStyle(iconStyleModel.getItemStyle());
var pathEmphasisState = path.ensureState("emphasis");
pathEmphasisState.style = iconStyleEmphasisModel.getItemStyle();
var textContent = new ZRText({
style: {
text: titlesMap[iconName],
align: iconStyleEmphasisModel.get("textAlign"),
borderRadius: iconStyleEmphasisModel.get("textBorderRadius"),
padding: iconStyleEmphasisModel.get("textPadding"),
fill: null,
font: getFont({
fontStyle: iconStyleEmphasisModel.get("textFontStyle"),
fontFamily: iconStyleEmphasisModel.get("textFontFamily"),
fontSize: iconStyleEmphasisModel.get("textFontSize"),
fontWeight: iconStyleEmphasisModel.get("textFontWeight")
}, ecModel)
},
ignore: true
});
path.setTextContent(textContent);
setTooltipConfig({
el: path,
componentModel: toolboxModel,
itemName: iconName,
formatterParamsExtra: {
title: titlesMap[iconName]
}
});
path.__title = titlesMap[iconName];
path.on("mouseover", function() {
var hoverStyle = iconStyleEmphasisModel.getItemStyle();
var defaultTextPosition = isVertical ? toolboxModel.get("right") == null && toolboxModel.get("left") !== "right" ? "right" : "left" : toolboxModel.get("bottom") == null && toolboxModel.get("top") !== "bottom" ? "bottom" : "top";
textContent.setStyle({
fill: iconStyleEmphasisModel.get("textFill") || hoverStyle.fill || hoverStyle.stroke || "#000",
backgroundColor: iconStyleEmphasisModel.get("textBackgroundColor")
});
path.setTextConfig({
position: iconStyleEmphasisModel.get("textPosition") || defaultTextPosition
});
textContent.ignore = !toolboxModel.get("showTitle");
api.enterEmphasis(this);
}).on("mouseout", function() {
if (featureModel.get(["iconStatus", iconName]) !== "emphasis") {
api.leaveEmphasis(this);
}
textContent.hide();
});
(featureModel.get(["iconStatus", iconName]) === "emphasis" ? enterEmphasis : leaveEmphasis)(path);
group.add(path);
path.on("click", bind$1(feature.onclick, feature, ecModel, api, iconName));
iconPaths[iconName] = path;
});
}
layout(group, toolboxModel, api);
group.add(makeBackground(group.getBoundingRect(), toolboxModel));
isVertical || group.eachChild(function(icon) {
var titleText = icon.__title;
var emphasisState = icon.ensureState("emphasis");
var emphasisTextConfig = emphasisState.textConfig || (emphasisState.textConfig = {});
var textContent = icon.getTextContent();
var emphasisTextState = textContent && textContent.ensureState("emphasis");
if (emphasisTextState && !isFunction(emphasisTextState) && titleText) {
var emphasisTextStyle = emphasisTextState.style || (emphasisTextState.style = {});
var rect = getBoundingRect(titleText, ZRText.makeFont(emphasisTextStyle));
var offsetX = icon.x + group.x;
var offsetY = icon.y + group.y + itemSize;
var needPutOnTop = false;
if (offsetY + rect.height > api.getHeight()) {
emphasisTextConfig.position = "top";
needPutOnTop = true;
}
var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 10;
if (offsetX + rect.width / 2 > api.getWidth()) {
emphasisTextConfig.position = ["100%", topOffset];
emphasisTextStyle.align = "right";
} else if (offsetX - rect.width / 2 < 0) {
emphasisTextConfig.position = [0, topOffset];
emphasisTextStyle.align = "left";
}
}
});
};
ToolboxView2.prototype.updateView = function(toolboxModel, ecModel, api, payload) {
each$f(this._features, function(feature) {
feature instanceof ToolboxFeature && feature.updateView && feature.updateView(feature.model, ecModel, api, payload);
});
};
ToolboxView2.prototype.remove = function(ecModel, api) {
each$f(this._features, function(feature) {
feature instanceof ToolboxFeature && feature.remove && feature.remove(ecModel, api);
});
this.group.removeAll();
};
ToolboxView2.prototype.dispose = function(ecModel, api) {
each$f(this._features, function(feature) {
feature instanceof ToolboxFeature && feature.dispose && feature.dispose(ecModel, api);
});
};
ToolboxView2.type = "toolbox";
return ToolboxView2;
})(ComponentView)
);
function isUserFeatureName(featureName) {
return featureName.indexOf("my") === 0;
}
var SaveAsImage = (
/** @class */
(function(_super) {
__extends(SaveAsImage2, _super);
function SaveAsImage2() {
return _super !== null && _super.apply(this, arguments) || this;
}
SaveAsImage2.prototype.onclick = function(ecModel, api) {
var model = this.model;
var title = model.get("name") || ecModel.get("title.0.text") || "echarts";
var isSvg = api.getZr().painter.getType() === "svg";
var type = isSvg ? "svg" : model.get("type", true) || "png";
var url = api.getConnectedDataURL({
type,
backgroundColor: model.get("backgroundColor", true) || ecModel.get("backgroundColor") || "#fff",
connectedBackgroundColor: model.get("connectedBackgroundColor"),
excludeComponents: model.get("excludeComponents"),
pixelRatio: model.get("pixelRatio")
});
var browser = env.browser;
if (typeof MouseEvent === "function" && (browser.newEdge || !browser.ie && !browser.edge)) {
var $a = document.createElement("a");
$a.download = title + "." + type;
$a.target = "_blank";
$a.href = url;
var evt = new MouseEvent("click", {
// some micro front-end framework, window maybe is a Proxy
view: document.defaultView,
bubbles: true,
cancelable: false
});
$a.dispatchEvent(evt);
} else {
if (window.navigator.msSaveOrOpenBlob || isSvg) {
var parts = url.split(",");
var base64Encoded = parts[0].indexOf("base64") > -1;
var bstr = isSvg ? decodeURIComponent(parts[1]) : parts[1];
base64Encoded && (bstr = window.atob(bstr));
var filename = title + "." + type;
if (window.navigator.msSaveOrOpenBlob) {
var n = bstr.length;
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
var blob = new Blob([u8arr]);
window.navigator.msSaveOrOpenBlob(blob, filename);
} else {
var frame = document.createElement("iframe");
document.body.appendChild(frame);
var cw = frame.contentWindow;
var doc = cw.document;
doc.open("image/svg+xml", "replace");
doc.write(bstr);
doc.close();
cw.focus();
doc.execCommand("SaveAs", true, filename);
document.body.removeChild(frame);
}
} else {
var lang = model.get("lang");
var html = '
';
var tab = window.open();
tab.document.write(html);
tab.document.title = title;
}
}
};
SaveAsImage2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",
title: ecModel.getLocaleModel().get(["toolbox", "saveAsImage", "title"]),
type: "png",
// Default use option.backgroundColor
// backgroundColor: '#fff',
connectedBackgroundColor: "#fff",
name: "",
excludeComponents: ["toolbox"],
// use current pixel ratio of device by default
// pixelRatio: 1,
lang: ecModel.getLocaleModel().get(["toolbox", "saveAsImage", "lang"])
};
return defaultOption2;
};
return SaveAsImage2;
})(ToolboxFeature)
);
var INNER_STACK_KEYWORD = "__ec_magicType_stack__";
var radioTypes = [["line", "bar"], ["stack"]];
var MagicType = (
/** @class */
(function(_super) {
__extends(MagicType2, _super);
function MagicType2() {
return _super !== null && _super.apply(this, arguments) || this;
}
MagicType2.prototype.getIcons = function() {
var model = this.model;
var availableIcons = model.get("icon");
var icons = {};
each$f(model.get("type"), function(type) {
if (availableIcons[type]) {
icons[type] = availableIcons[type];
}
});
return icons;
};
MagicType2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
type: [],
// Icon group
icon: {
line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",
bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",
// eslint-disable-next-line
stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"
// jshint ignore:line
},
// `line`, `bar`, `stack`, `tiled`
title: ecModel.getLocaleModel().get(["toolbox", "magicType", "title"]),
option: {},
seriesIndex: {}
};
return defaultOption2;
};
MagicType2.prototype.onclick = function(ecModel, api, type) {
var model = this.model;
var seriesIndex = model.get(["seriesIndex", type]);
if (!seriesOptGenreator[type]) {
return;
}
var newOption = {
series: []
};
var generateNewSeriesTypes = function(seriesModel) {
var seriesType2 = seriesModel.subType;
var seriesId = seriesModel.id;
var newSeriesOpt = seriesOptGenreator[type](seriesType2, seriesId, seriesModel, model);
if (newSeriesOpt) {
defaults(newSeriesOpt, seriesModel.option);
newOption.series.push(newSeriesOpt);
}
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.type === "cartesian2d" && (type === "line" || type === "bar")) {
var categoryAxis2 = coordSys.getAxesByScale("ordinal")[0];
if (categoryAxis2) {
var axisDim = categoryAxis2.dim;
var axisType = axisDim + "Axis";
var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0];
var axisIndex = axisModel.componentIndex;
newOption[axisType] = newOption[axisType] || [];
for (var i = 0; i <= axisIndex; i++) {
newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};
}
newOption[axisType][axisIndex].boundaryGap = type === "bar";
}
}
};
each$f(radioTypes, function(radio) {
if (indexOf(radio, type) >= 0) {
each$f(radio, function(item) {
model.setIconStatus(item, "normal");
});
}
});
model.setIconStatus(type, "emphasis");
ecModel.eachComponent({
mainType: "series",
query: seriesIndex == null ? null : {
seriesIndex
}
}, generateNewSeriesTypes);
var newTitle;
var currentType = type;
if (type === "stack") {
newTitle = merge({
stack: model.option.title.tiled,
tiled: model.option.title.stack
}, model.option.title);
if (model.get(["iconStatus", type]) !== "emphasis") {
currentType = "tiled";
}
}
api.dispatchAction({
type: "changeMagicType",
currentType,
newOption,
newTitle,
featureName: "magicType"
});
};
return MagicType2;
})(ToolboxFeature)
);
var seriesOptGenreator = {
"line": function(seriesType2, seriesId, seriesModel, model) {
if (seriesType2 === "bar") {
return merge({
id: seriesId,
type: "line",
// Preserve data related option
data: seriesModel.get("data"),
stack: seriesModel.get("stack"),
markPoint: seriesModel.get("markPoint"),
markLine: seriesModel.get("markLine")
}, model.get(["option", "line"]) || {}, true);
}
},
"bar": function(seriesType2, seriesId, seriesModel, model) {
if (seriesType2 === "line") {
return merge({
id: seriesId,
type: "bar",
// Preserve data related option
data: seriesModel.get("data"),
stack: seriesModel.get("stack"),
markPoint: seriesModel.get("markPoint"),
markLine: seriesModel.get("markLine")
}, model.get(["option", "bar"]) || {}, true);
}
},
"stack": function(seriesType2, seriesId, seriesModel, model) {
var isStack = seriesModel.get("stack") === INNER_STACK_KEYWORD;
if (seriesType2 === "line" || seriesType2 === "bar") {
model.setIconStatus("stack", isStack ? "normal" : "emphasis");
return merge({
id: seriesId,
stack: isStack ? "" : INNER_STACK_KEYWORD
}, model.get(["option", "stack"]) || {}, true);
}
}
};
registerAction({
type: "changeMagicType",
event: "magicTypeChanged",
update: "prepareAndUpdate"
}, function(payload, ecModel) {
ecModel.mergeOption(payload.newOption);
});
var BLOCK_SPLITER = new Array(60).join("-");
var ITEM_SPLITER = " ";
function groupSeries(ecModel) {
var seriesGroupByCategoryAxis = {};
var otherSeries = [];
var meta = [];
ecModel.eachRawSeries(function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && (coordSys.type === "cartesian2d" || coordSys.type === "polar")) {
var baseAxis = coordSys.getBaseAxis();
if (baseAxis.type === "category") {
var key = baseAxis.dim + "_" + baseAxis.index;
if (!seriesGroupByCategoryAxis[key]) {
seriesGroupByCategoryAxis[key] = {
categoryAxis: baseAxis,
valueAxis: coordSys.getOtherAxis(baseAxis),
series: []
};
meta.push({
axisDim: baseAxis.dim,
axisIndex: baseAxis.index
});
}
seriesGroupByCategoryAxis[key].series.push(seriesModel);
} else {
otherSeries.push(seriesModel);
}
} else {
otherSeries.push(seriesModel);
}
});
return {
seriesGroupByCategoryAxis,
other: otherSeries,
meta
};
}
function assembleSeriesWithCategoryAxis(groups) {
var tables = [];
each$f(groups, function(group, key) {
var categoryAxis2 = group.categoryAxis;
var valueAxis2 = group.valueAxis;
var valueAxisDim = valueAxis2.dim;
var headers = [" "].concat(map$1(group.series, function(series) {
return series.name;
}));
var columns = [categoryAxis2.model.getCategories()];
each$f(group.series, function(series) {
var rawData = series.getRawData();
columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function(val) {
return val;
}));
});
var lines = [headers.join(ITEM_SPLITER)];
for (var i = 0; i < columns[0].length; i++) {
var items = [];
for (var j = 0; j < columns.length; j++) {
items.push(columns[j][i]);
}
lines.push(items.join(ITEM_SPLITER));
}
tables.push(lines.join("\n"));
});
return tables.join("\n\n" + BLOCK_SPLITER + "\n\n");
}
function assembleOtherSeries(series) {
return map$1(series, function(series2) {
var data = series2.getRawData();
var lines = [series2.name];
var vals = [];
data.each(data.dimensions, function() {
var argLen = arguments.length;
var dataIndex = arguments[argLen - 1];
var name = data.getName(dataIndex);
for (var i = 0; i < argLen - 1; i++) {
vals[i] = arguments[i];
}
lines.push((name ? name + ITEM_SPLITER : "") + vals.join(ITEM_SPLITER));
});
return lines.join("\n");
}).join("\n\n" + BLOCK_SPLITER + "\n\n");
}
function getContentFromModel(ecModel) {
var result = groupSeries(ecModel);
return {
value: filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function(str) {
return !!str.replace(/[\n\t\s]/g, "");
}).join("\n\n" + BLOCK_SPLITER + "\n\n"),
meta: result.meta
};
}
function trim(str) {
return str.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
}
function isTSVFormat(block) {
var firstLine = block.slice(0, block.indexOf("\n"));
if (firstLine.indexOf(ITEM_SPLITER) >= 0) {
return true;
}
}
var itemSplitRegex = new RegExp("[" + ITEM_SPLITER + "]+", "g");
function parseTSVContents(tsv) {
var tsvLines = tsv.split(/\n+/g);
var headers = trim(tsvLines.shift()).split(itemSplitRegex);
var categories = [];
var series = map$1(headers, function(header) {
return {
name: header,
data: []
};
});
for (var i = 0; i < tsvLines.length; i++) {
var items = trim(tsvLines[i]).split(itemSplitRegex);
categories.push(items.shift());
for (var j = 0; j < items.length; j++) {
series[j] && (series[j].data[i] = items[j]);
}
}
return {
series,
categories
};
}
function parseListContents(str) {
var lines = str.split(/\n+/g);
var seriesName = trim(lines.shift());
var data = [];
for (var i = 0; i < lines.length; i++) {
var line = trim(lines[i]);
if (!line) {
continue;
}
var items = line.split(itemSplitRegex);
var name_1 = "";
var value = void 0;
var hasName = false;
if (isNaN(items[0])) {
hasName = true;
name_1 = items[0];
items = items.slice(1);
data[i] = {
name: name_1,
value: []
};
value = data[i].value;
} else {
value = data[i] = [];
}
for (var j = 0; j < items.length; j++) {
value.push(+items[j]);
}
if (value.length === 1) {
hasName ? data[i].value = value[0] : data[i] = value[0];
}
}
return {
name: seriesName,
data
};
}
function parseContents(str, blockMetaList) {
var blocks = str.split(new RegExp("\n*" + BLOCK_SPLITER + "\n*", "g"));
var newOption = {
series: []
};
each$f(blocks, function(block, idx) {
if (isTSVFormat(block)) {
var result = parseTSVContents(block);
var blockMeta = blockMetaList[idx];
var axisKey = blockMeta.axisDim + "Axis";
if (blockMeta) {
newOption[axisKey] = newOption[axisKey] || [];
newOption[axisKey][blockMeta.axisIndex] = {
data: result.categories
};
newOption.series = newOption.series.concat(result.series);
}
} else {
var result = parseListContents(block);
newOption.series.push(result);
}
});
return newOption;
}
var DataView = (
/** @class */
(function(_super) {
__extends(DataView2, _super);
function DataView2() {
return _super !== null && _super.apply(this, arguments) || this;
}
DataView2.prototype.onclick = function(ecModel, api) {
setTimeout(function() {
api.dispatchAction({
type: "hideTip"
});
});
var container = api.getDom();
var model = this.model;
if (this._dom) {
container.removeChild(this._dom);
}
var root = document.createElement("div");
root.style.cssText = "position:absolute;top:0;bottom:0;left:0;right:0;padding:5px";
root.style.backgroundColor = model.get("backgroundColor") || "#fff";
var header = document.createElement("h4");
var lang = model.get("lang") || [];
header.innerHTML = lang[0] || model.get("title");
header.style.cssText = "margin:10px 20px";
header.style.color = model.get("textColor");
var viewMain = document.createElement("div");
var textarea = document.createElement("textarea");
viewMain.style.cssText = "overflow:auto";
var optionToContent = model.get("optionToContent");
var contentToOption = model.get("contentToOption");
var result = getContentFromModel(ecModel);
if (isFunction(optionToContent)) {
var htmlOrDom = optionToContent(api.getOption());
if (isString(htmlOrDom)) {
viewMain.innerHTML = htmlOrDom;
} else if (isDom(htmlOrDom)) {
viewMain.appendChild(htmlOrDom);
}
} else {
textarea.readOnly = model.get("readOnly");
var style = textarea.style;
style.cssText = "display:block;width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;resize:none;box-sizing:border-box;outline:none";
style.color = model.get("textColor");
style.borderColor = model.get("textareaBorderColor");
style.backgroundColor = model.get("textareaColor");
textarea.value = result.value;
viewMain.appendChild(textarea);
}
var blockMetaList = result.meta;
var buttonContainer = document.createElement("div");
buttonContainer.style.cssText = "position:absolute;bottom:5px;left:0;right:0";
var buttonStyle = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px";
var closeButton = document.createElement("div");
var refreshButton = document.createElement("div");
buttonStyle += ";background-color:" + model.get("buttonColor");
buttonStyle += ";color:" + model.get("buttonTextColor");
var self = this;
function close() {
container.removeChild(root);
self._dom = null;
}
addEventListener(closeButton, "click", close);
addEventListener(refreshButton, "click", function() {
if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) {
close();
return;
}
var newOption;
try {
if (isFunction(contentToOption)) {
newOption = contentToOption(viewMain, api.getOption());
} else {
newOption = parseContents(textarea.value, blockMetaList);
}
} catch (e) {
close();
throw new Error("Data view format error " + e);
}
if (newOption) {
api.dispatchAction({
type: "changeDataView",
newOption
});
}
close();
});
closeButton.innerHTML = lang[1];
refreshButton.innerHTML = lang[2];
refreshButton.style.cssText = closeButton.style.cssText = buttonStyle;
!model.get("readOnly") && buttonContainer.appendChild(refreshButton);
buttonContainer.appendChild(closeButton);
root.appendChild(header);
root.appendChild(viewMain);
root.appendChild(buttonContainer);
viewMain.style.height = container.clientHeight - 80 + "px";
container.appendChild(root);
this._dom = root;
};
DataView2.prototype.remove = function(ecModel, api) {
this._dom && api.getDom().removeChild(this._dom);
};
DataView2.prototype.dispose = function(ecModel, api) {
this.remove(ecModel, api);
};
DataView2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
readOnly: false,
optionToContent: null,
contentToOption: null,
// eslint-disable-next-line
icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",
title: ecModel.getLocaleModel().get(["toolbox", "dataView", "title"]),
lang: ecModel.getLocaleModel().get(["toolbox", "dataView", "lang"]),
backgroundColor: "#fff",
textColor: "#000",
textareaColor: "#fff",
textareaBorderColor: "#333",
buttonColor: "#c23531",
buttonTextColor: "#fff"
};
return defaultOption2;
};
return DataView2;
})(ToolboxFeature)
);
function tryMergeDataOption(newData, originalData) {
return map$1(newData, function(newVal, idx) {
var original = originalData && originalData[idx];
if (isObject$3(original) && !isArray$1(original)) {
var newValIsObject = isObject$3(newVal) && !isArray$1(newVal);
if (!newValIsObject) {
newVal = {
value: newVal
};
}
var shouldDeleteName = original.name != null && newVal.name == null;
newVal = defaults(newVal, original);
shouldDeleteName && delete newVal.name;
return newVal;
} else {
return newVal;
}
});
}
registerAction({
type: "changeDataView",
event: "dataViewChanged",
update: "prepareAndUpdate"
}, function(payload, ecModel) {
var newSeriesOptList = [];
each$f(payload.newOption.series, function(seriesOpt) {
var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];
if (!seriesModel) {
newSeriesOptList.push(extend({
// Default is scatter
type: "scatter"
}, seriesOpt));
} else {
var originalData = seriesModel.get("data");
newSeriesOptList.push({
name: seriesOpt.name,
data: tryMergeDataOption(seriesOpt.data, originalData)
});
}
});
ecModel.mergeOption(defaults({
series: newSeriesOptList
}, payload.newOption));
});
var each$6 = each$f;
var inner$6 = makeInner();
function push(ecModel, newSnapshot) {
var storedSnapshots = getStoreSnapshots(ecModel);
each$6(newSnapshot, function(batchItem, dataZoomId) {
var i = storedSnapshots.length - 1;
for (; i >= 0; i--) {
var snapshot = storedSnapshots[i];
if (snapshot[dataZoomId]) {
break;
}
}
if (i < 0) {
var dataZoomModel = ecModel.queryComponents({
mainType: "dataZoom",
subType: "select",
id: dataZoomId
})[0];
if (dataZoomModel) {
var percentRange = dataZoomModel.getPercentRange();
storedSnapshots[0][dataZoomId] = {
dataZoomId,
start: percentRange[0],
end: percentRange[1]
};
}
}
});
storedSnapshots.push(newSnapshot);
}
function pop(ecModel) {
var storedSnapshots = getStoreSnapshots(ecModel);
var head = storedSnapshots[storedSnapshots.length - 1];
storedSnapshots.length > 1 && storedSnapshots.pop();
var snapshot = {};
each$6(head, function(batchItem, dataZoomId) {
for (var i = storedSnapshots.length - 1; i >= 0; i--) {
batchItem = storedSnapshots[i][dataZoomId];
if (batchItem) {
snapshot[dataZoomId] = batchItem;
break;
}
}
});
return snapshot;
}
function clear(ecModel) {
inner$6(ecModel).snapshots = null;
}
function count(ecModel) {
return getStoreSnapshots(ecModel).length;
}
function getStoreSnapshots(ecModel) {
var store = inner$6(ecModel);
if (!store.snapshots) {
store.snapshots = [{}];
}
return store.snapshots;
}
var RestoreOption = (
/** @class */
(function(_super) {
__extends(RestoreOption2, _super);
function RestoreOption2() {
return _super !== null && _super.apply(this, arguments) || this;
}
RestoreOption2.prototype.onclick = function(ecModel, api) {
clear(ecModel);
api.dispatchAction({
type: "restore",
from: this.uid
});
};
RestoreOption2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
// eslint-disable-next-line
icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",
title: ecModel.getLocaleModel().get(["toolbox", "restore", "title"])
};
return defaultOption2;
};
return RestoreOption2;
})(ToolboxFeature)
);
registerAction({
type: "restore",
event: "restore",
update: "prepareAndUpdate"
}, function(payload, ecModel) {
ecModel.resetOption("recreate");
});
var INCLUDE_FINDER_MAIN_TYPES = ["grid", "xAxis", "yAxis", "geo", "graph", "polar", "radiusAxis", "angleAxis", "bmap"];
var BrushTargetManager = (
/** @class */
(function() {
function BrushTargetManager2(finder, ecModel, opt) {
var _this = this;
this._targetInfoList = [];
var foundCpts = parseFinder(ecModel, finder);
each$f(targetInfoBuilders, function(builder, type) {
if (!opt || !opt.include || indexOf(opt.include, type) >= 0) {
builder(foundCpts, _this._targetInfoList);
}
});
}
BrushTargetManager2.prototype.setOutputRanges = function(areas, ecModel) {
this.matchOutputRanges(areas, ecModel, function(area, coordRange, coordSys) {
(area.coordRanges || (area.coordRanges = [])).push(coordRange);
if (!area.coordRange) {
area.coordRange = coordRange;
var result = coordConvert[area.brushType](0, coordSys, coordRange);
area.__rangeOffset = {
offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),
xyMinMax: result.xyMinMax
};
}
});
return areas;
};
BrushTargetManager2.prototype.matchOutputRanges = function(areas, ecModel, cb) {
each$f(areas, function(area) {
var targetInfo = this.findTargetInfo(area, ecModel);
if (targetInfo && targetInfo !== true) {
each$f(targetInfo.coordSyses, function(coordSys) {
var result = coordConvert[area.brushType](1, coordSys, area.range, true);
cb(area, result.values, coordSys, ecModel);
});
}
}, this);
};
BrushTargetManager2.prototype.setInputRanges = function(areas, ecModel) {
each$f(areas, function(area) {
var targetInfo = this.findTargetInfo(area, ecModel);
area.range = area.range || [];
if (targetInfo && targetInfo !== true) {
area.panelId = targetInfo.panelId;
var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);
var rangeOffset = area.__rangeOffset;
area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values;
}
}, this);
};
BrushTargetManager2.prototype.makePanelOpts = function(api, getDefaultBrushType) {
return map$1(this._targetInfoList, function(targetInfo) {
var rect = targetInfo.getPanelRect();
return {
panelId: targetInfo.panelId,
defaultBrushType: getDefaultBrushType ? getDefaultBrushType(targetInfo) : null,
clipPath: makeRectPanelClipPath(rect),
isTargetByCursor: makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel),
getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect)
};
});
};
BrushTargetManager2.prototype.controlSeries = function(area, seriesModel, ecModel) {
var targetInfo = this.findTargetInfo(area, ecModel);
return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0;
};
BrushTargetManager2.prototype.findTargetInfo = function(area, ecModel) {
var targetInfoList = this._targetInfoList;
var foundCpts = parseFinder(ecModel, area);
for (var i = 0; i < targetInfoList.length; i++) {
var targetInfo = targetInfoList[i];
var areaPanelId = area.panelId;
if (areaPanelId) {
if (targetInfo.panelId === areaPanelId) {
return targetInfo;
}
} else {
for (var j = 0; j < targetInfoMatchers.length; j++) {
if (targetInfoMatchers[j](foundCpts, targetInfo)) {
return targetInfo;
}
}
}
}
return true;
};
return BrushTargetManager2;
})()
);
function formatMinMax(minMax) {
minMax[0] > minMax[1] && minMax.reverse();
return minMax;
}
function parseFinder(ecModel, finder) {
return parseFinder$1(ecModel, finder, {
includeMainTypes: INCLUDE_FINDER_MAIN_TYPES
});
}
var targetInfoBuilders = {
grid: function(foundCpts, targetInfoList) {
var xAxisModels = foundCpts.xAxisModels;
var yAxisModels = foundCpts.yAxisModels;
var gridModels = foundCpts.gridModels;
var gridModelMap = createHashMap();
var xAxesHas = {};
var yAxesHas = {};
if (!xAxisModels && !yAxisModels && !gridModels) {
return;
}
each$f(xAxisModels, function(axisModel) {
var gridModel = axisModel.axis.grid.model;
gridModelMap.set(gridModel.id, gridModel);
xAxesHas[gridModel.id] = true;
});
each$f(yAxisModels, function(axisModel) {
var gridModel = axisModel.axis.grid.model;
gridModelMap.set(gridModel.id, gridModel);
yAxesHas[gridModel.id] = true;
});
each$f(gridModels, function(gridModel) {
gridModelMap.set(gridModel.id, gridModel);
xAxesHas[gridModel.id] = true;
yAxesHas[gridModel.id] = true;
});
gridModelMap.each(function(gridModel) {
var grid = gridModel.coordinateSystem;
var cartesians = [];
each$f(grid.getCartesians(), function(cartesian, index) {
if (indexOf(xAxisModels, cartesian.getAxis("x").model) >= 0 || indexOf(yAxisModels, cartesian.getAxis("y").model) >= 0) {
cartesians.push(cartesian);
}
});
targetInfoList.push({
panelId: "grid--" + gridModel.id,
gridModel,
coordSysModel: gridModel,
// Use the first one as the representitive coordSys.
coordSys: cartesians[0],
coordSyses: cartesians,
getPanelRect: panelRectBuilders.grid,
xAxisDeclared: xAxesHas[gridModel.id],
yAxisDeclared: yAxesHas[gridModel.id]
});
});
},
geo: function(foundCpts, targetInfoList) {
each$f(foundCpts.geoModels, function(geoModel) {
var coordSys = geoModel.coordinateSystem;
targetInfoList.push({
panelId: "geo--" + geoModel.id,
geoModel,
coordSysModel: geoModel,
coordSys,
coordSyses: [coordSys],
getPanelRect: panelRectBuilders.geo
});
});
}
};
var targetInfoMatchers = [
// grid
function(foundCpts, targetInfo) {
var xAxisModel = foundCpts.xAxisModel;
var yAxisModel = foundCpts.yAxisModel;
var gridModel = foundCpts.gridModel;
!gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);
!gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);
return gridModel && gridModel === targetInfo.gridModel;
},
// geo
function(foundCpts, targetInfo) {
var geoModel = foundCpts.geoModel;
return geoModel && geoModel === targetInfo.geoModel;
}
];
var panelRectBuilders = {
grid: function() {
return this.coordSys.master.getRect().clone();
},
geo: function() {
var coordSys = this.coordSys;
var rect = coordSys.getBoundingRect().clone();
rect.applyTransform(getTransform$1(coordSys));
return rect;
}
};
var coordConvert = {
lineX: curry$1(axisConvert, 0),
lineY: curry$1(axisConvert, 1),
rect: function(to, coordSys, rangeOrCoordRange, clamp2) {
var xminymin = to ? coordSys.pointToData([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp2) : coordSys.dataToPoint([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp2);
var xmaxymax = to ? coordSys.pointToData([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp2) : coordSys.dataToPoint([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp2);
var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])];
return {
values,
xyMinMax: values
};
},
polygon: function(to, coordSys, rangeOrCoordRange, clamp2) {
var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];
var values = map$1(rangeOrCoordRange, function(item) {
var p = to ? coordSys.pointToData(item, clamp2) : coordSys.dataToPoint(item, clamp2);
xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);
xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);
xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);
xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);
return p;
});
return {
values,
xyMinMax
};
}
};
function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {
var axis = coordSys.getAxis(["x", "y"][axisNameIndex]);
var values = formatMinMax(map$1([0, 1], function(i) {
return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]), true) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));
}));
var xyMinMax = [];
xyMinMax[axisNameIndex] = values;
xyMinMax[1 - axisNameIndex] = [NaN, NaN];
return {
values,
xyMinMax
};
}
var diffProcessor = {
lineX: curry$1(axisDiffProcessor, 0),
lineY: curry$1(axisDiffProcessor, 1),
rect: function(values, refer, scales) {
return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]];
},
polygon: function(values, refer, scales) {
return map$1(values, function(item, idx) {
return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];
});
}
};
function axisDiffProcessor(axisNameIndex, values, refer, scales) {
return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]];
}
function getScales(xyMinMaxCurr, xyMinMaxOrigin) {
var sizeCurr = getSize(xyMinMaxCurr);
var sizeOrigin = getSize(xyMinMaxOrigin);
var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];
isNaN(scales[0]) && (scales[0] = 1);
isNaN(scales[1]) && (scales[1] = 1);
return scales;
}
function getSize(xyMinMax) {
return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN];
}
var each$5 = each$f;
var DATA_ZOOM_ID_BASE = makeInternalComponentId("toolbox-dataZoom_");
var DataZoomFeature = (
/** @class */
(function(_super) {
__extends(DataZoomFeature2, _super);
function DataZoomFeature2() {
return _super !== null && _super.apply(this, arguments) || this;
}
DataZoomFeature2.prototype.render = function(featureModel, ecModel, api, payload) {
if (!this._brushController) {
this._brushController = new BrushController(api.getZr());
this._brushController.on("brush", bind$1(this._onBrush, this)).mount();
}
updateZoomBtnStatus(featureModel, ecModel, this, payload, api);
updateBackBtnStatus(featureModel, ecModel);
};
DataZoomFeature2.prototype.onclick = function(ecModel, api, type) {
handlers[type].call(this);
};
DataZoomFeature2.prototype.remove = function(ecModel, api) {
this._brushController && this._brushController.unmount();
};
DataZoomFeature2.prototype.dispose = function(ecModel, api) {
this._brushController && this._brushController.dispose();
};
DataZoomFeature2.prototype._onBrush = function(eventParam) {
var areas = eventParam.areas;
if (!eventParam.isEnd || !areas.length) {
return;
}
var snapshot = {};
var ecModel = this.ecModel;
this._brushController.updateCovers([]);
var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, {
include: ["grid"]
});
brushTargetManager.matchOutputRanges(areas, ecModel, function(area, coordRange, coordSys) {
if (coordSys.type !== "cartesian2d") {
return;
}
var brushType = area.brushType;
if (brushType === "rect") {
setBatch("x", coordSys, coordRange[0]);
setBatch("y", coordSys, coordRange[1]);
} else {
setBatch({
lineX: "x",
lineY: "y"
}[brushType], coordSys, coordRange);
}
});
push(ecModel, snapshot);
this._dispatchZoomAction(snapshot);
function setBatch(dimName, coordSys, minMax) {
var axis = coordSys.getAxis(dimName);
var axisModel = axis.model;
var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);
var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();
if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {
minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan);
}
dataZoomModel && (snapshot[dataZoomModel.id] = {
dataZoomId: dataZoomModel.id,
startValue: minMax[0],
endValue: minMax[1]
});
}
function findDataZoom(dimName, axisModel, ecModel2) {
var found;
ecModel2.eachComponent({
mainType: "dataZoom",
subType: "select"
}, function(dzModel) {
var has2 = dzModel.getAxisModel(dimName, axisModel.componentIndex);
has2 && (found = dzModel);
});
return found;
}
};
DataZoomFeature2.prototype._dispatchZoomAction = function(snapshot) {
var batch = [];
each$5(snapshot, function(batchItem, dataZoomId) {
batch.push(clone$1(batchItem));
});
batch.length && this.api.dispatchAction({
type: "dataZoom",
from: this.uid,
batch
});
};
DataZoomFeature2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
filterMode: "filter",
// Icon group
icon: {
zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",
back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"
},
// `zoom`, `back`
title: ecModel.getLocaleModel().get(["toolbox", "dataZoom", "title"]),
brushStyle: {
borderWidth: 0,
color: "rgba(210,219,238,0.2)"
}
};
return defaultOption2;
};
return DataZoomFeature2;
})(ToolboxFeature)
);
var handlers = {
zoom: function() {
var nextActive = !this._isZoomActive;
this.api.dispatchAction({
type: "takeGlobalCursor",
key: "dataZoomSelect",
dataZoomSelectActive: nextActive
});
},
back: function() {
this._dispatchZoomAction(pop(this.ecModel));
}
};
function makeAxisFinder(dzFeatureModel) {
var setting = {
xAxisIndex: dzFeatureModel.get("xAxisIndex", true),
yAxisIndex: dzFeatureModel.get("yAxisIndex", true),
xAxisId: dzFeatureModel.get("xAxisId", true),
yAxisId: dzFeatureModel.get("yAxisId", true)
};
if (setting.xAxisIndex == null && setting.xAxisId == null) {
setting.xAxisIndex = "all";
}
if (setting.yAxisIndex == null && setting.yAxisId == null) {
setting.yAxisIndex = "all";
}
return setting;
}
function updateBackBtnStatus(featureModel, ecModel) {
featureModel.setIconStatus("back", count(ecModel) > 1 ? "emphasis" : "normal");
}
function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {
var zoomActive = view._isZoomActive;
if (payload && payload.type === "takeGlobalCursor") {
zoomActive = payload.key === "dataZoomSelect" ? payload.dataZoomSelectActive : false;
}
view._isZoomActive = zoomActive;
featureModel.setIconStatus("zoom", zoomActive ? "emphasis" : "normal");
var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, {
include: ["grid"]
});
var panels = brushTargetManager.makePanelOpts(api, function(targetInfo) {
return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? "lineX" : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? "lineY" : "rect";
});
view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? {
brushType: "auto",
brushStyle: featureModel.getModel("brushStyle").getItemStyle()
} : false);
}
registerInternalOptionCreator("dataZoom", function(ecModel) {
var toolboxModel = ecModel.getComponent("toolbox", 0);
var featureDataZoomPath = ["feature", "dataZoom"];
if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) {
return;
}
var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath);
var dzOptions = [];
var finder = makeAxisFinder(dzFeatureModel);
var finderResult = parseFinder$1(ecModel, finder);
each$5(finderResult.xAxisModels, function(axisModel) {
return buildInternalOptions(axisModel, "xAxis", "xAxisIndex");
});
each$5(finderResult.yAxisModels, function(axisModel) {
return buildInternalOptions(axisModel, "yAxis", "yAxisIndex");
});
function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) {
var axisIndex = axisModel.componentIndex;
var newOpt = {
type: "select",
$fromToolbox: true,
// Default to be filter
filterMode: dzFeatureModel.get("filterMode", true) || "filter",
// Id for merge mapping.
id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex
};
newOpt[axisIndexPropName] = axisIndex;
dzOptions.push(newOpt);
}
return dzOptions;
});
function install$l(registers) {
registers.registerComponentModel(ToolboxModel);
registers.registerComponentView(ToolboxView);
registerFeature("saveAsImage", SaveAsImage);
registerFeature("magicType", MagicType);
registerFeature("dataView", DataView);
registerFeature("dataZoom", DataZoomFeature);
registerFeature("restore", RestoreOption);
use(install$m);
}
var TooltipModel = (
/** @class */
(function(_super) {
__extends(TooltipModel2, _super);
function TooltipModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TooltipModel2.type;
return _this;
}
TooltipModel2.type = "tooltip";
TooltipModel2.dependencies = ["axisPointer"];
TooltipModel2.defaultOption = {
// zlevel: 0,
z: 60,
show: true,
// tooltip main content
showContent: true,
// 'trigger' only works on coordinate system.
// 'item' | 'axis' | 'none'
trigger: "item",
// 'click' | 'mousemove' | 'none'
triggerOn: "mousemove|click",
alwaysShowContent: false,
displayMode: "single",
renderMode: "auto",
// whether restraint content inside viewRect.
// If renderMode: 'richText', default true.
// If renderMode: 'html', defaut false (for backward compat).
confine: null,
showDelay: 0,
hideDelay: 100,
// Animation transition time, unit is second
transitionDuration: 0.4,
enterable: false,
backgroundColor: "#fff",
// box shadow
shadowBlur: 10,
shadowColor: "rgba(0, 0, 0, .2)",
shadowOffsetX: 1,
shadowOffsetY: 2,
// tooltip border radius, unit is px, default is 4
borderRadius: 4,
// tooltip border width, unit is px, default is 0 (no border)
borderWidth: 1,
// Tooltip inside padding, default is 5 for all direction
// Array is allowed to set up, right, bottom, left, same with css
// The default value: See `tooltip/tooltipMarkup.ts#getPaddingFromTooltipModel`.
padding: null,
// Extra css text
extraCssText: "",
// axis indicator, trigger by axis
axisPointer: {
// default is line
// legal values: 'line' | 'shadow' | 'cross'
type: "line",
// Valid when type is line, appoint tooltip line locate on which line. Optional
// legal values: 'x' | 'y' | 'angle' | 'radius' | 'auto'
// default is 'auto', chose the axis which type is category.
// for multiply y axis, cartesian coord chose x axis, polar chose angle axis
axis: "auto",
animation: "auto",
animationDurationUpdate: 200,
animationEasingUpdate: "exponentialOut",
crossStyle: {
color: "#999",
width: 1,
type: "dashed",
// TODO formatter
textStyle: {}
}
// lineStyle and shadowStyle should not be specified here,
// otherwise it will always override those styles on option.axisPointer.
},
textStyle: {
color: "#666",
fontSize: 14
}
};
return TooltipModel2;
})(ComponentModel)
);
function shouldTooltipConfine(tooltipModel) {
var confineOption = tooltipModel.get("confine");
return confineOption != null ? !!confineOption : tooltipModel.get("renderMode") === "richText";
}
function testStyle(styleProps) {
if (!env.domSupported) {
return;
}
var style = document.documentElement.style;
for (var i = 0, len2 = styleProps.length; i < len2; i++) {
if (styleProps[i] in style) {
return styleProps[i];
}
}
}
var TRANSFORM_VENDOR = testStyle(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]);
var TRANSITION_VENDOR = testStyle(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]);
function toCSSVendorPrefix(styleVendor, styleProp) {
if (!styleVendor) {
return styleProp;
}
styleProp = toCamelCase(styleProp, true);
var idx = styleVendor.indexOf(styleProp);
styleVendor = idx === -1 ? styleProp : "-" + styleVendor.slice(0, idx) + "-" + styleProp;
return styleVendor.toLowerCase();
}
function getComputedStyle(el, style) {
var stl = el.currentStyle || document.defaultView && document.defaultView.getComputedStyle(el);
return stl ? stl[style] : null;
}
var CSS_TRANSITION_VENDOR = toCSSVendorPrefix(TRANSITION_VENDOR, "transition");
var CSS_TRANSFORM_VENDOR = toCSSVendorPrefix(TRANSFORM_VENDOR, "transform");
var gCssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + (env.transform3dSupported ? "will-change:transform;" : "");
function mirrorPos(pos) {
pos = pos === "left" ? "right" : pos === "right" ? "left" : pos === "top" ? "bottom" : "top";
return pos;
}
function assembleArrow(tooltipModel, borderColor, arrowPosition) {
if (!isString(arrowPosition) || arrowPosition === "inside") {
return "";
}
var backgroundColor2 = tooltipModel.get("backgroundColor");
var borderWidth = tooltipModel.get("borderWidth");
borderColor = convertToColorString(borderColor);
var arrowPos = mirrorPos(arrowPosition);
var arrowSize = Math.max(Math.round(borderWidth) * 1.5, 6);
var positionStyle = "";
var transformStyle = CSS_TRANSFORM_VENDOR + ":";
var rotateDeg;
if (indexOf(["left", "right"], arrowPos) > -1) {
positionStyle += "top:50%";
transformStyle += "translateY(-50%) rotate(" + (rotateDeg = arrowPos === "left" ? -225 : -45) + "deg)";
} else {
positionStyle += "left:50%";
transformStyle += "translateX(-50%) rotate(" + (rotateDeg = arrowPos === "top" ? 225 : 45) + "deg)";
}
var rotateRadian = rotateDeg * Math.PI / 180;
var arrowWH = arrowSize + borderWidth;
var rotatedWH = arrowWH * Math.abs(Math.cos(rotateRadian)) + arrowWH * Math.abs(Math.sin(rotateRadian));
var arrowOffset = Math.round(((rotatedWH - Math.SQRT2 * borderWidth) / 2 + Math.SQRT2 * borderWidth - (rotatedWH - arrowWH) / 2) * 100) / 100;
positionStyle += ";" + arrowPos + ":-" + arrowOffset + "px";
var borderStyle = borderColor + " solid " + borderWidth + "px;";
var styleCss = ["position:absolute;width:" + arrowSize + "px;height:" + arrowSize + "px;z-index:-1;", positionStyle + ";" + transformStyle + ";", "border-bottom:" + borderStyle, "border-right:" + borderStyle, "background-color:" + backgroundColor2 + ";"];
return '';
}
function assembleTransition(duration, onlyFade) {
var transitionCurve = "cubic-bezier(0.23,1,0.32,1)";
var transitionOption = " " + duration / 2 + "s " + transitionCurve;
var transitionText = "opacity" + transitionOption + ",visibility" + transitionOption;
if (!onlyFade) {
transitionOption = " " + duration + "s " + transitionCurve;
transitionText += env.transformSupported ? "," + CSS_TRANSFORM_VENDOR + transitionOption : ",left" + transitionOption + ",top" + transitionOption;
}
return CSS_TRANSITION_VENDOR + ":" + transitionText;
}
function assembleTransform(x, y, toString) {
var x0 = x.toFixed(0) + "px";
var y0 = y.toFixed(0) + "px";
if (!env.transformSupported) {
return toString ? "top:" + y0 + ";left:" + x0 + ";" : [["top", y0], ["left", x0]];
}
var is3d = env.transform3dSupported;
var translate2 = "translate" + (is3d ? "3d" : "") + "(" + x0 + "," + y0 + (is3d ? ",0" : "") + ")";
return toString ? "top:0;left:0;" + CSS_TRANSFORM_VENDOR + ":" + translate2 + ";" : [["top", 0], ["left", 0], [TRANSFORM_VENDOR, translate2]];
}
function assembleFont(textStyleModel) {
var cssText = [];
var fontSize = textStyleModel.get("fontSize");
var color = textStyleModel.getTextColor();
color && cssText.push("color:" + color);
cssText.push("font:" + textStyleModel.getFont());
var lineHeight = retrieve2(textStyleModel.get("lineHeight"), Math.round(fontSize * 3 / 2));
fontSize && cssText.push("line-height:" + lineHeight + "px");
var shadowColor = textStyleModel.get("textShadowColor");
var shadowBlur = textStyleModel.get("textShadowBlur") || 0;
var shadowOffsetX = textStyleModel.get("textShadowOffsetX") || 0;
var shadowOffsetY = textStyleModel.get("textShadowOffsetY") || 0;
shadowColor && shadowBlur && cssText.push("text-shadow:" + shadowOffsetX + "px " + shadowOffsetY + "px " + shadowBlur + "px " + shadowColor);
each$f(["decoration", "align"], function(name) {
var val = textStyleModel.get(name);
val && cssText.push("text-" + name + ":" + val);
});
return cssText.join(";");
}
function assembleCssText(tooltipModel, enableTransition, onlyFade) {
var cssText = [];
var transitionDuration = tooltipModel.get("transitionDuration");
var backgroundColor2 = tooltipModel.get("backgroundColor");
var shadowBlur = tooltipModel.get("shadowBlur");
var shadowColor = tooltipModel.get("shadowColor");
var shadowOffsetX = tooltipModel.get("shadowOffsetX");
var shadowOffsetY = tooltipModel.get("shadowOffsetY");
var textStyleModel = tooltipModel.getModel("textStyle");
var padding = getPaddingFromTooltipModel(tooltipModel, "html");
var boxShadow = shadowOffsetX + "px " + shadowOffsetY + "px " + shadowBlur + "px " + shadowColor;
cssText.push("box-shadow:" + boxShadow);
enableTransition && transitionDuration && cssText.push(assembleTransition(transitionDuration, onlyFade));
if (backgroundColor2) {
cssText.push("background-color:" + backgroundColor2);
}
each$f(["width", "color", "radius"], function(name) {
var borderName = "border-" + name;
var camelCase = toCamelCase(borderName);
var val = tooltipModel.get(camelCase);
val != null && cssText.push(borderName + ":" + val + (name === "color" ? "" : "px"));
});
cssText.push(assembleFont(textStyleModel));
if (padding != null) {
cssText.push("padding:" + normalizeCssArray(padding).join("px ") + "px");
}
return cssText.join(";") + ";";
}
function makeStyleCoord$1(out, zr, container, zrX, zrY) {
var zrPainter = zr && zr.painter;
if (container) {
var zrViewportRoot = zrPainter && zrPainter.getViewportRoot();
if (zrViewportRoot) {
transformLocalCoord(out, zrViewportRoot, container, zrX, zrY);
}
} else {
out[0] = zrX;
out[1] = zrY;
var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset();
if (viewportRootOffset) {
out[0] += viewportRootOffset.offsetLeft;
out[1] += viewportRootOffset.offsetTop;
}
}
out[2] = out[0] / zr.getWidth();
out[3] = out[1] / zr.getHeight();
}
var TooltipHTMLContent = (
/** @class */
(function() {
function TooltipHTMLContent2(api, opt) {
this._show = false;
this._styleCoord = [0, 0, 0, 0];
this._enterable = true;
this._alwaysShowContent = false;
this._firstShow = true;
this._longHide = true;
if (env.wxa) {
return null;
}
var el = document.createElement("div");
el.domBelongToZr = true;
this.el = el;
var zr = this._zr = api.getZr();
var appendTo = opt.appendTo;
var container = appendTo && (isString(appendTo) ? document.querySelector(appendTo) : isDom(appendTo) ? appendTo : isFunction(appendTo) && appendTo(api.getDom()));
makeStyleCoord$1(this._styleCoord, zr, container, api.getWidth() / 2, api.getHeight() / 2);
(container || api.getDom()).appendChild(el);
this._api = api;
this._container = container;
var self = this;
el.onmouseenter = function() {
if (self._enterable) {
clearTimeout(self._hideTimeout);
self._show = true;
}
self._inContent = true;
};
el.onmousemove = function(e) {
e = e || window.event;
if (!self._enterable) {
var handler = zr.handler;
var zrViewportRoot = zr.painter.getViewportRoot();
normalizeEvent(zrViewportRoot, e, true);
handler.dispatch("mousemove", e);
}
};
el.onmouseleave = function() {
self._inContent = false;
if (self._enterable) {
if (self._show) {
self.hideLater(self._hideDelay);
}
}
};
}
TooltipHTMLContent2.prototype.update = function(tooltipModel) {
if (!this._container) {
var container = this._api.getDom();
var position2 = getComputedStyle(container, "position");
var domStyle = container.style;
if (domStyle.position !== "absolute" && position2 !== "absolute") {
domStyle.position = "relative";
}
}
var alwaysShowContent = tooltipModel.get("alwaysShowContent");
alwaysShowContent && this._moveIfResized();
this._alwaysShowContent = alwaysShowContent;
this.el.className = tooltipModel.get("className") || "";
};
TooltipHTMLContent2.prototype.show = function(tooltipModel, nearPointColor) {
clearTimeout(this._hideTimeout);
clearTimeout(this._longHideTimeout);
var el = this.el;
var style = el.style;
var styleCoord = this._styleCoord;
if (!el.innerHTML) {
style.display = "none";
} else {
style.cssText = gCssText + assembleCssText(tooltipModel, !this._firstShow, this._longHide) + assembleTransform(styleCoord[0], styleCoord[1], true) + ("border-color:" + convertToColorString(nearPointColor) + ";") + (tooltipModel.get("extraCssText") || "") + (";pointer-events:" + (this._enterable ? "auto" : "none"));
}
this._show = true;
this._firstShow = false;
this._longHide = false;
};
TooltipHTMLContent2.prototype.setContent = function(content, markers, tooltipModel, borderColor, arrowPosition) {
var el = this.el;
if (content == null) {
el.innerHTML = "";
return;
}
var arrow = "";
if (isString(arrowPosition) && tooltipModel.get("trigger") === "item" && !shouldTooltipConfine(tooltipModel)) {
arrow = assembleArrow(tooltipModel, borderColor, arrowPosition);
}
if (isString(content)) {
el.innerHTML = content + arrow;
} else if (content) {
el.innerHTML = "";
if (!isArray$1(content)) {
content = [content];
}
for (var i = 0; i < content.length; i++) {
if (isDom(content[i]) && content[i].parentNode !== el) {
el.appendChild(content[i]);
}
}
if (arrow && el.childNodes.length) {
var arrowEl = document.createElement("div");
arrowEl.innerHTML = arrow;
el.appendChild(arrowEl);
}
}
};
TooltipHTMLContent2.prototype.setEnterable = function(enterable) {
this._enterable = enterable;
};
TooltipHTMLContent2.prototype.getSize = function() {
var el = this.el;
return el ? [el.offsetWidth, el.offsetHeight] : [0, 0];
};
TooltipHTMLContent2.prototype.moveTo = function(zrX, zrY) {
if (!this.el) {
return;
}
var styleCoord = this._styleCoord;
makeStyleCoord$1(styleCoord, this._zr, this._container, zrX, zrY);
if (styleCoord[0] != null && styleCoord[1] != null) {
var style_1 = this.el.style;
var transforms = assembleTransform(styleCoord[0], styleCoord[1]);
each$f(transforms, function(transform2) {
style_1[transform2[0]] = transform2[1];
});
}
};
TooltipHTMLContent2.prototype._moveIfResized = function() {
var ratioX = this._styleCoord[2];
var ratioY = this._styleCoord[3];
this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight());
};
TooltipHTMLContent2.prototype.hide = function() {
var _this = this;
var style = this.el.style;
style.visibility = "hidden";
style.opacity = "0";
env.transform3dSupported && (style.willChange = "");
this._show = false;
this._longHideTimeout = setTimeout(function() {
return _this._longHide = true;
}, 500);
};
TooltipHTMLContent2.prototype.hideLater = function(time) {
if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) {
if (time) {
this._hideDelay = time;
this._show = false;
this._hideTimeout = setTimeout(bind$1(this.hide, this), time);
} else {
this.hide();
}
}
};
TooltipHTMLContent2.prototype.isShow = function() {
return this._show;
};
TooltipHTMLContent2.prototype.dispose = function() {
clearTimeout(this._hideTimeout);
clearTimeout(this._longHideTimeout);
var parentNode = this.el.parentNode;
parentNode && parentNode.removeChild(this.el);
this.el = this._container = null;
};
return TooltipHTMLContent2;
})()
);
var TooltipRichContent = (
/** @class */
(function() {
function TooltipRichContent2(api) {
this._show = false;
this._styleCoord = [0, 0, 0, 0];
this._alwaysShowContent = false;
this._enterable = true;
this._zr = api.getZr();
makeStyleCoord(this._styleCoord, this._zr, api.getWidth() / 2, api.getHeight() / 2);
}
TooltipRichContent2.prototype.update = function(tooltipModel) {
var alwaysShowContent = tooltipModel.get("alwaysShowContent");
alwaysShowContent && this._moveIfResized();
this._alwaysShowContent = alwaysShowContent;
};
TooltipRichContent2.prototype.show = function() {
if (this._hideTimeout) {
clearTimeout(this._hideTimeout);
}
this.el.show();
this._show = true;
};
TooltipRichContent2.prototype.setContent = function(content, markupStyleCreator, tooltipModel, borderColor, arrowPosition) {
var _this = this;
if (isObject$3(content)) {
throwError("");
}
if (this.el) {
this._zr.remove(this.el);
}
var textStyleModel = tooltipModel.getModel("textStyle");
this.el = new ZRText({
style: {
rich: markupStyleCreator.richTextStyles,
text: content,
lineHeight: 22,
borderWidth: 1,
borderColor,
textShadowColor: textStyleModel.get("textShadowColor"),
fill: tooltipModel.get(["textStyle", "color"]),
padding: getPaddingFromTooltipModel(tooltipModel, "richText"),
verticalAlign: "top",
align: "left"
},
z: tooltipModel.get("z")
});
each$f(["backgroundColor", "borderRadius", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY"], function(propName) {
_this.el.style[propName] = tooltipModel.get(propName);
});
each$f(["textShadowBlur", "textShadowOffsetX", "textShadowOffsetY"], function(propName) {
_this.el.style[propName] = textStyleModel.get(propName) || 0;
});
this._zr.add(this.el);
var self = this;
this.el.on("mouseover", function() {
if (self._enterable) {
clearTimeout(self._hideTimeout);
self._show = true;
}
self._inContent = true;
});
this.el.on("mouseout", function() {
if (self._enterable) {
if (self._show) {
self.hideLater(self._hideDelay);
}
}
self._inContent = false;
});
};
TooltipRichContent2.prototype.setEnterable = function(enterable) {
this._enterable = enterable;
};
TooltipRichContent2.prototype.getSize = function() {
var el = this.el;
var bounding = this.el.getBoundingRect();
var shadowOuterSize = calcShadowOuterSize(el.style);
return [bounding.width + shadowOuterSize.left + shadowOuterSize.right, bounding.height + shadowOuterSize.top + shadowOuterSize.bottom];
};
TooltipRichContent2.prototype.moveTo = function(x, y) {
var el = this.el;
if (el) {
var styleCoord = this._styleCoord;
makeStyleCoord(styleCoord, this._zr, x, y);
x = styleCoord[0];
y = styleCoord[1];
var style = el.style;
var borderWidth = mathMaxWith0(style.borderWidth || 0);
var shadowOuterSize = calcShadowOuterSize(style);
el.x = x + borderWidth + shadowOuterSize.left;
el.y = y + borderWidth + shadowOuterSize.top;
el.markRedraw();
}
};
TooltipRichContent2.prototype._moveIfResized = function() {
var ratioX = this._styleCoord[2];
var ratioY = this._styleCoord[3];
this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight());
};
TooltipRichContent2.prototype.hide = function() {
if (this.el) {
this.el.hide();
}
this._show = false;
};
TooltipRichContent2.prototype.hideLater = function(time) {
if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) {
if (time) {
this._hideDelay = time;
this._show = false;
this._hideTimeout = setTimeout(bind$1(this.hide, this), time);
} else {
this.hide();
}
}
};
TooltipRichContent2.prototype.isShow = function() {
return this._show;
};
TooltipRichContent2.prototype.dispose = function() {
this._zr.remove(this.el);
};
return TooltipRichContent2;
})()
);
function mathMaxWith0(val) {
return Math.max(0, val);
}
function calcShadowOuterSize(style) {
var shadowBlur = mathMaxWith0(style.shadowBlur || 0);
var shadowOffsetX = mathMaxWith0(style.shadowOffsetX || 0);
var shadowOffsetY = mathMaxWith0(style.shadowOffsetY || 0);
return {
left: mathMaxWith0(shadowBlur - shadowOffsetX),
right: mathMaxWith0(shadowBlur + shadowOffsetX),
top: mathMaxWith0(shadowBlur - shadowOffsetY),
bottom: mathMaxWith0(shadowBlur + shadowOffsetY)
};
}
function makeStyleCoord(out, zr, zrX, zrY) {
out[0] = zrX;
out[1] = zrY;
out[2] = out[0] / zr.getWidth();
out[3] = out[1] / zr.getHeight();
}
var proxyRect = new Rect$2({
shape: {
x: -1,
y: -1,
width: 2,
height: 2
}
});
var TooltipView = (
/** @class */
(function(_super) {
__extends(TooltipView2, _super);
function TooltipView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TooltipView2.type;
return _this;
}
TooltipView2.prototype.init = function(ecModel, api) {
if (env.node || !api.getDom()) {
return;
}
var tooltipModel = ecModel.getComponent("tooltip");
var renderMode = this._renderMode = getTooltipRenderMode(tooltipModel.get("renderMode"));
this._tooltipContent = renderMode === "richText" ? new TooltipRichContent(api) : new TooltipHTMLContent(api, {
appendTo: tooltipModel.get("appendToBody", true) ? "body" : tooltipModel.get("appendTo", true)
});
};
TooltipView2.prototype.render = function(tooltipModel, ecModel, api) {
if (env.node || !api.getDom()) {
return;
}
this.group.removeAll();
this._tooltipModel = tooltipModel;
this._ecModel = ecModel;
this._api = api;
var tooltipContent = this._tooltipContent;
tooltipContent.update(tooltipModel);
tooltipContent.setEnterable(tooltipModel.get("enterable"));
this._initGlobalListener();
this._keepShow();
if (this._renderMode !== "richText" && tooltipModel.get("transitionDuration")) {
createOrUpdate(this, "_updatePosition", 50, "fixRate");
} else {
clear$1(this, "_updatePosition");
}
};
TooltipView2.prototype._initGlobalListener = function() {
var tooltipModel = this._tooltipModel;
var triggerOn = tooltipModel.get("triggerOn");
register("itemTooltip", this._api, bind$1(function(currTrigger, e, dispatchAction2) {
if (triggerOn !== "none") {
if (triggerOn.indexOf(currTrigger) >= 0) {
this._tryShow(e, dispatchAction2);
} else if (currTrigger === "leave") {
this._hide(dispatchAction2);
}
}
}, this));
};
TooltipView2.prototype._keepShow = function() {
var tooltipModel = this._tooltipModel;
var ecModel = this._ecModel;
var api = this._api;
var triggerOn = tooltipModel.get("triggerOn");
if (this._lastX != null && this._lastY != null && triggerOn !== "none" && triggerOn !== "click") {
var self_1 = this;
clearTimeout(this._refreshUpdateTimeout);
this._refreshUpdateTimeout = setTimeout(function() {
!api.isDisposed() && self_1.manuallyShowTip(tooltipModel, ecModel, api, {
x: self_1._lastX,
y: self_1._lastY,
dataByCoordSys: self_1._lastDataByCoordSys
});
});
}
};
TooltipView2.prototype.manuallyShowTip = function(tooltipModel, ecModel, api, payload) {
if (payload.from === this.uid || env.node || !api.getDom()) {
return;
}
var dispatchAction2 = makeDispatchAction(payload, api);
this._ticket = "";
var dataByCoordSys = payload.dataByCoordSys;
var cmptRef = findComponentReference(payload, ecModel, api);
if (cmptRef) {
var rect = cmptRef.el.getBoundingRect().clone();
rect.applyTransform(cmptRef.el.transform);
this._tryShow({
offsetX: rect.x + rect.width / 2,
offsetY: rect.y + rect.height / 2,
target: cmptRef.el,
position: payload.position,
// When manully trigger, the mouse is not on the el, so we'd better to
// position tooltip on the bottom of the el and display arrow is possible.
positionDefault: "bottom"
}, dispatchAction2);
} else if (payload.tooltip && payload.x != null && payload.y != null) {
var el = proxyRect;
el.x = payload.x;
el.y = payload.y;
el.update();
getECData(el).tooltipConfig = {
name: null,
option: payload.tooltip
};
this._tryShow({
offsetX: payload.x,
offsetY: payload.y,
target: el
}, dispatchAction2);
} else if (dataByCoordSys) {
this._tryShow({
offsetX: payload.x,
offsetY: payload.y,
position: payload.position,
dataByCoordSys,
tooltipOption: payload.tooltipOption
}, dispatchAction2);
} else if (payload.seriesIndex != null) {
if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {
return;
}
var pointInfo = findPointFromSeries(payload, ecModel);
var cx = pointInfo.point[0];
var cy = pointInfo.point[1];
if (cx != null && cy != null) {
this._tryShow({
offsetX: cx,
offsetY: cy,
target: pointInfo.el,
position: payload.position,
// When manully trigger, the mouse is not on the el, so we'd better to
// position tooltip on the bottom of the el and display arrow is possible.
positionDefault: "bottom"
}, dispatchAction2);
}
} else if (payload.x != null && payload.y != null) {
api.dispatchAction({
type: "updateAxisPointer",
x: payload.x,
y: payload.y
});
this._tryShow({
offsetX: payload.x,
offsetY: payload.y,
position: payload.position,
target: api.getZr().findHover(payload.x, payload.y).target
}, dispatchAction2);
}
};
TooltipView2.prototype.manuallyHideTip = function(tooltipModel, ecModel, api, payload) {
var tooltipContent = this._tooltipContent;
if (this._tooltipModel) {
tooltipContent.hideLater(this._tooltipModel.get("hideDelay"));
}
this._lastX = this._lastY = this._lastDataByCoordSys = null;
if (payload.from !== this.uid) {
this._hide(makeDispatchAction(payload, api));
}
};
TooltipView2.prototype._manuallyAxisShowTip = function(tooltipModel, ecModel, api, payload) {
var seriesIndex = payload.seriesIndex;
var dataIndex = payload.dataIndex;
var coordSysAxesInfo = ecModel.getComponent("axisPointer").coordSysAxesInfo;
if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {
return;
}
var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
if (!seriesModel) {
return;
}
var data = seriesModel.getData();
var tooltipCascadedModel = buildTooltipModel([data.getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model], this._tooltipModel);
if (tooltipCascadedModel.get("trigger") !== "axis") {
return;
}
api.dispatchAction({
type: "updateAxisPointer",
seriesIndex,
dataIndex,
position: payload.position
});
return true;
};
TooltipView2.prototype._tryShow = function(e, dispatchAction2) {
var el = e.target;
var tooltipModel = this._tooltipModel;
if (!tooltipModel) {
return;
}
this._lastX = e.offsetX;
this._lastY = e.offsetY;
var dataByCoordSys = e.dataByCoordSys;
if (dataByCoordSys && dataByCoordSys.length) {
this._showAxisTooltip(dataByCoordSys, e);
} else if (el) {
var ecData = getECData(el);
if (ecData.ssrType === "legend") {
return;
}
this._lastDataByCoordSys = null;
var seriesDispatcher_1;
var cmptDispatcher_1;
findEventDispatcher(el, function(target) {
if (getECData(target).dataIndex != null) {
seriesDispatcher_1 = target;
return true;
}
if (getECData(target).tooltipConfig != null) {
cmptDispatcher_1 = target;
return true;
}
}, true);
if (seriesDispatcher_1) {
this._showSeriesItemTooltip(e, seriesDispatcher_1, dispatchAction2);
} else if (cmptDispatcher_1) {
this._showComponentItemTooltip(e, cmptDispatcher_1, dispatchAction2);
} else {
this._hide(dispatchAction2);
}
} else {
this._lastDataByCoordSys = null;
this._hide(dispatchAction2);
}
};
TooltipView2.prototype._showOrMove = function(tooltipModel, cb) {
var delay = tooltipModel.get("showDelay");
cb = bind$1(cb, this);
clearTimeout(this._showTimout);
delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb();
};
TooltipView2.prototype._showAxisTooltip = function(dataByCoordSys, e) {
var ecModel = this._ecModel;
var globalTooltipModel = this._tooltipModel;
var point = [e.offsetX, e.offsetY];
var singleTooltipModel = buildTooltipModel([e.tooltipOption], globalTooltipModel);
var renderMode = this._renderMode;
var cbParamsList = [];
var articleMarkup = createTooltipMarkup("section", {
blocks: [],
noHeader: true
});
var markupTextArrLegacy = [];
var markupStyleCreator = new TooltipMarkupStyleCreator();
each$f(dataByCoordSys, function(itemCoordSys) {
each$f(itemCoordSys.dataByAxis, function(axisItem) {
var axisModel = ecModel.getComponent(axisItem.axisDim + "Axis", axisItem.axisIndex);
var axisValue = axisItem.value;
if (!axisModel || axisValue == null) {
return;
}
var axisValueLabel = getValueLabel(axisValue, axisModel.axis, ecModel, axisItem.seriesDataIndices, axisItem.valueLabelOpt);
var axisSectionMarkup = createTooltipMarkup("section", {
header: axisValueLabel,
noHeader: !trim$1(axisValueLabel),
sortBlocks: true,
blocks: []
});
articleMarkup.blocks.push(axisSectionMarkup);
each$f(axisItem.seriesDataIndices, function(idxItem) {
var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
var dataIndex = idxItem.dataIndexInside;
var cbParams = series.getDataParams(dataIndex);
if (cbParams.dataIndex < 0) {
return;
}
cbParams.axisDim = axisItem.axisDim;
cbParams.axisIndex = axisItem.axisIndex;
cbParams.axisType = axisItem.axisType;
cbParams.axisId = axisItem.axisId;
cbParams.axisValue = getAxisRawValue(axisModel.axis, {
value: axisValue
});
cbParams.axisValueLabel = axisValueLabel;
cbParams.marker = markupStyleCreator.makeTooltipMarker("item", convertToColorString(cbParams.color), renderMode);
var seriesTooltipResult = normalizeTooltipFormatResult(series.formatTooltip(dataIndex, true, null));
var frag = seriesTooltipResult.frag;
if (frag) {
var valueFormatter = buildTooltipModel([series], globalTooltipModel).get("valueFormatter");
axisSectionMarkup.blocks.push(valueFormatter ? extend({
valueFormatter
}, frag) : frag);
}
if (seriesTooltipResult.text) {
markupTextArrLegacy.push(seriesTooltipResult.text);
}
cbParamsList.push(cbParams);
});
});
});
articleMarkup.blocks.reverse();
markupTextArrLegacy.reverse();
var positionExpr = e.position;
var orderMode = singleTooltipModel.get("order");
var builtMarkupText = buildTooltipMarkup(articleMarkup, markupStyleCreator, renderMode, orderMode, ecModel.get("useUTC"), singleTooltipModel.get("textStyle"));
builtMarkupText && markupTextArrLegacy.unshift(builtMarkupText);
var blockBreak = renderMode === "richText" ? "\n\n" : "
";
var allMarkupText = markupTextArrLegacy.join(blockBreak);
this._showOrMove(singleTooltipModel, function() {
if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) {
this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, cbParamsList);
} else {
this._showTooltipContent(singleTooltipModel, allMarkupText, cbParamsList, Math.random() + "", point[0], point[1], positionExpr, null, markupStyleCreator);
}
});
};
TooltipView2.prototype._showSeriesItemTooltip = function(e, dispatcher, dispatchAction2) {
var ecModel = this._ecModel;
var ecData = getECData(dispatcher);
var seriesIndex = ecData.seriesIndex;
var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
var dataModel = ecData.dataModel || seriesModel;
var dataIndex = ecData.dataIndex;
var dataType = ecData.dataType;
var data = dataModel.getData(dataType);
var renderMode = this._renderMode;
var positionDefault = e.positionDefault;
var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model], this._tooltipModel, positionDefault ? {
position: positionDefault
} : null);
var tooltipTrigger = tooltipModel.get("trigger");
if (tooltipTrigger != null && tooltipTrigger !== "item") {
return;
}
var params = dataModel.getDataParams(dataIndex, dataType);
var markupStyleCreator = new TooltipMarkupStyleCreator();
params.marker = markupStyleCreator.makeTooltipMarker("item", convertToColorString(params.color), renderMode);
var seriesTooltipResult = normalizeTooltipFormatResult(dataModel.formatTooltip(dataIndex, false, dataType));
var orderMode = tooltipModel.get("order");
var valueFormatter = tooltipModel.get("valueFormatter");
var frag = seriesTooltipResult.frag;
var markupText = frag ? buildTooltipMarkup(valueFormatter ? extend({
valueFormatter
}, frag) : frag, markupStyleCreator, renderMode, orderMode, ecModel.get("useUTC"), tooltipModel.get("textStyle")) : seriesTooltipResult.text;
var asyncTicket = "item_" + dataModel.name + "_" + dataIndex;
this._showOrMove(tooltipModel, function() {
this._showTooltipContent(tooltipModel, markupText, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target, markupStyleCreator);
});
dispatchAction2({
type: "showTip",
dataIndexInside: dataIndex,
dataIndex: data.getRawIndex(dataIndex),
seriesIndex,
from: this.uid
});
};
TooltipView2.prototype._showComponentItemTooltip = function(e, el, dispatchAction2) {
var isHTMLRenderMode = this._renderMode === "html";
var ecData = getECData(el);
var tooltipConfig = ecData.tooltipConfig;
var tooltipOpt = tooltipConfig.option || {};
var encodeHTMLContent = tooltipOpt.encodeHTMLContent;
if (isString(tooltipOpt)) {
var content = tooltipOpt;
tooltipOpt = {
content,
// Fixed formatter
formatter: content
};
encodeHTMLContent = true;
}
if (encodeHTMLContent && isHTMLRenderMode && tooltipOpt.content) {
tooltipOpt = clone$1(tooltipOpt);
tooltipOpt.content = encodeHTML(tooltipOpt.content);
}
var tooltipModelCascade = [tooltipOpt];
var cmpt = this._ecModel.getComponent(ecData.componentMainType, ecData.componentIndex);
if (cmpt) {
tooltipModelCascade.push(cmpt);
}
tooltipModelCascade.push({
formatter: tooltipOpt.content
});
var positionDefault = e.positionDefault;
var subTooltipModel = buildTooltipModel(tooltipModelCascade, this._tooltipModel, positionDefault ? {
position: positionDefault
} : null);
var defaultHtml = subTooltipModel.get("content");
var asyncTicket = Math.random() + "";
var markupStyleCreator = new TooltipMarkupStyleCreator();
this._showOrMove(subTooltipModel, function() {
var formatterParams = clone$1(subTooltipModel.get("formatterParams") || {});
this._showTooltipContent(subTooltipModel, defaultHtml, formatterParams, asyncTicket, e.offsetX, e.offsetY, e.position, el, markupStyleCreator);
});
dispatchAction2({
type: "showTip",
from: this.uid
});
};
TooltipView2.prototype._showTooltipContent = function(tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markupStyleCreator) {
this._ticket = "";
if (!tooltipModel.get("showContent") || !tooltipModel.get("show")) {
return;
}
var tooltipContent = this._tooltipContent;
tooltipContent.setEnterable(tooltipModel.get("enterable"));
var formatter = tooltipModel.get("formatter");
positionExpr = positionExpr || tooltipModel.get("position");
var html = defaultHtml;
var nearPoint = this._getNearestPoint([x, y], params, tooltipModel.get("trigger"), tooltipModel.get("borderColor"));
var nearPointColor = nearPoint.color;
if (formatter) {
if (isString(formatter)) {
var useUTC = tooltipModel.ecModel.get("useUTC");
var params0 = isArray$1(params) ? params[0] : params;
var isTimeAxis = params0 && params0.axisType && params0.axisType.indexOf("time") >= 0;
html = formatter;
if (isTimeAxis) {
html = format(params0.axisValue, html, useUTC);
}
html = formatTpl(html, params, true);
} else if (isFunction(formatter)) {
var callback = bind$1(function(cbTicket, html2) {
if (cbTicket === this._ticket) {
tooltipContent.setContent(html2, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);
this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);
}
}, this);
this._ticket = asyncTicket;
html = formatter(params, asyncTicket, callback);
} else {
html = formatter;
}
}
tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);
tooltipContent.show(tooltipModel, nearPointColor);
this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);
};
TooltipView2.prototype._getNearestPoint = function(point, tooltipDataParams, trigger2, borderColor) {
if (trigger2 === "axis" || isArray$1(tooltipDataParams)) {
return {
color: borderColor || (this._renderMode === "html" ? "#fff" : "none")
};
}
if (!isArray$1(tooltipDataParams)) {
return {
color: borderColor || tooltipDataParams.color || tooltipDataParams.borderColor
};
}
};
TooltipView2.prototype._updatePosition = function(tooltipModel, positionExpr, x, y, content, params, el) {
var viewWidth = this._api.getWidth();
var viewHeight = this._api.getHeight();
positionExpr = positionExpr || tooltipModel.get("position");
var contentSize = content.getSize();
var align = tooltipModel.get("align");
var vAlign = tooltipModel.get("verticalAlign");
var rect = el && el.getBoundingRect().clone();
el && rect.applyTransform(el.transform);
if (isFunction(positionExpr)) {
positionExpr = positionExpr([x, y], params, content.el, rect, {
viewSize: [viewWidth, viewHeight],
contentSize: contentSize.slice()
});
}
if (isArray$1(positionExpr)) {
x = parsePercent(positionExpr[0], viewWidth);
y = parsePercent(positionExpr[1], viewHeight);
} else if (isObject$3(positionExpr)) {
var boxLayoutPosition = positionExpr;
boxLayoutPosition.width = contentSize[0];
boxLayoutPosition.height = contentSize[1];
var layoutRect = getLayoutRect(boxLayoutPosition, {
width: viewWidth,
height: viewHeight
});
x = layoutRect.x;
y = layoutRect.y;
align = null;
vAlign = null;
} else if (isString(positionExpr) && el) {
var pos = calcTooltipPosition(positionExpr, rect, contentSize, tooltipModel.get("borderWidth"));
x = pos[0];
y = pos[1];
} else {
var pos = refixTooltipPosition(x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20);
x = pos[0];
y = pos[1];
}
align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === "right" ? contentSize[0] : 0);
vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === "bottom" ? contentSize[1] : 0);
if (shouldTooltipConfine(tooltipModel)) {
var pos = confineTooltipPosition(x, y, content, viewWidth, viewHeight);
x = pos[0];
y = pos[1];
}
content.moveTo(x, y);
};
TooltipView2.prototype._updateContentNotChangedOnAxis = function(dataByCoordSys, cbParamsList) {
var lastCoordSys = this._lastDataByCoordSys;
var lastCbParamsList = this._cbParamsList;
var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length;
contentNotChanged && each$f(lastCoordSys, function(lastItemCoordSys, indexCoordSys) {
var lastDataByAxis = lastItemCoordSys.dataByAxis || [];
var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};
var thisDataByAxis = thisItemCoordSys.dataByAxis || [];
contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length;
contentNotChanged && each$f(lastDataByAxis, function(lastItem, indexAxis) {
var thisItem = thisDataByAxis[indexAxis] || {};
var lastIndices = lastItem.seriesDataIndices || [];
var newIndices = thisItem.seriesDataIndices || [];
contentNotChanged = contentNotChanged && lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length;
contentNotChanged && each$f(lastIndices, function(lastIdxItem, j) {
var newIdxItem = newIndices[j];
contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex;
});
lastCbParamsList && each$f(lastItem.seriesDataIndices, function(idxItem) {
var seriesIdx = idxItem.seriesIndex;
var cbParams = cbParamsList[seriesIdx];
var lastCbParams = lastCbParamsList[seriesIdx];
if (cbParams && lastCbParams && lastCbParams.data !== cbParams.data) {
contentNotChanged = false;
}
});
});
});
this._lastDataByCoordSys = dataByCoordSys;
this._cbParamsList = cbParamsList;
return !!contentNotChanged;
};
TooltipView2.prototype._hide = function(dispatchAction2) {
this._lastDataByCoordSys = null;
dispatchAction2({
type: "hideTip",
from: this.uid
});
};
TooltipView2.prototype.dispose = function(ecModel, api) {
if (env.node || !api.getDom()) {
return;
}
clear$1(this, "_updatePosition");
this._tooltipContent.dispose();
unregister("itemTooltip", api);
};
TooltipView2.type = "tooltip";
return TooltipView2;
})(ComponentView)
);
function buildTooltipModel(modelCascade, globalTooltipModel, defaultTooltipOption) {
var ecModel = globalTooltipModel.ecModel;
var resultModel;
if (defaultTooltipOption) {
resultModel = new Model(defaultTooltipOption, ecModel, ecModel);
resultModel = new Model(globalTooltipModel.option, resultModel, ecModel);
} else {
resultModel = globalTooltipModel;
}
for (var i = modelCascade.length - 1; i >= 0; i--) {
var tooltipOpt = modelCascade[i];
if (tooltipOpt) {
if (tooltipOpt instanceof Model) {
tooltipOpt = tooltipOpt.get("tooltip", true);
}
if (isString(tooltipOpt)) {
tooltipOpt = {
formatter: tooltipOpt
};
}
if (tooltipOpt) {
resultModel = new Model(tooltipOpt, resultModel, ecModel);
}
}
}
return resultModel;
}
function makeDispatchAction(payload, api) {
return payload.dispatchAction || bind$1(api.dispatchAction, api);
}
function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {
var size = content.getSize();
var width = size[0];
var height = size[1];
if (gapH != null) {
if (x + width + gapH + 2 > viewWidth) {
x -= width + gapH;
} else {
x += gapH;
}
}
if (gapV != null) {
if (y + height + gapV > viewHeight) {
y -= height + gapV;
} else {
y += gapV;
}
}
return [x, y];
}
function confineTooltipPosition(x, y, content, viewWidth, viewHeight) {
var size = content.getSize();
var width = size[0];
var height = size[1];
x = Math.min(x + width, viewWidth) - width;
y = Math.min(y + height, viewHeight) - height;
x = Math.max(x, 0);
y = Math.max(y, 0);
return [x, y];
}
function calcTooltipPosition(position2, rect, contentSize, borderWidth) {
var domWidth = contentSize[0];
var domHeight = contentSize[1];
var offset = Math.ceil(Math.SQRT2 * borderWidth) + 8;
var x = 0;
var y = 0;
var rectWidth = rect.width;
var rectHeight = rect.height;
switch (position2) {
case "inside":
x = rect.x + rectWidth / 2 - domWidth / 2;
y = rect.y + rectHeight / 2 - domHeight / 2;
break;
case "top":
x = rect.x + rectWidth / 2 - domWidth / 2;
y = rect.y - domHeight - offset;
break;
case "bottom":
x = rect.x + rectWidth / 2 - domWidth / 2;
y = rect.y + rectHeight + offset;
break;
case "left":
x = rect.x - domWidth - offset;
y = rect.y + rectHeight / 2 - domHeight / 2;
break;
case "right":
x = rect.x + rectWidth + offset;
y = rect.y + rectHeight / 2 - domHeight / 2;
}
return [x, y];
}
function isCenterAlign(align) {
return align === "center" || align === "middle";
}
function findComponentReference(payload, ecModel, api) {
var queryOptionMap = preParseFinder(payload).queryOptionMap;
var componentMainType = queryOptionMap.keys()[0];
if (!componentMainType || componentMainType === "series") {
return;
}
var queryResult = queryReferringComponents(ecModel, componentMainType, queryOptionMap.get(componentMainType), {
useDefault: false,
enableAll: false,
enableNone: false
});
var model = queryResult.models[0];
if (!model) {
return;
}
var view = api.getViewOfComponentModel(model);
var el;
view.group.traverse(function(subEl) {
var tooltipConfig = getECData(subEl).tooltipConfig;
if (tooltipConfig && tooltipConfig.name === payload.name) {
el = subEl;
return true;
}
});
if (el) {
return {
componentMainType,
componentIndex: model.componentIndex,
el
};
}
}
function install$k(registers) {
use(install$s);
registers.registerComponentModel(TooltipModel);
registers.registerComponentView(TooltipView);
registers.registerAction({
type: "showTip",
event: "showTip",
update: "tooltip:manuallyShowTip"
}, noop);
registers.registerAction({
type: "hideTip",
event: "hideTip",
update: "tooltip:manuallyHideTip"
}, noop);
}
var DEFAULT_TOOLBOX_BTNS = ["rect", "polygon", "keep", "clear"];
function brushPreprocessor(option, isNew) {
var brushComponents = normalizeToArray(option ? option.brush : []);
if (!brushComponents.length) {
return;
}
var brushComponentSpecifiedBtns = [];
each$f(brushComponents, function(brushOpt) {
var tbs = brushOpt.hasOwnProperty("toolbox") ? brushOpt.toolbox : [];
if (tbs instanceof Array) {
brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);
}
});
var toolbox = option && option.toolbox;
if (isArray$1(toolbox)) {
toolbox = toolbox[0];
}
if (!toolbox) {
toolbox = {
feature: {}
};
option.toolbox = [toolbox];
}
var toolboxFeature = toolbox.feature || (toolbox.feature = {});
var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {});
var brushTypes = toolboxBrush.type || (toolboxBrush.type = []);
brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);
removeDuplicate(brushTypes);
if (isNew && !brushTypes.length) {
brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS);
}
}
function removeDuplicate(arr) {
var map2 = {};
each$f(arr, function(val) {
map2[val] = 1;
});
arr.length = 0;
each$f(map2, function(flag, val) {
arr.push(val);
});
}
var each$4 = each$f;
function hasKeys(obj) {
if (obj) {
for (var name_1 in obj) {
if (obj.hasOwnProperty(name_1)) {
return true;
}
}
}
}
function createVisualMappings(option, stateList, supplementVisualOption) {
var visualMappings = {};
each$4(stateList, function(state) {
var mappings = visualMappings[state] = createMappings();
each$4(option[state], function(visualData, visualType) {
if (!VisualMapping.isValidType(visualType)) {
return;
}
var mappingOption = {
type: visualType,
visual: visualData
};
supplementVisualOption && supplementVisualOption(mappingOption, state);
mappings[visualType] = new VisualMapping(mappingOption);
if (visualType === "opacity") {
mappingOption = clone$1(mappingOption);
mappingOption.type = "colorAlpha";
mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);
}
});
});
return visualMappings;
function createMappings() {
var Creater = function() {
};
Creater.prototype.__hidden = Creater.prototype;
var obj = new Creater();
return obj;
}
}
function replaceVisualOption(thisOption, newOption, keys2) {
var has2;
each$f(keys2, function(key) {
if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {
has2 = true;
}
});
has2 && each$f(keys2, function(key) {
if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {
thisOption[key] = clone$1(newOption[key]);
} else {
delete thisOption[key];
}
});
}
function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {
var visualTypesMap = {};
each$f(stateList, function(state) {
var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);
visualTypesMap[state] = visualTypes;
});
var dataIndex;
function getVisual(key) {
return getItemVisualFromData(data, dataIndex, key);
}
function setVisual(key, value) {
setItemVisualFromData(data, dataIndex, key, value);
}
{
data.each(eachItem);
}
function eachItem(valueOrIndex, index) {
dataIndex = valueOrIndex;
var rawDataItem = data.getRawDataItem(dataIndex);
if (rawDataItem && rawDataItem.visualMap === false) {
return;
}
var valueState = getValueState.call(scope, valueOrIndex);
var mappings = visualMappings[valueState];
var visualTypes = visualTypesMap[valueState];
for (var i = 0, len2 = visualTypes.length; i < len2; i++) {
var type = visualTypes[i];
mappings[type] && mappings[type].applyVisual(valueOrIndex, getVisual, setVisual);
}
}
}
function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {
var visualTypesMap = {};
each$f(stateList, function(state) {
var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);
visualTypesMap[state] = visualTypes;
});
return {
progress: function progress(params, data) {
var dimIndex;
if (dim != null) {
dimIndex = data.getDimensionIndex(dim);
}
function getVisual(key) {
return getItemVisualFromData(data, dataIndex, key);
}
function setVisual(key, value2) {
setItemVisualFromData(data, dataIndex, key, value2);
}
var dataIndex;
var store = data.getStore();
while ((dataIndex = params.next()) != null) {
var rawDataItem = data.getRawDataItem(dataIndex);
if (rawDataItem && rawDataItem.visualMap === false) {
continue;
}
var value = dim != null ? store.get(dimIndex, dataIndex) : dataIndex;
var valueState = getValueState(value);
var mappings = visualMappings[valueState];
var visualTypes = visualTypesMap[valueState];
for (var i = 0, len2 = visualTypes.length; i < len2; i++) {
var type = visualTypes[i];
mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual);
}
}
}
};
}
function makeBrushCommonSelectorForSeries(area) {
var brushType = area.brushType;
var selectors = {
point: function(itemLayout) {
return selector[brushType].point(itemLayout, selectors, area);
},
rect: function(itemLayout) {
return selector[brushType].rect(itemLayout, selectors, area);
}
};
return selectors;
}
var selector = {
lineX: getLineSelectors(0),
lineY: getLineSelectors(1),
rect: {
point: function(itemLayout, selectors, area) {
return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]);
},
rect: function(itemLayout, selectors, area) {
return itemLayout && area.boundingRect.intersect(itemLayout);
}
},
polygon: {
point: function(itemLayout, selectors, area) {
return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && contain$1(area.range, itemLayout[0], itemLayout[1]);
},
rect: function(itemLayout, selectors, area) {
var points2 = area.range;
if (!itemLayout || points2.length <= 1) {
return false;
}
var x = itemLayout.x;
var y = itemLayout.y;
var width = itemLayout.width;
var height = itemLayout.height;
var p = points2[0];
if (contain$1(points2, x, y) || contain$1(points2, x + width, y) || contain$1(points2, x, y + height) || contain$1(points2, x + width, y + height) || BoundingRect.create(itemLayout).contain(p[0], p[1]) || linePolygonIntersect(x, y, x + width, y, points2) || linePolygonIntersect(x, y, x, y + height, points2) || linePolygonIntersect(x + width, y, x + width, y + height, points2) || linePolygonIntersect(x, y + height, x + width, y + height, points2)) {
return true;
}
}
}
};
function getLineSelectors(xyIndex) {
var xy = ["x", "y"];
var wh = ["width", "height"];
return {
point: function(itemLayout, selectors, area) {
if (itemLayout) {
var range = area.range;
var p = itemLayout[xyIndex];
return inLineRange(p, range);
}
},
rect: function(itemLayout, selectors, area) {
if (itemLayout) {
var range = area.range;
var layoutRange = [itemLayout[xy[xyIndex]], itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]];
layoutRange[1] < layoutRange[0] && layoutRange.reverse();
return inLineRange(layoutRange[0], range) || inLineRange(layoutRange[1], range) || inLineRange(range[0], layoutRange) || inLineRange(range[1], layoutRange);
}
}
};
}
function inLineRange(p, range) {
return range[0] <= p && p <= range[1];
}
var STATE_LIST = ["inBrush", "outOfBrush"];
var DISPATCH_METHOD = "__ecBrushSelect";
var DISPATCH_FLAG = "__ecInBrushSelectEvent";
function layoutCovers(ecModel) {
ecModel.eachComponent({
mainType: "brush"
}, function(brushModel) {
var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);
brushTargetManager.setInputRanges(brushModel.areas, ecModel);
});
}
function brushVisual(ecModel, api, payload) {
var brushSelected = [];
var throttleType;
var throttleDelay;
ecModel.eachComponent({
mainType: "brush"
}, function(brushModel) {
payload && payload.type === "takeGlobalCursor" && brushModel.setBrushOption(payload.key === "brush" ? payload.brushOption : {
brushType: false
});
});
layoutCovers(ecModel);
ecModel.eachComponent({
mainType: "brush"
}, function(brushModel, brushIndex) {
var thisBrushSelected = {
brushId: brushModel.id,
brushIndex,
brushName: brushModel.name,
areas: clone$1(brushModel.areas),
selected: []
};
brushSelected.push(thisBrushSelected);
var brushOption = brushModel.option;
var brushLink = brushOption.brushLink;
var linkedSeriesMap = [];
var selectedDataIndexForLink = [];
var rangeInfoBySeries = [];
var hasBrushExists = false;
if (!brushIndex) {
throttleType = brushOption.throttleType;
throttleDelay = brushOption.throttleDelay;
}
var areas = map$1(brushModel.areas, function(area) {
var builder = boundingRectBuilders[area.brushType];
var selectableArea = defaults({
boundingRect: builder ? builder(area) : void 0
}, area);
selectableArea.selectors = makeBrushCommonSelectorForSeries(selectableArea);
return selectableArea;
});
var visualMappings = createVisualMappings(brushModel.option, STATE_LIST, function(mappingOption) {
mappingOption.mappingMethod = "fixed";
});
isArray$1(brushLink) && each$f(brushLink, function(seriesIndex) {
linkedSeriesMap[seriesIndex] = 1;
});
function linkOthers(seriesIndex) {
return brushLink === "all" || !!linkedSeriesMap[seriesIndex];
}
function brushed(rangeInfoList) {
return !!rangeInfoList.length;
}
ecModel.eachSeries(function(seriesModel, seriesIndex) {
var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];
seriesModel.subType === "parallel" ? stepAParallel(seriesModel, seriesIndex) : stepAOthers(seriesModel, seriesIndex, rangeInfoList);
});
function stepAParallel(seriesModel, seriesIndex) {
var coordSys = seriesModel.coordinateSystem;
hasBrushExists = hasBrushExists || coordSys.hasAxisBrushed();
linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function(activeState, dataIndex) {
activeState === "active" && (selectedDataIndexForLink[dataIndex] = 1);
});
}
function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {
if (!seriesModel.brushSelector || brushModelNotControll(brushModel, seriesIndex)) {
return;
}
each$f(areas, function(area) {
if (brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)) {
rangeInfoList.push(area);
}
hasBrushExists = hasBrushExists || brushed(rangeInfoList);
});
if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {
var data_1 = seriesModel.getData();
data_1.each(function(dataIndex) {
if (checkInRange(seriesModel, rangeInfoList, data_1, dataIndex)) {
selectedDataIndexForLink[dataIndex] = 1;
}
});
}
}
ecModel.eachSeries(function(seriesModel, seriesIndex) {
var seriesBrushSelected = {
seriesId: seriesModel.id,
seriesIndex,
seriesName: seriesModel.name,
dataIndex: []
};
thisBrushSelected.selected.push(seriesBrushSelected);
var rangeInfoList = rangeInfoBySeries[seriesIndex];
var data = seriesModel.getData();
var getValueState = linkOthers(seriesIndex) ? function(dataIndex) {
return selectedDataIndexForLink[dataIndex] ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), "inBrush") : "outOfBrush";
} : function(dataIndex) {
return checkInRange(seriesModel, rangeInfoList, data, dataIndex) ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), "inBrush") : "outOfBrush";
};
(linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) && applyVisual(STATE_LIST, visualMappings, data, getValueState);
});
});
dispatchAction$1(api, throttleType, throttleDelay, brushSelected, payload);
}
function dispatchAction$1(api, throttleType, throttleDelay, brushSelected, payload) {
if (!payload) {
return;
}
var zr = api.getZr();
if (zr[DISPATCH_FLAG]) {
return;
}
if (!zr[DISPATCH_METHOD]) {
zr[DISPATCH_METHOD] = doDispatch;
}
var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);
fn(api, brushSelected);
}
function doDispatch(api, brushSelected) {
if (!api.isDisposed()) {
var zr = api.getZr();
zr[DISPATCH_FLAG] = true;
api.dispatchAction({
type: "brushSelect",
batch: brushSelected
});
zr[DISPATCH_FLAG] = false;
}
}
function checkInRange(seriesModel, rangeInfoList, data, dataIndex) {
for (var i = 0, len2 = rangeInfoList.length; i < len2; i++) {
var area = rangeInfoList[i];
if (seriesModel.brushSelector(dataIndex, data, area.selectors, area)) {
return true;
}
}
}
function brushModelNotControll(brushModel, seriesIndex) {
var seriesIndices = brushModel.option.seriesIndex;
return seriesIndices != null && seriesIndices !== "all" && (isArray$1(seriesIndices) ? indexOf(seriesIndices, seriesIndex) < 0 : seriesIndex !== seriesIndices);
}
var boundingRectBuilders = {
rect: function(area) {
return getBoundingRectFromMinMax(area.range);
},
polygon: function(area) {
var minMax;
var range = area.range;
for (var i = 0, len2 = range.length; i < len2; i++) {
minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]];
var rg = range[i];
rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]);
rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]);
rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]);
rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]);
}
return minMax && getBoundingRectFromMinMax(minMax);
}
};
function getBoundingRectFromMinMax(minMax) {
return new BoundingRect(minMax[0][0], minMax[1][0], minMax[0][1] - minMax[0][0], minMax[1][1] - minMax[1][0]);
}
var BrushView = (
/** @class */
(function(_super) {
__extends(BrushView2, _super);
function BrushView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BrushView2.type;
return _this;
}
BrushView2.prototype.init = function(ecModel, api) {
this.ecModel = ecModel;
this.api = api;
this.model;
(this._brushController = new BrushController(api.getZr())).on("brush", bind$1(this._onBrush, this)).mount();
};
BrushView2.prototype.render = function(brushModel, ecModel, api, payload) {
this.model = brushModel;
this._updateController(brushModel, ecModel, api, payload);
};
BrushView2.prototype.updateTransform = function(brushModel, ecModel, api, payload) {
layoutCovers(ecModel);
this._updateController(brushModel, ecModel, api, payload);
};
BrushView2.prototype.updateVisual = function(brushModel, ecModel, api, payload) {
this.updateTransform(brushModel, ecModel, api, payload);
};
BrushView2.prototype.updateView = function(brushModel, ecModel, api, payload) {
this._updateController(brushModel, ecModel, api, payload);
};
BrushView2.prototype._updateController = function(brushModel, ecModel, api, payload) {
(!payload || payload.$from !== brushModel.id) && this._brushController.setPanels(brushModel.brushTargetManager.makePanelOpts(api)).enableBrush(brushModel.brushOption).updateCovers(brushModel.areas.slice());
};
BrushView2.prototype.dispose = function() {
this._brushController.dispose();
};
BrushView2.prototype._onBrush = function(eventParam) {
var modelId = this.model.id;
var areas = this.model.brushTargetManager.setOutputRanges(eventParam.areas, this.ecModel);
(!eventParam.isEnd || eventParam.removeOnClick) && this.api.dispatchAction({
type: "brush",
brushId: modelId,
areas: clone$1(areas),
$from: modelId
});
eventParam.isEnd && this.api.dispatchAction({
type: "brushEnd",
brushId: modelId,
areas: clone$1(areas),
$from: modelId
});
};
BrushView2.type = "brush";
return BrushView2;
})(ComponentView)
);
var DEFAULT_OUT_OF_BRUSH_COLOR = "#ddd";
var BrushModel = (
/** @class */
(function(_super) {
__extends(BrushModel2, _super);
function BrushModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = BrushModel2.type;
_this.areas = [];
_this.brushOption = {};
return _this;
}
BrushModel2.prototype.optionUpdated = function(newOption, isInit) {
var thisOption = this.option;
!isInit && replaceVisualOption(thisOption, newOption, ["inBrush", "outOfBrush"]);
var inBrush = thisOption.inBrush = thisOption.inBrush || {};
thisOption.outOfBrush = thisOption.outOfBrush || {
color: DEFAULT_OUT_OF_BRUSH_COLOR
};
if (!inBrush.hasOwnProperty("liftZ")) {
inBrush.liftZ = 5;
}
};
BrushModel2.prototype.setAreas = function(areas) {
if (!areas) {
return;
}
this.areas = map$1(areas, function(area) {
return generateBrushOption(this.option, area);
}, this);
};
BrushModel2.prototype.setBrushOption = function(brushOption) {
this.brushOption = generateBrushOption(this.option, brushOption);
this.brushType = this.brushOption.brushType;
};
BrushModel2.type = "brush";
BrushModel2.dependencies = ["geo", "grid", "xAxis", "yAxis", "parallel", "series"];
BrushModel2.defaultOption = {
seriesIndex: "all",
brushType: "rect",
brushMode: "single",
transformable: true,
brushStyle: {
borderWidth: 1,
color: "rgba(210,219,238,0.3)",
borderColor: "#D2DBEE"
},
throttleType: "fixRate",
throttleDelay: 0,
removeOnClick: true,
z: 1e4
};
return BrushModel2;
})(ComponentModel)
);
function generateBrushOption(option, brushOption) {
return merge({
brushType: option.brushType,
brushMode: option.brushMode,
transformable: option.transformable,
brushStyle: new Model(option.brushStyle).getItemStyle(),
removeOnClick: option.removeOnClick,
z: option.z
}, brushOption, true);
}
var ICON_TYPES = ["rect", "polygon", "lineX", "lineY", "keep", "clear"];
var BrushFeature = (
/** @class */
(function(_super) {
__extends(BrushFeature2, _super);
function BrushFeature2() {
return _super !== null && _super.apply(this, arguments) || this;
}
BrushFeature2.prototype.render = function(featureModel, ecModel, api) {
var brushType;
var brushMode;
var isBrushed;
ecModel.eachComponent({
mainType: "brush"
}, function(brushModel) {
brushType = brushModel.brushType;
brushMode = brushModel.brushOption.brushMode || "single";
isBrushed = isBrushed || !!brushModel.areas.length;
});
this._brushType = brushType;
this._brushMode = brushMode;
each$f(featureModel.get("type", true), function(type) {
featureModel.setIconStatus(type, (type === "keep" ? brushMode === "multiple" : type === "clear" ? isBrushed : type === brushType) ? "emphasis" : "normal");
});
};
BrushFeature2.prototype.updateView = function(featureModel, ecModel, api) {
this.render(featureModel, ecModel, api);
};
BrushFeature2.prototype.getIcons = function() {
var model = this.model;
var availableIcons = model.get("icon", true);
var icons = {};
each$f(model.get("type", true), function(type) {
if (availableIcons[type]) {
icons[type] = availableIcons[type];
}
});
return icons;
};
BrushFeature2.prototype.onclick = function(ecModel, api, type) {
var brushType = this._brushType;
var brushMode = this._brushMode;
if (type === "clear") {
api.dispatchAction({
type: "axisAreaSelect",
intervals: []
});
api.dispatchAction({
type: "brush",
command: "clear",
// Clear all areas of all brush components.
areas: []
});
} else {
api.dispatchAction({
type: "takeGlobalCursor",
key: "brush",
brushOption: {
brushType: type === "keep" ? brushType : brushType === type ? false : type,
brushMode: type === "keep" ? brushMode === "multiple" ? "single" : "multiple" : brushMode
}
});
}
};
BrushFeature2.getDefaultOption = function(ecModel) {
var defaultOption2 = {
show: true,
type: ICON_TYPES.slice(),
icon: {
/* eslint-disable */
rect: "M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",
polygon: "M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",
lineX: "M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",
lineY: "M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",
keep: "M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",
clear: "M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"
// jshint ignore:line
/* eslint-enable */
},
// `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`
title: ecModel.getLocaleModel().get(["toolbox", "brush", "title"])
};
return defaultOption2;
};
return BrushFeature2;
})(ToolboxFeature)
);
function install$j(registers) {
registers.registerComponentView(BrushView);
registers.registerComponentModel(BrushModel);
registers.registerPreprocessor(brushPreprocessor);
registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, brushVisual);
registers.registerAction({
type: "brush",
event: "brush",
update: "updateVisual"
}, function(payload, ecModel) {
ecModel.eachComponent({
mainType: "brush",
query: payload
}, function(brushModel) {
brushModel.setAreas(payload.areas);
});
});
registers.registerAction({
type: "brushSelect",
event: "brushSelected",
update: "none"
}, noop);
registers.registerAction({
type: "brushEnd",
event: "brushEnd",
update: "none"
}, noop);
registerFeature("brush", BrushFeature);
}
var TitleModel = (
/** @class */
(function(_super) {
__extends(TitleModel2, _super);
function TitleModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TitleModel2.type;
_this.layoutMode = {
type: "box",
ignoreSize: true
};
return _this;
}
TitleModel2.type = "title";
TitleModel2.defaultOption = {
// zlevel: 0,
z: 6,
show: true,
text: "",
target: "blank",
subtext: "",
subtarget: "blank",
left: 0,
top: 0,
backgroundColor: "rgba(0,0,0,0)",
borderColor: "#ccc",
borderWidth: 0,
padding: 5,
itemGap: 10,
textStyle: {
fontSize: 18,
fontWeight: "bold",
color: "#464646"
},
subtextStyle: {
fontSize: 12,
color: "#6E7079"
}
};
return TitleModel2;
})(ComponentModel)
);
var TitleView = (
/** @class */
(function(_super) {
__extends(TitleView2, _super);
function TitleView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TitleView2.type;
return _this;
}
TitleView2.prototype.render = function(titleModel, ecModel, api) {
this.group.removeAll();
if (!titleModel.get("show")) {
return;
}
var group = this.group;
var textStyleModel = titleModel.getModel("textStyle");
var subtextStyleModel = titleModel.getModel("subtextStyle");
var textAlign = titleModel.get("textAlign");
var textVerticalAlign = retrieve2(titleModel.get("textBaseline"), titleModel.get("textVerticalAlign"));
var textEl = new ZRText({
style: createTextStyle(textStyleModel, {
text: titleModel.get("text"),
fill: textStyleModel.getTextColor()
}, {
disableBox: true
}),
z2: 10
});
var textRect = textEl.getBoundingRect();
var subText = titleModel.get("subtext");
var subTextEl = new ZRText({
style: createTextStyle(subtextStyleModel, {
text: subText,
fill: subtextStyleModel.getTextColor(),
y: textRect.height + titleModel.get("itemGap"),
verticalAlign: "top"
}, {
disableBox: true
}),
z2: 10
});
var link = titleModel.get("link");
var sublink = titleModel.get("sublink");
var triggerEvent = titleModel.get("triggerEvent", true);
textEl.silent = !link && !triggerEvent;
subTextEl.silent = !sublink && !triggerEvent;
if (link) {
textEl.on("click", function() {
windowOpen(link, "_" + titleModel.get("target"));
});
}
if (sublink) {
subTextEl.on("click", function() {
windowOpen(sublink, "_" + titleModel.get("subtarget"));
});
}
getECData(textEl).eventData = getECData(subTextEl).eventData = triggerEvent ? {
componentType: "title",
componentIndex: titleModel.componentIndex
} : null;
group.add(textEl);
subText && group.add(subTextEl);
var groupRect = group.getBoundingRect();
var layoutOption = titleModel.getBoxLayoutParams();
layoutOption.width = groupRect.width;
layoutOption.height = groupRect.height;
var layoutRect = getLayoutRect(layoutOption, {
width: api.getWidth(),
height: api.getHeight()
}, titleModel.get("padding"));
if (!textAlign) {
textAlign = titleModel.get("left") || titleModel.get("right");
if (textAlign === "middle") {
textAlign = "center";
}
if (textAlign === "right") {
layoutRect.x += layoutRect.width;
} else if (textAlign === "center") {
layoutRect.x += layoutRect.width / 2;
}
}
if (!textVerticalAlign) {
textVerticalAlign = titleModel.get("top") || titleModel.get("bottom");
if (textVerticalAlign === "center") {
textVerticalAlign = "middle";
}
if (textVerticalAlign === "bottom") {
layoutRect.y += layoutRect.height;
} else if (textVerticalAlign === "middle") {
layoutRect.y += layoutRect.height / 2;
}
textVerticalAlign = textVerticalAlign || "top";
}
group.x = layoutRect.x;
group.y = layoutRect.y;
group.markRedraw();
var alignStyle = {
align: textAlign,
verticalAlign: textVerticalAlign
};
textEl.setStyle(alignStyle);
subTextEl.setStyle(alignStyle);
groupRect = group.getBoundingRect();
var padding = layoutRect.margin;
var style = titleModel.getItemStyle(["color", "opacity"]);
style.fill = titleModel.get("backgroundColor");
var rect = new Rect$2({
shape: {
x: groupRect.x - padding[3],
y: groupRect.y - padding[0],
width: groupRect.width + padding[1] + padding[3],
height: groupRect.height + padding[0] + padding[2],
r: titleModel.get("borderRadius")
},
style,
subPixelOptimize: true,
silent: true
});
group.add(rect);
};
TitleView2.type = "title";
return TitleView2;
})(ComponentView)
);
function install$i(registers) {
registers.registerComponentModel(TitleModel);
registers.registerComponentView(TitleView);
}
var TimelineModel = (
/** @class */
(function(_super) {
__extends(TimelineModel2, _super);
function TimelineModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TimelineModel2.type;
_this.layoutMode = "box";
return _this;
}
TimelineModel2.prototype.init = function(option, parentModel, ecModel) {
this.mergeDefaultAndTheme(option, ecModel);
this._initData();
};
TimelineModel2.prototype.mergeOption = function(option) {
_super.prototype.mergeOption.apply(this, arguments);
this._initData();
};
TimelineModel2.prototype.setCurrentIndex = function(currentIndex) {
if (currentIndex == null) {
currentIndex = this.option.currentIndex;
}
var count2 = this._data.count();
if (this.option.loop) {
currentIndex = (currentIndex % count2 + count2) % count2;
} else {
currentIndex >= count2 && (currentIndex = count2 - 1);
currentIndex < 0 && (currentIndex = 0);
}
this.option.currentIndex = currentIndex;
};
TimelineModel2.prototype.getCurrentIndex = function() {
return this.option.currentIndex;
};
TimelineModel2.prototype.isIndexMax = function() {
return this.getCurrentIndex() >= this._data.count() - 1;
};
TimelineModel2.prototype.setPlayState = function(state) {
this.option.autoPlay = !!state;
};
TimelineModel2.prototype.getPlayState = function() {
return !!this.option.autoPlay;
};
TimelineModel2.prototype._initData = function() {
var thisOption = this.option;
var dataArr = thisOption.data || [];
var axisType = thisOption.axisType;
var names = this._names = [];
var processedDataArr;
if (axisType === "category") {
processedDataArr = [];
each$f(dataArr, function(item, index) {
var value = convertOptionIdName(getDataItemValue(item), "");
var newItem;
if (isObject$3(item)) {
newItem = clone$1(item);
newItem.value = index;
} else {
newItem = index;
}
processedDataArr.push(newItem);
names.push(value);
});
} else {
processedDataArr = dataArr;
}
var dimType = {
category: "ordinal",
time: "time",
value: "number"
}[axisType] || "number";
var data = this._data = new SeriesData([{
name: "value",
type: dimType
}], this);
data.initData(processedDataArr, names);
};
TimelineModel2.prototype.getData = function() {
return this._data;
};
TimelineModel2.prototype.getCategories = function() {
if (this.get("axisType") === "category") {
return this._names.slice();
}
};
TimelineModel2.type = "timeline";
TimelineModel2.defaultOption = {
// zlevel: 0, // 一级层叠
z: 4,
show: true,
axisType: "time",
realtime: true,
left: "20%",
top: null,
right: "20%",
bottom: 0,
width: null,
height: 40,
padding: 5,
controlPosition: "left",
autoPlay: false,
rewind: false,
loop: true,
playInterval: 2e3,
currentIndex: 0,
itemStyle: {},
label: {
color: "#000"
},
data: []
};
return TimelineModel2;
})(ComponentModel)
);
var SliderTimelineModel = (
/** @class */
(function(_super) {
__extends(SliderTimelineModel2, _super);
function SliderTimelineModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SliderTimelineModel2.type;
return _this;
}
SliderTimelineModel2.type = "timeline.slider";
SliderTimelineModel2.defaultOption = inheritDefaultOption(TimelineModel.defaultOption, {
backgroundColor: "rgba(0,0,0,0)",
borderColor: "#ccc",
borderWidth: 0,
orient: "horizontal",
inverse: false,
tooltip: {
trigger: "item"
// data item may also have tootip attr.
},
symbol: "circle",
symbolSize: 12,
lineStyle: {
show: true,
width: 2,
color: "#DAE1F5"
},
label: {
position: "auto",
// When using number, label position is not
// restricted by viewRect.
// positive: right/bottom, negative: left/top
show: true,
interval: "auto",
rotate: 0,
// formatter: null,
// 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: "#A4B1D7"
},
itemStyle: {
color: "#A4B1D7",
borderWidth: 1
},
checkpointStyle: {
symbol: "circle",
symbolSize: 15,
color: "#316bf3",
borderColor: "#fff",
borderWidth: 2,
shadowBlur: 2,
shadowOffsetX: 1,
shadowOffsetY: 1,
shadowColor: "rgba(0, 0, 0, 0.3)",
// borderColor: 'rgba(194,53,49, 0.5)',
animation: true,
animationDuration: 300,
animationEasing: "quinticInOut"
},
controlStyle: {
show: true,
showPlayBtn: true,
showPrevBtn: true,
showNextBtn: true,
itemSize: 24,
itemGap: 12,
position: "left",
playIcon: "path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",
stopIcon: "path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",
// eslint-disable-next-line max-len
nextIcon: "M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z",
// eslint-disable-next-line max-len
prevIcon: "M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z",
prevBtnSize: 18,
nextBtnSize: 18,
color: "#A4B1D7",
borderColor: "#A4B1D7",
borderWidth: 1
},
emphasis: {
label: {
show: true,
// 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: "#6f778d"
},
itemStyle: {
color: "#316BF3"
},
controlStyle: {
color: "#316BF3",
borderColor: "#316BF3",
borderWidth: 2
}
},
progress: {
lineStyle: {
color: "#316BF3"
},
itemStyle: {
color: "#316BF3"
},
label: {
color: "#6f778d"
}
},
data: []
});
return SliderTimelineModel2;
})(TimelineModel)
);
mixin(SliderTimelineModel, DataFormatMixin.prototype);
var TimelineView = (
/** @class */
(function(_super) {
__extends(TimelineView2, _super);
function TimelineView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = TimelineView2.type;
return _this;
}
TimelineView2.type = "timeline";
return TimelineView2;
})(ComponentView)
);
var TimelineAxis = (
/** @class */
(function(_super) {
__extends(TimelineAxis2, _super);
function TimelineAxis2(dim, scale2, coordExtent, axisType) {
var _this = _super.call(this, dim, scale2, coordExtent) || this;
_this.type = axisType || "value";
return _this;
}
TimelineAxis2.prototype.getLabelModel = function() {
return this.model.getModel("label");
};
TimelineAxis2.prototype.isHorizontal = function() {
return this.model.get("orient") === "horizontal";
};
return TimelineAxis2;
})(Axis)
);
var PI = Math.PI;
var labelDataIndexStore = makeInner();
var SliderTimelineView = (
/** @class */
(function(_super) {
__extends(SliderTimelineView2, _super);
function SliderTimelineView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SliderTimelineView2.type;
return _this;
}
SliderTimelineView2.prototype.init = function(ecModel, api) {
this.api = api;
};
SliderTimelineView2.prototype.render = function(timelineModel, ecModel, api) {
this.model = timelineModel;
this.api = api;
this.ecModel = ecModel;
this.group.removeAll();
if (timelineModel.get("show", true)) {
var layoutInfo_1 = this._layout(timelineModel, api);
var mainGroup_1 = this._createGroup("_mainGroup");
var labelGroup = this._createGroup("_labelGroup");
var axis_1 = this._axis = this._createAxis(layoutInfo_1, timelineModel);
timelineModel.formatTooltip = function(dataIndex) {
var name = axis_1.scale.getLabel({
value: dataIndex
});
return createTooltipMarkup("nameValue", {
noName: true,
value: name
});
};
each$f(["AxisLine", "AxisTick", "Control", "CurrentPointer"], function(name) {
this["_render" + name](layoutInfo_1, mainGroup_1, axis_1, timelineModel);
}, this);
this._renderAxisLabel(layoutInfo_1, labelGroup, axis_1, timelineModel);
this._position(layoutInfo_1, timelineModel);
}
this._doPlayStop();
this._updateTicksStatus();
};
SliderTimelineView2.prototype.remove = function() {
this._clearTimer();
this.group.removeAll();
};
SliderTimelineView2.prototype.dispose = function() {
this._clearTimer();
};
SliderTimelineView2.prototype._layout = function(timelineModel, api) {
var labelPosOpt = timelineModel.get(["label", "position"]);
var orient = timelineModel.get("orient");
var viewRect = getViewRect(timelineModel, api);
var parsedLabelPos;
if (labelPosOpt == null || labelPosOpt === "auto") {
parsedLabelPos = orient === "horizontal" ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? "-" : "+" : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? "+" : "-";
} else if (isString(labelPosOpt)) {
parsedLabelPos = {
horizontal: {
top: "-",
bottom: "+"
},
vertical: {
left: "-",
right: "+"
}
}[orient][labelPosOpt];
} else {
parsedLabelPos = labelPosOpt;
}
var labelAlignMap = {
horizontal: "center",
vertical: parsedLabelPos >= 0 || parsedLabelPos === "+" ? "left" : "right"
};
var labelBaselineMap = {
horizontal: parsedLabelPos >= 0 || parsedLabelPos === "+" ? "top" : "bottom",
vertical: "middle"
};
var rotationMap = {
horizontal: 0,
vertical: PI / 2
};
var mainLength = orient === "vertical" ? viewRect.height : viewRect.width;
var controlModel = timelineModel.getModel("controlStyle");
var showControl = controlModel.get("show", true);
var controlSize = showControl ? controlModel.get("itemSize") : 0;
var controlGap = showControl ? controlModel.get("itemGap") : 0;
var sizePlusGap = controlSize + controlGap;
var labelRotation = timelineModel.get(["label", "rotate"]) || 0;
labelRotation = labelRotation * PI / 180;
var playPosition;
var prevBtnPosition;
var nextBtnPosition;
var controlPosition = controlModel.get("position", true);
var showPlayBtn = showControl && controlModel.get("showPlayBtn", true);
var showPrevBtn = showControl && controlModel.get("showPrevBtn", true);
var showNextBtn = showControl && controlModel.get("showNextBtn", true);
var xLeft = 0;
var xRight = mainLength;
if (controlPosition === "left" || controlPosition === "bottom") {
showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap);
showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap);
showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
} else {
showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap);
showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
}
var axisExtent = [xLeft, xRight];
if (timelineModel.get("inverse")) {
axisExtent.reverse();
}
return {
viewRect,
mainLength,
orient,
rotation: rotationMap[orient],
labelRotation,
labelPosOpt: parsedLabelPos,
labelAlign: timelineModel.get(["label", "align"]) || labelAlignMap[orient],
labelBaseline: timelineModel.get(["label", "verticalAlign"]) || timelineModel.get(["label", "baseline"]) || labelBaselineMap[orient],
// Based on mainGroup.
playPosition,
prevBtnPosition,
nextBtnPosition,
axisExtent,
controlSize,
controlGap
};
};
SliderTimelineView2.prototype._position = function(layoutInfo, timelineModel) {
var mainGroup = this._mainGroup;
var labelGroup = this._labelGroup;
var viewRect = layoutInfo.viewRect;
if (layoutInfo.orient === "vertical") {
var m = create$1();
var rotateOriginX = viewRect.x;
var rotateOriginY = viewRect.y + viewRect.height;
translate(m, m, [-rotateOriginX, -rotateOriginY]);
rotate(m, m, -PI / 2);
translate(m, m, [rotateOriginX, rotateOriginY]);
viewRect = viewRect.clone();
viewRect.applyTransform(m);
}
var viewBound = getBound(viewRect);
var mainBound = getBound(mainGroup.getBoundingRect());
var labelBound = getBound(labelGroup.getBoundingRect());
var mainPosition = [mainGroup.x, mainGroup.y];
var labelsPosition = [labelGroup.x, labelGroup.y];
labelsPosition[0] = mainPosition[0] = viewBound[0][0];
var labelPosOpt = layoutInfo.labelPosOpt;
if (labelPosOpt == null || isString(labelPosOpt)) {
var mainBoundIdx = labelPosOpt === "+" ? 0 : 1;
toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);
toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);
} else {
var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1;
toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);
labelsPosition[1] = mainPosition[1] + labelPosOpt;
}
mainGroup.setPosition(mainPosition);
labelGroup.setPosition(labelsPosition);
mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;
setOrigin(mainGroup);
setOrigin(labelGroup);
function setOrigin(targetGroup) {
targetGroup.originX = viewBound[0][0] - targetGroup.x;
targetGroup.originY = viewBound[1][0] - targetGroup.y;
}
function getBound(rect) {
return [[rect.x, rect.x + rect.width], [rect.y, rect.y + rect.height]];
}
function toBound(fromPos, from, to, dimIdx, boundIdx) {
fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];
}
};
SliderTimelineView2.prototype._createAxis = function(layoutInfo, timelineModel) {
var data = timelineModel.getData();
var axisType = timelineModel.get("axisType");
var scale2 = createScaleByModel(timelineModel, axisType);
scale2.getTicks = function() {
return data.mapArray(["value"], function(value) {
return {
value
};
});
};
var dataExtent = data.getDataExtent("value");
scale2.setExtent(dataExtent[0], dataExtent[1]);
scale2.calcNiceTicks();
var axis = new TimelineAxis("value", scale2, layoutInfo.axisExtent, axisType);
axis.model = timelineModel;
return axis;
};
SliderTimelineView2.prototype._createGroup = function(key) {
var newGroup = this[key] = new Group$3();
this.group.add(newGroup);
return newGroup;
};
SliderTimelineView2.prototype._renderAxisLine = function(layoutInfo, group, axis, timelineModel) {
var axisExtent = axis.getExtent();
if (!timelineModel.get(["lineStyle", "show"])) {
return;
}
var line = new Line$1({
shape: {
x1: axisExtent[0],
y1: 0,
x2: axisExtent[1],
y2: 0
},
style: extend({
lineCap: "round"
}, timelineModel.getModel("lineStyle").getLineStyle()),
silent: true,
z2: 1
});
group.add(line);
var progressLine = this._progressLine = new Line$1({
shape: {
x1: axisExtent[0],
x2: this._currentPointer ? this._currentPointer.x : axisExtent[0],
y1: 0,
y2: 0
},
style: defaults({
lineCap: "round",
lineWidth: line.style.lineWidth
}, timelineModel.getModel(["progress", "lineStyle"]).getLineStyle()),
silent: true,
z2: 1
});
group.add(progressLine);
};
SliderTimelineView2.prototype._renderAxisTick = function(layoutInfo, group, axis, timelineModel) {
var _this = this;
var data = timelineModel.getData();
var ticks = axis.scale.getTicks();
this._tickSymbols = [];
each$f(ticks, function(tick) {
var tickCoord = axis.dataToCoord(tick.value);
var itemModel = data.getItemModel(tick.value);
var itemStyleModel = itemModel.getModel("itemStyle");
var hoverStyleModel = itemModel.getModel(["emphasis", "itemStyle"]);
var progressStyleModel = itemModel.getModel(["progress", "itemStyle"]);
var symbolOpt = {
x: tickCoord,
y: 0,
onclick: bind$1(_this._changeTimeline, _this, tick.value)
};
var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);
el.ensureState("emphasis").style = hoverStyleModel.getItemStyle();
el.ensureState("progress").style = progressStyleModel.getItemStyle();
enableHoverEmphasis(el);
var ecData = getECData(el);
if (itemModel.get("tooltip")) {
ecData.dataIndex = tick.value;
ecData.dataModel = timelineModel;
} else {
ecData.dataIndex = ecData.dataModel = null;
}
_this._tickSymbols.push(el);
});
};
SliderTimelineView2.prototype._renderAxisLabel = function(layoutInfo, group, axis, timelineModel) {
var _this = this;
var labelModel = axis.getLabelModel();
if (!labelModel.get("show")) {
return;
}
var data = timelineModel.getData();
var labels = axis.getViewLabels();
this._tickLabels = [];
each$f(labels, function(labelItem) {
var dataIndex = labelItem.tickValue;
var itemModel = data.getItemModel(dataIndex);
var normalLabelModel = itemModel.getModel("label");
var hoverLabelModel = itemModel.getModel(["emphasis", "label"]);
var progressLabelModel = itemModel.getModel(["progress", "label"]);
var tickCoord = axis.dataToCoord(labelItem.tickValue);
var textEl = new ZRText({
x: tickCoord,
y: 0,
rotation: layoutInfo.labelRotation - layoutInfo.rotation,
onclick: bind$1(_this._changeTimeline, _this, dataIndex),
silent: false,
style: createTextStyle(normalLabelModel, {
text: labelItem.formattedLabel,
align: layoutInfo.labelAlign,
verticalAlign: layoutInfo.labelBaseline
})
});
textEl.ensureState("emphasis").style = createTextStyle(hoverLabelModel);
textEl.ensureState("progress").style = createTextStyle(progressLabelModel);
group.add(textEl);
enableHoverEmphasis(textEl);
labelDataIndexStore(textEl).dataIndex = dataIndex;
_this._tickLabels.push(textEl);
});
};
SliderTimelineView2.prototype._renderControl = function(layoutInfo, group, axis, timelineModel) {
var controlSize = layoutInfo.controlSize;
var rotation = layoutInfo.rotation;
var itemStyle = timelineModel.getModel("controlStyle").getItemStyle();
var hoverStyle = timelineModel.getModel(["emphasis", "controlStyle"]).getItemStyle();
var playState = timelineModel.getPlayState();
var inverse = timelineModel.get("inverse", true);
makeBtn(layoutInfo.nextBtnPosition, "next", bind$1(this._changeTimeline, this, inverse ? "-" : "+"));
makeBtn(layoutInfo.prevBtnPosition, "prev", bind$1(this._changeTimeline, this, inverse ? "+" : "-"));
makeBtn(layoutInfo.playPosition, playState ? "stop" : "play", bind$1(this._handlePlayClick, this, !playState), true);
function makeBtn(position2, iconName, onclick, willRotate) {
if (!position2) {
return;
}
var iconSize = parsePercent$1(retrieve2(timelineModel.get(["controlStyle", iconName + "BtnSize"]), controlSize), controlSize);
var rect = [0, -iconSize / 2, iconSize, iconSize];
var btn = makeControlIcon(timelineModel, iconName + "Icon", rect, {
x: position2[0],
y: position2[1],
originX: controlSize / 2,
originY: 0,
rotation: willRotate ? -rotation : 0,
rectHover: true,
style: itemStyle,
onclick
});
btn.ensureState("emphasis").style = hoverStyle;
group.add(btn);
enableHoverEmphasis(btn);
}
};
SliderTimelineView2.prototype._renderCurrentPointer = function(layoutInfo, group, axis, timelineModel) {
var data = timelineModel.getData();
var currentIndex = timelineModel.getCurrentIndex();
var pointerModel = data.getItemModel(currentIndex).getModel("checkpointStyle");
var me = this;
var callback = {
onCreate: function(pointer) {
pointer.draggable = true;
pointer.drift = bind$1(me._handlePointerDrag, me);
pointer.ondragend = bind$1(me._handlePointerDragend, me);
pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel, true);
},
onUpdate: function(pointer) {
pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel);
}
};
this._currentPointer = giveSymbol(pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback);
};
SliderTimelineView2.prototype._handlePlayClick = function(nextState) {
this._clearTimer();
this.api.dispatchAction({
type: "timelinePlayChange",
playState: nextState,
from: this.uid
});
};
SliderTimelineView2.prototype._handlePointerDrag = function(dx, dy, e) {
this._clearTimer();
this._pointerChangeTimeline([e.offsetX, e.offsetY]);
};
SliderTimelineView2.prototype._handlePointerDragend = function(e) {
this._pointerChangeTimeline([e.offsetX, e.offsetY], true);
};
SliderTimelineView2.prototype._pointerChangeTimeline = function(mousePos, trigger2) {
var toCoord = this._toAxisCoord(mousePos)[0];
var axis = this._axis;
var axisExtent = asc$2(axis.getExtent().slice());
toCoord > axisExtent[1] && (toCoord = axisExtent[1]);
toCoord < axisExtent[0] && (toCoord = axisExtent[0]);
this._currentPointer.x = toCoord;
this._currentPointer.markRedraw();
var progressLine = this._progressLine;
if (progressLine) {
progressLine.shape.x2 = toCoord;
progressLine.dirty();
}
var targetDataIndex = this._findNearestTick(toCoord);
var timelineModel = this.model;
if (trigger2 || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get("realtime")) {
this._changeTimeline(targetDataIndex);
}
};
SliderTimelineView2.prototype._doPlayStop = function() {
var _this = this;
this._clearTimer();
if (this.model.getPlayState()) {
this._timer = setTimeout(function() {
var timelineModel = _this.model;
_this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get("rewind", true) ? -1 : 1));
}, this.model.get("playInterval"));
}
};
SliderTimelineView2.prototype._toAxisCoord = function(vertex) {
var trans = this._mainGroup.getLocalTransform();
return applyTransform(vertex, trans, true);
};
SliderTimelineView2.prototype._findNearestTick = function(axisCoord) {
var data = this.model.getData();
var dist2 = Infinity;
var targetDataIndex;
var axis = this._axis;
data.each(["value"], function(value, dataIndex) {
var coord = axis.dataToCoord(value);
var d = Math.abs(coord - axisCoord);
if (d < dist2) {
dist2 = d;
targetDataIndex = dataIndex;
}
});
return targetDataIndex;
};
SliderTimelineView2.prototype._clearTimer = function() {
if (this._timer) {
clearTimeout(this._timer);
this._timer = null;
}
};
SliderTimelineView2.prototype._changeTimeline = function(nextIndex) {
var currentIndex = this.model.getCurrentIndex();
if (nextIndex === "+") {
nextIndex = currentIndex + 1;
} else if (nextIndex === "-") {
nextIndex = currentIndex - 1;
}
this.api.dispatchAction({
type: "timelineChange",
currentIndex: nextIndex,
from: this.uid
});
};
SliderTimelineView2.prototype._updateTicksStatus = function() {
var currentIndex = this.model.getCurrentIndex();
var tickSymbols = this._tickSymbols;
var tickLabels = this._tickLabels;
if (tickSymbols) {
for (var i = 0; i < tickSymbols.length; i++) {
tickSymbols && tickSymbols[i] && tickSymbols[i].toggleState("progress", i < currentIndex);
}
}
if (tickLabels) {
for (var i = 0; i < tickLabels.length; i++) {
tickLabels && tickLabels[i] && tickLabels[i].toggleState("progress", labelDataIndexStore(tickLabels[i]).dataIndex <= currentIndex);
}
}
};
SliderTimelineView2.type = "timeline.slider";
return SliderTimelineView2;
})(TimelineView)
);
function createScaleByModel(model, axisType) {
axisType = axisType || model.get("type");
if (axisType) {
switch (axisType) {
// Buildin scale
case "category":
return new OrdinalScale({
ordinalMeta: model.getCategories(),
extent: [Infinity, -Infinity]
});
case "time":
return new TimeScale({
locale: model.ecModel.getLocaleModel(),
useUTC: model.ecModel.get("useUTC")
});
default:
return new IntervalScale();
}
}
}
function getViewRect(model, api) {
return getLayoutRect(model.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
}, model.get("padding"));
}
function makeControlIcon(timelineModel, objPath, rect, opts) {
var style = opts.style;
var icon = createIcon(timelineModel.get(["controlStyle", objPath]), opts || {}, new BoundingRect(rect[0], rect[1], rect[2], rect[3]));
if (style) {
icon.setStyle(style);
}
return icon;
}
function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) {
var color = itemStyleModel.get("color");
if (!symbol) {
var symbolType = hostModel.get("symbol");
symbol = createSymbol$1(symbolType, -1, -1, 2, 2, color);
symbol.setStyle("strokeNoScale", true);
group.add(symbol);
callback && callback.onCreate(symbol);
} else {
symbol.setColor(color);
group.add(symbol);
callback && callback.onUpdate(symbol);
}
var itemStyle = itemStyleModel.getItemStyle(["color"]);
symbol.setStyle(itemStyle);
opt = merge({
rectHover: true,
z2: 100
}, opt, true);
var symbolSize = normalizeSymbolSize(hostModel.get("symbolSize"));
opt.scaleX = symbolSize[0] / 2;
opt.scaleY = symbolSize[1] / 2;
var symbolOffset = normalizeSymbolOffset(hostModel.get("symbolOffset"), symbolSize);
if (symbolOffset) {
opt.x = (opt.x || 0) + symbolOffset[0];
opt.y = (opt.y || 0) + symbolOffset[1];
}
var symbolRotate = hostModel.get("symbolRotate");
opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
symbol.attr(opt);
symbol.updateTransform();
return symbol;
}
function pointerMoveTo(pointer, progressLine, dataIndex, axis, timelineModel, noAnimation) {
if (pointer.dragging) {
return;
}
var pointerModel = timelineModel.getModel("checkpointStyle");
var toCoord = axis.dataToCoord(timelineModel.getData().get("value", dataIndex));
if (noAnimation || !pointerModel.get("animation", true)) {
pointer.attr({
x: toCoord,
y: 0
});
progressLine && progressLine.attr({
shape: {
x2: toCoord
}
});
} else {
var animationCfg = {
duration: pointerModel.get("animationDuration", true),
easing: pointerModel.get("animationEasing", true)
};
pointer.stopAnimation(null, true);
pointer.animateTo({
x: toCoord,
y: 0
}, animationCfg);
progressLine && progressLine.animateTo({
shape: {
x2: toCoord
}
}, animationCfg);
}
}
function installTimelineAction(registers) {
registers.registerAction({
type: "timelineChange",
event: "timelineChanged",
update: "prepareAndUpdate"
}, function(payload, ecModel, api) {
var timelineModel = ecModel.getComponent("timeline");
if (timelineModel && payload.currentIndex != null) {
timelineModel.setCurrentIndex(payload.currentIndex);
if (!timelineModel.get("loop", true) && timelineModel.isIndexMax() && timelineModel.getPlayState()) {
timelineModel.setPlayState(false);
api.dispatchAction({
type: "timelinePlayChange",
playState: false,
from: payload.from
});
}
}
ecModel.resetOption("timeline", {
replaceMerge: timelineModel.get("replaceMerge", true)
});
return defaults({
currentIndex: timelineModel.option.currentIndex
}, payload);
});
registers.registerAction({
type: "timelinePlayChange",
event: "timelinePlayChanged",
update: "update"
}, function(payload, ecModel) {
var timelineModel = ecModel.getComponent("timeline");
if (timelineModel && payload.playState != null) {
timelineModel.setPlayState(payload.playState);
}
});
}
function timelinePreprocessor(option) {
var timelineOpt = option && option.timeline;
if (!isArray$1(timelineOpt)) {
timelineOpt = timelineOpt ? [timelineOpt] : [];
}
each$f(timelineOpt, function(opt) {
if (!opt) {
return;
}
compatibleEC2(opt);
});
}
function compatibleEC2(opt) {
var type = opt.type;
var ec2Types = {
"number": "value",
"time": "time"
};
if (ec2Types[type]) {
opt.axisType = ec2Types[type];
delete opt.type;
}
transferItem(opt);
if (has$1(opt, "controlPosition")) {
var controlStyle = opt.controlStyle || (opt.controlStyle = {});
if (!has$1(controlStyle, "position")) {
controlStyle.position = opt.controlPosition;
}
if (controlStyle.position === "none" && !has$1(controlStyle, "show")) {
controlStyle.show = false;
delete controlStyle.position;
}
delete opt.controlPosition;
}
each$f(opt.data || [], function(dataItem) {
if (isObject$3(dataItem) && !isArray$1(dataItem)) {
if (!has$1(dataItem, "value") && has$1(dataItem, "name")) {
dataItem.value = dataItem.name;
}
transferItem(dataItem);
}
});
}
function transferItem(opt) {
var itemStyle = opt.itemStyle || (opt.itemStyle = {});
var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {});
var label = opt.label || opt.label || {};
var labelNormal = label.normal || (label.normal = {});
var excludeLabelAttr = {
normal: 1,
emphasis: 1
};
each$f(label, function(value, name) {
if (!excludeLabelAttr[name] && !has$1(labelNormal, name)) {
labelNormal[name] = value;
}
});
if (itemStyleEmphasis.label && !has$1(label, "emphasis")) {
label.emphasis = itemStyleEmphasis.label;
delete itemStyleEmphasis.label;
}
}
function has$1(obj, attr) {
return obj.hasOwnProperty(attr);
}
function install$h(registers) {
registers.registerComponentModel(SliderTimelineModel);
registers.registerComponentView(SliderTimelineView);
registers.registerSubTypeDefaulter("timeline", function() {
return "slider";
});
installTimelineAction(registers);
registers.registerPreprocessor(timelinePreprocessor);
}
function checkMarkerInSeries(seriesOpts, markerType) {
if (!seriesOpts) {
return false;
}
var seriesOptArr = isArray$1(seriesOpts) ? seriesOpts : [seriesOpts];
for (var idx = 0; idx < seriesOptArr.length; idx++) {
if (seriesOptArr[idx] && seriesOptArr[idx][markerType]) {
return true;
}
}
return false;
}
function fillLabel(opt) {
defaultEmphasis(opt, "label", ["show"]);
}
var inner$5 = makeInner();
var MarkerModel = (
/** @class */
(function(_super) {
__extends(MarkerModel2, _super);
function MarkerModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkerModel2.type;
_this.createdBySelf = false;
return _this;
}
MarkerModel2.prototype.init = function(option, parentModel, ecModel) {
this.mergeDefaultAndTheme(option, ecModel);
this._mergeOption(option, ecModel, false, true);
};
MarkerModel2.prototype.isAnimationEnabled = function() {
if (env.node) {
return false;
}
var hostSeries = this.__hostSeries;
return this.getShallow("animation") && hostSeries && hostSeries.isAnimationEnabled();
};
MarkerModel2.prototype.mergeOption = function(newOpt, ecModel) {
this._mergeOption(newOpt, ecModel, false, false);
};
MarkerModel2.prototype._mergeOption = function(newOpt, ecModel, createdBySelf, isInit) {
var componentType = this.mainType;
if (!createdBySelf) {
ecModel.eachSeries(function(seriesModel) {
var markerOpt = seriesModel.get(this.mainType, true);
var markerModel = inner$5(seriesModel)[componentType];
if (!markerOpt || !markerOpt.data) {
inner$5(seriesModel)[componentType] = null;
return;
}
if (!markerModel) {
if (isInit) {
fillLabel(markerOpt);
}
each$f(markerOpt.data, function(item) {
if (item instanceof Array) {
fillLabel(item[0]);
fillLabel(item[1]);
} else {
fillLabel(item);
}
});
markerModel = this.createMarkerModelFromSeries(markerOpt, this, ecModel);
extend(markerModel, {
mainType: this.mainType,
// Use the same series index and name
seriesIndex: seriesModel.seriesIndex,
name: seriesModel.name,
createdBySelf: true
});
markerModel.__hostSeries = seriesModel;
} else {
markerModel._mergeOption(markerOpt, ecModel, true);
}
inner$5(seriesModel)[componentType] = markerModel;
}, this);
}
};
MarkerModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {
var data = this.getData();
var value = this.getRawValue(dataIndex);
var itemName = data.getName(dataIndex);
return createTooltipMarkup("section", {
header: this.name,
blocks: [createTooltipMarkup("nameValue", {
name: itemName,
value,
noName: !itemName,
noValue: value == null
})]
});
};
MarkerModel2.prototype.getData = function() {
return this._data;
};
MarkerModel2.prototype.setData = function(data) {
this._data = data;
};
MarkerModel2.prototype.getDataParams = function(dataIndex, dataType) {
var params = DataFormatMixin.prototype.getDataParams.call(this, dataIndex, dataType);
var hostSeries = this.__hostSeries;
if (hostSeries) {
params.seriesId = hostSeries.id;
params.seriesName = hostSeries.name;
params.seriesType = hostSeries.subType;
}
return params;
};
MarkerModel2.getMarkerModelFromSeries = function(seriesModel, componentType) {
return inner$5(seriesModel)[componentType];
};
MarkerModel2.type = "marker";
MarkerModel2.dependencies = ["series", "grid", "polar", "geo"];
return MarkerModel2;
})(ComponentModel)
);
mixin(MarkerModel, DataFormatMixin.prototype);
var MarkPointModel = (
/** @class */
(function(_super) {
__extends(MarkPointModel2, _super);
function MarkPointModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkPointModel2.type;
return _this;
}
MarkPointModel2.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) {
return new MarkPointModel2(markerOpt, masterMarkerModel, ecModel);
};
MarkPointModel2.type = "markPoint";
MarkPointModel2.defaultOption = {
// zlevel: 0,
z: 5,
symbol: "pin",
symbolSize: 50,
// symbolRotate: 0,
// symbolOffset: [0, 0]
tooltip: {
trigger: "item"
},
label: {
show: true,
position: "inside"
},
itemStyle: {
borderWidth: 2
},
emphasis: {
label: {
show: true
}
}
};
return MarkPointModel2;
})(MarkerModel)
);
function hasXOrY(item) {
return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));
}
function hasXAndY(item) {
return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));
}
function markerTypeCalculatorWithExtent(markerType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) {
var coordArr = [];
var stacked = isDimensionStacked(
data,
targetDataDim
/* , otherDataDim */
);
var calcDataDim = stacked ? data.getCalculationInfo("stackResultDimension") : targetDataDim;
var value = numCalculate(data, calcDataDim, markerType);
var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];
coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);
coordArr[targetCoordIndex] = data.get(calcDataDim, dataIndex);
var coordArrValue = data.get(targetDataDim, dataIndex);
var precision = getPrecision(data.get(targetDataDim, dataIndex));
precision = Math.min(precision, 20);
if (precision >= 0) {
coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);
}
return [coordArr, coordArrValue];
}
var markerTypeCalculator = {
min: curry$1(markerTypeCalculatorWithExtent, "min"),
max: curry$1(markerTypeCalculatorWithExtent, "max"),
average: curry$1(markerTypeCalculatorWithExtent, "average"),
median: curry$1(markerTypeCalculatorWithExtent, "median")
};
function dataTransform(seriesModel, item) {
if (!item) {
return;
}
var data = seriesModel.getData();
var coordSys = seriesModel.coordinateSystem;
var dims = coordSys && coordSys.dimensions;
if (!hasXAndY(item) && !isArray$1(item.coord) && isArray$1(dims)) {
var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);
item = clone$1(item);
if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) {
var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);
var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);
var coordInfo = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex);
item.coord = coordInfo[0];
item.value = coordInfo[1];
} else {
item.coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis];
}
}
if (item.coord == null || !isArray$1(dims)) {
item.coord = [];
} else {
var coord = item.coord;
for (var i = 0; i < 2; i++) {
if (markerTypeCalculator[coord[i]]) {
coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);
}
}
}
return item;
}
function getAxisInfo(item, data, coordSys, seriesModel) {
var ret = {};
if (item.valueIndex != null || item.valueDim != null) {
ret.valueDataDim = item.valueIndex != null ? data.getDimension(item.valueIndex) : item.valueDim;
ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim));
ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);
ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
} else {
ret.baseAxis = seriesModel.getBaseAxis();
ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);
ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
ret.valueDataDim = data.mapDimension(ret.valueAxis.dim);
}
return ret;
}
function dataDimToCoordDim(seriesModel, dataDim) {
var dimItem = seriesModel.getData().getDimensionInfo(dataDim);
return dimItem && dimItem.coordDim;
}
function dataFilter(coordSys, item) {
return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true;
}
function zoneFilter(coordSys, item1, item2) {
return coordSys && coordSys.containZone && item1.coord && item2.coord && !hasXOrY(item1) && !hasXOrY(item2) ? coordSys.containZone(item1.coord, item2.coord) : true;
}
function createMarkerDimValueGetter(inCoordSys, dims) {
return inCoordSys ? function(item, dimName, dataIndex, dimIndex) {
var rawVal = dimIndex < 2 ? item.coord && item.coord[dimIndex] : item.value;
return parseDataValue(rawVal, dims[dimIndex]);
} : function(item, dimName, dataIndex, dimIndex) {
return parseDataValue(item.value, dims[dimIndex]);
};
}
function numCalculate(data, valueDataDim, type) {
if (type === "average") {
var sum_1 = 0;
var count_1 = 0;
data.each(valueDataDim, function(val, idx) {
if (!isNaN(val)) {
sum_1 += val;
count_1++;
}
});
return sum_1 / count_1;
} else if (type === "median") {
return data.getMedian(valueDataDim);
} else {
return data.getDataExtent(valueDataDim)[type === "max" ? 1 : 0];
}
}
var inner$4 = makeInner();
var MarkerView = (
/** @class */
(function(_super) {
__extends(MarkerView2, _super);
function MarkerView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkerView2.type;
return _this;
}
MarkerView2.prototype.init = function() {
this.markerGroupMap = createHashMap();
};
MarkerView2.prototype.render = function(markerModel, ecModel, api) {
var _this = this;
var markerGroupMap = this.markerGroupMap;
markerGroupMap.each(function(item) {
inner$4(item).keep = false;
});
ecModel.eachSeries(function(seriesModel) {
var markerModel2 = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type);
markerModel2 && _this.renderSeries(seriesModel, markerModel2, ecModel, api);
});
markerGroupMap.each(function(item) {
!inner$4(item).keep && _this.group.remove(item.group);
});
};
MarkerView2.prototype.markKeep = function(drawGroup) {
inner$4(drawGroup).keep = true;
};
MarkerView2.prototype.toggleBlurSeries = function(seriesModelList, isBlur) {
var _this = this;
each$f(seriesModelList, function(seriesModel) {
var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type);
if (markerModel) {
var data = markerModel.getData();
data.eachItemGraphicEl(function(el) {
if (el) {
isBlur ? enterBlur(el) : leaveBlur(el);
}
});
}
});
};
MarkerView2.type = "marker";
return MarkerView2;
})(ComponentView)
);
function updateMarkerLayout(mpData, seriesModel, api) {
var coordSys = seriesModel.coordinateSystem;
mpData.each(function(idx) {
var itemModel = mpData.getItemModel(idx);
var point;
var xPx = parsePercent(itemModel.get("x"), api.getWidth());
var yPx = parsePercent(itemModel.get("y"), api.getHeight());
if (!isNaN(xPx) && !isNaN(yPx)) {
point = [xPx, yPx];
} else if (seriesModel.getMarkerPosition) {
point = seriesModel.getMarkerPosition(mpData.getValues(mpData.dimensions, idx));
} else if (coordSys) {
var x = mpData.get(coordSys.dimensions[0], idx);
var y = mpData.get(coordSys.dimensions[1], idx);
point = coordSys.dataToPoint([x, y]);
}
if (!isNaN(xPx)) {
point[0] = xPx;
}
if (!isNaN(yPx)) {
point[1] = yPx;
}
mpData.setItemLayout(idx, point);
});
}
var MarkPointView = (
/** @class */
(function(_super) {
__extends(MarkPointView2, _super);
function MarkPointView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkPointView2.type;
return _this;
}
MarkPointView2.prototype.updateTransform = function(markPointModel, ecModel, api) {
ecModel.eachSeries(function(seriesModel) {
var mpModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markPoint");
if (mpModel) {
updateMarkerLayout(mpModel.getData(), seriesModel, api);
this.markerGroupMap.get(seriesModel.id).updateLayout();
}
}, this);
};
MarkPointView2.prototype.renderSeries = function(seriesModel, mpModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
var seriesId = seriesModel.id;
var seriesData = seriesModel.getData();
var symbolDrawMap = this.markerGroupMap;
var symbolDraw = symbolDrawMap.get(seriesId) || symbolDrawMap.set(seriesId, new SymbolDraw());
var mpData = createData(coordSys, seriesModel, mpModel);
mpModel.setData(mpData);
updateMarkerLayout(mpModel.getData(), seriesModel, api);
mpData.each(function(idx) {
var itemModel = mpData.getItemModel(idx);
var symbol = itemModel.getShallow("symbol");
var symbolSize = itemModel.getShallow("symbolSize");
var symbolRotate = itemModel.getShallow("symbolRotate");
var symbolOffset = itemModel.getShallow("symbolOffset");
var symbolKeepAspect = itemModel.getShallow("symbolKeepAspect");
if (isFunction(symbol) || isFunction(symbolSize) || isFunction(symbolRotate) || isFunction(symbolOffset)) {
var rawIdx = mpModel.getRawValue(idx);
var dataParams = mpModel.getDataParams(idx);
if (isFunction(symbol)) {
symbol = symbol(rawIdx, dataParams);
}
if (isFunction(symbolSize)) {
symbolSize = symbolSize(rawIdx, dataParams);
}
if (isFunction(symbolRotate)) {
symbolRotate = symbolRotate(rawIdx, dataParams);
}
if (isFunction(symbolOffset)) {
symbolOffset = symbolOffset(rawIdx, dataParams);
}
}
var style = itemModel.getModel("itemStyle").getItemStyle();
var color = getVisualFromData(seriesData, "color");
if (!style.fill) {
style.fill = color;
}
mpData.setItemVisual(idx, {
symbol,
symbolSize,
symbolRotate,
symbolOffset,
symbolKeepAspect,
style
});
});
symbolDraw.updateData(mpData);
this.group.add(symbolDraw.group);
mpData.eachItemGraphicEl(function(el) {
el.traverse(function(child) {
getECData(child).dataModel = mpModel;
});
});
this.markKeep(symbolDraw);
symbolDraw.group.silent = mpModel.get("silent") || seriesModel.get("silent");
};
MarkPointView2.type = "markPoint";
return MarkPointView2;
})(MarkerView)
);
function createData(coordSys, seriesModel, mpModel) {
var coordDimsInfos;
if (coordSys) {
coordDimsInfos = map$1(coordSys && coordSys.dimensions, function(coordDim) {
var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {};
return extend(extend({}, info), {
name: coordDim,
// DON'T use ordinalMeta to parse and collect ordinal.
ordinalMeta: null
});
});
} else {
coordDimsInfos = [{
name: "value",
type: "float"
}];
}
var mpData = new SeriesData(coordDimsInfos, mpModel);
var dataOpt = map$1(mpModel.get("data"), curry$1(dataTransform, seriesModel));
if (coordSys) {
dataOpt = filter(dataOpt, curry$1(dataFilter, coordSys));
}
var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos);
mpData.initData(dataOpt, null, dimValueGetter);
return mpData;
}
function install$g(registers) {
registers.registerComponentModel(MarkPointModel);
registers.registerComponentView(MarkPointView);
registers.registerPreprocessor(function(opt) {
if (checkMarkerInSeries(opt.series, "markPoint")) {
opt.markPoint = opt.markPoint || {};
}
});
}
var MarkLineModel = (
/** @class */
(function(_super) {
__extends(MarkLineModel2, _super);
function MarkLineModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkLineModel2.type;
return _this;
}
MarkLineModel2.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) {
return new MarkLineModel2(markerOpt, masterMarkerModel, ecModel);
};
MarkLineModel2.type = "markLine";
MarkLineModel2.defaultOption = {
// zlevel: 0,
z: 5,
symbol: ["circle", "arrow"],
symbolSize: [8, 16],
// symbolRotate: 0,
symbolOffset: 0,
precision: 2,
tooltip: {
trigger: "item"
},
label: {
show: true,
position: "end",
distance: 5
},
lineStyle: {
type: "dashed"
},
emphasis: {
label: {
show: true
},
lineStyle: {
width: 3
}
},
animationEasing: "linear"
};
return MarkLineModel2;
})(MarkerModel)
);
var inner$3 = makeInner();
var markLineTransform = function(seriesModel, coordSys, mlModel, item) {
var data = seriesModel.getData();
var itemArray;
if (!isArray$1(item)) {
var mlType = item.type;
if (mlType === "min" || mlType === "max" || mlType === "average" || mlType === "median" || item.xAxis != null || item.yAxis != null) {
var valueAxis2 = void 0;
var value = void 0;
if (item.yAxis != null || item.xAxis != null) {
valueAxis2 = coordSys.getAxis(item.yAxis != null ? "y" : "x");
value = retrieve(item.yAxis, item.xAxis);
} else {
var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);
valueAxis2 = axisInfo.valueAxis;
var valueDataDim = getStackedDimension(data, axisInfo.valueDataDim);
value = numCalculate(data, valueDataDim, mlType);
}
var valueIndex = valueAxis2.dim === "x" ? 0 : 1;
var baseIndex = 1 - valueIndex;
var mlFrom = clone$1(item);
var mlTo = {
coord: []
};
mlFrom.type = null;
mlFrom.coord = [];
mlFrom.coord[baseIndex] = -Infinity;
mlTo.coord[baseIndex] = Infinity;
var precision = mlModel.get("precision");
if (precision >= 0 && isNumber(value)) {
value = +value.toFixed(Math.min(precision, 20));
}
mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;
itemArray = [mlFrom, mlTo, {
type: mlType,
valueIndex: item.valueIndex,
// Force to use the value of calculated value.
value
}];
} else {
itemArray = [];
}
} else {
itemArray = item;
}
var normalizedItem = [dataTransform(seriesModel, itemArray[0]), dataTransform(seriesModel, itemArray[1]), extend({}, itemArray[2])];
normalizedItem[2].type = normalizedItem[2].type || null;
merge(normalizedItem[2], normalizedItem[0]);
merge(normalizedItem[2], normalizedItem[1]);
return normalizedItem;
};
function isInfinity$1(val) {
return !isNaN(val) && !isFinite(val);
}
function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {
var otherDimIndex = 1 - dimIndex;
var dimName = coordSys.dimensions[dimIndex];
return isInfinity$1(fromCoord[otherDimIndex]) && isInfinity$1(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);
}
function markLineFilter(coordSys, item) {
if (coordSys.type === "cartesian2d") {
var fromCoord = item[0].coord;
var toCoord = item[1].coord;
if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {
return true;
}
}
return dataFilter(coordSys, item[0]) && dataFilter(coordSys, item[1]);
}
function updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) {
var coordSys = seriesModel.coordinateSystem;
var itemModel = data.getItemModel(idx);
var point;
var xPx = parsePercent(itemModel.get("x"), api.getWidth());
var yPx = parsePercent(itemModel.get("y"), api.getHeight());
if (!isNaN(xPx) && !isNaN(yPx)) {
point = [xPx, yPx];
} else {
if (seriesModel.getMarkerPosition) {
point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx));
} else {
var dims = coordSys.dimensions;
var x = data.get(dims[0], idx);
var y = data.get(dims[1], idx);
point = coordSys.dataToPoint([x, y]);
}
if (isCoordinateSystemType(coordSys, "cartesian2d")) {
var xAxis = coordSys.getAxis("x");
var yAxis = coordSys.getAxis("y");
var dims = coordSys.dimensions;
if (isInfinity$1(data.get(dims[0], idx))) {
point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);
} else if (isInfinity$1(data.get(dims[1], idx))) {
point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);
}
}
if (!isNaN(xPx)) {
point[0] = xPx;
}
if (!isNaN(yPx)) {
point[1] = yPx;
}
}
data.setItemLayout(idx, point);
}
var MarkLineView = (
/** @class */
(function(_super) {
__extends(MarkLineView2, _super);
function MarkLineView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkLineView2.type;
return _this;
}
MarkLineView2.prototype.updateTransform = function(markLineModel, ecModel, api) {
ecModel.eachSeries(function(seriesModel) {
var mlModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markLine");
if (mlModel) {
var mlData_1 = mlModel.getData();
var fromData_1 = inner$3(mlModel).from;
var toData_1 = inner$3(mlModel).to;
fromData_1.each(function(idx) {
updateSingleMarkerEndLayout(fromData_1, idx, true, seriesModel, api);
updateSingleMarkerEndLayout(toData_1, idx, false, seriesModel, api);
});
mlData_1.each(function(idx) {
mlData_1.setItemLayout(idx, [fromData_1.getItemLayout(idx), toData_1.getItemLayout(idx)]);
});
this.markerGroupMap.get(seriesModel.id).updateLayout();
}
}, this);
};
MarkLineView2.prototype.renderSeries = function(seriesModel, mlModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
var seriesId = seriesModel.id;
var seriesData = seriesModel.getData();
var lineDrawMap = this.markerGroupMap;
var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw());
this.group.add(lineDraw.group);
var mlData = createList$1(coordSys, seriesModel, mlModel);
var fromData = mlData.from;
var toData = mlData.to;
var lineData = mlData.line;
inner$3(mlModel).from = fromData;
inner$3(mlModel).to = toData;
mlModel.setData(lineData);
var symbolType = mlModel.get("symbol");
var symbolSize = mlModel.get("symbolSize");
var symbolRotate = mlModel.get("symbolRotate");
var symbolOffset = mlModel.get("symbolOffset");
if (!isArray$1(symbolType)) {
symbolType = [symbolType, symbolType];
}
if (!isArray$1(symbolSize)) {
symbolSize = [symbolSize, symbolSize];
}
if (!isArray$1(symbolRotate)) {
symbolRotate = [symbolRotate, symbolRotate];
}
if (!isArray$1(symbolOffset)) {
symbolOffset = [symbolOffset, symbolOffset];
}
mlData.from.each(function(idx) {
updateDataVisualAndLayout(fromData, idx, true);
updateDataVisualAndLayout(toData, idx, false);
});
lineData.each(function(idx) {
var lineStyle = lineData.getItemModel(idx).getModel("lineStyle").getLineStyle();
lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);
if (lineStyle.stroke == null) {
lineStyle.stroke = fromData.getItemVisual(idx, "style").fill;
}
lineData.setItemVisual(idx, {
fromSymbolKeepAspect: fromData.getItemVisual(idx, "symbolKeepAspect"),
fromSymbolOffset: fromData.getItemVisual(idx, "symbolOffset"),
fromSymbolRotate: fromData.getItemVisual(idx, "symbolRotate"),
fromSymbolSize: fromData.getItemVisual(idx, "symbolSize"),
fromSymbol: fromData.getItemVisual(idx, "symbol"),
toSymbolKeepAspect: toData.getItemVisual(idx, "symbolKeepAspect"),
toSymbolOffset: toData.getItemVisual(idx, "symbolOffset"),
toSymbolRotate: toData.getItemVisual(idx, "symbolRotate"),
toSymbolSize: toData.getItemVisual(idx, "symbolSize"),
toSymbol: toData.getItemVisual(idx, "symbol"),
style: lineStyle
});
});
lineDraw.updateData(lineData);
mlData.line.eachItemGraphicEl(function(el) {
getECData(el).dataModel = mlModel;
el.traverse(function(child) {
getECData(child).dataModel = mlModel;
});
});
function updateDataVisualAndLayout(data, idx, isFrom) {
var itemModel = data.getItemModel(idx);
updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api);
var style = itemModel.getModel("itemStyle").getItemStyle();
if (style.fill == null) {
style.fill = getVisualFromData(seriesData, "color");
}
data.setItemVisual(idx, {
symbolKeepAspect: itemModel.get("symbolKeepAspect"),
// `0` should be considered as a valid value, so use `retrieve2` instead of `||`
symbolOffset: retrieve2(itemModel.get("symbolOffset", true), symbolOffset[isFrom ? 0 : 1]),
symbolRotate: retrieve2(itemModel.get("symbolRotate", true), symbolRotate[isFrom ? 0 : 1]),
// TODO: when 2d array is supported, it should ignore parent
symbolSize: retrieve2(itemModel.get("symbolSize"), symbolSize[isFrom ? 0 : 1]),
symbol: retrieve2(itemModel.get("symbol", true), symbolType[isFrom ? 0 : 1]),
style
});
}
this.markKeep(lineDraw);
lineDraw.group.silent = mlModel.get("silent") || seriesModel.get("silent");
};
MarkLineView2.type = "markLine";
return MarkLineView2;
})(MarkerView)
);
function createList$1(coordSys, seriesModel, mlModel) {
var coordDimsInfos;
if (coordSys) {
coordDimsInfos = map$1(coordSys && coordSys.dimensions, function(coordDim) {
var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {};
return extend(extend({}, info), {
name: coordDim,
// DON'T use ordinalMeta to parse and collect ordinal.
ordinalMeta: null
});
});
} else {
coordDimsInfos = [{
name: "value",
type: "float"
}];
}
var fromData = new SeriesData(coordDimsInfos, mlModel);
var toData = new SeriesData(coordDimsInfos, mlModel);
var lineData = new SeriesData([], mlModel);
var optData = map$1(mlModel.get("data"), curry$1(markLineTransform, seriesModel, coordSys, mlModel));
if (coordSys) {
optData = filter(optData, curry$1(markLineFilter, coordSys));
}
var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos);
fromData.initData(map$1(optData, function(item) {
return item[0];
}), null, dimValueGetter);
toData.initData(map$1(optData, function(item) {
return item[1];
}), null, dimValueGetter);
lineData.initData(map$1(optData, function(item) {
return item[2];
}));
lineData.hasItemOption = true;
return {
from: fromData,
to: toData,
line: lineData
};
}
function install$f(registers) {
registers.registerComponentModel(MarkLineModel);
registers.registerComponentView(MarkLineView);
registers.registerPreprocessor(function(opt) {
if (checkMarkerInSeries(opt.series, "markLine")) {
opt.markLine = opt.markLine || {};
}
});
}
var MarkAreaModel = (
/** @class */
(function(_super) {
__extends(MarkAreaModel2, _super);
function MarkAreaModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkAreaModel2.type;
return _this;
}
MarkAreaModel2.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) {
return new MarkAreaModel2(markerOpt, masterMarkerModel, ecModel);
};
MarkAreaModel2.type = "markArea";
MarkAreaModel2.defaultOption = {
// zlevel: 0,
// PENDING
z: 1,
tooltip: {
trigger: "item"
},
// markArea should fixed on the coordinate system
animation: false,
label: {
show: true,
position: "top"
},
itemStyle: {
// color and borderColor default to use color from series
// color: 'auto'
// borderColor: 'auto'
borderWidth: 0
},
emphasis: {
label: {
show: true,
position: "top"
}
}
};
return MarkAreaModel2;
})(MarkerModel)
);
var inner$2 = makeInner();
var markAreaTransform = function(seriesModel, coordSys, maModel, item) {
var item0 = item[0];
var item1 = item[1];
if (!item0 || !item1) {
return;
}
var lt = dataTransform(seriesModel, item0);
var rb = dataTransform(seriesModel, item1);
var ltCoord = lt.coord;
var rbCoord = rb.coord;
ltCoord[0] = retrieve(ltCoord[0], -Infinity);
ltCoord[1] = retrieve(ltCoord[1], -Infinity);
rbCoord[0] = retrieve(rbCoord[0], Infinity);
rbCoord[1] = retrieve(rbCoord[1], Infinity);
var result = mergeAll([{}, lt, rb]);
result.coord = [lt.coord, rb.coord];
result.x0 = lt.x;
result.y0 = lt.y;
result.x1 = rb.x;
result.y1 = rb.y;
return result;
};
function isInfinity(val) {
return !isNaN(val) && !isFinite(val);
}
function ifMarkAreaHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {
var otherDimIndex = 1 - dimIndex;
return isInfinity(fromCoord[otherDimIndex]) && isInfinity(toCoord[otherDimIndex]);
}
function markAreaFilter(coordSys, item) {
var fromCoord = item.coord[0];
var toCoord = item.coord[1];
var item0 = {
coord: fromCoord,
x: item.x0,
y: item.y0
};
var item1 = {
coord: toCoord,
x: item.x1,
y: item.y1
};
if (isCoordinateSystemType(coordSys, "cartesian2d")) {
if (fromCoord && toCoord && (ifMarkAreaHasOnlyDim(1, fromCoord, toCoord) || ifMarkAreaHasOnlyDim(0, fromCoord, toCoord))) {
return true;
}
return zoneFilter(coordSys, item0, item1);
}
return dataFilter(coordSys, item0) || dataFilter(coordSys, item1);
}
function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {
var coordSys = seriesModel.coordinateSystem;
var itemModel = data.getItemModel(idx);
var point;
var xPx = parsePercent(itemModel.get(dims[0]), api.getWidth());
var yPx = parsePercent(itemModel.get(dims[1]), api.getHeight());
if (!isNaN(xPx) && !isNaN(yPx)) {
point = [xPx, yPx];
} else {
if (seriesModel.getMarkerPosition) {
var pointValue0 = data.getValues(["x0", "y0"], idx);
var pointValue1 = data.getValues(["x1", "y1"], idx);
var clampPointValue0 = coordSys.clampData(pointValue0);
var clampPointValue1 = coordSys.clampData(pointValue1);
var pointValue = [];
if (dims[0] === "x0") {
pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue1[0] : pointValue0[0];
} else {
pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue0[0] : pointValue1[0];
}
if (dims[1] === "y0") {
pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue1[1] : pointValue0[1];
} else {
pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue0[1] : pointValue1[1];
}
point = seriesModel.getMarkerPosition(pointValue, dims, true);
} else {
var x = data.get(dims[0], idx);
var y = data.get(dims[1], idx);
var pt = [x, y];
coordSys.clampData && coordSys.clampData(pt, pt);
point = coordSys.dataToPoint(pt, true);
}
if (isCoordinateSystemType(coordSys, "cartesian2d")) {
var xAxis = coordSys.getAxis("x");
var yAxis = coordSys.getAxis("y");
var x = data.get(dims[0], idx);
var y = data.get(dims[1], idx);
if (isInfinity(x)) {
point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === "x0" ? 0 : 1]);
} else if (isInfinity(y)) {
point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === "y0" ? 0 : 1]);
}
}
if (!isNaN(xPx)) {
point[0] = xPx;
}
if (!isNaN(yPx)) {
point[1] = yPx;
}
}
return point;
}
var dimPermutations = [["x0", "y0"], ["x1", "y0"], ["x1", "y1"], ["x0", "y1"]];
var MarkAreaView = (
/** @class */
(function(_super) {
__extends(MarkAreaView2, _super);
function MarkAreaView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = MarkAreaView2.type;
return _this;
}
MarkAreaView2.prototype.updateTransform = function(markAreaModel, ecModel, api) {
ecModel.eachSeries(function(seriesModel) {
var maModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markArea");
if (maModel) {
var areaData_1 = maModel.getData();
areaData_1.each(function(idx) {
var points2 = map$1(dimPermutations, function(dim) {
return getSingleMarkerEndPoint(areaData_1, idx, dim, seriesModel, api);
});
areaData_1.setItemLayout(idx, points2);
var el = areaData_1.getItemGraphicEl(idx);
el.setShape("points", points2);
});
}
}, this);
};
MarkAreaView2.prototype.renderSeries = function(seriesModel, maModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
var seriesId = seriesModel.id;
var seriesData = seriesModel.getData();
var areaGroupMap = this.markerGroupMap;
var polygonGroup = areaGroupMap.get(seriesId) || areaGroupMap.set(seriesId, {
group: new Group$3()
});
this.group.add(polygonGroup.group);
this.markKeep(polygonGroup);
var areaData = createList(coordSys, seriesModel, maModel);
maModel.setData(areaData);
areaData.each(function(idx) {
var points2 = map$1(dimPermutations, function(dim) {
return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);
});
var xAxisScale = coordSys.getAxis("x").scale;
var yAxisScale = coordSys.getAxis("y").scale;
var xAxisExtent = xAxisScale.getExtent();
var yAxisExtent = yAxisScale.getExtent();
var xPointExtent = [xAxisScale.parse(areaData.get("x0", idx)), xAxisScale.parse(areaData.get("x1", idx))];
var yPointExtent = [yAxisScale.parse(areaData.get("y0", idx)), yAxisScale.parse(areaData.get("y1", idx))];
asc$2(xPointExtent);
asc$2(yPointExtent);
var overlapped = !(xAxisExtent[0] > xPointExtent[1] || xAxisExtent[1] < xPointExtent[0] || yAxisExtent[0] > yPointExtent[1] || yAxisExtent[1] < yPointExtent[0]);
var allClipped = !overlapped;
areaData.setItemLayout(idx, {
points: points2,
allClipped
});
var style = areaData.getItemModel(idx).getModel("itemStyle").getItemStyle();
var color = getVisualFromData(seriesData, "color");
if (!style.fill) {
style.fill = color;
if (isString(style.fill)) {
style.fill = modifyAlpha(style.fill, 0.4);
}
}
if (!style.stroke) {
style.stroke = color;
}
areaData.setItemVisual(idx, "style", style);
});
areaData.diff(inner$2(polygonGroup).data).add(function(idx) {
var layout2 = areaData.getItemLayout(idx);
if (!layout2.allClipped) {
var polygon = new Polygon({
shape: {
points: layout2.points
}
});
areaData.setItemGraphicEl(idx, polygon);
polygonGroup.group.add(polygon);
}
}).update(function(newIdx, oldIdx) {
var polygon = inner$2(polygonGroup).data.getItemGraphicEl(oldIdx);
var layout2 = areaData.getItemLayout(newIdx);
if (!layout2.allClipped) {
if (polygon) {
updateProps$1(polygon, {
shape: {
points: layout2.points
}
}, maModel, newIdx);
} else {
polygon = new Polygon({
shape: {
points: layout2.points
}
});
}
areaData.setItemGraphicEl(newIdx, polygon);
polygonGroup.group.add(polygon);
} else if (polygon) {
polygonGroup.group.remove(polygon);
}
}).remove(function(idx) {
var polygon = inner$2(polygonGroup).data.getItemGraphicEl(idx);
polygonGroup.group.remove(polygon);
}).execute();
areaData.eachItemGraphicEl(function(polygon, idx) {
var itemModel = areaData.getItemModel(idx);
var style = areaData.getItemVisual(idx, "style");
polygon.useStyle(areaData.getItemVisual(idx, "style"));
setLabelStyle(polygon, getLabelStatesModels(itemModel), {
labelFetcher: maModel,
labelDataIndex: idx,
defaultText: areaData.getName(idx) || "",
inheritColor: isString(style.fill) ? modifyAlpha(style.fill, 1) : "#000"
});
setStatesStylesFromModel(polygon, itemModel);
toggleHoverEmphasis(polygon, null, null, itemModel.get(["emphasis", "disabled"]));
getECData(polygon).dataModel = maModel;
});
inner$2(polygonGroup).data = areaData;
polygonGroup.group.silent = maModel.get("silent") || seriesModel.get("silent");
};
MarkAreaView2.type = "markArea";
return MarkAreaView2;
})(MarkerView)
);
function createList(coordSys, seriesModel, maModel) {
var areaData;
var dataDims;
var dims = ["x0", "y0", "x1", "y1"];
if (coordSys) {
var coordDimsInfos_1 = map$1(coordSys && coordSys.dimensions, function(coordDim) {
var data = seriesModel.getData();
var info = data.getDimensionInfo(data.mapDimension(coordDim)) || {};
return extend(extend({}, info), {
name: coordDim,
// DON'T use ordinalMeta to parse and collect ordinal.
ordinalMeta: null
});
});
dataDims = map$1(dims, function(dim, idx) {
return {
name: dim,
type: coordDimsInfos_1[idx % 2].type
};
});
areaData = new SeriesData(dataDims, maModel);
} else {
dataDims = [{
name: "value",
type: "float"
}];
areaData = new SeriesData(dataDims, maModel);
}
var optData = map$1(maModel.get("data"), curry$1(markAreaTransform, seriesModel, coordSys, maModel));
if (coordSys) {
optData = filter(optData, curry$1(markAreaFilter, coordSys));
}
var dimValueGetter = coordSys ? function(item, dimName, dataIndex, dimIndex) {
var rawVal = item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];
return parseDataValue(rawVal, dataDims[dimIndex]);
} : function(item, dimName, dataIndex, dimIndex) {
return parseDataValue(item.value, dataDims[dimIndex]);
};
areaData.initData(optData, null, dimValueGetter);
areaData.hasItemOption = true;
return areaData;
}
function install$e(registers) {
registers.registerComponentModel(MarkAreaModel);
registers.registerComponentView(MarkAreaView);
registers.registerPreprocessor(function(opt) {
if (checkMarkerInSeries(opt.series, "markArea")) {
opt.markArea = opt.markArea || {};
}
});
}
var getDefaultSelectorOptions = function(ecModel, type) {
if (type === "all") {
return {
type: "all",
title: ecModel.getLocaleModel().get(["legend", "selector", "all"])
};
} else if (type === "inverse") {
return {
type: "inverse",
title: ecModel.getLocaleModel().get(["legend", "selector", "inverse"])
};
}
};
var LegendModel = (
/** @class */
(function(_super) {
__extends(LegendModel2, _super);
function LegendModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = LegendModel2.type;
_this.layoutMode = {
type: "box",
// legend.width/height are maxWidth/maxHeight actually,
// whereas real width/height is calculated by its content.
// (Setting {left: 10, right: 10} does not make sense).
// So consider the case:
// `setOption({legend: {left: 10});`
// then `setOption({legend: {right: 10});`
// The previous `left` should be cleared by setting `ignoreSize`.
ignoreSize: true
};
return _this;
}
LegendModel2.prototype.init = function(option, parentModel, ecModel) {
this.mergeDefaultAndTheme(option, ecModel);
option.selected = option.selected || {};
this._updateSelector(option);
};
LegendModel2.prototype.mergeOption = function(option, ecModel) {
_super.prototype.mergeOption.call(this, option, ecModel);
this._updateSelector(option);
};
LegendModel2.prototype._updateSelector = function(option) {
var selector2 = option.selector;
var ecModel = this.ecModel;
if (selector2 === true) {
selector2 = option.selector = ["all", "inverse"];
}
if (isArray$1(selector2)) {
each$f(selector2, function(item, index) {
isString(item) && (item = {
type: item
});
selector2[index] = merge(item, getDefaultSelectorOptions(ecModel, item.type));
});
}
};
LegendModel2.prototype.optionUpdated = function() {
this._updateData(this.ecModel);
var legendData = this._data;
if (legendData[0] && this.get("selectedMode") === "single") {
var hasSelected = false;
for (var i = 0; i < legendData.length; i++) {
var name_1 = legendData[i].get("name");
if (this.isSelected(name_1)) {
this.select(name_1);
hasSelected = true;
break;
}
}
!hasSelected && this.select(legendData[0].get("name"));
}
};
LegendModel2.prototype._updateData = function(ecModel) {
var potentialData = [];
var availableNames = [];
ecModel.eachRawSeries(function(seriesModel) {
var seriesName = seriesModel.name;
availableNames.push(seriesName);
var isPotential;
if (seriesModel.legendVisualProvider) {
var provider = seriesModel.legendVisualProvider;
var names = provider.getAllNames();
if (!ecModel.isSeriesFiltered(seriesModel)) {
availableNames = availableNames.concat(names);
}
if (names.length) {
potentialData = potentialData.concat(names);
} else {
isPotential = true;
}
} else {
isPotential = true;
}
if (isPotential && isNameSpecified(seriesModel)) {
potentialData.push(seriesModel.name);
}
});
this._availableNames = availableNames;
var rawData = this.get("data") || potentialData;
var legendNameMap = createHashMap();
var legendData = map$1(rawData, function(dataItem) {
if (isString(dataItem) || isNumber(dataItem)) {
dataItem = {
name: dataItem
};
}
if (legendNameMap.get(dataItem.name)) {
return null;
}
legendNameMap.set(dataItem.name, true);
return new Model(dataItem, this, this.ecModel);
}, this);
this._data = filter(legendData, function(item) {
return !!item;
});
};
LegendModel2.prototype.getData = function() {
return this._data;
};
LegendModel2.prototype.select = function(name) {
var selected = this.option.selected;
var selectedMode = this.get("selectedMode");
if (selectedMode === "single") {
var data = this._data;
each$f(data, function(dataItem) {
selected[dataItem.get("name")] = false;
});
}
selected[name] = true;
};
LegendModel2.prototype.unSelect = function(name) {
if (this.get("selectedMode") !== "single") {
this.option.selected[name] = false;
}
};
LegendModel2.prototype.toggleSelected = function(name) {
var selected = this.option.selected;
if (!selected.hasOwnProperty(name)) {
selected[name] = true;
}
this[selected[name] ? "unSelect" : "select"](name);
};
LegendModel2.prototype.allSelect = function() {
var data = this._data;
var selected = this.option.selected;
each$f(data, function(dataItem) {
selected[dataItem.get("name", true)] = true;
});
};
LegendModel2.prototype.inverseSelect = function() {
var data = this._data;
var selected = this.option.selected;
each$f(data, function(dataItem) {
var name = dataItem.get("name", true);
if (!selected.hasOwnProperty(name)) {
selected[name] = true;
}
selected[name] = !selected[name];
});
};
LegendModel2.prototype.isSelected = function(name) {
var selected = this.option.selected;
return !(selected.hasOwnProperty(name) && !selected[name]) && indexOf(this._availableNames, name) >= 0;
};
LegendModel2.prototype.getOrient = function() {
return this.get("orient") === "vertical" ? {
index: 1,
name: "vertical"
} : {
index: 0,
name: "horizontal"
};
};
LegendModel2.type = "legend.plain";
LegendModel2.dependencies = ["series"];
LegendModel2.defaultOption = {
// zlevel: 0,
z: 4,
show: true,
orient: "horizontal",
left: "center",
// right: 'center',
top: 0,
// bottom: null,
align: "auto",
backgroundColor: "rgba(0,0,0,0)",
borderColor: "#ccc",
borderRadius: 0,
borderWidth: 0,
padding: 5,
itemGap: 10,
itemWidth: 25,
itemHeight: 14,
symbolRotate: "inherit",
symbolKeepAspect: true,
inactiveColor: "#ccc",
inactiveBorderColor: "#ccc",
inactiveBorderWidth: "auto",
itemStyle: {
color: "inherit",
opacity: "inherit",
borderColor: "inherit",
borderWidth: "auto",
borderCap: "inherit",
borderJoin: "inherit",
borderDashOffset: "inherit",
borderMiterLimit: "inherit"
},
lineStyle: {
width: "auto",
color: "inherit",
inactiveColor: "#ccc",
inactiveWidth: 2,
opacity: "inherit",
type: "inherit",
cap: "inherit",
join: "inherit",
dashOffset: "inherit",
miterLimit: "inherit"
},
textStyle: {
color: "#333"
},
selectedMode: true,
selector: false,
selectorLabel: {
show: true,
borderRadius: 10,
padding: [3, 5, 3, 5],
fontSize: 12,
fontFamily: "sans-serif",
color: "#666",
borderWidth: 1,
borderColor: "#666"
},
emphasis: {
selectorLabel: {
show: true,
color: "#eee",
backgroundColor: "#666"
}
},
selectorPosition: "auto",
selectorItemGap: 7,
selectorButtonGap: 10,
tooltip: {
show: false
}
};
return LegendModel2;
})(ComponentModel)
);
var curry = curry$1;
var each$3 = each$f;
var Group$1 = Group$3;
var LegendView = (
/** @class */
(function(_super) {
__extends(LegendView2, _super);
function LegendView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = LegendView2.type;
_this.newlineDisabled = false;
return _this;
}
LegendView2.prototype.init = function() {
this.group.add(this._contentGroup = new Group$1());
this.group.add(this._selectorGroup = new Group$1());
this._isFirstRender = true;
};
LegendView2.prototype.getContentGroup = function() {
return this._contentGroup;
};
LegendView2.prototype.getSelectorGroup = function() {
return this._selectorGroup;
};
LegendView2.prototype.render = function(legendModel, ecModel, api) {
var isFirstRender = this._isFirstRender;
this._isFirstRender = false;
this.resetInner();
if (!legendModel.get("show", true)) {
return;
}
var itemAlign = legendModel.get("align");
var orient = legendModel.get("orient");
if (!itemAlign || itemAlign === "auto") {
itemAlign = legendModel.get("left") === "right" && orient === "vertical" ? "right" : "left";
}
var selector2 = legendModel.get("selector", true);
var selectorPosition = legendModel.get("selectorPosition", true);
if (selector2 && (!selectorPosition || selectorPosition === "auto")) {
selectorPosition = orient === "horizontal" ? "end" : "start";
}
this.renderInner(itemAlign, legendModel, ecModel, api, selector2, orient, selectorPosition);
var positionInfo = legendModel.getBoxLayoutParams();
var viewportSize = {
width: api.getWidth(),
height: api.getHeight()
};
var padding = legendModel.get("padding");
var maxSize = getLayoutRect(positionInfo, viewportSize, padding);
var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector2, selectorPosition);
var layoutRect = getLayoutRect(defaults({
width: mainRect.width,
height: mainRect.height
}, positionInfo), viewportSize, padding);
this.group.x = layoutRect.x - mainRect.x;
this.group.y = layoutRect.y - mainRect.y;
this.group.markRedraw();
this.group.add(this._backgroundEl = makeBackground(mainRect, legendModel));
};
LegendView2.prototype.resetInner = function() {
this.getContentGroup().removeAll();
this._backgroundEl && this.group.remove(this._backgroundEl);
this.getSelectorGroup().removeAll();
};
LegendView2.prototype.renderInner = function(itemAlign, legendModel, ecModel, api, selector2, orient, selectorPosition) {
var contentGroup = this.getContentGroup();
var legendDrawnMap = createHashMap();
var selectMode = legendModel.get("selectedMode");
var excludeSeriesId = [];
ecModel.eachRawSeries(function(seriesModel) {
!seriesModel.get("legendHoverLink") && excludeSeriesId.push(seriesModel.id);
});
each$3(legendModel.getData(), function(legendItemModel, dataIndex) {
var name = legendItemModel.get("name");
if (!this.newlineDisabled && (name === "" || name === "\n")) {
var g = new Group$1();
g.newline = true;
contentGroup.add(g);
return;
}
var seriesModel = ecModel.getSeriesByName(name)[0];
if (legendDrawnMap.get(name)) {
return;
}
if (seriesModel) {
var data = seriesModel.getData();
var lineVisualStyle = data.getVisual("legendLineStyle") || {};
var legendIcon = data.getVisual("legendIcon");
var style = data.getVisual("style");
var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, style, legendIcon, selectMode, api);
itemGroup.on("click", curry(dispatchSelectAction, name, null, api, excludeSeriesId)).on("mouseover", curry(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId)).on("mouseout", curry(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId));
if (ecModel.ssr) {
itemGroup.eachChild(function(child) {
var ecData = getECData(child);
ecData.seriesIndex = seriesModel.seriesIndex;
ecData.dataIndex = dataIndex;
ecData.ssrType = "legend";
});
}
legendDrawnMap.set(name, true);
} else {
ecModel.eachRawSeries(function(seriesModel2) {
if (legendDrawnMap.get(name)) {
return;
}
if (seriesModel2.legendVisualProvider) {
var provider = seriesModel2.legendVisualProvider;
if (!provider.containName(name)) {
return;
}
var idx = provider.indexOfName(name);
var style2 = provider.getItemVisual(idx, "style");
var legendIcon2 = provider.getItemVisual(idx, "legendIcon");
var colorArr = parse(style2.fill);
if (colorArr && colorArr[3] === 0) {
colorArr[3] = 0.2;
style2 = extend(extend({}, style2), {
fill: stringify(colorArr, "rgba")
});
}
var itemGroup2 = this._createItem(seriesModel2, name, dataIndex, legendItemModel, legendModel, itemAlign, {}, style2, legendIcon2, selectMode, api);
itemGroup2.on("click", curry(dispatchSelectAction, null, name, api, excludeSeriesId)).on("mouseover", curry(dispatchHighlightAction, null, name, api, excludeSeriesId)).on("mouseout", curry(dispatchDownplayAction, null, name, api, excludeSeriesId));
if (ecModel.ssr) {
itemGroup2.eachChild(function(child) {
var ecData = getECData(child);
ecData.seriesIndex = seriesModel2.seriesIndex;
ecData.dataIndex = dataIndex;
ecData.ssrType = "legend";
});
}
legendDrawnMap.set(name, true);
}
}, this);
}
}, this);
if (selector2) {
this._createSelector(selector2, legendModel, api, orient, selectorPosition);
}
};
LegendView2.prototype._createSelector = function(selector2, legendModel, api, orient, selectorPosition) {
var selectorGroup = this.getSelectorGroup();
each$3(selector2, function createSelectorButton(selectorItem) {
var type = selectorItem.type;
var labelText = new ZRText({
style: {
x: 0,
y: 0,
align: "center",
verticalAlign: "middle"
},
onclick: function() {
api.dispatchAction({
type: type === "all" ? "legendAllSelect" : "legendInverseSelect",
legendId: legendModel.id
});
}
});
selectorGroup.add(labelText);
var labelModel = legendModel.getModel("selectorLabel");
var emphasisLabelModel = legendModel.getModel(["emphasis", "selectorLabel"]);
setLabelStyle(labelText, {
normal: labelModel,
emphasis: emphasisLabelModel
}, {
defaultText: selectorItem.title
});
enableHoverEmphasis(labelText);
});
};
LegendView2.prototype._createItem = function(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, itemVisualStyle, legendIcon, selectMode, api) {
var drawType = seriesModel.visualDrawType;
var itemWidth = legendModel.get("itemWidth");
var itemHeight = legendModel.get("itemHeight");
var isSelected = legendModel.isSelected(name);
var iconRotate = legendItemModel.get("symbolRotate");
var symbolKeepAspect = legendItemModel.get("symbolKeepAspect");
var legendIconType = legendItemModel.get("icon");
legendIcon = legendIconType || legendIcon || "roundRect";
var style = getLegendStyle(legendIcon, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api);
var itemGroup = new Group$1();
var textStyleModel = legendItemModel.getModel("textStyle");
if (isFunction(seriesModel.getLegendIcon) && (!legendIconType || legendIconType === "inherit")) {
itemGroup.add(seriesModel.getLegendIcon({
itemWidth,
itemHeight,
icon: legendIcon,
iconRotate,
itemStyle: style.itemStyle,
lineStyle: style.lineStyle,
symbolKeepAspect
}));
} else {
var rotate2 = legendIconType === "inherit" && seriesModel.getData().getVisual("symbol") ? iconRotate === "inherit" ? seriesModel.getData().getVisual("symbolRotate") : iconRotate : 0;
itemGroup.add(getDefaultLegendIcon({
itemWidth,
itemHeight,
icon: legendIcon,
iconRotate: rotate2,
itemStyle: style.itemStyle,
symbolKeepAspect
}));
}
var textX = itemAlign === "left" ? itemWidth + 5 : -5;
var textAlign = itemAlign;
var formatter = legendModel.get("formatter");
var content = name;
if (isString(formatter) && formatter) {
content = formatter.replace("{name}", name != null ? name : "");
} else if (isFunction(formatter)) {
content = formatter(name);
}
var textColor = isSelected ? textStyleModel.getTextColor() : legendItemModel.get("inactiveColor");
itemGroup.add(new ZRText({
style: createTextStyle(textStyleModel, {
text: content,
x: textX,
y: itemHeight / 2,
fill: textColor,
align: textAlign,
verticalAlign: "middle"
}, {
inheritColor: textColor
})
}));
var hitRect = new Rect$2({
shape: itemGroup.getBoundingRect(),
style: {
// Cannot use 'invisible' because SVG SSR will miss the node
fill: "transparent"
}
});
var tooltipModel = legendItemModel.getModel("tooltip");
if (tooltipModel.get("show")) {
setTooltipConfig({
el: hitRect,
componentModel: legendModel,
itemName: name,
itemTooltipOption: tooltipModel.option
});
}
itemGroup.add(hitRect);
itemGroup.eachChild(function(child) {
child.silent = true;
});
hitRect.silent = !selectMode;
this.getContentGroup().add(itemGroup);
enableHoverEmphasis(itemGroup);
itemGroup.__legendDataIndex = dataIndex;
return itemGroup;
};
LegendView2.prototype.layoutInner = function(legendModel, itemAlign, maxSize, isFirstRender, selector2, selectorPosition) {
var contentGroup = this.getContentGroup();
var selectorGroup = this.getSelectorGroup();
box(legendModel.get("orient"), contentGroup, legendModel.get("itemGap"), maxSize.width, maxSize.height);
var contentRect = contentGroup.getBoundingRect();
var contentPos = [-contentRect.x, -contentRect.y];
selectorGroup.markRedraw();
contentGroup.markRedraw();
if (selector2) {
box(
// Buttons in selectorGroup always layout horizontally
"horizontal",
selectorGroup,
legendModel.get("selectorItemGap", true)
);
var selectorRect = selectorGroup.getBoundingRect();
var selectorPos = [-selectorRect.x, -selectorRect.y];
var selectorButtonGap = legendModel.get("selectorButtonGap", true);
var orientIdx = legendModel.getOrient().index;
var wh = orientIdx === 0 ? "width" : "height";
var hw = orientIdx === 0 ? "height" : "width";
var yx = orientIdx === 0 ? "y" : "x";
if (selectorPosition === "end") {
selectorPos[orientIdx] += contentRect[wh] + selectorButtonGap;
} else {
contentPos[orientIdx] += selectorRect[wh] + selectorButtonGap;
}
selectorPos[1 - orientIdx] += contentRect[hw] / 2 - selectorRect[hw] / 2;
selectorGroup.x = selectorPos[0];
selectorGroup.y = selectorPos[1];
contentGroup.x = contentPos[0];
contentGroup.y = contentPos[1];
var mainRect = {
x: 0,
y: 0
};
mainRect[wh] = contentRect[wh] + selectorButtonGap + selectorRect[wh];
mainRect[hw] = Math.max(contentRect[hw], selectorRect[hw]);
mainRect[yx] = Math.min(0, selectorRect[yx] + selectorPos[1 - orientIdx]);
return mainRect;
} else {
contentGroup.x = contentPos[0];
contentGroup.y = contentPos[1];
return this.group.getBoundingRect();
}
};
LegendView2.prototype.remove = function() {
this.getContentGroup().removeAll();
this._isFirstRender = true;
};
LegendView2.type = "legend.plain";
return LegendView2;
})(ComponentView)
);
function getLegendStyle(iconType, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api) {
function handleCommonProps(style, visualStyle) {
if (style.lineWidth === "auto") {
style.lineWidth = visualStyle.lineWidth > 0 ? 2 : 0;
}
each$3(style, function(propVal, propName) {
style[propName] === "inherit" && (style[propName] = visualStyle[propName]);
});
}
var itemStyleModel = legendItemModel.getModel("itemStyle");
var itemStyle = itemStyleModel.getItemStyle();
var iconBrushType = iconType.lastIndexOf("empty", 0) === 0 ? "fill" : "stroke";
var decalStyle = itemStyleModel.getShallow("decal");
itemStyle.decal = !decalStyle || decalStyle === "inherit" ? itemVisualStyle.decal : createOrUpdatePatternFromDecal(decalStyle, api);
if (itemStyle.fill === "inherit") {
itemStyle.fill = itemVisualStyle[drawType];
}
if (itemStyle.stroke === "inherit") {
itemStyle.stroke = itemVisualStyle[iconBrushType];
}
if (itemStyle.opacity === "inherit") {
itemStyle.opacity = (drawType === "fill" ? itemVisualStyle : lineVisualStyle).opacity;
}
handleCommonProps(itemStyle, itemVisualStyle);
var legendLineModel = legendItemModel.getModel("lineStyle");
var lineStyle = legendLineModel.getLineStyle();
handleCommonProps(lineStyle, lineVisualStyle);
itemStyle.fill === "auto" && (itemStyle.fill = itemVisualStyle.fill);
itemStyle.stroke === "auto" && (itemStyle.stroke = itemVisualStyle.fill);
lineStyle.stroke === "auto" && (lineStyle.stroke = itemVisualStyle.fill);
if (!isSelected) {
var borderWidth = legendItemModel.get("inactiveBorderWidth");
var visualHasBorder = itemStyle[iconBrushType];
itemStyle.lineWidth = borderWidth === "auto" ? itemVisualStyle.lineWidth > 0 && visualHasBorder ? 2 : 0 : itemStyle.lineWidth;
itemStyle.fill = legendItemModel.get("inactiveColor");
itemStyle.stroke = legendItemModel.get("inactiveBorderColor");
lineStyle.stroke = legendLineModel.get("inactiveColor");
lineStyle.lineWidth = legendLineModel.get("inactiveWidth");
}
return {
itemStyle,
lineStyle
};
}
function getDefaultLegendIcon(opt) {
var symboType = opt.icon || "roundRect";
var icon = createSymbol$1(symboType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill, opt.symbolKeepAspect);
icon.setStyle(opt.itemStyle);
icon.rotation = (opt.iconRotate || 0) * Math.PI / 180;
icon.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]);
if (symboType.indexOf("empty") > -1) {
icon.style.stroke = icon.style.fill;
icon.style.fill = "#fff";
icon.style.lineWidth = 2;
}
return icon;
}
function dispatchSelectAction(seriesName, dataName, api, excludeSeriesId) {
dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId);
api.dispatchAction({
type: "legendToggleSelect",
name: seriesName != null ? seriesName : dataName
});
dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId);
}
function isUseHoverLayer(api) {
var list = api.getZr().storage.getDisplayList();
var emphasisState;
var i = 0;
var len2 = list.length;
while (i < len2 && !(emphasisState = list[i].states.emphasis)) {
i++;
}
return emphasisState && emphasisState.hoverLayer;
}
function dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) {
if (!isUseHoverLayer(api)) {
api.dispatchAction({
type: "highlight",
seriesName,
name: dataName,
excludeSeriesId
});
}
}
function dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) {
if (!isUseHoverLayer(api)) {
api.dispatchAction({
type: "downplay",
seriesName,
name: dataName,
excludeSeriesId
});
}
}
function legendFilter(ecModel) {
var legendModels = ecModel.findComponents({
mainType: "legend"
});
if (legendModels && legendModels.length) {
ecModel.filterSeries(function(series) {
for (var i = 0; i < legendModels.length; i++) {
if (!legendModels[i].isSelected(series.name)) {
return false;
}
}
return true;
});
}
}
function legendSelectActionHandler(methodName, payload, ecModel) {
var isAllSelect = methodName === "allSelect" || methodName === "inverseSelect";
var selectedMap = {};
var actionLegendIndices = [];
ecModel.eachComponent({
mainType: "legend",
query: payload
}, function(legendModel) {
if (isAllSelect) {
legendModel[methodName]();
} else {
legendModel[methodName](payload.name);
}
makeSelectedMap(legendModel, selectedMap);
actionLegendIndices.push(legendModel.componentIndex);
});
var allSelectedMap = {};
ecModel.eachComponent("legend", function(legendModel) {
each$f(selectedMap, function(isSelected, name) {
legendModel[isSelected ? "select" : "unSelect"](name);
});
makeSelectedMap(legendModel, allSelectedMap);
});
return isAllSelect ? {
selected: allSelectedMap,
// return legendIndex array to tell the developers which legends are allSelect / inverseSelect
legendIndex: actionLegendIndices
} : {
name: payload.name,
selected: allSelectedMap
};
}
function makeSelectedMap(legendModel, out) {
var selectedMap = out || {};
each$f(legendModel.getData(), function(model) {
var name = model.get("name");
if (name === "\n" || name === "") {
return;
}
var isItemSelected = legendModel.isSelected(name);
if (hasOwn(selectedMap, name)) {
selectedMap[name] = selectedMap[name] && isItemSelected;
} else {
selectedMap[name] = isItemSelected;
}
});
return selectedMap;
}
function installLegendAction(registers) {
registers.registerAction("legendToggleSelect", "legendselectchanged", curry$1(legendSelectActionHandler, "toggleSelected"));
registers.registerAction("legendAllSelect", "legendselectall", curry$1(legendSelectActionHandler, "allSelect"));
registers.registerAction("legendInverseSelect", "legendinverseselect", curry$1(legendSelectActionHandler, "inverseSelect"));
registers.registerAction("legendSelect", "legendselected", curry$1(legendSelectActionHandler, "select"));
registers.registerAction("legendUnSelect", "legendunselected", curry$1(legendSelectActionHandler, "unSelect"));
}
function install$d(registers) {
registers.registerComponentModel(LegendModel);
registers.registerComponentView(LegendView);
registers.registerProcessor(registers.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilter);
registers.registerSubTypeDefaulter("legend", function() {
return "plain";
});
installLegendAction(registers);
}
var ScrollableLegendModel = (
/** @class */
(function(_super) {
__extends(ScrollableLegendModel2, _super);
function ScrollableLegendModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ScrollableLegendModel2.type;
return _this;
}
ScrollableLegendModel2.prototype.setScrollDataIndex = function(scrollDataIndex) {
this.option.scrollDataIndex = scrollDataIndex;
};
ScrollableLegendModel2.prototype.init = function(option, parentModel, ecModel) {
var inputPositionParams = getLayoutParams(option);
_super.prototype.init.call(this, option, parentModel, ecModel);
mergeAndNormalizeLayoutParams(this, option, inputPositionParams);
};
ScrollableLegendModel2.prototype.mergeOption = function(option, ecModel) {
_super.prototype.mergeOption.call(this, option, ecModel);
mergeAndNormalizeLayoutParams(this, this.option, option);
};
ScrollableLegendModel2.type = "legend.scroll";
ScrollableLegendModel2.defaultOption = inheritDefaultOption(LegendModel.defaultOption, {
scrollDataIndex: 0,
pageButtonItemGap: 5,
pageButtonGap: null,
pageButtonPosition: "end",
pageFormatter: "{current}/{total}",
pageIcons: {
horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"],
vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"]
},
pageIconColor: "#2f4554",
pageIconInactiveColor: "#aaa",
pageIconSize: 15,
pageTextStyle: {
color: "#333"
},
animationDurationUpdate: 800
});
return ScrollableLegendModel2;
})(LegendModel)
);
function mergeAndNormalizeLayoutParams(legendModel, target, raw) {
var orient = legendModel.getOrient();
var ignoreSize = [1, 1];
ignoreSize[orient.index] = 0;
mergeLayoutParam(target, raw, {
type: "box",
ignoreSize: !!ignoreSize
});
}
var Group = Group$3;
var WH = ["width", "height"];
var XY = ["x", "y"];
var ScrollableLegendView = (
/** @class */
(function(_super) {
__extends(ScrollableLegendView2, _super);
function ScrollableLegendView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ScrollableLegendView2.type;
_this.newlineDisabled = true;
_this._currentIndex = 0;
return _this;
}
ScrollableLegendView2.prototype.init = function() {
_super.prototype.init.call(this);
this.group.add(this._containerGroup = new Group());
this._containerGroup.add(this.getContentGroup());
this.group.add(this._controllerGroup = new Group());
};
ScrollableLegendView2.prototype.resetInner = function() {
_super.prototype.resetInner.call(this);
this._controllerGroup.removeAll();
this._containerGroup.removeClipPath();
this._containerGroup.__rectSize = null;
};
ScrollableLegendView2.prototype.renderInner = function(itemAlign, legendModel, ecModel, api, selector2, orient, selectorPosition) {
var self = this;
_super.prototype.renderInner.call(this, itemAlign, legendModel, ecModel, api, selector2, orient, selectorPosition);
var controllerGroup = this._controllerGroup;
var pageIconSize = legendModel.get("pageIconSize", true);
var pageIconSizeArr = isArray$1(pageIconSize) ? pageIconSize : [pageIconSize, pageIconSize];
createPageButton("pagePrev", 0);
var pageTextStyleModel = legendModel.getModel("pageTextStyle");
controllerGroup.add(new ZRText({
name: "pageText",
style: {
// Placeholder to calculate a proper layout.
text: "xx/xx",
fill: pageTextStyleModel.getTextColor(),
font: pageTextStyleModel.getFont(),
verticalAlign: "middle",
align: "center"
},
silent: true
}));
createPageButton("pageNext", 1);
function createPageButton(name, iconIdx) {
var pageDataIndexName = name + "DataIndex";
var icon = createIcon(legendModel.get("pageIcons", true)[legendModel.getOrient().name][iconIdx], {
// Buttons will be created in each render, so we do not need
// to worry about avoiding using legendModel kept in scope.
onclick: bind$1(self._pageGo, self, pageDataIndexName, legendModel, api)
}, {
x: -pageIconSizeArr[0] / 2,
y: -pageIconSizeArr[1] / 2,
width: pageIconSizeArr[0],
height: pageIconSizeArr[1]
});
icon.name = name;
controllerGroup.add(icon);
}
};
ScrollableLegendView2.prototype.layoutInner = function(legendModel, itemAlign, maxSize, isFirstRender, selector2, selectorPosition) {
var selectorGroup = this.getSelectorGroup();
var orientIdx = legendModel.getOrient().index;
var wh = WH[orientIdx];
var xy = XY[orientIdx];
var hw = WH[1 - orientIdx];
var yx = XY[1 - orientIdx];
selector2 && box(
// Buttons in selectorGroup always layout horizontally
"horizontal",
selectorGroup,
legendModel.get("selectorItemGap", true)
);
var selectorButtonGap = legendModel.get("selectorButtonGap", true);
var selectorRect = selectorGroup.getBoundingRect();
var selectorPos = [-selectorRect.x, -selectorRect.y];
var processMaxSize = clone$1(maxSize);
selector2 && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap);
var mainRect = this._layoutContentAndController(legendModel, isFirstRender, processMaxSize, orientIdx, wh, hw, yx, xy);
if (selector2) {
if (selectorPosition === "end") {
selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap;
} else {
var offset = selectorRect[wh] + selectorButtonGap;
selectorPos[orientIdx] -= offset;
mainRect[xy] -= offset;
}
mainRect[wh] += selectorRect[wh] + selectorButtonGap;
selectorPos[1 - orientIdx] += mainRect[yx] + mainRect[hw] / 2 - selectorRect[hw] / 2;
mainRect[hw] = Math.max(mainRect[hw], selectorRect[hw]);
mainRect[yx] = Math.min(mainRect[yx], selectorRect[yx] + selectorPos[1 - orientIdx]);
selectorGroup.x = selectorPos[0];
selectorGroup.y = selectorPos[1];
selectorGroup.markRedraw();
}
return mainRect;
};
ScrollableLegendView2.prototype._layoutContentAndController = function(legendModel, isFirstRender, maxSize, orientIdx, wh, hw, yx, xy) {
var contentGroup = this.getContentGroup();
var containerGroup = this._containerGroup;
var controllerGroup = this._controllerGroup;
box(legendModel.get("orient"), contentGroup, legendModel.get("itemGap"), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height);
box(
// Buttons in controller are layout always horizontally.
"horizontal",
controllerGroup,
legendModel.get("pageButtonItemGap", true)
);
var contentRect = contentGroup.getBoundingRect();
var controllerRect = controllerGroup.getBoundingRect();
var showController = this._showController = contentRect[wh] > maxSize[wh];
var contentPos = [-contentRect.x, -contentRect.y];
if (!isFirstRender) {
contentPos[orientIdx] = contentGroup[xy];
}
var containerPos = [0, 0];
var controllerPos = [-controllerRect.x, -controllerRect.y];
var pageButtonGap = retrieve2(legendModel.get("pageButtonGap", true), legendModel.get("itemGap", true));
if (showController) {
var pageButtonPosition = legendModel.get("pageButtonPosition", true);
if (pageButtonPosition === "end") {
controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];
} else {
containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;
}
}
controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;
contentGroup.setPosition(contentPos);
containerGroup.setPosition(containerPos);
controllerGroup.setPosition(controllerPos);
var mainRect = {
x: 0,
y: 0
};
mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];
mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]);
mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);
containerGroup.__rectSize = maxSize[wh];
if (showController) {
var clipShape = {
x: 0,
y: 0
};
clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);
clipShape[hw] = mainRect[hw];
containerGroup.setClipPath(new Rect$2({
shape: clipShape
}));
containerGroup.__rectSize = clipShape[wh];
} else {
controllerGroup.eachChild(function(child) {
child.attr({
invisible: true,
silent: true
});
});
}
var pageInfo = this._getPageInfo(legendModel);
pageInfo.pageIndex != null && updateProps$1(
contentGroup,
{
x: pageInfo.contentPosition[0],
y: pageInfo.contentPosition[1]
},
// When switch from "show controller" to "not show controller", view should be
// updated immediately without animation, otherwise causes weird effect.
showController ? legendModel : null
);
this._updatePageInfoView(legendModel, pageInfo);
return mainRect;
};
ScrollableLegendView2.prototype._pageGo = function(to, legendModel, api) {
var scrollDataIndex = this._getPageInfo(legendModel)[to];
scrollDataIndex != null && api.dispatchAction({
type: "legendScroll",
scrollDataIndex,
legendId: legendModel.id
});
};
ScrollableLegendView2.prototype._updatePageInfoView = function(legendModel, pageInfo) {
var controllerGroup = this._controllerGroup;
each$f(["pagePrev", "pageNext"], function(name) {
var key = name + "DataIndex";
var canJump = pageInfo[key] != null;
var icon = controllerGroup.childOfName(name);
if (icon) {
icon.setStyle("fill", canJump ? legendModel.get("pageIconColor", true) : legendModel.get("pageIconInactiveColor", true));
icon.cursor = canJump ? "pointer" : "default";
}
});
var pageText = controllerGroup.childOfName("pageText");
var pageFormatter = legendModel.get("pageFormatter");
var pageIndex = pageInfo.pageIndex;
var current = pageIndex != null ? pageIndex + 1 : 0;
var total = pageInfo.pageCount;
pageText && pageFormatter && pageText.setStyle("text", isString(pageFormatter) ? pageFormatter.replace("{current}", current == null ? "" : current + "").replace("{total}", total == null ? "" : total + "") : pageFormatter({
current,
total
}));
};
ScrollableLegendView2.prototype._getPageInfo = function(legendModel) {
var scrollDataIndex = legendModel.get("scrollDataIndex", true);
var contentGroup = this.getContentGroup();
var containerRectSize = this._containerGroup.__rectSize;
var orientIdx = legendModel.getOrient().index;
var wh = WH[orientIdx];
var xy = XY[orientIdx];
var targetItemIndex = this._findTargetItemIndex(scrollDataIndex);
var children = contentGroup.children();
var targetItem = children[targetItemIndex];
var itemCount = children.length;
var pCount = !itemCount ? 0 : 1;
var result = {
contentPosition: [contentGroup.x, contentGroup.y],
pageCount: pCount,
pageIndex: pCount - 1,
pagePrevDataIndex: null,
pageNextDataIndex: null
};
if (!targetItem) {
return result;
}
var targetItemInfo = getItemInfo(targetItem);
result.contentPosition[orientIdx] = -targetItemInfo.s;
for (var i = targetItemIndex + 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i <= itemCount; ++i) {
currItemInfo = getItemInfo(children[i]);
if (
// Half of the last item is out of the window.
!currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize || currItemInfo && !intersect(currItemInfo, winStartItemInfo.s)
) {
if (winEndItemInfo.i > winStartItemInfo.i) {
winStartItemInfo = winEndItemInfo;
} else {
winStartItemInfo = currItemInfo;
}
if (winStartItemInfo) {
if (result.pageNextDataIndex == null) {
result.pageNextDataIndex = winStartItemInfo.i;
}
++result.pageCount;
}
}
winEndItemInfo = currItemInfo;
}
for (var i = targetItemIndex - 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i >= -1; --i) {
currItemInfo = getItemInfo(children[i]);
if (
// If the the end item does not intersect with the window started
// from the current item, a page can be settled.
(!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s)) && winStartItemInfo.i < winEndItemInfo.i
) {
winEndItemInfo = winStartItemInfo;
if (result.pagePrevDataIndex == null) {
result.pagePrevDataIndex = winStartItemInfo.i;
}
++result.pageCount;
++result.pageIndex;
}
winStartItemInfo = currItemInfo;
}
return result;
function getItemInfo(el) {
if (el) {
var itemRect = el.getBoundingRect();
var start = itemRect[xy] + el[xy];
return {
s: start,
e: start + itemRect[wh],
i: el.__legendDataIndex
};
}
}
function intersect(itemInfo, winStart) {
return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize;
}
};
ScrollableLegendView2.prototype._findTargetItemIndex = function(targetDataIndex) {
if (!this._showController) {
return 0;
}
var index;
var contentGroup = this.getContentGroup();
var defaultIndex;
contentGroup.eachChild(function(child, idx) {
var legendDataIdx = child.__legendDataIndex;
if (defaultIndex == null && legendDataIdx != null) {
defaultIndex = idx;
}
if (legendDataIdx === targetDataIndex) {
index = idx;
}
});
return index != null ? index : defaultIndex;
};
ScrollableLegendView2.type = "legend.scroll";
return ScrollableLegendView2;
})(LegendView)
);
function installScrollableLegendAction(registers) {
registers.registerAction("legendScroll", "legendscroll", function(payload, ecModel) {
var scrollDataIndex = payload.scrollDataIndex;
scrollDataIndex != null && ecModel.eachComponent({
mainType: "legend",
subType: "scroll",
query: payload
}, function(legendModel) {
legendModel.setScrollDataIndex(scrollDataIndex);
});
});
}
function install$c(registers) {
use(install$d);
registers.registerComponentModel(ScrollableLegendModel);
registers.registerComponentView(ScrollableLegendView);
installScrollableLegendAction(registers);
}
function install$b(registers) {
use(install$d);
use(install$c);
}
var InsideZoomModel = (
/** @class */
(function(_super) {
__extends(InsideZoomModel2, _super);
function InsideZoomModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = InsideZoomModel2.type;
return _this;
}
InsideZoomModel2.type = "dataZoom.inside";
InsideZoomModel2.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {
disabled: false,
zoomLock: false,
zoomOnMouseWheel: true,
moveOnMouseMove: true,
moveOnMouseWheel: false,
preventDefaultMouseMove: true
});
return InsideZoomModel2;
})(DataZoomModel)
);
var inner$1 = makeInner();
function setViewInfoToCoordSysRecord(api, dataZoomModel, getRange) {
inner$1(api).coordSysRecordMap.each(function(coordSysRecord) {
var dzInfo = coordSysRecord.dataZoomInfoMap.get(dataZoomModel.uid);
if (dzInfo) {
dzInfo.getRange = getRange;
}
});
}
function disposeCoordSysRecordIfNeeded(api, dataZoomModel) {
var coordSysRecordMap = inner$1(api).coordSysRecordMap;
var coordSysKeyArr = coordSysRecordMap.keys();
for (var i = 0; i < coordSysKeyArr.length; i++) {
var coordSysKey = coordSysKeyArr[i];
var coordSysRecord = coordSysRecordMap.get(coordSysKey);
var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;
if (dataZoomInfoMap) {
var dzUid = dataZoomModel.uid;
var dzInfo = dataZoomInfoMap.get(dzUid);
if (dzInfo) {
dataZoomInfoMap.removeKey(dzUid);
if (!dataZoomInfoMap.keys().length) {
disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);
}
}
}
}
}
function disposeCoordSysRecord(coordSysRecordMap, coordSysRecord) {
if (coordSysRecord) {
coordSysRecordMap.removeKey(coordSysRecord.model.uid);
var controller = coordSysRecord.controller;
controller && controller.dispose();
}
}
function createCoordSysRecord(api, coordSysModel) {
var coordSysRecord = {
model: coordSysModel,
containsPoint: curry$1(containsPoint, coordSysModel),
dispatchAction: curry$1(dispatchAction, api),
dataZoomInfoMap: null,
controller: null
};
var controller = coordSysRecord.controller = new RoamController(api.getZr());
each$f(["pan", "zoom", "scrollMove"], function(eventName) {
controller.on(eventName, function(event) {
var batch = [];
coordSysRecord.dataZoomInfoMap.each(function(dzInfo) {
if (!event.isAvailableBehavior(dzInfo.model.option)) {
return;
}
var method = (dzInfo.getRange || {})[eventName];
var range = method && method(dzInfo.dzReferCoordSysInfo, coordSysRecord.model.mainType, coordSysRecord.controller, event);
!dzInfo.model.get("disabled", true) && range && batch.push({
dataZoomId: dzInfo.model.id,
start: range[0],
end: range[1]
});
});
batch.length && coordSysRecord.dispatchAction(batch);
});
});
return coordSysRecord;
}
function dispatchAction(api, batch) {
if (!api.isDisposed()) {
api.dispatchAction({
type: "dataZoom",
animation: {
easing: "cubicOut",
duration: 100
},
batch
});
}
}
function containsPoint(coordSysModel, e, x, y) {
return coordSysModel.coordinateSystem.containPoint([x, y]);
}
function mergeControllerParams(dataZoomInfoMap) {
var controlType;
var prefix = "type_";
var typePriority = {
"type_true": 2,
"type_move": 1,
"type_false": 0,
"type_undefined": -1
};
var preventDefaultMouseMove = true;
dataZoomInfoMap.each(function(dataZoomInfo) {
var dataZoomModel = dataZoomInfo.model;
var oneType = dataZoomModel.get("disabled", true) ? false : dataZoomModel.get("zoomLock", true) ? "move" : true;
if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {
controlType = oneType;
}
preventDefaultMouseMove = preventDefaultMouseMove && dataZoomModel.get("preventDefaultMouseMove", true);
});
return {
controlType,
opt: {
// RoamController will enable all of these functionalities,
// and the final behavior is determined by its event listener
// provided by each inside zoom.
zoomOnMouseWheel: true,
moveOnMouseMove: true,
moveOnMouseWheel: true,
preventDefaultMouseMove: !!preventDefaultMouseMove
}
};
}
function installDataZoomRoamProcessor(registers) {
registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, function(ecModel, api) {
var apiInner = inner$1(api);
var coordSysRecordMap = apiInner.coordSysRecordMap || (apiInner.coordSysRecordMap = createHashMap());
coordSysRecordMap.each(function(coordSysRecord) {
coordSysRecord.dataZoomInfoMap = null;
});
ecModel.eachComponent({
mainType: "dataZoom",
subType: "inside"
}, function(dataZoomModel) {
var dzReferCoordSysWrap = collectReferCoordSysModelInfo(dataZoomModel);
each$f(dzReferCoordSysWrap.infoList, function(dzCoordSysInfo) {
var coordSysUid = dzCoordSysInfo.model.uid;
var coordSysRecord = coordSysRecordMap.get(coordSysUid) || coordSysRecordMap.set(coordSysUid, createCoordSysRecord(api, dzCoordSysInfo.model));
var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap || (coordSysRecord.dataZoomInfoMap = createHashMap());
dataZoomInfoMap.set(dataZoomModel.uid, {
dzReferCoordSysInfo: dzCoordSysInfo,
model: dataZoomModel,
getRange: null
});
});
});
coordSysRecordMap.each(function(coordSysRecord) {
var controller = coordSysRecord.controller;
var firstDzInfo;
var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;
if (dataZoomInfoMap) {
var firstDzKey = dataZoomInfoMap.keys()[0];
if (firstDzKey != null) {
firstDzInfo = dataZoomInfoMap.get(firstDzKey);
}
}
if (!firstDzInfo) {
disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);
return;
}
var controllerParams = mergeControllerParams(dataZoomInfoMap);
controller.enable(controllerParams.controlType, controllerParams.opt);
controller.setPointerChecker(coordSysRecord.containsPoint);
createOrUpdate(coordSysRecord, "dispatchAction", firstDzInfo.model.get("throttle", true), "fixRate");
});
});
}
var InsideZoomView = (
/** @class */
(function(_super) {
__extends(InsideZoomView2, _super);
function InsideZoomView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "dataZoom.inside";
return _this;
}
InsideZoomView2.prototype.render = function(dataZoomModel, ecModel, api) {
_super.prototype.render.apply(this, arguments);
if (dataZoomModel.noTarget()) {
this._clear();
return;
}
this.range = dataZoomModel.getPercentRange();
setViewInfoToCoordSysRecord(api, dataZoomModel, {
pan: bind$1(getRangeHandlers.pan, this),
zoom: bind$1(getRangeHandlers.zoom, this),
scrollMove: bind$1(getRangeHandlers.scrollMove, this)
});
};
InsideZoomView2.prototype.dispose = function() {
this._clear();
_super.prototype.dispose.apply(this, arguments);
};
InsideZoomView2.prototype._clear = function() {
disposeCoordSysRecordIfNeeded(this.api, this.dataZoomModel);
this.range = null;
};
InsideZoomView2.type = "dataZoom.inside";
return InsideZoomView2;
})(DataZoomView)
);
var getRangeHandlers = {
zoom: function(coordSysInfo, coordSysMainType, controller, e) {
var lastRange = this.range;
var range = lastRange.slice();
var axisModel = coordSysInfo.axisModels[0];
if (!axisModel) {
return;
}
var directionInfo = getDirectionInfo[coordSysMainType](null, [e.originX, e.originY], axisModel, controller, coordSysInfo);
var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];
var scale2 = Math.max(1 / e.scale, 0);
range[0] = (range[0] - percentPoint) * scale2 + percentPoint;
range[1] = (range[1] - percentPoint) * scale2 + percentPoint;
var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);
this.range = range;
if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {
return range;
}
},
pan: makeMover(function(range, axisModel, coordSysInfo, coordSysMainType, controller, e) {
var directionInfo = getDirectionInfo[coordSysMainType]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordSysInfo);
return directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength;
}),
scrollMove: makeMover(function(range, axisModel, coordSysInfo, coordSysMainType, controller, e) {
var directionInfo = getDirectionInfo[coordSysMainType]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordSysInfo);
return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta;
})
};
function makeMover(getPercentDelta) {
return function(coordSysInfo, coordSysMainType, controller, e) {
var lastRange = this.range;
var range = lastRange.slice();
var axisModel = coordSysInfo.axisModels[0];
if (!axisModel) {
return;
}
var percentDelta = getPercentDelta(range, axisModel, coordSysInfo, coordSysMainType, controller, e);
sliderMove(percentDelta, range, [0, 100], "all");
this.range = range;
if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {
return range;
}
};
}
var getDirectionInfo = {
grid: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) {
var axis = axisModel.axis;
var ret = {};
var rect = coordSysInfo.model.coordinateSystem.getRect();
oldPoint = oldPoint || [0, 0];
if (axis.dim === "x") {
ret.pixel = newPoint[0] - oldPoint[0];
ret.pixelLength = rect.width;
ret.pixelStart = rect.x;
ret.signal = axis.inverse ? 1 : -1;
} else {
ret.pixel = newPoint[1] - oldPoint[1];
ret.pixelLength = rect.height;
ret.pixelStart = rect.y;
ret.signal = axis.inverse ? -1 : 1;
}
return ret;
},
polar: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) {
var axis = axisModel.axis;
var ret = {};
var polar = coordSysInfo.model.coordinateSystem;
var radiusExtent = polar.getRadiusAxis().getExtent();
var angleExtent = polar.getAngleAxis().getExtent();
oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];
newPoint = polar.pointToCoord(newPoint);
if (axisModel.mainType === "radiusAxis") {
ret.pixel = newPoint[0] - oldPoint[0];
ret.pixelLength = radiusExtent[1] - radiusExtent[0];
ret.pixelStart = radiusExtent[0];
ret.signal = axis.inverse ? 1 : -1;
} else {
ret.pixel = newPoint[1] - oldPoint[1];
ret.pixelLength = angleExtent[1] - angleExtent[0];
ret.pixelStart = angleExtent[0];
ret.signal = axis.inverse ? -1 : 1;
}
return ret;
},
singleAxis: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) {
var axis = axisModel.axis;
var rect = coordSysInfo.model.coordinateSystem.getRect();
var ret = {};
oldPoint = oldPoint || [0, 0];
if (axis.orient === "horizontal") {
ret.pixel = newPoint[0] - oldPoint[0];
ret.pixelLength = rect.width;
ret.pixelStart = rect.x;
ret.signal = axis.inverse ? 1 : -1;
} else {
ret.pixel = newPoint[1] - oldPoint[1];
ret.pixelLength = rect.height;
ret.pixelStart = rect.y;
ret.signal = axis.inverse ? -1 : 1;
}
return ret;
}
};
function install$a(registers) {
installCommon$1(registers);
registers.registerComponentModel(InsideZoomModel);
registers.registerComponentView(InsideZoomView);
installDataZoomRoamProcessor(registers);
}
var SliderZoomModel = (
/** @class */
(function(_super) {
__extends(SliderZoomModel2, _super);
function SliderZoomModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SliderZoomModel2.type;
return _this;
}
SliderZoomModel2.type = "dataZoom.slider";
SliderZoomModel2.layoutMode = "box";
SliderZoomModel2.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {
show: true,
// deault value can only be drived in view stage.
right: "ph",
top: "ph",
width: "ph",
height: "ph",
left: null,
bottom: null,
borderColor: "#d2dbee",
borderRadius: 3,
backgroundColor: "rgba(47,69,84,0)",
// dataBackgroundColor: '#ddd',
dataBackground: {
lineStyle: {
color: "#d2dbee",
width: 0.5
},
areaStyle: {
color: "#d2dbee",
opacity: 0.2
}
},
selectedDataBackground: {
lineStyle: {
color: "#8fb0f7",
width: 0.5
},
areaStyle: {
color: "#8fb0f7",
opacity: 0.2
}
},
// Color of selected window.
fillerColor: "rgba(135,175,274,0.2)",
handleIcon: "path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",
// Percent of the slider height
handleSize: "100%",
handleStyle: {
color: "#fff",
borderColor: "#ACB8D1"
},
moveHandleSize: 7,
moveHandleIcon: "path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",
moveHandleStyle: {
color: "#D2DBEE",
opacity: 0.7
},
showDetail: true,
showDataShadow: "auto",
realtime: true,
zoomLock: false,
textStyle: {
color: "#6E7079"
},
brushSelect: true,
brushStyle: {
color: "rgba(135,175,274,0.15)"
},
emphasis: {
handleLabel: {
show: true
},
handleStyle: {
borderColor: "#8FB0F7"
},
moveHandleStyle: {
color: "#8FB0F7"
}
}
});
return SliderZoomModel2;
})(DataZoomModel)
);
var Rect = Rect$2;
var DEFAULT_LOCATION_EDGE_GAP = 7;
var DEFAULT_FRAME_BORDER_WIDTH = 1;
var DEFAULT_FILLER_SIZE = 30;
var DEFAULT_MOVE_HANDLE_SIZE = 7;
var HORIZONTAL = "horizontal";
var VERTICAL = "vertical";
var LABEL_GAP = 5;
var SHOW_DATA_SHADOW_SERIES_TYPE = ["line", "bar", "candlestick", "scatter"];
var REALTIME_ANIMATION_CONFIG = {
easing: "cubicOut",
duration: 100,
delay: 0
};
var SliderZoomView = (
/** @class */
(function(_super) {
__extends(SliderZoomView2, _super);
function SliderZoomView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = SliderZoomView2.type;
_this._displayables = {};
return _this;
}
SliderZoomView2.prototype.init = function(ecModel, api) {
this.api = api;
this._onBrush = bind$1(this._onBrush, this);
this._onBrushEnd = bind$1(this._onBrushEnd, this);
};
SliderZoomView2.prototype.render = function(dataZoomModel, ecModel, api, payload) {
_super.prototype.render.apply(this, arguments);
createOrUpdate(this, "_dispatchZoomAction", dataZoomModel.get("throttle"), "fixRate");
this._orient = dataZoomModel.getOrient();
if (dataZoomModel.get("show") === false) {
this.group.removeAll();
return;
}
if (dataZoomModel.noTarget()) {
this._clear();
this.group.removeAll();
return;
}
if (!payload || payload.type !== "dataZoom" || payload.from !== this.uid) {
this._buildView();
}
this._updateView();
};
SliderZoomView2.prototype.dispose = function() {
this._clear();
_super.prototype.dispose.apply(this, arguments);
};
SliderZoomView2.prototype._clear = function() {
clear$1(this, "_dispatchZoomAction");
var zr = this.api.getZr();
zr.off("mousemove", this._onBrush);
zr.off("mouseup", this._onBrushEnd);
};
SliderZoomView2.prototype._buildView = function() {
var thisGroup = this.group;
thisGroup.removeAll();
this._brushing = false;
this._displayables.brushRect = null;
this._resetLocation();
this._resetInterval();
var barGroup = this._displayables.sliderGroup = new Group$3();
this._renderBackground();
this._renderHandle();
this._renderDataShadow();
thisGroup.add(barGroup);
this._positionGroup();
};
SliderZoomView2.prototype._resetLocation = function() {
var dataZoomModel = this.dataZoomModel;
var api = this.api;
var showMoveHandle = dataZoomModel.get("brushSelect");
var moveHandleSize = showMoveHandle ? DEFAULT_MOVE_HANDLE_SIZE : 0;
var coordRect = this._findCoordRect();
var ecSize = {
width: api.getWidth(),
height: api.getHeight()
};
var positionInfo = this._orient === HORIZONTAL ? {
// Why using 'right', because right should be used in vertical,
// and it is better to be consistent for dealing with position param merge.
right: ecSize.width - coordRect.x - coordRect.width,
top: ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP - moveHandleSize,
width: coordRect.width,
height: DEFAULT_FILLER_SIZE
} : {
right: DEFAULT_LOCATION_EDGE_GAP,
top: coordRect.y,
width: DEFAULT_FILLER_SIZE,
height: coordRect.height
};
var layoutParams = getLayoutParams(dataZoomModel.option);
each$f(["right", "top", "width", "height"], function(name) {
if (layoutParams[name] === "ph") {
layoutParams[name] = positionInfo[name];
}
});
var layoutRect = getLayoutRect(layoutParams, ecSize);
this._location = {
x: layoutRect.x,
y: layoutRect.y
};
this._size = [layoutRect.width, layoutRect.height];
this._orient === VERTICAL && this._size.reverse();
};
SliderZoomView2.prototype._positionGroup = function() {
var thisGroup = this.group;
var location = this._location;
var orient = this._orient;
var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();
var inverse = targetAxisModel && targetAxisModel.get("inverse");
var sliderGroup = this._displayables.sliderGroup;
var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse;
sliderGroup.attr(orient === HORIZONTAL && !inverse ? {
scaleY: otherAxisInverse ? 1 : -1,
scaleX: 1
} : orient === HORIZONTAL && inverse ? {
scaleY: otherAxisInverse ? 1 : -1,
scaleX: -1
} : orient === VERTICAL && !inverse ? {
scaleY: otherAxisInverse ? -1 : 1,
scaleX: 1,
rotation: Math.PI / 2
} : {
scaleY: otherAxisInverse ? -1 : 1,
scaleX: -1,
rotation: Math.PI / 2
});
var rect = thisGroup.getBoundingRect([sliderGroup]);
thisGroup.x = location.x - rect.x;
thisGroup.y = location.y - rect.y;
thisGroup.markRedraw();
};
SliderZoomView2.prototype._getViewExtent = function() {
return [0, this._size[0]];
};
SliderZoomView2.prototype._renderBackground = function() {
var dataZoomModel = this.dataZoomModel;
var size = this._size;
var barGroup = this._displayables.sliderGroup;
var brushSelect = dataZoomModel.get("brushSelect");
barGroup.add(new Rect({
silent: true,
shape: {
x: 0,
y: 0,
width: size[0],
height: size[1]
},
style: {
fill: dataZoomModel.get("backgroundColor")
},
z2: -40
}));
var clickPanel = new Rect({
shape: {
x: 0,
y: 0,
width: size[0],
height: size[1]
},
style: {
fill: "transparent"
},
z2: 0,
onclick: bind$1(this._onClickPanel, this)
});
var zr = this.api.getZr();
if (brushSelect) {
clickPanel.on("mousedown", this._onBrushStart, this);
clickPanel.cursor = "crosshair";
zr.on("mousemove", this._onBrush);
zr.on("mouseup", this._onBrushEnd);
} else {
zr.off("mousemove", this._onBrush);
zr.off("mouseup", this._onBrushEnd);
}
barGroup.add(clickPanel);
};
SliderZoomView2.prototype._renderDataShadow = function() {
var info = this._dataShadowInfo = this._prepareDataShadowInfo();
this._displayables.dataShadowSegs = [];
if (!info) {
return;
}
var size = this._size;
var oldSize = this._shadowSize || [];
var seriesModel = info.series;
var data = seriesModel.getRawData();
var candlestickDim = seriesModel.getShadowDim && seriesModel.getShadowDim();
var otherDim = candlestickDim && data.getDimensionInfo(candlestickDim) ? seriesModel.getShadowDim() : info.otherDim;
if (otherDim == null) {
return;
}
var polygonPts = this._shadowPolygonPts;
var polylinePts = this._shadowPolylinePts;
if (data !== this._shadowData || otherDim !== this._shadowDim || size[0] !== oldSize[0] || size[1] !== oldSize[1]) {
var otherDataExtent_1 = data.getDataExtent(otherDim);
var otherOffset = (otherDataExtent_1[1] - otherDataExtent_1[0]) * 0.3;
otherDataExtent_1 = [otherDataExtent_1[0] - otherOffset, otherDataExtent_1[1] + otherOffset];
var otherShadowExtent_1 = [0, size[1]];
var thisShadowExtent = [0, size[0]];
var areaPoints_1 = [[size[0], 0], [0, 0]];
var linePoints_1 = [];
var step_1 = thisShadowExtent[1] / (data.count() - 1);
var thisCoord_1 = 0;
var stride_1 = Math.round(data.count() / size[0]);
var lastIsEmpty_1;
data.each([otherDim], function(value, index) {
if (stride_1 > 0 && index % stride_1) {
thisCoord_1 += step_1;
return;
}
var isEmpty = value == null || isNaN(value) || value === "";
var otherCoord = isEmpty ? 0 : linearMap$2(value, otherDataExtent_1, otherShadowExtent_1, true);
if (isEmpty && !lastIsEmpty_1 && index) {
areaPoints_1.push([areaPoints_1[areaPoints_1.length - 1][0], 0]);
linePoints_1.push([linePoints_1[linePoints_1.length - 1][0], 0]);
} else if (!isEmpty && lastIsEmpty_1) {
areaPoints_1.push([thisCoord_1, 0]);
linePoints_1.push([thisCoord_1, 0]);
}
areaPoints_1.push([thisCoord_1, otherCoord]);
linePoints_1.push([thisCoord_1, otherCoord]);
thisCoord_1 += step_1;
lastIsEmpty_1 = isEmpty;
});
polygonPts = this._shadowPolygonPts = areaPoints_1;
polylinePts = this._shadowPolylinePts = linePoints_1;
}
this._shadowData = data;
this._shadowDim = otherDim;
this._shadowSize = [size[0], size[1]];
var dataZoomModel = this.dataZoomModel;
function createDataShadowGroup(isSelectedArea) {
var model = dataZoomModel.getModel(isSelectedArea ? "selectedDataBackground" : "dataBackground");
var group2 = new Group$3();
var polygon = new Polygon({
shape: {
points: polygonPts
},
segmentIgnoreThreshold: 1,
style: model.getModel("areaStyle").getAreaStyle(),
silent: true,
z2: -20
});
var polyline = new Polyline$1({
shape: {
points: polylinePts
},
segmentIgnoreThreshold: 1,
style: model.getModel("lineStyle").getLineStyle(),
silent: true,
z2: -19
});
group2.add(polygon);
group2.add(polyline);
return group2;
}
for (var i = 0; i < 3; i++) {
var group = createDataShadowGroup(i === 1);
this._displayables.sliderGroup.add(group);
this._displayables.dataShadowSegs.push(group);
}
};
SliderZoomView2.prototype._prepareDataShadowInfo = function() {
var dataZoomModel = this.dataZoomModel;
var showDataShadow = dataZoomModel.get("showDataShadow");
if (showDataShadow === false) {
return;
}
var result;
var ecModel = this.ecModel;
dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) {
var seriesModels = dataZoomModel.getAxisProxy(axisDim, axisIndex).getTargetSeriesModels();
each$f(seriesModels, function(seriesModel) {
if (result) {
return;
}
if (showDataShadow !== true && indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get("type")) < 0) {
return;
}
var thisAxis = ecModel.getComponent(getAxisMainType(axisDim), axisIndex).axis;
var otherDim = getOtherDim(axisDim);
var otherAxisInverse;
var coordSys = seriesModel.coordinateSystem;
if (otherDim != null && coordSys.getOtherAxis) {
otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;
}
otherDim = seriesModel.getData().mapDimension(otherDim);
result = {
thisAxis,
series: seriesModel,
thisDim: axisDim,
otherDim,
otherAxisInverse
};
}, this);
}, this);
return result;
};
SliderZoomView2.prototype._renderHandle = function() {
var thisGroup = this.group;
var displayables = this._displayables;
var handles = displayables.handles = [null, null];
var handleLabels = displayables.handleLabels = [null, null];
var sliderGroup = this._displayables.sliderGroup;
var size = this._size;
var dataZoomModel = this.dataZoomModel;
var api = this.api;
var borderRadius = dataZoomModel.get("borderRadius") || 0;
var brushSelect = dataZoomModel.get("brushSelect");
var filler = displayables.filler = new Rect({
silent: brushSelect,
style: {
fill: dataZoomModel.get("fillerColor")
},
textConfig: {
position: "inside"
}
});
sliderGroup.add(filler);
sliderGroup.add(new Rect({
silent: true,
subPixelOptimize: true,
shape: {
x: 0,
y: 0,
width: size[0],
height: size[1],
r: borderRadius
},
style: {
// deprecated option
stroke: dataZoomModel.get("dataBackgroundColor") || dataZoomModel.get("borderColor"),
lineWidth: DEFAULT_FRAME_BORDER_WIDTH,
fill: "rgba(0,0,0,0)"
}
}));
each$f([0, 1], function(handleIndex) {
var iconStr = dataZoomModel.get("handleIcon");
if (!symbolBuildProxies[iconStr] && iconStr.indexOf("path://") < 0 && iconStr.indexOf("image://") < 0) {
iconStr = "path://" + iconStr;
}
var path = createSymbol$1(iconStr, -1, 0, 2, 2, null, true);
path.attr({
cursor: getCursor$1(this._orient),
draggable: true,
drift: bind$1(this._onDragMove, this, handleIndex),
ondragend: bind$1(this._onDragEnd, this),
onmouseover: bind$1(this._showDataInfo, this, true),
onmouseout: bind$1(this._showDataInfo, this, false),
z2: 5
});
var bRect = path.getBoundingRect();
var handleSize = dataZoomModel.get("handleSize");
this._handleHeight = parsePercent(handleSize, this._size[1]);
this._handleWidth = bRect.width / bRect.height * this._handleHeight;
path.setStyle(dataZoomModel.getModel("handleStyle").getItemStyle());
path.style.strokeNoScale = true;
path.rectHover = true;
path.ensureState("emphasis").style = dataZoomModel.getModel(["emphasis", "handleStyle"]).getItemStyle();
enableHoverEmphasis(path);
var handleColor = dataZoomModel.get("handleColor");
if (handleColor != null) {
path.style.fill = handleColor;
}
sliderGroup.add(handles[handleIndex] = path);
var textStyleModel = dataZoomModel.getModel("textStyle");
var handleLabel = dataZoomModel.get("handleLabel") || {};
var handleLabelShow = handleLabel.show || false;
thisGroup.add(handleLabels[handleIndex] = new ZRText({
silent: true,
invisible: !handleLabelShow,
style: createTextStyle(textStyleModel, {
x: 0,
y: 0,
text: "",
verticalAlign: "middle",
align: "center",
fill: textStyleModel.getTextColor(),
font: textStyleModel.getFont()
}),
z2: 10
}));
}, this);
var actualMoveZone = filler;
if (brushSelect) {
var moveHandleHeight = parsePercent(dataZoomModel.get("moveHandleSize"), size[1]);
var moveHandle_1 = displayables.moveHandle = new Rect$2({
style: dataZoomModel.getModel("moveHandleStyle").getItemStyle(),
silent: true,
shape: {
r: [0, 0, 2, 2],
y: size[1] - 0.5,
height: moveHandleHeight
}
});
var iconSize = moveHandleHeight * 0.8;
var moveHandleIcon = displayables.moveHandleIcon = createSymbol$1(dataZoomModel.get("moveHandleIcon"), -iconSize / 2, -iconSize / 2, iconSize, iconSize, "#fff", true);
moveHandleIcon.silent = true;
moveHandleIcon.y = size[1] + moveHandleHeight / 2 - 0.5;
moveHandle_1.ensureState("emphasis").style = dataZoomModel.getModel(["emphasis", "moveHandleStyle"]).getItemStyle();
var moveZoneExpandSize = Math.min(size[1] / 2, Math.max(moveHandleHeight, 10));
actualMoveZone = displayables.moveZone = new Rect$2({
invisible: true,
shape: {
y: size[1] - moveZoneExpandSize,
height: moveHandleHeight + moveZoneExpandSize
}
});
actualMoveZone.on("mouseover", function() {
api.enterEmphasis(moveHandle_1);
}).on("mouseout", function() {
api.leaveEmphasis(moveHandle_1);
});
sliderGroup.add(moveHandle_1);
sliderGroup.add(moveHandleIcon);
sliderGroup.add(actualMoveZone);
}
actualMoveZone.attr({
draggable: true,
cursor: getCursor$1(this._orient),
drift: bind$1(this._onDragMove, this, "all"),
ondragstart: bind$1(this._showDataInfo, this, true),
ondragend: bind$1(this._onDragEnd, this),
onmouseover: bind$1(this._showDataInfo, this, true),
onmouseout: bind$1(this._showDataInfo, this, false)
});
};
SliderZoomView2.prototype._resetInterval = function() {
var range = this._range = this.dataZoomModel.getPercentRange();
var viewExtent = this._getViewExtent();
this._handleEnds = [linearMap$2(range[0], [0, 100], viewExtent, true), linearMap$2(range[1], [0, 100], viewExtent, true)];
};
SliderZoomView2.prototype._updateInterval = function(handleIndex, delta) {
var dataZoomModel = this.dataZoomModel;
var handleEnds = this._handleEnds;
var viewExtend = this._getViewExtent();
var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
var percentExtent = [0, 100];
sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get("zoomLock") ? "all" : handleIndex, minMaxSpan.minSpan != null ? linearMap$2(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap$2(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null);
var lastRange = this._range;
var range = this._range = asc$2([linearMap$2(handleEnds[0], viewExtend, percentExtent, true), linearMap$2(handleEnds[1], viewExtend, percentExtent, true)]);
return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1];
};
SliderZoomView2.prototype._updateView = function(nonRealtime) {
var displaybles = this._displayables;
var handleEnds = this._handleEnds;
var handleInterval = asc$2(handleEnds.slice());
var size = this._size;
each$f([0, 1], function(handleIndex) {
var handle = displaybles.handles[handleIndex];
var handleHeight = this._handleHeight;
handle.attr({
scaleX: handleHeight / 2,
scaleY: handleHeight / 2,
// This is a trick, by adding an extra tiny offset to let the default handle's end point align to the drag window.
// NOTE: It may affect some custom shapes a bit. But we prefer to have better result by default.
x: handleEnds[handleIndex] + (handleIndex ? -1 : 1),
y: size[1] / 2 - handleHeight / 2
});
}, this);
displaybles.filler.setShape({
x: handleInterval[0],
y: 0,
width: handleInterval[1] - handleInterval[0],
height: size[1]
});
var viewExtent = {
x: handleInterval[0],
width: handleInterval[1] - handleInterval[0]
};
if (displaybles.moveHandle) {
displaybles.moveHandle.setShape(viewExtent);
displaybles.moveZone.setShape(viewExtent);
displaybles.moveZone.getBoundingRect();
displaybles.moveHandleIcon && displaybles.moveHandleIcon.attr("x", viewExtent.x + viewExtent.width / 2);
}
var dataShadowSegs = displaybles.dataShadowSegs;
var segIntervals = [0, handleInterval[0], handleInterval[1], size[0]];
for (var i = 0; i < dataShadowSegs.length; i++) {
var segGroup = dataShadowSegs[i];
var clipPath = segGroup.getClipPath();
if (!clipPath) {
clipPath = new Rect$2();
segGroup.setClipPath(clipPath);
}
clipPath.setShape({
x: segIntervals[i],
y: 0,
width: segIntervals[i + 1] - segIntervals[i],
height: size[1]
});
}
this._updateDataInfo(nonRealtime);
};
SliderZoomView2.prototype._updateDataInfo = function(nonRealtime) {
var dataZoomModel = this.dataZoomModel;
var displaybles = this._displayables;
var handleLabels = displaybles.handleLabels;
var orient = this._orient;
var labelTexts = ["", ""];
if (dataZoomModel.get("showDetail")) {
var axisProxy = dataZoomModel.findRepresentativeAxisProxy();
if (axisProxy) {
var axis = axisProxy.getAxisModel().axis;
var range = this._range;
var dataInterval = nonRealtime ? axisProxy.calculateDataWindow({
start: range[0],
end: range[1]
}).valueWindow : axisProxy.getDataValueWindow();
labelTexts = [this._formatLabel(dataInterval[0], axis), this._formatLabel(dataInterval[1], axis)];
}
}
var orderedHandleEnds = asc$2(this._handleEnds.slice());
setLabel.call(this, 0);
setLabel.call(this, 1);
function setLabel(handleIndex) {
var barTransform = getTransform$1(displaybles.handles[handleIndex].parent, this.group);
var direction = transformDirection(handleIndex === 0 ? "right" : "left", barTransform);
var offset = this._handleWidth / 2 + LABEL_GAP;
var textPoint = applyTransform([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform);
handleLabels[handleIndex].setStyle({
x: textPoint[0],
y: textPoint[1],
verticalAlign: orient === HORIZONTAL ? "middle" : direction,
align: orient === HORIZONTAL ? direction : "center",
text: labelTexts[handleIndex]
});
}
};
SliderZoomView2.prototype._formatLabel = function(value, axis) {
var dataZoomModel = this.dataZoomModel;
var labelFormatter = dataZoomModel.get("labelFormatter");
var labelPrecision = dataZoomModel.get("labelPrecision");
if (labelPrecision == null || labelPrecision === "auto") {
labelPrecision = axis.getPixelPrecision();
}
var valueStr = value == null || isNaN(value) ? "" : axis.type === "category" || axis.type === "time" ? axis.scale.getLabel({
value: Math.round(value)
}) : value.toFixed(Math.min(labelPrecision, 20));
return isFunction(labelFormatter) ? labelFormatter(value, valueStr) : isString(labelFormatter) ? labelFormatter.replace("{value}", valueStr) : valueStr;
};
SliderZoomView2.prototype._showDataInfo = function(isEmphasis) {
var handleLabel = this.dataZoomModel.get("handleLabel") || {};
var normalShow = handleLabel.show || false;
var emphasisHandleLabel = this.dataZoomModel.getModel(["emphasis", "handleLabel"]);
var emphasisShow = emphasisHandleLabel.get("show") || false;
var toShow = isEmphasis || this._dragging ? emphasisShow : normalShow;
var displayables = this._displayables;
var handleLabels = displayables.handleLabels;
handleLabels[0].attr("invisible", !toShow);
handleLabels[1].attr("invisible", !toShow);
displayables.moveHandle && this.api[toShow ? "enterEmphasis" : "leaveEmphasis"](displayables.moveHandle, 1);
};
SliderZoomView2.prototype._onDragMove = function(handleIndex, dx, dy, event) {
this._dragging = true;
stop(event.event);
var barTransform = this._displayables.sliderGroup.getLocalTransform();
var vertex = applyTransform([dx, dy], barTransform, true);
var changed = this._updateInterval(handleIndex, vertex[0]);
var realtime = this.dataZoomModel.get("realtime");
this._updateView(!realtime);
changed && realtime && this._dispatchZoomAction(true);
};
SliderZoomView2.prototype._onDragEnd = function() {
this._dragging = false;
this._showDataInfo(false);
var realtime = this.dataZoomModel.get("realtime");
!realtime && this._dispatchZoomAction(false);
};
SliderZoomView2.prototype._onClickPanel = function(e) {
var size = this._size;
var localPoint = this._displayables.sliderGroup.transformCoordToLocal(e.offsetX, e.offsetY);
if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) {
return;
}
var handleEnds = this._handleEnds;
var center2 = (handleEnds[0] + handleEnds[1]) / 2;
var changed = this._updateInterval("all", localPoint[0] - center2);
this._updateView();
changed && this._dispatchZoomAction(false);
};
SliderZoomView2.prototype._onBrushStart = function(e) {
var x = e.offsetX;
var y = e.offsetY;
this._brushStart = new Point(x, y);
this._brushing = true;
this._brushStartTime = +/* @__PURE__ */ new Date();
};
SliderZoomView2.prototype._onBrushEnd = function(e) {
if (!this._brushing) {
return;
}
var brushRect = this._displayables.brushRect;
this._brushing = false;
if (!brushRect) {
return;
}
brushRect.attr("ignore", true);
var brushShape = brushRect.shape;
var brushEndTime = +/* @__PURE__ */ new Date();
if (brushEndTime - this._brushStartTime < 200 && Math.abs(brushShape.width) < 5) {
return;
}
var viewExtend = this._getViewExtent();
var percentExtent = [0, 100];
this._range = asc$2([linearMap$2(brushShape.x, viewExtend, percentExtent, true), linearMap$2(brushShape.x + brushShape.width, viewExtend, percentExtent, true)]);
this._handleEnds = [brushShape.x, brushShape.x + brushShape.width];
this._updateView();
this._dispatchZoomAction(false);
};
SliderZoomView2.prototype._onBrush = function(e) {
if (this._brushing) {
stop(e.event);
this._updateBrushRect(e.offsetX, e.offsetY);
}
};
SliderZoomView2.prototype._updateBrushRect = function(mouseX, mouseY) {
var displayables = this._displayables;
var dataZoomModel = this.dataZoomModel;
var brushRect = displayables.brushRect;
if (!brushRect) {
brushRect = displayables.brushRect = new Rect({
silent: true,
style: dataZoomModel.getModel("brushStyle").getItemStyle()
});
displayables.sliderGroup.add(brushRect);
}
brushRect.attr("ignore", false);
var brushStart = this._brushStart;
var sliderGroup = this._displayables.sliderGroup;
var endPoint = sliderGroup.transformCoordToLocal(mouseX, mouseY);
var startPoint = sliderGroup.transformCoordToLocal(brushStart.x, brushStart.y);
var size = this._size;
endPoint[0] = Math.max(Math.min(size[0], endPoint[0]), 0);
brushRect.setShape({
x: startPoint[0],
y: 0,
width: endPoint[0] - startPoint[0],
height: size[1]
});
};
SliderZoomView2.prototype._dispatchZoomAction = function(realtime) {
var range = this._range;
this.api.dispatchAction({
type: "dataZoom",
from: this.uid,
dataZoomId: this.dataZoomModel.id,
animation: realtime ? REALTIME_ANIMATION_CONFIG : null,
start: range[0],
end: range[1]
});
};
SliderZoomView2.prototype._findCoordRect = function() {
var rect;
var coordSysInfoList = collectReferCoordSysModelInfo(this.dataZoomModel).infoList;
if (!rect && coordSysInfoList.length) {
var coordSys = coordSysInfoList[0].model.coordinateSystem;
rect = coordSys.getRect && coordSys.getRect();
}
if (!rect) {
var width = this.api.getWidth();
var height = this.api.getHeight();
rect = {
x: width * 0.2,
y: height * 0.2,
width: width * 0.6,
height: height * 0.6
};
}
return rect;
};
SliderZoomView2.type = "dataZoom.slider";
return SliderZoomView2;
})(DataZoomView)
);
function getOtherDim(thisDim) {
var map2 = {
x: "y",
y: "x",
radius: "angle",
angle: "radius"
};
return map2[thisDim];
}
function getCursor$1(orient) {
return orient === "vertical" ? "ns-resize" : "ew-resize";
}
function install$9(registers) {
registers.registerComponentModel(SliderZoomModel);
registers.registerComponentView(SliderZoomView);
installCommon$1(registers);
}
function install$8(registers) {
use(install$a);
use(install$9);
}
var visualDefault = {
/**
* @public
*/
get: function(visualType, key, isCategory2) {
var value = clone$1((defaultOption[visualType] || {})[key]);
return isCategory2 ? isArray$1(value) ? value[value.length - 1] : value : value;
}
};
var defaultOption = {
color: {
active: ["#006edd", "#e0ffff"],
inactive: ["rgba(0,0,0,0)"]
},
colorHue: {
active: [0, 360],
inactive: [0, 0]
},
colorSaturation: {
active: [0.3, 1],
inactive: [0, 0]
},
colorLightness: {
active: [0.9, 0.5],
inactive: [0, 0]
},
colorAlpha: {
active: [0.3, 1],
inactive: [0, 0]
},
opacity: {
active: [0.3, 1],
inactive: [0, 0]
},
symbol: {
active: ["circle", "roundRect", "diamond"],
inactive: ["none"]
},
symbolSize: {
active: [10, 50],
inactive: [0, 0]
}
};
var mapVisual = VisualMapping.mapVisual;
var eachVisual = VisualMapping.eachVisual;
var isArray = isArray$1;
var each$2 = each$f;
var asc = asc$2;
var linearMap$1 = linearMap$2;
var VisualMapModel = (
/** @class */
(function(_super) {
__extends(VisualMapModel2, _super);
function VisualMapModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = VisualMapModel2.type;
_this.stateList = ["inRange", "outOfRange"];
_this.replacableOptionKeys = ["inRange", "outOfRange", "target", "controller", "color"];
_this.layoutMode = {
type: "box",
ignoreSize: true
};
_this.dataBound = [-Infinity, Infinity];
_this.targetVisuals = {};
_this.controllerVisuals = {};
return _this;
}
VisualMapModel2.prototype.init = function(option, parentModel, ecModel) {
this.mergeDefaultAndTheme(option, ecModel);
};
VisualMapModel2.prototype.optionUpdated = function(newOption, isInit) {
var thisOption = this.option;
!isInit && replaceVisualOption(thisOption, newOption, this.replacableOptionKeys);
this.textStyleModel = this.getModel("textStyle");
this.resetItemSize();
this.completeVisualOption();
};
VisualMapModel2.prototype.resetVisual = function(supplementVisualOption) {
var stateList = this.stateList;
supplementVisualOption = bind$1(supplementVisualOption, this);
this.controllerVisuals = createVisualMappings(this.option.controller, stateList, supplementVisualOption);
this.targetVisuals = createVisualMappings(this.option.target, stateList, supplementVisualOption);
};
VisualMapModel2.prototype.getItemSymbol = function() {
return null;
};
VisualMapModel2.prototype.getTargetSeriesIndices = function() {
var optionSeriesIndex = this.option.seriesIndex;
var seriesIndices = [];
if (optionSeriesIndex == null || optionSeriesIndex === "all") {
this.ecModel.eachSeries(function(seriesModel, index) {
seriesIndices.push(index);
});
} else {
seriesIndices = normalizeToArray(optionSeriesIndex);
}
return seriesIndices;
};
VisualMapModel2.prototype.eachTargetSeries = function(callback, context) {
each$f(this.getTargetSeriesIndices(), function(seriesIndex) {
var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex);
if (seriesModel) {
callback.call(context, seriesModel);
}
}, this);
};
VisualMapModel2.prototype.isTargetSeries = function(seriesModel) {
var is = false;
this.eachTargetSeries(function(model) {
model === seriesModel && (is = true);
});
return is;
};
VisualMapModel2.prototype.formatValueText = function(value, isCategory2, edgeSymbols) {
var option = this.option;
var precision = option.precision;
var dataBound = this.dataBound;
var formatter = option.formatter;
var isMinMax;
edgeSymbols = edgeSymbols || ["<", ">"];
if (isArray$1(value)) {
value = value.slice();
isMinMax = true;
}
var textValue = isCategory2 ? value : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value);
if (isString(formatter)) {
return formatter.replace("{value}", isMinMax ? textValue[0] : textValue).replace("{value2}", isMinMax ? textValue[1] : textValue);
} else if (isFunction(formatter)) {
return isMinMax ? formatter(value[0], value[1]) : formatter(value);
}
if (isMinMax) {
if (value[0] === dataBound[0]) {
return edgeSymbols[0] + " " + textValue[1];
} else if (value[1] === dataBound[1]) {
return edgeSymbols[1] + " " + textValue[0];
} else {
return textValue[0] + " - " + textValue[1];
}
} else {
return textValue;
}
function toFixed(val) {
return val === dataBound[0] ? "min" : val === dataBound[1] ? "max" : (+val).toFixed(Math.min(precision, 20));
}
};
VisualMapModel2.prototype.resetExtent = function() {
var thisOption = this.option;
var extent = asc([thisOption.min, thisOption.max]);
this._dataExtent = extent;
};
VisualMapModel2.prototype.getDataDimensionIndex = function(data) {
var optDim = this.option.dimension;
if (optDim != null) {
return data.getDimensionIndex(optDim);
}
var dimNames = data.dimensions;
for (var i = dimNames.length - 1; i >= 0; i--) {
var dimName = dimNames[i];
var dimInfo = data.getDimensionInfo(dimName);
if (!dimInfo.isCalculationCoord) {
return dimInfo.storeDimIndex;
}
}
};
VisualMapModel2.prototype.getExtent = function() {
return this._dataExtent.slice();
};
VisualMapModel2.prototype.completeVisualOption = function() {
var ecModel = this.ecModel;
var thisOption = this.option;
var base2 = {
inRange: thisOption.inRange,
outOfRange: thisOption.outOfRange
};
var target = thisOption.target || (thisOption.target = {});
var controller = thisOption.controller || (thisOption.controller = {});
merge(target, base2);
merge(controller, base2);
var isCategory2 = this.isCategory();
completeSingle.call(this, target);
completeSingle.call(this, controller);
completeInactive.call(this, target, "inRange", "outOfRange");
completeController.call(this, controller);
function completeSingle(base3) {
if (isArray(thisOption.color) && !base3.inRange) {
base3.inRange = {
color: thisOption.color.slice().reverse()
};
}
base3.inRange = base3.inRange || {
color: ecModel.get("gradientColor")
};
}
function completeInactive(base3, stateExist, stateAbsent) {
var optExist = base3[stateExist];
var optAbsent = base3[stateAbsent];
if (optExist && !optAbsent) {
optAbsent = base3[stateAbsent] = {};
each$2(optExist, function(visualData, visualType) {
if (!VisualMapping.isValidType(visualType)) {
return;
}
var defa = visualDefault.get(visualType, "inactive", isCategory2);
if (defa != null) {
optAbsent[visualType] = defa;
if (visualType === "color" && !optAbsent.hasOwnProperty("opacity") && !optAbsent.hasOwnProperty("colorAlpha")) {
optAbsent.opacity = [0, 0];
}
}
});
}
}
function completeController(controller2) {
var symbolExists = (controller2.inRange || {}).symbol || (controller2.outOfRange || {}).symbol;
var symbolSizeExists = (controller2.inRange || {}).symbolSize || (controller2.outOfRange || {}).symbolSize;
var inactiveColor = this.get("inactiveColor");
var itemSymbol = this.getItemSymbol();
var defaultSymbol = itemSymbol || "roundRect";
each$2(this.stateList, function(state) {
var itemSize = this.itemSize;
var visuals = controller2[state];
if (!visuals) {
visuals = controller2[state] = {
color: isCategory2 ? inactiveColor : [inactiveColor]
};
}
if (visuals.symbol == null) {
visuals.symbol = symbolExists && clone$1(symbolExists) || (isCategory2 ? defaultSymbol : [defaultSymbol]);
}
if (visuals.symbolSize == null) {
visuals.symbolSize = symbolSizeExists && clone$1(symbolSizeExists) || (isCategory2 ? itemSize[0] : [itemSize[0], itemSize[0]]);
}
visuals.symbol = mapVisual(visuals.symbol, function(symbol) {
return symbol === "none" ? defaultSymbol : symbol;
});
var symbolSize = visuals.symbolSize;
if (symbolSize != null) {
var max_1 = -Infinity;
eachVisual(symbolSize, function(value) {
value > max_1 && (max_1 = value);
});
visuals.symbolSize = mapVisual(symbolSize, function(value) {
return linearMap$1(value, [0, max_1], [0, itemSize[0]], true);
});
}
}, this);
}
};
VisualMapModel2.prototype.resetItemSize = function() {
this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))];
};
VisualMapModel2.prototype.isCategory = function() {
return !!this.option.categories;
};
VisualMapModel2.prototype.setSelected = function(selected) {
};
VisualMapModel2.prototype.getSelected = function() {
return null;
};
VisualMapModel2.prototype.getValueState = function(value) {
return null;
};
VisualMapModel2.prototype.getVisualMeta = function(getColorVisual2) {
return null;
};
VisualMapModel2.type = "visualMap";
VisualMapModel2.dependencies = ["series"];
VisualMapModel2.defaultOption = {
show: true,
// zlevel: 0,
z: 4,
seriesIndex: "all",
min: 0,
max: 200,
left: 0,
right: null,
top: null,
bottom: 0,
itemWidth: null,
itemHeight: null,
inverse: false,
orient: "vertical",
backgroundColor: "rgba(0,0,0,0)",
borderColor: "#ccc",
contentColor: "#5793f3",
inactiveColor: "#aaa",
borderWidth: 0,
padding: 5,
// 接受数组分别设定上右下左边距,同css
textGap: 10,
precision: 0,
textStyle: {
color: "#333"
// 值域文字颜色
}
};
return VisualMapModel2;
})(ComponentModel)
);
var DEFAULT_BAR_BOUND = [20, 140];
var ContinuousModel = (
/** @class */
(function(_super) {
__extends(ContinuousModel2, _super);
function ContinuousModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ContinuousModel2.type;
return _this;
}
ContinuousModel2.prototype.optionUpdated = function(newOption, isInit) {
_super.prototype.optionUpdated.apply(this, arguments);
this.resetExtent();
this.resetVisual(function(mappingOption) {
mappingOption.mappingMethod = "linear";
mappingOption.dataExtent = this.getExtent();
});
this._resetRange();
};
ContinuousModel2.prototype.resetItemSize = function() {
_super.prototype.resetItemSize.apply(this, arguments);
var itemSize = this.itemSize;
(itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);
(itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);
};
ContinuousModel2.prototype._resetRange = function() {
var dataExtent = this.getExtent();
var range = this.option.range;
if (!range || range.auto) {
dataExtent.auto = 1;
this.option.range = dataExtent;
} else if (isArray$1(range)) {
if (range[0] > range[1]) {
range.reverse();
}
range[0] = Math.max(range[0], dataExtent[0]);
range[1] = Math.min(range[1], dataExtent[1]);
}
};
ContinuousModel2.prototype.completeVisualOption = function() {
_super.prototype.completeVisualOption.apply(this, arguments);
each$f(this.stateList, function(state) {
var symbolSize = this.option.controller[state].symbolSize;
if (symbolSize && symbolSize[0] !== symbolSize[1]) {
symbolSize[0] = symbolSize[1] / 3;
}
}, this);
};
ContinuousModel2.prototype.setSelected = function(selected) {
this.option.range = selected.slice();
this._resetRange();
};
ContinuousModel2.prototype.getSelected = function() {
var dataExtent = this.getExtent();
var dataInterval = asc$2((this.get("range") || []).slice());
dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);
dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);
dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);
dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);
return dataInterval;
};
ContinuousModel2.prototype.getValueState = function(value) {
var range = this.option.range;
var dataExtent = this.getExtent();
return (range[0] <= dataExtent[0] || range[0] <= value) && (range[1] >= dataExtent[1] || value <= range[1]) ? "inRange" : "outOfRange";
};
ContinuousModel2.prototype.findTargetDataIndices = function(range) {
var result = [];
this.eachTargetSeries(function(seriesModel) {
var dataIndices = [];
var data = seriesModel.getData();
data.each(this.getDataDimensionIndex(data), function(value, dataIndex) {
range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);
}, this);
result.push({
seriesId: seriesModel.id,
dataIndex: dataIndices
});
}, this);
return result;
};
ContinuousModel2.prototype.getVisualMeta = function(getColorVisual2) {
var oVals = getColorStopValues(this, "outOfRange", this.getExtent());
var iVals = getColorStopValues(this, "inRange", this.option.range.slice());
var stops = [];
function setStop(value, valueState) {
stops.push({
value,
color: getColorVisual2(value, valueState)
});
}
var iIdx = 0;
var oIdx = 0;
var iLen = iVals.length;
var oLen = oVals.length;
for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {
if (oVals[oIdx] < iVals[iIdx]) {
setStop(oVals[oIdx], "outOfRange");
}
}
for (var first = 1; iIdx < iLen; iIdx++, first = 0) {
first && stops.length && setStop(iVals[iIdx], "outOfRange");
setStop(iVals[iIdx], "inRange");
}
for (var first = 1; oIdx < oLen; oIdx++) {
if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {
if (first) {
stops.length && setStop(stops[stops.length - 1].value, "outOfRange");
first = 0;
}
setStop(oVals[oIdx], "outOfRange");
}
}
var stopsLen = stops.length;
return {
stops,
outerColors: [stopsLen ? stops[0].color : "transparent", stopsLen ? stops[stopsLen - 1].color : "transparent"]
};
};
ContinuousModel2.type = "visualMap.continuous";
ContinuousModel2.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, {
align: "auto",
calculable: false,
hoverLink: true,
realtime: true,
handleIcon: "path://M-11.39,9.77h0a3.5,3.5,0,0,1-3.5,3.5h-22a3.5,3.5,0,0,1-3.5-3.5h0a3.5,3.5,0,0,1,3.5-3.5h22A3.5,3.5,0,0,1-11.39,9.77Z",
handleSize: "120%",
handleStyle: {
borderColor: "#fff",
borderWidth: 1
},
indicatorIcon: "circle",
indicatorSize: "50%",
indicatorStyle: {
borderColor: "#fff",
borderWidth: 2,
shadowBlur: 2,
shadowOffsetX: 1,
shadowOffsetY: 1,
shadowColor: "rgba(0,0,0,0.2)"
}
// emphasis: {
// handleStyle: {
// shadowBlur: 3,
// shadowOffsetX: 1,
// shadowOffsetY: 1,
// shadowColor: 'rgba(0,0,0,0.2)'
// }
// }
});
return ContinuousModel2;
})(VisualMapModel)
);
function getColorStopValues(visualMapModel, valueState, dataExtent) {
if (dataExtent[0] === dataExtent[1]) {
return dataExtent.slice();
}
var count2 = 200;
var step = (dataExtent[1] - dataExtent[0]) / count2;
var value = dataExtent[0];
var stopValues = [];
for (var i = 0; i <= count2 && value < dataExtent[1]; i++) {
stopValues.push(value);
value += step;
}
stopValues.push(dataExtent[1]);
return stopValues;
}
var VisualMapView = (
/** @class */
(function(_super) {
__extends(VisualMapView2, _super);
function VisualMapView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = VisualMapView2.type;
_this.autoPositionValues = {
left: 1,
right: 1,
top: 1,
bottom: 1
};
return _this;
}
VisualMapView2.prototype.init = function(ecModel, api) {
this.ecModel = ecModel;
this.api = api;
};
VisualMapView2.prototype.render = function(visualMapModel, ecModel, api, payload) {
this.visualMapModel = visualMapModel;
if (visualMapModel.get("show") === false) {
this.group.removeAll();
return;
}
this.doRender(visualMapModel, ecModel, api, payload);
};
VisualMapView2.prototype.renderBackground = function(group) {
var visualMapModel = this.visualMapModel;
var padding = normalizeCssArray(visualMapModel.get("padding") || 0);
var rect = group.getBoundingRect();
group.add(new Rect$2({
z2: -1,
silent: true,
shape: {
x: rect.x - padding[3],
y: rect.y - padding[0],
width: rect.width + padding[3] + padding[1],
height: rect.height + padding[0] + padding[2]
},
style: {
fill: visualMapModel.get("backgroundColor"),
stroke: visualMapModel.get("borderColor"),
lineWidth: visualMapModel.get("borderWidth")
}
}));
};
VisualMapView2.prototype.getControllerVisual = function(targetValue, visualCluster, opts) {
opts = opts || {};
var forceState = opts.forceState;
var visualMapModel = this.visualMapModel;
var visualObj = {};
if (visualCluster === "color") {
var defaultColor = visualMapModel.get("contentColor");
visualObj.color = defaultColor;
}
function getter(key) {
return visualObj[key];
}
function setter(key, value) {
visualObj[key] = value;
}
var mappings = visualMapModel.controllerVisuals[forceState || visualMapModel.getValueState(targetValue)];
var visualTypes = VisualMapping.prepareVisualTypes(mappings);
each$f(visualTypes, function(type) {
var visualMapping = mappings[type];
if (opts.convertOpacityToAlpha && type === "opacity") {
type = "colorAlpha";
visualMapping = mappings.__alphaForOpacity;
}
if (VisualMapping.dependsOn(type, visualCluster)) {
visualMapping && visualMapping.applyVisual(targetValue, getter, setter);
}
});
return visualObj[visualCluster];
};
VisualMapView2.prototype.positionGroup = function(group) {
var model = this.visualMapModel;
var api = this.api;
positionElement(group, model.getBoxLayoutParams(), {
width: api.getWidth(),
height: api.getHeight()
});
};
VisualMapView2.prototype.doRender = function(visualMapModel, ecModel, api, payload) {
};
VisualMapView2.type = "visualMap";
return VisualMapView2;
})(ComponentView)
);
var paramsSet = [["left", "right", "width"], ["top", "bottom", "height"]];
function getItemAlign(visualMapModel, api, itemSize) {
var modelOption = visualMapModel.option;
var itemAlign = modelOption.align;
if (itemAlign != null && itemAlign !== "auto") {
return itemAlign;
}
var ecSize = {
width: api.getWidth(),
height: api.getHeight()
};
var realIndex = modelOption.orient === "horizontal" ? 1 : 0;
var reals = paramsSet[realIndex];
var fakeValue = [0, null, 10];
var layoutInput = {};
for (var i = 0; i < 3; i++) {
layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];
layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];
}
var rParam = [["x", "width", 3], ["y", "height", 0]][realIndex];
var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);
return reals[(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 < ecSize[rParam[1]] * 0.5 ? 0 : 1];
}
function makeHighDownBatch(batch, visualMapModel) {
each$f(batch || [], function(batchItem) {
if (batchItem.dataIndex != null) {
batchItem.dataIndexInside = batchItem.dataIndex;
batchItem.dataIndex = null;
}
batchItem.highlightKey = "visualMap" + (visualMapModel ? visualMapModel.componentIndex : "");
});
return batch;
}
var linearMap = linearMap$2;
var each$1 = each$f;
var mathMin = Math.min;
var mathMax = Math.max;
var HOVER_LINK_SIZE = 12;
var HOVER_LINK_OUT = 6;
var ContinuousView = (
/** @class */
(function(_super) {
__extends(ContinuousView2, _super);
function ContinuousView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = ContinuousView2.type;
_this._shapes = {};
_this._dataInterval = [];
_this._handleEnds = [];
_this._hoverLinkDataIndices = [];
return _this;
}
ContinuousView2.prototype.init = function(ecModel, api) {
_super.prototype.init.call(this, ecModel, api);
this._hoverLinkFromSeriesMouseOver = bind$1(this._hoverLinkFromSeriesMouseOver, this);
this._hideIndicator = bind$1(this._hideIndicator, this);
};
ContinuousView2.prototype.doRender = function(visualMapModel, ecModel, api, payload) {
if (!payload || payload.type !== "selectDataRange" || payload.from !== this.uid) {
this._buildView();
}
};
ContinuousView2.prototype._buildView = function() {
this.group.removeAll();
var visualMapModel = this.visualMapModel;
var thisGroup = this.group;
this._orient = visualMapModel.get("orient");
this._useHandle = visualMapModel.get("calculable");
this._resetInterval();
this._renderBar(thisGroup);
var dataRangeText = visualMapModel.get("text");
this._renderEndsText(thisGroup, dataRangeText, 0);
this._renderEndsText(thisGroup, dataRangeText, 1);
this._updateView(true);
this.renderBackground(thisGroup);
this._updateView();
this._enableHoverLinkToSeries();
this._enableHoverLinkFromSeries();
this.positionGroup(thisGroup);
};
ContinuousView2.prototype._renderEndsText = function(group, dataRangeText, endsIndex) {
if (!dataRangeText) {
return;
}
var text = dataRangeText[1 - endsIndex];
text = text != null ? text + "" : "";
var visualMapModel = this.visualMapModel;
var textGap = visualMapModel.get("textGap");
var itemSize = visualMapModel.itemSize;
var barGroup = this._shapes.mainGroup;
var position2 = this._applyTransform([itemSize[0] / 2, endsIndex === 0 ? -textGap : itemSize[1] + textGap], barGroup);
var align = this._applyTransform(endsIndex === 0 ? "bottom" : "top", barGroup);
var orient = this._orient;
var textStyleModel = this.visualMapModel.textStyleModel;
this.group.add(new ZRText({
style: createTextStyle(textStyleModel, {
x: position2[0],
y: position2[1],
verticalAlign: orient === "horizontal" ? "middle" : align,
align: orient === "horizontal" ? align : "center",
text
})
}));
};
ContinuousView2.prototype._renderBar = function(targetGroup) {
var visualMapModel = this.visualMapModel;
var shapes = this._shapes;
var itemSize = visualMapModel.itemSize;
var orient = this._orient;
var useHandle = this._useHandle;
var itemAlign = getItemAlign(visualMapModel, this.api, itemSize);
var mainGroup = shapes.mainGroup = this._createBarGroup(itemAlign);
var gradientBarGroup = new Group$3();
mainGroup.add(gradientBarGroup);
gradientBarGroup.add(shapes.outOfRange = createPolygon());
gradientBarGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor(this._orient) : null, bind$1(this._dragHandle, this, "all", false), bind$1(this._dragHandle, this, "all", true)));
gradientBarGroup.setClipPath(new Rect$2({
shape: {
x: 0,
y: 0,
width: itemSize[0],
height: itemSize[1],
r: 3
}
}));
var textRect = visualMapModel.textStyleModel.getTextRect("国");
var textSize = mathMax(textRect.width, textRect.height);
if (useHandle) {
shapes.handleThumbs = [];
shapes.handleLabels = [];
shapes.handleLabelPoints = [];
this._createHandle(visualMapModel, mainGroup, 0, itemSize, textSize, orient);
this._createHandle(visualMapModel, mainGroup, 1, itemSize, textSize, orient);
}
this._createIndicator(visualMapModel, mainGroup, itemSize, textSize, orient);
targetGroup.add(mainGroup);
};
ContinuousView2.prototype._createHandle = function(visualMapModel, mainGroup, handleIndex, itemSize, textSize, orient) {
var onDrift = bind$1(this._dragHandle, this, handleIndex, false);
var onDragEnd = bind$1(this._dragHandle, this, handleIndex, true);
var handleSize = parsePercent$1(visualMapModel.get("handleSize"), itemSize[0]);
var handleThumb = createSymbol$1(visualMapModel.get("handleIcon"), -handleSize / 2, -handleSize / 2, handleSize, handleSize, null, true);
var cursor = getCursor(this._orient);
handleThumb.attr({
cursor,
draggable: true,
drift: onDrift,
ondragend: onDragEnd,
onmousemove: function(e) {
stop(e.event);
}
});
handleThumb.x = itemSize[0] / 2;
handleThumb.useStyle(visualMapModel.getModel("handleStyle").getItemStyle());
handleThumb.setStyle({
strokeNoScale: true,
strokeFirst: true
});
handleThumb.style.lineWidth *= 2;
handleThumb.ensureState("emphasis").style = visualMapModel.getModel(["emphasis", "handleStyle"]).getItemStyle();
setAsHighDownDispatcher(handleThumb, true);
mainGroup.add(handleThumb);
var textStyleModel = this.visualMapModel.textStyleModel;
var handleLabel = new ZRText({
cursor,
draggable: true,
drift: onDrift,
onmousemove: function(e) {
stop(e.event);
},
ondragend: onDragEnd,
style: createTextStyle(textStyleModel, {
x: 0,
y: 0,
text: ""
})
});
handleLabel.ensureState("blur").style = {
opacity: 0.1
};
handleLabel.stateTransition = {
duration: 200
};
this.group.add(handleLabel);
var handleLabelPoint = [handleSize, 0];
var shapes = this._shapes;
shapes.handleThumbs[handleIndex] = handleThumb;
shapes.handleLabelPoints[handleIndex] = handleLabelPoint;
shapes.handleLabels[handleIndex] = handleLabel;
};
ContinuousView2.prototype._createIndicator = function(visualMapModel, mainGroup, itemSize, textSize, orient) {
var scale2 = parsePercent$1(visualMapModel.get("indicatorSize"), itemSize[0]);
var indicator = createSymbol$1(visualMapModel.get("indicatorIcon"), -scale2 / 2, -scale2 / 2, scale2, scale2, null, true);
indicator.attr({
cursor: "move",
invisible: true,
silent: true,
x: itemSize[0] / 2
});
var indicatorStyle = visualMapModel.getModel("indicatorStyle").getItemStyle();
if (indicator instanceof ZRImage) {
var pathStyle = indicator.style;
indicator.useStyle(extend({
// TODO other properties like x, y ?
image: pathStyle.image,
x: pathStyle.x,
y: pathStyle.y,
width: pathStyle.width,
height: pathStyle.height
}, indicatorStyle));
} else {
indicator.useStyle(indicatorStyle);
}
mainGroup.add(indicator);
var textStyleModel = this.visualMapModel.textStyleModel;
var indicatorLabel = new ZRText({
silent: true,
invisible: true,
style: createTextStyle(textStyleModel, {
x: 0,
y: 0,
text: ""
})
});
this.group.add(indicatorLabel);
var indicatorLabelPoint = [(orient === "horizontal" ? textSize / 2 : HOVER_LINK_OUT) + itemSize[0] / 2, 0];
var shapes = this._shapes;
shapes.indicator = indicator;
shapes.indicatorLabel = indicatorLabel;
shapes.indicatorLabelPoint = indicatorLabelPoint;
this._firstShowIndicator = true;
};
ContinuousView2.prototype._dragHandle = function(handleIndex, isEnd, dx, dy) {
if (!this._useHandle) {
return;
}
this._dragging = !isEnd;
if (!isEnd) {
var vertex = this._applyTransform([dx, dy], this._shapes.mainGroup, true);
this._updateInterval(handleIndex, vertex[1]);
this._hideIndicator();
this._updateView();
}
if (isEnd === !this.visualMapModel.get("realtime")) {
this.api.dispatchAction({
type: "selectDataRange",
from: this.uid,
visualMapId: this.visualMapModel.id,
selected: this._dataInterval.slice()
});
}
if (isEnd) {
!this._hovering && this._clearHoverLinkToSeries();
} else if (useHoverLinkOnHandle(this.visualMapModel)) {
this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);
}
};
ContinuousView2.prototype._resetInterval = function() {
var visualMapModel = this.visualMapModel;
var dataInterval = this._dataInterval = visualMapModel.getSelected();
var dataExtent = visualMapModel.getExtent();
var sizeExtent = [0, visualMapModel.itemSize[1]];
this._handleEnds = [linearMap(dataInterval[0], dataExtent, sizeExtent, true), linearMap(dataInterval[1], dataExtent, sizeExtent, true)];
};
ContinuousView2.prototype._updateInterval = function(handleIndex, delta) {
delta = delta || 0;
var visualMapModel = this.visualMapModel;
var handleEnds = this._handleEnds;
var sizeExtent = [0, visualMapModel.itemSize[1]];
sliderMove(
delta,
handleEnds,
sizeExtent,
handleIndex,
// cross is forbidden
0
);
var dataExtent = visualMapModel.getExtent();
this._dataInterval = [linearMap(handleEnds[0], sizeExtent, dataExtent, true), linearMap(handleEnds[1], sizeExtent, dataExtent, true)];
};
ContinuousView2.prototype._updateView = function(forSketch) {
var visualMapModel = this.visualMapModel;
var dataExtent = visualMapModel.getExtent();
var shapes = this._shapes;
var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];
var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;
var visualInRange = this._createBarVisual(this._dataInterval, dataExtent, inRangeHandleEnds, "inRange");
var visualOutOfRange = this._createBarVisual(dataExtent, dataExtent, outOfRangeHandleEnds, "outOfRange");
shapes.inRange.setStyle({
fill: visualInRange.barColor
// opacity: visualInRange.opacity
}).setShape("points", visualInRange.barPoints);
shapes.outOfRange.setStyle({
fill: visualOutOfRange.barColor
// opacity: visualOutOfRange.opacity
}).setShape("points", visualOutOfRange.barPoints);
this._updateHandle(inRangeHandleEnds, visualInRange);
};
ContinuousView2.prototype._createBarVisual = function(dataInterval, dataExtent, handleEnds, forceState) {
var opts = {
forceState,
convertOpacityToAlpha: true
};
var colorStops = this._makeColorGradient(dataInterval, opts);
var symbolSizes = [this.getControllerVisual(dataInterval[0], "symbolSize", opts), this.getControllerVisual(dataInterval[1], "symbolSize", opts)];
var barPoints = this._createBarPoints(handleEnds, symbolSizes);
return {
barColor: new LinearGradient(0, 0, 0, 1, colorStops),
barPoints,
handlesColor: [colorStops[0].color, colorStops[colorStops.length - 1].color]
};
};
ContinuousView2.prototype._makeColorGradient = function(dataInterval, opts) {
var sampleNumber = 100;
var colorStops = [];
var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;
colorStops.push({
color: this.getControllerVisual(dataInterval[0], "color", opts),
offset: 0
});
for (var i = 1; i < sampleNumber; i++) {
var currValue = dataInterval[0] + step * i;
if (currValue > dataInterval[1]) {
break;
}
colorStops.push({
color: this.getControllerVisual(currValue, "color", opts),
offset: i / sampleNumber
});
}
colorStops.push({
color: this.getControllerVisual(dataInterval[1], "color", opts),
offset: 1
});
return colorStops;
};
ContinuousView2.prototype._createBarPoints = function(handleEnds, symbolSizes) {
var itemSize = this.visualMapModel.itemSize;
return [[itemSize[0] - symbolSizes[0], handleEnds[0]], [itemSize[0], handleEnds[0]], [itemSize[0], handleEnds[1]], [itemSize[0] - symbolSizes[1], handleEnds[1]]];
};
ContinuousView2.prototype._createBarGroup = function(itemAlign) {
var orient = this._orient;
var inverse = this.visualMapModel.get("inverse");
return new Group$3(orient === "horizontal" && !inverse ? {
scaleX: itemAlign === "bottom" ? 1 : -1,
rotation: Math.PI / 2
} : orient === "horizontal" && inverse ? {
scaleX: itemAlign === "bottom" ? -1 : 1,
rotation: -Math.PI / 2
} : orient === "vertical" && !inverse ? {
scaleX: itemAlign === "left" ? 1 : -1,
scaleY: -1
} : {
scaleX: itemAlign === "left" ? 1 : -1
});
};
ContinuousView2.prototype._updateHandle = function(handleEnds, visualInRange) {
if (!this._useHandle) {
return;
}
var shapes = this._shapes;
var visualMapModel = this.visualMapModel;
var handleThumbs = shapes.handleThumbs;
var handleLabels = shapes.handleLabels;
var itemSize = visualMapModel.itemSize;
var dataExtent = visualMapModel.getExtent();
var align = this._applyTransform("left", shapes.mainGroup);
each$1([0, 1], function(handleIndex) {
var handleThumb = handleThumbs[handleIndex];
handleThumb.setStyle("fill", visualInRange.handlesColor[handleIndex]);
handleThumb.y = handleEnds[handleIndex];
var val = linearMap(handleEnds[handleIndex], [0, itemSize[1]], dataExtent, true);
var symbolSize = this.getControllerVisual(val, "symbolSize");
handleThumb.scaleX = handleThumb.scaleY = symbolSize / itemSize[0];
handleThumb.x = itemSize[0] - symbolSize / 2;
var textPoint = applyTransform(shapes.handleLabelPoints[handleIndex], getTransform$1(handleThumb, this.group));
if (this._orient === "horizontal") {
var minimumOffset = align === "left" || align === "top" ? (itemSize[0] - symbolSize) / 2 : (itemSize[0] - symbolSize) / -2;
textPoint[1] += minimumOffset;
}
handleLabels[handleIndex].setStyle({
x: textPoint[0],
y: textPoint[1],
text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),
verticalAlign: "middle",
align: this._orient === "vertical" ? this._applyTransform("left", shapes.mainGroup) : "center"
});
}, this);
};
ContinuousView2.prototype._showIndicator = function(cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {
var visualMapModel = this.visualMapModel;
var dataExtent = visualMapModel.getExtent();
var itemSize = visualMapModel.itemSize;
var sizeExtent = [0, itemSize[1]];
var shapes = this._shapes;
var indicator = shapes.indicator;
if (!indicator) {
return;
}
indicator.attr("invisible", false);
var opts = {
convertOpacityToAlpha: true
};
var color = this.getControllerVisual(cursorValue, "color", opts);
var symbolSize = this.getControllerVisual(cursorValue, "symbolSize");
var y = linearMap(cursorValue, dataExtent, sizeExtent, true);
var x = itemSize[0] - symbolSize / 2;
var oldIndicatorPos = {
x: indicator.x,
y: indicator.y
};
indicator.y = y;
indicator.x = x;
var textPoint = applyTransform(shapes.indicatorLabelPoint, getTransform$1(indicator, this.group));
var indicatorLabel = shapes.indicatorLabel;
indicatorLabel.attr("invisible", false);
var align = this._applyTransform("left", shapes.mainGroup);
var orient = this._orient;
var isHorizontal = orient === "horizontal";
indicatorLabel.setStyle({
text: (rangeSymbol ? rangeSymbol : "") + visualMapModel.formatValueText(textValue),
verticalAlign: isHorizontal ? align : "middle",
align: isHorizontal ? "center" : align
});
var indicatorNewProps = {
x,
y,
style: {
fill: color
}
};
var labelNewProps = {
style: {
x: textPoint[0],
y: textPoint[1]
}
};
if (visualMapModel.ecModel.isAnimationEnabled() && !this._firstShowIndicator) {
var animationCfg = {
duration: 100,
easing: "cubicInOut",
additive: true
};
indicator.x = oldIndicatorPos.x;
indicator.y = oldIndicatorPos.y;
indicator.animateTo(indicatorNewProps, animationCfg);
indicatorLabel.animateTo(labelNewProps, animationCfg);
} else {
indicator.attr(indicatorNewProps);
indicatorLabel.attr(labelNewProps);
}
this._firstShowIndicator = false;
var handleLabels = this._shapes.handleLabels;
if (handleLabels) {
for (var i = 0; i < handleLabels.length; i++) {
this.api.enterBlur(handleLabels[i]);
}
}
};
ContinuousView2.prototype._enableHoverLinkToSeries = function() {
var self = this;
this._shapes.mainGroup.on("mousemove", function(e) {
self._hovering = true;
if (!self._dragging) {
var itemSize = self.visualMapModel.itemSize;
var pos = self._applyTransform([e.offsetX, e.offsetY], self._shapes.mainGroup, true, true);
pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]);
self._doHoverLinkToSeries(pos[1], 0 <= pos[0] && pos[0] <= itemSize[0]);
}
}).on("mouseout", function() {
self._hovering = false;
!self._dragging && self._clearHoverLinkToSeries();
});
};
ContinuousView2.prototype._enableHoverLinkFromSeries = function() {
var zr = this.api.getZr();
if (this.visualMapModel.option.hoverLink) {
zr.on("mouseover", this._hoverLinkFromSeriesMouseOver, this);
zr.on("mouseout", this._hideIndicator, this);
} else {
this._clearHoverLinkFromSeries();
}
};
ContinuousView2.prototype._doHoverLinkToSeries = function(cursorPos, hoverOnBar) {
var visualMapModel = this.visualMapModel;
var itemSize = visualMapModel.itemSize;
if (!visualMapModel.option.hoverLink) {
return;
}
var sizeExtent = [0, itemSize[1]];
var dataExtent = visualMapModel.getExtent();
cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]);
var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);
var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];
var cursorValue = linearMap(cursorPos, sizeExtent, dataExtent, true);
var valueRange = [linearMap(hoverRange[0], sizeExtent, dataExtent, true), linearMap(hoverRange[1], sizeExtent, dataExtent, true)];
hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);
hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity);
if (hoverOnBar) {
if (valueRange[0] === -Infinity) {
this._showIndicator(cursorValue, valueRange[1], "< ", halfHoverLinkSize);
} else if (valueRange[1] === Infinity) {
this._showIndicator(cursorValue, valueRange[0], "> ", halfHoverLinkSize);
} else {
this._showIndicator(cursorValue, cursorValue, "≈ ", halfHoverLinkSize);
}
}
var oldBatch = this._hoverLinkDataIndices;
var newBatch = [];
if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {
newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);
}
var resultBatches = compressBatches(oldBatch, newBatch);
this._dispatchHighDown("downplay", makeHighDownBatch(resultBatches[0], visualMapModel));
this._dispatchHighDown("highlight", makeHighDownBatch(resultBatches[1], visualMapModel));
};
ContinuousView2.prototype._hoverLinkFromSeriesMouseOver = function(e) {
var ecData;
findEventDispatcher(e.target, function(target) {
var currECData = getECData(target);
if (currECData.dataIndex != null) {
ecData = currECData;
return true;
}
}, true);
if (!ecData) {
return;
}
var dataModel = this.ecModel.getSeriesByIndex(ecData.seriesIndex);
var visualMapModel = this.visualMapModel;
if (!visualMapModel.isTargetSeries(dataModel)) {
return;
}
var data = dataModel.getData(ecData.dataType);
var value = data.getStore().get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex);
if (!isNaN(value)) {
this._showIndicator(value, value);
}
};
ContinuousView2.prototype._hideIndicator = function() {
var shapes = this._shapes;
shapes.indicator && shapes.indicator.attr("invisible", true);
shapes.indicatorLabel && shapes.indicatorLabel.attr("invisible", true);
var handleLabels = this._shapes.handleLabels;
if (handleLabels) {
for (var i = 0; i < handleLabels.length; i++) {
this.api.leaveBlur(handleLabels[i]);
}
}
};
ContinuousView2.prototype._clearHoverLinkToSeries = function() {
this._hideIndicator();
var indices = this._hoverLinkDataIndices;
this._dispatchHighDown("downplay", makeHighDownBatch(indices, this.visualMapModel));
indices.length = 0;
};
ContinuousView2.prototype._clearHoverLinkFromSeries = function() {
this._hideIndicator();
var zr = this.api.getZr();
zr.off("mouseover", this._hoverLinkFromSeriesMouseOver);
zr.off("mouseout", this._hideIndicator);
};
ContinuousView2.prototype._applyTransform = function(vertex, element, inverse, global) {
var transform2 = getTransform$1(element, global ? null : this.group);
return isArray$1(vertex) ? applyTransform(vertex, transform2, inverse) : transformDirection(vertex, transform2, inverse);
};
ContinuousView2.prototype._dispatchHighDown = function(type, batch) {
batch && batch.length && this.api.dispatchAction({
type,
batch
});
};
ContinuousView2.prototype.dispose = function() {
this._clearHoverLinkFromSeries();
this._clearHoverLinkToSeries();
};
ContinuousView2.type = "visualMap.continuous";
return ContinuousView2;
})(VisualMapView)
);
function createPolygon(points2, cursor, onDrift, onDragEnd) {
return new Polygon({
shape: {
points: points2
},
draggable: !!onDrift,
cursor,
drift: onDrift,
onmousemove: function(e) {
stop(e.event);
},
ondragend: onDragEnd
});
}
function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {
var halfHoverLinkSize = HOVER_LINK_SIZE / 2;
var hoverLinkDataSize = visualMapModel.get("hoverLinkDataSize");
if (hoverLinkDataSize) {
halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;
}
return halfHoverLinkSize;
}
function useHoverLinkOnHandle(visualMapModel) {
var hoverLinkOnHandle = visualMapModel.get("hoverLinkOnHandle");
return !!(hoverLinkOnHandle == null ? visualMapModel.get("realtime") : hoverLinkOnHandle);
}
function getCursor(orient) {
return orient === "vertical" ? "ns-resize" : "ew-resize";
}
var visualMapActionInfo = {
type: "selectDataRange",
event: "dataRangeSelected",
// FIXME use updateView appears wrong
update: "update"
};
var visualMapActionHander = function(payload, ecModel) {
ecModel.eachComponent({
mainType: "visualMap",
query: payload
}, function(model) {
model.setSelected(payload.selected);
});
};
var visualMapEncodingHandlers = [
{
createOnAllSeries: true,
reset: function(seriesModel, ecModel) {
var resetDefines = [];
ecModel.eachComponent("visualMap", function(visualMapModel) {
var pipelineContext = seriesModel.pipelineContext;
if (!visualMapModel.isTargetSeries(seriesModel) || pipelineContext && pipelineContext.large) {
return;
}
resetDefines.push(incrementalApplyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, bind$1(visualMapModel.getValueState, visualMapModel), visualMapModel.getDataDimensionIndex(seriesModel.getData())));
});
return resetDefines;
}
},
// Only support color.
{
createOnAllSeries: true,
reset: function(seriesModel, ecModel) {
var data = seriesModel.getData();
var visualMetaList = [];
ecModel.eachComponent("visualMap", function(visualMapModel) {
if (visualMapModel.isTargetSeries(seriesModel)) {
var visualMeta = visualMapModel.getVisualMeta(bind$1(getColorVisual, null, seriesModel, visualMapModel)) || {
stops: [],
outerColors: []
};
var dimIdx = visualMapModel.getDataDimensionIndex(data);
if (dimIdx >= 0) {
visualMeta.dimension = dimIdx;
visualMetaList.push(visualMeta);
}
}
});
seriesModel.getData().setVisual("visualMeta", visualMetaList);
}
}
];
function getColorVisual(seriesModel, visualMapModel, value, valueState) {
var mappings = visualMapModel.targetVisuals[valueState];
var visualTypes = VisualMapping.prepareVisualTypes(mappings);
var resultVisual = {
color: getVisualFromData(seriesModel.getData(), "color")
// default color.
};
for (var i = 0, len2 = visualTypes.length; i < len2; i++) {
var type = visualTypes[i];
var mapping = mappings[type === "opacity" ? "__alphaForOpacity" : type];
mapping && mapping.applyVisual(value, getVisual, setVisual);
}
return resultVisual.color;
function getVisual(key) {
return resultVisual[key];
}
function setVisual(key, value2) {
resultVisual[key] = value2;
}
}
var each = each$f;
function visualMapPreprocessor(option) {
var visualMap = option && option.visualMap;
if (!isArray$1(visualMap)) {
visualMap = visualMap ? [visualMap] : [];
}
each(visualMap, function(opt) {
if (!opt) {
return;
}
if (has(opt, "splitList") && !has(opt, "pieces")) {
opt.pieces = opt.splitList;
delete opt.splitList;
}
var pieces = opt.pieces;
if (pieces && isArray$1(pieces)) {
each(pieces, function(piece) {
if (isObject$3(piece)) {
if (has(piece, "start") && !has(piece, "min")) {
piece.min = piece.start;
}
if (has(piece, "end") && !has(piece, "max")) {
piece.max = piece.end;
}
}
});
}
});
}
function has(obj, name) {
return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);
}
var installed = false;
function installCommon(registers) {
if (installed) {
return;
}
installed = true;
registers.registerSubTypeDefaulter("visualMap", function(option) {
return !option.categories && (!(option.pieces ? option.pieces.length > 0 : option.splitNumber > 0) || option.calculable) ? "continuous" : "piecewise";
});
registers.registerAction(visualMapActionInfo, visualMapActionHander);
each$f(visualMapEncodingHandlers, function(handler) {
registers.registerVisual(registers.PRIORITY.VISUAL.COMPONENT, handler);
});
registers.registerPreprocessor(visualMapPreprocessor);
}
function install$7(registers) {
registers.registerComponentModel(ContinuousModel);
registers.registerComponentView(ContinuousView);
installCommon(registers);
}
var PiecewiseModel = (
/** @class */
(function(_super) {
__extends(PiecewiseModel2, _super);
function PiecewiseModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PiecewiseModel2.type;
_this._pieceList = [];
return _this;
}
PiecewiseModel2.prototype.optionUpdated = function(newOption, isInit) {
_super.prototype.optionUpdated.apply(this, arguments);
this.resetExtent();
var mode = this._mode = this._determineMode();
this._pieceList = [];
resetMethods[this._mode].call(this, this._pieceList);
this._resetSelected(newOption, isInit);
var categories = this.option.categories;
this.resetVisual(function(mappingOption, state) {
if (mode === "categories") {
mappingOption.mappingMethod = "category";
mappingOption.categories = clone$1(categories);
} else {
mappingOption.dataExtent = this.getExtent();
mappingOption.mappingMethod = "piecewise";
mappingOption.pieceList = map$1(this._pieceList, function(piece) {
piece = clone$1(piece);
if (state !== "inRange") {
piece.visual = null;
}
return piece;
});
}
});
};
PiecewiseModel2.prototype.completeVisualOption = function() {
var option = this.option;
var visualTypesInPieces = {};
var visualTypes = VisualMapping.listVisualTypes();
var isCategory2 = this.isCategory();
each$f(option.pieces, function(piece) {
each$f(visualTypes, function(visualType) {
if (piece.hasOwnProperty(visualType)) {
visualTypesInPieces[visualType] = 1;
}
});
});
each$f(visualTypesInPieces, function(v, visualType) {
var exists = false;
each$f(this.stateList, function(state) {
exists = exists || has2(option, state, visualType) || has2(option.target, state, visualType);
}, this);
!exists && each$f(this.stateList, function(state) {
(option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === "inRange" ? "active" : "inactive", isCategory2);
});
}, this);
function has2(obj, state, visualType) {
return obj && obj[state] && obj[state].hasOwnProperty(visualType);
}
_super.prototype.completeVisualOption.apply(this, arguments);
};
PiecewiseModel2.prototype._resetSelected = function(newOption, isInit) {
var thisOption = this.option;
var pieceList = this._pieceList;
var selected = (isInit ? thisOption : newOption).selected || {};
thisOption.selected = selected;
each$f(pieceList, function(piece, index) {
var key = this.getSelectedMapKey(piece);
if (!selected.hasOwnProperty(key)) {
selected[key] = true;
}
}, this);
if (thisOption.selectedMode === "single") {
var hasSel_1 = false;
each$f(pieceList, function(piece, index) {
var key = this.getSelectedMapKey(piece);
if (selected[key]) {
hasSel_1 ? selected[key] = false : hasSel_1 = true;
}
}, this);
}
};
PiecewiseModel2.prototype.getItemSymbol = function() {
return this.get("itemSymbol");
};
PiecewiseModel2.prototype.getSelectedMapKey = function(piece) {
return this._mode === "categories" ? piece.value + "" : piece.index + "";
};
PiecewiseModel2.prototype.getPieceList = function() {
return this._pieceList;
};
PiecewiseModel2.prototype._determineMode = function() {
var option = this.option;
return option.pieces && option.pieces.length > 0 ? "pieces" : this.option.categories ? "categories" : "splitNumber";
};
PiecewiseModel2.prototype.setSelected = function(selected) {
this.option.selected = clone$1(selected);
};
PiecewiseModel2.prototype.getValueState = function(value) {
var index = VisualMapping.findPieceIndex(value, this._pieceList);
return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? "inRange" : "outOfRange" : "outOfRange";
};
PiecewiseModel2.prototype.findTargetDataIndices = function(pieceIndex) {
var result = [];
var pieceList = this._pieceList;
this.eachTargetSeries(function(seriesModel) {
var dataIndices = [];
var data = seriesModel.getData();
data.each(this.getDataDimensionIndex(data), function(value, dataIndex) {
var pIdx = VisualMapping.findPieceIndex(value, pieceList);
pIdx === pieceIndex && dataIndices.push(dataIndex);
}, this);
result.push({
seriesId: seriesModel.id,
dataIndex: dataIndices
});
}, this);
return result;
};
PiecewiseModel2.prototype.getRepresentValue = function(piece) {
var representValue;
if (this.isCategory()) {
representValue = piece.value;
} else {
if (piece.value != null) {
representValue = piece.value;
} else {
var pieceInterval = piece.interval || [];
representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2;
}
}
return representValue;
};
PiecewiseModel2.prototype.getVisualMeta = function(getColorVisual2) {
if (this.isCategory()) {
return;
}
var stops = [];
var outerColors = ["", ""];
var visualMapModel = this;
function setStop(interval, valueState) {
var representValue = visualMapModel.getRepresentValue({
interval
});
if (!valueState) {
valueState = visualMapModel.getValueState(representValue);
}
var color = getColorVisual2(representValue, valueState);
if (interval[0] === -Infinity) {
outerColors[0] = color;
} else if (interval[1] === Infinity) {
outerColors[1] = color;
} else {
stops.push({
value: interval[0],
color
}, {
value: interval[1],
color
});
}
}
var pieceList = this._pieceList.slice();
if (!pieceList.length) {
pieceList.push({
interval: [-Infinity, Infinity]
});
} else {
var edge = pieceList[0].interval[0];
edge !== -Infinity && pieceList.unshift({
interval: [-Infinity, edge]
});
edge = pieceList[pieceList.length - 1].interval[1];
edge !== Infinity && pieceList.push({
interval: [edge, Infinity]
});
}
var curr = -Infinity;
each$f(pieceList, function(piece) {
var interval = piece.interval;
if (interval) {
interval[0] > curr && setStop([curr, interval[0]], "outOfRange");
setStop(interval.slice());
curr = interval[1];
}
}, this);
return {
stops,
outerColors
};
};
PiecewiseModel2.type = "visualMap.piecewise";
PiecewiseModel2.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, {
selected: null,
minOpen: false,
maxOpen: false,
align: "auto",
itemWidth: 20,
itemHeight: 14,
itemSymbol: "roundRect",
pieces: null,
categories: null,
splitNumber: 5,
selectedMode: "multiple",
itemGap: 10,
hoverLink: true
// Enable hover highlight.
});
return PiecewiseModel2;
})(VisualMapModel)
);
var resetMethods = {
splitNumber: function(outPieceList) {
var thisOption = this.option;
var precision = Math.min(thisOption.precision, 20);
var dataExtent = this.getExtent();
var splitNumber = thisOption.splitNumber;
splitNumber = Math.max(parseInt(splitNumber, 10), 1);
thisOption.splitNumber = splitNumber;
var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber;
while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {
precision++;
}
thisOption.precision = precision;
splitStep = +splitStep.toFixed(precision);
if (thisOption.minOpen) {
outPieceList.push({
interval: [-Infinity, dataExtent[0]],
close: [0, 0]
});
}
for (var index = 0, curr = dataExtent[0]; index < splitNumber; curr += splitStep, index++) {
var max2 = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep;
outPieceList.push({
interval: [curr, max2],
close: [1, 1]
});
}
if (thisOption.maxOpen) {
outPieceList.push({
interval: [dataExtent[1], Infinity],
close: [0, 0]
});
}
reformIntervals(outPieceList);
each$f(outPieceList, function(piece, index2) {
piece.index = index2;
piece.text = this.formatValueText(piece.interval);
}, this);
},
categories: function(outPieceList) {
var thisOption = this.option;
each$f(thisOption.categories, function(cate) {
outPieceList.push({
text: this.formatValueText(cate, true),
value: cate
});
}, this);
normalizeReverse(thisOption, outPieceList);
},
pieces: function(outPieceList) {
var thisOption = this.option;
each$f(thisOption.pieces, function(pieceListItem, index) {
if (!isObject$3(pieceListItem)) {
pieceListItem = {
value: pieceListItem
};
}
var item = {
text: "",
index
};
if (pieceListItem.label != null) {
item.text = pieceListItem.label;
}
if (pieceListItem.hasOwnProperty("value")) {
var value = item.value = pieceListItem.value;
item.interval = [value, value];
item.close = [1, 1];
} else {
var interval = item.interval = [];
var close_1 = item.close = [0, 0];
var closeList = [1, 0, 1];
var infinityList = [-Infinity, Infinity];
var useMinMax = [];
for (var lg = 0; lg < 2; lg++) {
var names = [["gte", "gt", "min"], ["lte", "lt", "max"]][lg];
for (var i = 0; i < 3 && interval[lg] == null; i++) {
interval[lg] = pieceListItem[names[i]];
close_1[lg] = closeList[i];
useMinMax[lg] = i === 2;
}
interval[lg] == null && (interval[lg] = infinityList[lg]);
}
useMinMax[0] && interval[1] === Infinity && (close_1[0] = 0);
useMinMax[1] && interval[0] === -Infinity && (close_1[1] = 0);
if (interval[0] === interval[1] && close_1[0] && close_1[1]) {
item.value = interval[0];
}
}
item.visual = VisualMapping.retrieveVisuals(pieceListItem);
outPieceList.push(item);
}, this);
normalizeReverse(thisOption, outPieceList);
reformIntervals(outPieceList);
each$f(outPieceList, function(piece) {
var close = piece.close;
var edgeSymbols = [["<", "≤"][close[1]], [">", "≥"][close[0]]];
piece.text = piece.text || this.formatValueText(piece.value != null ? piece.value : piece.interval, false, edgeSymbols);
}, this);
}
};
function normalizeReverse(thisOption, pieceList) {
var inverse = thisOption.inverse;
if (thisOption.orient === "vertical" ? !inverse : inverse) {
pieceList.reverse();
}
}
var PiecewiseVisualMapView = (
/** @class */
(function(_super) {
__extends(PiecewiseVisualMapView2, _super);
function PiecewiseVisualMapView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = PiecewiseVisualMapView2.type;
return _this;
}
PiecewiseVisualMapView2.prototype.doRender = function() {
var thisGroup = this.group;
thisGroup.removeAll();
var visualMapModel = this.visualMapModel;
var textGap = visualMapModel.get("textGap");
var textStyleModel = visualMapModel.textStyleModel;
var textFont = textStyleModel.getFont();
var textFill = textStyleModel.getTextColor();
var itemAlign = this._getItemAlign();
var itemSize = visualMapModel.itemSize;
var viewData = this._getViewData();
var endsText = viewData.endsText;
var showLabel = retrieve(visualMapModel.get("showLabel", true), !endsText);
var silent = !visualMapModel.get("selectedMode");
endsText && this._renderEndsText(thisGroup, endsText[0], itemSize, showLabel, itemAlign);
each$f(viewData.viewPieceList, function(item) {
var piece = item.piece;
var itemGroup = new Group$3();
itemGroup.onclick = bind$1(this._onItemClick, this, piece);
this._enableHoverLink(itemGroup, item.indexInModelPieceList);
var representValue = visualMapModel.getRepresentValue(piece);
this._createItemSymbol(itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]], silent);
if (showLabel) {
var visualState = this.visualMapModel.getValueState(representValue);
itemGroup.add(new ZRText({
style: {
x: itemAlign === "right" ? -textGap : itemSize[0] + textGap,
y: itemSize[1] / 2,
text: piece.text,
verticalAlign: "middle",
align: itemAlign,
font: textFont,
fill: textFill,
opacity: visualState === "outOfRange" ? 0.5 : 1
},
silent
}));
}
thisGroup.add(itemGroup);
}, this);
endsText && this._renderEndsText(thisGroup, endsText[1], itemSize, showLabel, itemAlign);
box(visualMapModel.get("orient"), thisGroup, visualMapModel.get("itemGap"));
this.renderBackground(thisGroup);
this.positionGroup(thisGroup);
};
PiecewiseVisualMapView2.prototype._enableHoverLink = function(itemGroup, pieceIndex) {
var _this = this;
itemGroup.on("mouseover", function() {
return onHoverLink("highlight");
}).on("mouseout", function() {
return onHoverLink("downplay");
});
var onHoverLink = function(method) {
var visualMapModel = _this.visualMapModel;
visualMapModel.option.hoverLink && _this.api.dispatchAction({
type: method,
batch: makeHighDownBatch(visualMapModel.findTargetDataIndices(pieceIndex), visualMapModel)
});
};
};
PiecewiseVisualMapView2.prototype._getItemAlign = function() {
var visualMapModel = this.visualMapModel;
var modelOption = visualMapModel.option;
if (modelOption.orient === "vertical") {
return getItemAlign(visualMapModel, this.api, visualMapModel.itemSize);
} else {
var align = modelOption.align;
if (!align || align === "auto") {
align = "left";
}
return align;
}
};
PiecewiseVisualMapView2.prototype._renderEndsText = function(group, text, itemSize, showLabel, itemAlign) {
if (!text) {
return;
}
var itemGroup = new Group$3();
var textStyleModel = this.visualMapModel.textStyleModel;
itemGroup.add(new ZRText({
style: createTextStyle(textStyleModel, {
x: showLabel ? itemAlign === "right" ? itemSize[0] : 0 : itemSize[0] / 2,
y: itemSize[1] / 2,
verticalAlign: "middle",
align: showLabel ? itemAlign : "center",
text
})
}));
group.add(itemGroup);
};
PiecewiseVisualMapView2.prototype._getViewData = function() {
var visualMapModel = this.visualMapModel;
var viewPieceList = map$1(visualMapModel.getPieceList(), function(piece, index) {
return {
piece,
indexInModelPieceList: index
};
});
var endsText = visualMapModel.get("text");
var orient = visualMapModel.get("orient");
var inverse = visualMapModel.get("inverse");
if (orient === "horizontal" ? inverse : !inverse) {
viewPieceList.reverse();
} else if (endsText) {
endsText = endsText.slice().reverse();
}
return {
viewPieceList,
endsText
};
};
PiecewiseVisualMapView2.prototype._createItemSymbol = function(group, representValue, shapeParam, silent) {
var itemSymbol = createSymbol$1(
// symbol will be string
this.getControllerVisual(representValue, "symbol"),
shapeParam[0],
shapeParam[1],
shapeParam[2],
shapeParam[3],
// color will be string
this.getControllerVisual(representValue, "color")
);
itemSymbol.silent = silent;
group.add(itemSymbol);
};
PiecewiseVisualMapView2.prototype._onItemClick = function(piece) {
var visualMapModel = this.visualMapModel;
var option = visualMapModel.option;
var selectedMode = option.selectedMode;
if (!selectedMode) {
return;
}
var selected = clone$1(option.selected);
var newKey = visualMapModel.getSelectedMapKey(piece);
if (selectedMode === "single" || selectedMode === true) {
selected[newKey] = true;
each$f(selected, function(o, key) {
selected[key] = key === newKey;
});
} else {
selected[newKey] = !selected[newKey];
}
this.api.dispatchAction({
type: "selectDataRange",
from: this.uid,
visualMapId: this.visualMapModel.id,
selected
});
};
PiecewiseVisualMapView2.type = "visualMap.piecewise";
return PiecewiseVisualMapView2;
})(VisualMapView)
);
function install$6(registers) {
registers.registerComponentModel(PiecewiseModel);
registers.registerComponentView(PiecewiseVisualMapView);
installCommon(registers);
}
function install$5(registers) {
use(install$7);
use(install$6);
}
var DEFAULT_OPTION = {
label: {
enabled: true
},
decal: {
show: false
}
};
var inner = makeInner();
var decalPaletteScope = {};
function ariaVisual(ecModel, api) {
var ariaModel = ecModel.getModel("aria");
if (!ariaModel.get("enabled")) {
return;
}
var defaultOption2 = clone$1(DEFAULT_OPTION);
merge(defaultOption2.label, ecModel.getLocaleModel().get("aria"), false);
merge(ariaModel.option, defaultOption2, false);
setDecal();
setLabel();
function setDecal() {
var decalModel = ariaModel.getModel("decal");
var useDecal = decalModel.get("show");
if (useDecal) {
var paletteScopeGroupByType_1 = createHashMap();
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.isColorBySeries()) {
return;
}
var decalScope = paletteScopeGroupByType_1.get(seriesModel.type);
if (!decalScope) {
decalScope = {};
paletteScopeGroupByType_1.set(seriesModel.type, decalScope);
}
inner(seriesModel).scope = decalScope;
});
ecModel.eachRawSeries(function(seriesModel) {
if (ecModel.isSeriesFiltered(seriesModel)) {
return;
}
if (isFunction(seriesModel.enableAriaDecal)) {
seriesModel.enableAriaDecal();
return;
}
var data = seriesModel.getData();
if (!seriesModel.isColorBySeries()) {
var dataAll_1 = seriesModel.getRawData();
var idxMap_1 = {};
var decalScope_1 = inner(seriesModel).scope;
data.each(function(idx) {
var rawIdx = data.getRawIndex(idx);
idxMap_1[rawIdx] = idx;
});
var dataCount_1 = dataAll_1.count();
dataAll_1.each(function(rawIdx) {
var idx = idxMap_1[rawIdx];
var name = dataAll_1.getName(rawIdx) || rawIdx + "";
var paletteDecal2 = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1);
var specifiedDecal2 = data.getItemVisual(idx, "decal");
data.setItemVisual(idx, "decal", mergeDecal(specifiedDecal2, paletteDecal2));
});
} else {
var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount());
var specifiedDecal = data.getVisual("decal");
data.setVisual("decal", mergeDecal(specifiedDecal, paletteDecal));
}
function mergeDecal(specifiedDecal2, paletteDecal2) {
var resultDecal = specifiedDecal2 ? extend(extend({}, paletteDecal2), specifiedDecal2) : paletteDecal2;
resultDecal.dirty = true;
return resultDecal;
}
});
}
}
function setLabel() {
var dom = api.getZr().dom;
if (!dom) {
return;
}
var labelLocale = ecModel.getLocaleModel().get("aria");
var labelModel = ariaModel.getModel("label");
labelModel.option = defaults(labelModel.option, labelLocale);
if (!labelModel.get("enabled")) {
return;
}
dom.setAttribute("role", "img");
if (labelModel.get("description")) {
dom.setAttribute("aria-label", labelModel.get("description"));
return;
}
var seriesCnt = ecModel.getSeriesCount();
var maxDataCnt = labelModel.get(["data", "maxCount"]) || 10;
var maxSeriesCnt = labelModel.get(["series", "maxCount"]) || 10;
var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);
var ariaLabel;
if (seriesCnt < 1) {
return;
} else {
var title = getTitle();
if (title) {
var withTitle = labelModel.get(["general", "withTitle"]);
ariaLabel = replace(withTitle, {
title
});
} else {
ariaLabel = labelModel.get(["general", "withoutTitle"]);
}
var seriesLabels_1 = [];
var prefix = seriesCnt > 1 ? labelModel.get(["series", "multiple", "prefix"]) : labelModel.get(["series", "single", "prefix"]);
ariaLabel += replace(prefix, {
seriesCount: seriesCnt
});
ecModel.eachSeries(function(seriesModel, idx) {
if (idx < displaySeriesCnt) {
var seriesLabel = void 0;
var seriesName = seriesModel.get("name");
var withName = seriesName ? "withName" : "withoutName";
seriesLabel = seriesCnt > 1 ? labelModel.get(["series", "multiple", withName]) : labelModel.get(["series", "single", withName]);
seriesLabel = replace(seriesLabel, {
seriesId: seriesModel.seriesIndex,
seriesName: seriesModel.get("name"),
seriesType: getSeriesTypeName(seriesModel.subType)
});
var data = seriesModel.getData();
if (data.count() > maxDataCnt) {
var partialLabel = labelModel.get(["data", "partialData"]);
seriesLabel += replace(partialLabel, {
displayCnt: maxDataCnt
});
} else {
seriesLabel += labelModel.get(["data", "allData"]);
}
var middleSeparator_1 = labelModel.get(["data", "separator", "middle"]);
var endSeparator_1 = labelModel.get(["data", "separator", "end"]);
var excludeDimensionId_1 = labelModel.get(["data", "excludeDimensionId"]);
var dataLabels = [];
for (var i = 0; i < data.count(); i++) {
if (i < maxDataCnt) {
var name_1 = data.getName(i);
var value = !excludeDimensionId_1 ? data.getValues(i) : filter(data.getValues(i), function(v, j) {
return indexOf(excludeDimensionId_1, j) === -1;
});
var dataLabel = labelModel.get(["data", name_1 ? "withName" : "withoutName"]);
dataLabels.push(replace(dataLabel, {
name: name_1,
value: value.join(middleSeparator_1)
}));
}
}
seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1;
seriesLabels_1.push(seriesLabel);
}
});
var separatorModel = labelModel.getModel(["series", "multiple", "separator"]);
var middleSeparator = separatorModel.get("middle");
var endSeparator = separatorModel.get("end");
ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator;
dom.setAttribute("aria-label", ariaLabel);
}
}
function replace(str, keyValues) {
if (!isString(str)) {
return str;
}
var result = str;
each$f(keyValues, function(value, key) {
result = result.replace(new RegExp("\\{\\s*" + key + "\\s*\\}", "g"), value);
});
return result;
}
function getTitle() {
var title = ecModel.get("title");
if (title && title.length) {
title = title[0];
}
return title && title.text;
}
function getSeriesTypeName(type) {
var typeNames = ecModel.getLocaleModel().get(["series", "typeNames"]);
return typeNames[type] || typeNames.chart;
}
}
function ariaPreprocessor(option) {
if (!option || !option.aria) {
return;
}
var aria = option.aria;
if (aria.show != null) {
aria.enabled = aria.show;
}
aria.label = aria.label || {};
each$f(["description", "general", "series", "data"], function(name) {
if (aria[name] != null) {
aria.label[name] = aria[name];
}
});
}
function install$4(registers) {
registers.registerPreprocessor(ariaPreprocessor);
registers.registerVisual(registers.PRIORITY.VISUAL.ARIA, ariaVisual);
}
var RELATIONAL_EXPRESSION_OP_ALIAS_MAP = {
value: "eq",
// PENDING: not good for literal semantic?
"<": "lt",
"<=": "lte",
">": "gt",
">=": "gte",
"=": "eq",
"!=": "ne",
"<>": "ne"
// Might be misleading for sake of the difference between '==' and '===',
// so don't support them.
// '==': 'eq',
// '===': 'seq',
// '!==': 'sne'
// PENDING: Whether support some common alias "ge", "le", "neq"?
// ge: 'gte',
// le: 'lte',
// neq: 'ne',
};
var RegExpEvaluator = (
/** @class */
(function() {
function RegExpEvaluator2(rVal) {
var condValue = this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null;
if (condValue == null) {
var errMsg = "";
throwError(errMsg);
}
}
RegExpEvaluator2.prototype.evaluate = function(lVal) {
var type = typeof lVal;
return isString(type) ? this._condVal.test(lVal) : isNumber(type) ? this._condVal.test(lVal + "") : false;
};
return RegExpEvaluator2;
})()
);
var ConstConditionInternal = (
/** @class */
(function() {
function ConstConditionInternal2() {
}
ConstConditionInternal2.prototype.evaluate = function() {
return this.value;
};
return ConstConditionInternal2;
})()
);
var AndConditionInternal = (
/** @class */
(function() {
function AndConditionInternal2() {
}
AndConditionInternal2.prototype.evaluate = function() {
var children = this.children;
for (var i = 0; i < children.length; i++) {
if (!children[i].evaluate()) {
return false;
}
}
return true;
};
return AndConditionInternal2;
})()
);
var OrConditionInternal = (
/** @class */
(function() {
function OrConditionInternal2() {
}
OrConditionInternal2.prototype.evaluate = function() {
var children = this.children;
for (var i = 0; i < children.length; i++) {
if (children[i].evaluate()) {
return true;
}
}
return false;
};
return OrConditionInternal2;
})()
);
var NotConditionInternal = (
/** @class */
(function() {
function NotConditionInternal2() {
}
NotConditionInternal2.prototype.evaluate = function() {
return !this.child.evaluate();
};
return NotConditionInternal2;
})()
);
var RelationalConditionInternal = (
/** @class */
(function() {
function RelationalConditionInternal2() {
}
RelationalConditionInternal2.prototype.evaluate = function() {
var needParse = !!this.valueParser;
var getValue = this.getValue;
var tarValRaw = getValue(this.valueGetterParam);
var tarValParsed = needParse ? this.valueParser(tarValRaw) : null;
for (var i = 0; i < this.subCondList.length; i++) {
if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) {
return false;
}
}
return true;
};
return RelationalConditionInternal2;
})()
);
function parseOption(exprOption, getters) {
if (exprOption === true || exprOption === false) {
var cond = new ConstConditionInternal();
cond.value = exprOption;
return cond;
}
var errMsg = "";
if (!isObjectNotArray(exprOption)) {
throwError(errMsg);
}
if (exprOption.and) {
return parseAndOrOption("and", exprOption, getters);
} else if (exprOption.or) {
return parseAndOrOption("or", exprOption, getters);
} else if (exprOption.not) {
return parseNotOption(exprOption, getters);
}
return parseRelationalOption(exprOption, getters);
}
function parseAndOrOption(op, exprOption, getters) {
var subOptionArr = exprOption[op];
var errMsg = "";
if (!isArray$1(subOptionArr)) {
throwError(errMsg);
}
if (!subOptionArr.length) {
throwError(errMsg);
}
var cond = op === "and" ? new AndConditionInternal() : new OrConditionInternal();
cond.children = map$1(subOptionArr, function(subOption) {
return parseOption(subOption, getters);
});
if (!cond.children.length) {
throwError(errMsg);
}
return cond;
}
function parseNotOption(exprOption, getters) {
var subOption = exprOption.not;
var errMsg = "";
if (!isObjectNotArray(subOption)) {
throwError(errMsg);
}
var cond = new NotConditionInternal();
cond.child = parseOption(subOption, getters);
if (!cond.child) {
throwError(errMsg);
}
return cond;
}
function parseRelationalOption(exprOption, getters) {
var errMsg = "";
var valueGetterParam = getters.prepareGetValue(exprOption);
var subCondList = [];
var exprKeys = keys(exprOption);
var parserName = exprOption.parser;
var valueParser = parserName ? getRawValueParser(parserName) : null;
for (var i = 0; i < exprKeys.length; i++) {
var keyRaw = exprKeys[i];
if (keyRaw === "parser" || getters.valueGetterAttrMap.get(keyRaw)) {
continue;
}
var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw;
var condValueRaw = exprOption[keyRaw];
var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw;
var evaluator = createFilterComparator(op, condValueParsed) || op === "reg" && new RegExpEvaluator(condValueParsed);
if (!evaluator) {
throwError(errMsg);
}
subCondList.push(evaluator);
}
if (!subCondList.length) {
throwError(errMsg);
}
var cond = new RelationalConditionInternal();
cond.valueGetterParam = valueGetterParam;
cond.valueParser = valueParser;
cond.getValue = getters.getValue;
cond.subCondList = subCondList;
return cond;
}
function isObjectNotArray(val) {
return isObject$3(val) && !isArrayLike(val);
}
var ConditionalExpressionParsed = (
/** @class */
(function() {
function ConditionalExpressionParsed2(exprOption, getters) {
this._cond = parseOption(exprOption, getters);
}
ConditionalExpressionParsed2.prototype.evaluate = function() {
return this._cond.evaluate();
};
return ConditionalExpressionParsed2;
})()
);
function parseConditionalExpression(exprOption, getters) {
return new ConditionalExpressionParsed(exprOption, getters);
}
var filterTransform = {
type: "echarts:filter",
// PENDING: enhance to filter by index rather than create new data
transform: function(params) {
var upstream = params.upstream;
var rawItem;
var condition = parseConditionalExpression(params.config, {
valueGetterAttrMap: createHashMap({
dimension: true
}),
prepareGetValue: function(exprOption) {
var errMsg = "";
var dimLoose = exprOption.dimension;
if (!hasOwn(exprOption, "dimension")) {
throwError(errMsg);
}
var dimInfo = upstream.getDimensionInfo(dimLoose);
if (!dimInfo) {
throwError(errMsg);
}
return {
dimIdx: dimInfo.index
};
},
getValue: function(param) {
return upstream.retrieveValueFromItem(rawItem, param.dimIdx);
}
});
var resultData = [];
for (var i = 0, len2 = upstream.count(); i < len2; i++) {
rawItem = upstream.getRawDataItem(i);
if (condition.evaluate()) {
resultData.push(rawItem);
}
}
return {
data: resultData
};
}
};
var sortTransform = {
type: "echarts:sort",
transform: function(params) {
var upstream = params.upstream;
var config = params.config;
var errMsg = "";
var orderExprList = normalizeToArray(config);
if (!orderExprList.length) {
throwError(errMsg);
}
var orderDefList = [];
each$f(orderExprList, function(orderExpr) {
var dimLoose = orderExpr.dimension;
var order = orderExpr.order;
var parserName = orderExpr.parser;
var incomparable = orderExpr.incomparable;
if (dimLoose == null) {
throwError(errMsg);
}
if (order !== "asc" && order !== "desc") {
throwError(errMsg);
}
if (incomparable && incomparable !== "min" && incomparable !== "max") {
var errMsg_1 = "";
throwError(errMsg_1);
}
if (order !== "asc" && order !== "desc") {
var errMsg_2 = "";
throwError(errMsg_2);
}
var dimInfo = upstream.getDimensionInfo(dimLoose);
if (!dimInfo) {
throwError(errMsg);
}
var parser = parserName ? getRawValueParser(parserName) : null;
if (parserName && !parser) {
throwError(errMsg);
}
orderDefList.push({
dimIdx: dimInfo.index,
parser,
comparator: new SortOrderComparator(order, incomparable)
});
});
var sourceFormat = upstream.sourceFormat;
if (sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) {
throwError(errMsg);
}
var resultData = [];
for (var i = 0, len2 = upstream.count(); i < len2; i++) {
resultData.push(upstream.getRawDataItem(i));
}
resultData.sort(function(item0, item1) {
for (var i2 = 0; i2 < orderDefList.length; i2++) {
var orderDef = orderDefList[i2];
var val0 = upstream.retrieveValueFromItem(item0, orderDef.dimIdx);
var val1 = upstream.retrieveValueFromItem(item1, orderDef.dimIdx);
if (orderDef.parser) {
val0 = orderDef.parser(val0);
val1 = orderDef.parser(val1);
}
var result = orderDef.comparator.evaluate(val0, val1);
if (result !== 0) {
return result;
}
}
return 0;
});
return {
data: resultData
};
}
};
function install$3(registers) {
registers.registerTransform(filterTransform);
registers.registerTransform(sortTransform);
}
var DatasetModel = (
/** @class */
(function(_super) {
__extends(DatasetModel2, _super);
function DatasetModel2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "dataset";
return _this;
}
DatasetModel2.prototype.init = function(option, parentModel, ecModel) {
_super.prototype.init.call(this, option, parentModel, ecModel);
this._sourceManager = new SourceManager(this);
disableTransformOptionMerge(this);
};
DatasetModel2.prototype.mergeOption = function(newOption, ecModel) {
_super.prototype.mergeOption.call(this, newOption, ecModel);
disableTransformOptionMerge(this);
};
DatasetModel2.prototype.optionUpdated = function() {
this._sourceManager.dirty();
};
DatasetModel2.prototype.getSourceManager = function() {
return this._sourceManager;
};
DatasetModel2.type = "dataset";
DatasetModel2.defaultOption = {
seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN
};
return DatasetModel2;
})(ComponentModel)
);
var DatasetView = (
/** @class */
(function(_super) {
__extends(DatasetView2, _super);
function DatasetView2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "dataset";
return _this;
}
DatasetView2.type = "dataset";
return DatasetView2;
})(ComponentView)
);
function install$2(registers) {
registers.registerComponentModel(DatasetModel);
registers.registerComponentView(DatasetView);
}
function install$1(registers) {
registers.registerPainter("svg", SVGPainter);
}
function install(registers) {
registers.registerPainter("canvas", CanvasPainter);
}
function isMultiple(elements) {
return isArray$1(elements[0]);
}
function prepareMorphBatches(one, many) {
var batches = [];
var batchCount = one.length;
for (var i = 0; i < batchCount; i++) {
batches.push({
one: one[i],
many: []
});
}
for (var i = 0; i < many.length; i++) {
var len2 = many[i].length;
var k = void 0;
for (k = 0; k < len2; k++) {
batches[k % batchCount].many.push(many[i][k]);
}
}
var off = 0;
for (var i = batchCount - 1; i >= 0; i--) {
if (!batches[i].many.length) {
var moveFrom = batches[off].many;
if (moveFrom.length <= 1) {
if (off) {
off = 0;
} else {
return batches;
}
}
var len2 = moveFrom.length;
var mid = Math.ceil(len2 / 2);
batches[i].many = moveFrom.slice(mid, len2);
batches[off].many = moveFrom.slice(0, mid);
off++;
}
}
return batches;
}
var pathDividers = {
clone: function(params) {
var ret = [];
var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count);
for (var i = 0; i < params.count; i++) {
var cloned = clonePath(params.path);
cloned.setStyle("opacity", approxOpacity);
ret.push(cloned);
}
return ret;
},
// Use the default divider
split: null
};
function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) {
if (!from.length || !to.length) {
return;
}
var updateAnimationCfg = getAnimationConfig("update", seriesModel, dataIndex);
if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) {
return;
}
var animationDelay = seriesModel.getModel("universalTransition").get("delay");
var animationCfg = Object.assign({
// Need to setToFinal so the further calculation based on the style can be correct.
// Like emphasis color.
setToFinal: true
}, updateAnimationCfg);
var many;
var one;
if (isMultiple(from)) {
many = from;
one = to;
}
if (isMultiple(to)) {
many = to;
one = from;
}
function morphOneBatch(batch, fromIsMany2, animateIndex2, animateCount2, forceManyOne) {
var batchMany = batch.many;
var batchOne = batch.one;
if (batchMany.length === 1 && !forceManyOne) {
var batchFrom = fromIsMany2 ? batchMany[0] : batchOne;
var batchTo = fromIsMany2 ? batchOne : batchMany[0];
if (isCombineMorphing(batchFrom)) {
morphOneBatch({
many: [batchFrom],
one: batchTo
}, true, animateIndex2, animateCount2, true);
} else {
var individualAnimationCfg = animationDelay ? defaults({
delay: animationDelay(animateIndex2, animateCount2)
}, animationCfg) : animationCfg;
morphPath(batchFrom, batchTo, individualAnimationCfg);
animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg);
}
} else {
var separateAnimationCfg = defaults({
dividePath: pathDividers[divideShape],
individualDelay: animationDelay && function(idx, count3, fromPath, toPath) {
return animationDelay(idx + animateIndex2, animateCount2);
}
}, animationCfg);
var _a2 = fromIsMany2 ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg), fromIndividuals = _a2.fromIndividuals, toIndividuals = _a2.toIndividuals;
var count2 = fromIndividuals.length;
for (var k = 0; k < count2; k++) {
var individualAnimationCfg = animationDelay ? defaults({
delay: animationDelay(k, count2)
}, animationCfg) : animationCfg;
animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany2 ? batchMany[k] : batch.one, fromIsMany2 ? batch.one : batchMany[k], individualAnimationCfg);
}
}
}
var fromIsMany = many ? many === from : from.length > to.length;
var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]);
var animateCount = 0;
for (var i = 0; i < morphBatches.length; i++) {
animateCount += morphBatches[i].many.length;
}
var animateIndex = 0;
for (var i = 0; i < morphBatches.length; i++) {
morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount);
animateIndex += morphBatches[i].many.length;
}
}
function getPathList(elements) {
if (!elements) {
return [];
}
if (isArray$1(elements)) {
var pathList_1 = [];
for (var i = 0; i < elements.length; i++) {
pathList_1.push(getPathList(elements[i]));
}
return pathList_1;
}
var pathList = [];
elements.traverse(function(el) {
if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) {
pathList.push(el);
}
});
return pathList;
}
var DATA_COUNT_THRESHOLD = 1e4;
var TRANSITION_NONE = 0;
var TRANSITION_P2C = 1;
var TRANSITION_C2P = 2;
var getUniversalTransitionGlobalStore = makeInner();
function getDimension(data, visualDimension) {
var dimensions = data.dimensions;
for (var i = 0; i < dimensions.length; i++) {
var dimInfo = data.getDimensionInfo(dimensions[i]);
if (dimInfo && dimInfo.otherDims[visualDimension] === 0) {
return dimensions[i];
}
}
}
function getValueByDimension(data, dataIndex, dimension) {
var dimInfo = data.getDimensionInfo(dimension);
var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta;
if (dimInfo) {
var value = data.get(dimInfo.name, dataIndex);
if (dimOrdinalMeta) {
return dimOrdinalMeta.categories[value] || value + "";
}
return value + "";
}
}
function getGroupId(data, dataIndex, dataGroupId, isChild) {
var visualDimension = isChild ? "itemChildGroupId" : "itemGroupId";
var groupIdDim = getDimension(data, visualDimension);
if (groupIdDim) {
var groupId = getValueByDimension(data, dataIndex, groupIdDim);
return groupId;
}
var rawDataItem = data.getRawDataItem(dataIndex);
var property = isChild ? "childGroupId" : "groupId";
if (rawDataItem && rawDataItem[property]) {
return rawDataItem[property] + "";
}
if (isChild) {
return;
}
return dataGroupId || data.getId(dataIndex);
}
function flattenDataDiffItems(list) {
var items = [];
each$f(list, function(seriesInfo) {
var data = seriesInfo.data;
var dataGroupId = seriesInfo.dataGroupId;
if (data.count() > DATA_COUNT_THRESHOLD) {
return;
}
var indices = data.getIndices();
for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) {
items.push({
data,
groupId: getGroupId(data, dataIndex, dataGroupId, false),
childGroupId: getGroupId(data, dataIndex, dataGroupId, true),
divide: seriesInfo.divide,
dataIndex
});
}
});
return items;
}
function fadeInElement(newEl2, newSeries, newIndex) {
newEl2.traverse(function(el) {
if (el instanceof Path) {
initProps(el, {
style: {
opacity: 0
}
}, newSeries, {
dataIndex: newIndex,
isFrom: true
});
}
});
}
function removeEl(el) {
if (el.parent) {
var computedTransform = el.getComputedTransform();
el.setLocalTransform(computedTransform);
el.parent.remove(el);
}
}
function stopAnimation(el) {
el.stopAnimation();
if (el.isGroup) {
el.traverse(function(child) {
child.stopAnimation();
});
}
}
function animateElementStyles(el, dataIndex, seriesModel) {
var animationConfig = getAnimationConfig("update", seriesModel, dataIndex);
animationConfig && el.traverse(function(child) {
if (child instanceof Displayable) {
var oldStyle = getOldStyle(child);
if (oldStyle) {
child.animateFrom({
style: oldStyle
}, animationConfig);
}
}
});
}
function isAllIdSame(oldDiffItems, newDiffItems) {
var len2 = oldDiffItems.length;
if (len2 !== newDiffItems.length) {
return false;
}
for (var i = 0; i < len2; i++) {
var oldItem = oldDiffItems[i];
var newItem = newDiffItems[i];
if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) {
return false;
}
}
return true;
}
function transitionBetween(oldList, newList, api) {
var oldDiffItems = flattenDataDiffItems(oldList);
var newDiffItems = flattenDataDiffItems(newList);
function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) {
if (rawFrom || from) {
to.animateFrom({
style: rawFrom && rawFrom !== from ? extend(extend({}, rawFrom.style), from.style) : from.style
}, animationCfg);
}
}
var hasMorphAnimation = false;
var direction = TRANSITION_NONE;
var oldGroupIds = createHashMap();
var oldChildGroupIds = createHashMap();
oldDiffItems.forEach(function(item) {
item.groupId && oldGroupIds.set(item.groupId, true);
item.childGroupId && oldChildGroupIds.set(item.childGroupId, true);
});
for (var i = 0; i < newDiffItems.length; i++) {
var newGroupId = newDiffItems[i].groupId;
if (oldChildGroupIds.get(newGroupId)) {
direction = TRANSITION_P2C;
break;
}
var newChildGroupId = newDiffItems[i].childGroupId;
if (newChildGroupId && oldGroupIds.get(newChildGroupId)) {
direction = TRANSITION_C2P;
break;
}
}
function createKeyGetter(isOld, onlyGetId) {
return function(diffItem) {
var data = diffItem.data;
var dataIndex = diffItem.dataIndex;
if (onlyGetId) {
return data.getId(dataIndex);
}
if (isOld) {
return direction === TRANSITION_P2C ? diffItem.childGroupId : diffItem.groupId;
} else {
return direction === TRANSITION_C2P ? diffItem.childGroupId : diffItem.groupId;
}
};
}
var useId = isAllIdSame(oldDiffItems, newDiffItems);
var isElementStillInChart = {};
if (!useId) {
for (var i = 0; i < newDiffItems.length; i++) {
var newItem = newDiffItems[i];
var el = newItem.data.getItemGraphicEl(newItem.dataIndex);
if (el) {
isElementStillInChart[el.id] = true;
}
}
}
function updateOneToOne(newIndex, oldIndex) {
var oldItem = oldDiffItems[oldIndex];
var newItem2 = newDiffItems[newIndex];
var newSeries = newItem2.data.hostModel;
var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);
var newEl2 = newItem2.data.getItemGraphicEl(newItem2.dataIndex);
if (oldEl === newEl2) {
newEl2 && animateElementStyles(newEl2, newItem2.dataIndex, newSeries);
return;
}
if (
// We can't use the elements that already being morphed
oldEl && isElementStillInChart[oldEl.id]
) {
return;
}
if (newEl2) {
stopAnimation(newEl2);
if (oldEl) {
stopAnimation(oldEl);
removeEl(oldEl);
hasMorphAnimation = true;
applyMorphAnimation(getPathList(oldEl), getPathList(newEl2), newItem2.divide, newSeries, newIndex, updateMorphingPathProps);
} else {
fadeInElement(newEl2, newSeries, newIndex);
}
}
}
new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, "multiple").update(updateOneToOne).updateManyToOne(function(newIndex, oldIndices) {
var newItem2 = newDiffItems[newIndex];
var newData = newItem2.data;
var newSeries = newData.hostModel;
var newEl2 = newData.getItemGraphicEl(newItem2.dataIndex);
var oldElsList = filter(map$1(oldIndices, function(idx) {
return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex);
}), function(oldEl) {
return oldEl && oldEl !== newEl2 && !isElementStillInChart[oldEl.id];
});
if (newEl2) {
stopAnimation(newEl2);
if (oldElsList.length) {
each$f(oldElsList, function(oldEl) {
stopAnimation(oldEl);
removeEl(oldEl);
});
hasMorphAnimation = true;
applyMorphAnimation(getPathList(oldElsList), getPathList(newEl2), newItem2.divide, newSeries, newIndex, updateMorphingPathProps);
} else {
fadeInElement(newEl2, newSeries, newItem2.dataIndex);
}
}
}).updateOneToMany(function(newIndices, oldIndex) {
var oldItem = oldDiffItems[oldIndex];
var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);
if (oldEl && isElementStillInChart[oldEl.id]) {
return;
}
var newElsList = filter(map$1(newIndices, function(idx) {
return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex);
}), function(el2) {
return el2 && el2 !== oldEl;
});
var newSeris = newDiffItems[newIndices[0]].data.hostModel;
if (newElsList.length) {
each$f(newElsList, function(newEl2) {
return stopAnimation(newEl2);
});
if (oldEl) {
stopAnimation(oldEl);
removeEl(oldEl);
hasMorphAnimation = true;
applyMorphAnimation(
getPathList(oldEl),
getPathList(newElsList),
oldItem.divide,
// Use divide on old.
newSeris,
newIndices[0],
updateMorphingPathProps
);
} else {
each$f(newElsList, function(newEl2) {
return fadeInElement(newEl2, newSeris, newIndices[0]);
});
}
}
}).updateManyToMany(function(newIndices, oldIndices) {
new DataDiffer(oldIndices, newIndices, function(rawIdx) {
return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex);
}, function(rawIdx) {
return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex);
}).update(function(newIndex, oldIndex) {
updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]);
}).execute();
}).execute();
if (hasMorphAnimation) {
each$f(newList, function(_a2) {
var data = _a2.data;
var seriesModel = data.hostModel;
var view = seriesModel && api.getViewOfSeriesModel(seriesModel);
var animationCfg = getAnimationConfig("update", seriesModel, 0);
if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) {
view.group.traverse(function(el2) {
if (el2 instanceof Path && !el2.animators.length) {
el2.animateFrom({
style: {
opacity: 0
}
}, animationCfg);
}
});
}
});
}
}
function getSeriesTransitionKey(series) {
var seriesKey = series.getModel("universalTransition").get("seriesKey");
if (!seriesKey) {
return series.id;
}
return seriesKey;
}
function convertArraySeriesKeyToString(seriesKey) {
if (isArray$1(seriesKey)) {
return seriesKey.sort().join(",");
}
return seriesKey;
}
function getDivideShapeFromData(data) {
if (data.hostModel) {
return data.hostModel.getModel("universalTransition").get("divideShape");
}
}
function findTransitionSeriesBatches(globalStore, params) {
var updateBatches = createHashMap();
var oldDataMap = createHashMap();
var oldDataMapForSplit = createHashMap();
each$f(globalStore.oldSeries, function(series, idx) {
var oldDataGroupId = globalStore.oldDataGroupIds[idx];
var oldData = globalStore.oldData[idx];
var transitionKey = getSeriesTransitionKey(series);
var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);
oldDataMap.set(transitionKeyStr, {
dataGroupId: oldDataGroupId,
data: oldData
});
if (isArray$1(transitionKey)) {
each$f(transitionKey, function(key) {
oldDataMapForSplit.set(key, {
key: transitionKeyStr,
dataGroupId: oldDataGroupId,
data: oldData
});
});
}
});
each$f(params.updatedSeries, function(series) {
if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) {
var newDataGroupId = series.get("dataGroupId");
var newData = series.getData();
var transitionKey = getSeriesTransitionKey(series);
var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);
var oldData = oldDataMap.get(transitionKeyStr);
if (oldData) {
updateBatches.set(transitionKeyStr, {
oldSeries: [{
dataGroupId: oldData.dataGroupId,
divide: getDivideShapeFromData(oldData.data),
data: oldData.data
}],
newSeries: [{
dataGroupId: newDataGroupId,
divide: getDivideShapeFromData(newData),
data: newData
}]
});
} else {
if (isArray$1(transitionKey)) {
var oldSeries_1 = [];
each$f(transitionKey, function(key) {
var oldData2 = oldDataMap.get(key);
if (oldData2.data) {
oldSeries_1.push({
dataGroupId: oldData2.dataGroupId,
divide: getDivideShapeFromData(oldData2.data),
data: oldData2.data
});
}
});
if (oldSeries_1.length) {
updateBatches.set(transitionKeyStr, {
oldSeries: oldSeries_1,
newSeries: [{
dataGroupId: newDataGroupId,
data: newData,
divide: getDivideShapeFromData(newData)
}]
});
}
} else {
var oldData_1 = oldDataMapForSplit.get(transitionKey);
if (oldData_1) {
var batch = updateBatches.get(oldData_1.key);
if (!batch) {
batch = {
oldSeries: [{
dataGroupId: oldData_1.dataGroupId,
data: oldData_1.data,
divide: getDivideShapeFromData(oldData_1.data)
}],
newSeries: []
};
updateBatches.set(oldData_1.key, batch);
}
batch.newSeries.push({
dataGroupId: newDataGroupId,
data: newData,
divide: getDivideShapeFromData(newData)
});
}
}
}
}
});
return updateBatches;
}
function querySeries(series, finder) {
for (var i = 0; i < series.length; i++) {
var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id;
if (found) {
return i;
}
}
}
function transitionSeriesFromOpt(transitionOpt, globalStore, params, api) {
var from = [];
var to = [];
each$f(normalizeToArray(transitionOpt.from), function(finder) {
var idx = querySeries(globalStore.oldSeries, finder);
if (idx >= 0) {
from.push({
dataGroupId: globalStore.oldDataGroupIds[idx],
data: globalStore.oldData[idx],
// TODO can specify divideShape in transition.
divide: getDivideShapeFromData(globalStore.oldData[idx]),
groupIdDim: finder.dimension
});
}
});
each$f(normalizeToArray(transitionOpt.to), function(finder) {
var idx = querySeries(params.updatedSeries, finder);
if (idx >= 0) {
var data = params.updatedSeries[idx].getData();
to.push({
dataGroupId: globalStore.oldDataGroupIds[idx],
data,
divide: getDivideShapeFromData(data),
groupIdDim: finder.dimension
});
}
});
if (from.length > 0 && to.length > 0) {
transitionBetween(from, to, api);
}
}
function installUniversalTransition(registers) {
registers.registerUpdateLifecycle("series:beforeupdate", function(ecMOdel, api, params) {
each$f(normalizeToArray(params.seriesTransition), function(transOpt) {
each$f(normalizeToArray(transOpt.to), function(finder) {
var series = params.updatedSeries;
for (var i = 0; i < series.length; i++) {
if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) {
series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true;
}
}
});
});
});
registers.registerUpdateLifecycle("series:transition", function(ecModel, api, params) {
var globalStore = getUniversalTransitionGlobalStore(api);
if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) {
var transitionOpt = params.seriesTransition;
if (transitionOpt) {
each$f(normalizeToArray(transitionOpt), function(opt) {
transitionSeriesFromOpt(opt, globalStore, params, api);
});
} else {
var updateBatches_1 = findTransitionSeriesBatches(globalStore, params);
each$f(updateBatches_1.keys(), function(key) {
var batch = updateBatches_1.get(key);
transitionBetween(batch.oldSeries, batch.newSeries, api);
});
}
each$f(params.updatedSeries, function(series) {
if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) {
series[SERIES_UNIVERSAL_TRANSITION_PROP] = false;
}
});
}
var allSeries = ecModel.getSeries();
var savedSeries = globalStore.oldSeries = [];
var savedDataGroupIds = globalStore.oldDataGroupIds = [];
var savedData = globalStore.oldData = [];
for (var i = 0; i < allSeries.length; i++) {
var data = allSeries[i].getData();
if (data.count() < DATA_COUNT_THRESHOLD) {
savedSeries.push(allSeries[i]);
savedDataGroupIds.push(allSeries[i].get("dataGroupId"));
savedData.push(data);
}
}
});
}
use([install]);
use([install$1]);
use([install$S, install$R, install$Q, install$O, install$M, install$K, install$J, install$I, install$H, install$G, install$F, install$D, install$C, install$B, install$A, install$z, install$y, install$x, install$w, install$v, install$u, install$t]);
use(install$r);
use(install$q);
use(install$L);
use(install$p);
use(install$E);
use(install$o);
use(install$n);
use(install$l);
use(install$k);
use(install$s);
use(install$j);
use(install$i);
use(install$h);
use(install$g);
use(install$f);
use(install$e);
use(install$b);
use(install$8);
use(install$a);
use(install$9);
use(install$5);
use(install$7);
use(install$6);
use(install$4);
use(install$3);
use(install$2);
use(installUniversalTransition);
use(installLabelLayout);
export {
install$M as a,
install as b,
install$R as c,
install$S as d,
install$Q as e,
install$r as f,
install$k as g,
install$b as h,
init$1 as i,
use as u
};