{"version":3,"sources":["webpack:///./node_modules/echarts/lib/chart/helper/createSeriesDataSimply.js","webpack:///./node_modules/echarts/lib/chart/pie/pieLayout.js","webpack:///./node_modules/echarts/lib/processor/dataFilter.js","webpack:///./node_modules/echarts/lib/label/labelGuideHelper.js","webpack:///./node_modules/echarts/lib/chart/pie/labelLayout.js","webpack:///./node_modules/echarts/lib/chart/pie/PieView.js","webpack:///./node_modules/echarts/lib/visual/LegendVisualProvider.js","webpack:///./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack:///./node_modules/echarts/lib/processor/negativeDataFilter.js","webpack:///./node_modules/echarts/lib/chart/pie/install.js"],"names":["createSeriesDataSimply","seriesModel","opt","nameList","coordDimensions","encodeDefine","getEncode","source","getSource","dimensions","list","initData","PI2","Math","PI","RADIAN","getViewRect","api","getBoxLayoutParams","width","getWidth","height","getHeight","getBasicPieLayout","viewRect","center","get","radius","cx","cy","size","min","r0","r","coordSys","coordinateSystem","point","dataToPoint","x","y","pieLayout","seriesType","ecModel","eachSeriesByType","data","getData","valueDim","mapDimension","_a","startAngle","minAngle","validDataCount","each","value","isNaN","sum","getSum","unitRadian","clockwise","roseType","stillShowZeroSum","extent","getDataExtent","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","setLayout","idx","angle","setItemLayout","NaN","endAngle","angle_1","layout_1","getItemLayout","layout_2","dataFilter","reset","legendModels","findComponents","mainType","length","filterSelf","name","getName","i","isSelected","PathProxy","CMD","projectPointToLine","x1","y1","x2","y2","out","limitToEnds","dx","dy","dx1","dy1","lineLen","sqrt","projectedLen","t","max","ox","oy","pt0","Point","pt1","pt2","dir2","tmpArr","tmpProjPoint","limitTurnAngle","linePoints","minTurnAngle","fromArray","sub","len1","len","len2","scale","angleCos","dot","minTurnAngleCos","cos","d","scaleAndAdd","tan","copy","toArray","limitSurfaceAngle","surfaceNormal","maxSurfaceAngle","maxSurfaceAngleCos","HALF_PI","angle2","acos","newAngle","setLabelLineState","labelLine","ignore","stateName","stateModel","isNormal","stateObj","ensureState","smooth","shape","styleObj","getModel","getLineStyle","useStyle","style","buildLabelLinePath","path","points","moveTo","vector","lineTo","moveLen","midPoint0","midPoint2","midPoint1","bezierCurveTo","setLabelLineStyle","targetEl","statesModels","defaultStyle","getTextGuideLine","label","getTextContent","normalModel","normal","showNormal","labelIgnoreNormal","stateShow","isLabelIgnored","states","Polyline","setTextGuideLine","stateProxy","fill","showAbove","labelLineConfig","textGuideLineConfig","buildPath","removeTextGuideLine","getLabelLineStatesModels","itemModel","labelLineName","adjustSingleSide","viewWidth","viewHeight","viewLeft","viewTop","farthestX","position","labelAlignTo","recalculateX","recalculateXOnSemiToAlignOnEllipseCurve","semi","rB","rB2","item","abs","rA","rA2","newX","deltaX","newTargetWidth","targetTextWidth","constrainTextWidth","items","topSemi","maxY","bottomSemi","push","avoidOverlap","labelLayoutList","leftList","rightList","leftmostX","Number","MAX_VALUE","rightmostX","isPositionCenter","layout","labelStyleWidth","labelDistance","edgeDistance","bleedMargin","isAlignToEdge","padding","paddingH","extraPaddingH","backgroundColor","realTextWidth","rect","dist","availableWidth","forceRecalculate","textRect","bgColor","overflow","oldOuterWidth","oldHeight","match","setStyle","innerRect","getBoundingRect","ceil","availableInnerWidth","newWidth","unconstrainedWidth","newRect","margin","sectorShape","pieLabelLayout","hasLabelRotate","minShowLabelRadian","getLayout","setNotShow","el","isLabelShown","key","sector","getItemGraphicEl","getItemModel","labelModel","labelPosition","labelLineModel","labelLineLen","labelLineLen2","textX","textY","textAlign","midAngle","nx","ny","sin","isLabelInside","x3","y3","labelRotate","rotate","radialAngle","rad","atan2","isDown","rotation","verticalAlign","align","selectState","select","clone","applyTransform","getComputedTransform","setTextConfig","inside","notShowLabel","setShape","__hostTarget","anchor","_super","PiePiece","_this","call","this","z2","text","setTextContent","updateData","prototype","firstCreate","hostModel","emphasisModel","animationType","getShallow","ssr","scaleX","scaleY","dataIndex","isFrom","originX","originY","getItemVisual","offset","cursorStyle","attr","_updateLabel","labelText","visualColor","visualOpacity","opacity","labelFetcher","labelDataIndex","inheritColor","defaultOpacity","defaultText","getFormattedLabel","polyline","stroke","PieView","apply","arguments","ignoreLabelLineUpdate","render","payload","oldData","_data","group","count","s","_emptyCircleSector","remove","getItemStyle","add","diff","piePiece","setItemGraphicEl","update","newIdx","oldIdx","off","execute","dispose","containPoint","itemLayout","type","Chart","LegendVisualProvider","getDataWithEncodedVisual","getRawData","_getDataWithEncodedVisual","_getRawData","getAllNames","rawData","mapArray","containName","indexOfName","dataWithEncodedVisual","innerData","model","PieSeriesModel","init","option","legendVisualProvider","_defaultLabelLine","mergeOption","getInitialData","encodeDefaulter","getDataParams","dataInner","seats","valueList_1","params","percent","$vars","labelLineNormalOpt","labelLineEmphasisOpt","emphasis","show","defaultOption","z","legendHoverLink","colorBy","minShowLabelAngle","selectedOffset","percentPrecision","left","top","right","bottom","alignTo","distanceToLabelLine","length2","lineStyle","itemStyle","borderWidth","borderJoin","showEmptyCircle","emptyCircleStyle","color","labelLayout","hideOverlap","scaleSize","avoidLabelOverlap","animationDuration","animationTypeUpdate","animationEasingUpdate","animationDurationUpdate","animationEasing","Series","PieSeries","negativeDataFilter","curValue","install","registers","registerChartView","registerSeriesModel","registerAction","registerLayout","registerProcessor"],"mappings":"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","file":"js/chunk-3cc47f9a.d44061bf.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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport { extend, isArray } from 'zrender/lib/core/util.js';\n/**\r\n * [Usage]:\r\n * (1)\r\n * createListSimply(seriesModel, ['value']);\r\n * (2)\r\n * createListSimply(seriesModel, {\r\n * coordDimensions: ['value'],\r\n * dimensionsCount: 5\r\n * });\r\n */\n\nexport default function createSeriesDataSimply(seriesModel, opt, nameList) {\n opt = isArray(opt) && {\n coordDimensions: opt\n } || extend({\n encodeDefine: seriesModel.getEncode()\n }, opt);\n var source = seriesModel.getSource();\n var dimensions = prepareSeriesDataSchema(source, opt).dimensions;\n var list = new SeriesData(dimensions, seriesModel);\n list.initData(source, nameList);\n return list;\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nexport function getBasicPieLayout(seriesModel, api) {\n var viewRect = getViewRect(seriesModel, api); // center can be string or number when coordinateSystem is specified\n\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var cx;\n var cy;\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys) {\n // percentage is not allowed when coordinate system is specified\n var point = coordSys.dataToPoint(center);\n cx = point[0] || 0;\n cy = point[1] || 0;\n } else {\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n cx = parsePercent(center[0], width) + viewRect.x;\n cy = parsePercent(center[1], height) + viewRect.y;\n }\n\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r\n };\n}\nexport default function pieLayout(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n\n var _a = getBasicPieLayout(seriesModel, api),\n cx = _a.cx,\n cy = _a.cy,\n r = _a.r,\n r0 = _a.r0;\n\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var validDataCount = 0;\n data.each(valueDim, function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum(valueDim); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max]\n\n var extent = data.getDataExtent(valueDim);\n extent[0] = 0; // In the case some sector angle is smaller than minAngle\n\n var restAngle = PI2;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n var dir = clockwise ? 1 : -1;\n data.setLayout({\n viewRect: viewRect,\n r: r\n });\n data.each(valueDim, function (value, idx) {\n var angle;\n\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r\n });\n return;\n } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n\n\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = PI2 / validDataCount;\n }\n\n if (angle < minAngle) {\n angle = minAngle;\n restAngle -= minAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n\n var endAngle = currentAngle + dir * angle;\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: currentAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r\n });\n currentAngle = endAngle;\n }); // Some sector is constrained by minAngle\n // Rest sectors needs recalculate angle\n\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle\n if (restAngle <= 1e-3) {\n var angle_1 = PI2 / validDataCount;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_1 = data.getItemLayout(idx);\n layout_1.angle = angle_1;\n layout_1.startAngle = startAngle + dir * idx * angle_1;\n layout_1.endAngle = startAngle + dir * (idx + 1) * angle_1;\n }\n });\n } else {\n unitRadian = restAngle / valueSumLargerThanMinAngle;\n currentAngle = startAngle;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_2 = data.getItemLayout(idx);\n var angle = layout_2.angle === minAngle ? minAngle : value * unitRadian;\n layout_2.startAngle = currentAngle;\n layout_2.endAngle = currentAngle + dir * angle;\n currentAngle += dir * angle;\n }\n });\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nexport default function dataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n var name = data.getName(idx); // If in any legend component the status is not selected.\n\n for (var i = 0; i < legendModels.length; i++) {\n // @ts-ignore FIXME: LegendModel\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n\n return true;\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { Point, Path, Polyline } from '../util/graphic.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { normalizeRadian } from 'zrender/lib/contain/util.js';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve.js';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states.js';\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/**\r\n * Calculate min distance corresponding point.\r\n * This method won't evaluate if point is in the path.\r\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 variable 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/**\r\n * Calculate a proper guide line based on the label position and graphic element definition\r\n * @param label\r\n * @param labelRect\r\n * @param target\r\n * @param targetRect\r\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/**\r\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\r\n * @param linePoints\r\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\r\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/**\r\n * Limit the angle of line and the surface\r\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\r\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/**\r\n * Create a label line if necessary and set it's style.\r\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[stateName];\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\n// FIXME emphasis label position is not same with normal label position\nimport { parsePercent } from '../../util/number.js';\nimport { Point } from '../../util/graphic.js';\nimport { each, isNumber } from 'zrender/lib/core/util.js';\nimport { limitTurnAngle, limitSurfaceAngle } from '../../label/labelGuideHelper.js';\nimport { shiftLayoutOnY } from '../../label/labelLayoutHelper.js';\nvar RADIAN = Math.PI / 180;\n\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {\n if (list.length < 2) {\n return;\n }\n\n ;\n\n function recalculateXOnSemiToAlignOnEllipseCurve(semi) {\n var rB = semi.rB;\n var rB2 = rB * rB;\n\n for (var i = 0; i < semi.list.length; i++) {\n var item = semi.list[i];\n var dy = Math.abs(item.label.y - cy); // horizontal r is always same with original r because x is not changed.\n\n var rA = r + item.len;\n var rA2 = rA * rA; // Use ellipse implicit function to calculate x\n\n var dx = Math.sqrt((1 - Math.abs(dy * dy / rB2)) * rA2);\n var newX = cx + (dx + item.len2) * dir;\n var deltaX = newX - item.label.x;\n var newTargetWidth = item.targetTextWidth - deltaX * dir; // text x is changed, so need to recalculate width.\n\n constrainTextWidth(item, newTargetWidth, true);\n item.label.x = newX;\n }\n } // Adjust X based on the shifted y. Make tight labels aligned on an ellipse curve.\n\n\n function recalculateX(items) {\n // Extremes of\n var topSemi = {\n list: [],\n maxY: 0\n };\n var bottomSemi = {\n list: [],\n maxY: 0\n };\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].labelAlignTo !== 'none') {\n continue;\n }\n\n var item = items[i];\n var semi = item.label.y > cy ? bottomSemi : topSemi;\n var dy = Math.abs(item.label.y - cy);\n\n if (dy >= semi.maxY) {\n var dx = item.label.x - cx - item.len2 * dir; // horizontal r is always same with original r because x is not changed.\n\n var rA = r + item.len; // Canculate rB based on the topest / bottemest label.\n\n var rB = Math.abs(dx) < rA ? Math.sqrt(dy * dy / (1 - dx * dx / rA / rA)) : rA;\n semi.rB = rB;\n semi.maxY = dy;\n }\n\n semi.list.push(item);\n }\n\n recalculateXOnSemiToAlignOnEllipseCurve(topSemi);\n recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi);\n }\n\n var len = list.length;\n\n for (var i = 0; i < len; i++) {\n if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {\n var dx = list[i].label.x - farthestX;\n list[i].linePoints[1][0] += dx;\n list[i].label.x = farthestX;\n }\n }\n\n if (shiftLayoutOnY(list, viewTop, viewTop + viewHeight)) {\n recalculateX(list);\n }\n}\n\nfunction avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) {\n var leftList = [];\n var rightList = [];\n var leftmostX = Number.MAX_VALUE;\n var rightmostX = -Number.MAX_VALUE;\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var label = labelLayoutList[i].label;\n\n if (isPositionCenter(labelLayoutList[i])) {\n continue;\n }\n\n if (label.x < cx) {\n leftmostX = Math.min(leftmostX, label.x);\n leftList.push(labelLayoutList[i]);\n } else {\n rightmostX = Math.max(rightmostX, label.x);\n rightList.push(labelLayoutList[i]);\n }\n }\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n\n if (!isPositionCenter(layout) && layout.linePoints) {\n if (layout.labelStyleWidth != null) {\n continue;\n }\n\n var label = layout.label;\n var linePoints = layout.linePoints;\n var targetTextWidth = void 0;\n\n if (layout.labelAlignTo === 'edge') {\n if (label.x < cx) {\n targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.edgeDistance;\n } else {\n targetTextWidth = viewLeft + viewWidth - layout.edgeDistance - linePoints[2][0] - layout.labelDistance;\n }\n } else if (layout.labelAlignTo === 'labelLine') {\n if (label.x < cx) {\n targetTextWidth = leftmostX - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - rightmostX - layout.bleedMargin;\n }\n } else {\n if (label.x < cx) {\n targetTextWidth = label.x - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - label.x - layout.bleedMargin;\n }\n }\n\n layout.targetTextWidth = targetTextWidth;\n constrainTextWidth(layout, targetTextWidth);\n }\n }\n\n adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX);\n adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n\n if (!isPositionCenter(layout) && layout.linePoints) {\n var label = layout.label;\n var linePoints = layout.linePoints;\n var isAlignToEdge = layout.labelAlignTo === 'edge';\n var padding = label.style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0; // textRect.width already contains paddingH if bgColor is set\n\n var extraPaddingH = label.style.backgroundColor ? 0 : paddingH;\n var realTextWidth = layout.rect.width + extraPaddingH;\n var dist = linePoints[1][0] - linePoints[2][0];\n\n if (isAlignToEdge) {\n if (label.x < cx) {\n linePoints[2][0] = viewLeft + layout.edgeDistance + realTextWidth + layout.labelDistance;\n } else {\n linePoints[2][0] = viewLeft + viewWidth - layout.edgeDistance - realTextWidth - layout.labelDistance;\n }\n } else {\n if (label.x < cx) {\n linePoints[2][0] = label.x + layout.labelDistance;\n } else {\n linePoints[2][0] = label.x - layout.labelDistance;\n }\n\n linePoints[1][0] = linePoints[2][0] + dist;\n }\n\n linePoints[1][1] = linePoints[2][1] = label.y;\n }\n }\n}\n/**\r\n * Set max width of each label, and then wrap each label to the max width.\r\n *\r\n * @param layout label layout\r\n * @param availableWidth max width for the label to display\r\n * @param forceRecalculate recaculate the text layout even if the current width\r\n * is smaller than `availableWidth`. This is useful when the text was previously\r\n * wrapped by calling `constrainTextWidth` but now `availableWidth` changed, in\r\n * which case, previous wrapping should be redo.\r\n */\n\n\nfunction constrainTextWidth(layout, availableWidth, forceRecalculate) {\n if (forceRecalculate === void 0) {\n forceRecalculate = false;\n }\n\n if (layout.labelStyleWidth != null) {\n // User-defined style.width has the highest priority.\n return;\n }\n\n var label = layout.label;\n var style = label.style;\n var textRect = layout.rect;\n var bgColor = style.backgroundColor;\n var padding = style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0;\n var overflow = style.overflow; // textRect.width already contains paddingH if bgColor is set\n\n var oldOuterWidth = textRect.width + (bgColor ? 0 : paddingH);\n\n if (availableWidth < oldOuterWidth || forceRecalculate) {\n var oldHeight = textRect.height;\n\n if (overflow && overflow.match('break')) {\n // Temporarily set background to be null to calculate\n // the bounding box without background.\n label.setStyle('backgroundColor', null); // Set constraining width\n\n label.setStyle('width', availableWidth - paddingH); // This is the real bounding box of the text without padding.\n\n var innerRect = label.getBoundingRect();\n label.setStyle('width', Math.ceil(innerRect.width));\n label.setStyle('backgroundColor', bgColor);\n } else {\n var availableInnerWidth = availableWidth - paddingH;\n var newWidth = availableWidth < oldOuterWidth // Current text is too wide, use `availableWidth` as max width.\n ? availableInnerWidth : // Current available width is enough, but the text may have\n // already been wrapped with a smaller available width.\n forceRecalculate ? availableInnerWidth > layout.unconstrainedWidth // Current available is larger than text width,\n // so don't constrain width (otherwise it may have\n // empty space in the background).\n ? null // Current available is smaller than text width, so\n // use the current available width as constraining\n // width.\n : availableInnerWidth : // Current available width is enough, so no need to\n // constrain.\n null;\n label.setStyle('width', newWidth);\n }\n\n var newRect = label.getBoundingRect();\n textRect.width = newRect.width;\n var margin = (label.style.margin || 0) + 2.1;\n textRect.height = newRect.height + margin;\n textRect.y -= (textRect.height - oldHeight) / 2;\n }\n}\n\nfunction isPositionCenter(sectorShape) {\n // Not change x for center label\n return sectorShape.position === 'center';\n}\n\nexport default function pieLabelLayout(seriesModel) {\n var data = seriesModel.getData();\n var labelLayoutList = [];\n var cx;\n var cy;\n var hasLabelRotate = false;\n var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN;\n var viewRect = data.getLayout('viewRect');\n var r = data.getLayout('r');\n var viewWidth = viewRect.width;\n var viewLeft = viewRect.x;\n var viewTop = viewRect.y;\n var viewHeight = viewRect.height;\n\n function setNotShow(el) {\n el.ignore = true;\n }\n\n function isLabelShown(label) {\n if (!label.ignore) {\n return true;\n }\n\n for (var key in label.states) {\n if (label.states[key].ignore === false) {\n return true;\n }\n }\n\n return false;\n }\n\n data.each(function (idx) {\n var sector = data.getItemGraphicEl(idx);\n var sectorShape = sector.shape;\n var label = sector.getTextContent();\n var labelLine = sector.getTextGuideLine();\n var itemModel = data.getItemModel(idx);\n var labelModel = itemModel.getModel('label'); // Use position in normal or emphasis\n\n var labelPosition = labelModel.get('position') || itemModel.get(['emphasis', 'label', 'position']);\n var labelDistance = labelModel.get('distanceToLabelLine');\n var labelAlignTo = labelModel.get('alignTo');\n var edgeDistance = parsePercent(labelModel.get('edgeDistance'), viewWidth);\n var bleedMargin = labelModel.get('bleedMargin');\n var labelLineModel = itemModel.getModel('labelLine');\n var labelLineLen = labelLineModel.get('length');\n labelLineLen = parsePercent(labelLineLen, viewWidth);\n var labelLineLen2 = labelLineModel.get('length2');\n labelLineLen2 = parsePercent(labelLineLen2, viewWidth);\n\n if (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) {\n each(label.states, setNotShow);\n label.ignore = true;\n\n if (labelLine) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n }\n\n return;\n }\n\n if (!isLabelShown(label)) {\n return;\n }\n\n var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2;\n var nx = Math.cos(midAngle);\n var ny = Math.sin(midAngle);\n var textX;\n var textY;\n var linePoints;\n var textAlign;\n cx = sectorShape.cx;\n cy = sectorShape.cy;\n var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n\n if (labelPosition === 'center') {\n textX = sectorShape.cx;\n textY = sectorShape.cy;\n textAlign = 'center';\n } else {\n var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx;\n var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy;\n textX = x1 + nx * 3;\n textY = y1 + ny * 3;\n\n if (!isLabelInside) {\n // For roseType\n var x2 = x1 + nx * (labelLineLen + r - sectorShape.r);\n var y2 = y1 + ny * (labelLineLen + r - sectorShape.r);\n var x3 = x2 + (nx < 0 ? -1 : 1) * labelLineLen2;\n var y3 = y2;\n\n if (labelAlignTo === 'edge') {\n // Adjust textX because text align of edge is opposite\n textX = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance;\n } else {\n textX = x3 + (nx < 0 ? -labelDistance : labelDistance);\n }\n\n textY = y3;\n linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n }\n\n textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? nx > 0 ? 'right' : 'left' : nx > 0 ? 'left' : 'right';\n }\n\n var PI = Math.PI;\n var labelRotate = 0;\n var rotate = labelModel.get('rotate');\n\n if (isNumber(rotate)) {\n labelRotate = rotate * (PI / 180);\n } else if (labelPosition === 'center') {\n labelRotate = 0;\n } else if (rotate === 'radial' || rotate === true) {\n var radialAngle = nx < 0 ? -midAngle + PI : -midAngle;\n labelRotate = radialAngle;\n } else if (rotate === 'tangential' && labelPosition !== 'outside' && labelPosition !== 'outer') {\n var rad = Math.atan2(nx, ny);\n\n if (rad < 0) {\n rad = PI * 2 + rad;\n }\n\n var isDown = ny > 0;\n\n if (isDown) {\n rad = PI + rad;\n }\n\n labelRotate = rad - PI;\n }\n\n hasLabelRotate = !!labelRotate;\n label.x = textX;\n label.y = textY;\n label.rotation = labelRotate;\n label.setStyle({\n verticalAlign: 'middle'\n }); // Not sectorShape the inside label\n\n if (!isLabelInside) {\n var textRect = label.getBoundingRect().clone();\n textRect.applyTransform(label.getComputedTransform()); // Text has a default 1px stroke. Exclude this.\n\n var margin = (label.style.margin || 0) + 2.1;\n textRect.y -= margin / 2;\n textRect.height += margin;\n labelLayoutList.push({\n label: label,\n labelLine: labelLine,\n position: labelPosition,\n len: labelLineLen,\n len2: labelLineLen2,\n minTurnAngle: labelLineModel.get('minTurnAngle'),\n maxSurfaceAngle: labelLineModel.get('maxSurfaceAngle'),\n surfaceNormal: new Point(nx, ny),\n linePoints: linePoints,\n textAlign: textAlign,\n labelDistance: labelDistance,\n labelAlignTo: labelAlignTo,\n edgeDistance: edgeDistance,\n bleedMargin: bleedMargin,\n rect: textRect,\n unconstrainedWidth: textRect.width,\n labelStyleWidth: label.style.width\n });\n } else {\n label.setStyle({\n align: textAlign\n });\n var selectState = label.states.select;\n\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n\n sector.setTextConfig({\n inside: isLabelInside\n });\n });\n\n if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);\n }\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n var label = layout.label;\n var labelLine = layout.labelLine;\n var notShowLabel = isNaN(label.x) || isNaN(label.y);\n\n if (label) {\n label.setStyle({\n align: layout.textAlign\n });\n\n if (notShowLabel) {\n each(label.states, setNotShow);\n label.ignore = true;\n }\n\n var selectState = label.states.select;\n\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n\n if (labelLine) {\n var linePoints = layout.linePoints;\n\n if (notShowLabel || !linePoints) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n } else {\n limitTurnAngle(linePoints, layout.minTurnAngle);\n limitSurfaceAngle(linePoints, layout.surfaceNormal, layout.maxSurfaceAngle);\n labelLine.setShape({\n points: linePoints\n }); // Set the anchor to the midpoint of sector\n\n label.__hostTarget.textGuideLineConfig = {\n anchor: new Point(linePoints[0][0], linePoints[0][1])\n };\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { __extends } from \"tslib\";\nimport { extend, retrieve3 } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport labelLayout from './labelLayout.js';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getSectorCornerRadius } from '../helper/sectorHelper.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nimport { getBasicPieLayout } from './pieLayout.js';\n/**\r\n * Piece of pie including Sector, Label, LabelLine\r\n */\n\nvar PiePiece =\n/** @class */\nfunction (_super) {\n __extends(PiePiece, _super);\n\n function PiePiece(data, idx, startAngle) {\n var _this = _super.call(this) || this;\n\n _this.z2 = 2;\n var text = new graphic.Text();\n\n _this.setTextContent(text);\n\n _this.updateData(data, idx, startAngle, true);\n\n return _this;\n }\n\n PiePiece.prototype.updateData = function (data, idx, startAngle, firstCreate) {\n var sector = this;\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n var layout = data.getItemLayout(idx); // cornerRadius & innerCornerRadius doesn't exist in the item layout. Use `0` if null value is specified.\n // see `setItemLayout` in `pieLayout.ts`.\n\n var sectorShape = extend(getSectorCornerRadius(itemModel.getModel('itemStyle'), layout, true), layout); // Ignore NaN data.\n\n if (isNaN(sectorShape.startAngle)) {\n // Use NaN shape to avoid drawing shape.\n sector.setShape(sectorShape);\n return;\n }\n\n if (firstCreate) {\n sector.setShape(sectorShape);\n var animationType = seriesModel.getShallow('animationType');\n\n if (seriesModel.ecModel.ssr) {\n // Use scale animation in SSR mode(opacity?)\n // Because CSS SVG animation doesn't support very customized shape animation.\n graphic.initProps(sector, {\n scaleX: 0,\n scaleY: 0\n }, seriesModel, {\n dataIndex: idx,\n isFrom: true\n });\n sector.originX = sectorShape.cx;\n sector.originY = sectorShape.cy;\n } else if (animationType === 'scale') {\n sector.shape.r = layout.r0;\n graphic.initProps(sector, {\n shape: {\n r: layout.r\n }\n }, seriesModel, idx);\n } // Expansion\n else {\n if (startAngle != null) {\n sector.setShape({\n startAngle: startAngle,\n endAngle: startAngle\n });\n graphic.initProps(sector, {\n shape: {\n startAngle: layout.startAngle,\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n } else {\n sector.shape.endAngle = layout.startAngle;\n graphic.updateProps(sector, {\n shape: {\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n }\n }\n } else {\n saveOldStyle(sector); // Transition animation from the old shape\n\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel, idx);\n }\n\n sector.useStyle(data.getItemVisual(idx, 'style'));\n setStatesStylesFromModel(sector, itemModel);\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var offset = seriesModel.get('selectedOffset');\n var dx = Math.cos(midAngle) * offset;\n var dy = Math.sin(midAngle) * offset;\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle);\n\n this._updateLabel(seriesModel, data, idx);\n\n sector.ensureState('emphasis').shape = extend({\n r: layout.r + (emphasisModel.get('scale') ? emphasisModel.get('scaleSize') || 0 : 0)\n }, getSectorCornerRadius(emphasisModel.getModel('itemStyle'), layout));\n extend(sector.ensureState('select'), {\n x: dx,\n y: dy,\n shape: getSectorCornerRadius(itemModel.getModel(['select', 'itemStyle']), layout)\n });\n extend(sector.ensureState('blur'), {\n shape: getSectorCornerRadius(itemModel.getModel(['blur', 'itemStyle']), layout)\n });\n var labelLine = sector.getTextGuideLine();\n var labelText = sector.getTextContent();\n labelLine && extend(labelLine.ensureState('select'), {\n x: dx,\n y: dy\n }); // TODO: needs dx, dy in zrender?\n\n extend(labelText.ensureState('select'), {\n x: dx,\n y: dy\n });\n toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n\n PiePiece.prototype._updateLabel = function (seriesModel, data, idx) {\n var sector = this;\n var itemModel = data.getItemModel(idx);\n var labelLineModel = itemModel.getModel('labelLine');\n var style = data.getItemVisual(idx, 'style');\n var visualColor = style && style.fill;\n var visualOpacity = style && style.opacity;\n setLabelStyle(sector, getLabelStatesModels(itemModel), {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n defaultText: seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx)\n });\n var labelText = sector.getTextContent(); // Set textConfig on sector.\n\n sector.setTextConfig({\n // reset position, rotation\n position: null,\n rotation: null\n }); // Make sure update style on labelText after setLabelStyle.\n // Because setLabelStyle will replace a new style on it.\n\n labelText.attr({\n z2: 10\n });\n var labelPosition = seriesModel.get(['label', 'position']);\n\n if (labelPosition !== 'outside' && labelPosition !== 'outer') {\n sector.removeTextGuideLine();\n } else {\n var polyline = this.getTextGuideLine();\n\n if (!polyline) {\n polyline = new graphic.Polyline();\n this.setTextGuideLine(polyline);\n } // Default use item visual color\n\n\n setLabelLineStyle(this, getLabelLineStatesModels(itemModel), {\n stroke: visualColor,\n opacity: retrieve3(labelLineModel.get(['lineStyle', 'opacity']), visualOpacity, 1)\n });\n }\n };\n\n return PiePiece;\n}(graphic.Sector); // Pie view\n\n\nvar PieView =\n/** @class */\nfunction (_super) {\n __extends(PieView, _super);\n\n function PieView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.ignoreLabelLineUpdate = true;\n return _this;\n }\n\n PieView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var startAngle; // First render\n\n if (!oldData && data.count() > 0) {\n var shape = data.getItemLayout(0);\n\n for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) {\n shape = data.getItemLayout(s);\n }\n\n if (shape) {\n startAngle = shape.startAngle;\n }\n } // remove empty-circle if it exists\n\n\n if (this._emptyCircleSector) {\n group.remove(this._emptyCircleSector);\n } // when all data are filtered, show lightgray empty circle\n\n\n if (data.count() === 0 && seriesModel.get('showEmptyCircle')) {\n var sector = new graphic.Sector({\n shape: getBasicPieLayout(seriesModel, api)\n });\n sector.useStyle(seriesModel.getModel('emptyCircleStyle').getItemStyle());\n this._emptyCircleSector = sector;\n group.add(sector);\n }\n\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx, startAngle);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx, startAngle);\n piePiece.off('click');\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n graphic.removeElementWithFadeOut(piePiece, seriesModel, idx);\n }).execute();\n labelLayout(seriesModel); // Always use initial animation.\n\n if (seriesModel.get('animationTypeUpdate') !== 'expansion') {\n this._data = data;\n }\n };\n\n PieView.prototype.dispose = function () {};\n\n PieView.prototype.containPoint = function (point, seriesModel) {\n var data = seriesModel.getData();\n var itemLayout = data.getItemLayout(0);\n\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n };\n\n PieView.type = 'pie';\n return PieView;\n}(ChartView);\n\nexport default PieView;","\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\n\n/**\r\n * LegendVisualProvider is an bridge that pick encoded color from data and\r\n * provide to the legend component.\r\n */\nvar LegendVisualProvider =\n/** @class */\nfunction () {\n function LegendVisualProvider( // Function to get data after filtered. It stores all the encoding info\n getDataWithEncodedVisual, // Function to get raw data before filtered.\n getRawData) {\n this._getDataWithEncodedVisual = getDataWithEncodedVisual;\n this._getRawData = getRawData;\n }\n\n LegendVisualProvider.prototype.getAllNames = function () {\n var rawData = this._getRawData(); // We find the name from the raw data. In case it's filtered by the legend component.\n // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray.\n\n\n return rawData.mapArray(rawData.getName);\n };\n\n LegendVisualProvider.prototype.containName = function (name) {\n var rawData = this._getRawData();\n\n return rawData.indexOfName(name) >= 0;\n };\n\n LegendVisualProvider.prototype.indexOfName = function (name) {\n // Only get data when necessary.\n // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet.\n // Invoking Series#getData immediately will throw an error.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.indexOfName(name);\n };\n\n LegendVisualProvider.prototype.getItemVisual = function (dataIndex, key) {\n // Get encoded visual properties from final filtered data.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.getItemVisual(dataIndex, key);\n };\n\n return LegendVisualProvider;\n}();\n\nexport default LegendVisualProvider;","\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport { getPercentSeats } from '../../util/number.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\nvar innerData = modelUtil.makeInner();\n\nvar PieSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(PieSeriesModel, _super);\n\n function PieSeriesModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * @overwrite\r\n */\n\n\n PieSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n\n this._defaultLabelLine(option);\n };\n /**\r\n * @overwrite\r\n */\n\n\n PieSeriesModel.prototype.mergeOption = function () {\n _super.prototype.mergeOption.apply(this, arguments);\n };\n /**\r\n * @overwrite\r\n */\n\n\n PieSeriesModel.prototype.getInitialData = function () {\n return createSeriesDataSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n };\n /**\r\n * @overwrite\r\n */\n\n\n PieSeriesModel.prototype.getDataParams = function (dataIndex) {\n var data = this.getData(); // update seats when data is changed\n\n var dataInner = innerData(data);\n var seats = dataInner.seats;\n\n if (!seats) {\n var valueList_1 = [];\n data.each(data.mapDimension('value'), function (value) {\n valueList_1.push(value);\n });\n seats = dataInner.seats = getPercentSeats(valueList_1, data.hostModel.get('percentPrecision'));\n }\n\n var params = _super.prototype.getDataParams.call(this, dataIndex); // seats may be empty when sum is 0\n\n\n params.percent = seats[dataIndex] || 0;\n params.$vars.push('percent');\n return params;\n };\n\n PieSeriesModel.prototype._defaultLabelLine = function (option) {\n // Extend labelLine emphasis\n modelUtil.defaultEmphasis(option, 'labelLine', ['show']);\n var labelLineNormalOpt = option.labelLine;\n var labelLineEmphasisOpt = option.emphasis.labelLine; // Not show label line if `label.normal.show = false`\n\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;\n };\n\n PieSeriesModel.type = 'series.pie';\n PieSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n colorBy: 'data',\n // 默认全局居中\n center: ['50%', '50%'],\n radius: [0, '75%'],\n // 默认顺时针\n clockwise: true,\n startAngle: 90,\n // 最小角度改为0\n minAngle: 0,\n // If the angle of a sector less than `minShowLabelAngle`,\n // the label will not be displayed.\n minShowLabelAngle: 0,\n // 选中时扇区偏移量\n selectedOffset: 10,\n // 选择模式,默认关闭,可选single,multiple\n // selectedMode: false,\n // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)\n // roseType: null,\n percentPrecision: 2,\n // If still show when all data zero.\n stillShowZeroSum: true,\n // cursor: null,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: null,\n height: null,\n label: {\n // color: 'inherit',\n // If rotate around circle\n rotate: 0,\n show: true,\n overflow: 'truncate',\n // 'outer', 'inside', 'center'\n position: 'outer',\n // 'none', 'labelLine', 'edge'. Works only when position is 'outer'\n alignTo: 'none',\n // Closest distance between label and chart edge.\n // Works only position is 'outer' and alignTo is 'edge'.\n edgeDistance: '25%',\n // Works only position is 'outer' and alignTo is not 'edge'.\n bleedMargin: 10,\n // Distance between text and label line.\n distanceToLabelLine: 5 // formatter: 标签文本格式器,同 tooltip.formatter,不支持异步回调\n // 默认使用全局文本样式,详见 textStyle\n // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\n\n },\n // Enabled when label.normal.position is 'outer'\n labelLine: {\n show: true,\n // 引导线两段中的第一段长度\n length: 15,\n // 引导线两段中的第二段长度\n length2: 15,\n smooth: false,\n minTurnAngle: 90,\n maxSurfaceAngle: 90,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n },\n itemStyle: {\n borderWidth: 1,\n borderJoin: 'round'\n },\n showEmptyCircle: true,\n emptyCircleStyle: {\n color: 'lightgray',\n opacity: 1\n },\n labelLayout: {\n // Hide the overlapped label.\n hideOverlap: true\n },\n emphasis: {\n scale: true,\n scaleSize: 5\n },\n // If use strategy to avoid label overlapping\n avoidLabelOverlap: true,\n // Animation type. Valid values: expansion, scale\n animationType: 'expansion',\n animationDuration: 1000,\n // Animation type when update. Valid values: transition, expansion\n animationTypeUpdate: 'transition',\n animationEasingUpdate: 'cubicInOut',\n animationDurationUpdate: 500,\n animationEasing: 'cubicInOut'\n };\n return PieSeriesModel;\n}(SeriesModel);\n\nexport default PieSeriesModel;","\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { isNumber } from 'zrender/lib/core/util.js';\nexport default function negativeDataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n // handle negative value condition\n var valueDim = data.mapDimension('value');\n var curValue = data.get(valueDim, idx);\n\n if (isNumber(curValue) && !isNaN(curValue) && curValue < 0) {\n return false;\n }\n\n return true;\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/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\nimport { createLegacyDataSelectAction } from '../../legacy/dataSelectAction.js';\nimport pieLayout from '../pie/pieLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nimport { curry } from 'zrender/lib/core/util.js';\nimport PieView from './PieView.js';\nimport PieSeriesModel from './PieSeries.js';\nimport negativeDataFilter from '../../processor/negativeDataFilter.js';\nexport function install(registers) {\n registers.registerChartView(PieView);\n registers.registerSeriesModel(PieSeriesModel);\n createLegacyDataSelectAction('pie', registers.registerAction);\n registers.registerLayout(curry(pieLayout, 'pie'));\n registers.registerProcessor(dataFilter('pie'));\n registers.registerProcessor(negativeDataFilter('pie'));\n}"],"sourceRoot":""}