{"version":3,"file":"js/chunk-vendors-06b9cdb9.b55dc7a1.js","mappings":"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","sources":["webpack://i4proportal/./node_modules/echarts/lib/chart/line.js","webpack://i4proportal/./node_modules/echarts/lib/chart/line/LineSeries.js","webpack://i4proportal/./node_modules/echarts/lib/chart/line/LineView.js","webpack://i4proportal/./node_modules/echarts/lib/chart/line/helper.js","webpack://i4proportal/./node_modules/echarts/lib/chart/line/lineAnimationDiff.js","webpack://i4proportal/./node_modules/echarts/lib/chart/line/poly.js","webpack://i4proportal/./node_modules/echarts/lib/chart/lines.js","webpack://i4proportal/./node_modules/echarts/lib/chart/lines/LinesSeries.js","webpack://i4proportal/./node_modules/echarts/lib/chart/lines/LinesView.js","webpack://i4proportal/./node_modules/echarts/lib/chart/lines/linesLayout.js","webpack://i4proportal/./node_modules/echarts/lib/chart/lines/linesVisual.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/MapSeries.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/MapView.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/backwardCompat.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/mapDataStatistic.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/mapSymbolLayout.js","webpack://i4proportal/./node_modules/echarts/lib/chart/map/mapVisual.js","webpack://i4proportal/./node_modules/echarts/lib/chart/parallel.js","webpack://i4proportal/./node_modules/echarts/lib/chart/parallel/ParallelSeries.js","webpack://i4proportal/./node_modules/echarts/lib/chart/parallel/ParallelView.js","webpack://i4proportal/./node_modules/echarts/lib/chart/parallel/parallelVisual.js","webpack://i4proportal/./node_modules/echarts/lib/chart/pictorialBar.js","webpack://i4proportal/./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack://i4proportal/./node_modules/echarts/lib/chart/pie/PieView.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\nvar echarts = require(\"../echarts\");\n\nrequire(\"./line/LineSeries\");\n\nrequire(\"./line/LineView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\nvar dataSample = require(\"../processor/dataSample\");\n\nrequire(\"../component/gridSimple\");\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// In case developer forget to include grid component\necharts.registerVisual(visualSymbol('line', 'circle', 'line'));\necharts.registerLayout(layoutPoints('line')); // Down sample after filter\n\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, dataSample('line'));","\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\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*/\nvar _default = SeriesModel.extend({\n  type: 'series.line',\n  dependencies: ['grid', 'polar'],\n  getInitialData: function (option, ecModel) {\n    return createListFromArray(this.getSource(), this, {\n      useEncodeDefaulter: true\n    });\n  },\n  defaultOption: {\n    zlevel: 0,\n    z: 2,\n    coordinateSystem: 'cartesian2d',\n    legendHoverLink: true,\n    hoverAnimation: true,\n    // stack: null\n    // xAxisIndex: 0,\n    // yAxisIndex: 0,\n    // polarIndex: 0,\n    // If clip the overflow value\n    clip: true,\n    // cursor: null,\n    label: {\n      position: 'top'\n    },\n    // itemStyle: {\n    // },\n    lineStyle: {\n      width: 2,\n      type: 'solid'\n    },\n    // areaStyle: {\n    // origin of areaStyle. Valid values:\n    // `'auto'/null/undefined`: from axisLine to data\n    // `'start'`: from min to data\n    // `'end'`: from data to max\n    // origin: 'auto'\n    // },\n    // false, 'start', 'end', 'middle'\n    step: false,\n    // Disabled if step is true\n    smooth: false,\n    smoothMonotone: null,\n    symbol: 'emptyCircle',\n    symbolSize: 4,\n    symbolRotate: null,\n    showSymbol: true,\n    // `false`: follow the label interval strategy.\n    // `true`: show all symbols.\n    // `'auto'`: If possible, show all symbols, otherwise\n    //           follow the label interval strategy.\n    showAllSymbol: 'auto',\n    // Whether to connect break point.\n    connectNulls: false,\n    // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'.\n    sampling: 'none',\n    animationEasing: 'linear',\n    // Disable progressive\n    progressive: 0,\n    hoverLayerThreshold: Infinity\n  }\n});\n\nmodule.exports = _default;","\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _bbox = require(\"zrender/lib/core/bbox\");\n\nvar fromPoints = _bbox.fromPoints;\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar SymbolClz = require(\"../helper/Symbol\");\n\nvar lineAnimationDiff = require(\"./lineAnimationDiff\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _poly = require(\"./poly\");\n\nvar Polyline = _poly.Polyline;\nvar Polygon = _poly.Polygon;\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar _helper = require(\"./helper\");\n\nvar prepareDataCoordInfo = _helper.prepareDataCoordInfo;\nvar getStackedOnPoint = _helper.getStackedOnPoint;\n\nvar _createClipPathFromCoordSys = require(\"../helper/createClipPathFromCoordSys\");\n\nvar createGridClipPath = _createClipPathFromCoordSys.createGridClipPath;\nvar createPolarClipPath = _createClipPathFromCoordSys.createPolarClipPath;\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// FIXME step not support polar\nfunction isPointsSame(points1, points2) {\n  if (points1.length !== points2.length) {\n    return;\n  }\n\n  for (var i = 0; i < points1.length; i++) {\n    var p1 = points1[i];\n    var p2 = points2[i];\n\n    if (p1[0] !== p2[0] || p1[1] !== p2[1]) {\n      return;\n    }\n  }\n\n  return true;\n}\n\nfunction getBoundingDiff(points1, points2) {\n  var min1 = [];\n  var max1 = [];\n  var min2 = [];\n  var max2 = [];\n  fromPoints(points1, min1, max1);\n  fromPoints(points2, min2, max2); // Get a max value from each corner of two boundings.\n\n  return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));\n}\n\nfunction getSmooth(smooth) {\n  return typeof smooth === 'number' ? smooth : smooth ? 0.5 : 0;\n}\n/**\n * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys\n * @param {module:echarts/data/List} data\n * @param {Object} dataCoordInfo\n * @param {Array.<Array.<number>>} points\n */\n\n\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n  if (!dataCoordInfo.valueDim) {\n    return [];\n  }\n\n  var points = [];\n\n  for (var idx = 0, len = data.count(); idx < len; idx++) {\n    points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx));\n  }\n\n  return points;\n}\n\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt) {\n  var baseAxis = coordSys.getBaseAxis();\n  var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n  var stepPoints = [];\n\n  for (var i = 0; i < points.length - 1; i++) {\n    var nextPt = points[i + 1];\n    var pt = points[i];\n    stepPoints.push(pt);\n    var stepPt = [];\n\n    switch (stepTurnAt) {\n      case 'end':\n        stepPt[baseIndex] = nextPt[baseIndex];\n        stepPt[1 - baseIndex] = pt[1 - baseIndex]; // default is start\n\n        stepPoints.push(stepPt);\n        break;\n\n      case 'middle':\n        // default is start\n        var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n        var stepPt2 = [];\n        stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n        stepPt[1 - baseIndex] = pt[1 - baseIndex];\n        stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n        stepPoints.push(stepPt);\n        stepPoints.push(stepPt2);\n        break;\n\n      default:\n        stepPt[baseIndex] = pt[baseIndex];\n        stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; // default is start\n\n        stepPoints.push(stepPt);\n    }\n  } // Last points\n\n\n  points[i] && stepPoints.push(points[i]);\n  return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n  var visualMetaList = data.getVisual('visualMeta');\n\n  if (!visualMetaList || !visualMetaList.length || !data.count()) {\n    // When data.count() is 0, gradient range can not be calculated.\n    return;\n  }\n\n  if (coordSys.type !== 'cartesian2d') {\n    return;\n  }\n\n  var coordDim;\n  var visualMeta;\n\n  for (var i = visualMetaList.length - 1; i >= 0; i--) {\n    var dimIndex = visualMetaList[i].dimension;\n    var dimName = data.dimensions[dimIndex];\n    var dimInfo = data.getDimensionInfo(dimName);\n    coordDim = dimInfo && dimInfo.coordDim; // Can only be x or y\n\n    if (coordDim === 'x' || coordDim === 'y') {\n      visualMeta = visualMetaList[i];\n      break;\n    }\n  }\n\n  if (!visualMeta) {\n    return;\n  } // If the area to be rendered is bigger than area defined by LinearGradient,\n  // the canvas spec prescribes that the color of the first stop and the last\n  // stop should be used. But if two stops are added at offset 0, in effect\n  // browsers use the color of the second stop to render area outside\n  // LinearGradient. So we can only infinitesimally extend area defined in\n  // LinearGradient to render `outerColors`.\n\n\n  var axis = coordSys.getAxis(coordDim); // dataToCoor mapping may not be linear, but must be monotonic.\n\n  var colorStops = zrUtil.map(visualMeta.stops, function (stop) {\n    return {\n      coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),\n      color: stop.color\n    };\n  });\n  var stopLen = colorStops.length;\n  var outerColors = visualMeta.outerColors.slice();\n\n  if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n    colorStops.reverse();\n    outerColors.reverse();\n  }\n\n  var tinyExtent = 10; // Arbitrary value: 10px\n\n  var minCoord = colorStops[0].coord - tinyExtent;\n  var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;\n  var coordSpan = maxCoord - minCoord;\n\n  if (coordSpan < 1e-3) {\n    return 'transparent';\n  }\n\n  zrUtil.each(colorStops, function (stop) {\n    stop.offset = (stop.coord - minCoord) / coordSpan;\n  });\n  colorStops.push({\n    offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,\n    color: outerColors[1] || 'transparent'\n  });\n  colorStops.unshift({\n    // notice colorStops.length have been changed.\n    offset: stopLen ? colorStops[0].offset : 0.5,\n    color: outerColors[0] || 'transparent'\n  }); // zrUtil.each(colorStops, function (colorStop) {\n  //     // Make sure each offset has rounded px to avoid not sharp edge\n  //     colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);\n  // });\n\n  var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);\n  gradient[coordDim] = minCoord;\n  gradient[coordDim + '2'] = maxCoord;\n  return gradient;\n}\n\nfunction getIsIgnoreFunc(seriesModel, data, coordSys) {\n  var showAllSymbol = seriesModel.get('showAllSymbol');\n  var isAuto = showAllSymbol === 'auto';\n\n  if (showAllSymbol && !isAuto) {\n    return;\n  }\n\n  var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\n  if (!categoryAxis) {\n    return;\n  } // Note that category label interval strategy might bring some weird effect\n  // in some scenario: users may wonder why some of the symbols are not\n  // displayed. So we show all symbols as possible as we can.\n\n\n  if (isAuto // Simplify the logic, do not determine label overlap here.\n  && canShowAllSymbolForCategory(categoryAxis, data)) {\n    return;\n  } // Otherwise follow the label interval strategy on category axis.\n\n\n  var categoryDataDim = data.mapDimension(categoryAxis.dim);\n  var labelMap = {};\n  zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {\n    labelMap[labelItem.tickValue] = 1;\n  });\n  return function (dataIndex) {\n    return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));\n  };\n}\n\nfunction canShowAllSymbolForCategory(categoryAxis, data) {\n  // In mose cases, line is monotonous on category axis, and the label size\n  // is close with each other. So we check the symbol size and some of the\n  // label size alone with the category axis to estimate whether all symbol\n  // can be shown without overlap.\n  var axisExtent = categoryAxis.getExtent();\n  var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();\n  isNaN(availSize) && (availSize = 0); // 0/0 is NaN.\n  // Sampling some points, max 5.\n\n  var dataLen = data.count();\n  var step = Math.max(1, Math.round(dataLen / 5));\n\n  for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n    if (SymbolClz.getSymbolSize(data, dataIndex // Only for cartesian, where `isHorizontal` exists.\n    )[categoryAxis.isHorizontal() ? 1 : 0] // Empirical number\n    * 1.5 > availSize) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction createLineClipPath(coordSys, hasAnimation, seriesModel) {\n  if (coordSys.type === 'cartesian2d') {\n    var isHorizontal = coordSys.getBaseAxis().isHorizontal();\n    var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel); // Expand clip shape to avoid clipping when line value exceeds axis\n\n    if (!seriesModel.get('clip', true)) {\n      var rectShape = clipPath.shape;\n      var expandSize = Math.max(rectShape.width, rectShape.height);\n\n      if (isHorizontal) {\n        rectShape.y -= expandSize;\n        rectShape.height += expandSize * 2;\n      } else {\n        rectShape.x -= expandSize;\n        rectShape.width += expandSize * 2;\n      }\n    }\n\n    return clipPath;\n  } else {\n    return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n  }\n}\n\nvar _default = ChartView.extend({\n  type: 'line',\n  init: function () {\n    var lineGroup = new graphic.Group();\n    var symbolDraw = new SymbolDraw();\n    this.group.add(symbolDraw.group);\n    this._symbolDraw = symbolDraw;\n    this._lineGroup = lineGroup;\n  },\n  render: function (seriesModel, ecModel, api) {\n    var coordSys = seriesModel.coordinateSystem;\n    var group = this.group;\n    var data = seriesModel.getData();\n    var lineStyleModel = seriesModel.getModel('lineStyle');\n    var areaStyleModel = seriesModel.getModel('areaStyle');\n    var points = data.mapArray(data.getItemLayout);\n    var isCoordSysPolar = coordSys.type === 'polar';\n    var prevCoordSys = this._coordSys;\n    var symbolDraw = this._symbolDraw;\n    var polyline = this._polyline;\n    var polygon = this._polygon;\n    var lineGroup = this._lineGroup;\n    var hasAnimation = seriesModel.get('animation');\n    var isAreaChart = !areaStyleModel.isEmpty();\n    var valueOrigin = areaStyleModel.get('origin');\n    var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n    var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);\n    var showSymbol = seriesModel.get('showSymbol');\n    var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys); // Remove temporary symbols\n\n    var oldData = this._data;\n    oldData && oldData.eachItemGraphicEl(function (el, idx) {\n      if (el.__temp) {\n        group.remove(el);\n        oldData.setItemGraphicEl(idx, null);\n      }\n    }); // Remove previous created symbols if showSymbol changed to false\n\n    if (!showSymbol) {\n      symbolDraw.remove();\n    }\n\n    group.add(lineGroup); // FIXME step not support polar\n\n    var step = !isCoordSysPolar && seriesModel.get('step');\n    var clipShapeForSymbol;\n\n    if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {\n      clipShapeForSymbol = coordSys.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent.\n      // See #7913 and `test/dataZoom-clip.html`.\n\n      if (clipShapeForSymbol.width != null) {\n        clipShapeForSymbol.x -= 0.1;\n        clipShapeForSymbol.y -= 0.1;\n        clipShapeForSymbol.width += 0.2;\n        clipShapeForSymbol.height += 0.2;\n      } else if (clipShapeForSymbol.r0) {\n        clipShapeForSymbol.r0 -= 0.5;\n        clipShapeForSymbol.r1 += 0.5;\n      }\n    }\n\n    this._clipShapeForSymbol = clipShapeForSymbol; // Initialization animation or coordinate system changed\n\n    if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {\n      showSymbol && symbolDraw.updateData(data, {\n        isIgnore: isIgnoreFunc,\n        clipShape: clipShapeForSymbol\n      });\n\n      if (step) {\n        // TODO If stacked series is not step\n        points = turnPointsIntoStep(points, coordSys, step);\n        stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n      }\n\n      polyline = this._newPolyline(points, coordSys, hasAnimation);\n\n      if (isAreaChart) {\n        polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n      }\n\n      lineGroup.setClipPath(createLineClipPath(coordSys, true, seriesModel));\n    } else {\n      if (isAreaChart && !polygon) {\n        // If areaStyle is added\n        polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n      } else if (polygon && !isAreaChart) {\n        // If areaStyle is removed\n        lineGroup.remove(polygon);\n        polygon = this._polygon = null;\n      } // Update clipPath\n\n\n      lineGroup.setClipPath(createLineClipPath(coordSys, false, seriesModel)); // Always update, or it is wrong in the case turning on legend\n      // because points are not changed\n\n      showSymbol && symbolDraw.updateData(data, {\n        isIgnore: isIgnoreFunc,\n        clipShape: clipShapeForSymbol\n      }); // Stop symbol animation and sync with line points\n      // FIXME performance?\n\n      data.eachItemGraphicEl(function (el) {\n        el.stopAnimation(true);\n      }); // In the case data zoom triggerred refreshing frequently\n      // Data may not change if line has a category axis. So it should animate nothing\n\n      if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) {\n        if (hasAnimation) {\n          this._updateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin);\n        } else {\n          // Not do it in update with animation\n          if (step) {\n            // TODO If stacked series is not step\n            points = turnPointsIntoStep(points, coordSys, step);\n            stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n          }\n\n          polyline.setShape({\n            points: points\n          });\n          polygon && polygon.setShape({\n            points: points,\n            stackedOnPoints: stackedOnPoints\n          });\n        }\n      }\n    }\n\n    var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');\n    polyline.useStyle(zrUtil.defaults( // Use color in lineStyle first\n    lineStyleModel.getLineStyle(), {\n      fill: 'none',\n      stroke: visualColor,\n      lineJoin: 'bevel'\n    }));\n    var smooth = seriesModel.get('smooth');\n    smooth = getSmooth(seriesModel.get('smooth'));\n    polyline.setShape({\n      smooth: smooth,\n      smoothMonotone: seriesModel.get('smoothMonotone'),\n      connectNulls: seriesModel.get('connectNulls')\n    });\n\n    if (polygon) {\n      var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n      var stackedOnSmooth = 0;\n      polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n        fill: visualColor,\n        opacity: 0.7,\n        lineJoin: 'bevel'\n      }));\n\n      if (stackedOnSeries) {\n        stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n      }\n\n      polygon.setShape({\n        smooth: smooth,\n        stackedOnSmooth: stackedOnSmooth,\n        smoothMonotone: seriesModel.get('smoothMonotone'),\n        connectNulls: seriesModel.get('connectNulls')\n      });\n    }\n\n    this._data = data; // Save the coordinate system for transition animation when data changed\n\n    this._coordSys = coordSys;\n    this._stackedOnPoints = stackedOnPoints;\n    this._points = points;\n    this._step = step;\n    this._valueOrigin = valueOrigin;\n  },\n  dispose: function () {},\n  highlight: function (seriesModel, ecModel, api, payload) {\n    var data = seriesModel.getData();\n    var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n    if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n      var symbol = data.getItemGraphicEl(dataIndex);\n\n      if (!symbol) {\n        // Create a temporary symbol if it is not exists\n        var pt = data.getItemLayout(dataIndex);\n\n        if (!pt) {\n          // Null data\n          return;\n        } // fix #11360: should't draw symbol outside clipShapeForSymbol\n\n\n        if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(pt[0], pt[1])) {\n          return;\n        }\n\n        symbol = new SymbolClz(data, dataIndex);\n        symbol.position = pt;\n        symbol.setZ(seriesModel.get('zlevel'), seriesModel.get('z'));\n        symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);\n        symbol.__temp = true;\n        data.setItemGraphicEl(dataIndex, symbol); // Stop scale animation\n\n        symbol.stopSymbolAnimation(true);\n        this.group.add(symbol);\n      }\n\n      symbol.highlight();\n    } else {\n      // Highlight whole series\n      ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);\n    }\n  },\n  downplay: function (seriesModel, ecModel, api, payload) {\n    var data = seriesModel.getData();\n    var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n    if (dataIndex != null && dataIndex >= 0) {\n      var symbol = data.getItemGraphicEl(dataIndex);\n\n      if (symbol) {\n        if (symbol.__temp) {\n          data.setItemGraphicEl(dataIndex, null);\n          this.group.remove(symbol);\n        } else {\n          symbol.downplay();\n        }\n      }\n    } else {\n      // FIXME\n      // can not downplay completely.\n      // Downplay whole series\n      ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);\n    }\n  },\n\n  /**\n   * @param {module:zrender/container/Group} group\n   * @param {Array.<Array.<number>>} points\n   * @private\n   */\n  _newPolyline: function (points) {\n    var polyline = this._polyline; // Remove previous created polyline\n\n    if (polyline) {\n      this._lineGroup.remove(polyline);\n    }\n\n    polyline = new Polyline({\n      shape: {\n        points: points\n      },\n      silent: true,\n      z2: 10\n    });\n\n    this._lineGroup.add(polyline);\n\n    this._polyline = polyline;\n    return polyline;\n  },\n\n  /**\n   * @param {module:zrender/container/Group} group\n   * @param {Array.<Array.<number>>} stackedOnPoints\n   * @param {Array.<Array.<number>>} points\n   * @private\n   */\n  _newPolygon: function (points, stackedOnPoints) {\n    var polygon = this._polygon; // Remove previous created polygon\n\n    if (polygon) {\n      this._lineGroup.remove(polygon);\n    }\n\n    polygon = new Polygon({\n      shape: {\n        points: points,\n        stackedOnPoints: stackedOnPoints\n      },\n      silent: true\n    });\n\n    this._lineGroup.add(polygon);\n\n    this._polygon = polygon;\n    return polygon;\n  },\n\n  /**\n   * @private\n   */\n  // FIXME Two value axis\n  _updateAnimation: function (data, stackedOnPoints, coordSys, api, step, valueOrigin) {\n    var polyline = this._polyline;\n    var polygon = this._polygon;\n    var seriesModel = data.hostModel;\n    var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin, valueOrigin);\n    var current = diff.current;\n    var stackedOnCurrent = diff.stackedOnCurrent;\n    var next = diff.next;\n    var stackedOnNext = diff.stackedOnNext;\n\n    if (step) {\n      // TODO If stacked series is not step\n      current = turnPointsIntoStep(diff.current, coordSys, step);\n      stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);\n      next = turnPointsIntoStep(diff.next, coordSys, step);\n      stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);\n    } // Don't apply animation if diff is large.\n    // For better result and avoid memory explosion problems like\n    // https://github.com/apache/incubator-echarts/issues/12229\n\n\n    if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) {\n      polyline.setShape({\n        points: next\n      });\n\n      if (polygon) {\n        polygon.setShape({\n          points: next,\n          stackedOnPoints: stackedOnNext\n        });\n      }\n\n      return;\n    } // `diff.current` is subset of `current` (which should be ensured by\n    // turnPointsIntoStep), so points in `__points` can be updated when\n    // points in `current` are update during animation.\n\n\n    polyline.shape.__points = diff.current;\n    polyline.shape.points = current;\n    graphic.updateProps(polyline, {\n      shape: {\n        points: next\n      }\n    }, seriesModel);\n\n    if (polygon) {\n      polygon.setShape({\n        points: current,\n        stackedOnPoints: stackedOnCurrent\n      });\n      graphic.updateProps(polygon, {\n        shape: {\n          points: next,\n          stackedOnPoints: stackedOnNext\n        }\n      }, seriesModel);\n    }\n\n    var updatedDataInfo = [];\n    var diffStatus = diff.status;\n\n    for (var i = 0; i < diffStatus.length; i++) {\n      var cmd = diffStatus[i].cmd;\n\n      if (cmd === '=') {\n        var el = data.getItemGraphicEl(diffStatus[i].idx1);\n\n        if (el) {\n          updatedDataInfo.push({\n            el: el,\n            ptIdx: i // Index of points\n\n          });\n        }\n      }\n    }\n\n    if (polyline.animators && polyline.animators.length) {\n      polyline.animators[0].during(function () {\n        for (var i = 0; i < updatedDataInfo.length; i++) {\n          var el = updatedDataInfo[i].el;\n          el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]);\n        }\n      });\n    }\n  },\n  remove: function (ecModel) {\n    var group = this.group;\n    var oldData = this._data;\n\n    this._lineGroup.removeAll();\n\n    this._symbolDraw.remove(true); // Remove temporary created elements when highlighting\n\n\n    oldData && oldData.eachItemGraphicEl(function (el, idx) {\n      if (el.__temp) {\n        group.remove(el);\n        oldData.setItemGraphicEl(idx, null);\n      }\n    });\n    this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null;\n  }\n});\n\nmodule.exports = _default;","\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\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar map = _util.map;\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 * @param {Object} coordSys\n * @param {module:echarts/data/List} data\n * @param {string} valueOrigin lineSeries.option.areaStyle.origin\n */\nfunction prepareDataCoordInfo(coordSys, data, valueOrigin) {\n  var baseAxis = coordSys.getBaseAxis();\n  var valueAxis = coordSys.getOtherAxis(baseAxis);\n  var valueStart = getValueStart(valueAxis, valueOrigin);\n  var baseAxisDim = baseAxis.dim;\n  var valueAxisDim = valueAxis.dim;\n  var valueDim = data.mapDimension(valueAxisDim);\n  var baseDim = data.mapDimension(baseAxisDim);\n  var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n  var dims = map(coordSys.dimensions, function (coordDim) {\n    return data.mapDimension(coordDim);\n  });\n  var stacked;\n  var stackResultDim = data.getCalculationInfo('stackResultDimension');\n\n  if (stacked |= isDimensionStacked(data, dims[0]\n  /*, dims[1]*/\n  )) {\n    // jshint ignore:line\n    dims[0] = stackResultDim;\n  }\n\n  if (stacked |= isDimensionStacked(data, dims[1]\n  /*, dims[0]*/\n  )) {\n    // jshint ignore:line\n    dims[1] = stackResultDim;\n  }\n\n  return {\n    dataDimsForPoint: dims,\n    valueStart: valueStart,\n    valueAxisDim: valueAxisDim,\n    baseAxisDim: baseAxisDim,\n    stacked: !!stacked,\n    valueDim: valueDim,\n    baseDim: baseDim,\n    baseDataOffset: baseDataOffset,\n    stackedOverDimension: data.getCalculationInfo('stackedOverDimension')\n  };\n}\n\nfunction getValueStart(valueAxis, valueOrigin) {\n  var valueStart = 0;\n  var extent = valueAxis.scale.getExtent();\n\n  if (valueOrigin === 'start') {\n    valueStart = extent[0];\n  } else if (valueOrigin === 'end') {\n    valueStart = extent[1];\n  } // auto\n  else {\n      // Both positive\n      if (extent[0] > 0) {\n        valueStart = extent[0];\n      } // Both negative\n      else if (extent[1] < 0) {\n          valueStart = extent[1];\n        } // If is one positive, and one negative, onZero shall be true\n\n    }\n\n  return valueStart;\n}\n\nfunction getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n  var value = NaN;\n\n  if (dataCoordInfo.stacked) {\n    value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\n  }\n\n  if (isNaN(value)) {\n    value = dataCoordInfo.valueStart;\n  }\n\n  var baseDataOffset = dataCoordInfo.baseDataOffset;\n  var stackedData = [];\n  stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);\n  stackedData[1 - baseDataOffset] = value;\n  return coordSys.dataToPoint(stackedData);\n}\n\nexports.prepareDataCoordInfo = prepareDataCoordInfo;\nexports.getStackedOnPoint = getStackedOnPoint;","\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\nvar _helper = require(\"./helper\");\n\nvar prepareDataCoordInfo = _helper.prepareDataCoordInfo;\nvar getStackedOnPoint = _helper.getStackedOnPoint;\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// var arrayDiff = require('zrender/src/core/arrayDiff');\n// 'zrender/src/core/arrayDiff' has been used before, but it did\n// not do well in performance when roam with fixed dataZoom window.\n// function convertToIntId(newIdList, oldIdList) {\n//     // Generate int id instead of string id.\n//     // Compare string maybe slow in score function of arrDiff\n//     // Assume id in idList are all unique\n//     var idIndicesMap = {};\n//     var idx = 0;\n//     for (var i = 0; i < newIdList.length; i++) {\n//         idIndicesMap[newIdList[i]] = idx;\n//         newIdList[i] = idx++;\n//     }\n//     for (var i = 0; i < oldIdList.length; i++) {\n//         var oldId = oldIdList[i];\n//         // Same with newIdList\n//         if (idIndicesMap[oldId]) {\n//             oldIdList[i] = idIndicesMap[oldId];\n//         }\n//         else {\n//             oldIdList[i] = idx++;\n//         }\n//     }\n// }\nfunction diffData(oldData, newData) {\n  var diffResult = [];\n  newData.diff(oldData).add(function (idx) {\n    diffResult.push({\n      cmd: '+',\n      idx: idx\n    });\n  }).update(function (newIdx, oldIdx) {\n    diffResult.push({\n      cmd: '=',\n      idx: oldIdx,\n      idx1: newIdx\n    });\n  }).remove(function (idx) {\n    diffResult.push({\n      cmd: '-',\n      idx: idx\n    });\n  }).execute();\n  return diffResult;\n}\n\nfunction _default(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {\n  var diff = diffData(oldData, newData); // var newIdList = newData.mapArray(newData.getId);\n  // var oldIdList = oldData.mapArray(oldData.getId);\n  // convertToIntId(newIdList, oldIdList);\n  // // FIXME One data ?\n  // diff = arrayDiff(oldIdList, newIdList);\n\n  var currPoints = [];\n  var nextPoints = []; // Points for stacking base line\n\n  var currStackedPoints = [];\n  var nextStackedPoints = [];\n  var status = [];\n  var sortedIndices = [];\n  var rawIndices = [];\n  var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);\n  var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);\n\n  for (var i = 0; i < diff.length; i++) {\n    var diffItem = diff[i];\n    var pointAdded = true; // FIXME, animation is not so perfect when dataZoom window moves fast\n    // Which is in case remvoing or add more than one data in the tail or head\n\n    switch (diffItem.cmd) {\n      case '=':\n        var currentPt = oldData.getItemLayout(diffItem.idx);\n        var nextPt = newData.getItemLayout(diffItem.idx1); // If previous data is NaN, use next point directly\n\n        if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {\n          currentPt = nextPt.slice();\n        }\n\n        currPoints.push(currentPt);\n        nextPoints.push(nextPt);\n        currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);\n        nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);\n        rawIndices.push(newData.getRawIndex(diffItem.idx1));\n        break;\n\n      case '+':\n        var idx = diffItem.idx;\n        currPoints.push(oldCoordSys.dataToPoint([newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx), newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)]));\n        nextPoints.push(newData.getItemLayout(idx).slice());\n        currStackedPoints.push(getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx));\n        nextStackedPoints.push(newStackedOnPoints[idx]);\n        rawIndices.push(newData.getRawIndex(idx));\n        break;\n\n      case '-':\n        var idx = diffItem.idx;\n        var rawIndex = oldData.getRawIndex(idx); // Data is replaced. In the case of dynamic data queue\n        // FIXME FIXME FIXME\n\n        if (rawIndex !== idx) {\n          currPoints.push(oldData.getItemLayout(idx));\n          nextPoints.push(newCoordSys.dataToPoint([oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx), oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)]));\n          currStackedPoints.push(oldStackedOnPoints[idx]);\n          nextStackedPoints.push(getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx));\n          rawIndices.push(rawIndex);\n        } else {\n          pointAdded = false;\n        }\n\n    } // Original indices\n\n\n    if (pointAdded) {\n      status.push(diffItem);\n      sortedIndices.push(sortedIndices.length);\n    }\n  } // Diff result may be crossed if all items are changed\n  // Sort by data index\n\n\n  sortedIndices.sort(function (a, b) {\n    return rawIndices[a] - rawIndices[b];\n  });\n  var sortedCurrPoints = [];\n  var sortedNextPoints = [];\n  var sortedCurrStackedPoints = [];\n  var sortedNextStackedPoints = [];\n  var sortedStatus = [];\n\n  for (var i = 0; i < sortedIndices.length; i++) {\n    var idx = sortedIndices[i];\n    sortedCurrPoints[i] = currPoints[idx];\n    sortedNextPoints[i] = nextPoints[idx];\n    sortedCurrStackedPoints[i] = currStackedPoints[idx];\n    sortedNextStackedPoints[i] = nextStackedPoints[idx];\n    sortedStatus[i] = status[idx];\n  }\n\n  return {\n    current: sortedCurrPoints,\n    next: sortedNextPoints,\n    stackedOnCurrent: sortedCurrStackedPoints,\n    stackedOnNext: sortedNextStackedPoints,\n    status: sortedStatus\n  };\n}\n\nmodule.exports = _default;","\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\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar fixClipWithShadow = require(\"zrender/lib/graphic/helper/fixClipWithShadow\");\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// Poly path support NaN point\nvar vec2Min = vec2.min;\nvar vec2Max = vec2.max;\nvar scaleAndAdd = vec2.scaleAndAdd;\nvar v2Copy = vec2.copy; // Temporary variable\n\nvar v = [];\nvar cp0 = [];\nvar cp1 = [];\n\nfunction isPointNull(p) {\n  return isNaN(p[0]) || isNaN(p[1]);\n}\n\nfunction drawSegment(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n  // if (smoothMonotone == null) {\n  //     if (isMono(points, 'x')) {\n  //         return drawMono(ctx, points, start, segLen, allLen,\n  //             dir, smoothMin, smoothMax, smooth, 'x', connectNulls);\n  //     }\n  //     else if (isMono(points, 'y')) {\n  //         return drawMono(ctx, points, start, segLen, allLen,\n  //             dir, smoothMin, smoothMax, smooth, 'y', connectNulls);\n  //     }\n  //     else {\n  //         return drawNonMono.apply(this, arguments);\n  //     }\n  // }\n  // else if (smoothMonotone !== 'none' && isMono(points, smoothMonotone)) {\n  //     return drawMono.apply(this, arguments);\n  // }\n  // else {\n  //     return drawNonMono.apply(this, arguments);\n  // }\n  if (smoothMonotone === 'none' || !smoothMonotone) {\n    return drawNonMono.apply(this, arguments);\n  } else {\n    return drawMono.apply(this, arguments);\n  }\n}\n/**\n * Check if points is in monotone.\n *\n * @param {number[][]} points         Array of points which is in [x, y] form\n * @param {string}     smoothMonotone 'x', 'y', or 'none', stating for which\n *                                    dimension that is checking.\n *                                    If is 'none', `drawNonMono` should be\n *                                    called.\n *                                    If is undefined, either being monotone\n *                                    in 'x' or 'y' will call `drawMono`.\n */\n// function isMono(points, smoothMonotone) {\n//     if (points.length <= 1) {\n//         return true;\n//     }\n//     var dim = smoothMonotone === 'x' ? 0 : 1;\n//     var last = points[0][dim];\n//     var lastDiff = 0;\n//     for (var i = 1; i < points.length; ++i) {\n//         var diff = points[i][dim] - last;\n//         if (!isNaN(diff) && !isNaN(lastDiff)\n//             && diff !== 0 && lastDiff !== 0\n//             && ((diff >= 0) !== (lastDiff >= 0))\n//         ) {\n//             return false;\n//         }\n//         if (!isNaN(diff) && diff !== 0) {\n//             lastDiff = diff;\n//             last = points[i][dim];\n//         }\n//     }\n//     return true;\n// }\n\n/**\n * Draw smoothed line in monotone, in which only vertical or horizontal bezier\n * control points will be used. This should be used when points are monotone\n * either in x or y dimension.\n */\n\n\nfunction drawMono(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n  var prevIdx = 0;\n  var idx = start;\n\n  for (var k = 0; k < segLen; k++) {\n    var p = points[idx];\n\n    if (idx >= allLen || idx < 0) {\n      break;\n    }\n\n    if (isPointNull(p)) {\n      if (connectNulls) {\n        idx += dir;\n        continue;\n      }\n\n      break;\n    }\n\n    if (idx === start) {\n      ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n    } else {\n      if (smooth > 0) {\n        var prevP = points[prevIdx];\n        var dim = smoothMonotone === 'y' ? 1 : 0; // Length of control point to p, either in x or y, but not both\n\n        var ctrlLen = (p[dim] - prevP[dim]) * smooth;\n        v2Copy(cp0, prevP);\n        cp0[dim] = prevP[dim] + ctrlLen;\n        v2Copy(cp1, p);\n        cp1[dim] = p[dim] - ctrlLen;\n        ctx.bezierCurveTo(cp0[0], cp0[1], cp1[0], cp1[1], p[0], p[1]);\n      } else {\n        ctx.lineTo(p[0], p[1]);\n      }\n    }\n\n    prevIdx = idx;\n    idx += dir;\n  }\n\n  return k;\n}\n/**\n * Draw smoothed line in non-monotone, in may cause undesired curve in extreme\n * situations. This should be used when points are non-monotone neither in x or\n * y dimension.\n */\n\n\nfunction drawNonMono(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n  var prevIdx = 0;\n  var idx = start;\n\n  for (var k = 0; k < segLen; k++) {\n    var p = points[idx];\n\n    if (idx >= allLen || idx < 0) {\n      break;\n    }\n\n    if (isPointNull(p)) {\n      if (connectNulls) {\n        idx += dir;\n        continue;\n      }\n\n      break;\n    }\n\n    if (idx === start) {\n      ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n      v2Copy(cp0, p);\n    } else {\n      if (smooth > 0) {\n        var nextIdx = idx + dir;\n        var nextP = points[nextIdx];\n\n        if (connectNulls) {\n          // Find next point not null\n          while (nextP && isPointNull(points[nextIdx])) {\n            nextIdx += dir;\n            nextP = points[nextIdx];\n          }\n        }\n\n        var ratioNextSeg = 0.5;\n        var prevP = points[prevIdx];\n        var nextP = points[nextIdx]; // Last point\n\n        if (!nextP || isPointNull(nextP)) {\n          v2Copy(cp1, p);\n        } else {\n          // If next data is null in not connect case\n          if (isPointNull(nextP) && !connectNulls) {\n            nextP = p;\n          }\n\n          vec2.sub(v, nextP, prevP);\n          var lenPrevSeg;\n          var lenNextSeg;\n\n          if (smoothMonotone === 'x' || smoothMonotone === 'y') {\n            var dim = smoothMonotone === 'x' ? 0 : 1;\n            lenPrevSeg = Math.abs(p[dim] - prevP[dim]);\n            lenNextSeg = Math.abs(p[dim] - nextP[dim]);\n          } else {\n            lenPrevSeg = vec2.dist(p, prevP);\n            lenNextSeg = vec2.dist(p, nextP);\n          } // Use ratio of seg length\n\n\n          ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n          scaleAndAdd(cp1, p, v, -smooth * (1 - ratioNextSeg));\n        } // Smooth constraint\n\n\n        vec2Min(cp0, cp0, smoothMax);\n        vec2Max(cp0, cp0, smoothMin);\n        vec2Min(cp1, cp1, smoothMax);\n        vec2Max(cp1, cp1, smoothMin);\n        ctx.bezierCurveTo(cp0[0], cp0[1], cp1[0], cp1[1], p[0], p[1]); // cp0 of next segment\n\n        scaleAndAdd(cp0, p, v, smooth * ratioNextSeg);\n      } else {\n        ctx.lineTo(p[0], p[1]);\n      }\n    }\n\n    prevIdx = idx;\n    idx += dir;\n  }\n\n  return k;\n}\n\nfunction getBoundingBox(points, smoothConstraint) {\n  var ptMin = [Infinity, Infinity];\n  var ptMax = [-Infinity, -Infinity];\n\n  if (smoothConstraint) {\n    for (var i = 0; i < points.length; i++) {\n      var pt = points[i];\n\n      if (pt[0] < ptMin[0]) {\n        ptMin[0] = pt[0];\n      }\n\n      if (pt[1] < ptMin[1]) {\n        ptMin[1] = pt[1];\n      }\n\n      if (pt[0] > ptMax[0]) {\n        ptMax[0] = pt[0];\n      }\n\n      if (pt[1] > ptMax[1]) {\n        ptMax[1] = pt[1];\n      }\n    }\n  }\n\n  return {\n    min: smoothConstraint ? ptMin : ptMax,\n    max: smoothConstraint ? ptMax : ptMin\n  };\n}\n\nvar Polyline = Path.extend({\n  type: 'ec-polyline',\n  shape: {\n    points: [],\n    smooth: 0,\n    smoothConstraint: true,\n    smoothMonotone: null,\n    connectNulls: false\n  },\n  style: {\n    fill: null,\n    stroke: '#000'\n  },\n  brush: fixClipWithShadow(Path.prototype.brush),\n  buildPath: function (ctx, shape) {\n    var points = shape.points;\n    var i = 0;\n    var len = points.length;\n    var result = getBoundingBox(points, shape.smoothConstraint);\n\n    if (shape.connectNulls) {\n      // Must remove first and last null values avoid draw error in polygon\n      for (; len > 0; len--) {\n        if (!isPointNull(points[len - 1])) {\n          break;\n        }\n      }\n\n      for (; i < len; i++) {\n        if (!isPointNull(points[i])) {\n          break;\n        }\n      }\n    }\n\n    while (i < len) {\n      i += drawSegment(ctx, points, i, len, len, 1, result.min, result.max, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;\n    }\n  }\n});\nvar Polygon = Path.extend({\n  type: 'ec-polygon',\n  shape: {\n    points: [],\n    // Offset between stacked base points and points\n    stackedOnPoints: [],\n    smooth: 0,\n    stackedOnSmooth: 0,\n    smoothConstraint: true,\n    smoothMonotone: null,\n    connectNulls: false\n  },\n  brush: fixClipWithShadow(Path.prototype.brush),\n  buildPath: function (ctx, shape) {\n    var points = shape.points;\n    var stackedOnPoints = shape.stackedOnPoints;\n    var i = 0;\n    var len = points.length;\n    var smoothMonotone = shape.smoothMonotone;\n    var bbox = getBoundingBox(points, shape.smoothConstraint);\n    var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);\n\n    if (shape.connectNulls) {\n      // Must remove first and last null values avoid draw error in polygon\n      for (; len > 0; len--) {\n        if (!isPointNull(points[len - 1])) {\n          break;\n        }\n      }\n\n      for (; i < len; i++) {\n        if (!isPointNull(points[i])) {\n          break;\n        }\n      }\n    }\n\n    while (i < len) {\n      var k = drawSegment(ctx, points, i, len, len, 1, bbox.min, bbox.max, shape.smooth, smoothMonotone, shape.connectNulls);\n      drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);\n      i += k + 1;\n      ctx.closePath();\n    }\n  }\n});\nexports.Polyline = Polyline;\nexports.Polygon = Polygon;","\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\nvar echarts = require(\"../echarts\");\n\nrequire(\"./lines/LinesSeries\");\n\nrequire(\"./lines/LinesView\");\n\nvar linesLayout = require(\"./lines/linesLayout\");\n\nvar linesVisual = require(\"./lines/linesVisual\");\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*/\necharts.registerLayout(linesLayout);\necharts.registerVisual(linesVisual);","\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar List = require(\"../../data/List\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar concatArray = _util.concatArray;\nvar mergeAll = _util.mergeAll;\nvar map = _util.map;\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\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 Uint32Array, Float64Array, Float32Array */\nvar Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;\nvar Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;\n\nfunction compatEc2(seriesOpt) {\n  var data = seriesOpt.data;\n\n  if (data && data[0] && data[0][0] && data[0][0].coord) {\n    seriesOpt.data = map(data, function (itemOpt) {\n      var coords = [itemOpt[0].coord, itemOpt[1].coord];\n      var target = {\n        coords: coords\n      };\n\n      if (itemOpt[0].name) {\n        target.fromName = itemOpt[0].name;\n      }\n\n      if (itemOpt[1].name) {\n        target.toName = itemOpt[1].name;\n      }\n\n      return mergeAll([target, itemOpt[0], itemOpt[1]]);\n    });\n  }\n}\n\nvar LinesSeries = SeriesModel.extend({\n  type: 'series.lines',\n  dependencies: ['grid', 'polar'],\n  visualColorAccessPath: 'lineStyle.color',\n  init: function (option) {\n    // The input data may be null/undefined.\n    option.data = option.data || []; // Not using preprocessor because mergeOption may not have series.type\n\n    compatEc2(option);\n\n    var result = this._processFlatCoordsArray(option.data);\n\n    this._flatCoords = result.flatCoords;\n    this._flatCoordsOffset = result.flatCoordsOffset;\n\n    if (result.flatCoords) {\n      option.data = new Float32Array(result.count);\n    }\n\n    LinesSeries.superApply(this, 'init', arguments);\n  },\n  mergeOption: function (option) {\n    compatEc2(option);\n\n    if (option.data) {\n      // Only update when have option data to merge.\n      var result = this._processFlatCoordsArray(option.data);\n\n      this._flatCoords = result.flatCoords;\n      this._flatCoordsOffset = result.flatCoordsOffset;\n\n      if (result.flatCoords) {\n        option.data = new Float32Array(result.count);\n      }\n    }\n\n    LinesSeries.superApply(this, 'mergeOption', arguments);\n  },\n  appendData: function (params) {\n    var result = this._processFlatCoordsArray(params.data);\n\n    if (result.flatCoords) {\n      if (!this._flatCoords) {\n        this._flatCoords = result.flatCoords;\n        this._flatCoordsOffset = result.flatCoordsOffset;\n      } else {\n        this._flatCoords = concatArray(this._flatCoords, result.flatCoords);\n        this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);\n      }\n\n      params.data = new Float32Array(result.count);\n    }\n\n    this.getRawData().appendData(params.data);\n  },\n  _getCoordsFromItemModel: function (idx) {\n    var itemModel = this.getData().getItemModel(idx);\n    var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.getShallow('coords');\n    return coords;\n  },\n  getLineCoordsCount: function (idx) {\n    if (this._flatCoordsOffset) {\n      return this._flatCoordsOffset[idx * 2 + 1];\n    } else {\n      return this._getCoordsFromItemModel(idx).length;\n    }\n  },\n  getLineCoords: function (idx, out) {\n    if (this._flatCoordsOffset) {\n      var offset = this._flatCoordsOffset[idx * 2];\n      var len = this._flatCoordsOffset[idx * 2 + 1];\n\n      for (var i = 0; i < len; i++) {\n        out[i] = out[i] || [];\n        out[i][0] = this._flatCoords[offset + i * 2];\n        out[i][1] = this._flatCoords[offset + i * 2 + 1];\n      }\n\n      return len;\n    } else {\n      var coords = this._getCoordsFromItemModel(idx);\n\n      for (var i = 0; i < coords.length; i++) {\n        out[i] = out[i] || [];\n        out[i][0] = coords[i][0];\n        out[i][1] = coords[i][1];\n      }\n\n      return coords.length;\n    }\n  },\n  _processFlatCoordsArray: function (data) {\n    var startOffset = 0;\n\n    if (this._flatCoords) {\n      startOffset = this._flatCoords.length;\n    } // Stored as a typed array. In format\n    // Points Count(2) | x | y | x | y | Points Count(3) | x |  y | x | y | x | y |\n\n\n    if (typeof data[0] === 'number') {\n      var len = data.length; // Store offset and len of each segment\n\n      var coordsOffsetAndLenStorage = new Uint32Arr(len);\n      var coordsStorage = new Float64Arr(len);\n      var coordsCursor = 0;\n      var offsetCursor = 0;\n      var dataCount = 0;\n\n      for (var i = 0; i < len;) {\n        dataCount++;\n        var count = data[i++]; // Offset\n\n        coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset; // Len\n\n        coordsOffsetAndLenStorage[offsetCursor++] = count;\n\n        for (var k = 0; k < count; k++) {\n          var x = data[i++];\n          var y = data[i++];\n          coordsStorage[coordsCursor++] = x;\n          coordsStorage[coordsCursor++] = y;\n\n          if (i > len) {}\n        }\n      }\n\n      return {\n        flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor),\n        flatCoords: coordsStorage,\n        count: dataCount\n      };\n    }\n\n    return {\n      flatCoordsOffset: null,\n      flatCoords: null,\n      count: data.length\n    };\n  },\n  getInitialData: function (option, ecModel) {\n    var lineData = new List(['value'], this);\n    lineData.hasItemOption = false;\n    lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {\n      // dataItem is simply coords\n      if (dataItem instanceof Array) {\n        return NaN;\n      } else {\n        lineData.hasItemOption = true;\n        var value = dataItem.value;\n\n        if (value != null) {\n          return value instanceof Array ? value[dimIndex] : value;\n        }\n      }\n    });\n    return lineData;\n  },\n  formatTooltip: function (dataIndex) {\n    var data = this.getData();\n    var itemModel = data.getItemModel(dataIndex);\n    var name = itemModel.get('name');\n\n    if (name) {\n      return name;\n    }\n\n    var fromName = itemModel.get('fromName');\n    var toName = itemModel.get('toName');\n    var html = [];\n    fromName != null && html.push(fromName);\n    toName != null && html.push(toName);\n    return encodeHTML(html.join(' > '));\n  },\n  preventIncremental: function () {\n    return !!this.get('effect.show');\n  },\n  getProgressive: function () {\n    var progressive = this.option.progressive;\n\n    if (progressive == null) {\n      return this.option.large ? 1e4 : this.get('progressive');\n    }\n\n    return progressive;\n  },\n  getProgressiveThreshold: function () {\n    var progressiveThreshold = this.option.progressiveThreshold;\n\n    if (progressiveThreshold == null) {\n      return this.option.large ? 2e4 : this.get('progressiveThreshold');\n    }\n\n    return progressiveThreshold;\n  },\n  defaultOption: {\n    coordinateSystem: 'geo',\n    zlevel: 0,\n    z: 2,\n    legendHoverLink: true,\n    hoverAnimation: true,\n    // Cartesian coordinate system\n    xAxisIndex: 0,\n    yAxisIndex: 0,\n    symbol: ['none', 'none'],\n    symbolSize: [10, 10],\n    // Geo coordinate system\n    geoIndex: 0,\n    effect: {\n      show: false,\n      period: 4,\n      // Animation delay. support callback\n      // delay: 0,\n      // If move with constant speed px/sec\n      // period will be ignored if this property is > 0,\n      constantSpeed: 0,\n      symbol: 'circle',\n      symbolSize: 3,\n      loop: true,\n      // Length of trail, 0 - 1\n      trailLength: 0.2 // Same with lineStyle.color\n      // color\n\n    },\n    large: false,\n    // Available when large is true\n    largeThreshold: 2000,\n    // If lines are polyline\n    // polyline not support curveness, label, animation\n    polyline: false,\n    // If clip the overflow.\n    // Available when coordinateSystem is cartesian or polar.\n    clip: true,\n    label: {\n      show: false,\n      position: 'end' // distance: 5,\n      // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n\n    },\n    lineStyle: {\n      opacity: 0.5\n    }\n  }\n});\nvar _default = LinesSeries;\nmodule.exports = _default;","\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar LineDraw = require(\"../helper/LineDraw\");\n\nvar EffectLine = require(\"../helper/EffectLine\");\n\nvar Line = require(\"../helper/Line\");\n\nvar Polyline = require(\"../helper/Polyline\");\n\nvar EffectPolyline = require(\"../helper/EffectPolyline\");\n\nvar LargeLineDraw = require(\"../helper/LargeLineDraw\");\n\nvar linesLayout = require(\"./linesLayout\");\n\nvar _createClipPathFromCoordSys = require(\"../helper/createClipPathFromCoordSys\");\n\nvar createClipPath = _createClipPathFromCoordSys.createClipPath;\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*/\nvar _default = echarts.extendChartView({\n  type: 'lines',\n  init: function () {},\n  render: function (seriesModel, ecModel, api) {\n    var data = seriesModel.getData();\n\n    var lineDraw = this._updateLineDraw(data, seriesModel);\n\n    var zlevel = seriesModel.get('zlevel');\n    var trailLength = seriesModel.get('effect.trailLength');\n    var zr = api.getZr(); // Avoid the drag cause ghost shadow\n    // FIXME Better way ?\n    // SVG doesn't support\n\n    var isSvg = zr.painter.getType() === 'svg';\n\n    if (!isSvg) {\n      zr.painter.getLayer(zlevel).clear(true);\n    } // Config layer with motion blur\n\n\n    if (this._lastZlevel != null && !isSvg) {\n      zr.configLayer(this._lastZlevel, {\n        motionBlur: false\n      });\n    }\n\n    if (this._showEffect(seriesModel) && trailLength) {\n      if (!isSvg) {\n        zr.configLayer(zlevel, {\n          motionBlur: true,\n          lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n        });\n      }\n    }\n\n    lineDraw.updateData(data);\n    var clipPath = seriesModel.get('clip', true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel);\n\n    if (clipPath) {\n      this.group.setClipPath(clipPath);\n    } else {\n      this.group.removeClipPath();\n    }\n\n    this._lastZlevel = zlevel;\n    this._finished = true;\n  },\n  incrementalPrepareRender: function (seriesModel, ecModel, api) {\n    var data = seriesModel.getData();\n\n    var lineDraw = this._updateLineDraw(data, seriesModel);\n\n    lineDraw.incrementalPrepareUpdate(data);\n\n    this._clearLayer(api);\n\n    this._finished = false;\n  },\n  incrementalRender: function (taskParams, seriesModel, ecModel) {\n    this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n    this._finished = taskParams.end === seriesModel.getData().count();\n  },\n  updateTransform: function (seriesModel, ecModel, api) {\n    var data = seriesModel.getData();\n    var pipelineContext = seriesModel.pipelineContext;\n\n    if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {\n      // TODO Don't have to do update in large mode. Only do it when there are millions of data.\n      return {\n        update: true\n      };\n    } else {\n      // TODO Use same logic with ScatterView.\n      // Manually update layout\n      var res = linesLayout.reset(seriesModel);\n\n      if (res.progress) {\n        res.progress({\n          start: 0,\n          end: data.count()\n        }, data);\n      }\n\n      this._lineDraw.updateLayout();\n\n      this._clearLayer(api);\n    }\n  },\n  _updateLineDraw: function (data, seriesModel) {\n    var lineDraw = this._lineDraw;\n\n    var hasEffect = this._showEffect(seriesModel);\n\n    var isPolyline = !!seriesModel.get('polyline');\n    var pipelineContext = seriesModel.pipelineContext;\n    var isLargeDraw = pipelineContext.large;\n\n    if (!lineDraw || hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLargeDraw !== this._isLargeDraw) {\n      if (lineDraw) {\n        lineDraw.remove();\n      }\n\n      lineDraw = this._lineDraw = isLargeDraw ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line);\n      this._hasEffet = hasEffect;\n      this._isPolyline = isPolyline;\n      this._isLargeDraw = isLargeDraw;\n      this.group.removeAll();\n    }\n\n    this.group.add(lineDraw.group);\n    return lineDraw;\n  },\n  _showEffect: function (seriesModel) {\n    return !!seriesModel.get('effect.show');\n  },\n  _clearLayer: function (api) {\n    // Not use motion when dragging or zooming\n    var zr = api.getZr();\n    var isSvg = zr.painter.getType() === 'svg';\n\n    if (!isSvg && this._lastZlevel != null) {\n      zr.painter.getLayer(this._lastZlevel).clear(true);\n    }\n  },\n  remove: function (ecModel, api) {\n    this._lineDraw && this._lineDraw.remove();\n    this._lineDraw = null; // Clear motion when lineDraw is removed\n\n    this._clearLayer(api);\n  },\n  dispose: function () {}\n});\n\nmodule.exports = _default;","\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\nvar createRenderPlanner = require(\"../helper/createRenderPlanner\");\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 */\nvar _default = {\n  seriesType: 'lines',\n  plan: createRenderPlanner(),\n  reset: function (seriesModel) {\n    var coordSys = seriesModel.coordinateSystem;\n    var isPolyline = seriesModel.get('polyline');\n    var isLarge = seriesModel.pipelineContext.large;\n\n    function progress(params, lineData) {\n      var lineCoords = [];\n\n      if (isLarge) {\n        var points;\n        var segCount = params.end - params.start;\n\n        if (isPolyline) {\n          var totalCoordsCount = 0;\n\n          for (var i = params.start; i < params.end; i++) {\n            totalCoordsCount += seriesModel.getLineCoordsCount(i);\n          }\n\n          points = new Float32Array(segCount + totalCoordsCount * 2);\n        } else {\n          points = new Float32Array(segCount * 4);\n        }\n\n        var offset = 0;\n        var pt = [];\n\n        for (var i = params.start; i < params.end; i++) {\n          var len = seriesModel.getLineCoords(i, lineCoords);\n\n          if (isPolyline) {\n            points[offset++] = len;\n          }\n\n          for (var k = 0; k < len; k++) {\n            pt = coordSys.dataToPoint(lineCoords[k], false, pt);\n            points[offset++] = pt[0];\n            points[offset++] = pt[1];\n          }\n        }\n\n        lineData.setLayout('linesPoints', points);\n      } else {\n        for (var i = params.start; i < params.end; i++) {\n          var itemModel = lineData.getItemModel(i);\n          var len = seriesModel.getLineCoords(i, lineCoords);\n          var pts = [];\n\n          if (isPolyline) {\n            for (var j = 0; j < len; j++) {\n              pts.push(coordSys.dataToPoint(lineCoords[j]));\n            }\n          } else {\n            pts[0] = coordSys.dataToPoint(lineCoords[0]);\n            pts[1] = coordSys.dataToPoint(lineCoords[1]);\n            var curveness = itemModel.get('lineStyle.curveness');\n\n            if (+curveness) {\n              pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness];\n            }\n          }\n\n          lineData.setItemLayout(i, pts);\n        }\n      }\n    }\n\n    return {\n      progress: progress\n    };\n  }\n};\nmodule.exports = _default;","\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* 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*/\nfunction normalize(a) {\n  if (!(a instanceof Array)) {\n    a = [a, a];\n  }\n\n  return a;\n}\n\nvar opacityQuery = 'lineStyle.opacity'.split('.');\nvar _default = {\n  seriesType: 'lines',\n  reset: function (seriesModel, ecModel, api) {\n    var symbolType = normalize(seriesModel.get('symbol'));\n    var symbolSize = normalize(seriesModel.get('symbolSize'));\n    var data = seriesModel.getData();\n    data.setVisual('fromSymbol', symbolType && symbolType[0]);\n    data.setVisual('toSymbol', symbolType && symbolType[1]);\n    data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n    data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n    data.setVisual('opacity', seriesModel.get(opacityQuery));\n\n    function dataEach(data, idx) {\n      var itemModel = data.getItemModel(idx);\n      var symbolType = normalize(itemModel.getShallow('symbol', true));\n      var symbolSize = normalize(itemModel.getShallow('symbolSize', true));\n      var opacity = itemModel.get(opacityQuery);\n      symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);\n      symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);\n      symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);\n      symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);\n      data.setItemVisual(idx, 'opacity', opacity);\n    }\n\n    return {\n      dataEach: data.hasItemOption ? dataEach : null\n    };\n  }\n};\nmodule.exports = _default;","\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\nvar echarts = require(\"../echarts\");\n\nrequire(\"./map/MapSeries\");\n\nrequire(\"./map/MapView\");\n\nrequire(\"../action/geoRoam\");\n\nrequire(\"../coord/geo/geoCreator\");\n\nvar mapSymbolLayout = require(\"./map/mapSymbolLayout\");\n\nvar mapVisual = require(\"./map/mapVisual\");\n\nvar mapDataStatistic = require(\"./map/mapDataStatistic\");\n\nvar backwardCompat = require(\"./map/backwardCompat\");\n\nvar createDataSelectAction = require(\"../action/createDataSelectAction\");\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*/\necharts.registerLayout(mapSymbolLayout);\necharts.registerVisual(mapVisual);\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);\necharts.registerPreprocessor(backwardCompat);\ncreateDataSelectAction('map', [{\n  type: 'mapToggleSelect',\n  event: 'mapselectchanged',\n  method: 'toggleSelected'\n}, {\n  type: 'mapSelect',\n  event: 'mapselected',\n  method: 'select'\n}, {\n  type: 'mapUnSelect',\n  event: 'mapunselected',\n  method: 'unSelect'\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar addCommas = _format.addCommas;\n\nvar dataSelectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar _dataProvider = require(\"../../data/helper/dataProvider\");\n\nvar retrieveRawAttr = _dataProvider.retrieveRawAttr;\n\nvar geoSourceManager = require(\"../../coord/geo/geoSourceManager\");\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;\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*/\nvar MapSeries = SeriesModel.extend({\n  type: 'series.map',\n  dependencies: ['geo'],\n  layoutMode: 'box',\n\n  /**\n   * Only first map series of same mapType will drawMap\n   * @type {boolean}\n   */\n  needsDrawMap: false,\n\n  /**\n   * Group of all map series with same mapType\n   * @type {boolean}\n   */\n  seriesGroup: [],\n  getInitialData: function (option) {\n    var data = createListSimply(this, {\n      coordDimensions: ['value'],\n      encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n    });\n    var valueDim = data.mapDimension('value');\n    var dataNameMap = zrUtil.createHashMap();\n    var selectTargetList = [];\n    var toAppendNames = [];\n\n    for (var i = 0, len = data.count(); i < len; i++) {\n      var name = data.getName(i);\n      dataNameMap.set(name, true);\n      selectTargetList.push({\n        name: name,\n        value: data.get(valueDim, i),\n        selected: retrieveRawAttr(data, i, 'selected')\n      });\n    }\n\n    var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty);\n    zrUtil.each(geoSource.regions, function (region) {\n      var name = region.name;\n\n      if (!dataNameMap.get(name)) {\n        selectTargetList.push({\n          name: name\n        });\n        toAppendNames.push(name);\n      }\n    });\n    this.updateSelectedMap(selectTargetList); // Complete data with missing regions. The consequent processes (like visual\n    // map and render) can not be performed without a \"full data\". For example,\n    // find `dataIndex` by name.\n\n    data.appendValues([], toAppendNames);\n    return data;\n  },\n\n  /**\n   * If no host geo model, return null, which means using a\n   * inner exclusive geo model.\n   */\n  getHostGeoModel: function () {\n    var geoIndex = this.option.geoIndex;\n    return geoIndex != null ? this.dependentModels.geo[geoIndex] : null;\n  },\n  getMapType: function () {\n    return (this.getHostGeoModel() || this).option.map;\n  },\n  // _fillOption: function (option, mapName) {\n  // Shallow clone\n  // option = zrUtil.extend({}, option);\n  // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);\n  // return option;\n  // },\n  getRawValue: function (dataIndex) {\n    // Use value stored in data instead because it is calculated from multiple series\n    // FIXME Provide all value of multiple series ?\n    var data = this.getData();\n    return data.get(data.mapDimension('value'), dataIndex);\n  },\n\n  /**\n   * Get model of region\n   * @param  {string} name\n   * @return {module:echarts/model/Model}\n   */\n  getRegionModel: function (regionName) {\n    var data = this.getData();\n    return data.getItemModel(data.indexOfName(regionName));\n  },\n\n  /**\n   * Map tooltip formatter\n   *\n   * @param {number} dataIndex\n   */\n  formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {\n    // FIXME orignalData and data is a bit confusing\n    var data = this.getData();\n    var formattedValue = addCommas(this.getRawValue(dataIndex));\n    var name = data.getName(dataIndex);\n    var seriesGroup = this.seriesGroup;\n    var seriesNames = [];\n\n    for (var i = 0; i < seriesGroup.length; i++) {\n      var otherIndex = seriesGroup[i].originalData.indexOfName(name);\n      var valueDim = data.mapDimension('value');\n\n      if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {\n        seriesNames.push(encodeHTML(seriesGroup[i].name));\n      }\n    }\n\n    var newLine = renderMode === 'html' ? '<br/>' : '\\n';\n    return seriesNames.join(', ') + newLine + encodeHTML(name + ' : ' + formattedValue);\n  },\n\n  /**\n   * @implement\n   */\n  getTooltipPosition: function (dataIndex) {\n    if (dataIndex != null) {\n      var name = this.getData().getName(dataIndex);\n      var geo = this.coordinateSystem;\n      var region = geo.getRegion(name);\n      return region && geo.dataToPoint(region.center);\n    }\n  },\n  setZoom: function (zoom) {\n    this.option.zoom = zoom;\n  },\n  setCenter: function (center) {\n    this.option.center = center;\n  },\n  defaultOption: {\n    // 一级层叠\n    zlevel: 0,\n    // 二级层叠\n    z: 2,\n    coordinateSystem: 'geo',\n    // map should be explicitly specified since ec3.\n    map: '',\n    // If `geoIndex` is not specified, a exclusive geo will be\n    // created. Otherwise use the specified geo component, and\n    // `map` and `mapType` are ignored.\n    // geoIndex: 0,\n    // 'center' | 'left' | 'right' | 'x%' | {number}\n    left: 'center',\n    // 'center' | 'top' | 'bottom' | 'x%' | {number}\n    top: 'center',\n    // right\n    // bottom\n    // width:\n    // height\n    // Aspect is width / height. Inited to be geoJson bbox aspect\n    // This parameter is used for scale this aspect\n    aspectScale: 0.75,\n    ///// Layout with center and size\n    // If you wan't to put map in a fixed size box with right aspect ratio\n    // This two properties may more conveninet\n    // layoutCenter: [50%, 50%]\n    // layoutSize: 100\n    // 数值合并方式,默认加和,可选为:\n    // 'sum' | 'average' | 'max' | 'min'\n    // mapValueCalculation: 'sum',\n    // 地图数值计算结果小数精度\n    // mapValuePrecision: 0,\n    // 显示图例颜色标识(系列标识的小圆点),图例开启时有效\n    showLegendSymbol: true,\n    // 选择模式,默认关闭,可选single,multiple\n    // selectedMode: false,\n    dataRangeHoverLink: true,\n    // 是否开启缩放及漫游模式\n    // roam: false,\n    // Define left-top, right-bottom coords to control view\n    // For example, [ [180, 90], [-180, -90] ],\n    // higher priority than center and zoom\n    boundingCoords: null,\n    // Default on center of map\n    center: null,\n    zoom: 1,\n    scaleLimit: null,\n    label: {\n      show: false,\n      color: '#000'\n    },\n    // scaleLimit: null,\n    itemStyle: {\n      borderWidth: 0.5,\n      borderColor: '#444',\n      areaColor: '#eee'\n    },\n    emphasis: {\n      label: {\n        show: true,\n        color: 'rgb(100,0,0)'\n      },\n      itemStyle: {\n        areaColor: 'rgba(255,215,0,0.8)'\n      }\n    },\n    nameProperty: 'name'\n  }\n});\nzrUtil.mixin(MapSeries, dataSelectableMixin);\nvar _default = MapSeries;\nmodule.exports = _default;","\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\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar MapDraw = require(\"../../component/helper/MapDraw\");\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*/\nvar HIGH_DOWN_PROP = '__seriesMapHighDown';\nvar RECORD_VERSION_PROP = '__seriesMapCallKey';\n\nvar _default = echarts.extendChartView({\n  type: 'map',\n  render: function (mapModel, ecModel, api, payload) {\n    // Not render if it is an toggleSelect action from self\n    if (payload && payload.type === 'mapToggleSelect' && payload.from === this.uid) {\n      return;\n    }\n\n    var group = this.group;\n    group.removeAll();\n\n    if (mapModel.getHostGeoModel()) {\n      return;\n    } // Not update map if it is an roam action from self\n\n\n    if (!(payload && payload.type === 'geoRoam' && payload.componentType === 'series' && payload.seriesId === mapModel.id)) {\n      if (mapModel.needsDrawMap) {\n        var mapDraw = this._mapDraw || new MapDraw(api, true);\n        group.add(mapDraw.group);\n        mapDraw.draw(mapModel, ecModel, api, this, payload);\n        this._mapDraw = mapDraw;\n      } else {\n        // Remove drawed map\n        this._mapDraw && this._mapDraw.remove();\n        this._mapDraw = null;\n      }\n    } else {\n      var mapDraw = this._mapDraw;\n      mapDraw && group.add(mapDraw.group);\n    }\n\n    mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') && this._renderSymbols(mapModel, ecModel, api);\n  },\n  remove: function () {\n    this._mapDraw && this._mapDraw.remove();\n    this._mapDraw = null;\n    this.group.removeAll();\n  },\n  dispose: function () {\n    this._mapDraw && this._mapDraw.remove();\n    this._mapDraw = null;\n  },\n  _renderSymbols: function (mapModel, ecModel, api) {\n    var originalData = mapModel.originalData;\n    var group = this.group;\n    originalData.each(originalData.mapDimension('value'), function (value, originalDataIndex) {\n      if (isNaN(value)) {\n        return;\n      }\n\n      var layout = originalData.getItemLayout(originalDataIndex);\n\n      if (!layout || !layout.point) {\n        // Not exists in map\n        return;\n      }\n\n      var point = layout.point;\n      var offset = layout.offset;\n      var circle = new graphic.Circle({\n        style: {\n          // Because the special of map draw.\n          // Which needs statistic of multiple series and draw on one map.\n          // And each series also need a symbol with legend color\n          //\n          // Layout and visual are put one the different data\n          fill: mapModel.getData().getVisual('color')\n        },\n        shape: {\n          cx: point[0] + offset * 9,\n          cy: point[1],\n          r: 3\n        },\n        silent: true,\n        // Do not overlap the first series, on which labels are displayed.\n        z2: 8 + (!offset ? graphic.Z2_EMPHASIS_LIFT + 1 : 0)\n      }); // Only the series that has the first value on the same region is in charge of rendering the label.\n      // But consider the case:\n      // series: [\n      //     {id: 'X', type: 'map', map: 'm', {data: [{name: 'A', value: 11}, {name: 'B', {value: 22}]},\n      //     {id: 'Y', type: 'map', map: 'm', {data: [{name: 'A', value: 21}, {name: 'C', {value: 33}]}\n      // ]\n      // The offset `0` of item `A` is at series `X`, but of item `C` is at series `Y`.\n      // For backward compatibility, we follow the rule that render label `A` by the\n      // settings on series `X` but render label `C` by the settings on series `Y`.\n\n      if (!offset) {\n        var fullData = mapModel.mainSeries.getData();\n        var name = originalData.getName(originalDataIndex);\n        var fullIndex = fullData.indexOfName(name);\n        var itemModel = originalData.getItemModel(originalDataIndex);\n        var labelModel = itemModel.getModel('label');\n        var hoverLabelModel = itemModel.getModel('emphasis.label');\n        var regionGroup = fullData.getItemGraphicEl(fullIndex); // `getFormattedLabel` needs to use `getData` inside. Here\n        // `mapModel.getData()` is shallow cloned from `mainSeries.getData()`.\n        // FIXME\n        // If this is not the `mainSeries`, the item model (like label formatter)\n        // set on original data item will never get. But it has been working\n        // like that from the begining, and this scenario is rarely encountered.\n        // So it won't be fixed until have to.\n\n        var normalText = zrUtil.retrieve2(mapModel.getFormattedLabel(fullIndex, 'normal'), name);\n        var emphasisText = zrUtil.retrieve2(mapModel.getFormattedLabel(fullIndex, 'emphasis'), normalText);\n        var highDownRecord = regionGroup[HIGH_DOWN_PROP];\n        var recordVersion = Math.random(); // Prevent from register listeners duplicatedly when roaming.\n\n        if (!highDownRecord) {\n          highDownRecord = regionGroup[HIGH_DOWN_PROP] = {};\n          var onEmphasis = zrUtil.curry(onRegionHighDown, true);\n          var onNormal = zrUtil.curry(onRegionHighDown, false);\n          regionGroup.on('mouseover', onEmphasis).on('mouseout', onNormal).on('emphasis', onEmphasis).on('normal', onNormal);\n        } // Prevent removed regions effect current grapics.\n\n\n        regionGroup[RECORD_VERSION_PROP] = recordVersion;\n        zrUtil.extend(highDownRecord, {\n          recordVersion: recordVersion,\n          circle: circle,\n          labelModel: labelModel,\n          hoverLabelModel: hoverLabelModel,\n          emphasisText: emphasisText,\n          normalText: normalText\n        }); // FIXME\n        // Consider set option when emphasis.\n\n        enterRegionHighDown(highDownRecord, false);\n      }\n\n      group.add(circle);\n    });\n  }\n});\n\nfunction onRegionHighDown(toHighOrDown) {\n  var highDownRecord = this[HIGH_DOWN_PROP];\n\n  if (highDownRecord && highDownRecord.recordVersion === this[RECORD_VERSION_PROP]) {\n    enterRegionHighDown(highDownRecord, toHighOrDown);\n  }\n}\n\nfunction enterRegionHighDown(highDownRecord, toHighOrDown) {\n  var circle = highDownRecord.circle;\n  var labelModel = highDownRecord.labelModel;\n  var hoverLabelModel = highDownRecord.hoverLabelModel;\n  var emphasisText = highDownRecord.emphasisText;\n  var normalText = highDownRecord.normalText;\n\n  if (toHighOrDown) {\n    circle.style.extendFrom(graphic.setTextStyle({}, hoverLabelModel, {\n      text: hoverLabelModel.get('show') ? emphasisText : null\n    }, {\n      isRectText: true,\n      useInsideStyle: false\n    }, true)); // Make label upper than others if overlaps.\n\n    circle.__mapOriginalZ2 = circle.z2;\n    circle.z2 += graphic.Z2_EMPHASIS_LIFT;\n  } else {\n    graphic.setTextStyle(circle.style, labelModel, {\n      text: labelModel.get('show') ? normalText : null,\n      textPosition: labelModel.getShallow('position') || 'bottom'\n    }, {\n      isRectText: true,\n      useInsideStyle: false\n    }); // Trigger normalize style like padding.\n\n    circle.dirty(false);\n\n    if (circle.__mapOriginalZ2 != null) {\n      circle.z2 = circle.__mapOriginalZ2;\n      circle.__mapOriginalZ2 = null;\n    }\n  }\n}\n\nmodule.exports = _default;","\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\nvar zrUtil = require(\"zrender/lib/core/util\");\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*/\nfunction _default(option) {\n  // Save geoCoord\n  var mapSeries = [];\n  zrUtil.each(option.series, function (seriesOpt) {\n    if (seriesOpt && seriesOpt.type === 'map') {\n      mapSeries.push(seriesOpt);\n      seriesOpt.map = seriesOpt.map || seriesOpt.mapType; // Put x, y, width, height, x2, y2 in the top level\n\n      zrUtil.defaults(seriesOpt, seriesOpt.mapLocation);\n    }\n  });\n}\n\nmodule.exports = _default;","\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\nvar zrUtil = require(\"zrender/lib/core/util\");\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// FIXME 公用?\n\n/**\n * @param {Array.<module:echarts/data/List>} datas\n * @param {string} statisticType 'average' 'sum'\n * @inner\n */\nfunction dataStatistics(datas, statisticType) {\n  var dataNameMap = {};\n  zrUtil.each(datas, function (data) {\n    data.each(data.mapDimension('value'), function (value, idx) {\n      // Add prefix to avoid conflict with Object.prototype.\n      var mapKey = 'ec-' + data.getName(idx);\n      dataNameMap[mapKey] = dataNameMap[mapKey] || [];\n\n      if (!isNaN(value)) {\n        dataNameMap[mapKey].push(value);\n      }\n    });\n  });\n  return datas[0].map(datas[0].mapDimension('value'), function (value, idx) {\n    var mapKey = 'ec-' + datas[0].getName(idx);\n    var sum = 0;\n    var min = Infinity;\n    var max = -Infinity;\n    var len = dataNameMap[mapKey].length;\n\n    for (var i = 0; i < len; i++) {\n      min = Math.min(min, dataNameMap[mapKey][i]);\n      max = Math.max(max, dataNameMap[mapKey][i]);\n      sum += dataNameMap[mapKey][i];\n    }\n\n    var result;\n\n    if (statisticType === 'min') {\n      result = min;\n    } else if (statisticType === 'max') {\n      result = max;\n    } else if (statisticType === 'average') {\n      result = sum / len;\n    } else {\n      result = sum;\n    }\n\n    return len === 0 ? NaN : result;\n  });\n}\n\nfunction _default(ecModel) {\n  var seriesGroups = {};\n  ecModel.eachSeriesByType('map', function (seriesModel) {\n    var hostGeoModel = seriesModel.getHostGeoModel();\n    var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();\n    (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);\n  });\n  zrUtil.each(seriesGroups, function (seriesList, key) {\n    var data = dataStatistics(zrUtil.map(seriesList, function (seriesModel) {\n      return seriesModel.getData();\n    }), seriesList[0].get('mapValueCalculation'));\n\n    for (var i = 0; i < seriesList.length; i++) {\n      seriesList[i].originalData = seriesList[i].getData();\n    } // FIXME Put where?\n\n\n    for (var i = 0; i < seriesList.length; i++) {\n      seriesList[i].seriesGroup = seriesList;\n      seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();\n      seriesList[i].setData(data.cloneShallow());\n      seriesList[i].mainSeries = seriesList[0];\n    }\n  });\n}\n\nmodule.exports = _default;","\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\nvar zrUtil = require(\"zrender/lib/core/util\");\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*/\nfunction _default(ecModel) {\n  var processedMapType = {};\n  ecModel.eachSeriesByType('map', function (mapSeries) {\n    var mapType = mapSeries.getMapType();\n\n    if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {\n      return;\n    }\n\n    var mapSymbolOffsets = {};\n    zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {\n      var geo = subMapSeries.coordinateSystem;\n      var data = subMapSeries.originalData;\n\n      if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {\n        data.each(data.mapDimension('value'), function (value, idx) {\n          var name = data.getName(idx);\n          var region = geo.getRegion(name); // If input series.data is [11, 22, '-'/null/undefined, 44],\n          // it will be filled with NaN: [11, 22, NaN, 44] and NaN will\n          // not be drawn. So here must validate if value is NaN.\n\n          if (!region || isNaN(value)) {\n            return;\n          }\n\n          var offset = mapSymbolOffsets[name] || 0;\n          var point = geo.dataToPoint(region.center);\n          mapSymbolOffsets[name] = offset + 1;\n          data.setItemLayout(idx, {\n            point: point,\n            offset: offset\n          });\n        });\n      }\n    }); // Show label of those region not has legendSymbol(which is offset 0)\n\n    var data = mapSeries.getData();\n    data.each(function (idx) {\n      var name = data.getName(idx);\n      var layout = data.getItemLayout(idx) || {};\n      layout.showLabel = !mapSymbolOffsets[name];\n      data.setItemLayout(idx, layout);\n    });\n    processedMapType[mapType] = true;\n  });\n}\n\nmodule.exports = _default;","\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* 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*/\nfunction _default(ecModel) {\n  ecModel.eachSeriesByType('map', function (seriesModel) {\n    var colorList = seriesModel.get('color');\n    var itemStyleModel = seriesModel.getModel('itemStyle');\n    var areaColor = itemStyleModel.get('areaColor');\n    var color = itemStyleModel.get('color') || colorList[seriesModel.seriesIndex % colorList.length];\n    seriesModel.getData().setVisual({\n      'areaColor': areaColor,\n      'color': color\n    });\n  });\n}\n\nmodule.exports = _default;","\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\nvar echarts = require(\"../echarts\");\n\nrequire(\"../component/parallel\");\n\nrequire(\"./parallel/ParallelSeries\");\n\nrequire(\"./parallel/ParallelView\");\n\nvar parallelVisual = require(\"./parallel/parallelVisual\");\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*/\necharts.registerVisual(parallelVisual);","\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\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar createHashMap = _util.createHashMap;\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\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*/\nvar _default = SeriesModel.extend({\n  type: 'series.parallel',\n  dependencies: ['parallel'],\n  visualColorAccessPath: 'lineStyle.color',\n  getInitialData: function (option, ecModel) {\n    var source = this.getSource();\n    setEncodeAndDimensions(source, this);\n    return createListFromArray(source, this);\n  },\n\n  /**\n   * User can get data raw indices on 'axisAreaSelected' event received.\n   *\n   * @public\n   * @param {string} activeState 'active' or 'inactive' or 'normal'\n   * @return {Array.<number>} Raw indices\n   */\n  getRawIndicesByActiveState: function (activeState) {\n    var coordSys = this.coordinateSystem;\n    var data = this.getData();\n    var indices = [];\n    coordSys.eachActiveState(data, function (theActiveState, dataIndex) {\n      if (activeState === theActiveState) {\n        indices.push(data.getRawIndex(dataIndex));\n      }\n    });\n    return indices;\n  },\n  defaultOption: {\n    zlevel: 0,\n    // 一级层叠\n    z: 2,\n    // 二级层叠\n    coordinateSystem: 'parallel',\n    parallelIndex: 0,\n    label: {\n      show: false\n    },\n    inactiveOpacity: 0.05,\n    activeOpacity: 1,\n    lineStyle: {\n      width: 1,\n      opacity: 0.45,\n      type: 'solid'\n    },\n    emphasis: {\n      label: {\n        show: false\n      }\n    },\n    progressive: 500,\n    smooth: false,\n    // true | false | number\n    animationEasing: 'linear'\n  }\n});\n\nfunction setEncodeAndDimensions(source, seriesModel) {\n  // The mapping of parallelAxis dimension to data dimension can\n  // be specified in parallelAxis.option.dim. For example, if\n  // parallelAxis.option.dim is 'dim3', it mapping to the third\n  // dimension of data. But `data.encode` has higher priority.\n  // Moreover, parallelModel.dimension should not be regarded as data\n  // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6'];\n  if (source.encodeDefine) {\n    return;\n  }\n\n  var parallelModel = seriesModel.ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n\n  if (!parallelModel) {\n    return;\n  }\n\n  var encodeDefine = source.encodeDefine = createHashMap();\n  each(parallelModel.dimensions, function (axisDim) {\n    var dataDimIndex = convertDimNameToNumber(axisDim);\n    encodeDefine.set(axisDim, dataDimIndex);\n  });\n}\n\nfunction convertDimNameToNumber(dimName) {\n  return +dimName.replace('dim', '');\n}\n\nmodule.exports = _default;","\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\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\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*/\nvar DEFAULT_SMOOTH = 0.3;\nvar ParallelView = ChartView.extend({\n  type: 'parallel',\n  init: function () {\n    /**\n     * @type {module:zrender/container/Group}\n     * @private\n     */\n    this._dataGroup = new graphic.Group();\n    this.group.add(this._dataGroup);\n    /**\n     * @type {module:echarts/data/List}\n     */\n\n    this._data;\n    /**\n     * @type {boolean}\n     */\n\n    this._initialized;\n  },\n\n  /**\n   * @override\n   */\n  render: function (seriesModel, ecModel, api, payload) {\n    var dataGroup = this._dataGroup;\n    var data = seriesModel.getData();\n    var oldData = this._data;\n    var coordSys = seriesModel.coordinateSystem;\n    var dimensions = coordSys.dimensions;\n    var seriesScope = makeSeriesScope(seriesModel);\n    data.diff(oldData).add(add).update(update).remove(remove).execute();\n\n    function add(newDataIndex) {\n      var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);\n      updateElCommon(line, data, newDataIndex, seriesScope);\n    }\n\n    function update(newDataIndex, oldDataIndex) {\n      var line = oldData.getItemGraphicEl(oldDataIndex);\n      var points = createLinePoints(data, newDataIndex, dimensions, coordSys);\n      data.setItemGraphicEl(newDataIndex, line);\n      var animationModel = payload && payload.animation === false ? null : seriesModel;\n      graphic.updateProps(line, {\n        shape: {\n          points: points\n        }\n      }, animationModel, newDataIndex);\n      updateElCommon(line, data, newDataIndex, seriesScope);\n    }\n\n    function remove(oldDataIndex) {\n      var line = oldData.getItemGraphicEl(oldDataIndex);\n      dataGroup.remove(line);\n    } // First create\n\n\n    if (!this._initialized) {\n      this._initialized = true;\n      var clipPath = createGridClipShape(coordSys, seriesModel, function () {\n        // Callback will be invoked immediately if there is no animation\n        setTimeout(function () {\n          dataGroup.removeClipPath();\n        });\n      });\n      dataGroup.setClipPath(clipPath);\n    }\n\n    this._data = data;\n  },\n  incrementalPrepareRender: function (seriesModel, ecModel, api) {\n    this._initialized = true;\n    this._data = null;\n\n    this._dataGroup.removeAll();\n  },\n  incrementalRender: function (taskParams, seriesModel, ecModel) {\n    var data = seriesModel.getData();\n    var coordSys = seriesModel.coordinateSystem;\n    var dimensions = coordSys.dimensions;\n    var seriesScope = makeSeriesScope(seriesModel);\n\n    for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {\n      var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);\n      line.incremental = true;\n      updateElCommon(line, data, dataIndex, seriesScope);\n    }\n  },\n  dispose: function () {},\n  // _renderForProgressive: function (seriesModel) {\n  //     var dataGroup = this._dataGroup;\n  //     var data = seriesModel.getData();\n  //     var oldData = this._data;\n  //     var coordSys = seriesModel.coordinateSystem;\n  //     var dimensions = coordSys.dimensions;\n  //     var option = seriesModel.option;\n  //     var progressive = option.progressive;\n  //     var smooth = option.smooth ? SMOOTH : null;\n  //     // In progressive animation is disabled, so use simple data diff,\n  //     // which effects performance less.\n  //     // (Typically performance for data with length 7000+ like:\n  //     // simpleDiff: 60ms, addEl: 184ms,\n  //     // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit))\n  //     if (simpleDiff(oldData, data, dimensions)) {\n  //         dataGroup.removeAll();\n  //         data.each(function (dataIndex) {\n  //             addEl(data, dataGroup, dataIndex, dimensions, coordSys);\n  //         });\n  //     }\n  //     updateElCommon(data, progressive, smooth);\n  //     // Consider switch between progressive and not.\n  //     data.__plProgressive = true;\n  //     this._data = data;\n  // },\n\n  /**\n   * @override\n   */\n  remove: function () {\n    this._dataGroup && this._dataGroup.removeAll();\n    this._data = null;\n  }\n});\n\nfunction createGridClipShape(coordSys, seriesModel, cb) {\n  var parallelModel = coordSys.model;\n  var rect = coordSys.getRect();\n  var rectEl = new graphic.Rect({\n    shape: {\n      x: rect.x,\n      y: rect.y,\n      width: rect.width,\n      height: rect.height\n    }\n  });\n  var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';\n  rectEl.setShape(dim, 0);\n  graphic.initProps(rectEl, {\n    shape: {\n      width: rect.width,\n      height: rect.height\n    }\n  }, seriesModel, cb);\n  return rectEl;\n}\n\nfunction createLinePoints(data, dataIndex, dimensions, coordSys) {\n  var points = [];\n\n  for (var i = 0; i < dimensions.length; i++) {\n    var dimName = dimensions[i];\n    var value = data.get(data.mapDimension(dimName), dataIndex);\n\n    if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {\n      points.push(coordSys.dataToPoint(value, dimName));\n    }\n  }\n\n  return points;\n}\n\nfunction addEl(data, dataGroup, dataIndex, dimensions, coordSys) {\n  var points = createLinePoints(data, dataIndex, dimensions, coordSys);\n  var line = new graphic.Polyline({\n    shape: {\n      points: points\n    },\n    silent: true,\n    z2: 10\n  });\n  dataGroup.add(line);\n  data.setItemGraphicEl(dataIndex, line);\n  return line;\n}\n\nfunction makeSeriesScope(seriesModel) {\n  var smooth = seriesModel.get('smooth', true);\n  smooth === true && (smooth = DEFAULT_SMOOTH);\n  return {\n    lineStyle: seriesModel.getModel('lineStyle').getLineStyle(),\n    smooth: smooth != null ? smooth : DEFAULT_SMOOTH\n  };\n}\n\nfunction updateElCommon(el, data, dataIndex, seriesScope) {\n  var lineStyle = seriesScope.lineStyle;\n\n  if (data.hasItemOption) {\n    var lineStyleModel = data.getItemModel(dataIndex).getModel('lineStyle');\n    lineStyle = lineStyleModel.getLineStyle();\n  }\n\n  el.useStyle(lineStyle);\n  var elStyle = el.style;\n  elStyle.fill = null; // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.\n\n  elStyle.stroke = data.getItemVisual(dataIndex, 'color'); // lineStyle.opacity have been set to itemVisual in parallelVisual.\n\n  elStyle.opacity = data.getItemVisual(dataIndex, 'opacity');\n  seriesScope.smooth && (el.shape.smooth = seriesScope.smooth);\n} // function simpleDiff(oldData, newData, dimensions) {\n//     var oldLen;\n//     if (!oldData\n//         || !oldData.__plProgressive\n//         || (oldLen = oldData.count()) !== newData.count()\n//     ) {\n//         return true;\n//     }\n//     var dimLen = dimensions.length;\n//     for (var i = 0; i < oldLen; i++) {\n//         for (var j = 0; j < dimLen; j++) {\n//             if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {\n//                 return true;\n//             }\n//         }\n//     }\n//     return false;\n// }\n// FIXME\n// 公用方法?\n\n\nfunction isEmptyValue(val, axisType) {\n  return axisType === 'category' ? val == null : val == null || isNaN(val); // axisType === 'value'\n}\n\nvar _default = ParallelView;\nmodule.exports = _default;","\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* 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*/\nvar opacityAccessPath = ['lineStyle', 'normal', 'opacity'];\nvar _default = {\n  seriesType: 'parallel',\n  reset: function (seriesModel, ecModel, api) {\n    var itemStyleModel = seriesModel.getModel('itemStyle');\n    var lineStyleModel = seriesModel.getModel('lineStyle');\n    var globalColors = ecModel.get('color');\n    var color = lineStyleModel.get('color') || itemStyleModel.get('color') || globalColors[seriesModel.seriesIndex % globalColors.length];\n    var inactiveOpacity = seriesModel.get('inactiveOpacity');\n    var activeOpacity = seriesModel.get('activeOpacity');\n    var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();\n    var coordSys = seriesModel.coordinateSystem;\n    var data = seriesModel.getData();\n    var opacityMap = {\n      normal: lineStyle.opacity,\n      active: activeOpacity,\n      inactive: inactiveOpacity\n    };\n    data.setVisual('color', color);\n\n    function progress(params, data) {\n      coordSys.eachActiveState(data, function (activeState, dataIndex) {\n        var opacity = opacityMap[activeState];\n\n        if (activeState === 'normal' && data.hasItemOption) {\n          var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath, true);\n          itemOpacity != null && (opacity = itemOpacity);\n        }\n\n        data.setItemVisual(dataIndex, 'opacity', opacity);\n      }, params.start, params.end);\n    }\n\n    return {\n      progress: progress\n    };\n  }\n};\nmodule.exports = _default;","\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\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./bar/PictorialBarSeries\");\n\nrequire(\"./bar/PictorialBarView\");\n\nvar _barGrid = require(\"../layout/barGrid\");\n\nvar layout = _barGrid.layout;\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nrequire(\"../component/gridSimple\");\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// In case developer forget to include grid component\necharts.registerLayout(zrUtil.curry(layout, 'pictorialBar'));\necharts.registerVisual(visualSymbol('pictorialBar', 'roundRect'));","\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\nvar echarts = require(\"../../echarts\");\n\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _number = require(\"../../util/number\");\n\nvar getPercentWithPrecision = _number.getPercentWithPrecision;\n\nvar dataSelectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar _dataProvider = require(\"../../data/helper/dataProvider\");\n\nvar retrieveRawAttr = _dataProvider.retrieveRawAttr;\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;\n\nvar LegendVisualProvider = require(\"../../visual/LegendVisualProvider\");\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*/\nvar PieSeries = echarts.extendSeriesModel({\n  type: 'series.pie',\n  // Overwrite\n  init: function (option) {\n    PieSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n    // Use a function instead of direct access because data reference may changed\n\n    this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n    this.updateSelectedMap(this._createSelectableList());\n\n    this._defaultLabelLine(option);\n  },\n  // Overwrite\n  mergeOption: function (newOption) {\n    PieSeries.superCall(this, 'mergeOption', newOption);\n    this.updateSelectedMap(this._createSelectableList());\n  },\n  getInitialData: function (option, ecModel) {\n    return createListSimply(this, {\n      coordDimensions: ['value'],\n      encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n    });\n  },\n  _createSelectableList: function () {\n    var data = this.getRawData();\n    var valueDim = data.mapDimension('value');\n    var targetList = [];\n\n    for (var i = 0, len = data.count(); i < len; i++) {\n      targetList.push({\n        name: data.getName(i),\n        value: data.get(valueDim, i),\n        selected: retrieveRawAttr(data, i, 'selected')\n      });\n    }\n\n    return targetList;\n  },\n  // Overwrite\n  getDataParams: function (dataIndex) {\n    var data = this.getData();\n    var params = PieSeries.superCall(this, 'getDataParams', dataIndex); // FIXME toFixed?\n\n    var valueList = [];\n    data.each(data.mapDimension('value'), function (value) {\n      valueList.push(value);\n    });\n    params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision'));\n    params.$vars.push('percent');\n    return params;\n  },\n  _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  defaultOption: {\n    zlevel: 0,\n    z: 2,\n    legendHoverLink: true,\n    hoverAnimation: true,\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    // 高亮扇区偏移量\n    hoverOffset: 10,\n    // If use strategy to avoid label overlapping\n    avoidLabelOverlap: true,\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      // If rotate around circle\n      rotate: false,\n      show: true,\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      margin: '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      lineStyle: {\n        // color: 各异,\n        width: 1,\n        type: 'solid'\n      }\n    },\n    itemStyle: {\n      borderWidth: 1\n    },\n    // Animation type. Valid values: expansion, scale\n    animationType: 'expansion',\n    // Animation type when update. Valid values: transition, expansion\n    animationTypeUpdate: 'transition',\n    animationEasing: 'cubicOut'\n  }\n});\nzrUtil.mixin(PieSeries, dataSelectableMixin);\nvar _default = PieSeries;\nmodule.exports = _default;","\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\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 * @param {module:echarts/model/Series} seriesModel\n * @param {boolean} hasAnimation\n * @inner\n */\nfunction updateDataSelected(uid, seriesModel, hasAnimation, api) {\n  var data = seriesModel.getData();\n  var dataIndex = this.dataIndex;\n  var name = data.getName(dataIndex);\n  var selectedOffset = seriesModel.get('selectedOffset');\n  api.dispatchAction({\n    type: 'pieToggleSelect',\n    from: uid,\n    name: name,\n    seriesId: seriesModel.id\n  });\n  data.each(function (idx) {\n    toggleItemSelected(data.getItemGraphicEl(idx), data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), selectedOffset, hasAnimation);\n  });\n}\n/**\n * @param {module:zrender/graphic/Sector} el\n * @param {Object} layout\n * @param {boolean} isSelected\n * @param {number} selectedOffset\n * @param {boolean} hasAnimation\n * @inner\n */\n\n\nfunction toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {\n  var midAngle = (layout.startAngle + layout.endAngle) / 2;\n  var dx = Math.cos(midAngle);\n  var dy = Math.sin(midAngle);\n  var offset = isSelected ? selectedOffset : 0;\n  var position = [dx * offset, dy * offset];\n  hasAnimation // animateTo will stop revious animation like update transition\n  ? el.animate().when(200, {\n    position: position\n  }).start('bounceOut') : el.attr('position', position);\n}\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\n\n\nfunction PiePiece(data, idx) {\n  graphic.Group.call(this);\n  var sector = new graphic.Sector({\n    z2: 2\n  });\n  var polyline = new graphic.Polyline();\n  var text = new graphic.Text();\n  this.add(sector);\n  this.add(polyline);\n  this.add(text);\n  this.updateData(data, idx, true);\n}\n\nvar piePieceProto = PiePiece.prototype;\n\npiePieceProto.updateData = function (data, idx, firstCreate) {\n  var sector = this.childAt(0);\n  var labelLine = this.childAt(1);\n  var labelText = this.childAt(2);\n  var seriesModel = data.hostModel;\n  var itemModel = data.getItemModel(idx);\n  var layout = data.getItemLayout(idx);\n  var sectorShape = zrUtil.extend({}, layout);\n  sectorShape.label = null;\n  var animationTypeUpdate = seriesModel.getShallow('animationTypeUpdate');\n\n  if (firstCreate) {\n    sector.setShape(sectorShape);\n    var animationType = seriesModel.getShallow('animationType');\n\n    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        sector.shape.endAngle = layout.startAngle;\n        graphic.updateProps(sector, {\n          shape: {\n            endAngle: layout.endAngle\n          }\n        }, seriesModel, idx);\n      }\n  } else {\n    if (animationTypeUpdate === 'expansion') {\n      // Sectors are set to be target shape and an overlaying clipPath is used for animation\n      sector.setShape(sectorShape);\n    } else {\n      // Transition animation from the old shape\n      graphic.updateProps(sector, {\n        shape: sectorShape\n      }, seriesModel, idx);\n    }\n  } // Update common style\n\n\n  var visualColor = data.getItemVisual(idx, 'color');\n  sector.useStyle(zrUtil.defaults({\n    lineJoin: 'bevel',\n    fill: visualColor\n  }, itemModel.getModel('itemStyle').getItemStyle()));\n  sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n  var cursorStyle = itemModel.getShallow('cursor');\n  cursorStyle && sector.attr('cursor', cursorStyle); // Toggle selected\n\n  toggleItemSelected(this, data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), seriesModel.get('selectedOffset'), seriesModel.get('animation')); // Label and text animation should be applied only for transition type animation when update\n\n  var withAnimation = !firstCreate && animationTypeUpdate === 'transition';\n\n  this._updateLabel(data, idx, withAnimation);\n\n  this.highDownOnUpdate = !seriesModel.get('silent') ? function (fromState, toState) {\n    var hasAnimation = seriesModel.isAnimationEnabled() && itemModel.get('hoverAnimation');\n\n    if (toState === 'emphasis') {\n      labelLine.ignore = labelLine.hoverIgnore;\n      labelText.ignore = labelText.hoverIgnore; // Sector may has animation of updating data. Force to move to the last frame\n      // Or it may stopped on the wrong shape\n\n      if (hasAnimation) {\n        sector.stopAnimation(true);\n        sector.animateTo({\n          shape: {\n            r: layout.r + seriesModel.get('hoverOffset')\n          }\n        }, 300, 'elasticOut');\n      }\n    } else {\n      labelLine.ignore = labelLine.normalIgnore;\n      labelText.ignore = labelText.normalIgnore;\n\n      if (hasAnimation) {\n        sector.stopAnimation(true);\n        sector.animateTo({\n          shape: {\n            r: layout.r\n          }\n        }, 300, 'elasticOut');\n      }\n    }\n  } : null;\n  graphic.setHoverStyle(this);\n};\n\npiePieceProto._updateLabel = function (data, idx, withAnimation) {\n  var labelLine = this.childAt(1);\n  var labelText = this.childAt(2);\n  var seriesModel = data.hostModel;\n  var itemModel = data.getItemModel(idx);\n  var layout = data.getItemLayout(idx);\n  var labelLayout = layout.label;\n  var visualColor = data.getItemVisual(idx, 'color');\n\n  if (!labelLayout || isNaN(labelLayout.x) || isNaN(labelLayout.y)) {\n    labelText.ignore = labelText.normalIgnore = labelText.hoverIgnore = labelLine.ignore = labelLine.normalIgnore = labelLine.hoverIgnore = true;\n    return;\n  }\n\n  var targetLineShape = {\n    points: labelLayout.linePoints || [[labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]]\n  };\n  var targetTextStyle = {\n    x: labelLayout.x,\n    y: labelLayout.y\n  };\n\n  if (withAnimation) {\n    graphic.updateProps(labelLine, {\n      shape: targetLineShape\n    }, seriesModel, idx);\n    graphic.updateProps(labelText, {\n      style: targetTextStyle\n    }, seriesModel, idx);\n  } else {\n    labelLine.attr({\n      shape: targetLineShape\n    });\n    labelText.attr({\n      style: targetTextStyle\n    });\n  }\n\n  labelText.attr({\n    rotation: labelLayout.rotation,\n    origin: [labelLayout.x, labelLayout.y],\n    z2: 10\n  });\n  var labelModel = itemModel.getModel('label');\n  var labelHoverModel = itemModel.getModel('emphasis.label');\n  var labelLineModel = itemModel.getModel('labelLine');\n  var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');\n  var visualColor = data.getItemVisual(idx, 'color');\n  graphic.setLabelStyle(labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, {\n    labelFetcher: data.hostModel,\n    labelDataIndex: idx,\n    defaultText: labelLayout.text,\n    autoColor: visualColor,\n    useInsideStyle: !!labelLayout.inside\n  }, {\n    textAlign: labelLayout.textAlign,\n    textVerticalAlign: labelLayout.verticalAlign,\n    opacity: data.getItemVisual(idx, 'opacity')\n  });\n  labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n  labelText.hoverIgnore = !labelHoverModel.get('show');\n  labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n  labelLine.hoverIgnore = !labelLineHoverModel.get('show'); // Default use item visual color\n\n  labelLine.setStyle({\n    stroke: visualColor,\n    opacity: data.getItemVisual(idx, 'opacity')\n  });\n  labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n  labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n  var smooth = labelLineModel.get('smooth');\n\n  if (smooth && smooth === true) {\n    smooth = 0.4;\n  }\n\n  labelLine.setShape({\n    smooth: smooth\n  });\n};\n\nzrUtil.inherits(PiePiece, graphic.Group); // Pie view\n\nvar PieView = ChartView.extend({\n  type: 'pie',\n  init: function () {\n    var sectorGroup = new graphic.Group();\n    this._sectorGroup = sectorGroup;\n  },\n  render: function (seriesModel, ecModel, api, payload) {\n    if (payload && payload.from === this.uid) {\n      return;\n    }\n\n    var data = seriesModel.getData();\n    var oldData = this._data;\n    var group = this.group;\n    var hasAnimation = ecModel.get('animation');\n    var isFirstRender = !oldData;\n    var animationType = seriesModel.get('animationType');\n    var animationTypeUpdate = seriesModel.get('animationTypeUpdate');\n    var onSectorClick = zrUtil.curry(updateDataSelected, this.uid, seriesModel, hasAnimation, api);\n    var selectedMode = seriesModel.get('selectedMode');\n    data.diff(oldData).add(function (idx) {\n      var piePiece = new PiePiece(data, idx); // Default expansion animation\n\n      if (isFirstRender && animationType !== 'scale') {\n        piePiece.eachChild(function (child) {\n          child.stopAnimation(true);\n        });\n      }\n\n      selectedMode && piePiece.on('click', onSectorClick);\n      data.setItemGraphicEl(idx, piePiece);\n      group.add(piePiece);\n    }).update(function (newIdx, oldIdx) {\n      var piePiece = oldData.getItemGraphicEl(oldIdx);\n\n      if (!isFirstRender && animationTypeUpdate !== 'transition') {\n        piePiece.eachChild(function (child) {\n          child.stopAnimation(true);\n        });\n      }\n\n      piePiece.updateData(data, newIdx);\n      piePiece.off('click');\n      selectedMode && piePiece.on('click', onSectorClick);\n      group.add(piePiece);\n      data.setItemGraphicEl(newIdx, piePiece);\n    }).remove(function (idx) {\n      var piePiece = oldData.getItemGraphicEl(idx);\n      group.remove(piePiece);\n    }).execute();\n\n    if (hasAnimation && data.count() > 0 && (isFirstRender ? animationType !== 'scale' : animationTypeUpdate !== 'transition')) {\n      var shape = data.getItemLayout(0);\n\n      for (var s = 1; isNaN(shape.startAngle) && s < data.count(); ++s) {\n        shape = data.getItemLayout(s);\n      }\n\n      var r = Math.max(api.getWidth(), api.getHeight()) / 2;\n      var removeClipPath = zrUtil.bind(group.removeClipPath, group);\n      group.setClipPath(this._createClipPath(shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel, isFirstRender));\n    } else {\n      // clipPath is used in first-time animation, so remove it when otherwise. See: #8994\n      group.removeClipPath();\n    }\n\n    this._data = data;\n  },\n  dispose: function () {},\n  _createClipPath: function (cx, cy, r, startAngle, clockwise, cb, seriesModel, isFirstRender) {\n    var clipPath = new graphic.Sector({\n      shape: {\n        cx: cx,\n        cy: cy,\n        r0: 0,\n        r: r,\n        startAngle: startAngle,\n        endAngle: startAngle,\n        clockwise: clockwise\n      }\n    });\n    var initOrUpdate = isFirstRender ? graphic.initProps : graphic.updateProps;\n    initOrUpdate(clipPath, {\n      shape: {\n        endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2\n      }\n    }, seriesModel, cb);\n    return clipPath;\n  },\n\n  /**\n   * @implement\n   */\n  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});\nvar _default = PieView;\nmodule.exports = _default;"],"names":["echarts","visualSymbol","layoutPoints","dataSample","registerVisual","registerLayout","registerProcessor","PRIORITY","PROCESSOR","STATISTIC","_config","createListFromArray","__DEV__","SeriesModel","_default","extend","type","dependencies","getInitialData","option","ecModel","this","getSource","useEncodeDefaulter","defaultOption","zlevel","z","coordinateSystem","legendHoverLink","hoverAnimation","clip","label","position","lineStyle","width","step","smooth","smoothMonotone","symbol","symbolSize","symbolRotate","showSymbol","showAllSymbol","connectNulls","sampling","animationEasing","progressive","hoverLayerThreshold","Infinity","module","exports","zrUtil","_bbox","fromPoints","SymbolDraw","SymbolClz","lineAnimationDiff","graphic","modelUtil","_poly","Polyline","Polygon","ChartView","_helper","prepareDataCoordInfo","getStackedOnPoint","_createClipPathFromCoordSys","createGridClipPath","createPolarClipPath","isPointsSame","points1","points2","length","i","p1","p2","getBoundingDiff","min1","max1","min2","max2","Math","max","abs","getSmooth","getStackedOnPoints","coordSys","data","dataCoordInfo","valueDim","points","idx","len","count","push","turnPointsIntoStep","stepTurnAt","baseAxis","getBaseAxis","baseIndex","dim","stepPoints","nextPt","pt","stepPt","middle","stepPt2","getVisualGradient","visualMetaList","getVisual","coordDim","visualMeta","dimIndex","dimension","dimName","dimensions","dimInfo","getDimensionInfo","axis","getAxis","colorStops","map","stops","stop","coord","toGlobalCoord","dataToCoord","value","color","stopLen","outerColors","slice","reverse","tinyExtent","minCoord","maxCoord","coordSpan","each","offset","unshift","gradient","LinearGradient","getIsIgnoreFunc","seriesModel","get","isAuto","categoryAxis","getAxesByScale","canShowAllSymbolForCategory","categoryDataDim","mapDimension","labelMap","getViewLabels","labelItem","tickValue","dataIndex","hasOwnProperty","axisExtent","getExtent","availSize","scale","isNaN","dataLen","round","getSymbolSize","isHorizontal","createLineClipPath","hasAnimation","clipPath","rectShape","shape","expandSize","height","y","x","init","lineGroup","Group","symbolDraw","group","add","_symbolDraw","_lineGroup","render","api","getData","lineStyleModel","getModel","areaStyleModel","mapArray","getItemLayout","isCoordSysPolar","prevCoordSys","_coordSys","polyline","_polyline","polygon","_polygon","isAreaChart","isEmpty","valueOrigin","stackedOnPoints","isIgnoreFunc","oldData","_data","eachItemGraphicEl","el","__temp","remove","setItemGraphicEl","clipShapeForSymbol","getArea","r0","r1","_clipShapeForSymbol","_step","_newPolygon","setClipPath","updateData","isIgnore","clipShape","stopAnimation","_stackedOnPoints","_points","_updateAnimation","setShape","_newPolyline","visualColor","useStyle","defaults","getLineStyle","fill","stroke","lineJoin","stackedOnSeries","getCalculationInfo","stackedOnSmooth","getAreaStyle","opacity","_valueOrigin","dispose","highlight","payload","queryDataIndex","Array","getItemGraphicEl","contain","setZ","ignore","stopSymbolAnimation","prototype","call","downplay","silent","z2","hostModel","diff","current","stackedOnCurrent","next","stackedOnNext","__points","updateProps","updatedDataInfo","diffStatus","status","cmd","idx1","ptIdx","animators","during","attr","removeAll","_dataStackHelper","isDimensionStacked","_util","stacked","valueAxis","getOtherAxis","valueStart","getValueStart","baseAxisDim","valueAxisDim","baseDim","baseDataOffset","dims","stackResultDim","dataDimsForPoint","stackedOverDimension","extent","NaN","stackedData","dataToPoint","diffData","newData","diffResult","update","newIdx","oldIdx","execute","oldStackedOnPoints","newStackedOnPoints","oldCoordSys","newCoordSys","oldValueOrigin","newValueOrigin","currPoints","nextPoints","currStackedPoints","nextStackedPoints","sortedIndices","rawIndices","newDataOldCoordInfo","oldDataNewCoordInfo","diffItem","pointAdded","currentPt","getRawIndex","rawIndex","sort","a","b","sortedCurrPoints","sortedNextPoints","sortedCurrStackedPoints","sortedNextStackedPoints","sortedStatus","Path","vec2","fixClipWithShadow","vec2Min","min","vec2Max","scaleAndAdd","v2Copy","copy","v","cp0","cp1","isPointNull","p","drawSegment","ctx","start","segLen","allLen","dir","smoothMin","smoothMax","drawMono","apply","arguments","drawNonMono","prevIdx","k","prevP","ctrlLen","bezierCurveTo","lineTo","nextIdx","nextP","ratioNextSeg","lenPrevSeg","lenNextSeg","sub","dist","getBoundingBox","smoothConstraint","ptMin","ptMax","style","brush","buildPath","result","bbox","stackedOnBBox","closePath","linesLayout","linesVisual","List","concatArray","mergeAll","_format","encodeHTML","Uint32Arr","Uint32Array","Float64Arr","Float64Array","compatEc2","seriesOpt","itemOpt","coords","target","name","fromName","toName","LinesSeries","visualColorAccessPath","_processFlatCoordsArray","_flatCoords","flatCoords","_flatCoordsOffset","flatCoordsOffset","Float32Array","superApply","mergeOption","appendData","params","getRawData","_getCoordsFromItemModel","itemModel","getItemModel","getShallow","getLineCoordsCount","getLineCoords","out","startOffset","coordsOffsetAndLenStorage","coordsStorage","coordsCursor","offsetCursor","dataCount","buffer","lineData","hasItemOption","initData","dataItem","formatTooltip","html","join","preventIncremental","getProgressive","large","getProgressiveThreshold","progressiveThreshold","xAxisIndex","yAxisIndex","geoIndex","effect","show","period","constantSpeed","loop","trailLength","largeThreshold","LineDraw","EffectLine","Line","EffectPolyline","LargeLineDraw","createClipPath","extendChartView","lineDraw","_updateLineDraw","zr","getZr","isSvg","painter","getType","getLayer","clear","_lastZlevel","configLayer","motionBlur","_showEffect","lastFrameAlpha","removeClipPath","_finished","incrementalPrepareRender","incrementalPrepareUpdate","_clearLayer","incrementalRender","taskParams","_lineDraw","incrementalUpdate","end","updateTransform","pipelineContext","progressiveRender","res","reset","progress","updateLayout","hasEffect","isPolyline","isLargeDraw","_hasEffet","_isPolyline","_isLargeDraw","createRenderPlanner","seriesType","plan","isLarge","lineCoords","segCount","totalCoordsCount","setLayout","pts","j","curveness","setItemLayout","normalize","opacityQuery","split","symbolType","dataEach","setItemVisual","setVisual","mapSymbolLayout","mapVisual","mapDataStatistic","backwardCompat","createDataSelectAction","registerPreprocessor","event","method","createListSimply","addCommas","dataSelectableMixin","_dataProvider","retrieveRawAttr","geoSourceManager","_sourceHelper","makeSeriesEncodeForNameBased","MapSeries","layoutMode","needsDrawMap","seriesGroup","coordDimensions","encodeDefaulter","curry","dataNameMap","createHashMap","selectTargetList","toAppendNames","getName","set","selected","geoSource","load","getMapType","nameMap","nameProperty","regions","region","updateSelectedMap","appendValues","getHostGeoModel","dependentModels","geo","getRawValue","getRegionModel","regionName","indexOfName","multipleSeries","dataType","renderMode","formattedValue","seriesNames","otherIndex","originalData","newLine","getTooltipPosition","getRegion","center","setZoom","zoom","setCenter","left","top","aspectScale","showLegendSymbol","dataRangeHoverLink","boundingCoords","scaleLimit","itemStyle","borderWidth","borderColor","areaColor","emphasis","mixin","MapDraw","HIGH_DOWN_PROP","RECORD_VERSION_PROP","mapModel","from","uid","componentType","seriesId","id","mapDraw","_mapDraw","draw","getComponent","_renderSymbols","originalDataIndex","layout","point","circle","Circle","cx","cy","r","Z2_EMPHASIS_LIFT","fullData","mainSeries","fullIndex","labelModel","hoverLabelModel","regionGroup","normalText","retrieve2","getFormattedLabel","emphasisText","highDownRecord","recordVersion","random","onEmphasis","onRegionHighDown","onNormal","on","enterRegionHighDown","toHighOrDown","extendFrom","setTextStyle","text","isRectText","useInsideStyle","__mapOriginalZ2","textPosition","dirty","mapSeries","series","mapType","mapLocation","dataStatistics","datas","statisticType","mapKey","sum","seriesGroups","eachSeriesByType","hostGeoModel","key","seriesList","setData","cloneShallow","processedMapType","mapSymbolOffsets","subMapSeries","showLabel","colorList","itemStyleModel","seriesIndex","parallelVisual","source","setEncodeAndDimensions","getRawIndicesByActiveState","activeState","indices","eachActiveState","theActiveState","parallelIndex","inactiveOpacity","activeOpacity","encodeDefine","parallelModel","axisDim","dataDimIndex","convertDimNameToNumber","replace","DEFAULT_SMOOTH","ParallelView","_dataGroup","_initialized","dataGroup","seriesScope","makeSeriesScope","newDataIndex","line","addEl","updateElCommon","oldDataIndex","createLinePoints","animationModel","animation","createGridClipShape","setTimeout","incremental","cb","model","rect","getRect","rectEl","Rect","initProps","isEmptyValue","elStyle","getItemVisual","val","axisType","opacityAccessPath","globalColors","opacityMap","normal","active","inactive","itemOpacity","_barGrid","_number","getPercentWithPrecision","LegendVisualProvider","PieSeries","extendSeriesModel","legendVisualProvider","bind","_createSelectableList","_defaultLabelLine","newOption","superCall","targetList","getDataParams","valueList","percent","$vars","defaultEmphasis","labelLineNormalOpt","labelLine","labelLineEmphasisOpt","radius","clockwise","startAngle","minAngle","minShowLabelAngle","selectedOffset","hoverOffset","avoidLabelOverlap","percentPrecision","stillShowZeroSum","right","bottom","rotate","alignTo","margin","bleedMargin","distanceToLabelLine","length2","animationType","animationTypeUpdate","updateDataSelected","dispatchAction","toggleItemSelected","isSelected","midAngle","endAngle","dx","cos","dy","sin","animate","when","PiePiece","sector","Sector","Text","piePieceProto","firstCreate","childAt","labelText","sectorShape","getItemStyle","hoverStyle","cursorStyle","withAnimation","_updateLabel","highDownOnUpdate","fromState","toState","isAnimationEnabled","hoverIgnore","animateTo","normalIgnore","setHoverStyle","labelLayout","targetLineShape","linePoints","targetTextStyle","rotation","origin","labelHoverModel","labelLineModel","labelLineHoverModel","setLabelStyle","labelFetcher","labelDataIndex","defaultText","autoColor","inside","textAlign","textVerticalAlign","verticalAlign","setStyle","inherits","PieView","sectorGroup","_sectorGroup","isFirstRender","onSectorClick","selectedMode","piePiece","eachChild","child","off","s","getWidth","getHeight","_createClipPath","initOrUpdate","PI","containPoint","itemLayout","sqrt"],"sourceRoot":""}