{"version":3,"sources":["webpack:///./node_modules/echarts/lib/layout/barGrid.js","webpack:///./node_modules/echarts/lib/label/labelStyle.js","webpack:///./node_modules/echarts/lib/i18n/langEN.js","webpack:///./node_modules/echarts/lib/i18n/langZH.js","webpack:///./node_modules/echarts/lib/legacy/dataSelectAction.js","webpack:///./node_modules/echarts/lib/label/labelGuideHelper.js","webpack:///./node_modules/echarts/lib/label/labelLayoutHelper.js","webpack:///./node_modules/echarts/lib/label/LabelManager.js"],"names":["STACK_PREFIX","LargeArr","Float32Array","Array","getSeriesStackId","seriesModel","get","seriesIndex","getAxisKey","axis","dim","index","prepareLayoutBarSeries","seriesType","ecModel","seriesModels","eachSeriesByType","isOnCartesian","isInLargeMode","push","makeColumnLayout","barSeries","axisMinGaps","axisValues","baseAxis","coordinateSystem","getBaseAxis","type","data","getData","key","mapDimension","i","cnt","count","value","hasOwnProperty","valuesInAxis","sort","a","b","min","j","length","delta","Math","getValueAxesMinGaps","seriesInfoList","bandWidth","axisExtent","getExtent","getBandWidth","minGap","extentSpan","abs","scale","scaleSpan","barWidth","barMaxWidth","barMinWidth","barGap","barCategoryGap","axisKey","stackId","doCalBarWidthAndOffset","columnsMap","seriesInfo","idx","columnsOnAxis","remainedWidth","autoWidthCount","categoryGap","gap","stacks","width","maxWidth","minWidth","result","coordSysName","categoryGapPercent","columnCount","max","barGapPercent","autoWidth","column","finalWidth","lastColumn","widthSum","offset","retrieveColumnLayout","barWidthAndOffset","layout","lastStackCoords","cartesian","columnLayoutInfo","columnOffset","columnWidth","valueAxis","getOtherAxis","barMinHeight","setLayout","size","valueDim","baseDim","stacked","isValueAxisH","isHorizontal","valueAxisStart","getValueAxisStart","len","baseValue","sign","baseCoord","p","n","coord","x","y","height","dataToPoint","isNaN","setItemLayout","largeLayout","plan","reset","coordLayout","master","getRect","valueAxisHorizontal","valueDimIdx","progress","params","dataIndex","largePoints","largeBackgroundPoints","largeDataIndices","valuePair","pointsOffset","idxOffset","next","backgroundStart","pipelineContext","large","toGlobalCoord","dataToCoord","EMPTY_OBJ","setLabelText","label","labelTexts","stateName","text","state","ensureState","style","oldStates","currentStates","slice","clearStates","setStyle","normal","useStates","getLabelText","opt","stateModels","interpolatedValue","baseText","labelFetcher","labelDataIndex","labelDimIndex","normalModel","getFormattedLabel","defaultText","statesText","stateModel","setLabelStyle","targetEl","labelStatesModels","stateSpecified","isSetOnText","needsCreateText","getShallow","textContent","getTextContent","setTextContent","stateProxy","labelStatesTexts","showNormal","normalStyle","createTextStyle","setTextConfig","createTextConfig","stateObj","stateShow","ignore","textConfig","silent","useStyle","dirty","enableTextSetter","labelInner","getLabelStatesModels","itemModel","labelName","statesModels","getModel","textStyleModel","specifiedTextStyle","isNotNormal","isAttached","textStyle","richResult","globalTextStyle","option","richItemNames","richItemNameMap","rich","richKeys","richKey","parentModel","getRichItemNames","name_1","richTextStyle","setTokenTextStyle","overflow","margin","setTextStyleCommon","labelPosition","labelRotate","labelDistance","labelOffset","defaultOutsidePosition","position","PI","rotation","distance","outsideFill","inheritColor","TEXT_PROPS_WITH_GLOBAL","TEXT_PROPS_SELF","TEXT_PROPS_BOX","isBlock","inRich","fillColor","strokeColor","opacity","color","textBorderColor","fill","stroke","textBorderWidth","lineWidth","textBorderType","lineDash","textBorderDashOffset","lineDashOffset","defaultOpacity","val","verticalAlign","baseline","disableBox","borderType","borderDash","backgroundColor","borderColor","getFont","gTextStyleModel","fontStyle","fontWeight","fontSize","fontFamily","join","setLabelValueAnimation","getDefaultText","obj","prevValue","normalLabelModel","valueAnimation","precision","defaultInterpolatedText","animateLabelValue","textEl","animatableModel","labelInnerStore","currValue","targetValue","percent","interpolated","labelText","time","month","monthAbbr","dayOfWeek","dayOfWeekAbbr","legend","selector","all","inverse","toolbox","brush","title","rect","polygon","lineX","lineY","keep","clear","dataView","lang","dataZoom","zoom","back","magicType","line","bar","stack","tiled","restore","saveAsImage","series","typeNames","pie","scatter","effectScatter","radar","tree","treemap","boxplot","candlestick","k","heatmap","map","parallel","lines","graph","sankey","funnel","gauge","pictorialBar","themeRiver","sunburst","aria","general","withTitle","withoutTitle","single","prefix","withName","withoutName","multiple","separator","middle","end","allData","partialData","handleSeriesLegacySelectEvents","eventPostfix","ecIns","payload","legacyEventName","isSilent","eachComponent","mainType","subType","selected","fromActionPayload","trigger","seriesId","id","name","getName","selectedMap","handleLegacySelectEvents","messageCenter","api","on","isFromClick","fromAction","PI2","CMD","PathProxy","DEFAULT_SEARCH_SPACE","getCandidateAnchor","pos","outPt","outDir","set","projectPointToArc","cx","cy","r","startAngle","endAngle","anticlockwise","out","d","sqrt","ox","oy","tmp","angle","atan2","x1","cos","y1","sin","x2","y2","d1","d2","projectPointToLine","limitToEnds","dx","dy","dx1","dy1","lineLen","t","projectPointToRect","tmpPt","nearestPointOnRect","pt","dist","nearestPointOnPath","path","xi","yi","x0","y0","minDist","Infinity","cmd","M","L","C","Q","A","rx","ry","theta","dTheta","R","Z","pt0","Point","pt1","pt2","dir","dir2","updateLabelLinePoints","target","labelLineModel","labelLine","getTextGuideLine","labelGuideConfig","textGuideLineConfig","points","searchSpace","candidates","labelRect","getBoundingRect","clone","applyTransform","getComputedTransform","anchorPoint","anchor","targetTransform","targetInversedTransform","copy","scaleAndAdd","transform","boundingRect","Path","toArray","linePoints","minTurnAngle","fromArray","sub","len1","len2","angleCos","dot","tmpArr","tmpProjPoint","tan","limitTurnAngle","setShape","setLabelLineState","isNormal","smooth","shape","styleObj","getLineStyle","buildLabelLinePath","moveTo","vector","lineTo","moveLen","midPoint0","midPoint2","midPoint1","bezierCurveTo","shiftLayout","list","xyDim","sizeDim","minBound","maxBound","balanceShift","lastPos","adjusted","shifts","totalShifts","item","shift","shiftList","maxGap","first","last","updateMinMaxGap","squeezeGaps","takeBoundsGap","squeezeWhenBailout","gapThisBound","gapOtherBound","moveDir","moveFromMaxGap","remained","start","maxSqeezePercent","gaps","totalGaps","prevItemRect","squeezePercent","moveForEachLabel","ceil","cloneArr","newPoints","prepareLayoutCallbackParams","labelItem","hostEl","dataType","hostRect","align","labelLinePoints","LABEL_OPTION_TO_STYLE_KEYS","dummyTransformable","Transformable","labelLayoutInnerStore","labelLineAnimationStore","extendWithKeys","source","keys","LABEL_LAYOUT_PROPS","LabelManager","this","_labelList","_chartViewList","prototype","clearLabels","_addLabel","layoutOption","labelStyle","__hostTarget","labelTransform","plain","BoundingRect","setLocalTransform","originX","originY","scaleX","scaleY","host","labelGuide","computedLayoutOption","priority","defaultAttr","labelGuideIgnore","cursor","attachedPos","attachedRot","addLabelsOfSeries","chartView","_this","__model","group","traverse","child","ecData","disableLabelLayout","updateLayoutConfig","getWidth","getHeight","createDragHandler","el","defaultLabelAttr","degreeToRadian","local","rotate","needsUpdateLabelLine","guideLine","draggable","hostModel","getItemModel","off","labelList","input","rawItem","localRect","isAxisAligned","minMargin","globalRect","obb","OrientedBoundingRect","axisAligned","prepareLayoutList","labelsNeedsAdjustOnX","moveOverlap","labelsNeedsAdjustOnY","topBound","bottomBound","shiftLayoutOnY","displayedLabels","hideEl","emphasisState","overlapped","existsTextCfg","intersect","attr","hideOverlap","processLabelsOverall","ignoreLabelLineUpdate","animationEnabled","isAnimationEnabled","_updateLabelLine","_animateLabels","defaultStyle","visualStyle","getItemVisual","visualType","getVisual","labelIgnoreNormal","states","Polyline","setTextGuideLine","showAbove","buildPath","removeTextGuideLine","setLabelLineStyle","labelLineName","getLabelLineStatesModels","invisible","disableLabelAnimation","oldLayout","layoutStore","newProps","prevStates","oldLayoutSelect","oldLayoutEmphasis","oldOpacity","select","layoutSelect","emphasis","layoutEmphasis","newLayout","strokePercent"],"mappings":"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","file":"vendors~app~c259bd06.js","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { parsePercent } from '../util/number';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\nvar STACK_PREFIX = '__ec_stack_';\nvar LARGE_BAR_MIN_WIDTH = 0.5;\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n return axis.dim + axis.index;\n}\n/**\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\n\n\nexport function getLayoutOnAxis(opt) {\n var params = [];\n var baseAxis = opt.axis;\n var axisKey = 'axis0';\n\n if (baseAxis.type !== 'category') {\n return;\n }\n\n var bandWidth = baseAxis.getBandWidth();\n\n for (var i = 0; i < opt.count || 0; i++) {\n params.push(zrUtil.defaults({\n bandWidth: bandWidth,\n axisKey: axisKey,\n stackId: STACK_PREFIX + i\n }, opt));\n }\n\n var widthAndOffsets = doCalBarWidthAndOffset(params);\n var result = [];\n\n for (var i = 0; i < opt.count; i++) {\n var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n item.offsetCenter = item.offset + item.width / 2;\n result.push(item);\n }\n\n return result;\n}\nexport function prepareLayoutBarSeries(seriesType, ecModel) {\n var seriesModels = [];\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for cartesian2d only\n if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {\n seriesModels.push(seriesModel);\n }\n });\n return seriesModels;\n}\n/**\n * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent\n * values.\n * This works for time axes, value axes, and log axes.\n * For a single time axis, return value is in the form like\n * {'x_0': [1000000]}.\n * The value of 1000000 is in milliseconds.\n */\n\nfunction getValueAxesMinGaps(barSeries) {\n /**\n * Map from axis.index to values.\n * For a single time axis, axisValues is in the form like\n * {'x_0': [1495555200000, 1495641600000, 1495728000000]}.\n * Items in axisValues[x], e.g. 1495555200000, are time values of all\n * series.\n */\n var axisValues = {};\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n\n if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {\n return;\n }\n\n var data = seriesModel.getData();\n var key = baseAxis.dim + '_' + baseAxis.index;\n var dim = data.mapDimension(baseAxis.dim);\n\n for (var i = 0, cnt = data.count(); i < cnt; ++i) {\n var value = data.get(dim, i);\n\n if (!axisValues[key]) {\n // No previous data for the axis\n axisValues[key] = [value];\n } else {\n // No value in previous series\n axisValues[key].push(value);\n } // Ignore duplicated time values in the same axis\n\n }\n });\n var axisMinGaps = {};\n\n for (var key in axisValues) {\n if (axisValues.hasOwnProperty(key)) {\n var valuesInAxis = axisValues[key];\n\n if (valuesInAxis) {\n // Sort axis values into ascending order to calculate gaps\n valuesInAxis.sort(function (a, b) {\n return a - b;\n });\n var min = null;\n\n for (var j = 1; j < valuesInAxis.length; ++j) {\n var delta = valuesInAxis[j] - valuesInAxis[j - 1];\n\n if (delta > 0) {\n // Ignore 0 delta because they are of the same axis value\n min = min === null ? delta : Math.min(min, delta);\n }\n } // Set to null if only have one data\n\n\n axisMinGaps[key] = min;\n }\n }\n }\n\n return axisMinGaps;\n}\n\nexport function makeColumnLayout(barSeries) {\n var axisMinGaps = getValueAxesMinGaps(barSeries);\n var seriesInfoList = [];\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else if (baseAxis.type === 'value' || baseAxis.type === 'time') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n var minGap = axisMinGaps[key];\n var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);\n var scale = baseAxis.scale.getExtent();\n var scaleSpan = Math.abs(scale[1] - scale[0]);\n bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan; // When there is only one data value\n } else {\n var data = seriesModel.getData();\n bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n }\n\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barMinWidth = parsePercent( // barMinWidth by default is 1 in cartesian. Because in value axis,\n // the auto-calculated bar width might be less than 1.\n seriesModel.get('barMinWidth') || 1, bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n seriesInfoList.push({\n bandWidth: bandWidth,\n barWidth: barWidth,\n barMaxWidth: barMaxWidth,\n barMinWidth: barMinWidth,\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n axisKey: getAxisKey(baseAxis),\n stackId: getSeriesStackId(seriesModel)\n });\n });\n return doCalBarWidthAndOffset(seriesInfoList);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n // Columns info on each category axis. Key is cartesian name\n var columnsMap = {};\n zrUtil.each(seriesInfoList, function (seriesInfo, idx) {\n var axisKey = seriesInfo.axisKey;\n var bandWidth = seriesInfo.bandWidth;\n var columnsOnAxis = columnsMap[axisKey] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: null,\n gap: '20%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[axisKey] = columnsOnAxis;\n var stackId = seriesInfo.stackId;\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n }; // Caution: In a single coordinate system, these barGrid attributes\n // will be shared by series. Consider that they have default values,\n // only the attributes set on the last series will work.\n // Do not change this fact unless there will be a break change.\n\n var barWidth = seriesInfo.barWidth;\n\n if (barWidth && !stacks[stackId].width) {\n // See #6312, do not restrict width.\n stacks[stackId].width = barWidth;\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n var barMaxWidth = seriesInfo.barMaxWidth;\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n var barMinWidth = seriesInfo.barMinWidth;\n barMinWidth && (stacks[stackId].minWidth = barMinWidth);\n var barGap = seriesInfo.barGap;\n barGap != null && (columnsOnAxis.gap = barGap);\n var barCategoryGap = seriesInfo.barCategoryGap;\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGapPercent = columnsOnAxis.categoryGap;\n\n if (categoryGapPercent == null) {\n var columnCount = zrUtil.keys(stacks).length; // More columns in one group\n // the spaces between group is smaller. Or the column will be too thin.\n\n categoryGapPercent = Math.max(35 - columnCount * 4, 15) + '%';\n }\n\n var categoryGap = parsePercent(categoryGapPercent, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column) {\n var maxWidth = column.maxWidth;\n var minWidth = column.minWidth;\n\n if (!column.width) {\n var finalWidth = autoWidth;\n\n if (maxWidth && maxWidth < finalWidth) {\n finalWidth = Math.min(maxWidth, remainedWidth);\n } // `minWidth` has higher priority. `minWidth` decide that wheter the\n // bar is able to be visible. So `minWidth` should not be restricted\n // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In\n // the extreme cases for `value` axis, bars are allowed to overlap\n // with each other if `minWidth` specified.\n\n\n if (minWidth && minWidth > finalWidth) {\n finalWidth = minWidth;\n }\n\n if (finalWidth !== autoWidth) {\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n } else {\n // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as\n // CSS does. Becuase barWidth can be a percent value, where\n // `barMaxWidth` can be used to restrict the final width.\n var finalWidth = column.width;\n\n if (maxWidth) {\n finalWidth = Math.min(finalWidth, maxWidth);\n } // `minWidth` has higher priority, as described above\n\n\n if (minWidth) {\n finalWidth = Math.max(finalWidth, minWidth);\n }\n\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n\n var offset = -widthSum / 2;\n zrUtil.each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n bandWidth: bandWidth,\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n\nfunction retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n if (barWidthAndOffset && axis) {\n var result = barWidthAndOffset[getAxisKey(axis)];\n\n if (result != null && seriesModel != null) {\n return result[getSeriesStackId(seriesModel)];\n }\n\n return result;\n }\n}\n\nexport { retrieveColumnLayout };\nexport function layout(seriesType, ecModel) {\n var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n var barWidthAndOffset = makeColumnLayout(seriesModels);\n var lastStackCoords = {};\n zrUtil.each(seriesModels, function (seriesModel) {\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n data.setLayout({\n bandWidth: columnLayoutInfo.bandWidth,\n offset: columnOffset,\n size: columnWidth\n });\n var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var stacked = isDimensionStacked(data, valueDim\n /*, baseDim*/\n );\n var isValueAxisH = valueAxis.isHorizontal();\n var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked);\n\n for (var idx = 0, len = data.count(); idx < len; idx++) {\n var value = data.get(valueDim, idx);\n var baseValue = data.get(baseDim, idx);\n var sign = value >= 0 ? 'p' : 'n';\n var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n\n if (stacked) {\n // Only ordinal axis can be stacked.\n if (!lastStackCoords[stackId][baseValue]) {\n lastStackCoords[stackId][baseValue] = {\n p: valueAxisStart,\n n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\n baseCoord = lastStackCoords[stackId][baseValue][sign];\n }\n\n var x = void 0;\n var y = void 0;\n var width = void 0;\n var height = void 0;\n\n if (isValueAxisH) {\n var coord = cartesian.dataToPoint([value, baseValue]);\n x = baseCoord;\n y = coord[1] + columnOffset;\n width = coord[0] - valueAxisStart;\n height = columnWidth;\n\n if (Math.abs(width) < barMinHeight) {\n width = (width < 0 ? -1 : 1) * barMinHeight;\n } // Ignore stack from NaN value\n\n\n if (!isNaN(width)) {\n stacked && (lastStackCoords[stackId][baseValue][sign] += width);\n }\n } else {\n var coord = cartesian.dataToPoint([baseValue, value]);\n x = coord[0] + columnOffset;\n y = baseCoord;\n width = columnWidth;\n height = coord[1] - valueAxisStart;\n\n if (Math.abs(height) < barMinHeight) {\n // Include zero to has a positive bar\n height = (height <= 0 ? -1 : 1) * barMinHeight;\n } // Ignore stack from NaN value\n\n\n if (!isNaN(height)) {\n stacked && (lastStackCoords[stackId][baseValue][sign] += height);\n }\n }\n\n data.setItemLayout(idx, {\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n });\n} // TODO: Do not support stack in large mode yet.\n\nexport var largeLayout = {\n seriesType: 'bar',\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var coordLayout = cartesian.master.getRect();\n var baseAxis = cartesian.getBaseAxis();\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var valueAxisHorizontal = valueAxis.isHorizontal();\n var valueDimIdx = valueAxisHorizontal ? 0 : 1;\n var barWidth = retrieveColumnLayout(makeColumnLayout([seriesModel]), baseAxis, seriesModel).width;\n\n if (!(barWidth > LARGE_BAR_MIN_WIDTH)) {\n // jshint ignore:line\n barWidth = LARGE_BAR_MIN_WIDTH;\n }\n\n return {\n progress: function (params, data) {\n var count = params.count;\n var largePoints = new LargeArr(count * 2);\n var largeBackgroundPoints = new LargeArr(count * 2);\n var largeDataIndices = new LargeArr(count);\n var dataIndex;\n var coord = [];\n var valuePair = [];\n var pointsOffset = 0;\n var idxOffset = 0;\n\n while ((dataIndex = params.next()) != null) {\n valuePair[valueDimIdx] = data.get(valueDim, dataIndex);\n valuePair[1 - valueDimIdx] = data.get(baseDim, dataIndex);\n coord = cartesian.dataToPoint(valuePair, null, coord); // Data index might not be in order, depends on `progressiveChunkMode`.\n\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coordLayout.x + coordLayout.width : coord[0];\n largePoints[pointsOffset++] = coord[0];\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coord[1] : coordLayout.y + coordLayout.height;\n largePoints[pointsOffset++] = coord[1];\n largeDataIndices[idxOffset++] = dataIndex;\n }\n\n data.setLayout({\n largePoints: largePoints,\n largeDataIndices: largeDataIndices,\n largeBackgroundPoints: largeBackgroundPoints,\n barWidth: barWidth,\n valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),\n backgroundStart: valueAxisHorizontal ? coordLayout.x : coordLayout.y,\n valueAxisHorizontal: valueAxisHorizontal\n });\n }\n };\n }\n};\n\nfunction isOnCartesian(seriesModel) {\n return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n}\n\nfunction isInLargeMode(seriesModel) {\n return seriesModel.pipelineContext && seriesModel.pipelineContext.large;\n} // See cases in `test/bar-start.html` and `#7412`, `#8747`.\n\n\nfunction getValueAxisStart(baseAxis, valueAxis, stacked) {\n return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport ZRText from 'zrender/lib/graphic/Text';\nimport { isFunction, retrieve2, extend, keys, trim } from 'zrender/lib/core/util';\nimport { SPECIAL_STATES, DISPLAY_STATES } from '../util/states';\nimport { deprecateReplaceLog } from '../util/log';\nimport { makeInner, interpolateRawValues } from '../util/model';\nimport { initProps, updateProps } from '../util/graphic';\nimport { getECData } from '../util/innerStore';\nvar EMPTY_OBJ = {};\nexport function setLabelText(label, labelTexts) {\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var text = labelTexts[stateName];\n var state = label.ensureState(stateName);\n state.style = state.style || {};\n state.style.text = text;\n }\n\n var oldStates = label.currentStates.slice();\n label.clearStates(true);\n label.setStyle({\n text: labelTexts.normal\n });\n label.useStates(oldStates, true);\n}\n\nfunction getLabelText(opt, stateModels, interpolatedValue) {\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex;\n var normalModel = stateModels.normal;\n var baseText;\n\n if (labelFetcher) {\n baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, normalModel && normalModel.get('formatter'), interpolatedValue != null ? {\n interpolatedValue: interpolatedValue\n } : null);\n }\n\n if (baseText == null) {\n baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt, interpolatedValue) : opt.defaultText;\n }\n\n var statesText = {\n normal: baseText\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = stateModels[stateName];\n statesText[stateName] = retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, stateName, null, labelDimIndex, stateModel && stateModel.get('formatter')) : null, baseText);\n }\n\n return statesText;\n}\n\nfunction setLabelStyle(targetEl, labelStatesModels, opt, stateSpecified // TODO specified position?\n) {\n opt = opt || EMPTY_OBJ;\n var isSetOnText = targetEl instanceof ZRText;\n var needsCreateText = false;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateModel = labelStatesModels[DISPLAY_STATES[i]];\n\n if (stateModel && stateModel.getShallow('show')) {\n needsCreateText = true;\n break;\n }\n }\n\n var textContent = isSetOnText ? targetEl : targetEl.getTextContent();\n\n if (needsCreateText) {\n if (!isSetOnText) {\n // Reuse the previous\n if (!textContent) {\n textContent = new ZRText();\n targetEl.setTextContent(textContent);\n } // Use same state proxy\n\n\n if (targetEl.stateProxy) {\n textContent.stateProxy = targetEl.stateProxy;\n }\n }\n\n var labelStatesTexts = getLabelText(opt, labelStatesModels);\n var normalModel = labelStatesModels.normal;\n var showNormal = !!normalModel.getShallow('show');\n var normalStyle = createTextStyle(normalModel, stateSpecified && stateSpecified.normal, opt, false, !isSetOnText);\n normalStyle.text = labelStatesTexts.normal;\n\n if (!isSetOnText) {\n // Always create new\n targetEl.setTextConfig(createTextConfig(normalModel, opt, false));\n }\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = labelStatesModels[stateName];\n\n if (stateModel) {\n var stateObj = textContent.ensureState(stateName);\n var stateShow = !!retrieve2(stateModel.getShallow('show'), showNormal);\n\n if (stateShow !== showNormal) {\n stateObj.ignore = !stateShow;\n }\n\n stateObj.style = createTextStyle(stateModel, stateSpecified && stateSpecified[stateName], opt, true, !isSetOnText);\n stateObj.style.text = labelStatesTexts[stateName];\n\n if (!isSetOnText) {\n var targetElEmphasisState = targetEl.ensureState(stateName);\n targetElEmphasisState.textConfig = createTextConfig(stateModel, opt, true);\n }\n }\n } // PENDING: if there is many requirements that emphasis position\n // need to be different from normal position, we might consider\n // auto slient is those cases.\n\n\n textContent.silent = !!normalModel.getShallow('silent'); // Keep x and y\n\n if (textContent.style.x != null) {\n normalStyle.x = textContent.style.x;\n }\n\n if (textContent.style.y != null) {\n normalStyle.y = textContent.style.y;\n }\n\n textContent.ignore = !showNormal; // Always create new style.\n\n textContent.useStyle(normalStyle);\n textContent.dirty();\n\n if (opt.enableTextSetter) {\n labelInner(textContent).setLabelText = function (interpolatedValue) {\n var labelStatesTexts = getLabelText(opt, labelStatesModels, interpolatedValue);\n setLabelText(textContent, labelStatesTexts);\n };\n }\n } else if (textContent) {\n // Not display rich text.\n textContent.ignore = true;\n }\n\n targetEl.dirty();\n}\n\nexport { setLabelStyle };\nexport function getLabelStatesModels(itemModel, labelName) {\n labelName = labelName || 'label';\n var statesModels = {\n normal: itemModel.getModel(labelName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelName]);\n }\n\n return statesModels;\n}\n/**\n * Set basic textStyle properties.\n */\n\nexport function createTextStyle(textStyleModel, specifiedTextStyle, // Fixed style in the code. Can't be set by model.\nopt, isNotNormal, isAttached // If text is attached on an element. If so, auto color will handling in zrender.\n) {\n var textStyle = {};\n setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached);\n specifiedTextStyle && extend(textStyle, specifiedTextStyle); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n return textStyle;\n}\nexport function createTextConfig(textStyleModel, opt, isNotNormal) {\n opt = opt || {};\n var textConfig = {};\n var labelPosition;\n var labelRotate = textStyleModel.getShallow('rotate');\n var labelDistance = retrieve2(textStyleModel.getShallow('distance'), isNotNormal ? null : 5);\n var labelOffset = textStyleModel.getShallow('offset');\n labelPosition = textStyleModel.getShallow('position') || (isNotNormal ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n\n labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top');\n\n if (labelPosition != null) {\n textConfig.position = labelPosition;\n }\n\n if (labelOffset != null) {\n textConfig.offset = labelOffset;\n }\n\n if (labelRotate != null) {\n labelRotate *= Math.PI / 180;\n textConfig.rotation = labelRotate;\n }\n\n if (labelDistance != null) {\n textConfig.distance = labelDistance;\n } // fill and auto is determined by the color of path fill if it's not specified by developers.\n\n\n textConfig.outsideFill = textStyleModel.get('color') === 'inherit' ? opt.inheritColor || null : 'auto';\n return textConfig;\n}\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n */\n\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached) {\n // Consider there will be abnormal when merge hover style to normal style if given default value.\n opt = opt || EMPTY_OBJ;\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle; // Consider case:\n // {\n // data: [{\n // value: 12,\n // label: {\n // rich: {\n // // no 'a' here but using parent 'a'.\n // }\n // }\n // }],\n // rich: {\n // a: { ... }\n // }\n // }\n\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n\n if (richItemNames) {\n richResult = {};\n\n for (var name_1 in richItemNames) {\n if (richItemNames.hasOwnProperty(name_1)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name_1]); // In rich, never `disableBox`.\n // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n // the default color `'blue'` will not be adopted if no color declared in `rich`.\n // That might confuses users. So probably we should put `textStyleModel` as the\n // root ancestor of the `richTextStyle`. But that would be a break change.\n\n setTokenTextStyle(richResult[name_1] = {}, richTextStyle, globalTextStyle, opt, isNotNormal, isAttached, false, true);\n }\n }\n }\n\n if (richResult) {\n textStyle.rich = richResult;\n }\n\n var overflow = textStyleModel.get('overflow');\n\n if (overflow) {\n textStyle.overflow = overflow;\n }\n\n var margin = textStyleModel.get('minMargin');\n\n if (margin != null) {\n textStyle.margin = margin;\n }\n\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, true, false);\n} // Consider case:\n// {\n// data: [{\n// value: 12,\n// label: {\n// rich: {\n// // no 'a' here but using parent 'a'.\n// }\n// }\n// }],\n// rich: {\n// a: { ... }\n// }\n// }\n// TODO TextStyleModel\n\n\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n var richKeys = keys(rich);\n\n for (var i = 0; i < richKeys.length; i++) {\n var richKey = richKeys[i];\n richItemNameMap[richKey] = 1;\n }\n }\n\n textStyleModel = textStyleModel.parentModel;\n }\n\n return richItemNameMap;\n}\n\nvar TEXT_PROPS_WITH_GLOBAL = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY'];\nvar TEXT_PROPS_SELF = ['align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign'];\nvar TEXT_PROPS_BOX = ['padding', 'borderWidth', 'borderRadius', 'borderDashOffset', 'backgroundColor', 'borderColor', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, isBlock, inRich) {\n // In merge mode, default value should not be given.\n globalTextStyle = !isNotNormal && globalTextStyle || EMPTY_OBJ;\n var inheritColor = opt && opt.inheritColor;\n var fillColor = textStyleModel.getShallow('color');\n var strokeColor = textStyleModel.getShallow('textBorderColor');\n var opacity = retrieve2(textStyleModel.getShallow('opacity'), globalTextStyle.opacity);\n\n if (fillColor === 'inherit' || fillColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (fillColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n\n if (inheritColor) {\n fillColor = inheritColor;\n } else {\n fillColor = null;\n }\n }\n\n if (strokeColor === 'inherit' || strokeColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (strokeColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n\n if (inheritColor) {\n strokeColor = inheritColor;\n } else {\n strokeColor = null;\n }\n }\n\n if (!isAttached) {\n // Only use default global textStyle.color if text is individual.\n // Otherwise it will use the strategy of attached text color because text may be on a path.\n fillColor = fillColor || globalTextStyle.color;\n strokeColor = strokeColor || globalTextStyle.textBorderColor;\n }\n\n if (fillColor != null) {\n textStyle.fill = fillColor;\n }\n\n if (strokeColor != null) {\n textStyle.stroke = strokeColor;\n }\n\n var textBorderWidth = retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n\n if (textBorderWidth != null) {\n textStyle.lineWidth = textBorderWidth;\n }\n\n var textBorderType = retrieve2(textStyleModel.getShallow('textBorderType'), globalTextStyle.textBorderType);\n\n if (textBorderType != null) {\n textStyle.lineDash = textBorderType;\n }\n\n var textBorderDashOffset = retrieve2(textStyleModel.getShallow('textBorderDashOffset'), globalTextStyle.textBorderDashOffset);\n\n if (textBorderDashOffset != null) {\n textStyle.lineDashOffset = textBorderDashOffset;\n }\n\n if (!isNotNormal && opacity == null && !inRich) {\n opacity = opt && opt.defaultOpacity;\n }\n\n if (opacity != null) {\n textStyle.opacity = opacity;\n } // TODO\n\n\n if (!isNotNormal && !isAttached) {\n // Set default finally.\n if (textStyle.fill == null && opt.inheritColor) {\n textStyle.fill = opt.inheritColor;\n }\n } // Do not use `getFont` here, because merge should be supported, where\n // part of these properties may be changed in emphasis style, and the\n // others should remain their original value got from normal style.\n\n\n for (var i = 0; i < TEXT_PROPS_WITH_GLOBAL.length; i++) {\n var key = TEXT_PROPS_WITH_GLOBAL[i];\n var val = retrieve2(textStyleModel.getShallow(key), globalTextStyle[key]);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n for (var i = 0; i < TEXT_PROPS_SELF.length; i++) {\n var key = TEXT_PROPS_SELF[i];\n var val = textStyleModel.getShallow(key);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n if (textStyle.verticalAlign == null) {\n var baseline = textStyleModel.getShallow('baseline');\n\n if (baseline != null) {\n textStyle.verticalAlign = baseline;\n }\n }\n\n if (!isBlock || !opt.disableBox) {\n for (var i = 0; i < TEXT_PROPS_BOX.length; i++) {\n var key = TEXT_PROPS_BOX[i];\n var val = textStyleModel.getShallow(key);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n var borderType = textStyleModel.getShallow('borderType');\n\n if (borderType != null) {\n textStyle.borderDash = borderType;\n }\n\n if ((textStyle.backgroundColor === 'auto' || textStyle.backgroundColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.backgroundColor === 'auto') {\n deprecateReplaceLog('backgroundColor: \\'auto\\'', 'backgroundColor: \\'inherit\\'');\n }\n }\n\n textStyle.backgroundColor = inheritColor;\n }\n\n if ((textStyle.borderColor === 'auto' || textStyle.borderColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.borderColor === 'auto') {\n deprecateReplaceLog('borderColor: \\'auto\\'', 'borderColor: \\'inherit\\'');\n }\n }\n\n textStyle.borderColor = inheritColor;\n }\n }\n}\n\nexport function getFont(opt, ecModel) {\n var gTextStyleModel = ecModel && ecModel.getModel('textStyle');\n return trim([// FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));\n}\nexport var labelInner = makeInner();\nexport function setLabelValueAnimation(label, labelStatesModels, value, getDefaultText) {\n if (!label) {\n return;\n }\n\n var obj = labelInner(label);\n obj.prevValue = obj.value;\n obj.value = value;\n var normalLabelModel = labelStatesModels.normal;\n obj.valueAnimation = normalLabelModel.get('valueAnimation');\n\n if (obj.valueAnimation) {\n obj.precision = normalLabelModel.get('precision');\n obj.defaultInterpolatedText = getDefaultText;\n obj.statesModels = labelStatesModels;\n }\n}\nexport function animateLabelValue(textEl, dataIndex, data, animatableModel, labelFetcher) {\n var labelInnerStore = labelInner(textEl);\n\n if (!labelInnerStore.valueAnimation) {\n return;\n }\n\n var defaultInterpolatedText = labelInnerStore.defaultInterpolatedText; // Consider the case that being animating, do not use the `obj.value`,\n // Otherwise it will jump to the `obj.value` when this new animation started.\n\n var currValue = retrieve2(labelInnerStore.interpolatedValue, labelInnerStore.prevValue);\n var targetValue = labelInnerStore.value;\n\n function during(percent) {\n var interpolated = interpolateRawValues(data, labelInnerStore.precision, currValue, targetValue, percent);\n labelInnerStore.interpolatedValue = percent === 1 ? null : interpolated;\n var labelText = getLabelText({\n labelDataIndex: dataIndex,\n labelFetcher: labelFetcher,\n defaultText: defaultInterpolatedText ? defaultInterpolatedText(interpolated) : interpolated + ''\n }, labelInnerStore.statesModels, interpolated);\n setLabelText(textEl, labelText);\n }\n\n (currValue == null ? initProps : updateProps)(textEl, {}, animatableModel, dataIndex, null, during);\n}\nexport function enableLayoutLayoutFeatures(el, dataIndex, dataType) {\n getECData(el).dataIndex = dataIndex;\n getECData(el).dataType = dataType;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Language: English.\n */\nexport default {\n time: {\n month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n dayOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayOfWeekAbbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n },\n legend: {\n selector: {\n all: 'All',\n inverse: 'Inv'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: 'Box Select',\n polygon: 'Lasso Select',\n lineX: 'Horizontally Select',\n lineY: 'Vertically Select',\n keep: 'Keep Selections',\n clear: 'Clear Selections'\n }\n },\n dataView: {\n title: 'Data View',\n lang: ['Data View', 'Close', 'Refresh']\n },\n dataZoom: {\n title: {\n zoom: 'Zoom',\n back: 'Zoom Reset'\n }\n },\n magicType: {\n title: {\n line: 'Switch to Line Chart',\n bar: 'Switch to Bar Chart',\n stack: 'Stack',\n tiled: 'Tile'\n }\n },\n restore: {\n title: 'Restore'\n },\n saveAsImage: {\n title: 'Save as Image',\n lang: ['Right Click to Save Image']\n }\n },\n series: {\n typeNames: {\n pie: 'Pie chart',\n bar: 'Bar chart',\n line: 'Line chart',\n scatter: 'Scatter plot',\n effectScatter: 'Ripple scatter plot',\n radar: 'Radar chart',\n tree: 'Tree',\n treemap: 'Treemap',\n boxplot: 'Boxplot',\n candlestick: 'Candlestick',\n k: 'K line chart',\n heatmap: 'Heat map',\n map: 'Map',\n parallel: 'Parallel coordinate map',\n lines: 'Line graph',\n graph: 'Relationship graph',\n sankey: 'Sankey diagram',\n funnel: 'Funnel chart',\n gauge: 'Guage',\n pictorialBar: 'Pictorial bar',\n themeRiver: 'Theme River Map',\n sunburst: 'Sunburst'\n }\n },\n aria: {\n general: {\n withTitle: 'This is a chart about \"{title}\"',\n withoutTitle: 'This is a chart'\n },\n series: {\n single: {\n prefix: '',\n withName: ' with type {seriesType} named {seriesName}.',\n withoutName: ' with type {seriesType}.'\n },\n multiple: {\n prefix: '. It consists of {seriesCount} series count.',\n withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',\n withoutName: ' The {seriesId} series is a {seriesType}.',\n separator: {\n middle: '',\n end: ''\n }\n }\n },\n data: {\n allData: 'The data is as follows: ',\n partialData: 'The first {displayCnt} items are: ',\n withName: 'the data for {name} is {value}',\n withoutName: '{value}',\n separator: {\n middle: ', ',\n end: '. '\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nexport default {\n time: {\n month: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n monthAbbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n dayOfWeek: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n dayOfWeekAbbr: ['日', '一', '二', '三', '四', '五', '六']\n },\n legend: {\n selector: {\n all: '全选',\n inverse: '反选'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: '矩形选择',\n polygon: '圈选',\n lineX: '横向选择',\n lineY: '纵向选择',\n keep: '保持选择',\n clear: '清除选择'\n }\n },\n dataView: {\n title: '数据视图',\n lang: ['数据视图', '关闭', '刷新']\n },\n dataZoom: {\n title: {\n zoom: '区域缩放',\n back: '区域缩放还原'\n }\n },\n magicType: {\n title: {\n line: '切换为折线图',\n bar: '切换为柱状图',\n stack: '切换为堆叠',\n tiled: '切换为平铺'\n }\n },\n restore: {\n title: '还原'\n },\n saveAsImage: {\n title: '保存为图片',\n lang: ['右键另存为图片']\n }\n },\n series: {\n typeNames: {\n pie: '饼图',\n bar: '柱状图',\n line: '折线图',\n scatter: '散点图',\n effectScatter: '涟漪散点图',\n radar: '雷达图',\n tree: '树图',\n treemap: '矩形树图',\n boxplot: '箱型图',\n candlestick: 'K线图',\n k: 'K线图',\n heatmap: '热力图',\n map: '地图',\n parallel: '平行坐标图',\n lines: '线图',\n graph: '关系图',\n sankey: '桑基图',\n funnel: '漏斗图',\n gauge: '仪表盘图',\n pictorialBar: '象形柱图',\n themeRiver: '主题河流图',\n sunburst: '旭日图'\n }\n },\n aria: {\n general: {\n withTitle: '这是一个关于“{title}”的图表。',\n withoutTitle: '这是一个图表,'\n },\n series: {\n single: {\n prefix: '',\n withName: '图表类型是{seriesType},表示{seriesName}。',\n withoutName: '图表类型是{seriesType}。'\n },\n multiple: {\n prefix: '它由{seriesCount}个图表系列组成。',\n withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',\n withoutName: '第{seriesId}个系列是一个{seriesType},',\n separator: {\n middle: ';',\n end: '。'\n }\n }\n },\n data: {\n allData: '其数据是——',\n partialData: '其中,前{displayCnt}项是——',\n withName: '{name}的数据是{value}',\n withoutName: '{value}',\n separator: {\n middle: ',',\n end: ''\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend, each, isArray } from 'zrender/lib/core/util';\nimport { deprecateReplaceLog, deprecateLog } from '../util/log';\nimport { queryDataIndex } from '../util/model'; // Legacy data selection action.\n// Inlucdes: pieSelect, pieUnSelect, pieToggleSelect, mapSelect, mapUnSelect, mapToggleSelect\n\nexport function createLegacyDataSelectAction(seriesType, ecRegisterAction) {\n function getSeriesIndices(ecModel, payload) {\n var seriesIndices = [];\n ecModel.eachComponent({\n mainType: 'series',\n subType: seriesType,\n query: payload\n }, function (seriesModel) {\n seriesIndices.push(seriesModel.seriesIndex);\n });\n return seriesIndices;\n }\n\n each([[seriesType + 'ToggleSelect', 'toggleSelect'], [seriesType + 'Select', 'select'], [seriesType + 'UnSelect', 'unselect']], function (eventsMap) {\n ecRegisterAction(eventsMap[0], function (payload, ecModel, api) {\n payload = extend({}, payload);\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(payload.type, eventsMap[1]);\n }\n\n api.dispatchAction(extend(payload, {\n type: eventsMap[1],\n seriesIndex: getSeriesIndices(ecModel, payload)\n }));\n });\n });\n}\n\nfunction handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) {\n var legacyEventName = type + eventPostfix;\n\n if (!ecIns.isSilent(legacyEventName)) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog(\"event \" + legacyEventName + \" is deprecated.\");\n }\n\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'pie'\n }, function (seriesModel) {\n var seriesIndex = seriesModel.seriesIndex;\n var selected = payload.selected;\n\n for (var i = 0; i < selected.length; i++) {\n if (selected[i].seriesIndex === seriesIndex) {\n var data = seriesModel.getData();\n var dataIndex = queryDataIndex(data, payload.fromActionPayload);\n ecIns.trigger(legacyEventName, {\n type: legacyEventName,\n seriesId: seriesModel.id,\n name: isArray(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex),\n selected: extend({}, seriesModel.option.selectedMap)\n });\n }\n }\n });\n }\n}\n\nexport function handleLegacySelectEvents(messageCenter, ecIns, api) {\n messageCenter.on('selectchanged', function (params) {\n var ecModel = api.getModel();\n\n if (params.isFromClick) {\n handleSeriesLegacySelectEvents('map', 'selectchanged', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selectchanged', ecIns, ecModel, params);\n } else if (params.fromAction === 'select') {\n handleSeriesLegacySelectEvents('map', 'selected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selected', ecIns, ecModel, params);\n } else if (params.fromAction === 'unselect') {\n handleSeriesLegacySelectEvents('map', 'unselected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'unselected', ecIns, ecModel, params);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic';\nimport PathProxy from 'zrender/lib/core/PathProxy';\nimport { normalizeRadian } from 'zrender/lib/contain/util';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util';\nimport { invert } from 'zrender/lib/core/matrix';\nimport * as vector from 'zrender/lib/core/vector';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\n\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\n\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d; // Intersect point.\n\n var ox = x * r + cx;\n var oy = y * r + cy;\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\n\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen; // dot product\n\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nvar tmpPt = [];\n\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\n\n\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n var d = minDist;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n\n return minDist;\n} // Temporal varible for intermediate usage.\n\n\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\n\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent(); // Needs to create text guide in each charts.\n\n if (!(label && labelLine)) {\n return;\n }\n\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space.\n\n pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created.\n\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path\n\n if (dist < minDist) {\n minDist = dist; // Transform back to global space.\n\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n} // Temporal variable for the limitTurnAngle function\n\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\n\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n\n minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point\n\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\n\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display.\n\n stateObj.ignore = ignore; // Set smooth\n\n var smooth = stateModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n\n stateObj.shape = stateObj.shape || {};\n\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\n\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n\n if (!points) {\n return;\n }\n\n path.moveTo(points[0][0], points[0][1]);\n\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\n\n\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n\n return;\n }\n\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states.normal;\n\n if (stateObj) {\n stateObj.ignore = true;\n }\n\n continue;\n } // Create labelLine if not exists\n\n\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n } // Use same state proxy.\n\n\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n\n if (labelLine) {\n defaults(labelLine.style, defaultStyle); // Not fill.\n\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false; // Custom the buildPath.\n\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n\n return statesModels;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { BoundingRect, OrientedBoundingRect } from '../util/graphic';\nexport function prepareLayoutList(input) {\n var list = [];\n\n for (var i = 0; i < input.length; i++) {\n var rawItem = input[i];\n\n if (rawItem.defaultAttr.ignore) {\n continue;\n }\n\n var label = rawItem.label;\n var transform = label.getComputedTransform(); // NOTE: Get bounding rect after getComputedTransform, or label may not been updated by the host el.\n\n var localRect = label.getBoundingRect();\n var isAxisAligned = !transform || transform[1] < 1e-5 && transform[2] < 1e-5;\n var minMargin = label.style.margin || 0;\n var globalRect = localRect.clone();\n globalRect.applyTransform(transform);\n globalRect.x -= minMargin / 2;\n globalRect.y -= minMargin / 2;\n globalRect.width += minMargin;\n globalRect.height += minMargin;\n var obb = isAxisAligned ? new OrientedBoundingRect(localRect, transform) : null;\n list.push({\n label: label,\n labelLine: rawItem.labelLine,\n rect: globalRect,\n localRect: localRect,\n obb: obb,\n priority: rawItem.priority,\n defaultAttr: rawItem.defaultAttr,\n layoutOption: rawItem.computedLayoutOption,\n axisAligned: isAxisAligned,\n transform: transform\n });\n }\n\n return list;\n}\n\nfunction shiftLayout(list, xyDim, sizeDim, minBound, maxBound, balanceShift) {\n var len = list.length;\n\n if (len < 2) {\n return;\n }\n\n list.sort(function (a, b) {\n return a.rect[xyDim] - b.rect[xyDim];\n });\n var lastPos = 0;\n var delta;\n var adjusted = false;\n var shifts = [];\n var totalShifts = 0;\n\n for (var i = 0; i < len; i++) {\n var item = list[i];\n var rect = item.rect;\n delta = rect[xyDim] - lastPos;\n\n if (delta < 0) {\n // shiftForward(i, len, -delta);\n rect[xyDim] -= delta;\n item.label[xyDim] -= delta;\n adjusted = true;\n }\n\n var shift = Math.max(-delta, 0);\n shifts.push(shift);\n totalShifts += shift;\n lastPos = rect[xyDim] + rect[sizeDim];\n }\n\n if (totalShifts > 0 && balanceShift) {\n // Shift back to make the distribution more equally.\n shiftList(-totalShifts / len, 0, len);\n } // TODO bleedMargin?\n\n\n var first = list[0];\n var last = list[len - 1];\n var minGap;\n var maxGap;\n updateMinMaxGap(); // If ends exceed two bounds, squeeze at most 80%, then take the gap of two bounds.\n\n minGap < 0 && squeezeGaps(-minGap, 0.8);\n maxGap < 0 && squeezeGaps(maxGap, 0.8);\n updateMinMaxGap();\n takeBoundsGap(minGap, maxGap, 1);\n takeBoundsGap(maxGap, minGap, -1); // Handle bailout when there is not enough space.\n\n updateMinMaxGap();\n\n if (minGap < 0) {\n squeezeWhenBailout(-minGap);\n }\n\n if (maxGap < 0) {\n squeezeWhenBailout(maxGap);\n }\n\n function updateMinMaxGap() {\n minGap = first.rect[xyDim] - minBound;\n maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim];\n }\n\n function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) {\n if (gapThisBound < 0) {\n // Move from other gap if can.\n var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound);\n\n if (moveFromMaxGap > 0) {\n shiftList(moveFromMaxGap * moveDir, 0, len);\n var remained = moveFromMaxGap + gapThisBound;\n\n if (remained < 0) {\n squeezeGaps(-remained * moveDir, 1);\n }\n } else {\n squeezeGaps(-gapThisBound * moveDir, 1);\n }\n }\n }\n\n function shiftList(delta, start, end) {\n if (delta !== 0) {\n adjusted = true;\n }\n\n for (var i = start; i < end; i++) {\n var item = list[i];\n var rect = item.rect;\n rect[xyDim] += delta;\n item.label[xyDim] += delta;\n }\n } // Squeeze gaps if the labels exceed margin.\n\n\n function squeezeGaps(delta, maxSqeezePercent) {\n var gaps = [];\n var totalGaps = 0;\n\n for (var i = 1; i < len; i++) {\n var prevItemRect = list[i - 1].rect;\n var gap = Math.max(list[i].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0);\n gaps.push(gap);\n totalGaps += gap;\n }\n\n if (!totalGaps) {\n return;\n }\n\n var squeezePercent = Math.min(Math.abs(delta) / totalGaps, maxSqeezePercent);\n\n if (delta > 0) {\n for (var i = 0; i < len - 1; i++) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i] * squeezePercent; // Forward\n\n shiftList(movement, 0, i + 1);\n }\n } else {\n // Backward\n for (var i = len - 1; i > 0; i--) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i - 1] * squeezePercent;\n shiftList(-movement, i, len);\n }\n }\n }\n /**\n * Squeeze to allow overlap if there is no more space available.\n * Let other overlapping strategy like hideOverlap do the job instead of keep exceeding the bounds.\n */\n\n\n function squeezeWhenBailout(delta) {\n var dir = delta < 0 ? -1 : 1;\n delta = Math.abs(delta);\n var moveForEachLabel = Math.ceil(delta / (len - 1));\n\n for (var i = 0; i < len - 1; i++) {\n if (dir > 0) {\n // Forward\n shiftList(moveForEachLabel, 0, i + 1);\n } else {\n // Backward\n shiftList(-moveForEachLabel, len - i - 1, len);\n }\n\n delta -= moveForEachLabel;\n\n if (delta <= 0) {\n return;\n }\n }\n }\n\n return adjusted;\n}\n/**\n * Adjust labels on x direction to avoid overlap.\n */\n\n\nexport function shiftLayoutOnX(list, leftBound, rightBound, // If average the shifts on all labels and add them to 0\n// TODO: Not sure if should enable it.\n// Pros: The angle of lines will distribute more equally\n// Cons: In some layout. It may not what user wanted. like in pie. the label of last sector is usually changed unexpectedly.\nbalanceShift) {\n return shiftLayout(list, 'x', 'width', leftBound, rightBound, balanceShift);\n}\n/**\n * Adjust labels on y direction to avoid overlap.\n */\n\nexport function shiftLayoutOnY(list, topBound, bottomBound, // If average the shifts on all labels and add them to 0\nbalanceShift) {\n return shiftLayout(list, 'y', 'height', topBound, bottomBound, balanceShift);\n}\nexport function hideOverlap(labelList) {\n var displayedLabels = []; // TODO, render overflow visible first, put in the displayedLabels.\n\n labelList.sort(function (a, b) {\n return b.priority - a.priority;\n });\n var globalRect = new BoundingRect(0, 0, 0, 0);\n\n function hideEl(el) {\n if (!el.ignore) {\n // Show on emphasis.\n var emphasisState = el.ensureState('emphasis');\n\n if (emphasisState.ignore == null) {\n emphasisState.ignore = false;\n }\n }\n\n el.ignore = true;\n }\n\n for (var i = 0; i < labelList.length; i++) {\n var labelItem = labelList[i];\n var isAxisAligned = labelItem.axisAligned;\n var localRect = labelItem.localRect;\n var transform = labelItem.transform;\n var label = labelItem.label;\n var labelLine = labelItem.labelLine;\n globalRect.copy(labelItem.rect); // Add a threshold because layout may be aligned precisely.\n\n globalRect.width -= 0.1;\n globalRect.height -= 0.1;\n globalRect.x += 0.05;\n globalRect.y += 0.05;\n var obb = labelItem.obb;\n var overlapped = false;\n\n for (var j = 0; j < displayedLabels.length; j++) {\n var existsTextCfg = displayedLabels[j]; // Fast rejection.\n\n if (!globalRect.intersect(existsTextCfg.rect)) {\n continue;\n }\n\n if (isAxisAligned && existsTextCfg.axisAligned) {\n // Is overlapped\n overlapped = true;\n break;\n }\n\n if (!existsTextCfg.obb) {\n // If self is not axis aligned. But other is.\n existsTextCfg.obb = new OrientedBoundingRect(existsTextCfg.localRect, existsTextCfg.transform);\n }\n\n if (!obb) {\n // If self is axis aligned. But other is not.\n obb = new OrientedBoundingRect(localRect, transform);\n }\n\n if (obb.intersect(existsTextCfg.obb)) {\n overlapped = true;\n break;\n }\n } // TODO Callback to determine if this overlap should be handled?\n\n\n if (overlapped) {\n hideEl(label);\n labelLine && hideEl(labelLine);\n } else {\n label.attr('ignore', labelItem.defaultAttr.ignore);\n labelLine && labelLine.attr('ignore', labelItem.defaultAttr.labelGuideIgnore);\n displayedLabels.push(labelItem);\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO: move labels out of viewport.\nimport { BoundingRect, updateProps, initProps, isElementRemoved } from '../util/graphic';\nimport { getECData } from '../util/innerStore';\nimport { parsePercent } from '../util/number';\nimport Transformable from 'zrender/lib/core/Transformable';\nimport { updateLabelLinePoints, setLabelLineStyle, getLabelLineStatesModels } from './labelGuideHelper';\nimport { makeInner } from '../util/model';\nimport { retrieve2, each, keys, isFunction, filter, indexOf } from 'zrender/lib/core/util';\nimport { prepareLayoutList, hideOverlap, shiftLayoutOnX, shiftLayoutOnY } from './labelLayoutHelper';\nimport { labelInner, animateLabelValue } from './labelStyle';\n\nfunction cloneArr(points) {\n if (points) {\n var newPoints = [];\n\n for (var i = 0; i < points.length; i++) {\n newPoints.push(points[i].slice());\n }\n\n return newPoints;\n }\n}\n\nfunction prepareLayoutCallbackParams(labelItem, hostEl) {\n var label = labelItem.label;\n var labelLine = hostEl && hostEl.getTextGuideLine();\n return {\n dataIndex: labelItem.dataIndex,\n dataType: labelItem.dataType,\n seriesIndex: labelItem.seriesModel.seriesIndex,\n text: labelItem.label.style.text,\n rect: labelItem.hostRect,\n labelRect: labelItem.rect,\n // x: labelAttr.x,\n // y: labelAttr.y,\n align: label.style.align,\n verticalAlign: label.style.verticalAlign,\n labelLinePoints: cloneArr(labelLine && labelLine.shape.points)\n };\n}\n\nvar LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize'];\nvar dummyTransformable = new Transformable();\nvar labelLayoutInnerStore = makeInner();\nvar labelLineAnimationStore = makeInner();\n\nfunction extendWithKeys(target, source, keys) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (source[key] != null) {\n target[key] = source[key];\n }\n }\n}\n\nvar LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation'];\n\nvar LabelManager =\n/** @class */\nfunction () {\n function LabelManager() {\n this._labelList = [];\n this._chartViewList = [];\n }\n\n LabelManager.prototype.clearLabels = function () {\n this._labelList = [];\n this._chartViewList = [];\n };\n /**\n * Add label to manager\n */\n\n\n LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) {\n var labelStyle = label.style;\n var hostEl = label.__hostTarget;\n var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state.\n\n var labelTransform = label.getComputedTransform();\n var labelRect = label.getBoundingRect().plain();\n BoundingRect.applyTransform(labelRect, labelRect, labelTransform);\n\n if (labelTransform) {\n dummyTransformable.setLocalTransform(labelTransform);\n } else {\n // Identity transform.\n dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;\n dummyTransformable.scaleX = dummyTransformable.scaleY = 1;\n }\n\n var host = label.__hostTarget;\n var hostRect;\n\n if (host) {\n hostRect = host.getBoundingRect().plain();\n var transform = host.getComputedTransform();\n BoundingRect.applyTransform(hostRect, hostRect, transform);\n }\n\n var labelGuide = hostRect && host.getTextGuideLine();\n\n this._labelList.push({\n label: label,\n labelLine: labelGuide,\n seriesModel: seriesModel,\n dataIndex: dataIndex,\n dataType: dataType,\n layoutOption: layoutOption,\n computedLayoutOption: null,\n rect: labelRect,\n hostRect: hostRect,\n // Label with lower priority will be hidden when overlapped\n // Use rect size as default priority\n priority: hostRect ? hostRect.width * hostRect.height : 0,\n // Save default label attributes.\n // For restore if developers want get back to default value in callback.\n defaultAttr: {\n ignore: label.ignore,\n labelGuideIgnore: labelGuide && labelGuide.ignore,\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY,\n rotation: dummyTransformable.rotation,\n style: {\n x: labelStyle.x,\n y: labelStyle.y,\n align: labelStyle.align,\n verticalAlign: labelStyle.verticalAlign,\n width: labelStyle.width,\n height: labelStyle.height,\n fontSize: labelStyle.fontSize\n },\n cursor: label.cursor,\n attachedPos: textConfig.position,\n attachedRot: textConfig.rotation\n }\n });\n };\n\n LabelManager.prototype.addLabelsOfSeries = function (chartView) {\n var _this = this;\n\n this._chartViewList.push(chartView);\n\n var seriesModel = chartView.__model;\n var layoutOption = seriesModel.get('labelLayout');\n /**\n * Ignore layouting if it's not specified anything.\n */\n\n if (!(isFunction(layoutOption) || keys(layoutOption).length)) {\n return;\n }\n\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n } // Only support label being hosted on graphic elements.\n\n\n var textEl = child.getTextContent();\n var ecData = getECData(child); // Can only attach the text on the element with dataIndex\n\n if (textEl && !textEl.disableLabelLayout) {\n _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);\n }\n });\n };\n\n LabelManager.prototype.updateLayoutConfig = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n\n function createDragHandler(el, labelLineModel) {\n return function () {\n updateLabelLinePoints(el, labelLineModel);\n };\n }\n\n for (var i = 0; i < this._labelList.length; i++) {\n var labelItem = this._labelList[i];\n var label = labelItem.label;\n var hostEl = label.__hostTarget;\n var defaultLabelAttr = labelItem.defaultAttr;\n var layoutOption = void 0; // TODO A global layout option?\n\n if (typeof labelItem.layoutOption === 'function') {\n layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));\n } else {\n layoutOption = labelItem.layoutOption;\n }\n\n layoutOption = layoutOption || {};\n labelItem.computedLayoutOption = layoutOption;\n var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists.\n // Or label should not have parent because the x, y is all in global space.\n\n if (hostEl) {\n hostEl.setTextConfig({\n // Force to set local false.\n local: false,\n // Ignore position and rotation config on the host el if x or y is changed.\n position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,\n // Ignore rotation config on the host el if rotation is changed.\n rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,\n offset: [layoutOption.dx || 0, layoutOption.dy || 0]\n });\n }\n\n var needsUpdateLabelLine = false;\n\n if (layoutOption.x != null) {\n // TODO width of chart view.\n label.x = parsePercent(layoutOption.x, width);\n label.setStyle('x', 0); // Ignore movement in style. TODO: origin.\n\n needsUpdateLabelLine = true;\n } else {\n label.x = defaultLabelAttr.x;\n label.setStyle('x', defaultLabelAttr.style.x);\n }\n\n if (layoutOption.y != null) {\n // TODO height of chart view.\n label.y = parsePercent(layoutOption.y, height);\n label.setStyle('y', 0); // Ignore movement in style.\n\n needsUpdateLabelLine = true;\n } else {\n label.y = defaultLabelAttr.y;\n label.setStyle('y', defaultLabelAttr.style.y);\n }\n\n if (layoutOption.labelLinePoints) {\n var guideLine = hostEl.getTextGuideLine();\n\n if (guideLine) {\n guideLine.setShape({\n points: layoutOption.labelLinePoints\n }); // Not update\n\n needsUpdateLabelLine = false;\n }\n }\n\n var labelLayoutStore = labelLayoutInnerStore(label);\n labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;\n label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;\n label.scaleX = defaultLabelAttr.scaleX;\n label.scaleY = defaultLabelAttr.scaleY;\n\n for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {\n var key = LABEL_OPTION_TO_STYLE_KEYS[k];\n label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);\n }\n\n if (layoutOption.draggable) {\n label.draggable = true;\n label.cursor = 'move';\n\n if (hostEl) {\n var hostModel = labelItem.seriesModel;\n\n if (labelItem.dataIndex != null) {\n var data = labelItem.seriesModel.getData(labelItem.dataType);\n hostModel = data.getItemModel(labelItem.dataIndex);\n }\n\n label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine')));\n }\n } else {\n // TODO Other drag functions?\n label.off('drag');\n label.cursor = defaultLabelAttr.cursor;\n }\n }\n };\n\n LabelManager.prototype.layout = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var labelList = prepareLayoutList(this._labelList);\n var labelsNeedsAdjustOnX = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftX';\n });\n var labelsNeedsAdjustOnY = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftY';\n });\n shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);\n shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);\n var labelsNeedsHideOverlap = filter(labelList, function (item) {\n return item.layoutOption.hideOverlap;\n });\n hideOverlap(labelsNeedsHideOverlap);\n };\n /**\n * Process all labels. Not only labels with layoutOption.\n */\n\n\n LabelManager.prototype.processLabelsOverall = function () {\n var _this = this;\n\n each(this._chartViewList, function (chartView) {\n var seriesModel = chartView.__model;\n var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;\n var animationEnabled = seriesModel.isAnimationEnabled();\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n }\n\n var needsUpdateLabelLine = !ignoreLabelLineUpdate;\n var label = child.getTextContent();\n\n if (!needsUpdateLabelLine && label) {\n needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;\n }\n\n if (needsUpdateLabelLine) {\n _this._updateLabelLine(child, seriesModel);\n }\n\n if (animationEnabled) {\n _this._animateLabels(child, seriesModel);\n }\n });\n });\n };\n\n LabelManager.prototype._updateLabelLine = function (el, seriesModel) {\n // Only support label being hosted on graphic elements.\n var textEl = el.getTextContent(); // Update label line style.\n\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data.\n\n if (textEl && dataIndex != null) {\n var data = seriesModel.getData(ecData.dataType);\n var itemModel = data.getItemModel(dataIndex);\n var defaultStyle = {};\n var visualStyle = data.getItemVisual(dataIndex, 'style');\n var visualType = data.getVisual('drawType'); // Default to be same with main color\n\n defaultStyle.stroke = visualStyle[visualType];\n var labelLineModel = itemModel.getModel('labelLine');\n setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);\n updateLabelLinePoints(el, labelLineModel);\n }\n };\n\n LabelManager.prototype._animateLabels = function (el, seriesModel) {\n var textEl = el.getTextContent();\n var guideLine = el.getTextGuideLine(); // Animate\n\n if (textEl && !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el)) {\n var layoutStore = labelLayoutInnerStore(textEl);\n var oldLayout = layoutStore.oldLayout;\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n var newProps = {\n x: textEl.x,\n y: textEl.y,\n rotation: textEl.rotation\n };\n var data = seriesModel.getData(ecData.dataType);\n\n if (!oldLayout) {\n textEl.attr(newProps); // Disable fade in animation if value animation is enabled.\n\n if (!labelInner(textEl).valueAnimation) {\n var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation\n\n textEl.style.opacity = 0;\n initProps(textEl, {\n style: {\n opacity: oldOpacity\n }\n }, seriesModel, dataIndex);\n }\n } else {\n textEl.attr(oldLayout); // Make sure the animation from is in the right status.\n\n var prevStates = el.prevStates;\n\n if (prevStates) {\n if (indexOf(prevStates, 'select') >= 0) {\n textEl.attr(layoutStore.oldLayoutSelect);\n }\n\n if (indexOf(prevStates, 'emphasis') >= 0) {\n textEl.attr(layoutStore.oldLayoutEmphasis);\n }\n }\n\n updateProps(textEl, newProps, seriesModel, dataIndex);\n }\n\n layoutStore.oldLayout = newProps;\n\n if (textEl.states.select) {\n var layoutSelect = layoutStore.oldLayoutSelect = {};\n extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);\n }\n\n if (textEl.states.emphasis) {\n var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};\n extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);\n }\n\n animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);\n }\n\n if (guideLine && !guideLine.ignore && !guideLine.invisible) {\n var layoutStore = labelLineAnimationStore(guideLine);\n var oldLayout = layoutStore.oldLayout;\n var newLayout = {\n points: guideLine.shape.points\n };\n\n if (!oldLayout) {\n guideLine.setShape(newLayout);\n guideLine.style.strokePercent = 0;\n initProps(guideLine, {\n style: {\n strokePercent: 1\n }\n }, seriesModel);\n } else {\n guideLine.attr({\n shape: oldLayout\n });\n updateProps(guideLine, {\n shape: newLayout\n }, seriesModel);\n }\n\n layoutStore.oldLayout = newLayout;\n }\n };\n\n return LabelManager;\n}();\n\nexport default LabelManager;"],"sourceRoot":""}