{"ast":null,"code":"/*\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 * 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 { calculateTextPosition } from 'zrender/lib/contain/text.js';\nimport { isArray, isNumber } from 'zrender/lib/core/util.js';\nexport function createSectorCalculateTextPosition(positionMapping, opts) {\n opts = opts || {};\n var isRoundCap = opts.isRoundCap;\n return function (out, opts, boundingRect) {\n var textPosition = opts.position;\n\n if (!textPosition || textPosition instanceof Array) {\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n var mappedSectorPosition = positionMapping(textPosition);\n var distance = opts.distance != null ? opts.distance : 5;\n var sector = this.shape;\n var cx = sector.cx;\n var cy = sector.cy;\n var r = sector.r;\n var r0 = sector.r0;\n var middleR = (r + r0) / 2;\n var startAngle = sector.startAngle;\n var endAngle = sector.endAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0;\n var mathCos = Math.cos;\n var mathSin = Math.sin; // base position: top-left\n\n var x = cx + r * mathCos(startAngle);\n var y = cy + r * mathSin(startAngle);\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (mappedSectorPosition) {\n case 'startArc':\n x = cx + (r0 - distance) * mathCos(middleAngle);\n y = cy + (r0 - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'insideStartArc':\n x = cx + (r0 + distance) * mathCos(middleAngle);\n y = cy + (r0 + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'startAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideStartAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'middle':\n x = cx + middleR * mathCos(middleAngle);\n y = cy + middleR * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'endArc':\n x = cx + (r + distance) * mathCos(middleAngle);\n y = cy + (r + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideEndArc':\n x = cx + (r - distance) * mathCos(middleAngle);\n y = cy + (r - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'endAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideEndAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n default:\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n out = out || {};\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n return out;\n };\n}\nexport function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) {\n if (isNumber(rotateType)) {\n // user-set rotation\n sector.setTextConfig({\n rotation: rotateType\n });\n return;\n } else if (isArray(textPosition)) {\n // user-set position, use 0 as auto rotation\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var shape = sector.shape;\n var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle;\n var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var anchorAngle;\n var mappedSectorPosition = positionMapping(textPosition);\n\n switch (mappedSectorPosition) {\n case 'startArc':\n case 'insideStartArc':\n case 'middle':\n case 'insideEndArc':\n case 'endArc':\n anchorAngle = middleAngle;\n break;\n\n case 'startAngle':\n case 'insideStartAngle':\n anchorAngle = startAngle;\n break;\n\n case 'endAngle':\n case 'insideEndAngle':\n anchorAngle = endAngle;\n break;\n\n default:\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var rotate = Math.PI * 1.5 - anchorAngle;\n /**\n * TODO: labels with rotate > Math.PI / 2 should be rotate another\n * half round flipped to increase readability. However, only middle\n * position supports this for now, because in other positions, the\n * anchor point is not at the center of the text, so the positions\n * after rotating is not as expected.\n */\n\n if (mappedSectorPosition === 'middle' && rotate > Math.PI / 2 && rotate < Math.PI * 1.5) {\n rotate -= Math.PI;\n }\n\n sector.setTextConfig({\n rotation: rotate\n });\n}\n\nfunction adjustAngleDistanceX(angle, distance, isEnd) {\n return distance * Math.sin(angle) * (isEnd ? -1 : 1);\n}\n\nfunction adjustAngleDistanceY(angle, distance, isEnd) {\n return distance * Math.cos(angle) * (isEnd ? 1 : -1);\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/label/sectorLabel.js"],"names":["calculateTextPosition","isArray","isNumber","createSectorCalculateTextPosition","positionMapping","opts","isRoundCap","out","boundingRect","textPosition","position","Array","mappedSectorPosition","distance","sector","shape","cx","cy","r","r0","middleR","startAngle","endAngle","middleAngle","extraDist","Math","abs","mathCos","cos","mathSin","sin","x","y","textAlign","textVerticalAlign","adjustAngleDistanceX","adjustAngleDistanceY","align","verticalAlign","setSectorTextRotation","rotateType","setTextConfig","rotation","clockwise","anchorAngle","rotate","PI","angle","isEnd"],"mappings":"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","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*/\nimport { calculateTextPosition } from 'zrender/lib/contain/text.js';\nimport { isArray, isNumber } from 'zrender/lib/core/util.js';\nexport function createSectorCalculateTextPosition(positionMapping, opts) {\n opts = opts || {};\n var isRoundCap = opts.isRoundCap;\n return function (out, opts, boundingRect) {\n var textPosition = opts.position;\n\n if (!textPosition || textPosition instanceof Array) {\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n var mappedSectorPosition = positionMapping(textPosition);\n var distance = opts.distance != null ? opts.distance : 5;\n var sector = this.shape;\n var cx = sector.cx;\n var cy = sector.cy;\n var r = sector.r;\n var r0 = sector.r0;\n var middleR = (r + r0) / 2;\n var startAngle = sector.startAngle;\n var endAngle = sector.endAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0;\n var mathCos = Math.cos;\n var mathSin = Math.sin; // base position: top-left\n\n var x = cx + r * mathCos(startAngle);\n var y = cy + r * mathSin(startAngle);\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (mappedSectorPosition) {\n case 'startArc':\n x = cx + (r0 - distance) * mathCos(middleAngle);\n y = cy + (r0 - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'insideStartArc':\n x = cx + (r0 + distance) * mathCos(middleAngle);\n y = cy + (r0 + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'startAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideStartAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'middle':\n x = cx + middleR * mathCos(middleAngle);\n y = cy + middleR * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'endArc':\n x = cx + (r + distance) * mathCos(middleAngle);\n y = cy + (r + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideEndArc':\n x = cx + (r - distance) * mathCos(middleAngle);\n y = cy + (r - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'endAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideEndAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n default:\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n out = out || {};\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n return out;\n };\n}\nexport function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) {\n if (isNumber(rotateType)) {\n // user-set rotation\n sector.setTextConfig({\n rotation: rotateType\n });\n return;\n } else if (isArray(textPosition)) {\n // user-set position, use 0 as auto rotation\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var shape = sector.shape;\n var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle;\n var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var anchorAngle;\n var mappedSectorPosition = positionMapping(textPosition);\n\n switch (mappedSectorPosition) {\n case 'startArc':\n case 'insideStartArc':\n case 'middle':\n case 'insideEndArc':\n case 'endArc':\n anchorAngle = middleAngle;\n break;\n\n case 'startAngle':\n case 'insideStartAngle':\n anchorAngle = startAngle;\n break;\n\n case 'endAngle':\n case 'insideEndAngle':\n anchorAngle = endAngle;\n break;\n\n default:\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var rotate = Math.PI * 1.5 - anchorAngle;\n /**\n * TODO: labels with rotate > Math.PI / 2 should be rotate another\n * half round flipped to increase readability. However, only middle\n * position supports this for now, because in other positions, the\n * anchor point is not at the center of the text, so the positions\n * after rotating is not as expected.\n */\n\n if (mappedSectorPosition === 'middle' && rotate > Math.PI / 2 && rotate < Math.PI * 1.5) {\n rotate -= Math.PI;\n }\n\n sector.setTextConfig({\n rotation: rotate\n });\n}\n\nfunction adjustAngleDistanceX(angle, distance, isEnd) {\n return distance * Math.sin(angle) * (isEnd ? -1 : 1);\n}\n\nfunction adjustAngleDistanceY(angle, distance, isEnd) {\n return distance * Math.cos(angle) * (isEnd ? 1 : -1);\n}"]},"metadata":{},"sourceType":"module"}